#!/bin/sh /etc/rc.common
|
|
|
|
START=90
|
|
STOP=89
|
|
USE_PROCD=1
|
|
|
|
service_triggers() {
|
|
procd_add_reload_trigger "chilli"
|
|
procd_add_interface_trigger "interface.*.up" "wan" /etc/init.d/chilli restart
|
|
}
|
|
|
|
config_cb() {
|
|
chilli_conf="/var/run/chilli_${2}.conf"
|
|
[ -e "$chilli_conf" ] && rm -f "$chilli_conf"
|
|
}
|
|
|
|
option_cb() {
|
|
case "$1" in
|
|
# ignored/internal settings
|
|
disabled)
|
|
;;
|
|
# UCI settings
|
|
network)
|
|
. /lib/functions/network.sh
|
|
local ifname
|
|
network_get_device ifname "$2"
|
|
echo "dhcpif=\"$ifname\"" >> "$chilli_conf"
|
|
;;
|
|
# boolean settings
|
|
acctupdate|chillixml|coanoipcheck|debug|dhcpbroadcast|dhcpmacset|dhcpnotidle|\
|
|
dhcpradius|dnsparanoia|domaindnslocal|eapolenable|fg|forgiving|framedservice|\
|
|
ieee8021q|injectwispr|ipv6|ipv6only|layer3|locationcopycalled|\
|
|
locationimmediateupdate|locationopt82|locationstopstart|macallowlocal|\
|
|
macauth|macauthdeny|macreauth|mmapring|mschapv2|noarpentries|noc2c|nochallenge|\
|
|
nodynip|noradallow|nosystemdns|nouamsuccess|nousergardendata|nowispr1|nowispr2|\
|
|
only8021q|openidauth|papalwaysok|patricia|postauthproxyssl|proxymacaccept|\
|
|
proxyonacct|radiusoriginalurl|radsec|redir|redirdnsreq|redirssl|redirurl|reload|\
|
|
routeonetone|scalewin|seskeepalive|statusfilesave|strictdhcp|strictmacauth|\
|
|
swapoctets|uamallowpost|uamanydns|uamanyip|uamauthedallowed|uamgardendata|\
|
|
uamnatanyip|uamotherdata|uamuissl|usetap|vlanlocation|wpaguests)
|
|
[ "$2" = "true" -o "$2" = "1" ] && echo "$1" >> "$chilli_conf"
|
|
;;
|
|
*)
|
|
echo "$1=\"$2\"" >> "$chilli_conf"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
start_chilli() {
|
|
local cfg="$1"
|
|
local base="/var/run/chilli_${cfg}"
|
|
|
|
config_get_bool disabled "$1" 'disabled' 0
|
|
[ $disabled = 1 ] && return
|
|
|
|
. /lib/functions/network.sh
|
|
|
|
local wanif ipaddr
|
|
if network_find_wan wanif && network_get_ipaddr ipaddr "$wanif"; then
|
|
procd_open_instance "$cfg"
|
|
procd_set_param command /usr/sbin/chilli
|
|
procd_set_param file "$chilli_conf"
|
|
procd_append_param command \
|
|
--fg \
|
|
--conf "${base}.conf" \
|
|
--pidfile "${base}.pid" \
|
|
--cmdsocket "${base}.sock" \
|
|
--unixipc "${base}.ipc"
|
|
procd_set_param respawn
|
|
procd_set_param stdout 1
|
|
procd_set_param stderr 1
|
|
procd_close_instance
|
|
fi
|
|
}
|
|
|
|
start_service() {
|
|
config_load chilli
|
|
config_foreach start_chilli chilli
|
|
}
|
|
|
|
stop_service() {
|
|
for undofile in /var/run/chilli.tun*.sh; do
|
|
sh $undofile >& /dev/null
|
|
done
|
|
rm -f /var/run/chilli_*
|
|
}
|
|
|
|
reload_chilli() {
|
|
local pid
|
|
local cfg="$1"
|
|
local base="/var/run/chilli_${cfg}"
|
|
if [ -f "${base}.pid" ]; then
|
|
pid="$(cat "${base}.pid")"
|
|
[ -f "/var/run/chilli.${pid}.cfg.bin" ] && rm -f "/var/run/chilli.${pid}.cfg.bin"
|
|
chilli_query -s "${base}.sock" reload
|
|
fi
|
|
}
|
|
|
|
reload_service() {
|
|
config_load chilli
|
|
config_foreach reload_chilli chilli
|
|
}
|