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)
|
||||
# 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
|
||||
# Please ensure your VLAN IDs are NOT zero-padded
|
||||
@ -537,10 +538,17 @@
|
||||
# need it up.
|
||||
#config_eth0="null"
|
||||
|
||||
# You can also configure the VLAN - see for vconfig man page for more details
|
||||
#vconfig_eth0="set_name_type VLAN_PLUS_VID_NO_PAD"
|
||||
#vconfig_vlan1="set_flag 1
|
||||
#set_egress_map 2 6"
|
||||
# You can also configure the VLAN - see for ip man page for more details
|
||||
# To change the vlan interface name. If not set, the standard "iface.vlanid"
|
||||
# will be used
|
||||
#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_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
|
||||
# vlan, you must need to create one for the physical interface.
|
||||
# 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
|
||||
# cannot then you need to do this.
|
||||
# script then you need to do this.
|
||||
#vlan_start_eth0="no"
|
||||
|
||||
# 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>
|
||||
# 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()
|
||||
{
|
||||
program /sbin/vconfig
|
||||
program $(_ip)
|
||||
after interface
|
||||
before dhcp
|
||||
}
|
||||
@ -36,31 +45,12 @@ _check_vlan()
|
||||
|
||||
vlan_pre_start()
|
||||
{
|
||||
local vc="$(_get_array "vconfig_${IFVAR}")"
|
||||
[ -z "${vc}" ] && return 0
|
||||
|
||||
_check_vlan || return 1
|
||||
_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}"
|
||||
local vconfig
|
||||
eval vconfig=\$vconfig_${IFVAR}
|
||||
if [ -n "${vconfig}" ]; then
|
||||
eerror "You must convert your vconfig_ VLAN entries to vlan${N} entries."
|
||||
return 1
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
vlan_post_start()
|
||||
@ -72,10 +62,22 @@ vlan_post_start()
|
||||
_check_vlan || return 1
|
||||
_exists || return 1
|
||||
|
||||
local vlan= e= s=
|
||||
local vlan= e= s= vname= vflags= vingress= vegress=
|
||||
for vlan in ${vlans}; do
|
||||
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
|
||||
eend 1 "${e}"
|
||||
continue
|
||||
@ -110,7 +112,7 @@ vlan_post_stop()
|
||||
stop
|
||||
) && {
|
||||
mark_service_stopped "net.${vlan}"
|
||||
vconfig rem "${vlan}" >/dev/null
|
||||
ip link delete "${vlan}" type vlan >/dev/null
|
||||
}
|
||||
done
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user