#!/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 }