diff options
Diffstat (limited to 'debian/ifplugd.init')
-rw-r--r-- | debian/ifplugd.init | 88 |
1 files changed, 67 insertions, 21 deletions
diff --git a/debian/ifplugd.init b/debian/ifplugd.init index 19dd442..ba9c955 100644 --- a/debian/ifplugd.init +++ b/debian/ifplugd.init @@ -29,7 +29,7 @@ ### END INIT INFO CFG=/etc/default/ifplugd - +DESC="Network Interface Plugging Daemon" IFPLUGD=/usr/sbin/ifplugd test -x $IFPLUGD || exit 0 @@ -45,55 +45,101 @@ shift [ $# -ne 0 ] && INTERFACES="$@" -[ "x$INTERFACES" = "xauto" -o "x$INTERFACES" = "xall" ] && INTERFACES="`cat /proc/net/dev | awk '{ print $1 }' | egrep '^(eth|wlan)' | cut -d: -f1`" +all_interfaces () { + for IFPATH in /sys/class/net/* ; do + IFNAME="${IFPATH#/sys/class/net/}" + + [ -e "$IFPATH/device" ] || continue + + if [ -f "$IFPATH/type" ] ; then + grep --quiet '^1$' "$IFPATH/type" || continue + fi + + case "$IFNAME" in + eth*|wlan*) + echo $IFNAME + ;; + esac + done +} -[ "$INTERFACES" ] || exit 0 +[ "x$INTERFACES" = "xauto" -o "x$INTERFACES" = "xall" ] && INTERFACES="$(all_interfaces)" + +. /lib/lsb/init-functions case "$VERB" in start) - echo -n "Starting Network Interface Plugging Daemon:" + [ "$INTERFACES" ] || exit 0 + log_action_begin_msg "$DESC" for IF in $INTERFACES ; do - grep --quiet $IF /proc/net/dev || continue + if [ ! -e /sys/class/net/$IF ] || \ + $IFPLUGD -c -i $IF >/dev/null ; then + log_action_cont_msg "skip $IF" + continue + fi + log_action_cont_msg "start $IF" IF1=$(echo $IF | sed "s/-/_/") A=$(eval echo \$\{ARGS_${IF1}\}) [ -z "$A" ] && A="$ARGS" $IFPLUGD -i $IF $A - echo -n " $IF" done - echo "." + log_action_end_msg 0 ;; stop) - echo -n "Stopping Network Interface Plugging Daemon:" + [ "$INTERFACES" ] || exit 0 + log_action_begin_msg "$DESC" for IF in $INTERFACES ; do - grep --quiet $IF /proc/net/dev || continue + if [ ! -e /sys/class/net/$IF ] || \ + ! $IFPLUGD -c -i $IF >/dev/null ; then + log_action_cont_msg "skip $IF" + continue + fi + log_action_cont_msg "stop $IF" $IFPLUGD -k --wait-on-kill -i $IF - echo -n " $IF" done - echo "." + log_action_end_msg 0 ;; status) - for IF in $INTERFACES ; do + [ "$INTERFACES" -o "$HOTPLUG_INTERFACES" ] || exit 0 + for IF in $INTERFACES $HOTPLUG_INTERFACES ; do + if [ ! -e /sys/class/net/$IF ] ; then + log_action_msg "$IF: device $IF is either not present or not functional" + continue + fi + log_begin_msg "$IF: " $IFPLUGD -c -i $IF done ;; suspend) - echo -n "Suspending Network Interface Plugging Daemon:" - for IF in $INTERFACES ; do - grep --quiet $IF /proc/net/dev || continue + [ "$INTERFACES" -o "$HOTPLUG_INTERFACES" ] || exit 0 + log_action_begin_msg "$DESC" + for IF in $INTERFACES $HOTPLUG_INTERFACES ; do + if [ ! -e /sys/class/net/$IF ] || \ + ! $IFPLUGD -c -i $IF >/dev/null ; then + log_action_cont_msg "skip $IF" + continue + fi + log_action_cont_msg "suspend $IF" $IFPLUGD -S -i $IF - echo -n " $IF" done - echo "." + log_action_end_msg 0 ;; resume) - echo -n "Resuming Network Interface Plugging Daemon:" - for IF in $INTERFACES ; do + [ "$INTERFACES" -o "$HOTPLUG_INTERFACES" ] || exit 0 + log_action_begin_msg "$DESC" + for IF in $INTERFACES $HOTPLUG_INTERFACES ; do + if [ ! -e /sys/class/net/$IF ] || \ + ! $IFPLUGD -c -i $IF >/dev/null ; then + log_action_cont_msg "skip $IF" + continue + fi + log_action_cont_msg "resume $IF" $IFPLUGD -R -i $IF - echo -n " $IF" done - echo "." + log_action_end_msg 0 ;; force-reload|restart) + [ "$INTERFACES" ] || exit 0 $0 stop $INTERFACES sleep 3 $0 start $INTERFACES |