#!/bin/sh /etc/rc.common
-START=30
-STOP=90
+START=90
+STOP=89
+USE_PROCD=1
+
+service_triggers() {
+ procd_add_reload_trigger "chilli"
+}
config_cb() {
- chilli_inst=$2
- if [ "$chilli_inst" != "" ]
- then
- rm -f /var/run/chilli_${chilli_inst}.*
- chilli_conf=/var/run/chilli_${chilli_inst}.conf
- eval "start_chilli_$chilli_inst=1"
- fi
+ local chilli_inst="$2"
+ if [ "$chilli_inst" != "" ]; then
+ chilli_conf="/var/run/chilli_${chilli_inst}.conf"
+ if [ -e "$chilli_conf" ]; then
+ rm -f "$chilli_conf"
+ fi
+ eval "start_chilli_$chilli_inst=1"
+ fi
}
option_cb() {
- case "$1" in
- # UCI settings
- network)
- . /lib/functions/network.sh
- local ifname
- network_get_device ifname $2
- echo "dhcpif=\"$ifname\"" >> $chilli_conf
- ;;
- disabled)
- eval "start_chilli_$chilli_inst=0"
- ;;
- # boolean settings
- dhcpbroadcast|nodynip|vlanlocation|locationstopstart|locationcopycalled|locationimmediateupdate|locationopt82|coanoipcheck|noradallow|proxymacaccept|proxyonacct|dhcpmacset|dhcpradius|noc2c|eapolenable|uamanydns|uamanyip|uamnatanyip|nouamsuccess|nowispr1|nowispr2|domaindnslocal|radsec|macauth|macreauth|macauthdeny|macallowlocal|strictmacauth|strictdhcp|ieee8021q|only8021q|radiusoriginalurl|swapoctets|statusfilesave|wpaguests|openidauth|papalwaysok|mschapv2|chillixml|acctupdate|dnsparanoia|seskeepalive|usetap|noarpentries|framedservice|scalewin|redir|injectwispr|redirurl|routeonetone|nousergardendata|uamgardendata|uamotherdata|withunixipc|uamallowpost|redirssl|uamuissl|layer3|patricia|redirdnsreq|dhcpnotidle|ipv6|ipv6only)
- [ "$2" = "true" -o "$2" = "1" ] && echo "$1" >> $chilli_conf
- ;;
- *)
- echo "$1=\"$2\"" >> $chilli_conf
- ;;
- esac
+ case "$1" in
+ # UCI settings
+ network)
+ . /lib/functions/network.sh
+ local ifname
+ network_get_device ifname "$2"
+ echo "dhcpif=\"$ifname\"" >> "$chilli_conf"
+ ;;
+ disabled)
+ [ "$(config_get_bool "$1")" = "1" ] && eval "start_chilli_$chilli_inst=0"
+ ;;
+ # boolean settings
+ debug|dhcpbroadcast|nodynip|vlanlocation|locationstopstart|locationcopycalled|locationimmediateupdate|locationopt82|coanoipcheck|noradallow|proxymacaccept|proxyonacct|dhcpmacset|dhcpradius|noc2c|eapolenable|uamanydns|uamanyip|uamnatanyip|nouamsuccess|nowispr1|nowispr2|domaindnslocal|radsec|macauth|macreauth|macauthdeny|macallowlocal|strictmacauth|strictdhcp|ieee8021q|only8021q|radiusoriginalurl|swapoctets|statusfilesave|wpaguests|openidauth|papalwaysok|mschapv2|chillixml|acctupdate|dnsparanoia|seskeepalive|usetap|noarpentries|framedservice|scalewin|redir|injectwispr|redirurl|routeonetone|nousergardendata|uamgardendata|uamotherdata|withunixipc|uamallowpost|redirssl|uamuissl|layer3|patricia|redirdnsreq|dhcpnotidle|ipv6|ipv6only)
+ [ "$2" = "true" -o "$2" = "1" ] && echo "$1" >> "$chilli_conf"
+ ;;
+ *)
+ echo "$1=\"$2\"" >> "$chilli_conf"
+ ;;
+ esac
}
start_chilli() {
- local cfg="$1"
- local start_chilli=$(eval "echo \$start_chilli_$cfg")
- [ "$start_chilli" = "0" ] && return
- local base=/var/run/chilli_${cfg}
- chilli -c ${base}.conf \
- --pidfile ${base}.pid \
- --cmdsocket ${base}.sock \
- --unixipc ${base}.ipc &
-}
-
-start() {
- config_load chilli
- config_foreach start_chilli chilli
-}
-
-stop() {
- ls /var/run/chilli*.pid 2>/dev/null && {
- kill $(cat /var/run/chilli*.pid)
- sleep 1
- killall -9 chilli
- rm -f /var/run/chilli*
- }
+ local cfg="$1"
+ local start_chilli=$(eval "echo \$start_chilli_$cfg")
+ [ "$start_chilli" = "0" ] && return
+ local base="/var/run/chilli_${cfg}"
+
+ procd_open_instance "$cfg"
+ procd_set_param command /usr/sbin/chilli
+ procd_set_param file "${base}.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
+}
+
+start_service() {
+ config_load chilli
+ config_foreach start_chilli chilli
+}
+
+stop_service() {
+ 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
}