| #!/bin/sh /etc/rc.common |
| # Copyright (C) 2018 Jean-Michel Lacroix |
| |
| USE_PROCD=1 |
| |
| START=60 |
| |
| APP=darkstat |
| RUN_D=/var/darkstat |
| PID_F=$RUN_D/$APP.pid |
| CONFIGNAME=darkstat |
| USER=nobody |
| GROUP=nogroup |
| |
| CONFIGSTR="" |
| FILTERSTR="" |
| |
| export_bool () { |
| local option="$1" |
| local section="$2" |
| local _keystr="$3" |
| local _loctmp |
| config_get_bool _loctmp "$section" "$option" |
| if [ -n "$_loctmp" ]; then |
| if [ 1 -eq "$_loctmp" ]; then |
| CONFIGSTR="$CONFIGSTR${_keystr} " |
| fi |
| fi |
| } |
| |
| set_config_string(){ |
| mkdir -p $RUN_D |
| . /lib/functions/network.sh |
| config_load $CONFIGNAME |
| config_foreach build_config_string darkstat |
| } |
| |
| build_config_string() { |
| local cfg="$1" |
| config_get interface $cfg interface |
| network_get_device ifname "$interface" |
| CONFIGSTR=" -i $ifname " |
| export_bool syslog $cfg "--syslog" |
| export_bool verbose $cfg "--verbose" |
| # We need the --no-daemon parameter as with PROCD the process has to run in the background |
| CONFIGSTR="$CONFIGSTR--no-daemon " |
| export_bool no_promisc $cfg "--no-promisc" |
| export_bool no_dns $cfg "--no-dns" |
| export_bool no_macs $cfg "--no-macs" |
| export_bool no_lastseen $cfg "--no-lastseen" |
| config_get httpaddr $cfg httpaddr |
| CONFIGSTR="$CONFIGSTR${httpaddr:+-b "$httpaddr"} " |
| config_get httpport $cfg httpport |
| CONFIGSTR="$CONFIGSTR${httpport:+-p "$httpport"} " |
| config_get network_netmask $cfg network_netmask |
| CONFIGSTR="$CONFIGSTR${network_netmask:+-l "$network_netmask"} " |
| export_bool local_only $cfg "--local-only" |
| config_get hosts_max $cfg hosts_max |
| CONFIGSTR="$CONFIGSTR${hosts_max:+--hosts-max "$hosts_max"} " |
| config_get hosts_keep $cfg hosts_keep |
| CONFIGSTR="$CONFIGSTR${ports_keep:+--ports-keep "$ports_keep"} " |
| config_get highest_port $cfg highest_port |
| CONFIGSTR="$CONFIGSTR${highest_port:+--highest-port "$highest_port"} " |
| config_get export_file $cfg export_file |
| CONFIGSTR="$CONFIGSTR${export_file:+--export "$export_file"} " |
| config_get import_file $cfg import_file |
| CONFIGSTR="$CONFIGSTR${import_file:+--import "$import_file"} " |
| config_get daylog_file $cfg daylog_file |
| CONFIGSTR="$CONFIGSTR${daylog_file:+--daylog "$daylog_file"} " |
| CONFIGSTR="$CONFIGSTR--chroot $RUN_D --pidfile $PID_F" |
| # Now that we have the configuration string (CONFIGSTR), let us get the filter (FILTERSTR) |
| config_get network_filter $cfg network_filter |
| FILTERSTR="${network_filter:+$network_filter}" |
| } |
| |
| service_triggers() { |
| procd_add_reload_trigger $CONFIGNAME |
| } |
| |
| start_service() { |
| set_config_string |
| procd_open_instance |
| procd_set_param command /usr/sbin/$APP |
| procd_append_param command $CONFIGSTR |
| # Let us check if we have a filter string and apply it if we do |
| if [ "$FILTERSTR" != "" ]; then |
| procd_append_param command "-f" "$FILTERSTR" |
| fi |
| procd_close_instance |
| } |
| |
| stop_service() { |
| rm -f $PID_F |
| } |
| |
| reload_service() { |
| stop |
| start |
| } |