
ifquery will exit failure if there is no /run/network directory. normally that would get created by one of network-interface.conf or networking.conf. But, it is possible that we're running before either of those have.
58 lines
2.0 KiB
Plaintext
58 lines
2.0 KiB
Plaintext
# in a lxc container, events for network interfaces do not
|
|
# get created or may be missed. This helps cloud-init-nonet along
|
|
# by emitting those events if they have not been emitted.
|
|
|
|
start on container
|
|
stop on static-network-up
|
|
task
|
|
|
|
emits net-device-added
|
|
|
|
console output
|
|
|
|
script
|
|
# if we are inside a container, then we may have to emit the ifup
|
|
# events for 'auto' network devices.
|
|
set -f
|
|
|
|
# from /etc/network/if-up.d/upstart
|
|
MARK_DEV_PREFIX="/run/network/ifup."
|
|
MARK_STATIC_NETWORK_EMITTED="/run/network/static-network-up-emitted"
|
|
# if the all static network interfaces are already up, nothing to do
|
|
[ -f "$MARK_STATIC_NETWORK_EMITTED" ] && exit 0
|
|
|
|
# ifquery will exit failure if there is no /run/network directory.
|
|
# normally that would get created by one of network-interface.conf
|
|
# or networking.conf. But, it is possible that we're running
|
|
# before either of those have.
|
|
mkdir -p /run/network
|
|
|
|
# get list of all 'auto' interfaces. if there are none, nothing to do.
|
|
auto_list=$(ifquery --list --allow auto 2>/dev/null) || :
|
|
[ -z "$auto_list" ] && exit 0
|
|
set -- ${auto_list}
|
|
[ "$*" = "lo" ] && exit 0
|
|
|
|
# we only want to emit for interfaces that do not exist, so filter
|
|
# out anything that does not exist.
|
|
for iface in "$@"; do
|
|
[ "$iface" = "lo" ] && continue
|
|
# skip interfaces that are already up
|
|
[ -f "${MARK_DEV_PREFIX}${iface}" ] && continue
|
|
|
|
if [ -d /sys/net ]; then
|
|
# if /sys is mounted, and there is no /sys/net/iface, then no device
|
|
[ -e "/sys/net/$iface" ] && continue
|
|
else
|
|
# sys wasn't mounted, so just check via 'ifconfig'
|
|
ifconfig "$iface" >/dev/null 2>&1 || continue
|
|
fi
|
|
initctl emit --no-wait net-device-added "INTERFACE=$iface" &&
|
|
emitted="$emitted $iface" ||
|
|
echo "warn: ${UPSTART_JOB} failed to emit net-device-added INTERFACE=$iface"
|
|
done
|
|
|
|
[ -z "${emitted# }" ] ||
|
|
echo "${UPSTART_JOB}: emitted ifup for ${emitted# }"
|
|
end script
|