Bug #427152: Port of VLAN code to sysfs/iproue2 from vconfig lost the ability to create different vlans with the same ID but different interfaces on a single system. Implement it now.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
This commit is contained in:
Robin H. Johnson
2012-07-20 10:20:19 -07:00
parent 2e3715bb69
commit a6db2374fe
2 changed files with 38 additions and 15 deletions

View File

@@ -66,26 +66,41 @@ vlan_post_start()
einfo "Adding VLAN ${vlan} to ${IFACE}"
# 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
eval vname=\$${IFACE}_vlan${vlan}_name
[ -z "${vname}" ] && eval vname=\$vlan${vlan}_name
[ -z "${vname}" ] && vname="${IFACE}.${vlan}"
# 2) flags
eval vflags=\$vlan${vlan}_flags
eval vflags=\$${IFACE}_vlan${vlan}_flags
[ -z "${vname}" ] && eval vflags=\$vlan${vlan}_flags
# 3) ingress/egress map
eval vingress=\$vlan${vlan}_ingress
eval vingress=\$${IFACE}_vlan${vlan}_ingress
[ -z "${vingress}" ] && eval vingress=\$vlan${vlan}_ingress
[ -z "${vingress}" ] || vingress="ingress-qos-map ${vingress}"
eval vegress=\$vlan${vlan}_egress
eval vegress=\$${IFACE}_vlan${vlan}_egress
[ -z "${vegress}" ] && eval vegress=\$vlan${vlan}_egress
[ -z "${vegress}" ] || vegress="egress-qos-map ${vegress}"
# txqueue
local txqueuelen=
eval txqueuelen=\$txqueuelen_vlan${vlan}
eval txqueuelen=\$txqueuelen_${IFACE}_vlan${vlan}
[ -z "${txqueuelen}" ] && eval txqueuelen=\$txqueuelen_vlan${vlan}
# mac
local mac=
eval mac=\$mac_vlan${vlan}
eval mac=\$mac_${IFACE}_vlan${vlan}
[ -z "${mac}" ] && eval mac=\$mac_vlan${vlan}
# broadcast
local broadcast=
eval broadcast=\$broadcast_vlan${vlan}
eval broadcast=\$broadcast_${IFACE}_vlan${vlan}
[ -z "${broadcast}" ] && eval broadcast=\$broadcast_vlan${vlan}
# mtu
local mtu=
eval mtu=\$mtu_vlan${vlan}
eval mtu=\$mtu_${IFACE}_vlan${vlan}
[ -z "${mtu}" ] && eval mtu=\$mtu_vlan${vlan}
# combine it all
local opts="${txqueuelen:+txqueuelen} ${txqueuelen} ${mac:+address} ${mac} ${broadcast:+broadcast} ${broadcast} ${mtu:+mtu} ${mtu}"
veinfo "ip link add link \"${IFACE}\" name \"${vname}\" ${opts} type vlan id \"${vlan}\" ${vflags} ${vingress} ${vegress}"
e="$(ip link add link "${IFACE}" name "${vname}" ${opts} type vlan id "${vlan}" ${vflags} ${vingress} ${vegress} 2>&1 1>/dev/null)"
if [ -n "${e}" ]; then
eend 1 "${e}"