[Midnightbsd-cvs] src [11692] trunk/etc/rc.d/netif: update netif
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sun Jul 8 16:30:37 EDT 2018
Revision: 11692
http://svnweb.midnightbsd.org/src/?rev=11692
Author: laffer1
Date: 2018-07-08 16:30:36 -0400 (Sun, 08 Jul 2018)
Log Message:
-----------
update netif
Modified Paths:
--------------
trunk/etc/rc.d/netif
Modified: trunk/etc/rc.d/netif
===================================================================
--- trunk/etc/rc.d/netif 2018-07-08 20:30:04 UTC (rev 11691)
+++ trunk/etc/rc.d/netif 2018-07-08 20:30:36 UTC (rev 11692)
@@ -23,11 +23,10 @@
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# $MidnightBSD$
-#
# PROVIDE: netif
# REQUIRE: atm1 FILESYSTEMS serial sppp sysctl
-# REQUIRE: ipfilter ipfs
+# REQUIRE: hostid ipfilter ipfs
# KEYWORD: nojailvnet
. /etc/rc.subr
@@ -38,7 +37,10 @@
stop_cmd="network_stop"
cloneup_cmd="clone_up"
clonedown_cmd="clone_down"
-extra_commands="cloneup clonedown"
+clear_cmd="doclear"
+vnetup_cmd="vnet_up"
+vnetdown_cmd="vnet_down"
+extra_commands="cloneup clonedown clear vnetup vnetdown"
cmdifn=
set_rcvar_obsolete ipv6_enable ipv6_activate_all_interfaces
@@ -46,6 +48,8 @@
network_start()
{
+ local _if
+
# Set the list of interfaces to work on.
#
cmdifn=$*
@@ -58,21 +62,18 @@
# disable SIGINT (Ctrl-c) when running at startup
trap : 2
- # Create cloned interfaces
- clone_up
-
# Create Fast EtherChannel interfaces
fec_up
+ fi
- # Create IPv6<-->IPv4 tunnels
- gif_up
+ # Create cloned interfaces
+ clone_up $cmdifn
- # Rename interfaces.
- ifnet_rename
- fi
+ # Rename interfaces.
+ ifnet_rename $cmdifn
# Configure the interface(s).
- network_common ifn_start
+ network_common ifn_start $cmdifn
if [ -f /etc/rc.d/ipfilter ] ; then
# Resync ipfilter
@@ -81,18 +82,62 @@
if [ -f /etc/rc.d/bridge -a -n "$cmdifn" ] ; then
/etc/rc.d/bridge start $cmdifn
fi
+ if [ -f /etc/rc.d/routing -a -n "$cmdifn" ] ; then
+ for _if in $cmdifn; do
+ /etc/rc.d/routing static any $_if
+ done
+ fi
}
network_stop()
{
+ _clone_down=1
+ network_stop0 $*
+}
+
+doclear()
+{
+ _clone_down=
+ network_stop0 $*
+}
+
+network_stop0()
+{
+ local _if
+
# Set the list of interfaces to work on.
#
cmdifn=$*
# Deconfigure the interface(s)
- network_common ifn_stop
+ network_common ifn_stop $cmdifn
+
+ # Destroy cloned interfaces
+ if [ -n "$_clone_down" ]; then
+ clone_down $cmdifn
+ fi
+
+ if [ -f /etc/rc.d/routing -a -n "$cmdifn" ] ; then
+ for _if in $cmdifn; do
+ /etc/rc.d/routing stop any $_if
+ done
+ fi
}
+vnet_up()
+{
+ cmdifn=$*
+
+ network_common ifn_vnetup $cmdifn
+}
+
+vnet_down()
+{
+ cmdifn=$*
+
+ network_common ifn_vnetdown $cmdifn
+}
+
# network_common routine
# Common configuration subroutine for network interfaces. This
# routine takes all the preparatory steps needed for configuriing
@@ -99,7 +144,7 @@
# an interface and then calls $routine.
network_common()
{
- local _cooked_list _fail _func _ok _str
+ local _cooked_list _tmp_list _fail _func _ok _str _cmdifn
_func=
@@ -107,43 +152,97 @@
err 1 "network_common(): No function name specified."
else
_func="$1"
+ shift
fi
# Set the scope of the command (all interfaces or just one).
#
_cooked_list=
- if [ -n "$cmdifn" ]; then
+ _tmp_list=
+ _cmdifn=$*
+ if [ -n "$_cmdifn" ]; then
# Don't check that the interface(s) exist. We need to run
# the down code even when the interface doesn't exist to
# kill off wpa_supplicant.
# XXXBED: is this really true or does wpa_supplicant die?
# if so, we should get rid of the devd entry
- _cooked_list="$cmdifn"
+ _cooked_list="$_cmdifn"
else
_cooked_list="`list_net_interfaces`"
fi
+ # Expand epair[0-9] to epair[0-9][ab].
+ for ifn in $_cooked_list; do
+ case ${ifn#epair} in
+ [0-9]*[ab]) ;; # Skip epair[0-9]*[ab].
+ [0-9]*)
+ for _str in $_cooked_list; do
+ case $_str in
+ $ifn) _tmp_list="$_tmp_list ${ifn}a ${ifn}b" ;;
+ *) _tmp_list="$_tmp_list ${ifn}" ;;
+ esac
+ done
+ _cooked_list=${_tmp_list# }
+ ;;
+ esac
+ done
+
+ _dadwait=
_fail=
_ok=
- for ifn in ${_cooked_list}; do
+ for ifn in ${_cooked_list# }; do
+ # Skip if ifn does not exist.
+ case $_func in
+ ifn_stop)
+ if ! ${IFCONFIG_CMD} $ifn > /dev/null 2>&1; then
+ warn "$ifn does not exist. Skipped."
+ _fail="${_fail} ${ifn}"
+ continue
+ fi
+ ;;
+ esac
if ${_func} ${ifn} $2; then
_ok="${_ok} ${ifn}"
+ if ipv6if ${ifn}; then
+ _dadwait=1
+ fi
else
_fail="${_fail} ${ifn}"
fi
done
+ # inet6 address configuration needs sleep for DAD.
+ case ${_func}:${_dadwait} in
+ ifn_start:1|ifn_vnetup:1|ifn_vnetdown:1)
+ sleep `${SYSCTL_N} net.inet6.ip6.dad_count`
+ sleep 1
+ ;;
+ esac
+
_str=
if [ -n "${_ok}" ]; then
case ${_func} in
ifn_start)
_str='Starting'
- ;;
+ ;;
ifn_stop)
_str='Stopping'
- ;;
+ ;;
+ ifn_vnetup)
+ _str='Moving'
+ ;;
+ ifn_vnetdown)
+ _str='Reclaiming'
+ ;;
esac
echo "${_str} Network:${_ok}."
+ case ${_func} in
+ ifn_vnetup)
+ # Clear _ok not to do "ifconfig $ifn"
+ # because $ifn is no longer in the current vnet.
+ _ok=
+ ;;
+ esac
if check_startmsgs; then
for ifn in ${_ok}; do
/sbin/ifconfig ${ifn}
More information about the Midnightbsd-cvs
mailing list