diff options
Diffstat (limited to 'src/ifplugd/ifplugd')
-rwxr-xr-x | src/ifplugd/ifplugd | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/src/ifplugd/ifplugd b/src/ifplugd/ifplugd new file mode 100755 index 0000000..354238f --- /dev/null +++ b/src/ifplugd/ifplugd @@ -0,0 +1,105 @@ +#!/bin/bash +# +# ifplugd daemon script for Arch Linux + +. /etc/rc.conf +. /etc/rc.d/functions + +shopt -s extglob + +# env vars +daemonname=ifplugd +cfg=/etc/ifplugd/ifplugd.conf +PID=$(pidof -o %PPID ifplugd) + +# source configuration file +[[ -r $cfg ]] && . "$cfg" + +# discover interfaces to monitor +net_ifs=($INTERFACES) + +case $1 in + start) + stat_busy "Starting $daemonname: ${net_ifs[*]}" + + for nic in "${net_ifs[@]}"; do + # only start if a PID doesn't already exist + if [[ ! -f /var/run/ifplugd.$nic.pid ]]; then + /usr/bin/ifplugd-daemon $nic + + # use presence of PID file to check for start success + [[ -f /var/run/ifplugd.$nic.pid ]] || (( ++err )) + fi + done + unset nic + + if (( err )); then + stat_fail + exit 1 + else + add_daemon $daemonname + stat_done + fi + ;; + stop) + stat_busy "Stopping $daemonname: ${net_ifs[*]}" + + for nic in /var/run/ifplugd.*.pid; do + [[ -f $nic ]] || { (( ++err )); break; } + nic=${nic%.pid} + nic=${nic##*.} + ifplugd -k -i "$nic" || (( ++err )) + done + + if (( err )); then + stat_fail + exit 1 + else + rm_daemon $daemonname + stat_done + fi + ;; + restart) + $0 stop + sleep 1 + $0 start + ;; + status) + for nic in "${net_ifs[@]}"; do + ifplugd -c -i "$nic" + done + unset nic + ;; + suspend) + stat_busy "Suspending $daemonname: ${net_ifs[*]}" + for nic in "${net_ifs[@]}"; do + ifplugd -S -i $nic || (( ++err )) + done + unset nic + + if (( err )); then + stat_fail + exit 1 + else + stat_done + fi + ;; + resume) + stat_busy "Resuming $daemonname ${net_ifs[*]}" + + for nic in "${net_ifs[@]}"; do + ifplugd -R -i $nic || (( ++err )) + done + unset nic + + if (( err )); then + stat_fail + exit 1 + else + stat_done + fi + ;; + *) + echo "usage: $0 {start|stop|restart|status|suspend|resume}" +esac +exit 0 |