From 8bd272cda1115ecb01a7749d4cdadb2ff524bb8f Mon Sep 17 00:00:00 2001 From: Andriy Moroz Date: Wed, 5 Jul 2017 14:44:33 +0300 Subject: [PATCH 1/5] Add port speed configuration --- dockers/docker-orchagent/Dockerfile.j2 | 1 + dockers/docker-orchagent/ports.json.j2 | 10 ++++++++++ dockers/docker-orchagent/start.sh | 1 + dockers/docker-orchagent/swssconfig.sh | 2 +- platform/mellanox/mlnx-sai.mk | 2 +- 5 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 dockers/docker-orchagent/ports.json.j2 diff --git a/dockers/docker-orchagent/Dockerfile.j2 b/dockers/docker-orchagent/Dockerfile.j2 index e4e15516307..86cda329a84 100755 --- a/dockers/docker-orchagent/Dockerfile.j2 +++ b/dockers/docker-orchagent/Dockerfile.j2 @@ -30,6 +30,7 @@ COPY ["arp_update", "start.sh", "orchagent.sh", "swssconfig.sh", "/usr/bin/"] COPY ["supervisord.conf", "/etc/supervisor/conf.d/"] COPY ["ipinip.json.j2", "/usr/share/sonic/templates/"] COPY ["mirror.json.j2", "/usr/share/sonic/templates/"] +COPY ["ports.json.j2", "/usr/share/sonic/templates/"] ENTRYPOINT ["/usr/bin/supervisord"] diff --git a/dockers/docker-orchagent/ports.json.j2 b/dockers/docker-orchagent/ports.json.j2 new file mode 100644 index 00000000000..b203c0390f4 --- /dev/null +++ b/dockers/docker-orchagent/ports.json.j2 @@ -0,0 +1,10 @@ +[ +{% for port in port_properties %} + { + "PORT_TABLE:{{ port['name'] }}": { + "speed": "{{ port['speed'] }}", + }, + "OP": "SET" + }{% if not loop.last %},{% endif %} +{% endfor %} +] diff --git a/dockers/docker-orchagent/start.sh b/dockers/docker-orchagent/start.sh index 40ef66441c0..5f961a8bd29 100755 --- a/dockers/docker-orchagent/start.sh +++ b/dockers/docker-orchagent/start.sh @@ -4,6 +4,7 @@ mkdir -p /etc/swss/config.d/ sonic-cfggen -m /etc/sonic/minigraph.xml -t /usr/share/sonic/templates/ipinip.json.j2 > /etc/swss/config.d/ipinip.json sonic-cfggen -m /etc/sonic/minigraph.xml -t /usr/share/sonic/templates/mirror.json.j2 > /etc/swss/config.d/mirror.json +sonic-cfggen -m /etc/sonic/minigraph.xml -t /usr/share/sonic/templates/ports.json.j2 > /etc/swss/config.d/ports.json export platform=`sonic-cfggen -m /etc/sonic/minigraph.xml -v platform` diff --git a/dockers/docker-orchagent/swssconfig.sh b/dockers/docker-orchagent/swssconfig.sh index ab6c39403b5..1738a70e832 100755 --- a/dockers/docker-orchagent/swssconfig.sh +++ b/dockers/docker-orchagent/swssconfig.sh @@ -38,7 +38,7 @@ fast_reboot HWSKU=`sonic-cfggen -m /etc/sonic/minigraph.xml -v minigraph_hwsku` -SWSSCONFIG_ARGS="00-copp.config.json ipinip.json mirror.json " +SWSSCONFIG_ARGS="00-copp.config.json ipinip.json mirror.json ports.json " if [ "$HWSKU" == "Force10-S6000" ]; then SWSSCONFIG_ARGS+="td2.32ports.buffers.json td2.32ports.qos.json " diff --git a/platform/mellanox/mlnx-sai.mk b/platform/mellanox/mlnx-sai.mk index 8d3712cb137..3e29fb5aad6 100644 --- a/platform/mellanox/mlnx-sai.mk +++ b/platform/mellanox/mlnx-sai.mk @@ -1,7 +1,7 @@ # Mellanox SAI MLNX_SAI_VERSION = 161120 -MLNX_SAI_REVISION = b57b458ff060adb2b1df629e330431a391a3b83e +MLNX_SAI_REVISION = 7e6598d231285f406096a50ad605d00371815004 export MLNX_SAI_VERSION MLNX_SAI_REVISION From 965b5fbf100665996f3936fd0519a92da854e571 Mon Sep 17 00:00:00 2001 From: Andriy Moroz Date: Thu, 6 Jul 2017 17:13:47 +0300 Subject: [PATCH 2/5] Add DeviceInfos support in minigraph parser --- dockers/docker-orchagent/ports.json.j2 | 7 ++++--- src/sonic-config-engine/minigraph.py | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/dockers/docker-orchagent/ports.json.j2 b/dockers/docker-orchagent/ports.json.j2 index b203c0390f4..f59ee993eea 100644 --- a/dockers/docker-orchagent/ports.json.j2 +++ b/dockers/docker-orchagent/ports.json.j2 @@ -1,10 +1,11 @@ [ -{% for port in port_properties %} +{% for interface in ethernet_interfaces %} { - "PORT_TABLE:{{ port['name'] }}": { - "speed": "{{ port['speed'] }}", + "PORT_TABLE:{{ interface['name'] }}": { + "speed": "{{ interface['speed'] }}" }, "OP": "SET" }{% if not loop.last %},{% endif %} + {% endfor %} ] diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index 8d3e82ea123..3dd31bfd113 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -315,6 +315,17 @@ def parse_meta(meta, hname): deployment_id = value return syslog_servers, dhcp_servers, ntp_servers, mgmt_routes, erspan_dst, deployment_id +def parse_deviceinfo(meta, hname): + ethernet_interfaces = [] + + device_info = meta.find(str(QName(ns, "DeviceInfo"))) + interfaces = device_info.find(str(QName(ns, "EthernetInterfaces"))) + for interface in interfaces.findall(str(QName(ns1, "EthernetInterface"))): + name = interface.find(str(QName(ns, "InterfaceName"))).text + speed = interface.find(str(QName(ns, "Speed"))).text + ethernet_interfaces.append({ 'name':name, 'speed':speed }) + + return ethernet_interfaces def get_console_info(devices, dev, port): for k, v in devices.items(): @@ -402,6 +413,7 @@ def parse_xml(filename, platform=None, port_config_file=None): neighbors = None devices = None hostname = None + ethernet_interfaces = [] syslog_servers = [] dhcp_servers = [] ntp_servers = [] @@ -431,6 +443,8 @@ def parse_xml(filename, platform=None, port_config_file=None): (u_neighbors, u_devices, _, _, _, _) = parse_png(child, hostname) elif child.tag == str(QName(ns, "MetadataDeclaration")): (syslog_servers, dhcp_servers, ntp_servers, mgmt_routes, erspan_dst, deployment_id) = parse_meta(child, hostname) + elif child.tag == str(QName(ns, "DeviceInfos")): + ethernet_interfaces = parse_deviceinfo(child, hostname) Tree = lambda: defaultdict(Tree) @@ -481,6 +495,7 @@ def parse_xml(filename, platform=None, port_config_file=None): results['forced_mgmt_routes'] = mgmt_routes results['erspan_dst'] = erspan_dst results['deployment_id'] = deployment_id + results['ethernet_interfaces'] = ethernet_interfaces return results From e12daeed01a70b8ac90bc2bf02dc58803f2c9898 Mon Sep 17 00:00:00 2001 From: Andriy Moroz Date: Thu, 10 Aug 2017 16:24:59 +0300 Subject: [PATCH 3/5] Add cfggen test 'test_minigraph_ethernet_interfaces' --- .../tests/simple-sample-graph.xml | 59 +++++++++++++++++++ src/sonic-config-engine/tests/test_cfggen.py | 5 ++ 2 files changed, 64 insertions(+) diff --git a/src/sonic-config-engine/tests/simple-sample-graph.xml b/src/sonic-config-engine/tests/simple-sample-graph.xml index 20bfb07f00d..4f5bad741ee 100644 --- a/src/sonic-config-engine/tests/simple-sample-graph.xml +++ b/src/sonic-config-engine/tests/simple-sample-graph.xml @@ -200,6 +200,65 @@ + + + true + + + DeviceInterface + + true + true + 1 + Ethernet0 + + false + 0 + 0 + 10000 + + + DeviceInterface + + true + true + 1 + Ethernet4 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 1 + Ethernet8 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + true + 1 + Ethernet12 + + false + 0 + 0 + 1000000 + + + + switch-t0 Force10-S6000 diff --git a/src/sonic-config-engine/tests/test_cfggen.py b/src/sonic-config-engine/tests/test_cfggen.py index 6835c60e27f..3c970015a06 100644 --- a/src/sonic-config-engine/tests/test_cfggen.py +++ b/src/sonic-config-engine/tests/test_cfggen.py @@ -119,3 +119,8 @@ def test_minigraph_deployment_id(self): argument = '-m "' + self.sample_graph_bgp_speaker + '" -p "' + self.port_config + '" -v deployment_id' output = self.run_script(argument) self.assertEqual(output.strip(), "1") + + def test_minigraph_ethernet_interfaces(self): + argument = '-m "' + self.sample_graph_simple + '" -p "' + self.port_config + '" -v ethernet_interfaces' + output = self.run_script(argument) + self.assertEqual(output.strip(), "[{'speed': '10000', 'name': 'Ethernet0'}, {'speed': '25000', 'name': 'Ethernet4'}, {'speed': '40000', 'name': 'Ethernet8'}, {'speed': '1000000', 'name': 'Ethernet12'}]") From dcb58a480cf2d8fc31ccb7d7c802b79f8698fece Mon Sep 17 00:00:00 2001 From: Andriy Moroz Date: Fri, 18 Aug 2017 14:19:35 +0300 Subject: [PATCH 4/5] Fixed PR comments --- src/sonic-config-engine/minigraph.py | 18 ++++++++++-------- .../tests/simple-sample-graph.xml | 11 +++++++---- src/sonic-config-engine/tests/test_cfggen.py | 2 +- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index e0bfa15bf6d..0a3f53c3be0 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -323,15 +323,17 @@ def parse_meta(meta, hname): deployment_id = value return syslog_servers, dhcp_servers, ntp_servers, mgmt_routes, erspan_dst, deployment_id -def parse_deviceinfo(meta, hname): +def parse_deviceinfo(meta, hwsku): ethernet_interfaces = [] - device_info = meta.find(str(QName(ns, "DeviceInfo"))) - interfaces = device_info.find(str(QName(ns, "EthernetInterfaces"))) - for interface in interfaces.findall(str(QName(ns1, "EthernetInterface"))): - name = interface.find(str(QName(ns, "InterfaceName"))).text - speed = interface.find(str(QName(ns, "Speed"))).text - ethernet_interfaces.append({ 'name':name, 'speed':speed }) + for device_info in meta.findall(str(QName(ns, "DeviceInfo"))): + dev_sku = device_info.find(str(QName(ns, "HwSku"))).text + if dev_sku == hwsku: + interfaces = device_info.find(str(QName(ns, "EthernetInterfaces"))) + for interface in interfaces.findall(str(QName(ns1, "EthernetInterface"))): + name = interface.find(str(QName(ns, "InterfaceName"))).text + speed = interface.find(str(QName(ns, "Speed"))).text + ethernet_interfaces.append({ 'name':name, 'speed':speed }) return ethernet_interfaces @@ -451,7 +453,7 @@ def parse_xml(filename, platform=None, port_config_file=None): elif child.tag == str(QName(ns, "MetadataDeclaration")): (syslog_servers, dhcp_servers, ntp_servers, mgmt_routes, erspan_dst, deployment_id) = parse_meta(child, hostname) elif child.tag == str(QName(ns, "DeviceInfos")): - ethernet_interfaces = parse_deviceinfo(child, hostname) + ethernet_interfaces = parse_deviceinfo(child, hwsku) results = {} results['minigraph_hwsku'] = hwsku diff --git a/src/sonic-config-engine/tests/simple-sample-graph.xml b/src/sonic-config-engine/tests/simple-sample-graph.xml index 4f5bad741ee..7daae24f49a 100644 --- a/src/sonic-config-engine/tests/simple-sample-graph.xml +++ b/src/sonic-config-engine/tests/simple-sample-graph.xml @@ -210,7 +210,7 @@ true true 1 - Ethernet0 + fortyGigE0/0 false 0 @@ -223,7 +223,7 @@ true true 1 - Ethernet4 + fortyGigE0/4 false 0 @@ -236,7 +236,7 @@ true true 1 - Ethernet8 + fortyGigE0/8 false 0 @@ -249,7 +249,7 @@ true true 1 - Ethernet12 + fortyGigE0/12 false 0 @@ -257,6 +257,9 @@ 1000000 + true + 0 + Force10-S6000 switch-t0 diff --git a/src/sonic-config-engine/tests/test_cfggen.py b/src/sonic-config-engine/tests/test_cfggen.py index 3c970015a06..b317224e4dd 100644 --- a/src/sonic-config-engine/tests/test_cfggen.py +++ b/src/sonic-config-engine/tests/test_cfggen.py @@ -123,4 +123,4 @@ def test_minigraph_deployment_id(self): def test_minigraph_ethernet_interfaces(self): argument = '-m "' + self.sample_graph_simple + '" -p "' + self.port_config + '" -v ethernet_interfaces' output = self.run_script(argument) - self.assertEqual(output.strip(), "[{'speed': '10000', 'name': 'Ethernet0'}, {'speed': '25000', 'name': 'Ethernet4'}, {'speed': '40000', 'name': 'Ethernet8'}, {'speed': '1000000', 'name': 'Ethernet12'}]") + self.assertEqual(output.strip(), "[{'speed': '10000', 'name': 'fortyGigE0/0'}, {'speed': '25000', 'name': 'fortyGigE0/4'}, {'speed': '40000', 'name': 'fortyGigE0/8'}, {'speed': '1000000', 'name': 'fortyGigE0/12'}]") From d49c045d149720a9474af86c0a3ed9c3e0f21749 Mon Sep 17 00:00:00 2001 From: Andriy Moroz Date: Tue, 22 Aug 2017 19:05:18 +0300 Subject: [PATCH 5/5] Update sonic-swss submodule reference --- src/sonic-swss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-swss b/src/sonic-swss index f9b55d30276..eaccf67cabd 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit f9b55d30276d1a6ab94e7321d9b2a3bf076fd683 +Subproject commit eaccf67cabd22df0ff7d0117fe55f4261bc961d9