aboutsummaryrefslogtreecommitdiff
path: root/net.Linux/netplugd.sh
diff options
context:
space:
mode:
Diffstat (limited to 'net.Linux/netplugd.sh')
-rw-r--r--net.Linux/netplugd.sh93
1 files changed, 93 insertions, 0 deletions
diff --git a/net.Linux/netplugd.sh b/net.Linux/netplugd.sh
new file mode 100644
index 00000000..170e3a8d
--- /dev/null
+++ b/net.Linux/netplugd.sh
@@ -0,0 +1,93 @@
+# Copyright 2005-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+_config_vars="$_config_vars plug_timeout"
+
+netplugd_depend() {
+ program start /sbin/netplugd
+ after macnet rename
+ before interface
+ provide plug
+
+ # Prefer us to ifplugd
+ after ifplugd
+}
+
+netplugd_pre_start() {
+ local pidfile="/var/run/netplugd-${IFACE}.pid" timeout=
+
+ # We don't start netplug if we're being called from the background
+ ${IN_BACKGROUND} && return 0
+
+ _exists || return 0
+
+ # We need a valid MAC address
+ # It's a basic test to ensure it's not a virtual interface
+ if ! _get_mac_address >/dev/null 2>/dev/null ; then
+ vewarn "netplug only works on interfaces with a valid MAC address"
+ return 0
+ fi
+
+ # We don't work on bonded, bridges, tun/tap, vlan or wireless
+ for f in bond bridge tuntap vlan wireless ; do
+ if type "_is_${f}" >/dev/null 2>/dev/null ; then
+ if _is_${f} ; then
+ veinfo "netplug does not work with" "${f}"
+ return 0
+ fi
+ fi
+ done
+
+ ebegin "Starting netplug on" "${IFACE}"
+
+ # Mark the us as inactive so netplug can restart us
+ mark_service_inactive "${SVCNAME}"
+
+ # Start netplug
+ start-stop-daemon --start --exec /sbin/netplugd \
+ --pidfile "${pidfile}" \
+ -- -i "${IFACE}" -P -p "${pidfile}" -c /dev/null
+ eend "$?" || return 1
+
+ eindent
+
+ eval timeout=\$plug_timeout_${IFVAR}
+ [ -z "${timeout}" ] && timeout=-1
+ if [ ${timeout} -eq 0 ] ; then
+ ewarn "WARNING: infinite timeout set for" "${IFACE}" "to come up"
+ elif [ ${timeout} -lt 0 ] ; then
+ einfo "Backgrounding ..."
+ exit 1
+ fi
+
+ veinfo "Waiting for" "${IFACE}" "to be marked as started"
+
+ local i=0
+ while true ; do
+ if service_started "${SVCNAME}" ; then
+ _show_address
+ exit 0
+ fi
+ sleep 1
+ [ ${timeout} -eq 0 ]] && continue
+ i=$((${i} + 1))
+ [ ${i} -ge ${timeout} ] && break
+ done
+
+ eend 1 "Failed to configure" "${IFACE}" "in the background"
+ exit 1
+}
+
+netplugd_stop() {
+ ${IN_BACKGROUND} && return 0
+
+ local pidfile="/var/run/netplugd-${IFACE}.pid"
+ [ ! -e "${pidfile}" ] && return 0
+
+ ebegin "Stopping netplug on" "${IFACE}"
+ start-stop-daemon --stop --quiet --exec /sbin/netplugd \
+ --pidfile "${pidfile}"
+ eend $?
+}
+
+# vim: set ts=4 :