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