+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
+}