svn commit: r256255 - in head/etc: . rc.d
Hiroki Sato
hrs at FreeBSD.org
Thu Oct 10 07:41:12 UTC 2013
Author: hrs
Date: Thu Oct 10 07:41:11 2013
New Revision: 256255
URL: http://svnweb.freebsd.org/changeset/base/256255
Log:
Add support for "vnet jname" argument in ifconfig_IF. The vnet keyword
is ignored except for "rc.d/netif vnet{up,down} ifn" because a jail is
usually created after interface initialization on boot time.
"rc.d/netif vnetup ifn" moves ifn into the specified jail. It is
designed to be used in other scripts like rc.d/jail, not automatically
invoked during the interface initialization.
Approved by: re (kib)
Modified:
head/etc/network.subr
head/etc/rc.d/netif
Modified: head/etc/network.subr
==============================================================================
--- head/etc/network.subr Thu Oct 10 07:39:19 2013 (r256254)
+++ head/etc/network.subr Thu Oct 10 07:41:11 2013 (r256255)
@@ -82,6 +82,41 @@ ifn_stop()
return $cfg
}
+# ifn_vnetup ifn
+# Move ifn to the specified vnet jail.
+#
+ifn_vnetup()
+{
+
+ ifn_vnet0 $1 vnet
+}
+
+# ifn_vnetdown ifn
+# Reclaim ifn from the specified vnet jail.
+#
+ifn_vnetdown()
+{
+
+ ifn_vnet0 $1 -vnet
+}
+
+# ifn_vnet0 ifn action
+# Helper function for ifn_vnetup and ifn_vnetdown.
+#
+ifn_vnet0()
+{
+ local _ifn _cfg _action _vnet
+ _ifn="$1"
+ _action="$2"
+ _cfg=1
+
+ if _vnet=$(vnetif $_ifn); then
+ ${IFCONFIG_CMD} $_ifn $_action $_vnet && _cfg=0
+ fi
+
+ return $_cfg
+}
+
# ifconfig_up if
# Evaluate ifconfig(8) arguments for interface $if and
# run ifconfig(8) with those arguments. It returns 0 if
@@ -284,24 +319,27 @@ _ifconfig_getargs()
# args such as DHCP and WPA.
ifconfig_getargs()
{
- local _tmpargs _arg _args
+ local _tmpargs _arg _args _vnet
_tmpargs=`_ifconfig_getargs $1 $2`
if [ $? -eq 1 ]; then
return 1
fi
_args=
+ _vnet=0
for _arg in $_tmpargs; do
- case $_arg in
- [Dd][Hh][Cc][Pp]) ;;
- [Nn][Oo][Aa][Uu][Tt][Oo]) ;;
- [Nn][Oo][Ss][Yy][Nn][Cc][Dd][Hh][Cc][Pp]) ;;
- [Ss][Yy][Nn][Cc][Dd][Hh][Cc][Pp]) ;;
- [Ww][Pp][Aa]) ;;
- [Hh][Oo][Ss][Tt][Aa][Pp]) ;;
- *)
+ case $_arg:$_vnet in
+ [Dd][Hh][Cc][Pp]:0) ;;
+ [Nn][Oo][Aa][Uu][Tt][Oo]:0) ;;
+ [Nn][Oo][Ss][Yy][Nn][Cc][Dd][Hh][Cc][Pp]:0) ;;
+ [Ss][Yy][Nn][Cc][Dd][Hh][Cc][Pp]:0) ;;
+ [Ww][Pp][Aa]:0) ;;
+ [Hh][Oo][Ss][Tt][Aa][Pp]:0) ;;
+ vnet:0) _vnet=1 ;;
+ *:1) _vnet=0 ;;
+ *:0)
_args="$_args $_arg"
- ;;
+ ;;
esac
done
@@ -426,6 +464,25 @@ hostapif()
return 1
}
+# vnetif if
+# Returns 0 and echo jail if "vnet" keyword is specified on the
+# interface, and 1 otherwise.
+vnetif()
+{
+ local _tmpargs _arg _vnet
+ _tmpargs=`_ifconfig_getargs $1`
+
+ _vnet=0
+ for _arg in $_tmpargs; do
+ case $_arg:$_vnet in
+ vnet:0) _vnet=1 ;;
+ *:1) echo $_arg; return 0 ;;
+ esac
+ done
+
+ return 1
+}
+
# afexists af
# Returns 0 if the address family is enabled in the kernel
# 1 otherwise.
Modified: head/etc/rc.d/netif
==============================================================================
--- head/etc/rc.d/netif Thu Oct 10 07:39:19 2013 (r256254)
+++ head/etc/rc.d/netif Thu Oct 10 07:41:11 2013 (r256255)
@@ -39,7 +39,9 @@ stop_cmd="network_stop"
cloneup_cmd="clone_up"
clonedown_cmd="clone_down"
clear_cmd="doclear"
-extra_commands="cloneup clonedown clear"
+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
@@ -123,6 +125,20 @@ network_stop0()
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
@@ -198,7 +214,7 @@ network_common()
# inet6 address configuration needs sleep for DAD.
case ${_func}:${_dadwait} in
- ifn_start:1)
+ ifn_start:1|ifn_vnetup:1|ifn_vnetdown:1)
sleep `${SYSCTL_N} net.inet6.ip6.dad_count`
sleep 1
;;
@@ -209,12 +225,25 @@ network_common()
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 svn-src-all
mailing list