summaryrefslogtreecommitdiff
path: root/net/ifplugd.sh
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2008-03-26 14:18:01 +0000
committerRoy Marples <roy@marples.name>2008-03-26 14:18:01 +0000
commitccf238f852fd0463e68d33b91f0dd55000c325e3 (patch)
treee104640ae7b25be54520c22712b34385b1c030c4 /net/ifplugd.sh
parent55858eca2ec678fce14b21df33d08f5aaac94bcf (diff)
downloadopenrc-ccf238f852fd0463e68d33b91f0dd55000c325e3.tar.gz
openrc-ccf238f852fd0463e68d33b91f0dd55000c325e3.tar.bz2
openrc-ccf238f852fd0463e68d33b91f0dd55000c325e3.tar.xz
Merge net.OS into net
Diffstat (limited to 'net/ifplugd.sh')
-rw-r--r--net/ifplugd.sh92
1 files changed, 92 insertions, 0 deletions
diff --git a/net/ifplugd.sh b/net/ifplugd.sh
new file mode 100644
index 0000000..db7007a
--- /dev/null
+++ b/net/ifplugd.sh
@@ -0,0 +1,92 @@
+# Copyright 2007-2008 Roy Marples <roy@marples.name>
+# All rights reserved. Released under the 2-clause BSD license.
+
+_config_vars="$_config_vars plug_timeout"
+
+ifplugd_depend()
+{
+ program start /usr/sbin/ifplugd
+ after macnet rename
+ before interface
+ provide plug
+}
+
+ifplugd_pre_start()
+{
+ local pidfile="/var/run/ifplugd.${IFACE}.pid" timeout= args=
+
+ # We don't start ifplugd if we're being called from the background
+ yesno ${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>&1; then
+ vewarn "ifplugd 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>&1; then
+ if _is_${f}; then
+ veinfo "netplug does not work with" "${f}"
+ return 0
+ fi
+ fi
+ done
+
+ ebegin "Starting ifplugd on" "${IFACE}"
+
+ eval args=\$ifplugd_${IFVAR}
+
+ # Mark the us as inactive so netplug can restart us
+ mark_service_inactive
+
+ # Start ifplugd
+ eval start-stop-daemon --start --exec /usr/sbin/ifplugd \
+ --pidfile "${pidfile}" -- "${args}" --iface="${IFACE}"
+ 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; 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
+}
+
+ifplugd_stop()
+{
+ yesno ${IN_BACKGROUND} && return 0
+
+ local pidfile="/var/run/ifplugd.${IFACE}.pid"
+ [ ! -e "${pidfile}" ] && return 0
+
+ ebegin "Stopping ifplugd on" "${IFACE}"
+ start-stop-daemon --stop --quiet --exec /usr/sbin/ifplugd \
+ --pidfile "${pidfile}" --signal QUIT
+ eend $?
+}