ipsec.init 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #!/bin/sh /etc/rc.common
  2. START=65
  3. config_cb() {
  4. local cfg="$CONFIG_SECTION"
  5. local cfgt
  6. config_get cfgt "$cfg" TYPE
  7. case "$cfgt" in
  8. device)
  9. config_get IPSEC_RESET_BUTTON $cfg reset_button
  10. config_get IPSEC_STATUS_LED_START $cfg status_start
  11. config_get IPSEC_STATUS_LED_VALID $cfg status_valid
  12. ;;
  13. filter)
  14. config_get IPSEC_UPDOWN_RULE_IN $cfg rule_in
  15. config_get IPSEC_UPDOWN_DEST_IN $cfg dest_in
  16. config_get IPSEC_UPDOWN_RULE_OUT $cfg rule_out
  17. config_get IPSEC_UPDOWN_DEST_OUT $cfg dest_out
  18. ;;
  19. forward)
  20. config_get IPSEC_UPDOWN_FWD_RULE_IN $cfg rule_in
  21. config_get IPSEC_UPDOWN_FWD_DEST_IN $cfg dest_in
  22. config_get IPSEC_UPDOWN_FWD_RULE_OUT $cfg rule_out
  23. config_get IPSEC_UPDOWN_FWD_DEST_OUT $cfg dest_out
  24. ;;
  25. *)
  26. ;;
  27. esac
  28. }
  29. config_load ipsec
  30. export IPSEC_RESET_BUTTON
  31. export IPSEC_STATUS_LED_START
  32. export IPSEC_STATUS_LED_VALID
  33. export IPSEC_UPDOWN_RULE_IN
  34. export IPSEC_UPDOWN_DEST_IN
  35. export IPSEC_UPDOWN_RULE_OUT
  36. export IPSEC_UPDOWN_DEST_OUT
  37. export IPSEC_UPDOWN_FWD_RULE_IN
  38. export IPSEC_UPDOWN_FWD_DEST_IN
  39. export IPSEC_UPDOWN_FWD_RULE_OUT
  40. export IPSEC_UPDOWN_FWD_DEST_OUT
  41. start() {
  42. [ -f /etc/ipsec.conf ] || exit
  43. [ -e /var/run/starter.pid ] && exit
  44. /usr/sbin/ipsec _showstatus start
  45. # stuff the dnsmasq cache in case dns is on our own subnet
  46. for peer in `grep left= /etc/ipsec.conf | \
  47. cut -f 1 -d% | cut -f 2 -d=` ; do
  48. ping -c 1 $peer > /dev/null 2>&1
  49. done
  50. /usr/sbin/ipsec start || exit
  51. # work around broken routing behavior:
  52. # a route to the local wan segment will appear
  53. # the need was removed in the patched _updown script
  54. while ! route -n | grep -q ipsec ; do sleep 1 ; done
  55. defint=`route -n | awk '/^0.0.0.0/{print $8}'`
  56. defnet=`route -n | grep $defint | awk '!/^0.0.0.0/{print $1}'`
  57. dnmask=`route -n | grep $defint | awk '!/^0.0.0.0/{print $3}'`
  58. tundev=`route -n | grep $defnet | awk '/ipsec/{print $8}'`
  59. route del -net $defnet netmask $dnmask dev $tundev
  60. }
  61. stop() {
  62. /usr/sbin/ipsec stop 2> /dev/null
  63. # wait until the shutdown actually happens
  64. while [ -e /var/run/starter.pid ] ; do
  65. if [ -d /proc/`cat /var/run/starter.pid` ] ; then
  66. sleep 1
  67. else
  68. rm /var/run/starter.pid
  69. fi
  70. done
  71. # kill any lingering processes
  72. while ps auxww | grep -q ipsec | grep -v init.d; do
  73. kill `ps auxww | grep -v init.d | awk '/\/ipsec\//{print $1}'` 2> /dev/null
  74. sleep 1
  75. done
  76. ipsec _showstatus stop
  77. }