From 8c599882da021687753d4307bafc61c7d0684515 Mon Sep 17 00:00:00 2001 From: vganesan-nokia <67648637+vganesan-nokia@users.noreply.github.com> Date: Mon, 26 Jul 2021 14:32:40 -0400 Subject: [PATCH] [voq][minigraph] Add admin_status attribute for inband interface (#8050) Why I did it In the config_db.json generated by minigraph "admin_status" attribute is missing for the VOQ inband interface port in the PORT table. How I did it Changes done to add admin_status attribute for voq inband interface port, if it exists in the PORT table keys. --- src/sonic-config-engine/minigraph.py | 5 +++ .../tests/sample-voq-graph.xml | 5 +++ src/sonic-config-engine/tests/test_cfggen.py | 42 +++++++++++++++++-- .../tests/voq-sample-port-config.ini | 34 +++++++++++++++ 4 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 src/sonic-config-engine/tests/voq-sample-port-config.ini diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index 73d1964c00..0c2040d95f 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -1488,6 +1488,11 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw # make all neighbors connected ports to 'admin_up' ports[port]['admin_status'] = 'up' + # bring up the inband voq interfaces + for inband_port in voq_inband_intfs: + if inband_port in ports.keys(): + ports[inband_port]['admin_status'] = 'up' + results['PORT'] = ports results['CONSOLE_PORT'] = console_ports diff --git a/src/sonic-config-engine/tests/sample-voq-graph.xml b/src/sonic-config-engine/tests/sample-voq-graph.xml index 648f0b2b17..c6fc1b2f5d 100644 --- a/src/sonic-config-engine/tests/sample-voq-graph.xml +++ b/src/sonic-config-engine/tests/sample-voq-graph.xml @@ -48,6 +48,11 @@ Vlan 1.1.1.1/24 + + Ethernet-IB0 + port + 2.2.2.2/32 + diff --git a/src/sonic-config-engine/tests/test_cfggen.py b/src/sonic-config-engine/tests/test_cfggen.py index eff8324d6f..a607d9b327 100644 --- a/src/sonic-config-engine/tests/test_cfggen.py +++ b/src/sonic-config-engine/tests/test_cfggen.py @@ -31,6 +31,7 @@ class TestCfgGen(TestCase): self.ecmp_graph = os.path.join(self.test_dir, 'fg-ecmp-sample-minigraph.xml') self.sample_resource_graph = os.path.join(self.test_dir, 'sample-graph-resource-type.xml') self.sample_subintf_graph = os.path.join(self.test_dir, 'sample-graph-subintf.xml') + self.voq_port_config = os.path.join(self.test_dir, 'voq-sample-port-config.ini') # To ensure that mock config_db data is used for unit-test cases os.environ["CFGGEN_UNIT_TESTING"] = "2" @@ -778,11 +779,44 @@ class TestCfgGen(TestCase): } ) - def test_minigraph_voq_inband_interface(self): + def test_minigraph_voq_inband_interface_vlan(self): argument = "-m {} --var-json VOQ_INBAND_INTERFACE".format(self.sample_graph_voq) + output = self.run_script(argument) + output_dict = utils.to_dict(output.strip()) self.assertDictEqual( - json.loads(self.run_script(argument)), - { 'Vlan3094': {'inband_type': 'Vlan'}, - 'Vlan3094|1.1.1.1/24': {} + output_dict['Vlan3094'], + {'inband_type': 'Vlan'} + ) + self.assertDictEqual( + output_dict['Vlan3094|1.1.1.1/24'], + {} + ) + + def test_minigraph_voq_inband_interface_port(self): + argument = "-m {} --var-json VOQ_INBAND_INTERFACE".format(self.sample_graph_voq) + output = self.run_script(argument) + output_dict = utils.to_dict(output.strip()) + self.assertDictEqual( + output_dict['Ethernet-IB0'], + {'inband_type': 'port'} + ) + self.assertDictEqual( + output_dict['Ethernet-IB0|2.2.2.2/32'], + {} + ) + + def test_minigraph_voq_inband_port(self): + argument = "-m {} -p {} --var-json PORT".format(self.sample_graph_voq, self.voq_port_config) + output = self.run_script(argument) + output_dict = utils.to_dict(output.strip()) + self.assertDictEqual( + output_dict['Ethernet-IB0'], + {'lanes': '133', + 'alias': 'Recycle0', + 'description': 'Recycle0', + 'mtu': '9100', + 'tpid': '0x8100', + 'pfc_asym': 'off', + 'admin_status': 'up' } ) diff --git a/src/sonic-config-engine/tests/voq-sample-port-config.ini b/src/sonic-config-engine/tests/voq-sample-port-config.ini new file mode 100644 index 0000000000..3910e29de0 --- /dev/null +++ b/src/sonic-config-engine/tests/voq-sample-port-config.ini @@ -0,0 +1,34 @@ +# name lanes alias +Ethernet0 29,30,31,32 fortyGigE0/0 +Ethernet4 25,26,27,28 fortyGigE0/4 +Ethernet8 37,38,39,40 fortyGigE0/8 +Ethernet12 33,34,35,36 fortyGigE0/12 +Ethernet16 41,42,43,44 fortyGigE0/16 +Ethernet20 45,46,47,48 fortyGigE0/20 +Ethernet24 5,6,7,8 fortyGigE0/24 +Ethernet28 1,2,3,4 fortyGigE0/28 +Ethernet32 9,10,11,12 fortyGigE0/32 +Ethernet36 13,14,15,16 fortyGigE0/36 +Ethernet40 21,22,23,24 fortyGigE0/40 +Ethernet44 17,18,19,20 fortyGigE0/44 +Ethernet48 49,50,51,52 fortyGigE0/48 +Ethernet52 53,54,55,56 fortyGigE0/52 +Ethernet56 61,62,63,64 fortyGigE0/56 +Ethernet60 57,58,59,60 fortyGigE0/60 +Ethernet64 65,66,67,68 fortyGigE0/64 +Ethernet68 69,70,71,72 fortyGigE0/68 +Ethernet72 77,78,79,80 fortyGigE0/72 +Ethernet76 73,74,75,76 fortyGigE0/76 +Ethernet80 105,106,107,108 fortyGigE0/80 +Ethernet84 109,110,111,112 fortyGigE0/84 +Ethernet88 117,118,119,120 fortyGigE0/88 +Ethernet92 113,114,115,116 fortyGigE0/92 +Ethernet96 121,122,123,124 fortyGigE0/96 +Ethernet100 125,126,127,128 fortyGigE0/100 +Ethernet104 85,86,87,88 fortyGigE0/104 +Ethernet108 81,82,83,84 fortyGigE0/108 +Ethernet112 89,90,91,92 fortyGigE0/112 +Ethernet116 93,94,95,96 fortyGigE0/116 +Ethernet120 97,98,99,100 fortyGigE0/120 +Ethernet124 101,102,103,104 fortyGigE0/124 +Ethernet-IB0 133 Recycle0