ipset 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #! /bin/bash
  2. #
  3. ### BEGIN INIT INFO
  4. # Provides: ipset
  5. # Required-Start: $local_fs $network $remote_fs $syslog
  6. # Required-Stop: $local_fs $network $remote_fs $syslog
  7. # Default-Start: 2 3 4 5
  8. # Default-Stop: 0 1 6
  9. # Short-Description: start and stop the ipset lists
  10. # Description: start and stop the ipset lists
  11. ### END INIT INFO
  12. if [ -r "/lib/lsb/init-functions" ]; then
  13. . /lib/lsb/init-functions
  14. else
  15. log_success_msg() {
  16. echo "$@"
  17. }
  18. log_warning_msg() {
  19. echo "$@" >&2
  20. }
  21. log_failure_msg() {
  22. echo "$@" >&2
  23. }
  24. fi
  25. IPSET='/sbin/ipset'
  26. IPSET_DIR='/etc/ipset.d'
  27. # if the ip configuration utility isn't around we can't function.
  28. [ -x ${IPSET} ] || exit 1
  29. stop_ipset() {
  30. ls -x -1 "${IPSET_DIR}/"*.conf | while read IPSET_FILE; do
  31. ipset_name=`grep -P "^create\s+(\S+)\s+" "${IPSET_FILE}" | awk '{ print $2 }' | sed 's/_new//'`
  32. [ -z "${ipset_name}" ] && continue
  33. echo -n $"Destroy ${ipset_name} ipset"
  34. ${IPSET} destroy ${ipset_name} >/dev/null 2>&1
  35. echo
  36. done
  37. return 0
  38. }
  39. start_ipset() {
  40. ls -x -1 "${IPSET_DIR}/"*.conf | while read IPSET_FILE; do
  41. ipset_name=`grep -P "^create\s+(\S+)\s+" "${IPSET_FILE}" | awk '{ print $2 }' | sed 's/_new//'`
  42. if [ ! -e "${IPSET_DIR}/${ipset_name}.ipset" ]; then
  43. cat "${IPSET_FILE}" | sed 's/_new//' >"${IPSET_DIR}/${ipset_name}.ipset"
  44. fi
  45. echo -n $"Load ${ipset_name} ipset"
  46. ${IPSET} restore -file "${IPSET_DIR}/${ipset_name}.ipset" >/dev/null 2>&1
  47. echo
  48. done
  49. return 0
  50. }
  51. save_ipset() {
  52. ls -x -1 "${IPSET_DIR}/"*.conf | while read IPSET_FILE; do
  53. ipset_name=`grep -P "^create\s+(\S+)\s+" "${IPSET_FILE}" | awk '{ print $2 }' | sed 's/_new//'`
  54. [ -z "${ipset_name}" ] && continue
  55. echo -n $"Save ${ipset_name} ipset"
  56. ${IPSET} save ${ipset_name} -file "${IPSET_DIR}/${ipset_name}.ipset" >/dev/null 2>&1
  57. echo
  58. done
  59. return 0
  60. }
  61. # See how we were called.
  62. case "$1" in
  63. start)
  64. start_ipset
  65. RET=$?
  66. ;;
  67. stop)
  68. stop_ipset
  69. RET=$?
  70. ;;
  71. save)
  72. save_ipset
  73. RET=$?
  74. ;;
  75. restart|reload)
  76. stop_ipset
  77. start_ipset
  78. RET=$?
  79. ;;
  80. *)
  81. echo $"Usage: $0 {start|stop|restart|reload}"
  82. exit 1
  83. esac
  84. exit ${RET}