net/vlan: update to use modern iproute2 interface
This replaces the vlan setup code that previously used the old vconfig binary with a new implementation using the iproute2 interface. vconfig does not handle many of the newer setups. No automatic migration path is provided, as altering the configuration is non-trivial. Signed-off-by: Robin H. Johnson <robbat2@gentoo.org> Written-by: Guillaume Castagnino <casta@xwing.info> X-Gentoo-Bug: 346365
This commit is contained in:
parent
b512d0db98
commit
683a21b0a0
@ -527,7 +527,8 @@
|
|||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# VLAN (802.1q support)
|
# VLAN (802.1q support)
|
||||||
# For VLAN support, emerge net-misc/vconfig
|
# For VLAN support, emerge sys-apps/iproute2
|
||||||
|
# The old vconfig based VLAN support is no longer available.
|
||||||
|
|
||||||
# Specify the VLAN numbers for the interface like so
|
# Specify the VLAN numbers for the interface like so
|
||||||
# Please ensure your VLAN IDs are NOT zero-padded
|
# Please ensure your VLAN IDs are NOT zero-padded
|
||||||
@ -537,10 +538,17 @@
|
|||||||
# need it up.
|
# need it up.
|
||||||
#config_eth0="null"
|
#config_eth0="null"
|
||||||
|
|
||||||
# You can also configure the VLAN - see for vconfig man page for more details
|
# You can also configure the VLAN - see for ip man page for more details
|
||||||
#vconfig_eth0="set_name_type VLAN_PLUS_VID_NO_PAD"
|
# To change the vlan interface name. If not set, the standard "iface.vlanid"
|
||||||
#vconfig_vlan1="set_flag 1
|
# will be used
|
||||||
#set_egress_map 2 6"
|
#vlan1_name="vlan1"
|
||||||
|
#vlan2_name="eth0.2"
|
||||||
|
# Set the vlan flags
|
||||||
|
#vlan1_flags="reorder_hdr off gvrp on loose_binding on"
|
||||||
|
# Configure in/egress maps
|
||||||
|
#vlan1_ingress="2:6 3:5"
|
||||||
|
#vlan1_egress="1:2"
|
||||||
|
|
||||||
#config_vlan1="172.16.3.1/23"
|
#config_vlan1="172.16.3.1/23"
|
||||||
#config_vlan2="172.16.2.1/23"
|
#config_vlan2="172.16.2.1/23"
|
||||||
|
|
||||||
@ -553,8 +561,7 @@
|
|||||||
# This means you do not need to create init scripts in /etc/init.d for each
|
# This means you do not need to create init scripts in /etc/init.d for each
|
||||||
# vlan, you must need to create one for the physical interface.
|
# vlan, you must need to create one for the physical interface.
|
||||||
# If you wish to control the configuration of each vlan through a separate
|
# If you wish to control the configuration of each vlan through a separate
|
||||||
# script, or wish to rename the vlan interface to something that vconfig
|
# script then you need to do this.
|
||||||
# cannot then you need to do this.
|
|
||||||
#vlan_start_eth0="no"
|
#vlan_start_eth0="no"
|
||||||
|
|
||||||
# If you do the above then you may want to depend on eth0 like so
|
# If you do the above then you may want to depend on eth0 like so
|
||||||
|
58
net/vlan.sh
58
net/vlan.sh
@ -1,9 +1,18 @@
|
|||||||
# Copyright (c) 2007-2008 Roy Marples <roy@marples.name>
|
# Copyright (c) 2007-2008 Roy Marples <roy@marples.name>
|
||||||
# All rights reserved. Released under the 2-clause BSD license.
|
# All rights reserved. Released under the 2-clause BSD license.
|
||||||
|
|
||||||
|
_ip()
|
||||||
|
{
|
||||||
|
if [ -x /bin/ip ]; then
|
||||||
|
echo /bin/ip
|
||||||
|
else
|
||||||
|
echo /sbin/ip
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
vlan_depend()
|
vlan_depend()
|
||||||
{
|
{
|
||||||
program /sbin/vconfig
|
program $(_ip)
|
||||||
after interface
|
after interface
|
||||||
before dhcp
|
before dhcp
|
||||||
}
|
}
|
||||||
@ -36,31 +45,12 @@ _check_vlan()
|
|||||||
|
|
||||||
vlan_pre_start()
|
vlan_pre_start()
|
||||||
{
|
{
|
||||||
local vc="$(_get_array "vconfig_${IFVAR}")"
|
local vconfig
|
||||||
[ -z "${vc}" ] && return 0
|
eval vconfig=\$vconfig_${IFVAR}
|
||||||
|
if [ -n "${vconfig}" ]; then
|
||||||
_check_vlan || return 1
|
eerror "You must convert your vconfig_ VLAN entries to vlan${N} entries."
|
||||||
_exists || return 1
|
|
||||||
|
|
||||||
local v= x= e=
|
|
||||||
local IFS="$__IFS"
|
|
||||||
for v in ${vc}; do
|
|
||||||
unset IFS
|
|
||||||
case "${v}" in
|
|
||||||
set_name_type" "*) x=${v};;
|
|
||||||
*)
|
|
||||||
set -- ${v}
|
|
||||||
x="$1 ${IFACE}"
|
|
||||||
shift
|
|
||||||
x="${x} $@"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
e="$(vconfig ${x} 2>&1 1>/dev/null)"
|
|
||||||
[ -z "${e}" ] && continue
|
|
||||||
eerror "${e}"
|
|
||||||
return 1
|
return 1
|
||||||
done
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
vlan_post_start()
|
vlan_post_start()
|
||||||
@ -72,10 +62,22 @@ vlan_post_start()
|
|||||||
_check_vlan || return 1
|
_check_vlan || return 1
|
||||||
_exists || return 1
|
_exists || return 1
|
||||||
|
|
||||||
local vlan= e= s=
|
local vlan= e= s= vname= vflags= vingress= vegress=
|
||||||
for vlan in ${vlans}; do
|
for vlan in ${vlans}; do
|
||||||
einfo "Adding VLAN ${vlan} to ${IFACE}"
|
einfo "Adding VLAN ${vlan} to ${IFACE}"
|
||||||
e="$(vconfig add "${IFACE}" "${vlan}" 2>&1 1>/dev/null)"
|
# We need to gather all interface configuration options
|
||||||
|
# 1) naming. Default to the standard "${IFACE}.${vlan}" but it can be anything
|
||||||
|
eval vname=\$vlan${vlan}_name
|
||||||
|
[ -z "${vname}" ] && vname="${IFACE}.${vlan}"
|
||||||
|
# 2) flags
|
||||||
|
eval vflags=\$vlan${vlan}_flags
|
||||||
|
# 3) ingress/egress map
|
||||||
|
eval vingress=\$vlan${vlan}_ingress
|
||||||
|
[ -z "${vingress}" ] || vingress="ingress-qos-map ${vingress}"
|
||||||
|
eval vegress=\$vlan${vlan}_egress
|
||||||
|
[ -z "${vegress}" ] || vegress="egress-qos-map ${vegress}"
|
||||||
|
|
||||||
|
e="$(ip link add link "${IFACE}" name "${vname}" type vlan id "${vlan}" ${vflags} ${vingress} ${vegress} 2>&1 1>/dev/null)"
|
||||||
if [ -n "${e}" ]; then
|
if [ -n "${e}" ]; then
|
||||||
eend 1 "${e}"
|
eend 1 "${e}"
|
||||||
continue
|
continue
|
||||||
@ -110,7 +112,7 @@ vlan_post_stop()
|
|||||||
stop
|
stop
|
||||||
) && {
|
) && {
|
||||||
mark_service_stopped "net.${vlan}"
|
mark_service_stopped "net.${vlan}"
|
||||||
vconfig rem "${vlan}" >/dev/null
|
ip link delete "${vlan}" type vlan >/dev/null
|
||||||
}
|
}
|
||||||
done
|
done
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user