#!/bin/bash ### BEGIN INIT INFO # Provides: networking ifupdown # Required-Start: mountkernfs $local_fs urandom # Required-Stop: $local_fs # Default-Start: S # Default-Stop: 0 6 # Short-Description: Raise network interfaces. # Description: Prepare /run/network directory, ifstate file and raise network interfaces, or take them down. ### END INIT INFO RUN_DIR="/run/network" IFSTATE_LOCKFILE="${RUN_DIR}/ifstatelock" STATE_DIR="/var/tmp/network" IFSTATE_FILE="${STATE_DIR}/ifstatenew" NAME=networking SCRIPTNAME=/etc/init.d/$NAME [ -x /sbin/ifup ] || exit 0 [ -x /sbin/ifdown ] || exit 0 . /lib/lsb/init-functions 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" gen_examples() { # Generate sample interfaces file. The interfaces files are # generated under /usr/share/doc/ifupdown2/examples/ # # generate files only at boot [ -f ${IFSTATE_LOCKFILE} ] && return python_ifupdown2_docdir="/usr/share/doc/ifupdown2" swpfile=${python_ifupdown2_docdir}"/examples/swp_defaults" bridgedefaultfile=${python_ifupdown2_docdir}"/examples/bridge_untagged_default" interfaces_gen_script=${python_ifupdown2_docdir}"/examples/generate_interfaces.py" [ ! -e $interfaces_gen_script ] && return ret=$($interfaces_gen_script -s 2>&1 >$swpfile) ret=$($interfaces_gen_script -b 2>&1 >$bridgedefaultfile) return } perf_options() { # At bootup lets set perfmode [ -f ${IFSTATE_LOCKFILE} ] && 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 log_warning_msg "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*) log_warning_msg "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) log_warning_msg "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*) log_warning_msg "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() { # remove state file at boot [ ! -e ${IFSTATE_LOCKFILE} ] && rm -f ${IFSTATE_FILE} [ ! -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) gen_examples ifupdown_init if [ "$CONFIGURE_INTERFACES" = no ] then log_action_msg "Not configuring network interfaces, see /etc/default/networking" exit 0 fi set -f exclusions=$(process_exclusions) perfoptions=$(perf_options) log_action_begin_msg "Configuring network interfaces" ifup -a $EXTRA_ARGS $exclusions $perfoptions log_action_end_msg $? ;; stop) if [ "$SKIP_DOWN_AT_SYSRESET" = "yes" ]; then shutdown_or_reboot=$(runlevel 2>/dev/null | \ /usr/bin/tr -s " " | \ /usr/bin/cut -d " " \ -f1- --output-delimiter=$'\n' | \ /bin/grep -e "0" -e "6") if [ -n "$shutdown_or_reboot" ]; then log_action_begin_msg "Deconfiguring network interfaces..skip" log_action_end_msg 0 exit 0 fi fi ifupdown_init check_network_file_systems check_network_swap exclusions=$(process_exclusions) log_action_begin_msg "Deconfiguring network interfaces" ifdown -a $EXTRA_ARGS $exclusions log_action_end_msg $? ;; reload) ifupdown_init log_action_begin_msg "Reloading network interfaces configuration" ifreload -a $EXTRA_ARGS log_action_end_msg $? ;; reload-currently-up) ifupdown_init log_action_begin_msg "Reloading currently up network interfaces configuration" ifreload --currently-up $EXTRA_ARGS log_action_end_msg $? ;; force-reload) ifupdown_init log_action_begin_msg "Reloading network interfaces configuration" ifreload -f -a $EXTRA_ARGS log_action_end_msg $? ;; restart) ifupdown_init set -f exclusions=$(process_exclusions) log_action_begin_msg "Reconfiguring network interfaces" ifdown -a $EXTRA_ARGS $exclusions || true ifup -a $EXTRA_ARGS $exclusions log_action_end_msg $? ;; *) echo "Usage: /etc/init.d/networking {start|stop|reload|restart|force-reload}" exit 1 ;; esac exit 0 # vim: noet ts=8