02ce5a34196fa73222e33f589c7d29f45f938525
[packages.git] / net / vrrpd / files / vrrpd.init
1 #!/bin/sh /etc/rc.common
2 # Copyright (C) 2006-2011 OpenWrt.org
3
4 START=50
5
6 append_list_item() {
7         local val="$1"
8         local var="$2"
9         append "$var" "$val"
10 }
11
12 append_bool() {
13         local var="$1"
14         local section="$2"
15         local option="$3"
16         local value="$4"
17         local _val
18         config_get_bool _val "$section" "$option" 0
19         [ $_val -gt 0 ] && append "$var" "$value"
20 }
21
22 append_string() {
23         local var="$1"
24         local section="$2"
25         local option="$3"
26         local val="$4"
27         local _val
28         config_get _val "$section" "$option"
29         [ -n "$_val" ] && append "$var" "$val $_val"
30 }
31
32 config_get_ifname() {
33         local var="$1"
34         local section="$2"
35         local option="$3"
36         local val="$4"
37         local _val
38         config_get _val "$section" "$option" "$val"
39         config_get "$var" "$_val" 'ifname' "$_val"
40 }
41
42 section_enabled() {
43         local enabled
44         config_get_bool enabled "$1" 'enabled' 0
45         [ $enabled -gt 0 ]
46 }
47
48 start_instance() {
49         local section="$1"
50         local id
51         local if
52         local args
53
54         section_enabled "$section" || return 1
55
56         config_get id "$section" 'virtual_id' '1'
57         config_get_ifname if "$section" 'interface' 'lan'
58
59         args="-v $id -i $if"
60         append_string args "$section" 'delay' '-d'
61         append_string args "$section" 'priority' '-p'
62         append_bool args "$section" 'no_virtual_mac' '-n'
63         config_list_foreach "$section" 'virtual_ip' append_list_item args
64
65         SERVICE_PID_FILE="/var/run/vrrpd_${if}_${id}.pid"
66         service_start /usr/sbin/vrrpd $args
67 }
68
69 stop_instance() {
70         local section="$1"
71         local id
72         local if
73
74         section_enabled "$section" || return 1
75
76         config_get id "$section" 'virtual_id' '1'
77         config_get_ifname if "$section" 'interface' 'lan'
78
79         SERVICE_PID_FILE="/var/run/vrrpd_${if}_${id}.pid"
80         service_stop /usr/sbin/vrrpd
81 }
82
83 start() {
84         include /lib/network
85         scan_interfaces
86         config_load 'vrrpd'
87         config_foreach start_instance 'vrrpd'
88 }
89
90 stop() {
91         include /lib/network
92         scan_interfaces
93         config_load 'vrrpd'
94         config_foreach stop_instance 'vrrpd'
95 }