@@ -516,6 +516,7 @@ def parse_dpg(dpg, hname):
516
516
vlanintfs = child .find (str (QName (ns , "VlanInterfaces" )))
517
517
vlans = {}
518
518
vlan_members = {}
519
+ dhcp_relay_table = {}
519
520
vlantype_name = ""
520
521
intf_vlan_mbr = defaultdict (list )
521
522
for vintf in vlanintfs .findall (str (QName (ns , "VlanInterface" ))):
@@ -543,6 +544,7 @@ def parse_dpg(dpg, hname):
543
544
vlan_members [(sonic_vlan_member_name , vmbr_list [i ])] = {'tagging_mode' : 'untagged' }
544
545
545
546
vlan_attributes = {'vlanid' : vlanid , 'members' : vmbr_list }
547
+ dhcp_attributes = {}
546
548
547
549
# If this VLAN requires a DHCP relay agent, it will contain a <DhcpRelays> element
548
550
# containing a list of DHCP server IPs
@@ -557,6 +559,9 @@ def parse_dpg(dpg, hname):
557
559
vintfdhcpservers = vintf_node .text
558
560
vdhcpserver_list = vintfdhcpservers .split (';' )
559
561
vlan_attributes ['dhcpv6_servers' ] = vdhcpserver_list
562
+ dhcp_attributes ['dhcpv6_servers' ] = vdhcpserver_list
563
+ sonic_vlan_member_name = "Vlan%s" % (vlanid )
564
+ dhcp_relay_table [sonic_vlan_member_name ] = dhcp_attributes
560
565
561
566
vlanmac = vintf .find (str (QName (ns , "MacAddress" )))
562
567
if vlanmac is not None and vlanmac .text is not None :
@@ -681,8 +686,8 @@ def parse_dpg(dpg, hname):
681
686
if mg_key in mg_tunnel .attrib :
682
687
tunnelintfs [tunnel_type ][tunnel_name ][table_key ] = mg_tunnel .attrib [mg_key ]
683
688
684
- return intfs , lo_intfs , mvrf , mgmt_intf , vlans , vlan_members , pcs , pc_members , acls , vni , tunnelintfs , dpg_ecmp_content
685
- return None , None , None , None , None , None , None , None , None , None
689
+ return intfs , lo_intfs , mvrf , mgmt_intf , vlans , vlan_members , dhcp_relay_table , pcs , pc_members , acls , vni , tunnelintfs , dpg_ecmp_content
690
+ return None , None , None , None , None , None , None , None , None , None , None , None , None
686
691
687
692
def parse_host_loopback (dpg , hname ):
688
693
for child in dpg :
@@ -1108,6 +1113,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw
1108
1113
tunnel_intfs = None
1109
1114
vlans = None
1110
1115
vlan_members = None
1116
+ dhcp_relay_table = None
1111
1117
pcs = None
1112
1118
mgmt_intf = None
1113
1119
lo_intfs = None
@@ -1167,7 +1173,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw
1167
1173
for child in root :
1168
1174
if asic_name is None :
1169
1175
if child .tag == str (QName (ns , "DpgDec" )):
1170
- (intfs , lo_intfs , mvrf , mgmt_intf , vlans , vlan_members , pcs , pc_members , acls , vni , tunnel_intfs , dpg_ecmp_content ) = parse_dpg (child , hostname )
1176
+ (intfs , lo_intfs , mvrf , mgmt_intf , vlans , vlan_members , dhcp_relay_table , pcs , pc_members , acls , vni , tunnel_intfs , dpg_ecmp_content ) = parse_dpg (child , hostname )
1171
1177
elif child .tag == str (QName (ns , "CpgDec" )):
1172
1178
(bgp_sessions , bgp_internal_sessions , bgp_asn , bgp_peers_with_range , bgp_monitors ) = parse_cpg (child , hostname )
1173
1179
elif child .tag == str (QName (ns , "PngDec" )):
@@ -1182,7 +1188,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw
1182
1188
(port_speeds_default , port_descriptions ) = parse_deviceinfo (child , hwsku )
1183
1189
else :
1184
1190
if child .tag == str (QName (ns , "DpgDec" )):
1185
- (intfs , lo_intfs , mvrf , mgmt_intf , vlans , vlan_members , pcs , pc_members , acls , vni , tunnel_intfs , dpg_ecmp_content ) = parse_dpg (child , asic_name )
1191
+ (intfs , lo_intfs , mvrf , mgmt_intf , vlans , vlan_members , dhcp_relay_table , pcs , pc_members , acls , vni , tunnel_intfs , dpg_ecmp_content ) = parse_dpg (child , asic_name )
1186
1192
host_lo_intfs = parse_host_loopback (child , hostname )
1187
1193
elif child .tag == str (QName (ns , "CpgDec" )):
1188
1194
(bgp_sessions , bgp_internal_sessions , bgp_asn , bgp_peers_with_range , bgp_monitors ) = parse_cpg (child , asic_name , local_devices )
@@ -1499,7 +1505,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw
1499
1505
results ['DEVICE_NEIGHBOR_METADATA' ] = { key :devices [key ] for key in devices if key in {device ['name' ] for device in neighbors .values ()} }
1500
1506
results ['SYSLOG_SERVER' ] = dict ((item , {}) for item in syslog_servers )
1501
1507
results ['DHCP_SERVER' ] = dict ((item , {}) for item in dhcp_servers )
1502
- results ['DHCPv6_SERVER ' ] = dict (( item , {}) for item in dhcpv6_servers )
1508
+ results ['DHCP_RELAY ' ] = dhcp_relay_table
1503
1509
results ['NTP_SERVER' ] = dict ((item , {}) for item in ntp_servers )
1504
1510
results ['TACPLUS_SERVER' ] = dict ((item , {'priority' : '1' , 'tcp_port' : '49' }) for item in tacacs_servers )
1505
1511
results ['ACL_TABLE' ] = filter_acl_table_bindings (acls , neighbors , pcs , sub_role )
0 commit comments