#!/bin/sh /etc/rc.common
|
|
|
|
USE_PROCD=1
|
|
START=95
|
|
|
|
BIN=/usr/bin/wifidog-ng
|
|
|
|
dhcp_host_white=1
|
|
|
|
start_wifidog() {
|
|
local cfg="$1"
|
|
local enabled interface
|
|
|
|
uci_validate_section wifidog-ng gateway "${1}" \
|
|
'enabled:bool:0' \
|
|
'interface:uci("network", "@interface"):lan' \
|
|
'dhcp_host_white:bool:1'
|
|
|
|
[ $? -ne 0 ] && {
|
|
echo "validation gateway failed" >&2
|
|
exit 1
|
|
}
|
|
|
|
[ $enabled -eq 1 ] || exit 0
|
|
|
|
# timeout = 49 days
|
|
ipset -! create wifidog-ng-mac hash:mac timeout 4294967
|
|
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
|
|
}
|
|
|
|
parse_server() {
|
|
local cfg="$1"
|
|
local host
|
|
|
|
config_get host $cfg host
|
|
validate_data ip4addr "$host" 2> /dev/null
|
|
if [ $? -eq 0 ];
|
|
then
|
|
ipset add wifidog-ng-ip $host
|
|
else
|
|
echo "ipset=/$host/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
|
|
fi
|
|
}
|
|
|
|
parse_validated_user() {
|
|
local cfg="$1"
|
|
local mac ip
|
|
|
|
uci_validate_section wifidog-ng validated_user "${1}" \
|
|
'mac:macaddr'
|
|
|
|
[ $? -ne 0 ] && {
|
|
echo "validation validated_user failed" >&2
|
|
exit 1
|
|
}
|
|
|
|
[ -n "$mac" ] && ipset add wifidog-ng-mac $mac
|
|
}
|
|
|
|
parse_validated_domain() {
|
|
local cfg="$1"
|
|
local domain
|
|
|
|
uci_validate_section wifidog-ng validated_domain "${1}" \
|
|
'domain:host'
|
|
|
|
[ $? -ne 0 ] && {
|
|
echo "validation validated_domain failed" >&2
|
|
exit 1
|
|
}
|
|
|
|
[ -n "$domain" ] && echo "ipset=/$domain/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
|
|
}
|
|
|
|
parse_dhcp_host() {
|
|
local cfg="$1"
|
|
local mac ip
|
|
|
|
uci_validate_section dhcp host "${1}" \
|
|
'mac:macaddr'
|
|
|
|
[ $? -ne 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 start_wifidog gateway
|
|
|
|
echo -n > /tmp/dnsmasq.d/wifidog-ng
|
|
|
|
config_foreach parse_server server
|
|
config_foreach parse_validated_user validated_user
|
|
config_foreach parse_validated_domain validated_domain
|
|
|
|
[ $dhcp_host_white -eq 1 ] && {
|
|
config_load dhcp
|
|
config_foreach parse_dhcp_host host
|
|
}
|
|
|
|
/etc/init.d/dnsmasq restart &
|
|
}
|
|
|
|
stop_service() {
|
|
rmmod wifidog-ng
|
|
|
|
ipset destroy wifidog-ng-mac
|
|
ipset destroy wifidog-ng-ip
|
|
}
|