X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=net%2Fbabel%2Ffiles%2Fbabeld.init;h=43514a2ca3459d90699a32384503d49da60875fb;hb=122c833d1e4383394d9f65d367bc6c3c833fd8bb;hp=a7e45875e5b97bb71c184d7c14474c6084a0c534;hpb=f4b5d8467f8eec1e41b8fc2d5cd1c81a64f6b4ce;p=packages.git diff --git a/net/babel/files/babeld.init b/net/babel/files/babeld.init index a7e45875e..43514a2ca 100755 --- a/net/babel/files/babeld.init +++ b/net/babel/files/babeld.init @@ -2,37 +2,143 @@ START=70 -babel_addif() { - config_get ifname $1 ifname +PID_F='/var/run/babeld.pid' +EXTRA_COMMANDS="status" +EXTRA_HELP=" status Dump Babel's table to the log file." + +listen_ifname() { + local ifname=$(uci_get_state network "$1" ifname "$1") + local switch="$2" + append args "$switch $ifname" append interfaces "$ifname" } +append_ifname() { + local section="$1" + local option="$2" + local switch="$3" + local _name + config_get _name "$section" "$option" + [ -z "$_name" ] && return 0 + local ifname=$(uci_get_state network "$_name" ifname "$_name") + append args "$switch $ifname" +} + +append_bool() { + local section="$1" + local option="$2" + local value="$3" + local _loctmp + config_get_bool _loctmp "$section" "$option" 0 + [ "$_loctmp" -gt 0 ] && append args "$value" +} + +append_switch() { + local value="$1" + local switch="$2" + append args "$switch $value" +} + +append_parm() { + local section="$1" + local option="$2" + local switch="$3" + local _loctmp + config_get _loctmp "$section" "$option" + [ -z "$_loctmp" ] && return 0 + append args "$switch $_loctmp" +} + +babel_filter() { + local cfg="$1" + local _loctmp + + local _ignored + config_get_bool _ignored "$cfg" 'ignore' 0 + [ "$_ignored" -eq 1 ] && return 0 + + append args "-C '" + + append_parm "$cfg" 'type' '' + + append_bool "$cfg" 'local' 'local' + + append_parm "$cfg" 'ip' 'ip' + append_parm "$cfg" 'eq' 'eq' + append_parm "$cfg" 'le' 'le' + append_parm "$cfg" 'ge' 'ge' + append_parm "$cfg" 'neigh' 'neigh' + append_parm "$cfg" 'id' 'id' + append_parm "$cfg" 'proto' 'proto' + + append_ifname "$cfg" 'if' 'if' + + append_parm "$cfg" 'action' '' + + append args ' ' "'" +} + +babel_addif() { + local cfg="$1" + + local _ignored + config_get_bool _ignored "$cfg" 'ignore' 0 + [ "$_ignored" -eq 1 ] && return 0 + + listen_ifname "$cfg" "-C 'interface" + + append_parm "$cfg" 'wired' 'wired' + append_parm "$cfg" 'link_quality' 'link-quality' + append_parm "$cfg" 'split_horizon' 'split-horizon' + append_parm "$cfg" 'rxcost' 'rxcost' + append_parm "$cfg" 'hello_interval' 'hello-interval' + append_parm "$cfg" 'update_interval' 'update-interval' + + append args ' ' "'" +} + babel_config() { local cfg="$1" - interfaces= - config_list_foreach "$cfg" interface babel_addif - pidfile=/var/run/babeld-"$cfg".pid - [ -z "$interfaces" ] && return 0 - if [ -e $pidfile ] ; then - echo "$pidfile exists -- not starting babel." >&2 - else - /usr/sbin/babeld -D -I $pidfile $interfaces - fi + + append_bool "$cfg" 'carrier_sense' '-l' + append_bool "$cfg" 'assume_wireless' '-w' + append_bool "$cfg" 'no_split_horizon' '-s' + append_bool "$cfg" 'keep_unfeasible' '-u' + append_bool "$cfg" 'random_router_id' '-r' + + append_parm "$cfg" 'multicast_address' '-m' + append_parm "$cfg" 'port' '-p' + append_parm "$cfg" 'state_file' '-S' + append_parm "$cfg" 'hello_interval' '-h' + append_parm "$cfg" 'wired_hello_interval' '-H' + append_parm "$cfg" 'diversity' '-z' + append_parm "$cfg" 'smoothing_half_time' '-M' + append_parm "$cfg" 'kernel_priority' '-k' + append_parm "$cfg" 'duplication_priority' '-A' + append_parm "$cfg" 'debug' '-d' + append_parm "$cfg" 'local_server' '-g' + append_parm "$cfg" 'export_table' '-t' + config_list_foreach "$cfg" 'import_table' append_switch '-T' + append_parm "$cfg" 'conf_file' '-c' + append_parm "$cfg" 'log_file' '-L' } start() { - if [ -x /etc/init.d/ahcpd ] && /etc/init.d/ahcpd enabled; then - echo 'Not starting babel -- will be started by ahcpd.' - exit 0 - fi - include /lib/network - scan_interfaces - config_load babeld mkdir -p /var/lib - config_foreach babel_config babeld + config_load babeld + unset args + unset interfaces + config_foreach babel_config general + config_foreach babel_addif interface + config_foreach babel_filter filter + [ -z "$interfaces" ] && return 0 + eval "/usr/sbin/babeld -D -I $PID_F $args $interfaces" } stop() { - kill $(cat /var/run/babeld-*.pid) - rm -f /var/run/babeld-*.pid + [ -f $PID_F ] && kill $(cat $PID_F) +} + +status() { + [ -f $PID_F ] && kill -USR1 $(cat $PID_F) }