| #!/bin/sh /etc/rc.common |
| # Copyright (C) 2016 OpenWrt.org |
| |
| START=50 |
| USE_PROCD=1 |
| |
| validate_section_addrwatch() { |
| uci_load_validate addrwatch addrwatch "$1" "$2" \ |
| 'enabled:bool:0' \ |
| 'interface:list(string):lan' \ |
| 'syslog:bool:0' \ |
| 'output:string' \ |
| 'verbose:bool:0' \ |
| 'ipv4only:bool:0' \ |
| 'ipv6only:bool:0' \ |
| 'blacklist:list(or(ip4addr,ip6addr))' \ |
| 'hashsize:range(1,65536):1'\ |
| 'ratelimit:integer:0' |
| } |
| |
| start_instance() { |
| local cfg="$1" |
| local netdevs="" |
| |
| [ "$2" = 0 ] || { |
| echo "validation of config $cfg failed" |
| return 1 |
| } |
| [ $enabled -eq 1 ] || return 1 |
| |
| for iface in $interface; do |
| local netdev |
| network_get_physdev netdev "$iface" |
| append netdevs "$netdev" |
| done |
| |
| procd_open_instance |
| procd_set_param command /usr/sbin/addrwatch --quiet |
| [ -n "$output" ] && procd_append_param command "--output=$output" |
| [ "$verbose" -eq 1 ] && procd_append_param command "--verbose" |
| [ "$ipv4only" -eq 1 ] && procd_append_param command "--ipv4-only" |
| [ "$ipv6only" -eq 1 ] && procd_append_param command "--ipv6-only" |
| [ -n "$hashsize" ] && procd_append_param command "--hashsize=$hashsize" |
| [ -n "$ratelimit" ] && procd_append_param command "--ratelimit=$ratelimit" |
| for blitem in $blacklist; do |
| procd_append_param command "--blacklist=$blitem" |
| done |
| procd_append_param command $netdevs |
| procd_set_param netdev $netdevs |
| procd_set_param respawn |
| procd_open_trigger |
| for iface in $interface; do |
| procd_add_interface_trigger "interface.*" $iface /etc/init.d/addrwatch reload |
| done |
| procd_close_trigger |
| procd_close_instance |
| |
| [ "$syslog" -eq 1 ] && { |
| if [ -x /usr/sbin/addrwatch_syslog ]; then |
| procd_open_instance |
| procd_set_param command /usr/sbin/addrwatch_syslog |
| procd_set_param respawn |
| procd_close_instance |
| else |
| echo "Cannot find /usr/sbin/addrwatch_syslog" >&2 |
| echo "Install the addrwatch-syslog package to enable syslog output" >&2 |
| fi |
| } |
| } |
| |
| start_service() { |
| . /lib/functions/network.sh |
| config_load 'addrwatch' |
| config_foreach validate_section_addrwatch 'addrwatch' start_instance |
| } |
| |
| service_triggers() { |
| procd_add_reload_trigger 'addrwatch' |
| procd_add_validation validate_section_addrwatch |
| } |