fwknop: init script improvements
[feed/packages.git] / net / wifidog-ng / files / wifidog-ng.init
1 #!/bin/sh /etc/rc.common
2
3 USE_PROCD=1
4 START=95
5
6 BIN=/usr/bin/wifidog-ng
7
8 global_dhcp_host_white=1
9
10 validate_gateway_section() {
11 uci_load_validate wifidog-ng gateway "$1" "$2" \
12 'enabled:bool:0' \
13 'interface:uci("network", "@interface"):lan' \
14 'dhcp_host_white:bool:1'
15 }
16
17 start_wifidog() {
18 [ "$2" = 0 ] || {
19 echo "validation gateway failed" >&2
20 exit 1
21 }
22
23 [ $enabled = 1 ] || exit 0
24
25 [ $dhcp_host_white = 1 ] || global_dhcp_host_white=0
26
27 # timeout = 24.855 days
28 ipset -! create wifidog-ng-mac hash:mac timeout 2147483
29 ipset -! create wifidog-ng-ip hash:ip
30
31 modprobe wifidog-ng
32 echo "enabled=1" > /proc/wifidog-ng/config
33
34 procd_open_instance
35 procd_set_param command $BIN
36 procd_set_param respawn
37 procd_close_instance
38 }
39
40 validate_server_section() {
41 uci_load_validate wifidog-ng server "$1" "$2" \
42 'host:host'
43 }
44
45 parse_server() {
46 [ "$2" = 0 ] || {
47 echo "validation server failed" >&2
48 exit 1
49 }
50
51 if validate_data ip4addr "$host" 2> /dev/null; then
52 ipset add wifidog-ng-ip $host
53 else
54 echo "ipset=/$host/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
55 fi
56 }
57
58 validate_validated_user_section() {
59 uci_load_validate wifidog-ng validated_user "$1" "$2" \
60 'mac:macaddr'
61 }
62
63 parse_validated_user() {
64 [ "$2" = 0 ] || {
65 echo "validation validated_user failed" >&2
66 exit 1
67 }
68
69 [ -n "$mac" ] && ipset add wifidog-ng-mac $mac
70 }
71
72 validate_validated_domain_section() {
73 uci_load_validate wifidog-ng validated_domain "$1" "$2" \
74 'domain:host'
75 }
76
77 parse_validated_domain() {
78 [ "$2" = 0 ] || {
79 echo "validation validated_domain failed" >&2
80 exit 1
81 }
82
83 [ -n "$domain" ] && echo "ipset=/$domain/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
84 }
85
86 validate_dhcp_host_section() {
87 uci_load_validate dhcp host "$1" "$2" \
88 'mac:macaddr'
89 }
90
91 parse_dhcp_host() {
92 [ "$2" = 0 ] || {
93 echo "validation validated dhcp host failed" >&2
94 exit 1
95 }
96
97 [ -n "$mac" ] && ipset add wifidog-ng-mac $mac
98 }
99
100 start_service() {
101 config_load wifidog-ng
102 config_foreach validate_gateway_section gateway start_wifidog
103
104 echo -n > /tmp/dnsmasq.d/wifidog-ng
105
106 config_foreach validate_server_section server parse_server
107 config_foreach validate_validated_user_section validated_user parse_validated_user
108 config_foreach validate_validated_domain_section validated_domain parse_validated_domain
109
110 [ $global_dhcp_host_white = 1 ] && {
111 config_load dhcp
112 config_foreach validate_dhcp_host_section host parse_dhcp_host
113 }
114
115 /etc/init.d/dnsmasq restart &
116 }
117
118 stop_service() {
119 rmmod wifidog-ng
120
121 ipset destroy wifidog-ng-mac
122 ipset destroy wifidog-ng-ip
123 }
124
125 service_triggers() {
126 procd_add_reload_trigger "wifidog-ng"
127
128 procd_open_validate
129 validate_gateway_section
130 validate_server_section
131 validate_validated_user_section
132 validate_validated_domain_section
133 validate_dhcp_host_section
134 procd_close_validate
135 }