| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #!/bin/sh /etc/rc.common
- START=65
- config_cb() {
- local cfg="$CONFIG_SECTION"
- local cfgt
- config_get cfgt "$cfg" TYPE
- case "$cfgt" in
- device)
- config_get IPSEC_RESET_BUTTON $cfg reset_button
- config_get IPSEC_STATUS_LED_START $cfg status_start
- config_get IPSEC_STATUS_LED_VALID $cfg status_valid
- ;;
- filter)
- config_get IPSEC_UPDOWN_RULE_IN $cfg rule_in
- config_get IPSEC_UPDOWN_DEST_IN $cfg dest_in
- config_get IPSEC_UPDOWN_RULE_OUT $cfg rule_out
- config_get IPSEC_UPDOWN_DEST_OUT $cfg dest_out
- ;;
- forward)
- config_get IPSEC_UPDOWN_FWD_RULE_IN $cfg rule_in
- config_get IPSEC_UPDOWN_FWD_DEST_IN $cfg dest_in
- config_get IPSEC_UPDOWN_FWD_RULE_OUT $cfg rule_out
- config_get IPSEC_UPDOWN_FWD_DEST_OUT $cfg dest_out
- ;;
- *)
- ;;
- esac
- }
- config_load ipsec
- export IPSEC_RESET_BUTTON
- export IPSEC_STATUS_LED_START
- export IPSEC_STATUS_LED_VALID
- export IPSEC_UPDOWN_RULE_IN
- export IPSEC_UPDOWN_DEST_IN
- export IPSEC_UPDOWN_RULE_OUT
- export IPSEC_UPDOWN_DEST_OUT
- export IPSEC_UPDOWN_FWD_RULE_IN
- export IPSEC_UPDOWN_FWD_DEST_IN
- export IPSEC_UPDOWN_FWD_RULE_OUT
- export IPSEC_UPDOWN_FWD_DEST_OUT
- start() {
- [ -f /etc/ipsec.conf ] || exit
- [ -e /var/run/starter.pid ] && exit
- /usr/sbin/ipsec _showstatus start
-
- # stuff the dnsmasq cache in case dns is on our own subnet
- for peer in `grep left= /etc/ipsec.conf | \
- cut -f 1 -d% | cut -f 2 -d=` ; do
- ping -c 1 $peer > /dev/null 2>&1
- done
-
- /usr/sbin/ipsec start || exit
-
- # work around broken routing behavior:
- # a route to the local wan segment will appear
- # the need was removed in the patched _updown script
- while ! route -n | grep -q ipsec ; do sleep 1 ; done
- defint=`route -n | awk '/^0.0.0.0/{print $8}'`
- defnet=`route -n | grep $defint | awk '!/^0.0.0.0/{print $1}'`
- dnmask=`route -n | grep $defint | awk '!/^0.0.0.0/{print $3}'`
- tundev=`route -n | grep $defnet | awk '/ipsec/{print $8}'`
-
- route del -net $defnet netmask $dnmask dev $tundev
- }
- stop() {
- /usr/sbin/ipsec stop 2> /dev/null
- # wait until the shutdown actually happens
- while [ -e /var/run/starter.pid ] ; do
- if [ -d /proc/`cat /var/run/starter.pid` ] ; then
- sleep 1
- else
- rm /var/run/starter.pid
- fi
- done
- # kill any lingering processes
- while ps auxww | grep -q ipsec | grep -v init.d; do
- kill `ps auxww | grep -v init.d | awk '/\/ipsec\//{print $1}'` 2> /dev/null
- sleep 1
- done
- ipsec _showstatus stop
- }
|