summaryrefslogtreecommitdiff
path: root/debian/ifplugd.init
diff options
context:
space:
mode:
Diffstat (limited to 'debian/ifplugd.init')
-rw-r--r--debian/ifplugd.init88
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