mirror of
https://github.com/CumulusNetworks/ifupdown2.git
synced 2024-05-06 15:54:50 +00:00
Ticket: CM-8790 Reviewed By: wkok,roopa Testing Done: built, installed, rebooted jessie's networking starts as an init.d service. Trying to force ordering between init.d and systemd services when there are dependencies doesn't work well (especially since the init.d/networking service is forced very early because of the remote filesystem requirement in jesie). Converting networking to a script run as a systemd service allows us to start networking after switchd. The new script is /sbin/start-networking. I chose to keep it in /sbin, rather than put it in /usr/cumulus/bin, because it's core functionaity. I am not removing /etc/init.d/networking, it just gets ignored unless somebody types it manually. If somebody does that, systemctl runs through the lsb hooks. The two lost abilities below are just ignored if passed. I'm also preventing creating the rc.d symlinks to the init.d/networking script to reduce future confusion. We lose some init.d "convenience" functionality because it's not available through systemd. What we lose are: reload-currently-up - can still be done with ifreload --currently-up force-reload - can still be done with ifreload -f -a We keep start, stop, reload, restart
145 lines
3.1 KiB
Bash
Executable File
145 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# This overrides /etc/init.d/networking
|
|
# Only has start, stop, reload, because that's all systemd has.
|
|
# restart is implemented in systemd by stop then start.
|
|
|
|
PATH="/sbin:/bin"
|
|
RUN_DIR="/run/network"
|
|
IFSTATE="$RUN_DIR/ifstate"
|
|
|
|
NAME=networking
|
|
|
|
[ -x /sbin/ifup ] || exit 0
|
|
[ -x /sbin/ifdown ] || exit 0
|
|
|
|
CONFIGURE_INTERFACES=yes
|
|
|
|
EXTRA_ARGS=
|
|
|
|
[ -f /etc/default/networking ] && . /etc/default/networking
|
|
|
|
[ "$VERBOSE" = yes ] && EXTRA_ARGS=-v
|
|
[ "$DEBUG" = yes ] && EXTRA_ARGS="$EXTRA_ARGS -d"
|
|
[ "$SYSLOG" = yes ] && EXTRA_ARGS="$EXTRA_ARGS --syslog"
|
|
|
|
perf_options() {
|
|
# At bootup lets set perfmode
|
|
[ -f /var/tmp/network/ifstatenew ] && echo -n "" && return
|
|
|
|
echo -n "--perfmode"
|
|
}
|
|
|
|
process_exclusions() {
|
|
set -- $EXCLUDE_INTERFACES
|
|
exclusions=""
|
|
for d
|
|
do
|
|
exclusions="-X $d $exclusions"
|
|
done
|
|
echo $exclusions
|
|
}
|
|
|
|
check_network_file_systems() {
|
|
[ -e /proc/mounts ] || return 0
|
|
|
|
if [ -e /etc/iscsi/iscsi.initramfs ]; then
|
|
echo ${NAME}':' "not deconfiguring network interfaces: iSCSI root is mounted."
|
|
exit 0
|
|
fi
|
|
|
|
while read DEV MTPT FSTYPE REST; do
|
|
case $DEV in
|
|
/dev/nbd*|/dev/nd[a-z]*|/dev/etherd/e*)
|
|
echo ${NAME}':' "not deconfiguring network interfaces: network devices still mounted."
|
|
exit 0
|
|
;;
|
|
esac
|
|
case $FSTYPE in
|
|
nfs|nfs4|smbfs|ncp|ncpfs|cifs|coda|ocfs2|gfs|pvfs|pvfs2|fuse.httpfs|fuse.curlftpfs)
|
|
echo ${NAME}':' "not deconfiguring network interfaces: network file systems still mounted."
|
|
exit 0
|
|
;;
|
|
esac
|
|
done < /proc/mounts
|
|
}
|
|
|
|
check_network_swap() {
|
|
[ -e /proc/swaps ] || return 0
|
|
|
|
while read DEV MTPT FSTYPE REST; do
|
|
case $DEV in
|
|
/dev/nbd*|/dev/nd[a-z]*|/dev/etherd/e*)
|
|
echo ${NAME}':' "not deconfiguring network interfaces: network swap still mounted."
|
|
exit 0
|
|
;;
|
|
esac
|
|
done < /proc/swaps
|
|
}
|
|
|
|
ifup_hotplug () {
|
|
if [ -d /sys/class/net ]
|
|
then
|
|
ifaces=$(for iface in $(ifquery --list --allow=hotplug 2>/dev/null)
|
|
do
|
|
link=${iface##:*}
|
|
link=${link##.*}
|
|
if [ -e "/sys/class/net/$link" ] && [ "$(cat /sys/class/net/$link/operstate)" = up ]
|
|
then
|
|
echo "$iface"
|
|
fi
|
|
done)
|
|
if [ -n "$ifaces" ]
|
|
then
|
|
ifup $ifaces "$@" || true
|
|
fi
|
|
fi
|
|
}
|
|
|
|
ifupdown_init() {
|
|
[ ! -e /run/network ] && mkdir -p /run/network &>/dev/null
|
|
[ ! -e /etc/network/run ] && \
|
|
ln -sf /run/network /etc/network/run &>/dev/null
|
|
}
|
|
|
|
case "$1" in
|
|
start)
|
|
ifupdown_init
|
|
if [ "$CONFIGURE_INTERFACES" = no ]
|
|
then
|
|
echo ${NAME}':' "Not configuring network interfaces, see /etc/default/networking"
|
|
exit 0
|
|
fi
|
|
set -f
|
|
exclusions=$(process_exclusions)
|
|
perfoptions=$(perf_options)
|
|
echo ${NAME}':' "Configuring network interfaces"
|
|
ifup -a $EXTRA_ARGS $exclusions $perfoptions
|
|
;;
|
|
|
|
stop)
|
|
ifupdown_init
|
|
check_network_file_systems
|
|
check_network_swap
|
|
exclusions=$(process_exclusions)
|
|
|
|
echo ${NAME}':' "Deconfiguring network interfaces"
|
|
ifdown -a $EXTRA_ARGS
|
|
;;
|
|
|
|
reload)
|
|
|
|
ifupdown_init
|
|
echo ${NAME}':' "Reloading network interfaces configuration"
|
|
|
|
ifreload -a $EXTRA_ARGS
|
|
;;
|
|
|
|
*)
|
|
echo ${NAME}':' "Usage: $0 {start|stop|reload}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
exit 0
|