X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=net%2Fvrrpd%2Ffiles%2Fvrrpd.init;h=02ce5a34196fa73222e33f589c7d29f45f938525;hb=e82916f0a1841c6af41790e73afc15a63e770fbc;hp=33ee3092e1b4b9ce232f2bc698842b1929e1d057;hpb=25a812b377c28f6e8b085607ce6f15aaf1f940ae;p=packages.git diff --git a/net/vrrpd/files/vrrpd.init b/net/vrrpd/files/vrrpd.init index 33ee3092e..02ce5a341 100644 --- a/net/vrrpd/files/vrrpd.init +++ b/net/vrrpd/files/vrrpd.init @@ -1,18 +1,95 @@ #!/bin/sh /etc/rc.common -# Copyright (C) 2006 OpenWrt.org +# Copyright (C) 2006-2011 OpenWrt.org + START=50 -BIN=vrrpd -DEFAULT=/etc/default/$BIN -RUN_D=/var/run -PID_F=$RUN_D/$BIN_${IF}_${ID}.pid +append_list_item() { + local val="$1" + local var="$2" + append "$var" "$val" +} + +append_bool() { + local var="$1" + local section="$2" + local option="$3" + local value="$4" + local _val + config_get_bool _val "$section" "$option" 0 + [ $_val -gt 0 ] && append "$var" "$value" +} + +append_string() { + local var="$1" + local section="$2" + local option="$3" + local val="$4" + local _val + config_get _val "$section" "$option" + [ -n "$_val" ] && append "$var" "$val $_val" +} + +config_get_ifname() { + local var="$1" + local section="$2" + local option="$3" + local val="$4" + local _val + config_get _val "$section" "$option" "$val" + config_get "$var" "$_val" 'ifname' "$_val" +} + +section_enabled() { + local enabled + config_get_bool enabled "$1" 'enabled' 0 + [ $enabled -gt 0 ] +} + +start_instance() { + local section="$1" + local id + local if + local args + + section_enabled "$section" || return 1 + + config_get id "$section" 'virtual_id' '1' + config_get_ifname if "$section" 'interface' 'lan' + + args="-v $id -i $if" + append_string args "$section" 'delay' '-d' + append_string args "$section" 'priority' '-p' + append_bool args "$section" 'no_virtual_mac' '-n' + config_list_foreach "$section" 'virtual_ip' append_list_item args + + SERVICE_PID_FILE="/var/run/vrrpd_${if}_${id}.pid" + service_start /usr/sbin/vrrpd $args +} + +stop_instance() { + local section="$1" + local id + local if + + section_enabled "$section" || return 1 + + config_get id "$section" 'virtual_id' '1' + config_get_ifname if "$section" 'interface' 'lan' + + SERVICE_PID_FILE="/var/run/vrrpd_${if}_${id}.pid" + service_stop /usr/sbin/vrrpd +} start() { - [ -f $DEFAULT ] && . $DEFAULT - $BIN $OPTIONS + include /lib/network + scan_interfaces + config_load 'vrrpd' + config_foreach start_instance 'vrrpd' } stop() { - [ -f $PID_F ] && kill $(cat $PID_F) >/dev/null 2>&1 + include /lib/network + scan_interfaces + config_load 'vrrpd' + config_foreach stop_instance 'vrrpd' } -