Skip to content

Commit 6366538

Browse files
committed
[minigraph] Fix tagged VlanInterface if attached to multiple vlan as untagged member
Signed-off-by: Qi Luo <[email protected]>
1 parent 800de69 commit 6366538

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

src/sonic-config-engine/minigraph.py

+9-4
Original file line numberDiff line numberDiff line change
@@ -528,13 +528,18 @@ def parse_dpg(dpg, hname):
528528
vlan_members = {}
529529
dhcp_relay_table = {}
530530
vlantype_name = ""
531-
intf_vlan_mbr = defaultdict(list)
531+
# Dict: vlan member (port/PortChannel) -> set of VlanID, in which the member if an untagged vlan member
532+
untagged_vlan_mbr = defaultdict(set)
532533
for vintf in vlanintfs.findall(str(QName(ns, "VlanInterface"))):
533534
vlanid = vintf.find(str(QName(ns, "VlanID"))).text
535+
vlantype = vintf.find(str(QName(ns, "Type")))
536+
if vlantype != None:
537+
vlantype_name = vintf.find(str(QName(ns, "Type"))).text
534538
vintfmbr = vintf.find(str(QName(ns, "AttachTo"))).text
535539
vmbr_list = vintfmbr.split(';')
536-
for i, member in enumerate(vmbr_list):
537-
intf_vlan_mbr[member].append(vlanid)
540+
if vlantype_name != "Tagged":
541+
for member in vmbr_list:
542+
untagged_vlan_mbr[member].add(vlanid)
538543
for vintf in vlanintfs.findall(str(QName(ns, "VlanInterface"))):
539544
vintfname = vintf.find(str(QName(ns, "Name"))).text
540545
vlanid = vintf.find(str(QName(ns, "VlanID"))).text
@@ -548,7 +553,7 @@ def parse_dpg(dpg, hname):
548553
sonic_vlan_member_name = "Vlan%s" % (vlanid)
549554
if vlantype_name == "Tagged":
550555
vlan_members[(sonic_vlan_member_name, vmbr_list[i])] = {'tagging_mode': 'tagged'}
551-
elif len(intf_vlan_mbr[member]) > 1:
556+
elif len(untagged_vlan_mbr[member]) > 1:
552557
vlan_members[(sonic_vlan_member_name, vmbr_list[i])] = {'tagging_mode': 'tagged'}
553558
else:
554559
vlan_members[(sonic_vlan_member_name, vmbr_list[i])] = {'tagging_mode': 'untagged'}

0 commit comments

Comments
 (0)