#!/bin/sh /etc/rc.common # Copyright (C) 2016 OpenWrt.org START=50 USE_PROCD=1 validate_section_addrwatch() { uci_validate_section addrwatch addrwatch "${1}" \ 'disabled:bool:0' \ 'interface:list(string):lan' \ 'syslog:bool:1' \ 'output:string' \ 'quiet:bool:0' \ 'verbose:bool:0' \ 'ipv4only:bool:0' \ 'ipv6only:bool:0' \ 'blacklist:list(or(ip4addr,ip6addr))' \ 'hashsize:range(1,65536):1024'\ 'ratelimit:integer:3600' return $? } start_instance() { local cfg="$1" local disabled interface syslog output quiet verbose ipv4only ipv6only local blacklist hashsize ratelimit local netdevs="" validate_section_addrwatch "${cfg}" || { echo "validation of config $cfg failed" return 1 } [ $disabled -ne 0 ] && 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 [ "${syslog}" -eq 1 ] && procd_append_param command --syslog [ -n "${output}" ] && procd_append_param command --output "$output" [ "$quiet" -eq 1 ] && procd_append_param command --quiet [ "$verbose" -eq 1 ] && procd_append_param command --verbose [ "$ipv4only" -eq 1 ] && procd_append_param command --ipv4only [ "$ipv6only" -eq 1 ] && procd_append_param command --ipv6only [ -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 } start_service() { . /lib/functions/network.sh config_load 'addrwatch' config_foreach start_instance 'addrwatch' } service_triggers() { procd_add_reload_trigger 'addrwatch' }