You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.4 KiB
Bash
55 lines
1.4 KiB
Bash
#!/bin/sh -e
|
|
MARK_DEV_PREFIX="/run/network/ifup."
|
|
MARK_STATIC_NETWORK_EMITTED="/run/network/static-network-up-emitted"
|
|
|
|
if [ -e /lib/lsb/init-functions ]; then
|
|
. /lib/lsb/init-functions
|
|
fi
|
|
|
|
if ! init_is_upstart; then
|
|
exit 0
|
|
fi
|
|
|
|
# Let's ignore meta entries (ifup -a)
|
|
if [ "$ADDRFAM" = "meta" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
# lo emission handled by /etc/init/network-interface.conf
|
|
if [ "$IFACE" != lo ]; then
|
|
initctl emit -n net-device-up \
|
|
"IFACE=$IFACE" \
|
|
"LOGICAL=$LOGICAL" \
|
|
"ADDRFAM=$ADDRFAM" \
|
|
"METHOD=$METHOD"
|
|
fi
|
|
|
|
get_auto_interfaces() {
|
|
# write to stdout a list of interfaces configured as 'auto' in interfaces(5)
|
|
local found=""
|
|
# stderr redirected as it outputs things like:
|
|
# Ignoring unknown interface eth0=eth0.
|
|
found=$(ifquery --list --allow auto 2>/dev/null) || return
|
|
set -- ${found}
|
|
echo "$@"
|
|
}
|
|
|
|
all_interfaces_up() {
|
|
# return true if all interfaces listed in /etc/network/interfaces as 'auto'
|
|
# are up. if no interfaces are found there, then "all [given] were up"
|
|
local prefix="$1" iface=""
|
|
for iface in $(get_auto_interfaces); do
|
|
# if cur interface does is not up, then all have not been brought up
|
|
[ -f "${prefix}${iface}" ] || return 1
|
|
done
|
|
return 0
|
|
}
|
|
|
|
# touch our own "marker" indicating that this interface has been brought up.
|
|
: > "${MARK_DEV_PREFIX}$IFACE"
|
|
|
|
if all_interfaces_up "${MARK_DEV_PREFIX}" &&
|
|
mkdir "${MARK_STATIC_NETWORK_EMITTED}" 2>/dev/null; then
|
|
initctl emit --no-wait static-network-up
|
|
fi
|