packages/vrrpd: use uci config
[packages.git] / net / vrrpd / files / vrrpd.init
index 33ee309..02ce5a3 100644 (file)
@@ -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'
 }
-