- #!/bin/sh /etc/rc.common
-
- USE_PROCD=1
- START=95
-
- BIN=/usr/bin/wifidog-ng
-
- global_dhcp_host_white=1
-
- validate_gateway_section() {
- uci_load_validate wifidog-ng gateway "$1" "$2" \
- 'enabled:bool:0' \
- 'interface:uci("network", "@interface"):lan' \
- 'dhcp_host_white:bool:1'
- }
-
- start_wifidog() {
- [ "$2" = 0 ] || {
- echo "validation gateway failed" >&2
- exit 1
- }
-
- [ $enabled = 1 ] || exit 0
-
- [ $dhcp_host_white = 1 ] || global_dhcp_host_white=0
-
- # timeout = 24.855 days
- ipset -! create wifidog-ng-mac hash:mac timeout 2147483
- ipset -! create wifidog-ng-ip hash:ip
-
- modprobe wifidog-ng
- echo "enabled=1" > /proc/wifidog-ng/config
-
- procd_open_instance
- procd_set_param command $BIN
- procd_set_param respawn
- procd_close_instance
- }
-
- validate_server_section() {
- uci_load_validate wifidog-ng server "$1" "$2" \
- 'host:host'
- }
-
- parse_server() {
- [ "$2" = 0 ] || {
- echo "validation server failed" >&2
- exit 1
- }
-
- if validate_data ip4addr "$host" 2> /dev/null; then
- ipset add wifidog-ng-ip $host
- else
- echo "ipset=/$host/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
- fi
- }
-
- validate_validated_user_section() {
- uci_load_validate wifidog-ng validated_user "$1" "$2" \
- 'mac:macaddr'
- }
-
- parse_validated_user() {
- [ "$2" = 0 ] || {
- echo "validation validated_user failed" >&2
- exit 1
- }
-
- [ -n "$mac" ] && ipset add wifidog-ng-mac $mac
- }
-
- validate_validated_domain_section() {
- uci_load_validate wifidog-ng validated_domain "$1" "$2" \
- 'domain:host'
- }
-
- parse_validated_domain() {
- [ "$2" = 0 ] || {
- echo "validation validated_domain failed" >&2
- exit 1
- }
-
- [ -n "$domain" ] && echo "ipset=/$domain/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
- }
-
- validate_dhcp_host_section() {
- uci_load_validate dhcp host "$1" "$2" \
- 'mac:macaddr'
- }
-
- parse_dhcp_host() {
- [ "$2" = 0 ] || {
- echo "validation validated dhcp host failed" >&2
- exit 1
- }
-
- [ -n "$mac" ] && ipset add wifidog-ng-mac $mac
- }
-
- start_service() {
- config_load wifidog-ng
- config_foreach validate_gateway_section gateway start_wifidog
-
- echo -n > /tmp/dnsmasq.d/wifidog-ng
-
- config_foreach validate_server_section server parse_server
- config_foreach validate_validated_user_section validated_user parse_validated_user
- config_foreach validate_validated_domain_section validated_domain parse_validated_domain
-
- [ $global_dhcp_host_white = 1 ] && {
- config_load dhcp
- config_foreach validate_dhcp_host_section host parse_dhcp_host
- }
-
- /etc/init.d/dnsmasq restart &
- }
-
- stop_service() {
- rmmod wifidog-ng
-
- ipset destroy wifidog-ng-mac
- ipset destroy wifidog-ng-ip
- }
-
- service_triggers() {
- procd_add_reload_trigger "wifidog-ng"
-
- procd_open_validate
- validate_gateway_section
- validate_server_section
- validate_validated_user_section
- validate_validated_domain_section
- validate_dhcp_host_section
- procd_close_validate
- }
|