@@ -528,13 +528,18 @@ def parse_dpg(dpg, hname):
528
528
vlan_members = {}
529
529
dhcp_relay_table = {}
530
530
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 )
532
533
for vintf in vlanintfs .findall (str (QName (ns , "VlanInterface" ))):
533
534
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
534
538
vintfmbr = vintf .find (str (QName (ns , "AttachTo" ))).text
535
539
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 )
538
543
for vintf in vlanintfs .findall (str (QName (ns , "VlanInterface" ))):
539
544
vintfname = vintf .find (str (QName (ns , "Name" ))).text
540
545
vlanid = vintf .find (str (QName (ns , "VlanID" ))).text
@@ -548,7 +553,7 @@ def parse_dpg(dpg, hname):
548
553
sonic_vlan_member_name = "Vlan%s" % (vlanid )
549
554
if vlantype_name == "Tagged" :
550
555
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 :
552
557
vlan_members [(sonic_vlan_member_name , vmbr_list [i ])] = {'tagging_mode' : 'tagged' }
553
558
else :
554
559
vlan_members [(sonic_vlan_member_name , vmbr_list [i ])] = {'tagging_mode' : 'untagged' }
0 commit comments