You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
1.9 KiB

  1. #!/bin/sh /etc/rc.common
  2. # Copyright (C) 2016 OpenWrt.org
  3. START=50
  4. USE_PROCD=1
  5. validate_section_addrwatch() {
  6. uci_load_validate addrwatch addrwatch "$1" "$2" \
  7. 'disabled:bool:0' \
  8. 'interface:list(string):lan' \
  9. 'syslog:bool:1' \
  10. 'output:string' \
  11. 'quiet:bool:0' \
  12. 'verbose:bool:0' \
  13. 'ipv4only:bool:0' \
  14. 'ipv6only:bool:0' \
  15. 'blacklist:list(or(ip4addr,ip6addr))' \
  16. 'hashsize:range(1,65536):1024'\
  17. 'ratelimit:integer:3600'
  18. }
  19. start_instance() {
  20. local cfg="$1"
  21. local netdevs=""
  22. [ "$2" = 0 ] || {
  23. echo "validation of config $cfg failed"
  24. return 1
  25. }
  26. [ $disabled -ne 0 ] && return 1
  27. for iface in $interface; do
  28. local netdev
  29. network_get_physdev netdev "$iface"
  30. append netdevs "$netdev"
  31. done
  32. procd_open_instance
  33. procd_set_param command /usr/sbin/addrwatch
  34. [ "$syslog" -eq 1 ] && procd_append_param command --syslog
  35. [ -n "$output" ] && procd_append_param command --output "$output"
  36. [ "$quiet" -eq 1 ] && procd_append_param command --quiet
  37. [ "$verbose" -eq 1 ] && procd_append_param command --verbose
  38. [ "$ipv4only" -eq 1 ] && procd_append_param command --ipv4only
  39. [ "$ipv6only" -eq 1 ] && procd_append_param command --ipv6only
  40. [ -n "$hashsize" ] && procd_append_param command --hashsize "$hashsize"
  41. [ -n "$ratelimit" ] && procd_append_param command --ratelimit "$ratelimit"
  42. for blitem in $blacklist; do
  43. procd_append_param command "--blacklist=$blitem"
  44. done
  45. procd_append_param command $netdevs
  46. procd_set_param netdev $netdevs
  47. procd_set_param respawn
  48. procd_open_trigger
  49. for iface in $interface; do
  50. procd_add_interface_trigger "interface.*" $iface /etc/init.d/addrwatch reload
  51. done
  52. procd_close_trigger
  53. procd_close_instance
  54. }
  55. start_service() {
  56. . /lib/functions/network.sh
  57. config_load 'addrwatch'
  58. config_foreach validate_section_addrwatch 'addrwatch' start_instance
  59. }
  60. service_triggers() {
  61. procd_add_reload_trigger 'addrwatch'
  62. procd_add_validation validate_section_addrwatch
  63. }