From 9be32dcd7b2fda34a6bc8acac8c77316b9ab1e41 Mon Sep 17 00:00:00 2001 From: Lawrence Lee Date: Tue, 27 Oct 2020 18:56:36 +0000 Subject: [PATCH 1/3] [minigraph.py]: Parse VLAN MAC address from minigraph when present Signed-off-by: Lawrence Lee --- src/sonic-config-engine/minigraph.py | 4 ++++ src/sonic-config-engine/tests/simple-sample-graph-case.xml | 1 + src/sonic-config-engine/tests/test_minigraph_case.py | 7 +++---- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index c4e8a6ae21ad..747938dd640b 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -362,6 +362,7 @@ def parse_dpg(dpg, hname): vlanid = vintf.find(str(QName(ns, "VlanID"))).text vintfmbr = vintf.find(str(QName(ns, "AttachTo"))).text vlantype = vintf.find(str(QName(ns, "Type"))) + vlanmac = vintf.find(str(QName(ns, "MacAddress"))) if vlantype != None: vlantype_name = vintf.find(str(QName(ns, "Type"))).text vmbr_list = vintfmbr.split(';') @@ -383,6 +384,9 @@ def parse_dpg(dpg, hname): vdhcpserver_list = vintfdhcpservers.split(';') vlan_attributes['dhcp_servers'] = vdhcpserver_list + if vlanmac != None: + vlan_attributes['mac'] = vlanmac.text + sonic_vlan_name = "Vlan%s" % vlanid if sonic_vlan_name != vintfname: vlan_attributes['alias'] = vintfname diff --git a/src/sonic-config-engine/tests/simple-sample-graph-case.xml b/src/sonic-config-engine/tests/simple-sample-graph-case.xml index 3188409b1fd0..6c7729fd0696 100644 --- a/src/sonic-config-engine/tests/simple-sample-graph-case.xml +++ b/src/sonic-config-engine/tests/simple-sample-graph-case.xml @@ -134,6 +134,7 @@ 1000 1000 192.168.0.0/27 + 00:aa:bb:cc:dd:ee diff --git a/src/sonic-config-engine/tests/test_minigraph_case.py b/src/sonic-config-engine/tests/test_minigraph_case.py index 42e5e63ac6d6..8460433a629a 100644 --- a/src/sonic-config-engine/tests/test_minigraph_case.py +++ b/src/sonic-config-engine/tests/test_minigraph_case.py @@ -79,11 +79,10 @@ def test_minigraph_interfaces(self): self.assertEqual(output.strip(), "[('Ethernet0', '10.0.0.58/31'), 'Ethernet0', ('Ethernet0', 'FC00::75/126')]") def test_minigraph_vlans(self): - argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v VLAN' - output = self.run_script(argument) + vlan_table = minigraph.parse_xml(self.sample_graph, port_config_file=self.port_config)["VLAN"] self.assertEqual( - utils.to_dict(output.strip()), - utils.to_dict("{'Vlan1000': {'alias': 'ab1', 'dhcp_servers': ['192.0.0.1', '192.0.0.2'], 'vlanid': '1000'}}") + vlan_table, + utils.to_dict("{'Vlan1000': {'alias': 'ab1', 'dhcp_servers': ['192.0.0.1', '192.0.0.2'], 'vlanid': '1000', 'mac': '00:aa:bb:cc:dd:ee' }}") ) def test_minigraph_vlan_members(self): From 60f0f87bdfd9948e94c82f033006016f3fd185a8 Mon Sep 17 00:00:00 2001 From: Lawrence Lee Date: Tue, 27 Oct 2020 19:30:49 +0000 Subject: [PATCH 2/3] [minigraph.py]: Call `sonic-cfggen` during minigraph testing Signed-off-by: Lawrence Lee --- src/sonic-config-engine/tests/test_minigraph_case.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/sonic-config-engine/tests/test_minigraph_case.py b/src/sonic-config-engine/tests/test_minigraph_case.py index 8460433a629a..e149ff64670b 100644 --- a/src/sonic-config-engine/tests/test_minigraph_case.py +++ b/src/sonic-config-engine/tests/test_minigraph_case.py @@ -79,9 +79,10 @@ def test_minigraph_interfaces(self): self.assertEqual(output.strip(), "[('Ethernet0', '10.0.0.58/31'), 'Ethernet0', ('Ethernet0', 'FC00::75/126')]") def test_minigraph_vlans(self): - vlan_table = minigraph.parse_xml(self.sample_graph, port_config_file=self.port_config)["VLAN"] + argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v VLAN' + output = self.run_script(argument) self.assertEqual( - vlan_table, + utils.to_dict(output.strip()), utils.to_dict("{'Vlan1000': {'alias': 'ab1', 'dhcp_servers': ['192.0.0.1', '192.0.0.2'], 'vlanid': '1000', 'mac': '00:aa:bb:cc:dd:ee' }}") ) From 173197ed4f85c3d6bdeee8a88046467df964775b Mon Sep 17 00:00:00 2001 From: Lawrence Lee Date: Tue, 27 Oct 2020 19:56:20 +0000 Subject: [PATCH 3/3] [minigraph.py]: Make VLAN MAC QName search consistent Signed-off-by: Lawrence Lee --- src/sonic-config-engine/minigraph.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index 747938dd640b..3d3bf72463f0 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -362,7 +362,6 @@ def parse_dpg(dpg, hname): vlanid = vintf.find(str(QName(ns, "VlanID"))).text vintfmbr = vintf.find(str(QName(ns, "AttachTo"))).text vlantype = vintf.find(str(QName(ns, "Type"))) - vlanmac = vintf.find(str(QName(ns, "MacAddress"))) if vlantype != None: vlantype_name = vintf.find(str(QName(ns, "Type"))).text vmbr_list = vintfmbr.split(';') @@ -384,6 +383,7 @@ def parse_dpg(dpg, hname): vdhcpserver_list = vintfdhcpservers.split(';') vlan_attributes['dhcp_servers'] = vdhcpserver_list + vlanmac = vintf.find(str(QName(ns, "MacAddress"))) if vlanmac != None: vlan_attributes['mac'] = vlanmac.text