From 845b27e91fe0a18b42cab5f437762a9f8510da0d Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Tue, 31 May 2022 19:26:13 +0000 Subject: [PATCH 001/259] [submodules] set submodule branches Signed-off-by: Ying Xie --- .gitmodules | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitmodules b/.gitmodules index 3d1a042fb025..24cccee9316a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,15 +1,18 @@ [submodule "sonic-swss-common"] path = src/sonic-swss-common url = https://github.com/Azure/sonic-swss-common + branch = 202205 [submodule "sonic-linux-kernel"] path = src/sonic-linux-kernel url = https://github.com/Azure/sonic-linux-kernel [submodule "sonic-sairedis"] path = src/sonic-sairedis url = https://github.com/Azure/sonic-sairedis + branch = 202205 [submodule "sonic-swss"] path = src/sonic-swss url = https://github.com/Azure/sonic-swss + branch = 202205 [submodule "src/p4c-bm/p4c-bm"] path = platform/p4/p4c-bm/p4c-bm url = https://github.com/krambn/p4c-bm @@ -31,15 +34,18 @@ [submodule "src/sonic-utilities"] path = src/sonic-utilities url = https://github.com/Azure/sonic-utilities + branch = 202205 [submodule "platform/broadcom/sonic-platform-modules-arista"] path = platform/broadcom/sonic-platform-modules-arista url = https://github.com/aristanetworks/sonic [submodule "src/sonic-platform-common"] path = src/sonic-platform-common url = https://github.com/Azure/sonic-platform-common + branch = 202205 [submodule "src/sonic-platform-daemons"] path = src/sonic-platform-daemons url = https://github.com/Azure/sonic-platform-daemons + branch = 202205 [submodule "src/sonic-platform-pde"] path = src/sonic-platform-pde url = https://github.com/Azure/sonic-platform-pdk-pde @@ -100,6 +106,7 @@ [submodule "src/linkmgrd"] path = src/linkmgrd url = https://github.com/Azure/sonic-linkmgrd.git + branch = 202205 [submodule "src/sonic-p4rt/sonic-pins"] path = src/sonic-p4rt/sonic-pins url = https://github.com/Azure/sonic-pins.git From b6aafc1fde976c1cfe5146fda35eb548ee7f35f1 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Thu, 2 Jun 2022 10:36:52 -0700 Subject: [PATCH 002/259] [202205][swss] advance swss submodule head (#11014) Including change: * 7ff8f75 2022-06-03 | Revert "[portsorch]: Prevent LAG member configuration when port has active ACL binding (#2165)" (#2306) (HEAD -> 202205, github/202205) [bingwang-ms] Signed-off-by: Ying Xie --- src/sonic-swss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-swss b/src/sonic-swss index 910bfd4d1778..7ff8f753ba9e 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 910bfd4d17782a059daf2d81deb87673ae6ca58e +Subproject commit 7ff8f753ba9e53231a3790996645849b5b4891d7 From 0a01faa38381a6779b9a9a7e5ef35df32d2e5304 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Thu, 2 Jun 2022 11:49:34 -0700 Subject: [PATCH 003/259] [202205][linkmgrd] advance submodule heads (#11016) linkmgrd: * 3c2b546 2022-05-31 | Add default route support to `active-active` state machine (#78) (github/202205, master, 202205) [Jing Zhang] * 6fa892e 2022-05-27 | Degrade `LinkProberStateMachineBase` virtual function logging level (#80) [Longxiang Lyu] * 7b695ca 2022-05-27 | Fix mux wait timer and peer mux wait timer (#81) [Longxiang Lyu] platform-daemons: * 0d90023 2022-05-31 | grpc client implementation for active-active dualtor (#248) (github/master, github/202205, master, 202205) [vdahiya12] * 6b8bf69 2022-05-27 | [ycabled] Fix some syntax warnings in ycabled (#263) [vdahiya12] * 2bcf936 2022-05-24 | [ycabled] fix the posting for mux_cable_static_info per downlink when ycabled is spawned; synchronizing executing Telemetry API (#257) [vdahiya12] * ce217c0 2022-04-25 | Include changes from xcvr_api in transceiver_info table (#253) [qinchuanares] * e0f8a35 2022-04-22 | Fix checkReplyType failed issue via recreating xcvr_table_helper on forking subprocess (#255) [Stephen Sun] platform-common: * f575a40 2022-05-24 | [Credo][Ycable] changes for synchronizing executing Telemetry API's when mux toggle is inprogress (#280) (github/202205, master, 202205) [vdahiya12] * b043372 2022-05-11 | [sonic_ssd] Nokia-7215: "show platform ssdhealth" not showing health percent (#279) [bill-nokia] * d62d3d6 2022-05-04 | [CMIS]Fix low-power to high power mode transition (#268) [Prince George] * f918125 2022-05-02 | [syseeprom] Enable display of vendor extension TLV content (#270) [dflynn-Nokia] * 4e08440 2022-04-14 | [Credo][Ycable] improve logging for Server Powered off/Faulty cables (#272) [vdahiya12] Signed-off-by: Ying Xie --- src/linkmgrd | 2 +- src/sonic-platform-common | 2 +- src/sonic-platform-daemons | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/linkmgrd b/src/linkmgrd index d744bfb4a694..3c2b54600b2b 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit d744bfb4a6947cacfde744fc73550a7b99d8e0c8 +Subproject commit 3c2b54600b2bc3f2f710caddeec5816ec3657a0b diff --git a/src/sonic-platform-common b/src/sonic-platform-common index b70e75979f70..f575a401b83b 160000 --- a/src/sonic-platform-common +++ b/src/sonic-platform-common @@ -1 +1 @@ -Subproject commit b70e75979f704e980a3fb20732642ec99f32b0ee +Subproject commit f575a401b83bbd5d6b6d68824ff22eae8647be16 diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index 9ac12bfb4064..0d90023b4ae9 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit 9ac12bfb406416b0fb3b03a084d8179bdc53f3a6 +Subproject commit 0d90023b4ae973bd2fa01381d4d1ba4992b45025 From 0514923ea111fe863d81b25705bf77b3e9742e95 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Thu, 2 Jun 2022 12:00:50 -0700 Subject: [PATCH 004/259] [azure pipeline] enable PR test for 202205 branch (#11017) Signed-off-by: Ying Xie --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7936f8f4f6f2..9c65f660af3e 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -7,7 +7,7 @@ trigger: branches: include: - master - - 202012 + - 202205 paths: exclude: - .github @@ -16,7 +16,7 @@ pr: branches: include: - master - - 202012 + - 202205 - bullseye paths: exclude: From aecbf4718f1cd79b1fa06a414421e7b798666879 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Fri, 3 Jun 2022 09:08:13 +0800 Subject: [PATCH 005/259] [ci/build]: Upgrade SONiC package versions (#11013) Co-authored-by: mssonicbld --- .../versions-deb-bullseye | 66 + .../versions-deb-bullseye-arm64 | 4 + .../versions-deb-bullseye-armhf | 4 + .../build-sonic-slave-bullseye/versions-git | 14 + .../build-sonic-slave-bullseye/versions-py3 | 29 + .../versions-py3-all-arm64 | 4 + .../versions-py3-all-armhf | 4 + .../build-sonic-slave-bullseye/versions-web | 53 + .../versions-deb-buster | 36 + .../versions-deb-buster-arm64 | 4 + .../versions-deb-buster-armhf | 4 + .../build-sonic-slave-buster/versions-git | 7 + .../build-sonic-slave-buster/versions-py2 | 11 + .../versions-py2-all-arm64 | 1 + .../versions-py2-all-armhf | 1 + .../build-sonic-slave-buster/versions-py3 | 8 + .../versions-py3-all-arm64 | 3 + .../versions-py3-all-armhf | 3 + .../build-sonic-slave-buster/versions-web | 29 + .../build-sonic-slave-stretch/versions-web | 2 + files/build/versions/default/versions-docker | 15 + files/build/versions/default/versions-git | 19 + files/build/versions/default/versions-web | 116 ++ .../versions-deb-bullseye | 81 + .../docker-base-bullseye-sonic/versions-py3 | 6 + .../versions-deb-buster | 71 + .../docker-base-buster-sonic/versions-py3 | 6 + .../docker-base-buster-sonic/versions-web | 1 + .../versions-deb-bullseye | 60 + .../versions-deb-bullseye-arm64 | 8 + .../versions-deb-bullseye-armhf | 8 + .../versions-py3 | 15 + .../versions-deb-buster | 54 + .../versions-deb-buster-arm64 | 11 + .../versions-deb-buster-armhf | 11 + .../versions-py3 | 15 + .../versions-deb-bullseye | 25 + .../versions-deb-bullseye | 1 + .../versions-deb-bullseye | 28 + .../versions-deb-bullseye | 11 + .../versions-deb-buster | 20 + .../docker-fpm-frr-sonic/versions-deb-buster | 20 + .../dockers/docker-fpm-frr-sonic/versions-py3 | 1 + .../versions-deb-buster | 18 + .../versions-deb-buster | 5 + .../docker-lldp-dbg-sonic/versions-deb-buster | 18 + .../docker-lldp-sonic/versions-deb-buster | 13 + .../versions-deb-bullseye | 27 + .../docker-macsec-sonic/versions-deb-bullseye | 7 + .../versions-deb-bullseye | 24 + .../docker-mux-sonic/versions-deb-bullseye | 7 + .../docker-nat-dbg-sonic/versions-deb-buster | 19 + .../docker-nat-sonic/versions-deb-buster | 9 + .../versions-deb-bullseye | 27 + .../versions-deb-bullseye | 60 + .../versions-deb-bullseye-arm64 | 2 + .../versions-deb-bullseye-armhf | 2 + .../docker-orchagent-sonic/versions-py3 | 2 + .../versions-deb-bullseye | 26 + .../versions-deb-bullseye | 116 ++ .../versions-deb-bullseye-arm64 | 1 + .../versions-deb-bullseye-armhf | 1 + .../versions-py3 | 11 + .../versions-deb-bullseye | 25 + .../versions-deb-bullseye | 1 + .../versions-deb-buster | 18 + .../docker-sflow-sonic/versions-deb-buster | 4 + .../docker-snmp-dbg-sonic/versions-deb-buster | 21 + .../docker-snmp-sonic/versions-deb-buster | 46 + .../versions-deb-buster-arm64 | 1 + .../versions-deb-buster-armhf | 1 + .../dockers/docker-snmp-sonic/versions-py3 | 4 + .../versions-deb-buster | 19 + .../versions-deb-buster | 7 + .../versions-py3 | 26 + .../versions-deb-bullseye | 25 + .../versions-deb-bullseye | 2 + .../versions-deb-bullseye | 5 + .../versions-deb-buster | 5 + .../versions-deb-buster | 21 + .../versions-deb-buster | 21 + .../versions-deb-buster | 76 + .../versions-py2 | 5 + .../versions-web | 2 + .../versions-deb-buster | 7 + .../versions-deb-buster | 76 + .../docker-syncd-brcm-rpc-sonic/versions-py2 | 5 + .../docker-syncd-brcm-rpc-sonic/versions-web | 2 + .../versions-deb-buster | 8 + .../versions-deb-buster-arm64 | 41 + .../versions-deb-bullseye | 28 + .../versions-deb-bullseye | 71 + .../docker-syncd-mlnx-rpc-sonic/versions-py2 | 6 + .../versions-deb-bullseye | 45 + .../docker-syncd-mlnx-sonic/versions-py3 | 1 + .../versions-deb-buster-armhf | 41 + .../versions-deb-buster | 21 + .../docker-teamd-sonic/versions-deb-buster | 1 + .../versions-deb-bullseye | 1721 ++++++++++++++++ .../versions-deb-bullseye-arm64 | 28 + .../versions-deb-bullseye-armhf | 67 + .../dockers/sonic-slave-bullseye/versions-git | 2 + .../dockers/sonic-slave-bullseye/versions-py3 | 109 + .../versions-py3-all-armhf | 2 + .../dockers/sonic-slave-bullseye/versions-web | 4 + .../sonic-slave-buster/versions-deb-buster | 1781 +++++++++++++++++ .../versions-deb-buster-arm64 | 7 + .../versions-deb-buster-armhf | 112 ++ .../dockers/sonic-slave-buster/versions-git | 2 + .../dockers/sonic-slave-buster/versions-py2 | 92 + .../dockers/sonic-slave-buster/versions-py3 | 80 + .../dockers/sonic-slave-buster/versions-web | 3 + .../sonic-slave-stretch/versions-deb-stretch | 1499 ++++++++++++++ .../versions-deb-stretch-arm64 | 8 + .../versions-deb-stretch-armhf | 14 + .../dockers/sonic-slave-stretch/versions-git | 2 + .../dockers/sonic-slave-stretch/versions-py2 | 79 + .../dockers/sonic-slave-stretch/versions-py3 | 39 + .../dockers/sonic-slave-stretch/versions-web | 5 + .../host-base-image/versions-deb-bullseye | 96 + .../versions-deb-bullseye-arm64 | 1 + .../versions-deb-bullseye-armhf | 1 + .../versions/host-image/versions-deb-bullseye | 401 ++++ .../host-image/versions-deb-bullseye-arm64 | 14 + .../host-image/versions-deb-bullseye-armhf | 18 + files/build/versions/host-image/versions-py3 | 68 + .../host-image/versions-py3-all-armhf | 1 + files/build/versions/host-image/versions-web | 1 + 128 files changed, 8230 insertions(+) create mode 100644 files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye create mode 100644 files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-arm64 create mode 100644 files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-armhf create mode 100644 files/build/versions/build/build-sonic-slave-bullseye/versions-git create mode 100644 files/build/versions/build/build-sonic-slave-bullseye/versions-py3 create mode 100644 files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-arm64 create mode 100644 files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-armhf create mode 100644 files/build/versions/build/build-sonic-slave-bullseye/versions-web create mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-deb-buster create mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-arm64 create mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-armhf create mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-git create mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-py2 create mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-py2-all-arm64 create mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-py2-all-armhf create mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-py3 create mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-py3-all-arm64 create mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-py3-all-armhf create mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-web create mode 100644 files/build/versions/build/build-sonic-slave-stretch/versions-web create mode 100644 files/build/versions/default/versions-docker create mode 100644 files/build/versions/default/versions-git create mode 100644 files/build/versions/default/versions-web create mode 100644 files/build/versions/dockers/docker-base-bullseye-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-base-bullseye-sonic/versions-py3 create mode 100644 files/build/versions/dockers/docker-base-buster-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-base-buster-sonic/versions-py3 create mode 100644 files/build/versions/dockers/docker-base-buster-sonic/versions-web create mode 100644 files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-deb-bullseye-arm64 create mode 100644 files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-deb-bullseye-armhf create mode 100644 files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-py3 create mode 100644 files/build/versions/dockers/docker-config-engine-buster-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-config-engine-buster-sonic/versions-deb-buster-arm64 create mode 100644 files/build/versions/dockers/docker-config-engine-buster-sonic/versions-deb-buster-armhf create mode 100644 files/build/versions/dockers/docker-config-engine-buster-sonic/versions-py3 create mode 100644 files/build/versions/dockers/docker-database-dbg-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-database-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-dhcp-relay-dbg-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-dhcp-relay-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-fpm-frr-dbg-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-fpm-frr-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-fpm-frr-sonic/versions-py3 create mode 100644 files/build/versions/dockers/docker-gbsyncd-credo-dbg-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-gbsyncd-credo-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-lldp-dbg-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-lldp-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-macsec-dbg-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-macsec-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-mux-dbg-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-mux-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-nat-dbg-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-nat-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-orchagent-dbg-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-orchagent-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-orchagent-sonic/versions-deb-bullseye-arm64 create mode 100644 files/build/versions/dockers/docker-orchagent-sonic/versions-deb-bullseye-armhf create mode 100644 files/build/versions/dockers/docker-orchagent-sonic/versions-py3 create mode 100644 files/build/versions/dockers/docker-platform-monitor-dbg-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-platform-monitor-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-platform-monitor-sonic/versions-deb-bullseye-arm64 create mode 100644 files/build/versions/dockers/docker-platform-monitor-sonic/versions-deb-bullseye-armhf create mode 100644 files/build/versions/dockers/docker-platform-monitor-sonic/versions-py3 create mode 100644 files/build/versions/dockers/docker-router-advertiser-dbg-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-router-advertiser-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-sflow-dbg-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-sflow-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-snmp-dbg-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-snmp-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-snmp-sonic/versions-deb-buster-arm64 create mode 100644 files/build/versions/dockers/docker-snmp-sonic/versions-deb-buster-armhf create mode 100644 files/build/versions/dockers/docker-snmp-sonic/versions-py3 create mode 100644 files/build/versions/dockers/docker-sonic-mgmt-framework-dbg-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-sonic-mgmt-framework-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-sonic-mgmt-framework-sonic/versions-py3 create mode 100644 files/build/versions/dockers/docker-sonic-telemetry-dbg-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-sonic-telemetry-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-swss-layer-bullseye-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-swss-layer-buster-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-brcm-dbg-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-brcm-dnx-dbg-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-brcm-dnx-rpc-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-brcm-dnx-rpc-sonic/versions-py2 create mode 100644 files/build/versions/dockers/docker-syncd-brcm-dnx-rpc-sonic/versions-web create mode 100644 files/build/versions/dockers/docker-syncd-brcm-dnx-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-brcm-rpc-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-brcm-rpc-sonic/versions-py2 create mode 100644 files/build/versions/dockers/docker-syncd-brcm-rpc-sonic/versions-web create mode 100644 files/build/versions/dockers/docker-syncd-brcm-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-centec-sonic/versions-deb-buster-arm64 create mode 100644 files/build/versions/dockers/docker-syncd-mlnx-dbg-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-syncd-mlnx-rpc-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-syncd-mlnx-rpc-sonic/versions-py2 create mode 100644 files/build/versions/dockers/docker-syncd-mlnx-sonic/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-syncd-mlnx-sonic/versions-py3 create mode 100644 files/build/versions/dockers/docker-syncd-mrvl-sonic/versions-deb-buster-armhf create mode 100644 files/build/versions/dockers/docker-teamd-dbg-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-teamd-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye create mode 100644 files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 create mode 100644 files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf create mode 100644 files/build/versions/dockers/sonic-slave-bullseye/versions-git create mode 100644 files/build/versions/dockers/sonic-slave-bullseye/versions-py3 create mode 100644 files/build/versions/dockers/sonic-slave-bullseye/versions-py3-all-armhf create mode 100644 files/build/versions/dockers/sonic-slave-bullseye/versions-web create mode 100644 files/build/versions/dockers/sonic-slave-buster/versions-deb-buster create mode 100644 files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-arm64 create mode 100644 files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-armhf create mode 100644 files/build/versions/dockers/sonic-slave-buster/versions-git create mode 100644 files/build/versions/dockers/sonic-slave-buster/versions-py2 create mode 100644 files/build/versions/dockers/sonic-slave-buster/versions-py3 create mode 100644 files/build/versions/dockers/sonic-slave-buster/versions-web create mode 100644 files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch create mode 100644 files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch-arm64 create mode 100644 files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch-armhf create mode 100644 files/build/versions/dockers/sonic-slave-stretch/versions-git create mode 100644 files/build/versions/dockers/sonic-slave-stretch/versions-py2 create mode 100644 files/build/versions/dockers/sonic-slave-stretch/versions-py3 create mode 100644 files/build/versions/dockers/sonic-slave-stretch/versions-web create mode 100644 files/build/versions/host-base-image/versions-deb-bullseye create mode 100644 files/build/versions/host-base-image/versions-deb-bullseye-arm64 create mode 100644 files/build/versions/host-base-image/versions-deb-bullseye-armhf create mode 100644 files/build/versions/host-image/versions-deb-bullseye create mode 100644 files/build/versions/host-image/versions-deb-bullseye-arm64 create mode 100644 files/build/versions/host-image/versions-deb-bullseye-armhf create mode 100644 files/build/versions/host-image/versions-py3 create mode 100644 files/build/versions/host-image/versions-py3-all-armhf create mode 100644 files/build/versions/host-image/versions-web diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye new file mode 100644 index 000000000000..704efe9b7884 --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye @@ -0,0 +1,66 @@ +applibs==1.mlnx.4.5.1500 +applibs-dev==1.mlnx.4.5.1500 +iproute2-dev==1.mlnx.4.5.1500 +isc-dhcp-relay==4.4.1-2.3 +kernel-mft-dkms==4.20.0-34 +libhiredis-dev==0.14.0-3~bpo9+1 +libhiredis0.14==0.14.0-3~bpo9+1 +libnl-3-dev==3.5.0-1 +libnl-cli-3-200==3.5.0-1 +libnl-cli-3-dev==3.5.0-1 +libnl-genl-3-200==3.5.0-1 +libnl-genl-3-dev==3.5.0-1 +libnl-nf-3-200==3.5.0-1 +libnl-nf-3-dev==3.5.0-1 +libnl-route-3-dev==3.5.0-1 +libsaimetadata==1.0.0 +libsaimetadata-dev==1.0.0 +libsairedis==1.0.0 +libsairedis-dev==1.0.0 +libsaithrift-dev==0.9.4 +libsaivs==1.0.0 +libswsscommon==1.0.0 +libswsscommon-dev==1.0.0 +libtac-dev==1.4.1-1 +libtac2==1.4.1-1 +libteam-dev==1.30-1 +libteam-utils==1.30-1 +libteam5==1.30-1 +libteamdctl0==1.30-1 +libthrift-0.11.0==0.11.0-4 +libthrift-dev==0.11.0-4 +libyang==1.0.73 +libyang-cpp==1.0.73 +libyang-dev==1.0.73 +linux-headers-5.10.0-12-2-amd64==5.10.103-1 +linux-headers-5.10.0-12-2-common==5.10.103-1 +lm-sensors==1:3.6.0-7 +mft==4.20.0-34 +python-thrift==0.11.0-4 +python3-swsscommon==1.0.0 +python3-yang==1.0.73 +sonic-dhcp6relay==1.0.0-0 +sonic-dhcpmon==1.0.0-0 +sonic-linkmgrd==1.0.0-1 +sonic-mgmt-common==1.0.0 +sonic-mgmt-common-codegen==1.0.0 +sonic-platform-pddf==1.1 +sonic-platform-pddf-sym==1.1 +swss==1.0.0 +sx-acl-helper==1.mlnx.4.5.1500 +sx-acl-helper-dev==1.mlnx.4.5.1500 +sx-complib==1.mlnx.4.5.1500 +sx-complib-dev==1.mlnx.4.5.1500 +sx-examples==1.mlnx.4.5.1500 +sx-examples-dev==1.mlnx.4.5.1500 +sx-gen-utils==1.mlnx.4.5.1500 +sx-gen-utils-dev==1.mlnx.4.5.1500 +sx-scew==1.mlnx.4.5.1500 +sx-scew-dev==1.mlnx.4.5.1500 +sxd-libs==1.mlnx.4.5.1500 +sxd-libs-dev==1.mlnx.4.5.1500 +syncd==1.0.0 +thrift-compiler==0.11.0-4 +wjh-libs==1.mlnx.4.5.1500 +wjh-libs-dev==1.mlnx.4.5.1500 +wpasupplicant==2:2.9.0-14 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-arm64 b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-arm64 new file mode 100644 index 000000000000..bc1ef0d76cb3 --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-arm64 @@ -0,0 +1,4 @@ +libnl-3-200==3.5.0-1 +libnl-route-3-200==3.5.0-1 +libsnmp-base==5.9+dfsg-3+b1 +linux-headers-5.10.0-12-2-arm64==5.10.103-1 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-armhf b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-armhf new file mode 100644 index 000000000000..c7c8c1394d61 --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-armhf @@ -0,0 +1,4 @@ +libnl-3-200==3.5.0-1 +libnl-route-3-200==3.5.0-1 +libsnmp-base==5.9+dfsg-3+b1 +linux-headers-5.10.0-12-2-armmp==5.10.103-1 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-git b/files/build/versions/build/build-sonic-slave-bullseye/versions-git new file mode 100644 index 000000000000..e4392800ebd5 --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-git @@ -0,0 +1,14 @@ +https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 +https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 +https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b +https://github.com/flashrom/flashrom.git==9ae0463feeff61bfec90fcdb85213e3114873ad0 +https://github.com/FreeRADIUS/freeradius-server.git==3317d67e2cc3b1f55fd8384ddddb8d80fa90db52 +https://github.com/FreeRADIUS/pam_radius.git==5e67868520e90a489626928f28c0befa531bf7d2 +https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 +https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 +https://github.com/thom311/libnl==44988e648cd5c9f912148e8b138776064797f49d +https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b61368d4c5 +https://salsa.debian.org/kernel-team/ethtool/==0d5304a5be80cc74bed8ed78002bf5df0d49f412 +https://salsa.debian.org/kernel-team/initramfs-tools.git==9b3a06991f9f4a96efbd90faa2a096f7e059173f +https://salsa.debian.org/sk-guest/monit.git==c9da7ebb1f35dfba17b50b5969a6e75e29cbec0d +https://salsa.debian.org/ssh-team/openssh.git==de790f931452a2dcb4490d074d5a16ab8456a523 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 new file mode 100644 index 000000000000..4e5d63644670 --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 @@ -0,0 +1,29 @@ +blessed==1.19.1 +click-log==0.4.0 +colorful==0.5.4 +docker==5.0.3 +docker-image-py==0.1.12 +enlighten==1.10.2 +filelock==3.7.1 +ijson==2.6.1 +ipaddress==1.0.23 +jsondiff==2.0.0 +jsonpatch==1.32 +jsonpointer==2.3 +jsonschema==2.6.0 +natsort==6.2.1 +netaddr==0.8.0 +netifaces==0.11.0 +pddf-platform==1.0 +prefixed==0.3.2 +prettyprinter==0.18.0 +pycairo==1.21.0 +pyroute2==0.5.19 +semantic-version==2.10.0 +systemd-python==234 +tabulate==0.8.2 +toposort==1.6 +wcwidth==0.2.5 +websocket-client==1.3.2 +www-authenticate==0.9.2 +xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-arm64 b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-arm64 new file mode 100644 index 000000000000..67e4dec5743e --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-arm64 @@ -0,0 +1,4 @@ +bitarray==1.5.3 +click==7.0 +lxml==4.6.5 +redis==3.5.3 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-armhf b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-armhf new file mode 100644 index 000000000000..67e4dec5743e --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-armhf @@ -0,0 +1,4 @@ +bitarray==1.5.3 +click==7.0 +lxml==4.6.5 +redis==3.5.3 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-web b/files/build/versions/build/build-sonic-slave-bullseye/versions-web new file mode 100644 index 000000000000..eca347438a84 --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-web @@ -0,0 +1,53 @@ +http://deb.debian.org/debian/pool/main/i/isc-dhcp/isc-dhcp_4.4.1-2.3.debian.tar.xz==72af4f677ebb88970bdcae0f73f2d9e8 +http://deb.debian.org/debian/pool/main/i/isc-dhcp/isc-dhcp_4.4.1-2.3.dsc==ff46d1b27970c3648701be4c20a5128a +http://deb.debian.org/debian/pool/main/i/isc-dhcp/isc-dhcp_4.4.1.orig.tar.gz==dbcba5108f659278200218ac0847ce3f +http://deb.debian.org/debian/pool/main/l/lm-sensors/lm-sensors_3.6.0-7.debian.tar.xz==8eab143a53c71c03695ebc78e4b5ed36 +http://deb.debian.org/debian/pool/main/l/lm-sensors/lm-sensors_3.6.0-7.dsc==983d68fb43001bb2fc94862bc4bc2e2b +http://deb.debian.org/debian/pool/main/l/lm-sensors/lm-sensors_3.6.0.orig.tar.gz==f60e47b5eb50bbeed48a9f43bb08dd5e +http://deb.debian.org/debian/pool/main/n/ntp/ntp_4.2.8p15+dfsg-1.debian.tar.xz==896c9b6679f379d8967b012a0cc792c2 +http://deb.debian.org/debian/pool/main/n/ntp/ntp_4.2.8p15+dfsg.orig.tar.xz==c1c557036197188a22ec285fa53149d8 +http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0-3~bpo9+1.debian.tar.xz==ef340aedc6fd42c549cd503bffb498b2 +http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0-3~bpo9+1.dsc==be4ce11ef67268e59e4b6be587327c40 +http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0.orig.tar.gz==6d565680a4af0d2e261abbc3e3431b2b +https://chrome-infra-packages.appspot.com/client?platform=linux-amd64&version=git_revision:673f5ee1931bc72a2b3d4ac712a7f7bc541f089b==e813a6e475d01264a4b855c13ff52805 +https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.dsc==de6e9967da7c4992ffd1a72b815994f7 +https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.tar.gz==b959c7ac01839e9b96a733d27b19e59e +https://deb.debian.org/debian/pool/main/k/kdump-tools/kdump-tools_1.6.8.4.dsc==f96a03bb090ab03d484e5d232161fafe +https://deb.debian.org/debian/pool/main/k/kdump-tools/kdump-tools_1.6.8.4.tar.xz==26bcae7c27b729d614a4a85e2a01cb64 +https://github.com/aristanetworks/sonic-firmware/raw/d227160f981f27df020ab50b9e0f16b1bd9166ea/phy/phy-credo_1.0_amd64.deb==525369d65ff7b40869d05adfc9027a8b +https://github.com/CumulusNetworks/ifupdown2/archive/3.0.0-1.tar.gz==755459b3a58fbc11625336846cea7420 +https://launchpad.net/debian/+archive/primary/+sourcefiles/bash/5.1-2/bash_5.1-2.debian.tar.xz==9d0cbd5f463f461c840c95f62a64d61b +https://launchpad.net/debian/+archive/primary/+sourcefiles/bash/5.1-2/bash_5.1-2.dsc==be44c5a9fc12fb567a486f54b842dd9e +https://launchpad.net/debian/+archive/primary/+sourcefiles/bash/5.1-2/bash_5.1.orig.tar.xz==6ddb13b6111f601db08fc7c72afa0263 +https://sonicstorage.blob.core.windows.net/debian-security/pool/updates/main/l/linux/linux_5.10.103-1.debian.tar.xz==1d191449cd0468cc525d9ee9ff786027 +https://sonicstorage.blob.core.windows.net/debian-security/pool/updates/main/l/linux/linux_5.10.103-1.dsc==0217f16a0e3874a072418b419d39ebd9 +https://sonicstorage.blob.core.windows.net/debian-security/pool/updates/main/l/linux/linux_5.10.103.orig.tar.xz==f27bcdb9bf9435fc4a4dde9876c38cd1 +https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang/libyang2_2.0.112-6.debian.tar.xz==aa798a069f506a243d337c18600477e5 +https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang/libyang2_2.0.112-6.dsc==da4924086edc4911c6fca21ca46fdb1d +https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang/libyang2_2.0.112.orig.tar.gz==4ac414ef27f3c4d14f96c2f49c58c2be +https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.9+dfsg-3.debian.tar.xz==8757281c6b6ff9c0a36fc552dd276a3c +https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.9+dfsg-3.dsc==4afc4c6302ad4d1e6ebea1daf43dffa8 +https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.9+dfsg.orig.tar.xz==6c2d346ce3320e8999500497e9bacc99 +https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1-3.debian.tar.xz?sv=2020-04-08&st=2021-12-14T08%3A00%3A00Z&se=2030-12-14T18%3A18%3A00Z&sr=b&sp=r&sig=C8aYSvaQgMJ58Z13kFY0Wr0J0QF6i7WCeET9%2BpF%2BAxc%3D==e8d1e99b4b9e93f5dde860f6d55f42e3 +https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1-3.dsc?sv=2020-04-08&st=2021-12-14T00%3A00%3A00Z&se=2050-12-15T00%3A00%3A00Z&sr=b&sp=r&sig=fIy6dVz3s59K0TiMkTlwSWN8lCzRl3i76ruAtROhfWA%3D==df3ed0dd965589fd09bf6a2920bc273e +https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1.orig.tar.gz?sv=2020-04-08&st=2021-12-14T00%3A00%3A00Z&se=2050-12-15T00%3A00%3A00Z&sr=b&sp=r&sig=gpihyZv%2Fr0bVrCUKCKwpS4bIoqiPpdd%2BgCfuUGNHOUc%3D==780d14908dc1a6aa2790de376ab56b7a +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==eafff1fa77d5e770bc73e06ff8840cb6 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-go_1.15.15-1~deb11u4+fips_amd64.deb==b60f6db62805696b47ab422ab798fe56 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-src_1.15.15-1~deb11u4+fips_amd64.deb==1c920937aa49b602a1bfec3c49747131 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==e18fed0c17f90b48c19ccde122c4d5c1 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libk5crypto3_1.18.3-6+deb11u1+fips_amd64.deb==c5b36c1b743b16c8d1d9c4ced34536a8 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libpython3.9-minimal_3.9.2-1+fips_amd64.deb==e49ec97fc613209a562ef459dc6fa097 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libpython3.9-stdlib_3.9.2-1+fips_amd64.deb==00bd255dd05813d3c5ef3b83beed2587 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libpython3.9_3.9.2-1+fips_amd64.deb==62393c04da16a02f90bd8521c0940c2f +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libssl-dev_1.1.1k-1+deb11u1+fips_amd64.deb==709b37517a788eddb09e121f0d53de9d +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libssl-doc_1.1.1k-1+deb11u1+fips_all.deb==fc1e33dfaeabc36583ebdf177d025b42 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libssl1.1_1.1.1k-1+deb11u1+fips_amd64.deb==034fdda29c5e965a3edbb54aa05dfbb9 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openssh-client_8.4p1-5+fips_amd64.deb==cac3a4aa6ea63594fd885ad695b96e0c +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openssh-server_8.4p1-5+fips_amd64.deb==8f3af9449065938ca698ff0726929c64 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openssh-sftp-server_8.4p1-5+fips_amd64.deb==765da7b03557259d6569d15b27ca07f2 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openssl_1.1.1k-1+deb11u1+fips_amd64.deb==89b8ca1e189263c38911d05bef925ba6 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/python3.9-minimal_3.9.2-1+fips_amd64.deb==22b10a1f10cdcf1ad5e80e60803e2023 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/python3.9_3.9.2-1+fips_amd64.deb==a0caf3616afdf36c3480b94d496c58df +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/symcrypt-openssl_0.1_amd64.deb==94f118009a4426cc5de4d6a0f7d6974d +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm-dev_7.1.0.0-1_amd64.deb==b0bf737bc08246b65b9c4cad2b4eb007 +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm_7.1.0.0-1_amd64.deb==1715d2c785b4db83a51a02bc126bab0b \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster new file mode 100644 index 000000000000..dba39dbee098 --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster @@ -0,0 +1,36 @@ +libhiredis-dev==0.14.0-3~bpo9+1 +libhiredis0.14==0.14.0-3~bpo9+1 +libnl-cli-3-200==3.5.0-1 +libnl-cli-3-dev==3.5.0-1 +libnl-genl-3-200==3.5.0-1 +libnl-genl-3-dev==3.5.0-1 +libnl-nf-3-200==3.5.0-1 +libnl-nf-3-dev==3.5.0-1 +libsaimetadata==1.0.0 +libsaimetadata-dev==1.0.0 +libsairedis==1.0.0 +libsairedis-dev==1.0.0 +libsaithrift-dev==0.9.4 +libsaivs==1.0.0 +libswsscommon==1.0.0 +libswsscommon-dev==1.0.0 +libteam-dev==1.30-1 +libteam-utils==1.30-1 +libteam5==1.30-1 +libteamdctl0==1.30-1 +libthrift-0.11.0==0.11.0-4 +libthrift-dev==0.11.0-4 +libyang==1.0.73 +libyang-cpp==1.0.73 +libyang-dev==1.0.73 +lldpd==1.0.4-1 +python-swsscommon==1.0.0 +python-thrift==0.11.0-4 +python3-swsscommon==1.0.0 +python3-yang==1.0.73 +sonic-mgmt-common==1.0.0 +sonic-mgmt-common-codegen==1.0.0 +sonic-mgmt-framework==1.0-01 +swss==1.0.0 +syncd==1.0.0 +thrift-compiler==0.11.0-4 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-arm64 b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-arm64 new file mode 100644 index 000000000000..11fd3b48e9af --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-arm64 @@ -0,0 +1,4 @@ +libnl-3-200==3.5.0-1 +libnl-3-dev==3.5.0-1 +libnl-route-3-200==3.5.0-1 +libnl-route-3-dev==3.5.0-1 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-armhf b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-armhf new file mode 100644 index 000000000000..11fd3b48e9af --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-armhf @@ -0,0 +1,4 @@ +libnl-3-200==3.5.0-1 +libnl-3-dev==3.5.0-1 +libnl-route-3-200==3.5.0-1 +libnl-route-3-dev==3.5.0-1 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-git b/files/build/versions/build/build-sonic-slave-buster/versions-git new file mode 100644 index 000000000000..6181d22eb459 --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-buster/versions-git @@ -0,0 +1,7 @@ +https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 +https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 +https://github.com/Mellanox/libpsample.git==62bb27d9a49424e45191eee81df7ce0d8c74e774 +https://github.com/sflow/host-sflow==2b8771aa7284d3b34cfc43fccba67649d30d0c64 +https://github.com/sflow/sflowtool==4be2a17b36a3b9796c280b117b8b786323a84ae8 +https://github.com/thom311/libnl==44988e648cd5c9f912148e8b138776064797f49d +https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b61368d4c5 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-py2 b/files/build/versions/build/build-sonic-slave-buster/versions-py2 new file mode 100644 index 000000000000..2da8bacb13ef --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-buster/versions-py2 @@ -0,0 +1,11 @@ +bitarray==1.5.3 +contextlib2==0.6.0.post1 +future==0.18.2 +importlib-resources==3.3.1 +natsort==6.2.1 +netaddr==0.8.0 +pyang==2.5.3 +pyangbind==0.6.0 +redis==3.5.3 +thrift==0.11.0 +zipp==1.2.0 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-py2-all-arm64 b/files/build/versions/build/build-sonic-slave-buster/versions-py2-all-arm64 new file mode 100644 index 000000000000..5d5fdc227c5c --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-buster/versions-py2-all-arm64 @@ -0,0 +1 @@ +ipaddress==1.0.23 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-py2-all-armhf b/files/build/versions/build/build-sonic-slave-buster/versions-py2-all-armhf new file mode 100644 index 000000000000..5d5fdc227c5c --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-buster/versions-py2-all-armhf @@ -0,0 +1 @@ +ipaddress==1.0.23 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-py3 b/files/build/versions/build/build-sonic-slave-buster/versions-py3 new file mode 100644 index 000000000000..897b1f4831b3 --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-buster/versions-py3 @@ -0,0 +1,8 @@ +ijson==2.6.1 +ipaddress==1.0.23 +jsondiff==2.0.0 +natsort==6.2.1 +netaddr==0.8.0 +psutil==5.9.1 +python-arptable==0.0.2 +xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-py3-all-arm64 b/files/build/versions/build/build-sonic-slave-buster/versions-py3-all-arm64 new file mode 100644 index 000000000000..ff92ab3c064b --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-buster/versions-py3-all-arm64 @@ -0,0 +1,3 @@ +bitarray==1.5.3 +redis==3.5.3 +zipp==1.2.0 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-py3-all-armhf b/files/build/versions/build/build-sonic-slave-buster/versions-py3-all-armhf new file mode 100644 index 000000000000..ff92ab3c064b --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-buster/versions-py3-all-armhf @@ -0,0 +1,3 @@ +bitarray==1.5.3 +redis==3.5.3 +zipp==1.2.0 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-web b/files/build/versions/build/build-sonic-slave-buster/versions-web new file mode 100644 index 000000000000..e034057e7289 --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-buster/versions-web @@ -0,0 +1,29 @@ +http://deb.debian.org/debian/pool/main/i/iptables/iptables_1.8.2-4.debian.tar.xz==c27e499611c48ba307792518d29cdcc7 +http://deb.debian.org/debian/pool/main/i/iptables/iptables_1.8.2-4.dsc==d9572a9f48c88293341681601a7b18c5 +http://deb.debian.org/debian/pool/main/i/iptables/iptables_1.8.2.orig.tar.bz2==944558e88ddcc3b9b0d9550070fa3599 +http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0-3~bpo9+1.debian.tar.xz==ef340aedc6fd42c549cd503bffb498b2 +http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0-3~bpo9+1.dsc==be4ce11ef67268e59e4b6be587327c40 +http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0.orig.tar.gz==6d565680a4af0d2e261abbc3e3431b2b +https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.5/swagger-codegen-cli-2.4.5.jar==219f1453ff22482d9e080effbfa7fa81 +https://sonicstorage.blob.core.windows.net/debian/pool/main/l/lldpd/lldpd_1.0.4-1.debian.tar.xz==0a529cf8d1717b5c3dbe0c61b3512aa1 +https://sonicstorage.blob.core.windows.net/debian/pool/main/l/lldpd/lldpd_1.0.4-1.dsc==b88b922d96688c948e90987fcaa3a2de +https://sonicstorage.blob.core.windows.net/debian/pool/main/l/lldpd/lldpd_1.0.4.orig.tar.gz==33e8d58623f99184e4e709cbbfe45db3 +https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang/libyang2_2.0.112-6.debian.tar.xz==aa798a069f506a243d337c18600477e5 +https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang/libyang2_2.0.112-6.dsc==da4924086edc4911c6fca21ca46fdb1d +https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang/libyang2_2.0.112.orig.tar.gz==4ac414ef27f3c4d14f96c2f49c58c2be +https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.7.3+dfsg-5.debian.tar.xz==ad957e90207d0669beb2109e4e325def +https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.7.3+dfsg-5.dsc==2443e4dffbdb020e7ab4f947a7904912 +https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.7.3+dfsg.orig.tar.xz==6391ae27eb1ae34ff5530712bb1c4209 +https://sonicstorage.blob.core.windows.net/packages/20190307/bcmcmd?sv=2015-04-05&sr=b&sig=sUdbU7oVbh5exbXXHVL5TDFBTWDDBASHeJ8Cp0B0TIc%3D&se=2038-05-06T22%3A34%3A19Z&sp=r==b8aefc751bdf93218716bca6797460ff +https://sonicstorage.blob.core.windows.net/packages/20190307/dsserve?sv=2015-04-05&sr=b&sig=lk7BH3DtW%2F5ehc0Rkqfga%2BUCABI0UzQmDamBsZH9K6w%3D&se=2038-05-06T22%3A34%3A45Z&sp=r==f9d4b815ebb9be9f755dedca8a51170d +https://sonicstorage.blob.core.windows.net/packages/credosai/libsaicredo-owl_0.7.5_amd64.deb?sv=2020-10-02&st=2022-04-14T02%3A23%3A22Z&se=2100-04-15T02%3A23%3A00Z&sr=b&sp=r&sig=58z6E2nPcLIGjqAoxRAo7du%2FzjIBZkFdoXfSzw96Kxc%3D==b02c8664535fc6f9c02a89c5a6930578 +https://sonicstorage.blob.core.windows.net/packages/credosai/libsaicredo_0.7.5_amd64.deb?sv=2020-10-02&st=2022-04-14T02%3A21%3A31Z&se=2100-04-15T02%3A21%3A00Z&sr=b&sp=r&sig=iDv9Fprntpw9iVBFYVjW8iygy4qcSWT8O90nAXdXR0A%3D==e62bdf009e1a81e2ce8a38073305450c +https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1-3.debian.tar.xz?sv=2020-04-08&st=2021-12-14T08%3A00%3A00Z&se=2030-12-14T18%3A18%3A00Z&sr=b&sp=r&sig=C8aYSvaQgMJ58Z13kFY0Wr0J0QF6i7WCeET9%2BpF%2BAxc%3D==e8d1e99b4b9e93f5dde860f6d55f42e3 +https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1-3.dsc?sv=2020-04-08&st=2021-12-14T00%3A00%3A00Z&se=2050-12-15T00%3A00%3A00Z&sr=b&sp=r&sig=fIy6dVz3s59K0TiMkTlwSWN8lCzRl3i76ruAtROhfWA%3D==df3ed0dd965589fd09bf6a2920bc273e +https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1.orig.tar.gz?sv=2020-04-08&st=2021-12-14T00%3A00%3A00Z&se=2050-12-15T00%3A00%3A00Z&sr=b&sp=r&sig=gpihyZv%2Fr0bVrCUKCKwpS4bIoqiPpdd%2BgCfuUGNHOUc%3D==780d14908dc1a6aa2790de376ab56b7a +https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0-4.debian.tar.xz?sv=2015-04-05&sr=b&sig=dj9uJ5YjUNupcmuxSX6%2F5IS9NqaGAyM9iF2h%2F2rROZA%3D&se=2156-02-02T17%3A19%3A34Z&sp=r==52ad383b97ad051f4d1d25b54aaad569 +https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0-4.dsc?sv=2015-04-05&sr=b&sig=pWfg55owvQ2jZtZ6ylHp0OP8uZyfc9sxO6H%2BP4Ez7w4%3D&se=2156-02-02T17%3A20%3A05Z&sp=r==6917fe7b3ada9313be94713dd50fee7b +https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0.orig.tar.gz?sv=2015-04-05&sr=b&sig=%2BrAjWESiSNRCMN7NGqEqVGceLefpwwS%2FWPKEfJpPLSQ%3D&se=2156-02-02T17%3A17%3A20Z&sp=r==0be59730ebce071eceaf6bfdb8d3a20e +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm-dev_7.1.0.0-1_amd64.deb==b0bf737bc08246b65b9c4cad2b4eb007 +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm_7.1.0.0-1_amd64.deb==1715d2c785b4db83a51a02bc126bab0b +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm_dnx_7.1.0.0-1_amd64.deb==e84a66a741f04aebe7085b0ae970f4e3 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-stretch/versions-web b/files/build/versions/build/build-sonic-slave-stretch/versions-web new file mode 100644 index 000000000000..978ff990bf87 --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-stretch/versions-web @@ -0,0 +1,2 @@ +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm-dev_7.1.0.0-1_amd64.deb==b0bf737bc08246b65b9c4cad2b4eb007 +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm_7.1.0.0-1_amd64.deb==1715d2c785b4db83a51a02bc126bab0b \ No newline at end of file diff --git a/files/build/versions/default/versions-docker b/files/build/versions/default/versions-docker new file mode 100644 index 000000000000..bd8d5e5a8f09 --- /dev/null +++ b/files/build/versions/default/versions-docker @@ -0,0 +1,15 @@ +amd64:amd64/debian:bullseye==sha256:f0203caaadfa5e8191aa8d75ad0b36c95c72543c33f76e48f0a4d9dec22d5a63 +amd64:amd64/debian:buster==sha256:ff2b512c66a78380275b217fd68e81623fc899a7bf9be9bfe16d98188183fcd3 +amd64:debian:bullseye==sha256:b42494c466d101bf06038e959e2e5acd227e1251987e79528e7d8b1f4040deaf +amd64:debian:buster==sha256:d97fcaf659ba307d72b8d0fea5d0bae435247490046e7c0eca17c52fc66a53ca +amd64:debian:stretch==sha256:46b9515d5b9080939a3deb88f063a3966d23bac350affdd30520f09ec678deee +arm64:arm64v8/debian:bullseye==sha256:1623b714f66926243b9b946d59d200082a1b86043169f4d6602b6e64bc20a38a +arm64:arm64v8/debian:buster==sha256:68f1188b21bf0b7fe9c92f3a91262d3093aafe2de76adc7c52012a16960048fc +arm64:debian:bullseye==sha256:b42494c466d101bf06038e959e2e5acd227e1251987e79528e7d8b1f4040deaf +arm64:debian:buster==sha256:d97fcaf659ba307d72b8d0fea5d0bae435247490046e7c0eca17c52fc66a53ca +arm64:debian:stretch==sha256:46b9515d5b9080939a3deb88f063a3966d23bac350affdd30520f09ec678deee +armhf:arm32v7/debian:bullseye==sha256:49ac40f7de436345dae5f19abaf263bc38429d6262703d3af7ae9c00042e41a7 +armhf:arm32v7/debian:buster==sha256:426a61780c005de09eb9c3a08e9bcf292c95bd84514cf2fd1a63e2494bfea194 +armhf:debian:bullseye==sha256:b42494c466d101bf06038e959e2e5acd227e1251987e79528e7d8b1f4040deaf +armhf:debian:buster==sha256:d97fcaf659ba307d72b8d0fea5d0bae435247490046e7c0eca17c52fc66a53ca +armhf:debian:stretch==sha256:46b9515d5b9080939a3deb88f063a3966d23bac350affdd30520f09ec678deee \ No newline at end of file diff --git a/files/build/versions/default/versions-git b/files/build/versions/default/versions-git new file mode 100644 index 000000000000..dbf73e118a00 --- /dev/null +++ b/files/build/versions/default/versions-git @@ -0,0 +1,19 @@ +https://chromium.googlesource.com/chromium/tools/depot_tools.git==8f1fea025d78c26046d3135e026f097dc2022698 +https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f +https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 +https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 +https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b +https://github.com/FreeRADIUS/freeradius-server.git==3317d67e2cc3b1f55fd8384ddddb8d80fa90db52 +https://github.com/FreeRADIUS/pam_radius.git==5e67868520e90a489626928f28c0befa531bf7d2 +https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 +https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 +https://github.com/Marvell-switching/mrvl-prestera.git==9dbae444204a2c27b33be698ce497d55926b8893 +https://github.com/Mellanox/libpsample.git==62bb27d9a49424e45191eee81df7ce0d8c74e774 +https://github.com/sflow/host-sflow==2b8771aa7284d3b34cfc43fccba67649d30d0c64 +https://github.com/sflow/sflowtool==4be2a17b36a3b9796c280b117b8b786323a84ae8 +https://github.com/thom311/libnl==44988e648cd5c9f912148e8b138776064797f49d +https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b61368d4c5 +https://salsa.debian.org/kernel-team/ethtool/==0d5304a5be80cc74bed8ed78002bf5df0d49f412 +https://salsa.debian.org/kernel-team/initramfs-tools.git==9b3a06991f9f4a96efbd90faa2a096f7e059173f +https://salsa.debian.org/sk-guest/monit.git==c9da7ebb1f35dfba17b50b5969a6e75e29cbec0d +https://salsa.debian.org/ssh-team/openssh.git==de790f931452a2dcb4490d074d5a16ab8456a523 \ No newline at end of file diff --git a/files/build/versions/default/versions-web b/files/build/versions/default/versions-web new file mode 100644 index 000000000000..36e024149a78 --- /dev/null +++ b/files/build/versions/default/versions-web @@ -0,0 +1,116 @@ +http://deb.debian.org/debian/pool/main/d/doxygen/doxygen_1.8.13-10.debian.tar.xz==09198160fb3dfa4c33ce143e3bf1c470 +http://deb.debian.org/debian/pool/main/d/doxygen/doxygen_1.8.13-10.dsc==f831a76f1a1f76622dcacba2af01ddcb +http://deb.debian.org/debian/pool/main/d/doxygen/doxygen_1.8.13.orig.tar.gz==0fa414975f8cd6d30e126c28327c1f7c +http://deb.debian.org/debian/pool/main/d/doxygen/doxygen_1.9.1-2.debian.tar.xz==c384375e2eb13c5ee58f34a91f06320e +http://deb.debian.org/debian/pool/main/d/doxygen/doxygen_1.9.1-2.dsc==cc5e340bf811697859b558aec4c69b45 +http://deb.debian.org/debian/pool/main/d/doxygen/doxygen_1.9.1.orig.tar.gz==04f2f374392cf0ee36503ea8a07f07cd +http://deb.debian.org/debian/pool/main/i/iptables/iptables_1.8.2-4.debian.tar.xz==c27e499611c48ba307792518d29cdcc7 +http://deb.debian.org/debian/pool/main/i/iptables/iptables_1.8.2-4.dsc==d9572a9f48c88293341681601a7b18c5 +http://deb.debian.org/debian/pool/main/i/iptables/iptables_1.8.2.orig.tar.bz2==944558e88ddcc3b9b0d9550070fa3599 +http://deb.debian.org/debian/pool/main/i/isc-dhcp/isc-dhcp_4.4.1-2.3.debian.tar.xz==72af4f677ebb88970bdcae0f73f2d9e8 +http://deb.debian.org/debian/pool/main/i/isc-dhcp/isc-dhcp_4.4.1-2.3.dsc==ff46d1b27970c3648701be4c20a5128a +http://deb.debian.org/debian/pool/main/i/isc-dhcp/isc-dhcp_4.4.1.orig.tar.gz==dbcba5108f659278200218ac0847ce3f +http://deb.debian.org/debian/pool/main/l/lm-sensors/lm-sensors_3.6.0-7.debian.tar.xz==8eab143a53c71c03695ebc78e4b5ed36 +http://deb.debian.org/debian/pool/main/l/lm-sensors/lm-sensors_3.6.0-7.dsc==983d68fb43001bb2fc94862bc4bc2e2b +http://deb.debian.org/debian/pool/main/l/lm-sensors/lm-sensors_3.6.0.orig.tar.gz==f60e47b5eb50bbeed48a9f43bb08dd5e +http://deb.debian.org/debian/pool/main/n/ntp/ntp_4.2.8p15+dfsg-1.debian.tar.xz==896c9b6679f379d8967b012a0cc792c2 +http://deb.debian.org/debian/pool/main/n/ntp/ntp_4.2.8p15+dfsg.orig.tar.xz==c1c557036197188a22ec285fa53149d8 +http://ftp.us.debian.org/debian/pool/main/s/scapy/python-scapy_2.4.0-2_all.deb==d87d7b22de51937b1e706e4751b86251 +http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0-3~bpo9+1.debian.tar.xz==ef340aedc6fd42c549cd503bffb498b2 +http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0-3~bpo9+1.dsc==be4ce11ef67268e59e4b6be587327c40 +http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0.orig.tar.gz==6d565680a4af0d2e261abbc3e3431b2b +http://www.mellanox.com/downloads/MFT/mft-4.20.0-34-x86_64-deb.tgz==87ad9025d4fc0c3abb9272c3e93af496 +https://bootstrap.pypa.io/pip/2.7/get-pip.py==60e8267eb1b7bc71dc4843eb7bd294d3 +https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.dsc==de6e9967da7c4992ffd1a72b815994f7 +https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.tar.gz==b959c7ac01839e9b96a733d27b19e59e +https://deb.debian.org/debian/pool/main/k/kdump-tools/kdump-tools_1.6.8.4.dsc==f96a03bb090ab03d484e5d232161fafe +https://deb.debian.org/debian/pool/main/k/kdump-tools/kdump-tools_1.6.8.4.tar.xz==26bcae7c27b729d614a4a85e2a01cb64 +https://deb.nodesource.com/gpgkey/nodesource.gpg.key==003b51a89a133b5db4cca98b2dea3117 +https://deb.nodesource.com/node_10.x/dists/stretch/Release==22738118af583db3bfad39d6fcb4fa5a +https://deb.nodesource.com/node_14.x/dists/bullseye/Release==42c7518e62764ce594c0dc7dc593d20a +https://deb.nodesource.com/node_14.x/dists/buster/Release==6b181b4ad151ab26c7c7738ec8534ed3 +https://deb.nodesource.com/setup_10.x==6742c0148159980e8f6e886df1f8bbe1 +https://deb.nodesource.com/setup_14.x==3fb63a2bd38414a2b249fa9b3dbbbc3e +https://download.docker.com/linux/debian/gpg==1afae06b34a13c1b3d9cb61a26285a15 +https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==4ea37edbea9fc2b88bdb5bbc2855be04 +https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-arm64==913165e7536ebd338a3614b27e480d87 +https://github.com/CentecNetworks/sonic-binaries/raw/master/arm64/sai/libsai_1.9.1-0_arm64.deb==c354c766cc763a5af621a88637b9e126 +https://github.com/CumulusNetworks/ifupdown2/archive/3.0.0-1.tar.gz==755459b3a58fbc11625336846cea7420 +https://github.com/Marvell-switching/sonic-marvell-binaries/raw/master/armhf/sai-plugin/mrvllibsai_1.9.1-2_armhf.deb==41989b6336eaca539d81981ce82df2d4 +https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz==6f56ef28c93cee644e8c4aaaef7cfb55 +https://launchpad.net/debian/+archive/primary/+sourcefiles/bash/5.1-2/bash_5.1-2.debian.tar.xz==9d0cbd5f463f461c840c95f62a64d61b +https://launchpad.net/debian/+archive/primary/+sourcefiles/bash/5.1-2/bash_5.1-2.dsc==be44c5a9fc12fb567a486f54b842dd9e +https://launchpad.net/debian/+archive/primary/+sourcefiles/bash/5.1-2/bash_5.1.orig.tar.xz==6ddb13b6111f601db08fc7c72afa0263 +https://raw.githubusercontent.com/p4lang/ptf/master/ptf_nn/ptf_nn_agent.py==628956b660575965429cec84b1778816 +https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.5/swagger-codegen-cli-2.4.5.jar==219f1453ff22482d9e080effbfa7fa81 +https://sonicstorage.blob.core.windows.net/debian-security/pool/updates/main/l/linux/linux_5.10.103-1.debian.tar.xz==1d191449cd0468cc525d9ee9ff786027 +https://sonicstorage.blob.core.windows.net/debian-security/pool/updates/main/l/linux/linux_5.10.103-1.dsc==0217f16a0e3874a072418b419d39ebd9 +https://sonicstorage.blob.core.windows.net/debian-security/pool/updates/main/l/linux/linux_5.10.103.orig.tar.xz==f27bcdb9bf9435fc4a4dde9876c38cd1 +https://sonicstorage.blob.core.windows.net/debian/pool/main/l/lldpd/lldpd_1.0.4-1.debian.tar.xz==0a529cf8d1717b5c3dbe0c61b3512aa1 +https://sonicstorage.blob.core.windows.net/debian/pool/main/l/lldpd/lldpd_1.0.4-1.dsc==b88b922d96688c948e90987fcaa3a2de +https://sonicstorage.blob.core.windows.net/debian/pool/main/l/lldpd/lldpd_1.0.4.orig.tar.gz==33e8d58623f99184e4e709cbbfe45db3 +https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang/libyang2_2.0.112-6.debian.tar.xz==aa798a069f506a243d337c18600477e5 +https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang/libyang2_2.0.112-6.dsc==da4924086edc4911c6fca21ca46fdb1d +https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang/libyang2_2.0.112.orig.tar.gz==4ac414ef27f3c4d14f96c2f49c58c2be +https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.7.3+dfsg-5.debian.tar.xz==ad957e90207d0669beb2109e4e325def +https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.7.3+dfsg-5.dsc==2443e4dffbdb020e7ab4f947a7904912 +https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.7.3+dfsg.orig.tar.xz==6391ae27eb1ae34ff5530712bb1c4209 +https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.9+dfsg-3.debian.tar.xz==8757281c6b6ff9c0a36fc552dd276a3c +https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.9+dfsg-3.dsc==4afc4c6302ad4d1e6ebea1daf43dffa8 +https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.9+dfsg.orig.tar.xz==6c2d346ce3320e8999500497e9bacc99 +https://sonicstorage.blob.core.windows.net/packages/cmake/cmake-data_3.13.2-1_bpo9%2B1_all.deb?st=2020-03-27T02%3A22%3A24Z&se=2100-03-26T19%3A00%3A00Z&sp=rl&sv=2018-03-28&sr=b&sig=Xby%2Bm3OZOjPB%2FSlDbHD65yDcPzAgoys%2FA3vK8RB4BzA%3D==147cf42f3a68f6d6f1e53d95a599a1af +https://sonicstorage.blob.core.windows.net/packages/cmake/cmake_3.13.2-1_bpo9%2B1_amd64.deb?st=2020-03-27T02%3A27%3A21Z&se=2100-03-26T19%3A00%3A00Z&sp=rl&sv=2018-03-28&sr=b&sig=4MvmmDBQuicFEJYakLm7xCNU19yJ8GIP4ankFSnITKY%3D==e75c741e8b6918b8f03625e456fa0275 +https://sonicstorage.blob.core.windows.net/packages/cmake/cmake_3.13.2-1_bpo9%2B1_arm64.deb?st=2020-03-27T02%3A28%3A38Z&se=2100-03-26T19%3A00%3A00Z&sp=rl&sv=2018-03-28&sr=b&sig=rrHMkLi29aI8yH6s52ILCY8VcEbNFrzYT2DmC5RwOgs%3D==9bcc989e6ed168717f67c07e79177d4a +https://sonicstorage.blob.core.windows.net/packages/cmake/cmake_3.13.2-1_bpo9%2B1_armhf.deb?st=2020-03-27T02%3A29%3A41Z&se=2100-03-26T19%3A00%3A00Z&sp=rl&sv=2018-03-28&sr=b&sig=sWt7kxrFumn020d2GeutGJ716cuQsFwmAmgU%2BJ0kqnk%3D==b5625da7ac620a2ae869653b9e5318ed +https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1-3.debian.tar.xz?sv=2020-04-08&st=2021-12-14T08%3A00%3A00Z&se=2030-12-14T18%3A18%3A00Z&sr=b&sp=r&sig=C8aYSvaQgMJ58Z13kFY0Wr0J0QF6i7WCeET9%2BpF%2BAxc%3D==e8d1e99b4b9e93f5dde860f6d55f42e3 +https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1-3.dsc?sv=2020-04-08&st=2021-12-14T00%3A00%3A00Z&se=2050-12-15T00%3A00%3A00Z&sr=b&sp=r&sig=fIy6dVz3s59K0TiMkTlwSWN8lCzRl3i76ruAtROhfWA%3D==df3ed0dd965589fd09bf6a2920bc273e +https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1.orig.tar.gz?sv=2020-04-08&st=2021-12-14T00%3A00%3A00Z&se=2050-12-15T00%3A00%3A00Z&sr=b&sp=r&sig=gpihyZv%2Fr0bVrCUKCKwpS4bIoqiPpdd%2BgCfuUGNHOUc%3D==780d14908dc1a6aa2790de376ab56b7a +https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0-4.debian.tar.xz?sv=2015-04-05&sr=b&sig=dj9uJ5YjUNupcmuxSX6%2F5IS9NqaGAyM9iF2h%2F2rROZA%3D&se=2156-02-02T17%3A19%3A34Z&sp=r==52ad383b97ad051f4d1d25b54aaad569 +https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0-4.dsc?sv=2015-04-05&sr=b&sig=pWfg55owvQ2jZtZ6ylHp0OP8uZyfc9sxO6H%2BP4Ez7w4%3D&se=2156-02-02T17%3A20%3A05Z&sp=r==6917fe7b3ada9313be94713dd50fee7b +https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0.orig.tar.gz?sv=2015-04-05&sr=b&sig=%2BrAjWESiSNRCMN7NGqEqVGceLefpwwS%2FWPKEfJpPLSQ%3D&se=2156-02-02T17%3A17%3A20Z&sp=r==0be59730ebce071eceaf6bfdb8d3a20e +https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1_bpo10+1_arm64.deb?sv=2015-04-05&sr=b&sig=GbkJV2wWln3hoz27zKi5erdk3NDKrAFrQriA97bcRCY%3D&se=2030-10-24T04%3A22%3A21Z&sp=r==282b4766cc9ac7d8bb70622bd69d9f5c +https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1_bpo10+1_armhf.deb?sv=2015-04-05&sr=b&sig=67vHAMxsl%2BS3X1KsqhdYhakJkGdg5FKSPgU8kUiw4as%3D&se=2030-10-24T04%3A22%3A40Z&sp=r==62f287117afab6caaec564232ebbb5de +https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1~bpo10+1_amd64.deb?sv=2015-04-05&sr=b&sig=73zbmjkf3pi%2Bn0R8Hy7CWT2EUvOAyzM5aLYJWCLySGM%3D&se=2030-09-06T19%3A44%3A59Z&sp=r==2d58c3c3358290c04d5e0ba70f297f18 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==eafff1fa77d5e770bc73e06ff8840cb6 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-go_1.15.15-1~deb11u4%2Bfips_amd64.deb==b60f6db62805696b47ab422ab798fe56 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-go_1.15.15-1~deb11u4+fips_amd64.deb==b60f6db62805696b47ab422ab798fe56 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-src_1.15.15-1~deb11u4%2Bfips_amd64.deb==1c920937aa49b602a1bfec3c49747131 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-src_1.15.15-1~deb11u4+fips_amd64.deb==1c920937aa49b602a1bfec3c49747131 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==e18fed0c17f90b48c19ccde122c4d5c1 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libk5crypto3_1.18.3-6+deb11u1+fips_amd64.deb==c5b36c1b743b16c8d1d9c4ced34536a8 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libpython3.9-minimal_3.9.2-1+fips_amd64.deb==e49ec97fc613209a562ef459dc6fa097 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libpython3.9-stdlib_3.9.2-1+fips_amd64.deb==00bd255dd05813d3c5ef3b83beed2587 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libpython3.9_3.9.2-1+fips_amd64.deb==62393c04da16a02f90bd8521c0940c2f +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libssl-dev_1.1.1k-1+deb11u1+fips_amd64.deb==709b37517a788eddb09e121f0d53de9d +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libssl-doc_1.1.1k-1+deb11u1+fips_all.deb==fc1e33dfaeabc36583ebdf177d025b42 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libssl1.1_1.1.1k-1+deb11u1+fips_amd64.deb==034fdda29c5e965a3edbb54aa05dfbb9 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openssh-client_8.4p1-5+fips_amd64.deb==cac3a4aa6ea63594fd885ad695b96e0c +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openssh-server_8.4p1-5+fips_amd64.deb==8f3af9449065938ca698ff0726929c64 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openssh-sftp-server_8.4p1-5+fips_amd64.deb==765da7b03557259d6569d15b27ca07f2 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openssl_1.1.1k-1+deb11u1+fips_amd64.deb==89b8ca1e189263c38911d05bef925ba6 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/python3.9-minimal_3.9.2-1+fips_amd64.deb==22b10a1f10cdcf1ad5e80e60803e2023 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/python3.9_3.9.2-1+fips_amd64.deb==a0caf3616afdf36c3480b94d496c58df +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/symcrypt-openssl_0.1_amd64.deb==94f118009a4426cc5de4d6a0f7d6974d +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==52bad2d21e796bd2c183d9fdd66f8a0a +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/golang-1.15-go_1.15.15-1~deb11u4%2Bfips_arm64.deb==0b70c104b907db13ff2fe5d52b3d0008 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/golang-1.15-go_1.15.15-1~deb11u4+fips_arm64.deb==0b70c104b907db13ff2fe5d52b3d0008 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/golang-1.15-src_1.15.15-1~deb11u4%2Bfips_arm64.deb==1d06900f03424fa5ce34a782605983fe +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/golang-1.15-src_1.15.15-1~deb11u4+fips_arm64.deb==1d06900f03424fa5ce34a782605983fe +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==e18fed0c17f90b48c19ccde122c4d5c1 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/libk5crypto3_1.18.3-6+deb11u1+fips_arm64.deb==c6dd8e2b8d30492e280d4b1b3fd362a6 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/libpython3.9-minimal_3.9.2-1+fips_arm64.deb==13ce25cc4936316acdd88f52a5f4f7bd +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/libpython3.9-stdlib_3.9.2-1+fips_arm64.deb==88ed9fe59c095f60a0b3ea25d9fc666a +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/libpython3.9_3.9.2-1+fips_arm64.deb==bdc459caf450092df703f987b4c7b3f0 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/libssl-dev_1.1.1k-1+deb11u1+fips_arm64.deb==a6487890c288b0e14dc00fb32cfdb4f2 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/libssl-doc_1.1.1k-1+deb11u1+fips_all.deb==fc1e33dfaeabc36583ebdf177d025b42 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/libssl1.1_1.1.1k-1+deb11u1+fips_arm64.deb==86d0f1959bfcd9460d5f01c1dc73fc9c +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/openssh-client_8.4p1-5+fips_arm64.deb==42104a6c4c3c14acec187a3cc92fb513 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/openssh-server_8.4p1-5+fips_arm64.deb==2884ef2e3f3b2c24dea38384e6265beb +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/openssh-sftp-server_8.4p1-5+fips_arm64.deb==1f8f9cef3e420dad5d172dd44f37ae3d +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/openssl_1.1.1k-1+deb11u1+fips_arm64.deb==fe1cebf54c66b0d6e5985dc6ffa7b613 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/python3.9-minimal_3.9.2-1+fips_arm64.deb==2854f00fbddaa17e549ec3be34718f4f +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/python3.9_3.9.2-1+fips_arm64.deb==45c9fe276c0c50a7cd9368f9c03d0296 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/symcrypt-openssl_0.1_arm64.deb==2edbe79c1d8261b6fa2d58defe457040 +https://storage.googleapis.com/golang/go1.14.2.linux-amd64.tar.gz==856d248e3ea8a287d13e5f6afd086282 +https://storage.googleapis.com/golang/go1.14.2.linux-arm64.tar.gz==e5f79b403701e00f20d13f0ea561b064 +https://storage.googleapis.com/golang/go1.14.2.linux-armv6l.tar.gz==04467414e783b18de4278e9f24baf4be \ No newline at end of file diff --git a/files/build/versions/dockers/docker-base-bullseye-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-base-bullseye-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..59765e67b0b9 --- /dev/null +++ b/files/build/versions/dockers/docker-base-bullseye-sonic/versions-deb-bullseye @@ -0,0 +1,81 @@ +ca-certificates==20210119 +curl==7.74.0-1.3+deb11u1 +iproute2==5.10.0-4 +jq==1.6-2.1 +less==551-2 +libatomic1==10.2.1-6 +libbpf0==1:0.3-2 +libbrotli1==1.0.9-2+b2 +libbsd0==0.11.3-1 +libcap2==1:2.44-1 +libcap2-bin==1:2.44-1 +libcurl4==7.74.0-1.3+deb11u1 +libdaemon0==0.14-7.1 +libdbus-1-3==1.12.20-2 +libelf1==0.183-1 +libestr0==0.1.10-2.1+b1 +libexpat1==2.2.10-2+deb11u3 +libfastjson4==0.99.9-1 +libgdbm-compat4==1.19-2 +libgdbm6==1.19-2 +libjansson4==2.13.1-1.1 +libjemalloc2==5.2.1-3 +libjq1==1.6-2.1 +libk5crypto3==1.18.3-6+deb11u1+fips +libldap-2.4-2==2.4.57+dfsg-3+deb11u1 +liblognorm5==2.0.5-1.1 +liblua5.1-0==5.1.5-8.1+b3 +liblzf1==3.6-3 +libmd0==1.0.3-3 +libmnl0==1.0.4-3 +libmpdec3==2.5.1-1 +libncurses6==6.2+20201114-2 +libncursesw6==6.2+20201114-2 +libnghttp2-14==1.43.0-1 +libnorm1==1.5.9+dfsg-2 +libonig5==6.9.6-1.1 +libperl5.32==5.32.1-4+deb11u2 +libpgm-5.3-0==5.3.128~dfsg-2 +libprocps8==2:3.3.17-5 +libpsl5==0.21.0-1.2 +libpython3-stdlib==3.9.2-3 +libpython3.9-minimal==3.9.2-1 +libpython3.9-stdlib==3.9.2-1 +libreadline8==8.1-1 +librtmp1==2.4+20151223.gitfa8646d.1-2+b2 +libsasl2-2==2.1.27+dfsg-2.1+deb11u1 +libsasl2-modules-db==2.1.27+dfsg-2.1+deb11u1 +libsodium23==1.0.18-1 +libsqlite3-0==3.34.1-3 +libssh2-1==1.9.0-2 +libssl-dev==1.1.1k-1+deb11u1+fips +libwrap0==7.6.q-31 +libxtables12==1.8.7-1 +libzmq5==4.3.4-1 +lua-bitop==1.0.2-5 +lua-cjson==2.1.0+dfsg-2.1 +media-types==4.0.0 +net-tools==1.60+git20181103.0eebece-1 +openssl==1.1.1n-0+deb11u2 +perl==5.32.1-4+deb11u2 +perl-modules-5.32==5.32.1-4+deb11u2 +procps==2:3.3.17-5 +python-pip-whl==20.3.4-4+deb11u1 +python3==3.9.2-3 +python3-distutils==3.9.2-1 +python3-lib2to3==3.9.2-1 +python3-minimal==3.9.2-3 +python3-pip==20.3.4-4+deb11u1 +python3-pkg-resources==52.0.0-4 +python3-setuptools==52.0.0-4 +python3-wheel==0.34.2-1 +python3.9==3.9.2-1 +python3.9-minimal==3.9.2-1 +readline-common==8.1-1 +redis-tools==5:6.0.16-1+deb11u2 +rsyslog==8.2102.0-2+deb11u1 +socat==1.7.4.1-3 +symcrypt-openssl==0.1 +vim-common==2:8.2.2434-3+deb11u1 +vim-tiny==2:8.2.2434-3+deb11u1 +xxd==2:8.2.2434-3+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-base-bullseye-sonic/versions-py3 b/files/build/versions/dockers/docker-base-bullseye-sonic/versions-py3 new file mode 100644 index 000000000000..4cb64ea768d0 --- /dev/null +++ b/files/build/versions/dockers/docker-base-bullseye-sonic/versions-py3 @@ -0,0 +1,6 @@ +j2cli==0.3.10 +jinja2==3.1.2 +markupsafe==2.1.1 +supervisor==4.2.1 +supervisord-dependent-startup==1.4.0 +toposort==1.7 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-base-buster-sonic/versions-deb-buster b/files/build/versions/dockers/docker-base-buster-sonic/versions-deb-buster new file mode 100644 index 000000000000..93562f2b6be5 --- /dev/null +++ b/files/build/versions/dockers/docker-base-buster-sonic/versions-deb-buster @@ -0,0 +1,71 @@ +ca-certificates==20200601~deb10u2 +curl==7.64.0-4+deb10u2 +jq==1.5+dfsg-2+b1 +less==487-0.1+b1 +libatomic1==8.3.0-6 +libcurl4==7.64.0-4+deb10u2 +libdaemon0==0.14-7 +libdbus-1-3==1.12.20-0+deb10u1 +libestr0==0.1.10-2.1 +libexpat1==2.2.6-2+deb10u4 +libfastjson4==0.99.8-2 +libgdbm-compat4==1.18.1-4 +libgdbm6==1.18.1-4 +libgssapi-krb5-2==1.17-3+deb10u3 +libjansson4==2.12-1 +libjemalloc2==5.1.0-3 +libjq1==1.5+dfsg-2+b1 +libk5crypto3==1.17-3+deb10u3 +libkeyutils1==1.6-6 +libkrb5-3==1.17-3+deb10u3 +libkrb5support0==1.17-3+deb10u3 +libldap-2.4-2==2.4.47+dfsg-3+deb10u7 +libldap-common==2.4.47+dfsg-3+deb10u7 +liblognorm5==2.0.5-1 +liblua5.1-0==5.1.5-8.1+b2 +libmpdec2==2.4.2-2 +libncurses6==6.1+20181013-2+deb10u2 +libnghttp2-14==1.36.0-2+deb10u1 +libnorm1==1.5.8+dfsg2-1 +libonig5==6.9.1-1 +libperl5.28==5.28.1-6+deb10u1 +libpgm-5.2-0==5.2.122~dfsg-3 +libprocps7==2:3.3.15-2 +libpsl5==0.20.2-2 +libpython3-stdlib==3.7.3-1 +libpython3.7-minimal==3.7.3-2+deb10u3 +libpython3.7-stdlib==3.7.3-2+deb10u3 +libreadline7==7.0-5 +librtmp1==2.4+20151223.gitfa8646d.1-2 +libsasl2-2==2.1.27+dfsg-1+deb10u2 +libsasl2-modules-db==2.1.27+dfsg-1+deb10u2 +libsodium23==1.0.17-1 +libsqlite3-0==3.27.2-3+deb10u1 +libssh2-1==1.8.0-2.1 +libssl1.1==1.1.1n-0+deb10u2 +libwrap0==7.6.q-28 +libzmq5==4.3.1-4+deb10u2 +lsb-base==10.2019051400 +lua-bitop==1.0.2-5 +lua-cjson==2.1.0+dfsg-2.1 +mime-support==3.62 +net-tools==1.60+git20180626.aebd88e-1 +openssl==1.1.1n-0+deb10u2 +perl==5.28.1-6+deb10u1 +perl-modules-5.28==5.28.1-6+deb10u1 +procps==2:3.3.15-2 +python-pip-whl==18.1-5 +python3==3.7.3-1 +python3-distutils==3.7.3-1 +python3-lib2to3==3.7.3-1 +python3-minimal==3.7.3-1 +python3-pip==18.1-5 +python3.7==3.7.3-2+deb10u3 +python3.7-minimal==3.7.3-2+deb10u3 +readline-common==7.0-5 +redis-tools==5:6.0.6-1~bpo10+1 +rsyslog==8.1901.0-1+deb10u2 +socat==1.7.4.1-3 +vim-common==2:8.1.0875-5+deb10u2 +vim-tiny==2:8.1.0875-5+deb10u2 +xxd==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-base-buster-sonic/versions-py3 b/files/build/versions/dockers/docker-base-buster-sonic/versions-py3 new file mode 100644 index 000000000000..4cb64ea768d0 --- /dev/null +++ b/files/build/versions/dockers/docker-base-buster-sonic/versions-py3 @@ -0,0 +1,6 @@ +j2cli==0.3.10 +jinja2==3.1.2 +markupsafe==2.1.1 +supervisor==4.2.1 +supervisord-dependent-startup==1.4.0 +toposort==1.7 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-base-buster-sonic/versions-web b/files/build/versions/dockers/docker-base-buster-sonic/versions-web new file mode 100644 index 000000000000..d85bc54c0062 --- /dev/null +++ b/files/build/versions/dockers/docker-base-buster-sonic/versions-web @@ -0,0 +1 @@ +https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1~bpo10+1_amd64.deb?sv=2015-04-05&sr=b&sig=73zbmjkf3pi%2Bn0R8Hy7CWT2EUvOAyzM5aLYJWCLySGM%3D&se=2030-09-06T19%3A44%3A59Z&sp=r==2d58c3c3358290c04d5e0ba70f297f18 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..e408368687e8 --- /dev/null +++ b/files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-deb-bullseye @@ -0,0 +1,60 @@ +apt-utils==2.2.4 +binutils==2.35.2-2 +binutils-common==2.35.2-2 +binutils-x86-64-linux-gnu==2.35.2-2 +build-essential==12.9 +bzip2==1.0.8-4 +cpp==4:10.2.1-1 +cpp-10==10.2.1-6 +dpkg-dev==1.20.10 +g++==4:10.2.1-1 +g++-10==10.2.1-6 +gcc==4:10.2.1-1 +gcc-10==10.2.1-6 +libasan6==10.2.1-6 +libbinutils==2.35.2-2 +libc-dev-bin==2.31-13+deb11u3 +libc6-dev==2.31-13+deb11u3 +libcc1-0==10.2.1-6 +libcrypt-dev==1:4.4.18-4 +libctf-nobfd0==2.35.2-2 +libctf0==2.35.2-2 +libdpkg-perl==1.20.10 +libexpat1-dev==2.2.10-2+deb11u3 +libgcc-10-dev==10.2.1-6 +libgomp1==10.2.1-6 +libhiredis0.14==0.14.0-3~bpo9+1 +libisl23==0.23-1 +libitm1==10.2.1-6 +libjs-jquery==3.5.1+dfsg+~3.5.5-7 +libjs-sphinxdoc==3.4.3-2 +libjs-underscore==1.9.1~dfsg-3 +liblsan0==10.2.1-6 +libmpc3==1.2.0-1 +libmpfr6==4.1.0-3 +libnl-3-200==3.5.0-1 +libnl-cli-3-200==3.5.0-1 +libnl-genl-3-200==3.5.0-1 +libnl-nf-3-200==3.5.0-1 +libnl-route-3-200==3.5.0-1 +libnsl-dev==1.3.0-2 +libpython3-dev==3.9.2-3 +libpython3.9==3.9.2-1 +libpython3.9-dev==3.9.2-1 +libquadmath0==10.2.1-6 +libstdc++-10-dev==10.2.1-6 +libswsscommon==1.0.0 +libtirpc-dev==1.3.1-1 +libtsan0==10.2.1-6 +libubsan1==10.2.1-6 +libyang==1.0.73 +libyang-cpp==1.0.73 +linux-libc-dev==5.10.113-1 +make==4.3-4.1 +patch==2.7.6-7 +python3-dev==3.9.2-3 +python3-swsscommon==1.0.0 +python3-yang==1.0.73 +python3.9-dev==3.9.2-1 +xz-utils==5.2.5-2.1~deb11u1 +zlib1g-dev==1:1.2.11.dfsg-2+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-deb-bullseye-arm64 b/files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-deb-bullseye-arm64 new file mode 100644 index 000000000000..2a19b9b9d0a1 --- /dev/null +++ b/files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-deb-bullseye-arm64 @@ -0,0 +1,8 @@ +binutils-aarch64-linux-gnu==2.35.2-2 +icu-devtools==67.1-7 +libicu-dev==67.1-7 +libicu67==67.1-7 +libxml2==2.9.10+dfsg-6.7+deb11u2 +libxml2-dev==2.9.10+dfsg-6.7+deb11u2 +libxslt1-dev==1.1.34-4 +libxslt1.1==1.1.34-4 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-deb-bullseye-armhf b/files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-deb-bullseye-armhf new file mode 100644 index 000000000000..496ff3df2c3b --- /dev/null +++ b/files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-deb-bullseye-armhf @@ -0,0 +1,8 @@ +binutils-arm-linux-gnueabihf==2.35.2-2 +icu-devtools==67.1-7 +libicu-dev==67.1-7 +libicu67==67.1-7 +libxml2==2.9.10+dfsg-6.7+deb11u2 +libxml2-dev==2.9.10+dfsg-6.7+deb11u2 +libxslt1-dev==1.1.34-4 +libxslt1.1==1.1.34-4 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-py3 b/files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-py3 new file mode 100644 index 000000000000..bb197b61f1bb --- /dev/null +++ b/files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-py3 @@ -0,0 +1,15 @@ +bitarray==1.5.3 +ijson==2.6.1 +ipaddress==1.0.23 +jsondiff==2.0.0 +lxml==4.6.5 +natsort==6.2.1 +netaddr==0.8.0 +pyang==2.5.3 +pyangbind==0.8.1 +pyyaml==5.4.1 +redis==3.5.3 +redis-dump-load==1.1 +regex==2022.4.24 +six==1.16.0 +xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-buster-sonic/versions-deb-buster b/files/build/versions/dockers/docker-config-engine-buster-sonic/versions-deb-buster new file mode 100644 index 000000000000..506f92bc40fc --- /dev/null +++ b/files/build/versions/dockers/docker-config-engine-buster-sonic/versions-deb-buster @@ -0,0 +1,54 @@ +apt-utils==1.8.2.3 +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +build-essential==12.6 +bzip2==1.0.6-9.2~deb10u1 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +dh-python==3.20190308 +dpkg-dev==1.19.8 +g++==4:8.3.0-1 +g++-8==8.3.0-6 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +libapt-inst2.0==1.8.2.3 +libasan5==8.3.0-6 +libbinutils==2.31.1-16 +libc-dev-bin==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libcc1-0==8.3.0-6 +libdpkg-perl==1.19.8 +libexpat1-dev==2.2.6-2+deb10u4 +libgcc-8-dev==8.3.0-6 +libgomp1==8.3.0-6 +libhiredis0.14==0.14.0-3~bpo9+1 +libisl19==0.20-2 +libitm1==8.3.0-6 +liblsan0==8.3.0-6 +libmpc3==1.1.0-1 +libmpfr6==4.0.2-1 +libmpx2==8.3.0-6 +libnl-3-200==3.5.0-1 +libnl-cli-3-200==3.5.0-1 +libnl-genl-3-200==3.5.0-1 +libnl-nf-3-200==3.5.0-1 +libnl-route-3-200==3.5.0-1 +libpython3-dev==3.7.3-1 +libpython3.7==3.7.3-2+deb10u3 +libpython3.7-dev==3.7.3-2+deb10u3 +libquadmath0==8.3.0-6 +libstdc++-8-dev==8.3.0-6 +libswsscommon==1.0.0 +libtsan0==8.3.0-6 +libubsan1==8.3.0-6 +libyang==1.0.73 +libyang-cpp==1.0.73 +linux-libc-dev==4.19.235-1 +make==4.2.1-1.2 +patch==2.7.6-3+deb10u1 +python3-dev==3.7.3-1 +python3-swsscommon==1.0.0 +python3-yang==1.0.73 +python3.7-dev==3.7.3-2+deb10u3 +xz-utils==5.2.4-1+deb10u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-buster-sonic/versions-deb-buster-arm64 b/files/build/versions/dockers/docker-config-engine-buster-sonic/versions-deb-buster-arm64 new file mode 100644 index 000000000000..1f699501031d --- /dev/null +++ b/files/build/versions/dockers/docker-config-engine-buster-sonic/versions-deb-buster-arm64 @@ -0,0 +1,11 @@ +binutils-aarch64-linux-gnu==2.31.1-16 +icu-devtools==63.1-6+deb10u3 +libglib2.0-0==2.58.3-2+deb10u3 +libicu-dev==63.1-6+deb10u3 +libicu63==63.1-6+deb10u3 +libxml2==2.9.4+dfsg1-7+deb10u4 +libxml2-dev==2.9.4+dfsg1-7+deb10u4 +libxslt1-dev==1.1.32-2.2~deb10u1 +libxslt1.1==1.1.32-2.2~deb10u1 +pkg-config==0.29-6 +zlib1g-dev==1:1.2.11.dfsg-1+deb10u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-buster-sonic/versions-deb-buster-armhf b/files/build/versions/dockers/docker-config-engine-buster-sonic/versions-deb-buster-armhf new file mode 100644 index 000000000000..967b10df80c8 --- /dev/null +++ b/files/build/versions/dockers/docker-config-engine-buster-sonic/versions-deb-buster-armhf @@ -0,0 +1,11 @@ +binutils-arm-linux-gnueabihf==2.31.1-16 +icu-devtools==63.1-6+deb10u3 +libglib2.0-0==2.58.3-2+deb10u3 +libicu-dev==63.1-6+deb10u3 +libicu63==63.1-6+deb10u3 +libxml2==2.9.4+dfsg1-7+deb10u4 +libxml2-dev==2.9.4+dfsg1-7+deb10u4 +libxslt1-dev==1.1.32-2.2~deb10u1 +libxslt1.1==1.1.32-2.2~deb10u1 +pkg-config==0.29-6 +zlib1g-dev==1:1.2.11.dfsg-1+deb10u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-buster-sonic/versions-py3 b/files/build/versions/dockers/docker-config-engine-buster-sonic/versions-py3 new file mode 100644 index 000000000000..bb197b61f1bb --- /dev/null +++ b/files/build/versions/dockers/docker-config-engine-buster-sonic/versions-py3 @@ -0,0 +1,15 @@ +bitarray==1.5.3 +ijson==2.6.1 +ipaddress==1.0.23 +jsondiff==2.0.0 +lxml==4.6.5 +natsort==6.2.1 +netaddr==0.8.0 +pyang==2.5.3 +pyangbind==0.8.1 +pyyaml==5.4.1 +redis==3.5.3 +redis-dump-load==1.1 +regex==2022.4.24 +six==1.16.0 +xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-database-dbg-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-database-dbg-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..52deb31471ee --- /dev/null +++ b/files/build/versions/dockers/docker-database-dbg-sonic/versions-deb-bullseye @@ -0,0 +1,25 @@ +gdb==10.1-1.7 +gdbserver==10.1-1.7 +libbabeltrace1==1.5.8-1+b3 +libboost-regex1.74.0==1.74.0-9 +libcbor0==0.5.0+dfsg-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libfido2-1==1.6.0-2 +libglib2.0-0==2.66.8-1 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu67==67.1-7 +libipt2==2.0.3-1 +libmpfr6==4.1.0-3 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libunwind8==1.3.2-2 +openssh-client==1:8.4p1-5 +sshpass==1.09-1+b1 +strace==5.10-1 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-database-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-database-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..7fdb3078b605 --- /dev/null +++ b/files/build/versions/dockers/docker-database-sonic/versions-deb-bullseye @@ -0,0 +1 @@ +redis-server==5:6.0.16-1+deb11u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-dhcp-relay-dbg-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-dhcp-relay-dbg-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..753b342d65c0 --- /dev/null +++ b/files/build/versions/dockers/docker-dhcp-relay-dbg-sonic/versions-deb-bullseye @@ -0,0 +1,28 @@ +gdb==10.1-1.7 +gdbserver==10.1-1.7 +isc-dhcp-relay-dbgsym==4.4.1-2.3 +libbabeltrace1==1.5.8-1+b3 +libboost-regex1.74.0==1.74.0-9 +libcbor0==0.5.0+dfsg-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libfido2-1==1.6.0-2 +libglib2.0-0==2.66.8-1 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu67==67.1-7 +libipt2==2.0.3-1 +libmpfr6==4.1.0-3 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libunwind8==1.3.2-2 +openssh-client==1:8.4p1-5 +sonic-dhcp6relay-dbgsym==1.0.0-0 +sonic-dhcpmon-dbgsym==1.0.0-0 +sshpass==1.09-1+b1 +strace==5.10-1 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-dhcp-relay-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-dhcp-relay-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..b003e4df5dd2 --- /dev/null +++ b/files/build/versions/dockers/docker-dhcp-relay-sonic/versions-deb-bullseye @@ -0,0 +1,11 @@ +isc-dhcp-relay==4.4.1-2.3 +libboost-thread1.74.0==1.74.0-9 +libdns-export1110==1:9.11.19+dfsg-2.1 +libevent-2.1-7==2.1.12-stable-1 +libexplain51==1.4.D001-11 +libirs-export161==1:9.11.19+dfsg-2.1 +libisc-export1105==1:9.11.19+dfsg-2.1 +libisccfg-export163==1:9.11.19+dfsg-2.1 +lsof==4.93.2+dfsg-1.1 +sonic-dhcp6relay==1.0.0-0 +sonic-dhcpmon==1.0.0-0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-fpm-frr-dbg-sonic/versions-deb-buster b/files/build/versions/dockers/docker-fpm-frr-dbg-sonic/versions-deb-buster new file mode 100644 index 000000000000..1f99b46e831f --- /dev/null +++ b/files/build/versions/dockers/docker-fpm-frr-dbg-sonic/versions-deb-buster @@ -0,0 +1,20 @@ +frr-dbgsym==8.2.2-sonic-0 +frr-snmp-dbgsym==8.2.2-sonic-0 +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libswsscommon-dbg==1.0.0 +libyang2-dbgsym==2.0.112-6 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +swss-dbg==1.0.0 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-fpm-frr-sonic/versions-deb-buster b/files/build/versions/dockers/docker-fpm-frr-sonic/versions-deb-buster new file mode 100644 index 000000000000..8d85cfdfba9b --- /dev/null +++ b/files/build/versions/dockers/docker-fpm-frr-sonic/versions-deb-buster @@ -0,0 +1,20 @@ +cron==3.0pl1-134+deb10u1 +frr==8.2.2-sonic-0 +frr-snmp==8.2.2-sonic-0 +libc-ares2==1.14.0-1+deb10u1 +libjson-c3==0.12.1+ds-2+deb10u1 +libmariadb3==1:10.3.34-0+deb10u1 +libpci3==1:3.5.2-1 +libpcre2-8-0==10.32-5 +libpopt0==1.16-12 +libsensors-config==1:3.5.0-3 +libsensors5==1:3.5.0-3 +libsnmp-base==5.7.3+dfsg-5+deb10u2 +libsnmp30==5.7.3+dfsg-5+deb10u2 +libunwind8==1.2.1-10~deb10u1 +libyang2==2.0.112-6 +logrotate==3.14.0-4 +lsof==4.91+dfsg-1 +mariadb-common==1:10.3.34-0+deb10u1 +mysql-common==5.8+1.0.5 +sensible-utils==0.0.12 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-fpm-frr-sonic/versions-py3 b/files/build/versions/dockers/docker-fpm-frr-sonic/versions-py3 new file mode 100644 index 000000000000..ff7826d683d4 --- /dev/null +++ b/files/build/versions/dockers/docker-fpm-frr-sonic/versions-py3 @@ -0,0 +1 @@ +zipp==1.2.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-gbsyncd-credo-dbg-sonic/versions-deb-buster b/files/build/versions/dockers/docker-gbsyncd-credo-dbg-sonic/versions-deb-buster new file mode 100644 index 000000000000..f284636434e0 --- /dev/null +++ b/files/build/versions/dockers/docker-gbsyncd-credo-dbg-sonic/versions-deb-buster @@ -0,0 +1,18 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-gbsyncd-credo-sonic/versions-deb-buster b/files/build/versions/dockers/docker-gbsyncd-credo-sonic/versions-deb-buster new file mode 100644 index 000000000000..2f830c84a5b0 --- /dev/null +++ b/files/build/versions/dockers/docker-gbsyncd-credo-sonic/versions-deb-buster @@ -0,0 +1,5 @@ +libsaicredo==0.7.5 +libsaicredo-owl==0.7.5 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +syncd==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-lldp-dbg-sonic/versions-deb-buster b/files/build/versions/dockers/docker-lldp-dbg-sonic/versions-deb-buster new file mode 100644 index 000000000000..14a40f9f092a --- /dev/null +++ b/files/build/versions/dockers/docker-lldp-dbg-sonic/versions-deb-buster @@ -0,0 +1,18 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +lldpd-dbgsym==1.0.4-1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-lldp-sonic/versions-deb-buster b/files/build/versions/dockers/docker-lldp-sonic/versions-deb-buster new file mode 100644 index 000000000000..68547eef8951 --- /dev/null +++ b/files/build/versions/dockers/docker-lldp-sonic/versions-deb-buster @@ -0,0 +1,13 @@ +libbsd0==0.9.1-2+deb10u1 +libevent-2.1-6==2.1.8-stable-4 +libicu63==63.1-6+deb10u3 +libmariadb3==1:10.3.34-0+deb10u1 +libpci3==1:3.5.2-1 +libsensors-config==1:3.5.0-3 +libsensors5==1:3.5.0-3 +libsnmp-base==5.7.3+dfsg-5 +libsnmp30==5.7.3+dfsg-5 +libxml2==2.9.4+dfsg1-7+deb10u4 +lldpd==1.0.4-1 +mariadb-common==1:10.3.34-0+deb10u1 +mysql-common==5.8+1.0.5 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-macsec-dbg-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-macsec-dbg-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..65487543048b --- /dev/null +++ b/files/build/versions/dockers/docker-macsec-dbg-sonic/versions-deb-bullseye @@ -0,0 +1,27 @@ +gdb==10.1-1.7 +gdbserver==10.1-1.7 +libbabeltrace1==1.5.8-1+b3 +libboost-regex1.74.0==1.74.0-9 +libcbor0==0.5.0+dfsg-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libfido2-1==1.6.0-2 +libglib2.0-0==2.66.8-1 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu67==67.1-7 +libipt2==2.0.3-1 +libmpfr6==4.1.0-3 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libunwind8==1.3.2-2 +openssh-client==1:8.4p1-5 +sshpass==1.09-1+b1 +strace==5.10-1 +swss-dbg==1.0.0 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 +wpasupplicant-dbgsym==2:2.9.0-14 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-macsec-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-macsec-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..3255ccc8aab3 --- /dev/null +++ b/files/build/versions/dockers/docker-macsec-sonic/versions-deb-bullseye @@ -0,0 +1,7 @@ +libpcsclite1==1.9.1-1 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libteam5==1.30-1 +libteamdctl0==1.30-1 +swss==1.0.0 +wpasupplicant==2:2.9.0-14 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-mux-dbg-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-mux-dbg-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..85344f37a79b --- /dev/null +++ b/files/build/versions/dockers/docker-mux-dbg-sonic/versions-deb-bullseye @@ -0,0 +1,24 @@ +gdb==10.1-1.7 +gdbserver==10.1-1.7 +libbabeltrace1==1.5.8-1+b3 +libcbor0==0.5.0+dfsg-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libfido2-1==1.6.0-2 +libglib2.0-0==2.66.8-1 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0.3-1 +libmpfr6==4.1.0-3 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libunwind8==1.3.2-2 +openssh-client==1:8.4p1-5 +sonic-linkmgrd-dbgsym==1.0.0-1 +sshpass==1.09-1+b1 +strace==5.10-1 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-mux-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-mux-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..dadee2925b69 --- /dev/null +++ b/files/build/versions/dockers/docker-mux-sonic/versions-deb-bullseye @@ -0,0 +1,7 @@ +libboost-filesystem1.74.0==1.74.0-9 +libboost-log1.74.0==1.74.0-9 +libboost-program-options1.74.0==1.74.0-9 +libboost-regex1.74.0==1.74.0-9 +libboost-thread1.74.0==1.74.0-9 +libicu67==67.1-7 +sonic-linkmgrd==1.0.0-1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-nat-dbg-sonic/versions-deb-buster b/files/build/versions/dockers/docker-nat-dbg-sonic/versions-deb-buster new file mode 100644 index 000000000000..bec98399ed74 --- /dev/null +++ b/files/build/versions/dockers/docker-nat-dbg-sonic/versions-deb-buster @@ -0,0 +1,19 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +swss-dbg==1.0.0 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-nat-sonic/versions-deb-buster b/files/build/versions/dockers/docker-nat-sonic/versions-deb-buster new file mode 100644 index 000000000000..eb909f6a3720 --- /dev/null +++ b/files/build/versions/dockers/docker-nat-sonic/versions-deb-buster @@ -0,0 +1,9 @@ +bridge-utils==1.6-2 +conntrack==1:1.4.5-2 +iptables==1.8.2-4 +libip4tc0==1.8.2-4 +libip6tc0==1.8.2-4 +libiptc0==1.8.2-4 +libnetfilter-conntrack3==1.0.7-1 +libnfnetlink0==1.0.1-3+b1 +libnftnl11==1.1.2-2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-orchagent-dbg-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-orchagent-dbg-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..eabae8f57db9 --- /dev/null +++ b/files/build/versions/dockers/docker-orchagent-dbg-sonic/versions-deb-bullseye @@ -0,0 +1,27 @@ +gdb==10.1-1.7 +gdbserver==10.1-1.7 +libbabeltrace1==1.5.8-1+b3 +libboost-regex1.74.0==1.74.0-9 +libcbor0==0.5.0+dfsg-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libfido2-1==1.6.0-2 +libglib2.0-0==2.66.8-1 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu67==67.1-7 +libipt2==2.0.3-1 +libmpfr6==4.1.0-3 +libsairedis-dbg==1.0.0 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libunwind8==1.3.2-2 +openssh-client==1:8.4p1-5 +sshpass==1.09-1+b1 +strace==5.10-1 +swss-dbg==1.0.0 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-orchagent-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-orchagent-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..db227aa1656c --- /dev/null +++ b/files/build/versions/dockers/docker-orchagent-sonic/versions-deb-bullseye @@ -0,0 +1,60 @@ +arping==2.21-2 +binutils==2.35.2-2 +binutils-common==2.35.2-2 +binutils-x86-64-linux-gnu==2.35.2-2 +bridge-utils==1.7-1 +build-essential==12.9 +bzip2==1.0.8-4 +conntrack==1:1.4.6-2 +cpp==4:10.2.1-1 +cpp-10==10.2.1-6 +g++==4:10.2.1-1 +g++-10==10.2.1-6 +gcc==4:10.2.1-1 +gcc-10==10.2.1-6 +ifupdown==0.8.36 +libasan6==10.2.1-6 +libbinutils==2.35.2-2 +libc-dev-bin==2.31-13+deb11u3 +libc6-dev==2.31-13+deb11u3 +libcc1-0==10.2.1-6 +libcrypt-dev==1:4.4.18-4 +libctf-nobfd0==2.35.2-2 +libctf0==2.35.2-2 +libdpkg-perl==1.20.10 +libexpat1-dev==2.2.10-2+deb11u3 +libgcc-10-dev==10.2.1-6 +libgomp1==10.2.1-6 +libisl23==0.23-1 +libitm1==10.2.1-6 +libjs-sphinxdoc==3.4.3-2 +libjs-underscore==1.9.1~dfsg-3 +libkmod2==28-1 +liblsan0==10.2.1-6 +libmpc3==1.2.0-1 +libmpfr6==4.1.0-3 +libnet1==1.1.6+dfsg-3.1 +libnetfilter-conntrack3==1.0.8-3 +libnfnetlink0==1.0.1-3+b1 +libnsl-dev==1.3.0-2 +libpcap0.8==1.10.0-2 +libpci3==1:3.7.0-5 +libpython3-dev==3.9.2-3 +libpython3.9-dev==3.9.2-1 +libquadmath0==10.2.1-6 +libstdc++-10-dev==10.2.1-6 +libtirpc-dev==1.3.1-1 +libtsan0==10.2.1-6 +libubsan1==10.2.1-6 +linux-libc-dev==5.10.113-1 +make==4.3-4.1 +ndisc6==1.0.4-2 +ndppd==0.2.5-6 +patch==2.7.6-7 +pci.ids==0.0~2021.02.08-1 +pciutils==1:3.7.0-5 +python3-dev==3.9.2-3 +python3.9-dev==3.9.2-1 +tcpdump==4.99.0-2 +xz-utils==5.2.5-2.1~deb11u1 +zlib1g-dev==1:1.2.11.dfsg-2+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-orchagent-sonic/versions-deb-bullseye-arm64 b/files/build/versions/dockers/docker-orchagent-sonic/versions-deb-bullseye-arm64 new file mode 100644 index 000000000000..5d5406b4dcd4 --- /dev/null +++ b/files/build/versions/dockers/docker-orchagent-sonic/versions-deb-bullseye-arm64 @@ -0,0 +1,2 @@ +binutils-aarch64-linux-gnu==2.35.2-2 +iputils-ping==3:20210202-1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-orchagent-sonic/versions-deb-bullseye-armhf b/files/build/versions/dockers/docker-orchagent-sonic/versions-deb-bullseye-armhf new file mode 100644 index 000000000000..b4c60dd13321 --- /dev/null +++ b/files/build/versions/dockers/docker-orchagent-sonic/versions-deb-bullseye-armhf @@ -0,0 +1,2 @@ +binutils-arm-linux-gnueabihf==2.35.2-2 +iputils-ping==3:20210202-1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-orchagent-sonic/versions-py3 b/files/build/versions/dockers/docker-orchagent-sonic/versions-py3 new file mode 100644 index 000000000000..aa6d42d04fba --- /dev/null +++ b/files/build/versions/dockers/docker-orchagent-sonic/versions-py3 @@ -0,0 +1,2 @@ +netifaces==0.10.9 +pyroute2==0.5.14 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-platform-monitor-dbg-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-platform-monitor-dbg-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..bf171f1bc558 --- /dev/null +++ b/files/build/versions/dockers/docker-platform-monitor-dbg-sonic/versions-deb-bullseye @@ -0,0 +1,26 @@ +gdb==10.1-1.7 +gdbserver==10.1-1.7 +libbabeltrace1==1.5.8-1+b3 +libboost-regex1.74.0==1.74.0-9 +libcbor0==0.5.0+dfsg-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libfido2-1==1.6.0-2 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0.3-1 +libmpfr6==4.1.0-3 +libsensors5-dbgsym==1:3.6.0-7 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libunwind8==1.3.2-2 +lm-sensors-dbgsym==1:3.6.0-7 +openssh-client==1:8.4p1-5 +sensord-dbgsym==1:3.6.0-7 +sshpass==1.09-1+b1 +strace==5.10-1 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-platform-monitor-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-platform-monitor-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..e5715d872a7e --- /dev/null +++ b/files/build/versions/dockers/docker-platform-monitor-sonic/versions-deb-bullseye @@ -0,0 +1,116 @@ +applibs==1.mlnx.4.5.1500 +applibs-dev==1.mlnx.4.5.1500 +binutils==2.35.2-2 +binutils-common==2.35.2-2 +binutils-x86-64-linux-gnu==2.35.2-2 +build-essential==12.9 +bzip2==1.0.8-4 +cpp==4:10.2.1-1 +cpp-10==10.2.1-6 +dmidecode==3.3-2 +ethtool==1:5.9-1 +fancontrol==1:3.6.0-7 +fontconfig==2.13.1-4.2 +fontconfig-config==2.13.1-4.2 +fonts-dejavu-core==2.37-2 +freeipmi-common==1.6.6-4+deb11u1 +g++==4:10.2.1-1 +g++-10==10.2.1-6 +gcc==4:10.2.1-1 +gcc-10==10.2.1-6 +i2c-tools==4.2-1+b1 +ipmitool==1.8.18-10.1 +libasan6==10.2.1-6 +libbinutils==2.35.2-2 +libc-dev-bin==2.31-13+deb11u3 +libc6-dev==2.31-13+deb11u3 +libcairo2==1.16.0-5 +libcc1-0==10.2.1-6 +libcrypt-dev==1:4.4.18-4 +libctf-nobfd0==2.35.2-2 +libctf0==2.35.2-2 +libdatrie1==0.2.13-1 +libdbi1==0.9.0-6 +libdpkg-perl==1.20.10 +libexpat1-dev==2.2.10-2+deb11u3 +libfontconfig1==2.13.1-4.2 +libfreeipmi17==1.6.6-4+deb11u1 +libfreetype6==2.10.4+dfsg-1 +libfribidi0==1.0.8-2 +libgcc-10-dev==10.2.1-6 +libglib2.0-0==2.66.8-1 +libgomp1==10.2.1-6 +libgraphite2-3==1.3.14-1 +libharfbuzz0b==2.7.4-1 +libi2c0==4.2-1+b1 +libicu67==67.1-7 +libisl23==0.23-1 +libitm1==10.2.1-6 +libjs-sphinxdoc==3.4.3-2 +libjs-underscore==1.9.1~dfsg-3 +libkmod2==28-1 +liblsan0==10.2.1-6 +libmpc3==1.2.0-1 +libmpfr6==4.1.0-3 +libnsl-dev==1.3.0-2 +libpango-1.0-0==1.46.2-3 +libpangocairo-1.0-0==1.46.2-3 +libpangoft2-1.0-0==1.46.2-3 +libpci3==1:3.7.0-5 +libpixman-1-0==0.40.0-1 +libpng16-16==1.6.37-3 +libpython3-dev==3.9.2-3 +libpython3.9-dev==3.9.2-1 +libquadmath0==10.2.1-6 +librrd-dev==1.7.2-3+b7 +librrd8==1.7.2-3+b7 +libsensors-config==1:3.6.0-7 +libsensors5==1:3.6.0-7 +libstdc++-10-dev==10.2.1-6 +libthai-data==0.1.28-3 +libthai0==0.1.28-3 +libtirpc-dev==1.3.1-1 +libtsan0==10.2.1-6 +libubsan1==10.2.1-6 +libx11-6==2:1.7.2-1 +libx11-data==2:1.7.2-1 +libxau6==1:1.0.9-1 +libxcb-render0==1.14-3 +libxcb-shm0==1.14-3 +libxcb1==1.14-3 +libxdmcp6==1:1.1.2-3 +libxext6==2:1.3.3-1.1 +libxml2==2.9.10+dfsg-6.7+deb11u2 +libxrender1==1:0.9.10-1 +linux-libc-dev==5.10.113-1 +lm-sensors==1:3.6.0-7 +make==4.3-4.1 +patch==2.7.6-7 +pci.ids==0.0~2021.02.08-1 +psmisc==23.4-2 +python-sdk-api==1.mlnx.4.5.1500 +python3-attr==20.3.0-1 +python3-dev==3.9.2-3 +python3-importlib-metadata==1.6.0-2 +python3-jsonschema==3.2.0-3 +python3-more-itertools==4.2.0-3 +python3-pkg-resources==52.0.0-4 +python3-pyrsistent==0.15.5-1+b3 +python3-setuptools==52.0.0-4 +python3-six==1.16.0-2 +python3-smbus==4.2-1+b1 +python3-zipp==1.0.0-3 +python3.9-dev==3.9.2-1 +rrdtool==1.7.2-3+b7 +sensible-utils==0.0.14 +sensord==1:3.6.0-7 +sx-complib==1.mlnx.4.5.1500 +sx-complib-dev==1.mlnx.4.5.1500 +sx-gen-utils==1.mlnx.4.5.1500 +sx-gen-utils-dev==1.mlnx.4.5.1500 +sxd-libs==1.mlnx.4.5.1500 +sxd-libs-dev==1.mlnx.4.5.1500 +ucf==3.0043 +udev==247.3-7 +xz-utils==5.2.5-2.1~deb11u1 +zlib1g-dev==1:1.2.11.dfsg-2+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-platform-monitor-sonic/versions-deb-bullseye-arm64 b/files/build/versions/dockers/docker-platform-monitor-sonic/versions-deb-bullseye-arm64 new file mode 100644 index 000000000000..8774e0ea85bd --- /dev/null +++ b/files/build/versions/dockers/docker-platform-monitor-sonic/versions-deb-bullseye-arm64 @@ -0,0 +1 @@ +binutils-aarch64-linux-gnu==2.35.2-2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-platform-monitor-sonic/versions-deb-bullseye-armhf b/files/build/versions/dockers/docker-platform-monitor-sonic/versions-deb-bullseye-armhf new file mode 100644 index 000000000000..6571b460660f --- /dev/null +++ b/files/build/versions/dockers/docker-platform-monitor-sonic/versions-deb-bullseye-armhf @@ -0,0 +1 @@ +binutils-arm-linux-gnueabihf==2.35.2-2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-platform-monitor-sonic/versions-py3 b/files/build/versions/dockers/docker-platform-monitor-sonic/versions-py3 new file mode 100644 index 000000000000..dd2f1421b9c2 --- /dev/null +++ b/files/build/versions/dockers/docker-platform-monitor-sonic/versions-py3 @@ -0,0 +1,11 @@ +attrs==20.3.0 +grpcio==1.39.0 +grpcio-tools==1.39.0 +importlib-metadata==1.6.0 +jsonschema==2.6.0 +more-itertools==4.2.0 +protobuf==3.20.1 +pyrsistent==0.15.5 +python_sdk_api==4.5.1500 +thrift==0.13.0 +zipp==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-router-advertiser-dbg-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-router-advertiser-dbg-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..52deb31471ee --- /dev/null +++ b/files/build/versions/dockers/docker-router-advertiser-dbg-sonic/versions-deb-bullseye @@ -0,0 +1,25 @@ +gdb==10.1-1.7 +gdbserver==10.1-1.7 +libbabeltrace1==1.5.8-1+b3 +libboost-regex1.74.0==1.74.0-9 +libcbor0==0.5.0+dfsg-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libfido2-1==1.6.0-2 +libglib2.0-0==2.66.8-1 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu67==67.1-7 +libipt2==2.0.3-1 +libmpfr6==4.1.0-3 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libunwind8==1.3.2-2 +openssh-client==1:8.4p1-5 +sshpass==1.09-1+b1 +strace==5.10-1 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-router-advertiser-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-router-advertiser-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..2c13745fb3cb --- /dev/null +++ b/files/build/versions/dockers/docker-router-advertiser-sonic/versions-deb-bullseye @@ -0,0 +1 @@ +radvd==1:2.18-3 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sflow-dbg-sonic/versions-deb-buster b/files/build/versions/dockers/docker-sflow-dbg-sonic/versions-deb-buster new file mode 100644 index 000000000000..f284636434e0 --- /dev/null +++ b/files/build/versions/dockers/docker-sflow-dbg-sonic/versions-deb-buster @@ -0,0 +1,18 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sflow-sonic/versions-deb-buster b/files/build/versions/dockers/docker-sflow-sonic/versions-deb-buster new file mode 100644 index 000000000000..7a3fbb3c9366 --- /dev/null +++ b/files/build/versions/dockers/docker-sflow-sonic/versions-deb-buster @@ -0,0 +1,4 @@ +dmidecode==3.2-1 +hsflowd==2.0.34-1 +psample==1.1-1 +sflowtool==5.04 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-snmp-dbg-sonic/versions-deb-buster b/files/build/versions/dockers/docker-snmp-dbg-sonic/versions-deb-buster new file mode 100644 index 000000000000..0e3657087650 --- /dev/null +++ b/files/build/versions/dockers/docker-snmp-dbg-sonic/versions-deb-buster @@ -0,0 +1,21 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libsnmp30-dbg==5.7.3+dfsg-5 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +snmp-dbgsym==5.7.3+dfsg-5 +snmpd-dbgsym==5.7.3+dfsg-5 +sshpass==1.06-1 +strace==4.26-0.2 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-snmp-sonic/versions-deb-buster b/files/build/versions/dockers/docker-snmp-sonic/versions-deb-buster new file mode 100644 index 000000000000..904329d0b3d7 --- /dev/null +++ b/files/build/versions/dockers/docker-snmp-sonic/versions-deb-buster @@ -0,0 +1,46 @@ +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +dh-python==3.20190308 +freeipmi-common==1.6.3-1.1 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +ipmitool==1.8.18-6+deb10u1 +libasan5==8.3.0-6 +libbinutils==2.31.1-16 +libc-dev-bin==2.28-10+deb10u1 +libc-l10n==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libcc1-0==8.3.0-6 +libexpat1-dev==2.2.6-2+deb10u4 +libfreeipmi17==1.6.3-1.1 +libgcc-8-dev==8.3.0-6 +libgomp1==8.3.0-6 +libisl19==0.20-2 +libitm1==8.3.0-6 +liblsan0==8.3.0-6 +libmariadb3==1:10.3.34-0+deb10u1 +libmpc3==1.1.0-1 +libmpfr6==4.0.2-1 +libmpx2==8.3.0-6 +libpci3==1:3.5.2-1 +libpython3-dev==3.7.3-1 +libpython3.7-dev==3.7.3-2+deb10u3 +libquadmath0==8.3.0-6 +libsensors-config==1:3.5.0-3 +libsensors5==1:3.5.0-3 +libsnmp-base==5.7.3+dfsg-5 +libsnmp30==5.7.3+dfsg-5 +libtsan0==8.3.0-6 +libubsan1==8.3.0-6 +linux-libc-dev==4.19.235-1 +locales==2.28-10+deb10u1 +make==4.2.1-1.2 +mariadb-common==1:10.3.34-0+deb10u1 +mysql-common==5.8+1.0.5 +python3-dev==3.7.3-1 +python3.7-dev==3.7.3-2+deb10u3 +snmp==5.7.3+dfsg-5 +snmpd==5.7.3+dfsg-5 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-snmp-sonic/versions-deb-buster-arm64 b/files/build/versions/dockers/docker-snmp-sonic/versions-deb-buster-arm64 new file mode 100644 index 000000000000..76a3c3a88288 --- /dev/null +++ b/files/build/versions/dockers/docker-snmp-sonic/versions-deb-buster-arm64 @@ -0,0 +1 @@ +binutils-aarch64-linux-gnu==2.31.1-16 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-snmp-sonic/versions-deb-buster-armhf b/files/build/versions/dockers/docker-snmp-sonic/versions-deb-buster-armhf new file mode 100644 index 000000000000..568b8b43bc13 --- /dev/null +++ b/files/build/versions/dockers/docker-snmp-sonic/versions-deb-buster-armhf @@ -0,0 +1 @@ +binutils-arm-linux-gnueabihf==2.31.1-16 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-snmp-sonic/versions-py3 b/files/build/versions/dockers/docker-snmp-sonic/versions-py3 new file mode 100644 index 000000000000..ab2b43ab082f --- /dev/null +++ b/files/build/versions/dockers/docker-snmp-sonic/versions-py3 @@ -0,0 +1,4 @@ +hiredis==2.0.0 +psutil==5.9.1 +python-arptable==0.0.2 +smbus==1.1.post2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-mgmt-framework-dbg-sonic/versions-deb-buster b/files/build/versions/dockers/docker-sonic-mgmt-framework-dbg-sonic/versions-deb-buster new file mode 100644 index 000000000000..67650b2f26fd --- /dev/null +++ b/files/build/versions/dockers/docker-sonic-mgmt-framework-dbg-sonic/versions-deb-buster @@ -0,0 +1,19 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sonic-mgmt-framework-dbg==1.0-01 +sshpass==1.06-1 +strace==4.26-0.2 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-mgmt-framework-sonic/versions-deb-buster b/files/build/versions/dockers/docker-sonic-mgmt-framework-sonic/versions-deb-buster new file mode 100644 index 000000000000..7e61907c4b23 --- /dev/null +++ b/files/build/versions/dockers/docker-sonic-mgmt-framework-sonic/versions-deb-buster @@ -0,0 +1,7 @@ +libcjson-dev==1.7.10-1.1+deb10u1 +libcjson1==1.7.10-1.1+deb10u1 +libcurl3-gnutls==7.64.0-4+deb10u2 +libicu63==63.1-6+deb10u3 +libxml2==2.9.4+dfsg1-7+deb10u4 +sonic-mgmt-common==1.0.0 +sonic-mgmt-framework==1.0-01 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-mgmt-framework-sonic/versions-py3 b/files/build/versions/dockers/docker-sonic-mgmt-framework-sonic/versions-py3 new file mode 100644 index 000000000000..fd902f81d4f9 --- /dev/null +++ b/files/build/versions/dockers/docker-sonic-mgmt-framework-sonic/versions-py3 @@ -0,0 +1,26 @@ +attrs==21.4.0 +certifi==2017.4.17 +charset-normalizer==2.0.12 +click==8.1.3 +clickclick==20.10.2 +connexion==2.7.0 +flask==2.1.2 +grpcio==1.46.3 +grpcio-tools==1.20.0 +idna==3.3 +importlib-metadata==4.11.4 +importlib-resources==5.7.1 +inflection==0.5.1 +itsdangerous==2.1.2 +jsonschema==4.6.0 +openapi-schema-validator==0.2.3 +openapi-spec-validator==0.4.0 +protobuf==4.21.1 +pyrsistent==0.18.1 +python-dateutil==2.6.0 +requests==2.27.1 +six==1.11.0 +typing_extensions==4.2.0 +urllib3==1.26.5 +werkzeug==2.1.2 +zipp==3.8.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-telemetry-dbg-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-sonic-telemetry-dbg-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..52deb31471ee --- /dev/null +++ b/files/build/versions/dockers/docker-sonic-telemetry-dbg-sonic/versions-deb-bullseye @@ -0,0 +1,25 @@ +gdb==10.1-1.7 +gdbserver==10.1-1.7 +libbabeltrace1==1.5.8-1+b3 +libboost-regex1.74.0==1.74.0-9 +libcbor0==0.5.0+dfsg-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libfido2-1==1.6.0-2 +libglib2.0-0==2.66.8-1 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu67==67.1-7 +libipt2==2.0.3-1 +libmpfr6==4.1.0-3 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libunwind8==1.3.2-2 +openssh-client==1:8.4p1-5 +sshpass==1.09-1+b1 +strace==5.10-1 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-telemetry-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-sonic-telemetry-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..9a4ff22424d6 --- /dev/null +++ b/files/build/versions/dockers/docker-sonic-telemetry-sonic/versions-deb-bullseye @@ -0,0 +1,2 @@ +sonic-mgmt-common==1.0.0 +sonic-telemetry==0.1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-swss-layer-bullseye-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-swss-layer-bullseye-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..5690a145b7a2 --- /dev/null +++ b/files/build/versions/dockers/docker-swss-layer-bullseye-sonic/versions-deb-bullseye @@ -0,0 +1,5 @@ +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libteam5==1.30-1 +libteamdctl0==1.30-1 +swss==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-swss-layer-buster-sonic/versions-deb-buster b/files/build/versions/dockers/docker-swss-layer-buster-sonic/versions-deb-buster new file mode 100644 index 000000000000..5690a145b7a2 --- /dev/null +++ b/files/build/versions/dockers/docker-swss-layer-buster-sonic/versions-deb-buster @@ -0,0 +1,5 @@ +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libteam5==1.30-1 +libteamdctl0==1.30-1 +swss==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-dbg-sonic/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm-dbg-sonic/versions-deb-buster new file mode 100644 index 000000000000..f356efdcb0b8 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-dbg-sonic/versions-deb-buster @@ -0,0 +1,21 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libsaimetadata-dbg==1.0.0 +libsairedis-dbg==1.0.0 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +syncd-dbg==1.0.0 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-dnx-dbg-sonic/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm-dnx-dbg-sonic/versions-deb-buster new file mode 100644 index 000000000000..f356efdcb0b8 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-dnx-dbg-sonic/versions-deb-buster @@ -0,0 +1,21 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libsaimetadata-dbg==1.0.0 +libsairedis-dbg==1.0.0 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +syncd-dbg==1.0.0 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc-sonic/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc-sonic/versions-deb-buster new file mode 100644 index 000000000000..62a05ece6439 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc-sonic/versions-deb-buster @@ -0,0 +1,76 @@ +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +build-essential==12.6 +cmake==3.13.4-1 +cmake-data==3.13.4-1 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +g++==4:8.3.0-1 +g++-8==8.3.0-6 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +libarchive13==3.3.3-4+deb10u1 +libasan5==8.3.0-6 +libbinutils==2.31.1-16 +libboost-atomic1.71.0==1.71.0-6~bpo10+1 +libc-dev-bin==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libcc1-0==8.3.0-6 +libdouble-conversion1==3.1.0-3 +libdpkg-perl==1.19.8 +libexpat1-dev==2.2.6-2+deb10u4 +libffi-dev==3.2.1-9 +libgcc-8-dev==8.3.0-6 +libglib2.0-0==2.58.3-2+deb10u3 +libgomp1==8.3.0-6 +libicu63==63.1-6+deb10u3 +libisl19==0.20-2 +libitm1==8.3.0-6 +libjsoncpp1==1.7.4-3 +liblsan0==8.3.0-6 +libmpc3==1.1.0-1 +libmpfr6==4.0.2-1 +libmpx2==8.3.0-6 +libpcre2-16-0==10.32-5 +libpcre2-8-0==10.32-5 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libqt5core5a==5.11.3+dfsg1-1+deb10u4 +libqt5dbus5==5.11.3+dfsg1-1+deb10u4 +libqt5network5==5.11.3+dfsg1-1+deb10u4 +libquadmath0==8.3.0-6 +librhash0==1.3.8-1 +libssl-dev==1.1.1n-0+deb10u2 +libstdc++-8-dev==8.3.0-6 +libthrift-0.11.0==0.11.0-4 +libtsan0==8.3.0-6 +libubsan1==8.3.0-6 +libuv1==1.24.1-1+deb10u1 +libxml2==2.9.4+dfsg1-7+deb10u4 +linux-libc-dev==4.19.235-1 +make==4.2.1-1.2 +patch==2.7.6-3+deb10u1 +python==2.7.16-1 +python-dev==2.7.16-1 +python-minimal==2.7.16-1 +python-pip==18.1-5 +python-pip-whl==18.1-5 +python-pkg-resources==40.8.0-1 +python-ptf==0.9-1 +python-scapy==2.4.0-2 +python-setuptools==40.8.0-1 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +syncd-rpc==1.0.0 +wget==1.20.1-1.1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc-sonic/versions-py2 b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc-sonic/versions-py2 new file mode 100644 index 000000000000..60b9f31f8e4a --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc-sonic/versions-py2 @@ -0,0 +1,5 @@ +cffi==1.7.0 +nnpy==1.4.2 +ptf==0.9.1 +pycparser==2.21 +scapy==2.4.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc-sonic/versions-web b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc-sonic/versions-web new file mode 100644 index 000000000000..bb00691a9700 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc-sonic/versions-web @@ -0,0 +1,2 @@ +https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz==6f56ef28c93cee644e8c4aaaef7cfb55 +https://raw.githubusercontent.com/p4lang/ptf/master/ptf_nn/ptf_nn_agent.py==628956b660575965429cec84b1778816 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-dnx-sonic/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm-dnx-sonic/versions-deb-buster new file mode 100644 index 000000000000..70b03db57ecc --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-dnx-sonic/versions-deb-buster @@ -0,0 +1,7 @@ +ethtool==1:4.19-1 +kmod==26-1 +libkmod2==26-1 +libsaibcm==7.1.0.0-1 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +syncd==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-rpc-sonic/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm-rpc-sonic/versions-deb-buster new file mode 100644 index 000000000000..62a05ece6439 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-rpc-sonic/versions-deb-buster @@ -0,0 +1,76 @@ +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +build-essential==12.6 +cmake==3.13.4-1 +cmake-data==3.13.4-1 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +g++==4:8.3.0-1 +g++-8==8.3.0-6 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +libarchive13==3.3.3-4+deb10u1 +libasan5==8.3.0-6 +libbinutils==2.31.1-16 +libboost-atomic1.71.0==1.71.0-6~bpo10+1 +libc-dev-bin==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libcc1-0==8.3.0-6 +libdouble-conversion1==3.1.0-3 +libdpkg-perl==1.19.8 +libexpat1-dev==2.2.6-2+deb10u4 +libffi-dev==3.2.1-9 +libgcc-8-dev==8.3.0-6 +libglib2.0-0==2.58.3-2+deb10u3 +libgomp1==8.3.0-6 +libicu63==63.1-6+deb10u3 +libisl19==0.20-2 +libitm1==8.3.0-6 +libjsoncpp1==1.7.4-3 +liblsan0==8.3.0-6 +libmpc3==1.1.0-1 +libmpfr6==4.0.2-1 +libmpx2==8.3.0-6 +libpcre2-16-0==10.32-5 +libpcre2-8-0==10.32-5 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libqt5core5a==5.11.3+dfsg1-1+deb10u4 +libqt5dbus5==5.11.3+dfsg1-1+deb10u4 +libqt5network5==5.11.3+dfsg1-1+deb10u4 +libquadmath0==8.3.0-6 +librhash0==1.3.8-1 +libssl-dev==1.1.1n-0+deb10u2 +libstdc++-8-dev==8.3.0-6 +libthrift-0.11.0==0.11.0-4 +libtsan0==8.3.0-6 +libubsan1==8.3.0-6 +libuv1==1.24.1-1+deb10u1 +libxml2==2.9.4+dfsg1-7+deb10u4 +linux-libc-dev==4.19.235-1 +make==4.2.1-1.2 +patch==2.7.6-3+deb10u1 +python==2.7.16-1 +python-dev==2.7.16-1 +python-minimal==2.7.16-1 +python-pip==18.1-5 +python-pip-whl==18.1-5 +python-pkg-resources==40.8.0-1 +python-ptf==0.9-1 +python-scapy==2.4.0-2 +python-setuptools==40.8.0-1 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +syncd-rpc==1.0.0 +wget==1.20.1-1.1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-rpc-sonic/versions-py2 b/files/build/versions/dockers/docker-syncd-brcm-rpc-sonic/versions-py2 new file mode 100644 index 000000000000..60b9f31f8e4a --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-rpc-sonic/versions-py2 @@ -0,0 +1,5 @@ +cffi==1.7.0 +nnpy==1.4.2 +ptf==0.9.1 +pycparser==2.21 +scapy==2.4.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-rpc-sonic/versions-web b/files/build/versions/dockers/docker-syncd-brcm-rpc-sonic/versions-web new file mode 100644 index 000000000000..bb00691a9700 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-rpc-sonic/versions-web @@ -0,0 +1,2 @@ +https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz==6f56ef28c93cee644e8c4aaaef7cfb55 +https://raw.githubusercontent.com/p4lang/ptf/master/ptf_nn/ptf_nn_agent.py==628956b660575965429cec84b1778816 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-sonic/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm-sonic/versions-deb-buster new file mode 100644 index 000000000000..3566cf85491b --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-sonic/versions-deb-buster @@ -0,0 +1,8 @@ +ethtool==1:4.19-1 +kmod==26-1 +libkmod2==26-1 +libsaibcm==7.1.0.0-1 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libyaml-0-2==0.2.1-1 +syncd==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-centec-sonic/versions-deb-buster-arm64 b/files/build/versions/dockers/docker-syncd-centec-sonic/versions-deb-buster-arm64 new file mode 100644 index 000000000000..daacd0ace9bb --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-centec-sonic/versions-deb-buster-arm64 @@ -0,0 +1,41 @@ +dmsetup==2:1.02.155-3 +keyutils==1.6-6 +libdevmapper1.02.1==2:1.02.155-3 +libevent-2.1-6==2.1.8-stable-4 +libexpat1-dev==2.2.6-2+deb10u4 +libnfsidmap2==0.25-5.1 +libpcap-dev==1.8.1-6+deb10u1 +libpcap0.8==1.8.1-6+deb10u1 +libpcap0.8-dev==1.8.1-6+deb10u1 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libsai==1.9.1-0 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libsensors-config==1:3.5.0-3 +libsensors4-dev==1:3.5.0-3 +libsensors5==1:3.5.0-3 +libtirpc-common==1.1.4-0.4 +libtirpc3==1.1.4-0.4 +nfs-common==1:1.3.4-2.5+deb10u1 +python==2.7.16-1 +python-dev==2.7.16-1 +python-minimal==2.7.16-1 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +rpcbind==1.2.5-0.3+deb10u1 +sensible-utils==0.0.12 +swig==3.0.12-2 +swig3.0==3.0.12-2 +syncd==1.0.0 +ucf==3.0038+nmu1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mlnx-dbg-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-mlnx-dbg-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..032f29cb10b3 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-mlnx-dbg-sonic/versions-deb-bullseye @@ -0,0 +1,28 @@ +gdb==10.1-1.7 +gdbserver==10.1-1.7 +libbabeltrace1==1.5.8-1+b3 +libboost-regex1.74.0==1.74.0-9 +libcbor0==0.5.0+dfsg-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libelf1==0.183-1 +libfido2-1==1.6.0-2 +libglib2.0-0==2.66.8-1 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0.3-1 +libmpfr6==4.1.0-3 +libsaimetadata-dbg==1.0.0 +libsairedis-dbg==1.0.0 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libunwind8==1.3.2-2 +openssh-client==1:8.4p1-5 +sshpass==1.09-1+b1 +strace==5.10-1 +syncd-dbg==1.0.0 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mlnx-rpc-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-mlnx-rpc-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..1a806b02efa8 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-mlnx-rpc-sonic/versions-deb-bullseye @@ -0,0 +1,71 @@ +binutils==2.35.2-2 +binutils-common==2.35.2-2 +binutils-x86-64-linux-gnu==2.35.2-2 +build-essential==12.9 +bzip2==1.0.8-4 +cmake==3.18.4-2+deb11u1 +cmake-data==3.18.4-2+deb11u1 +cpp==4:10.2.1-1 +cpp-10==10.2.1-6 +g++==4:10.2.1-1 +g++-10==10.2.1-6 +gcc==4:10.2.1-1 +gcc-10==10.2.1-6 +libarchive13==3.4.3-2+deb11u1 +libasan6==10.2.1-6 +libbinutils==2.35.2-2 +libboost-atomic1.74.0==1.74.0-9 +libcc1-0==10.2.1-6 +libctf-nobfd0==2.35.2-2 +libctf0==2.35.2-2 +libdouble-conversion3==3.1.5-6.1 +libdpkg-perl==1.20.10 +libffi-dev==3.3-6 +libgcc-10-dev==10.2.1-6 +libglib2.0-0==2.66.8-1 +libgomp1==10.2.1-6 +libisl23==0.23-1 +libitm1==10.2.1-6 +libjsoncpp24==1.9.4-4 +liblsan0==10.2.1-6 +libmpc3==1.2.0-1 +libmpfr6==4.1.0-3 +libpcre2-16-0==10.36-2 +libpython2-dev==2.7.18-3 +libpython2-stdlib==2.7.18-3 +libpython2.7==2.7.18-8 +libpython2.7-dev==2.7.18-8 +libpython2.7-minimal==2.7.18-8 +libpython2.7-stdlib==2.7.18-8 +libqt5core5a==5.15.2+dfsg-9 +libqt5dbus5==5.15.2+dfsg-9 +libqt5network5==5.15.2+dfsg-9 +libquadmath0==10.2.1-6 +librhash0==1.4.1-2 +libssl-dev==1.1.1n-0+deb11u2 +libssl1.1==1.1.1n-0+deb11u2 +libstdc++-10-dev==10.2.1-6 +libthrift-0.11.0==0.11.0-4 +libtsan0==10.2.1-6 +libubsan1==10.2.1-6 +libuv1==1.40.0-2 +mailcap==3.69 +make==4.3-4.1 +mime-support==3.66 +patch==2.7.6-7 +python-dev-is-python2==2.7.18-9 +python-is-python2==2.7.18-9 +python-pkg-resources==44.1.1-1 +python-ptf==0.9-1 +python-scapy==2.4.0-2 +python-setuptools==44.1.1-1 +python2==2.7.18-3 +python2-dev==2.7.18-3 +python2-minimal==2.7.18-3 +python2.7==2.7.18-8 +python2.7-dev==2.7.18-8 +python2.7-minimal==2.7.18-8 +shared-mime-info==2.0-1 +syncd-rpc==1.0.0 +wget==1.21-1+deb11u1 +xz-utils==5.2.5-2.1~deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mlnx-rpc-sonic/versions-py2 b/files/build/versions/dockers/docker-syncd-mlnx-rpc-sonic/versions-py2 new file mode 100644 index 000000000000..7201952ab7cd --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-mlnx-rpc-sonic/versions-py2 @@ -0,0 +1,6 @@ +cffi==1.7.0 +nnpy==1.4.2 +ptf==0.9.1 +pycparser==2.21 +python-sdk-api==4.5.1500 +scapy==2.4.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mlnx-sonic/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-mlnx-sonic/versions-deb-bullseye new file mode 100644 index 000000000000..0dfb8877f766 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-mlnx-sonic/versions-deb-bullseye @@ -0,0 +1,45 @@ +applibs==1.mlnx.4.5.1500 +applibs-dev==1.mlnx.4.5.1500 +iproute2-dev==1.mlnx.4.5.1500 +libc-dev-bin==2.31-13+deb11u3 +libc6-dev==2.31-13+deb11u3 +libcrypt-dev==1:4.4.18-4 +libexpat1-dev==2.2.10-2+deb11u3 +libicu67==67.1-7 +libjs-sphinxdoc==3.4.3-2 +libjs-underscore==1.9.1~dfsg-3 +libnsl-dev==1.3.0-2 +libpython3-dev==3.9.2-3 +libpython3.9-dev==3.9.2-1 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libtirpc-dev==1.3.1-1 +libxml2==2.9.10+dfsg-6.7+deb11u2 +linux-libc-dev==5.10.113-1 +mft==4.20.0-34 +mlnx-sai==1.mlnx.SAIRel1.21.1.0 +python-is-python3==3.9.2-1 +python-pip-whl==20.3.4-4+deb11u1 +python-sdk-api==1.mlnx.4.5.1500 +python3-dev==3.9.2-3 +python3-pip==20.3.4-4+deb11u1 +python3-pkg-resources==52.0.0-4 +python3-setuptools==52.0.0-4 +python3-wheel==0.34.2-1 +python3.9-dev==3.9.2-1 +sx-acl-helper==1.mlnx.4.5.1500 +sx-acl-helper-dev==1.mlnx.4.5.1500 +sx-complib==1.mlnx.4.5.1500 +sx-complib-dev==1.mlnx.4.5.1500 +sx-examples==1.mlnx.4.5.1500 +sx-examples-dev==1.mlnx.4.5.1500 +sx-gen-utils==1.mlnx.4.5.1500 +sx-gen-utils-dev==1.mlnx.4.5.1500 +sx-scew==1.mlnx.4.5.1500 +sx-scew-dev==1.mlnx.4.5.1500 +sxd-libs==1.mlnx.4.5.1500 +sxd-libs-dev==1.mlnx.4.5.1500 +syncd==1.0.0 +wjh-libs==1.mlnx.4.5.1500 +wjh-libs-dev==1.mlnx.4.5.1500 +zlib1g-dev==1:1.2.11.dfsg-2+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mlnx-sonic/versions-py3 b/files/build/versions/dockers/docker-syncd-mlnx-sonic/versions-py3 new file mode 100644 index 000000000000..c46d8d44f0cf --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-mlnx-sonic/versions-py3 @@ -0,0 +1 @@ +python_sdk_api==4.5.1500 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mrvl-sonic/versions-deb-buster-armhf b/files/build/versions/dockers/docker-syncd-mrvl-sonic/versions-deb-buster-armhf new file mode 100644 index 000000000000..17631314c5d7 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-mrvl-sonic/versions-deb-buster-armhf @@ -0,0 +1,41 @@ +dmsetup==2:1.02.155-3 +keyutils==1.6-6 +libdevmapper1.02.1==2:1.02.155-3 +libevent-2.1-6==2.1.8-stable-4 +libexpat1-dev==2.2.6-2+deb10u4 +libnfsidmap2==0.25-5.1 +libpcap-dev==1.8.1-6+deb10u1 +libpcap0.8==1.8.1-6+deb10u1 +libpcap0.8-dev==1.8.1-6+deb10u1 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libsensors-config==1:3.5.0-3 +libsensors4-dev==1:3.5.0-3 +libsensors5==1:3.5.0-3 +libtirpc-common==1.1.4-0.4 +libtirpc3==1.1.4-0.4 +mrvllibsai==1.9.1-2 +nfs-common==1:1.3.4-2.5+deb10u1 +python==2.7.16-1 +python-dev==2.7.16-1 +python-minimal==2.7.16-1 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +rpcbind==1.2.5-0.3+deb10u1 +sensible-utils==0.0.12 +swig==3.0.12-2 +swig3.0==3.0.12-2 +syncd==1.0.0 +ucf==3.0038+nmu1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-teamd-dbg-sonic/versions-deb-buster b/files/build/versions/dockers/docker-teamd-dbg-sonic/versions-deb-buster new file mode 100644 index 000000000000..25bb4501a84c --- /dev/null +++ b/files/build/versions/dockers/docker-teamd-dbg-sonic/versions-deb-buster @@ -0,0 +1,21 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libswsscommon-dbg==1.0.0 +libteam-utils-dbgsym==1.30-1 +libteamdctl0-dbgsym==1.30-1 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +swss-dbg==1.0.0 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-teamd-sonic/versions-deb-buster b/files/build/versions/dockers/docker-teamd-sonic/versions-deb-buster new file mode 100644 index 000000000000..8fa27ca78da7 --- /dev/null +++ b/files/build/versions/dockers/docker-teamd-sonic/versions-deb-buster @@ -0,0 +1 @@ +libteam-utils==1.30-1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye new file mode 100644 index 000000000000..7a4a77c5bda5 --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye @@ -0,0 +1,1721 @@ +adwaita-icon-theme==3.38.0-1 +alsa-topology-conf==1.2.4-1 +alsa-ucm-conf==1.2.4-2 +ant==1.10.9-4 +ant-optional==1.10.9-4 +apparmor==2.13.6-10 +apt-file==3.2.2 +apt-transport-https==2.2.4 +apt-utils==2.2.4 +arch-test==0.17-1 +asciidoctor==2.0.12-2 +aspell==0.60.8-3 +aspell-en==2018.04.16-0-1 +at-spi2-core==2.38.0-4 +auditd==1:3.0-2 +augeas-lenses==1.12.0-2 +augeas-tools==1.12.0-2 +autoconf==2.69-14 +autoconf-archive==20190106-2.1 +autogen==1:5.18.16-4 +autogen-doc==1:5.18.16-4 +automake==1:1.16.3-2 +autopoint==0.21-4 +autotools-dev==20180224.1+nmu1 +bash-completion==1:2.11-2 +bc==1.07.1-2+b2 +bind9-dnsutils==1:9.16.27-1~deb11u1 +bind9-host==1:9.16.27-1~deb11u1 +bind9-libs==1:9.16.27-1~deb11u1 +binfmt-support==2.2.1-1 +binutils==2.35.2-2 +binutils-common==2.35.2-2 +binutils-x86-64-linux-gnu==2.35.2-2 +bison==2:3.7.5+dfsg-1 +blt==2.5.3+dfsg-4.1 +bsdextrautils==2.36.1-8+deb11u1 +build-essential==12.9 +byacc==20140715-1+b1 +bzip2==1.0.8-4 +bzip2-doc==1.0.8-4 +ca-certificates==20210119 +ca-certificates-java==20190909 +cdbs==0.4.163 +check==0.15.2-2 +chrpath==0.16-2+b1 +clang==1:11.0-51+nmu5 +clang-11==1:11.0.1-2 +cm-super-minimal==0.3.4-15 +cmake==3.18.4-2+deb11u1 +cmake-data==3.18.4-2+deb11u1 +cmocka-doc==1.1.5-2 +comerr-dev==2.1-1.46.2-2 +containerd.io==1.5.11-1 +cowbuilder==0.89 +cowdancer==0.89 +cpio==2.13+dfsg-4 +cpp==4:10.2.1-1 +cpp-10==10.2.1-6 +cppcheck==2.3-1 +cron==3.0pl1-137 +curl==7.74.0-1.3+deb11u1 +dbus==1.12.20-2 +dbus-user-session==1.12.20-2 +dconf-gsettings-backend==0.38.0-2 +dconf-service==0.38.0-2 +dctrl-tools==2.24-3+b1 +debhelper==13.3.4 +debian-keyring==2021.07.26 +debootstrap==1.0.123 +default-jdk-headless==2:1.11-72 +default-jre==2:1.11-72 +default-jre-headless==2:1.11-72 +default-libmysqlclient-dev==1.0.7 +device-tree-compiler==1.6.0-1 +devscripts==2.21.3+deb11u1 +dh-apparmor==2.13.6-10 +dh-autoreconf==20 +dh-exec==0.23.2 +dh-make==2.202003 +dh-python==4.20201102+nmu1 +dh-runit==2.10.3 +dh-strip-nondeterminism==1.12.0-1 +dictionaries-common==1.28.4 +diffstat==1.64-1 +dirmngr==2.2.27-2+deb11u1 +distro-info-data==0.51+deb11u1 +dkms==2.8.4-3 +dmeventd==2:1.02.175-2.1 +dmsetup==2:1.02.175-2.1 +dnsutils==1:9.16.27-1~deb11u1 +docbook==4.5-6 +docbook-dsssl==1.79-9.2 +docbook-to-man==1:2.0.0-45 +docbook-utils==0.6.14-3.4 +docbook-xml==4.5-9 +docker-ce==5:20.10.14~3-0~debian-bullseye +docker-ce-cli==5:20.10.14~3-0~debian-bullseye +docker-ce-rootless-extras==5:20.10.16~3-0~debian-bullseye +docker-scan-plugin==0.17.0~debian-bullseye +docutils-common==0.16+dfsg-4 +dosfstools==4.2-1 +doxygen==1.9.1-1 +dpatch==2.0.41 +dpkg-dev==1.20.10 +dput==1.1.0 +dvipng==1.15-1.1+b1 +dvisvgm==2.11.1-1 +dwarves==1.20-1 +dwz==0.13+20210201-1 +eatmydata==105-9 +ed==1.17-1 +emacsen-common==3.0.4 +equivs==2.3.1 +exim4-base==4.94.2-7 +exim4-config==4.94.2-7 +exim4-daemon-light==4.94.2-7 +expat==2.2.10-2+deb11u3 +fakeroot==1.25.3-1.1 +file==1:5.39-3 +flex==2.6.4-8 +fontconfig==2.13.1-4.2 +fontconfig-config==2.13.1-4.2 +fonts-dejavu-core==2.37-2 +fonts-dejavu-extra==2.37-2 +fonts-droid-fallback==1:6.0.1r16-1.1 +fonts-font-awesome==5.0.10+really4.7.0~dfsg-4.1 +fonts-lato==2.0-2.1 +fonts-liberation==1:1.07.4-11 +fonts-lmodern==2.004.5-6.1 +fonts-noto-mono==20201225-1 +fonts-texgyre==20180621-3.1 +fonts-urw-base35==20200910-1 +g++==4:10.2.1-1 +g++-10==10.2.1-6 +gawk==1:5.1.0-1 +gcc==4:10.2.1-1 +gcc-10==10.2.1-6 +gcc-10-multilib==10.2.1-6 +gcc-multilib==4:10.2.1-1 +gcovr==4.2-1 +gdb==10.1-1.7 +gem2deb==1.4 +gem2deb-test-runner==1.4 +gettext==0.21-4 +gettext-base==0.21-4 +ghostscript==9.53.3~dfsg-7+deb11u2 +gir1.2-atk-1.0==2.36.0-2 +gir1.2-atspi-2.0==2.38.0-4 +gir1.2-freedesktop==1.66.1-1+b1 +gir1.2-gdkpixbuf-2.0==2.42.2+dfsg-1 +gir1.2-glib-2.0==1.66.1-1+b1 +gir1.2-gtk-3.0==3.24.24-4+deb11u2 +gir1.2-harfbuzz-0.0==2.7.4-1 +gir1.2-packagekitglib-1.0==1.2.2-2 +gir1.2-pango-1.0==1.46.2-3 +git==1:2.30.2-1 +git-buildpackage==0.9.22 +git-man==1:2.30.2-1 +glib-networking==2.66.0-2 +glib-networking-common==2.66.0-2 +glib-networking-services==2.66.0-2 +gnupg==2.2.27-2+deb11u1 +gnupg-l10n==2.2.27-2+deb11u1 +gnupg-utils==2.2.27-2+deb11u1 +gnupg2==2.2.27-2+deb11u1 +gobject-introspection==1.66.1-1+b1 +golang-1.15==1.15.15-1~deb11u4 +golang-1.15-doc==1.15.15-1~deb11u4 +golang-1.15-go==1.15.15-1~deb11u4+fips +golang-1.15-src==1.15.15-1~deb11u4+fips +googletest==1.10.0.20201025-1.1 +gpg==2.2.27-2+deb11u1 +gpg-agent==2.2.27-2+deb11u1 +gpg-wks-client==2.2.27-2+deb11u1 +gpg-wks-server==2.2.27-2+deb11u1 +gpgconf==2.2.27-2+deb11u1 +gpgsm==2.2.27-2+deb11u1 +gpgv==2.2.27-2+deb11u1 +graphviz==2.42.2-5 +groff==1.22.4-6 +groff-base==1.22.4-6 +gsasl-common==1.10.0-4 +gsettings-desktop-schemas==3.38.0-2 +gsfonts==1:8.11+urwcyr1.0.7~pre44-4.5 +gstreamer1.0-libav==1.18.4-3 +gstreamer1.0-plugins-base==1.18.4-2 +gstreamer1.0-plugins-good==1.18.4-2 +gstreamer1.0-x==1.18.4-2 +gtk-update-icon-cache==3.24.24-4+deb11u2 +guile-2.2-libs==2.2.7+1-6 +hicolor-icon-theme==0.17-2 +i965-va-driver==2.4.1+dfsg1-1 +ibverbs-providers==33.2-1 +icc-profiles-free==2.0.1+dfsg-1.1 +icu-devtools==67.1-7 +imagemagick==8:6.9.11.60+dfsg-1.3 +imagemagick-6-common==8:6.9.11.60+dfsg-1.3 +imagemagick-6.q16==8:6.9.11.60+dfsg-1.3 +install-info==6.7.0.dfsg.2-6 +intel-media-va-driver==21.1.1+dfsg1-1 +intltool-debian==0.35.0+20060710.5 +iproute2==5.10.0-4 +iptables==1.8.7-1 +ipxe-qemu==1.0.0+git-20190125.36a4c85-5.1 +iso-codes==4.6.0-1 +java-common==0.72 +java-wrappers==0.3 +javahelper==0.78 +javascript-common==11+nmu1 +jq==1.6-2.1 +junit5==5.3.2-4 +kernel-wedge==2.104 +kmod==28-1 +krb5-multidev==1.18.3-6+deb11u1 +lcov==1.14-2 +less==551-2 +lib32asan6==10.2.1-6 +lib32atomic1==10.2.1-6 +lib32gcc-10-dev==10.2.1-6 +lib32gcc-s1==10.2.1-6 +lib32gomp1==10.2.1-6 +lib32itm1==10.2.1-6 +lib32quadmath0==10.2.1-6 +lib32stdc++6==10.2.1-6 +lib32ubsan1==10.2.1-6 +libaa1==1.4p5-48 +libaacs0==0.9.0-2 +libacl1-dev==2.2.53-10 +libaio1==0.3.112-9 +libalgorithm-diff-perl==1.201-1 +libalgorithm-diff-xs-perl==0.04-6+b1 +libalgorithm-merge-perl==0.08-3 +libaliased-perl==0.34-1.1 +libann0==1.1.2+doc-7 +libaom0==1.0.0.errata1-3 +libaopalliance-java==20070526-6 +libapache-pom-java==18-1 +libapiguardian-java==1.1.0-2 +libapparmor1==2.13.6-10 +libappstream4==0.14.4-1 +libapt-pkg-perl==0.1.39 +libarchive-cpio-perl==0.10-1.1 +libarchive-zip-perl==1.68-1 +libarchive13==3.4.3-2+deb11u1 +libargon2-1==0~20171227-0.2 +libarray-intspan-perl==2.004-1 +libasan6==10.2.1-6 +libasm-java==9.1-1 +libasound2==1.2.4-1.1 +libasound2-data==1.2.4-1.1 +libaspell15==0.60.8-3 +libass9==1:0.15.0-2 +libassuan0==2.5.3-7.1 +libasyncns0==0.8-6+b2 +libatinject-jsr330-api-java==1.0+ds1-5 +libatk-bridge2.0-0==2.38.0-1 +libatk-bridge2.0-dev==2.38.0-1 +libatk-wrapper-java==0.38.0-2+deb11u1 +libatk-wrapper-java-jni==0.38.0-2+deb11u1 +libatk1.0-0==2.36.0-2 +libatk1.0-data==2.36.0-2 +libatk1.0-dev==2.36.0-2 +libatm1==1:2.5.1-4 +libatm1-dev==1:2.5.1-4 +libatomic1==10.2.1-6 +libatspi2.0-0==2.38.0-4 +libatspi2.0-dev==2.38.0-4 +libattr1-dev==1:2.4.48-6 +libaudit-dev==1:3.0-2 +libaugeas0==1.12.0-2 +libauparse-dev==1:3.0-2 +libauparse0==1:3.0-2 +libauthen-sasl-perl==2.1600-1.1 +libavahi-client3==0.8-5 +libavahi-common-data==0.8-5 +libavahi-common3==0.8-5 +libavc1394-0==0.5.4-5 +libavcodec58==7:4.3.4-0+deb11u1 +libavfilter7==7:4.3.4-0+deb11u1 +libavformat58==7:4.3.4-0+deb11u1 +libavutil56==7:4.3.4-0+deb11u1 +libb-hooks-endofscope-perl==0.24-1.1 +libb-hooks-op-check-perl==0.22-1+b3 +libbabeltrace-dev==1.5.8-1+b3 +libbabeltrace1==1.5.8-1+b3 +libbatik-java==1.12-4 +libbdplus0==0.1.2-3 +libbind-export-dev==1:9.11.19+dfsg-2.1 +libbinutils==2.35.2-2 +libbit-vector-perl==7.4-1+b7 +libblas3==3.9.0-3 +libblkid-dev==2.36.1-8+deb11u1 +libbluray2==1:1.2.1-4+deb11u1 +libboost-atomic-dev==1.74.0.3 +libboost-atomic1.74-dev==1.74.0-9 +libboost-atomic1.74.0==1.74.0-9 +libboost-chrono-dev==1.74.0.3 +libboost-chrono1.74-dev==1.74.0-9 +libboost-chrono1.74.0==1.74.0-9 +libboost-container-dev==1.74.0.3 +libboost-container1.74-dev==1.74.0-9 +libboost-container1.74.0==1.74.0-9 +libboost-context-dev==1.74.0.3 +libboost-context1.74-dev==1.74.0-9 +libboost-context1.74.0==1.74.0-9 +libboost-contract-dev==1.74.0.3 +libboost-contract1.74-dev==1.74.0-9 +libboost-contract1.74.0==1.74.0-9 +libboost-coroutine-dev==1.74.0.3 +libboost-coroutine1.74-dev==1.74.0-9 +libboost-coroutine1.74.0==1.74.0-9 +libboost-date-time-dev==1.74.0.3 +libboost-date-time1.74-dev==1.74.0-9 +libboost-date-time1.74.0==1.74.0-9 +libboost-dev==1.74.0.3 +libboost-fiber-dev==1.74.0.3 +libboost-fiber1.74-dev==1.74.0-9 +libboost-fiber1.74.0==1.74.0-9 +libboost-filesystem-dev==1.74.0.3 +libboost-filesystem1.74-dev==1.74.0-9 +libboost-filesystem1.74.0==1.74.0-9 +libboost-graph-parallel-dev==1.74.0.3 +libboost-graph-parallel1.74-dev==1.74.0-9 +libboost-graph-parallel1.74.0==1.74.0-9 +libboost-log-dev==1.74.0.3 +libboost-log1.74-dev==1.74.0-9 +libboost-log1.74.0==1.74.0-9 +libboost-mpi1.74.0==1.74.0-9 +libboost-program-options-dev==1.74.0.3 +libboost-program-options1.74-dev==1.74.0-9 +libboost-program-options1.74.0==1.74.0-9 +libboost-regex-dev==1.74.0.3 +libboost-regex1.74-dev==1.74.0-9 +libboost-regex1.74.0==1.74.0-9 +libboost-serialization1.74-dev==1.74.0-9 +libboost-serialization1.74.0==1.74.0-9 +libboost-system-dev==1.74.0.3 +libboost-system1.74-dev==1.74.0-9 +libboost-system1.74.0==1.74.0-9 +libboost-test1.74-dev==1.74.0-9 +libboost-test1.74.0==1.74.0-9 +libboost-thread-dev==1.74.0.3 +libboost-thread1.74-dev==1.74.0-9 +libboost-thread1.74.0==1.74.0-9 +libboost1.74-dev==1.74.0-9 +libbpf0==1:0.3-2 +libbrlapi0.8==6.3+dfsg-1+deb11u1 +libbrotli-dev==1.0.9-2+b2 +libbrotli1==1.0.9-2+b2 +libbs2b0==3.1.0+dfsg-2.2+b1 +libbsd-dev==0.11.3-1 +libbsd0==0.11.3-1 +libbsh-java==2.0b4-20 +libbz2-dev==1.0.8-4 +libc-ares-dev==1.17.1-1+deb11u1 +libc-ares2==1.17.1-1+deb11u1 +libc-dev-bin==2.31-13+deb11u3 +libc-devtools==2.31-13+deb11u3 +libc-l10n==2.31-13+deb11u3 +libc6==2.31-13+deb11u3 +libc6-dbg==2.31-13+deb11u3 +libc6-dev==2.31-13+deb11u3 +libc6-dev-i386==2.31-13+deb11u3 +libc6-dev-x32==2.31-13+deb11u3 +libc6-i386==2.31-13+deb11u3 +libc6-x32==2.31-13+deb11u3 +libcaca0==0.99.beta19-2.2 +libcacard0==1:2.8.0-3 +libcairo-gobject2==1.16.0-5 +libcairo-script-interpreter2==1.16.0-5 +libcairo2==1.16.0-5 +libcairo2-dev==1.16.0-5 +libcap-dev==1:2.44-1 +libcap-ng-dev==0.7.9-2.2+b1 +libcap2==1:2.44-1 +libcap2-bin==1:2.44-1 +libcapstone4==4.0.2-3 +libcapture-tiny-perl==0.48-1 +libcarp-clan-perl==6.08-1 +libcbor0==0.5.0+dfsg-2 +libcc1-0==10.2.1-6 +libcdi-api-java==1.2-3 +libcdparanoia0==3.10.2+debian-13.1 +libcdt5==2.42.2-5 +libcgraph6==2.42.2-5 +libchromaprint1==1.5.0-2 +libcjson-dev==1.7.14-1 +libcjson1==1.7.14-1 +libclang-common-11-dev==1:11.0.1-2 +libclang-cpp11==1:11.0.1-2 +libclang1-11==1:11.0.1-2 +libclass-accessor-perl==0.51-1 +libclass-data-inheritable-perl==0.08-3 +libclass-inspector-perl==1.36-1 +libclass-method-modifiers-perl==2.13-1 +libclass-xsaccessor-perl==1.19-3+b7 +libclone-perl==0.45-1+b1 +libcmocka-dev==1.1.5-2 +libcmocka0==1.1.5-2 +libcodec2-0.9==0.9.2-4 +libcolord2==1.4.5-3 +libcommon-sense-perl==3.75-1+b4 +libcommons-beanutils-java==1.9.4-1 +libcommons-cli-java==1.4-2 +libcommons-codec-java==1.15-1 +libcommons-collections3-java==3.2.2-2 +libcommons-compress-java==1.20-1 +libcommons-configuration-java==1.10-5 +libcommons-digester-java==1.8.1-5 +libcommons-io-java==2.8.0-1 +libcommons-lang-java==2.6-9 +libcommons-lang3-java==3.11-1 +libcommons-logging-java==1.2-2 +libcommons-parent-java==43-1 +libcommons-validator-java==1:1.6-2 +libconfig-tiny-perl==2.26-1 +libconst-fast-perl==0.014-1.1 +libcontextual-return-perl==0.004014-2 +libconvert-binhex-perl==1.125-1 +libcpanel-json-xs-perl==4.25-1+b1 +libcrypt-dev==1:4.4.18-4 +libcryptsetup12==2:2.3.7-1+deb11u1 +libctf-nobfd0==2.35.2-2 +libctf0==2.35.2-2 +libcunit1==2.1-3-dfsg-2.3 +libcunit1-dev==2.1-3-dfsg-2.3 +libcups2==2.3.3op2-3+deb11u2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libcurl3-nss==7.74.0-1.3+deb11u1 +libcurl4==7.74.0-1.3+deb11u1 +libcurl4-nss-dev==7.74.0-1.3+deb11u1 +libdaemon-dev==0.14-7.1 +libdaemon0==0.14-7.1 +libdata-dpath-perl==0.58-1 +libdata-dump-perl==1.23-1.1 +libdata-messagepack-perl==1.00-4+b1 +libdata-optlist-perl==0.110-1.1 +libdata-validate-domain-perl==0.10-1.1 +libdatrie-dev==0.2.13-1 +libdatrie1==0.2.13-1 +libdav1d4==0.7.1-3 +libdaxctl1==71.1-1 +libdb-dev==5.3.1+nmu1 +libdb5.3-dev==5.3.28+dfsg1-0.8 +libdbi1==0.9.0-6 +libdbus-1-3==1.12.20-2 +libdbus-1-dev==1.12.20-2 +libdbus-glib-1-2==0.110-6 +libdbus-glib-1-dev==0.110-6 +libdbus-glib-1-dev-bin==0.110-6 +libdconf1==0.38.0-2 +libde265-0==1.0.8-1 +libdebhelper-perl==13.3.4 +libdebuginfod1==0.183-1 +libdeflate0==1.7-1 +libdevel-callchecker-perl==0.008-1+b2 +libdevel-size-perl==0.83-1+b2 +libdevel-stacktrace-perl==2.0400-1 +libdevmapper-event1.02.1==2:1.02.175-2.1 +libdevmapper1.02.1==2:1.02.175-2.1 +libdistro-info-perl==1.0 +libdjvulibre-text==3.5.28-2 +libdjvulibre21==3.5.28-2 +libdns-export1110==1:9.11.19+dfsg-2.1 +libdom4j-java==2.1.3-1 +libdouble-conversion3==3.1.5-6.1 +libdoxia-core-java==1.7-2 +libdoxia-java==1.7-2 +libdoxia-sitetools-java==1.7.5-2 +libdpkg-perl==1.20.10 +libdrm-amdgpu1==2.4.104-1 +libdrm-common==2.4.104-1 +libdrm-intel1==2.4.104-1 +libdrm-nouveau2==2.4.104-1 +libdrm-radeon1==2.4.104-1 +libdrm2==2.4.104-1 +libdv4==1.0.0-13 +libdw-dev==0.183-1 +libdw1==0.183-1 +libdynaloader-functions-perl==0.003-1.1 +libeatmydata1==105-9 +libedit-dev==3.1-20191231-2+b1 +libedit2==3.1-20191231-2+b1 +libegl-dev==1.3.2-1 +libegl-mesa0==20.3.5-1 +libegl1==1.3.2-1 +libegl1-mesa-dev==20.3.5-1 +libel-api-java==3.0.0-3 +libelf-dev==0.183-1 +libelf1==0.183-1 +libemail-address-xs-perl==1.04-1+b3 +libencode-locale-perl==1.05-1.1 +libepoxy-dev==1.5.5-1 +libepoxy0==1.5.5-1 +liberror-perl==0.17029-1 +libestr0==0.1.10-2.1+b1 +libevdev2==1.11.0+dfsg-1 +libevent-2.1-7==2.1.12-stable-1 +libevent-core-2.1-7==2.1.12-stable-1 +libevent-dev==2.1.12-stable-1 +libevent-extra-2.1-7==2.1.12-stable-1 +libevent-openssl-2.1-7==2.1.12-stable-1 +libevent-pthreads-2.1-7==2.1.12-stable-1 +libexception-class-perl==1.44-1 +libexecs0==1.3-1 +libexpat1==2.2.10-2+deb11u3 +libexpat1-dev==2.2.10-2+deb11u3 +libexplain-dev==1.4.D001-11 +libexplain51==1.4.D001-11 +libexporter-tiny-perl==1.002002-1 +libfabric1==1.11.0-2 +libfakeroot==1.25.3-1.1 +libfastjson4==0.99.9-1 +libfcgi-bin==2.4.2-2 +libfcgi-perl==0.79+ds-2 +libfcgi0ldbl==2.4.2-2 +libfdt1==1.6.0-1 +libffi-dev==3.3-6 +libfftw3-double3==3.3.8-2 +libfido2-1==1.6.0-2 +libfido2-dev==1.6.0-2 +libfile-basedir-perl==0.08-1 +libfile-chdir-perl==0.1008-1.1 +libfile-copy-recursive-perl==0.45-1 +libfile-desktopentry-perl==0.22-2 +libfile-dirlist-perl==0.05-2 +libfile-fcntllock-perl==0.22-3+b7 +libfile-find-rule-perl==0.34-1 +libfile-homedir-perl==1.006-1 +libfile-listing-perl==6.14-1 +libfile-mimeinfo-perl==0.30-1 +libfile-slurp-perl==9999.32-1 +libfile-stripnondeterminism-perl==1.12.0-1 +libfile-touch-perl==0.11-1 +libfile-which-perl==1.23-1 +libfl-dev==2.6.4-8 +libfl2==2.6.4-8 +libflac8==1.3.3-2+deb11u1 +libflite1==2.2-2 +libfont-afm-perl==1.20-3 +libfont-ttf-perl==1.06-1.1 +libfontbox-java==1:1.8.16-2 +libfontbox2-java==2.0.23-1 +libfontconfig-dev==2.13.1-4.2 +libfontconfig1==2.13.1-4.2 +libfontconfig1-dev==2.13.1-4.2 +libfontenc1==1:1.1.4-1 +libfop-java==1:2.5-3 +libfreetype-dev==2.10.4+dfsg-1 +libfreetype6==2.10.4+dfsg-1 +libfreetype6-dev==2.10.4+dfsg-1 +libfribidi-dev==1.0.8-2 +libfribidi0==1.0.8-2 +libfstrm0==0.6.0-1+b1 +libgbm1==20.3.5-1 +libgc1==1:8.0.4-3 +libgcc-10-dev==10.2.1-6 +libgd-perl==2.73-1+b1 +libgd3==2.3.0-2 +libgdbm-compat4==1.19-2 +libgdbm6==1.19-2 +libgdk-pixbuf-2.0-0==2.42.2+dfsg-1 +libgdk-pixbuf-2.0-dev==2.42.2+dfsg-1 +libgdk-pixbuf2.0-bin==2.42.2+dfsg-1 +libgdk-pixbuf2.0-common==2.42.2+dfsg-1 +libgeronimo-annotation-1.3-spec-java==1.3-1 +libgeronimo-interceptor-3.0-spec-java==1.0.1-4 +libgetopt-long-descriptive-perl==0.105-1 +libgfortran5==10.2.1-6 +libgif7==5.1.9-2 +libgirepository-1.0-1==1.66.1-1+b1 +libgirepository1.0-dev==1.66.1-1+b1 +libgit-wrapper-perl==0.048-1 +libgitlab-api-v4-perl==0.26-1 +libgl-dev==1.3.2-1 +libgl1==1.3.2-1 +libgl1-mesa-dri==20.3.5-1 +libglapi-mesa==20.3.5-1 +libgles-dev==1.3.2-1 +libgles1==1.3.2-1 +libgles2==1.3.2-1 +libglib2.0-0==2.66.8-1 +libglib2.0-bin==2.66.8-1 +libglib2.0-data==2.66.8-1 +libglib2.0-dev==2.66.8-1 +libglib2.0-dev-bin==2.66.8-1 +libglu1-mesa==9.0.1-1 +libglu1-mesa-dev==9.0.1-1 +libglvnd-dev==1.3.2-1 +libglvnd0==1.3.2-1 +libglx-dev==1.3.2-1 +libglx-mesa0==20.3.5-1 +libglx0==1.3.2-1 +libgme0==0.6.3-2 +libgmock-dev==1.10.0.20201025-1.1 +libgmp-dev==2:6.2.1+dfsg-1+deb11u1 +libgmpxx4ldbl==2:6.2.1+dfsg-1+deb11u1 +libgnutls-dane0==3.7.1-5 +libgomp1==10.2.1-6 +libgoogle-perftools4==2.8.1-1 +libgpgme11==1.14.0-1+b2 +libgpm2==1.20.7-8 +libgraphite2-3==1.3.14-1 +libgraphite2-dev==1.3.14-1 +libgs9==9.53.3~dfsg-7+deb11u2 +libgs9-common==9.53.3~dfsg-7+deb11u2 +libgsasl7==1.10.0-4 +libgsm1==1.0.18-2 +libgssrpc4==1.18.3-6+deb11u1 +libgstreamer-plugins-base1.0-0==1.18.4-2 +libgstreamer1.0-0==1.18.4-2.1 +libgtest-dev==1.10.0.20201025-1.1 +libgtk-3-0==3.24.24-4+deb11u2 +libgtk-3-bin==3.24.24-4+deb11u2 +libgtk-3-common==3.24.24-4+deb11u2 +libgtk-3-dev==3.24.24-4+deb11u2 +libgts-0.7-5==0.7.6+darcs121130-4+b1 +libgts-bin==0.7.6+darcs121130-4+b1 +libguava-java==29.0-6 +libgudev-1.0-0==234-1 +libguice-java==4.2.3-2 +libgvc6==2.42.2-5 +libgvpr2==2.42.2-5 +libharfbuzz-dev==2.7.4-1 +libharfbuzz-gobject0==2.7.4-1 +libharfbuzz-icu0==2.7.4-1 +libharfbuzz0b==2.7.4-1 +libhash-fieldhash-perl==0.15-1+b3 +libhawtjni-runtime-java==1.17-1 +libheif1==1.11.0-1 +libhtml-form-perl==6.07-1 +libhtml-format-perl==2.12-1.1 +libhtml-html5-entities-perl==0.004-1.1 +libhtml-parser-perl==3.75-1+b1 +libhtml-tagset-perl==3.20-4 +libhtml-tree-perl==5.07-2 +libhttp-cookies-perl==6.10-1 +libhttp-daemon-perl==6.12-1 +libhttp-date-perl==6.05-1 +libhttp-message-perl==6.28-1 +libhttp-negotiate-perl==6.01-1 +libhttp-tiny-multipart-perl==0.08-1.1 +libhttpclient-java==4.5.13-2 +libhttpcore-java==4.4.14-1 +libhwloc-plugins==2.4.1+dfsg-1 +libhwloc15==2.4.1+dfsg-1 +libiberty-dev==20210106-1 +libibverbs1==33.2-1 +libice-dev==2:1.0.10-1 +libice6==2:1.0.10-1 +libicu-dev==67.1-7 +libicu67==67.1-7 +libidn11==1.33-3 +libiec61883-0==1.2.0-4 +libigdgmm11==20.4.1+ds1-1 +libijs-0.35==0.35-15 +libilmbase25==2.5.4-1 +libimagequant0==2.12.2-1.1 +libimport-into-perl==1.002005-1 +libinput-bin==1.16.4-3 +libinput10==1.16.4-3 +libio-html-perl==1.004-2 +libio-prompter-perl==0.004015-1 +libio-pty-perl==1:1.15-2 +libio-sessiondata-perl==1.03-1.1 +libio-socket-ssl-perl==2.069-1 +libio-string-perl==1.08-3.1 +libio-stringy-perl==2.111-3 +libip4tc-dev==1.8.7-1 +libip4tc2==1.8.7-1 +libip6tc-dev==1.8.7-1 +libip6tc2==1.8.7-1 +libipc-run-perl==20200505.0-1 +libipc-run3-perl==0.048-2 +libipc-system-simple-perl==1.30-1 +libipt2==2.0.3-1 +libiptc-dev==1.8.7-1 +libirs-export161==1:9.11.19+dfsg-2.1 +libisc-export1105==1:9.11.19+dfsg-2.1 +libisccc-export161==1:9.11.19+dfsg-2.1 +libisccfg-export163==1:9.11.19+dfsg-2.1 +libisl23==0.23-1 +libiterator-perl==0.03+ds1-1.1 +libiterator-util-perl==0.02+ds1-1.1 +libitext1-java==1.4-7 +libitm1==10.2.1-6 +libjack-jackd2-0==1.9.17~dfsg-1 +libjansi-java==1.18-1 +libjansi-native-java==1.8-1 +libjansson-dev==2.13.1-1.1 +libjansson4==2.13.1-1.1 +libjaxen-java==1.1.6-4 +libjaxp1.3-java==1.3.05-6 +libjbig0==2.1-3.1+b2 +libjbig2dec0==0.19-2 +libjemalloc-dev==5.2.1-3 +libjemalloc2==5.2.1-3 +libjetty9-java==9.4.39-3 +libjpeg62-turbo==1:2.0.6-4 +libjq1==1.6-2.1 +libjs-bootstrap4==4.5.2+dfsg1-7 +libjs-d3==3.5.17-4 +libjs-jquery==3.5.1+dfsg+~3.5.5-7 +libjs-jquery-hotkeys==0~20130707+git2d51e3a9+dfsg-2.1 +libjs-jquery-isonscreen==1.2.0-1.1 +libjs-jquery-metadata==12-3 +libjs-jquery-tablesorter==1:2.31.3+dfsg1-1 +libjs-jquery-throttle-debounce==1.1+dfsg.1-1.1 +libjs-popper.js==1.16.1+ds-3 +libjs-sizzle==2.3.5+ds-2 +libjs-sphinxdoc==3.4.3-2 +libjs-underscore==1.9.1~dfsg-3 +libjson-c-dev==0.15-2 +libjson-c5==0.15-2 +libjson-glib-1.0-0==1.6.2-1 +libjson-glib-1.0-common==1.6.2-1 +libjson-maybexs-perl==1.004003-1 +libjson-perl==4.03000-1 +libjson-xs-perl==4.030-1+b1 +libjsoncpp24==1.9.4-4 +libjsp-api-java==2.3.4-3 +libjsr305-java==0.1~+svn49-11 +libjtidy-java==7+svn20110807-5 +libjudy-dev==1.0.5-5+b2 +libjudydebian1==1.0.5-5+b2 +libjxr-tools==1.1-6+b1 +libjxr0==1.1-6+b1 +libkadm5clnt-mit12==1.18.3-6+deb11u1 +libkadm5srv-mit12==1.18.3-6+deb11u1 +libkdb5-10==1.18.3-6+deb11u1 +libkmod2==28-1 +libkpathsea6==2020.20200327.54578-7 +libkrb5-dev==1.18.3-6+deb11u1 +libksba8==1.5.0-3 +liblab-gamut1==2.42.2-5 +liblapack3==3.9.0-3 +liblcms2-2==2.12~rc1-2 +libldap-2.4-2==2.4.57+dfsg-3+deb11u1 +libldap-common==2.4.57+dfsg-3+deb11u1 +libldap2-dev==2.4.57+dfsg-3+deb11u1 +liblilv-0-0==0.24.12-2 +liblist-compare-perl==0.55-1 +liblist-moreutils-perl==0.430-2 +liblist-moreutils-xs-perl==0.430-2 +liblist-someutils-perl==0.58-1 +liblist-someutils-xs-perl==0.58-2+b1 +liblist-utilsby-perl==0.11-1 +libllvm11==1:11.0.1-2 +liblmdb0==0.9.24-1 +liblocale-gettext-perl==1.07-4+b1 +liblog-any-adapter-screen-perl==0.140-1 +liblog-any-perl==1.709-1 +liblog4j1.2-java==1.2.17-10+deb11u1 +liblognorm5==2.0.5-1.1 +liblqr-1-0==0.4.2-2.1 +liblsan0==10.2.1-6 +libltdl-dev==2.4.6-15 +libltdl7==2.4.6-15 +liblua5.1-0==5.1.5-8.1+b3 +liblua5.1-0-dev==5.1.5-8.1+b3 +liblua5.3-0==5.3.3-1.1+b1 +liblvm2cmd2.03==2.03.11-2.1 +liblwp-mediatypes-perl==6.04-1 +liblwp-protocol-https-perl==6.10-1 +liblzma-dev==5.2.5-2.1~deb11u1 +liblzma5==5.2.5-2.1~deb11u1 +liblzo2-2==2.10-2 +liblzo2-dev==2.10-2 +libmagic-mgc==1:5.39-3 +libmagic1==1:5.39-3 +libmagickcore-6.q16-6==8:6.9.11.60+dfsg-1.3 +libmagickcore-6.q16-6-extra==8:6.9.11.60+dfsg-1.3 +libmagickwand-6.q16-6==8:6.9.11.60+dfsg-1.3 +libmail-sendmail-perl==0.80-1.1 +libmailtools-perl==2.21-1 +libmailutils7==1:3.10-3+b1 +libmariadb-dev==1:10.5.15-0+deb11u1 +libmariadb-dev-compat==1:10.5.15-0+deb11u1 +libmariadb3==1:10.5.15-0+deb11u1 +libmarkdown2==2.2.6-1 +libmaven-archiver-java==3.2.0-2.1 +libmaven-clean-plugin-java==3.1.0-1 +libmaven-common-artifact-filters-java==3.1.1-1 +libmaven-compiler-plugin-java==3.8.1-4 +libmaven-file-management-java==3.0.0-1 +libmaven-filtering-java==3.1.1-1 +libmaven-jar-plugin-java==3.1.2-1 +libmaven-parent-java==31-2 +libmaven-plugin-tools-java==3.6.0-1 +libmaven-reporting-api-java==3.0-1.1 +libmaven-reporting-exec-java==1.4-3 +libmaven-reporting-impl-java==3.0.0-2 +libmaven-resolver-java==1.4.2-3 +libmaven-resources-plugin-java==3.1.0-1 +libmaven-shared-incremental-java==1.1-3 +libmaven-shared-io-java==3.0.0-3 +libmaven-shared-utils-java==3.3.0-1 +libmaven-site-plugin-java==3.6-4 +libmaven3-core-java==3.6.3-5 +libmaxminddb0==1.5.2-1 +libmd-dev==1.0.3-3 +libmd0==1.0.3-3 +libmd4c0==0.4.7-2 +libmfx1==21.1.0-1 +libmime-tools-perl==5.509-1 +libmnl-dev==1.0.4-3 +libmnl0==1.0.4-3 +libmodule-implementation-perl==0.09-1.1 +libmodule-runtime-perl==0.016-1 +libmoo-perl==2.004004-1 +libmoox-aliases-perl==0.001006-1.1 +libmoox-struct-perl==0.020-1 +libmount-dev==2.36.1-8+deb11u1 +libmouse-perl==2.5.10-1+b1 +libmp3lame0==3.100-3 +libmpc3==1.2.0-1 +libmpdec3==2.5.1-1 +libmpfr6==4.1.0-3 +libmpg123-0==1.26.4-1 +libmtdev1==1.1.6-1 +libmysofa1==1.2~dfsg0-1 +libnamespace-autoclean-perl==0.29-1 +libnamespace-clean-perl==0.27-1 +libnanomsg-dev==1.1.5+dfsg-1+b2 +libnanomsg5==1.1.5+dfsg-1+b2 +libncurses-dev==6.2+20201114-2 +libncurses5-dev==6.2+20201114-2 +libncurses6==6.2+20201114-2 +libncursesw6==6.2+20201114-2 +libndctl6==71.1-1 +libnet-dbus-perl==1.2.0-1+b1 +libnet-domain-tld-perl==1.75-1.1 +libnet-http-perl==6.20-1 +libnet-smtp-ssl-perl==1.04-1 +libnet-ssleay-perl==1.88-3+b1 +libnetfilter-conntrack-dev==1.0.8-3 +libnetfilter-conntrack3==1.0.8-3 +libnetpbm10==2:10.0-15.4 +libnetsnmptrapd40==5.9+dfsg-3+b1 +libnewt-dev==0.52.21-4+b3 +libnewt0.52==0.52.21-4+b3 +libnfnetlink-dev==1.0.1-3+b1 +libnfnetlink0==1.0.1-3+b1 +libnftables1==0.9.8-3.1 +libnftnl-dev==1.1.9-1 +libnftnl11==1.1.9-1 +libnghttp2-14==1.43.0-1 +libnl-3-200==3.4.0-1+b1 +libnl-route-3-200==3.4.0-1+b1 +libnorm-dev==1.5.9+dfsg-2 +libnorm1==1.5.9+dfsg-2 +libnpth0==1.6-3 +libnsl-dev==1.3.0-2 +libnspr4==2:4.29-1 +libnss-systemd==247.3-7 +libnss3==2:3.61-1+deb11u2 +libntlm0==1.6-3 +libnuma-dev==2.0.12-1+b1 +libnuma1==2.0.12-1+b1 +libnumber-compare-perl==0.03-1.1 +libnumber-range-perl==0.12-1.1 +libobjc-10-dev==10.2.1-6 +libobjc4==10.2.1-6 +libobject-id-perl==0.1.2-2.1 +libogg0==1.3.4-0.1 +libomp-11-dev==1:11.0.1-2 +libomp5-11==1:11.0.1-2 +libonig5==6.9.6-1.1 +libopencsd-dev==0.14.4-1 +libopencsd0==0.14.4-1 +libopenexr25==2.5.4-2 +libopengl-dev==1.3.2-1 +libopengl0==1.3.2-1 +libopenjp2-7==2.4.0-3 +libopenmpi3==4.1.0-10 +libopenmpt0==0.4.11-1 +libopentest4j-java==1.2.0-2 +libopts25==1:5.18.16-4 +libopts25-dev==1:5.18.16-4 +libopus0==1.3.1-0.1 +liborc-0.4-0==1:0.4.32-1 +liboro-java==2.0.8a-14 +libosp5==1.5.2-13+b2 +libossp-uuid-perl==1.6.2-1.5+b9 +libossp-uuid16==1.6.2-1.5+b9 +libostyle1c2==1.4devel1-22 +libpackage-stash-perl==0.39-1 +libpackage-stash-xs-perl==0.29-1+b2 +libpackagekit-glib2-18==1.2.2-2 +libpam-cap==1:2.44-1 +libpam-systemd==247.3-7 +libpam0g-dev==1.4.0-9+deb11u1 +libpango-1.0-0==1.46.2-3 +libpango1.0-dev==1.46.2-3 +libpangocairo-1.0-0==1.46.2-3 +libpangoft2-1.0-0==1.46.2-3 +libpangoxft-1.0-0==1.46.2-3 +libpaper-utils==1.1.28+b1 +libpaper1==1.1.28+b1 +libparams-classify-perl==0.015-1+b3 +libparams-util-perl==1.102-1+b1 +libparams-validate-perl==1.30-1+b1 +libparboiled-java==1.1.7-2.1 +libpath-iterator-rule-perl==1.014-1 +libpath-tiny-perl==0.118-1 +libpathplan4==2.42.2-5 +libpcap-dev==1.10.0-2 +libpcap0.8==1.10.0-2 +libpcap0.8-dev==1.10.0-2 +libpci-dev==1:3.7.0-5 +libpci3==1:3.7.0-5 +libpciaccess0==0.16-1 +libpcre16-3==2:8.39-13 +libpcre2-16-0==10.36-2 +libpcre2-32-0==10.36-2 +libpcre2-dev==10.36-2 +libpcre2-posix2==10.36-2 +libpcre3-dev==2:8.39-13 +libpcre32-3==2:8.39-13 +libpcrecpp0v5==2:8.39-13 +libpcsclite-dev==1.9.1-1 +libpcsclite1==1.9.1-1 +libpdfbox-java==1:1.8.16-2 +libpegdown-java==1.6.0-1.1 +libperl-dev==5.32.1-4+deb11u2 +libperl5.32==5.32.1-4+deb11u2 +libperlio-gzip-perl==0.19-1+b7 +libpfm4==4.11.1+git32-gd0b85fb-1 +libpgm-5.3-0==5.3.128~dfsg-2 +libpgm-dev==5.3.128~dfsg-2 +libpipeline1==1.5.3-1 +libpixman-1-0==0.40.0-1 +libpixman-1-dev==0.40.0-1 +libplexus-ant-factory-java==1.0~alpha2.1-4 +libplexus-archiver-java==3.6.0-2 +libplexus-bsh-factory-java==1.0~alpha7-4.1 +libplexus-build-api-java==0.0.7-4 +libplexus-cipher-java==1.8-2 +libplexus-classworlds-java==2.6.0-1 +libplexus-compiler-java==2.8.8-2 +libplexus-component-annotations-java==2.1.0-1 +libplexus-container-default-java==2.1.0-1 +libplexus-container-default1.5-java==2.1.0-1 +libplexus-i18n-java==1.0-beta-10-5 +libplexus-interpolation-java==1.26-1 +libplexus-io-java==3.2.0-1.1 +libplexus-languages-java==0.9.10-2 +libplexus-sec-dispatcher-java==1.4-4 +libplexus-utils2-java==3.3.0-1 +libplexus-velocity-java==1.2-3.1 +libpmem1==1.10-2+deb11u1 +libpmix2==4.0.0-4.1 +libpng-dev==1.6.37-3 +libpng-tools==1.6.37-3 +libpng16-16==1.6.37-3 +libpocketsphinx3==0.8+5prealpha+1-13 +libpod-constants-perl==0.19-2 +libpod-parser-perl==1.63-2 +libpolkit-agent-1-0==0.105-31+deb11u1 +libpolkit-gobject-1-0==0.105-31+deb11u1 +libpopt0==1.18-2 +libpostproc55==7:4.3.4-0+deb11u1 +libproc-processtable-perl==0.59-2+b1 +libprocps8==2:3.3.17-5 +libprotobuf-c1==1.3.3-1+b2 +libprotobuf-dev==3.12.4-1 +libprotobuf-lite23==3.12.4-1 +libprotobuf23==3.12.4-1 +libprotoc23==3.12.4-1 +libproxy1v5==0.4.17-1 +libpsl5==0.21.0-1.2 +libpsm-infinipath1==3.3+20.604758e7-6.1 +libpsm2-2==11.2.185-1 +libptexenc1==2020.20200327.54578-7 +libpthread-stubs0-dev==0.4-1 +libpulse0==14.2-2 +libpython2-dev==2.7.18-3 +libpython2-stdlib==2.7.18-3 +libpython2.7==2.7.18-8 +libpython2.7-dev==2.7.18-8 +libpython2.7-minimal==2.7.18-8 +libpython2.7-stdlib==2.7.18-8 +libpython3-all-dbg==3.9.2-3 +libpython3-all-dev==3.9.2-3 +libpython3-dbg==3.9.2-3 +libpython3-dev==3.9.2-3 +libpython3-stdlib==3.9.2-3 +libpython3.9==3.9.2-1 +libpython3.9-dbg==3.9.2-1 +libpython3.9-dev==3.9.2-1 +libpython3.9-minimal==3.9.2-1 +libpython3.9-stdlib==3.9.2-1 +libqdox-java==1.12.1-3 +libqdox2-java==2.0.0-1 +libqt5concurrent5==5.15.2+dfsg-9 +libqt5core5a==5.15.2+dfsg-9 +libqt5dbus5==5.15.2+dfsg-9 +libqt5gui5==5.15.2+dfsg-9 +libqt5network5==5.15.2+dfsg-9 +libqt5opengl5==5.15.2+dfsg-9 +libqt5opengl5-dev==5.15.2+dfsg-9 +libqt5printsupport5==5.15.2+dfsg-9 +libqt5sql5==5.15.2+dfsg-9 +libqt5sql5-sqlite==5.15.2+dfsg-9 +libqt5svg5==5.15.2-3 +libqt5test5==5.15.2+dfsg-9 +libqt5widgets5==5.15.2+dfsg-9 +libqt5xml5==5.15.2+dfsg-9 +libquadmath0==10.2.1-6 +librabbitmq4==0.10.0-1 +libraw1394-11==2.1.2-2 +librdmacm1==33.2-1 +libre-engine-re2-perl==0.14-1 +libre2-9==20210201+dfsg-1 +libreadline-dev==8.1-1 +libreadline8==8.1-1 +libreadonly-perl==2.050-3 +libref-util-perl==0.204-1 +libref-util-xs-perl==0.117-1+b3 +libregexp-assemble-perl==0.36-1.1 +libregexp-pattern-license-perl==3.4.0-1 +libregexp-pattern-perl==0.2.14-1 +librest-0.7-0==0.8.1-1.1 +librhash0==1.4.1-2 +librole-tiny-perl==2.002004-1 +librrd-dev==1.7.2-3+b7 +librrd8==1.7.2-3+b7 +librsvg2-2==2.50.3+dfsg-1 +librsvg2-common==2.50.3+dfsg-1 +librtmp1==2.4+20151223.gitfa8646d.1-2+b2 +librubberband2==1.9.0-1 +libruby2.7==2.7.4-1+deb11u1 +libsamplerate0==0.2.1+ds0-1 +libsasl2-2==2.1.27+dfsg-2.1+deb11u1 +libsasl2-modules==2.1.27+dfsg-2.1+deb11u1 +libsasl2-modules-db==2.1.27+dfsg-2.1+deb11u1 +libsaxon-java==1:6.5.5-12 +libselinux1-dev==3.1-3 +libsensors-config==1:3.6.0-7 +libsensors-dev==1:3.6.0-7 +libsensors4-dev==1:3.6.0-7 +libsensors5==1:3.6.0-7 +libsepol1-dev==3.1-1 +libserd-0-0==0.30.10-2 +libsereal-decoder-perl==4.018+ds-1+b1 +libsereal-encoder-perl==4.018+ds-1+b1 +libservlet-api-java==4.0.1-2 +libservlet3.1-java==1:4.0.1-2 +libsgmls-perl==1.03ii-36 +libshine3==3.1.1-2 +libshout3==2.4.5-1+b1 +libsigsegv2==2.13-1 +libsisu-inject-java==0.3.4-2 +libsisu-plexus-java==0.3.4-3 +libslang2==2.3.2-5 +libslang2-dev==2.3.2-5 +libslf4j-java==1.7.30-1 +libslirp0==4.4.0-1+deb11u2 +libsm-dev==2:1.2.3-1 +libsm6==2:1.2.3-1 +libsnappy-java==1.1.8.3-1 +libsnappy-jni==1.1.8.3-1 +libsnappy1v5==1.1.8-1 +libsndfile1==1.0.31-2 +libsnmp-base==5.9+dfsg-3 +libsnmp-dev==5.9+dfsg-3+b1 +libsnmp40==5.9+dfsg-3+b1 +libsoap-lite-perl==1.27-1 +libsodium-dev==1.0.18-1 +libsodium23==1.0.18-1 +libsord-0-0==0.16.8-2 +libsort-key-perl==1.33-2+b3 +libsort-versions-perl==1.62-1 +libsoup-gnome2.4-1==2.72.0-2 +libsoup2.4-1==2.72.0-2 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libsoxr0==0.1.3-4 +libspeex1==1.2~rc1.2-1.1 +libsphinxbase3==0.8+5prealpha+1-12 +libspice-server1==0.14.3-2.1 +libsqlite3-0==3.34.1-3 +libsratom-0-0==0.6.8-1 +libsrt1.4-gnutls==1.4.2-1.3 +libssh-gcrypt-4==0.9.5-1+deb11u1 +libssh2-1==1.9.0-2 +libssl-dev==1.1.1n-0+deb11u2 +libssl1.1==1.1.1n-0+deb11u2 +libstdc++-10-dev==10.2.1-6 +libstemmer0d==2.1.0-1 +libstrictures-perl==2.000006-1 +libstring-copyright-perl==0.003006-1 +libstring-escape-perl==2010.002-2 +libstring-shellquote-perl==1.04-1 +libsub-exporter-perl==0.987-1 +libsub-exporter-progressive-perl==0.001013-1 +libsub-identify-perl==0.14-1+b3 +libsub-install-perl==0.928-1.1 +libsub-name-perl==0.26-1+b1 +libsub-override-perl==0.09-2 +libsub-quote-perl==2.006006-1 +libsubunit-dev==1.4.0-3 +libsubunit0==1.4.0-3 +libsurefire-java==2.22.3-1 +libswitch-perl==2.17-2.1 +libswresample3==7:4.3.4-0+deb11u1 +libswscale5==7:4.3.4-0+deb11u1 +libsynctex2==2020.20200327.54578-7 +libsys-cpuaffinity-perl==1.13~03-1 +libsys-hostname-long-perl==1.5-2 +libsystemd-dev==247.3-7 +libsystemd0==247.3-7 +libtag1v5==1.11.1+dfsg.1-3 +libtag1v5-vanilla==1.11.1+dfsg.1-3 +libtask-weaken-perl==1.06-1 +libtcl8.6==8.6.11+dfsg-1 +libtcmalloc-minimal4==2.8.1-1 +libteckit0==2.5.10+ds1-3 +libterm-readkey-perl==2.38-1+b2 +libtexlua53==2020.20200327.54578-7 +libtexluajit2==2020.20200327.54578-7 +libtext-charwidth-perl==0.04-10+b1 +libtext-glob-perl==0.11-1 +libtext-hogan-perl==2.03-1 +libtext-iconv-perl==1.7-7+b1 +libtext-levenshteinxs-perl==0.03-4+b8 +libtext-markdown-discount-perl==0.12-1+b1 +libtext-trim-perl==1.04-1 +libtext-unidecode-perl==1.30-1 +libtext-wrapi18n-perl==0.06-9 +libtext-xslate-perl==3.5.8-1+b1 +libthai-data==0.1.28-3 +libthai-dev==0.1.28-3 +libthai0==0.1.28-3 +libtheora0==1.1.1+dfsg.1-15 +libtie-ixhash-perl==1.23-2.1 +libtiff5==4.2.0-1+deb11u1 +libtime-duration-perl==1.21-1 +libtime-moment-perl==0.44-1+b3 +libtimedate-perl==2.3300-2 +libtinyxml2-8==8.0.0+dfsg-2 +libtinyxml2-dev==8.0.0+dfsg-2 +libtirpc-dev==1.3.1-1 +libtk8.6==8.6.11-2 +libtool==2.4.6-15 +libtool-bin==2.4.6-15 +libtry-tiny-perl==0.30-1 +libtsan0==10.2.1-6 +libtwolame0==0.4.0-2 +libtype-tiny-perl==1.012001-2 +libtype-tiny-xs-perl==0.022-1 +libtypes-serialiser-perl==1.01-1 +libubsan1==10.2.1-6 +libuchardet0==0.0.7-1 +libucx0==1.10.1~rc1+really.1.10.0-1 +libudev-dev==247.3-7 +libudev1==247.3-7 +libudfread0==1.1.1-1 +libunbound8==1.13.1-1 +libunicode-utf8-perl==0.62-1+b2 +libunivocity-parsers-java==2.8.3-2 +libunwind-dev==1.3.2-2 +libunwind8==1.3.2-2 +liburi-perl==5.08-1 +liburing1==0.7-3 +libusb-0.1-4==2:0.1.12-32 +libusb-1.0-0==2:1.0.24-3 +libusb-1.0-0-dev==2:1.0.24-3 +libusb-1.0-doc==2:1.0.24-3 +libusb-dev==2:0.1.12-32 +libusbredirparser1==0.8.0-1+b1 +libuv1==1.40.0-2 +libv4l-0==1.20.0-2 +libv4lconvert0==1.20.0-2 +libva-drm2==2.10.0-1 +libva-x11-2==2.10.0-1 +libva2==2.10.0-1 +libvariable-magic-perl==0.62-1+b3 +libvdeplug2==4.0.1-2 +libvdpau-va-gl1==0.4.2-1+b1 +libvdpau1==1.4-3 +libvelocity-tools-java==2.0-8 +libvidstab1.1==1.1.0-2+b1 +libvirglrenderer1==0.8.2-5 +libvirt-clients==7.0.0-3 +libvirt0==7.0.0-3 +libvisual-0.4-0==0.4.0-17 +libvorbis0a==1.3.7-1 +libvorbisenc2==1.3.7-1 +libvorbisfile3==1.3.7-1 +libvpx6==1.9.0-1 +libvte-2.91-0==0.62.3-1 +libvte-2.91-common==0.62.3-1 +libvulkan-dev==1.2.162.0-1 +libvulkan1==1.2.162.0-1 +libwacom-bin==1.8-2 +libwacom-common==1.8-2 +libwacom2==1.8-2 +libwagon-file-java==3.3.4-1 +libwagon-http-shaded-java==3.3.4-1 +libwagon-provider-api-java==3.3.4-1 +libwant-perl==0.29-1+b6 +libwavpack1==5.4.0-1 +libwayland-bin==1.18.0-2~exp1.1 +libwayland-client0==1.18.0-2~exp1.1 +libwayland-cursor0==1.18.0-2~exp1.1 +libwayland-dev==1.18.0-2~exp1.1 +libwayland-egl1==1.18.0-2~exp1.1 +libwayland-server0==1.18.0-2~exp1.1 +libwebp6==0.6.1-2.1 +libwebpdemux2==0.6.1-2.1 +libwebpmux3==0.6.1-2.1 +libwebsocket-api-java==1.1-2 +libwmf0.2-7==0.2.8.4-17 +libwoff1==1.0.2-1+b1 +libwrap0==7.6.q-31 +libwrap0-dev==7.6.q-31 +libwww-perl==6.52-1 +libwww-robotrules-perl==6.02-1 +libx11-6==2:1.7.2-1 +libx11-data==2:1.7.2-1 +libx11-dev==2:1.7.2-1 +libx11-protocol-perl==0.56-7.1 +libx11-xcb1==2:1.7.2-1 +libx264-160==2:0.160.3011+gitcde9a93-2.1 +libx265-192==3.4-2 +libx32asan6==10.2.1-6 +libx32atomic1==10.2.1-6 +libx32gcc-10-dev==10.2.1-6 +libx32gcc-s1==10.2.1-6 +libx32gomp1==10.2.1-6 +libx32itm1==10.2.1-6 +libx32quadmath0==10.2.1-6 +libx32stdc++6==10.2.1-6 +libx32ubsan1==10.2.1-6 +libxalan2-java==2.7.2-4 +libxapian30==1.4.18-3 +libxau-dev==1:1.0.9-1 +libxau6==1:1.0.9-1 +libxaw7==2:1.0.13-1.1 +libxbean-reflect-java==4.5-8 +libxcb-dri2-0==1.14-3 +libxcb-dri3-0==1.14-3 +libxcb-glx0==1.14-3 +libxcb-icccm4==0.4.1-1.1 +libxcb-image0==0.4.0-1+b3 +libxcb-keysyms1==0.4.0-1+b2 +libxcb-present0==1.14-3 +libxcb-randr0==1.14-3 +libxcb-render-util0==0.3.9-1+b1 +libxcb-render0==1.14-3 +libxcb-render0-dev==1.14-3 +libxcb-shape0==1.14-3 +libxcb-shm0==1.14-3 +libxcb-shm0-dev==1.14-3 +libxcb-sync1==1.14-3 +libxcb-util1==0.4.0-1+b1 +libxcb-xfixes0==1.14-3 +libxcb-xinerama0==1.14-3 +libxcb-xinput0==1.14-3 +libxcb-xkb1==1.14-3 +libxcb1==1.14-3 +libxcb1-dev==1.14-3 +libxcomposite-dev==1:0.4.5-1 +libxcomposite1==1:0.4.5-1 +libxcursor-dev==1:1.2.0-2 +libxcursor1==1:1.2.0-2 +libxdamage-dev==1:1.1.5-2 +libxdamage1==1:1.1.5-2 +libxdelta2==1.1.3-9.3 +libxdmcp-dev==1:1.1.2-3 +libxdmcp6==1:1.1.2-3 +libxencall1==4.14.4+74-gd7b22226b5-1 +libxendevicemodel1==4.14.4+74-gd7b22226b5-1 +libxenevtchn1==4.14.4+74-gd7b22226b5-1 +libxenforeignmemory1==4.14.4+74-gd7b22226b5-1 +libxengnttab1==4.14.4+74-gd7b22226b5-1 +libxenhypfs1==4.14.4+74-gd7b22226b5-1 +libxenmisc4.14==4.14.4+74-gd7b22226b5-1 +libxenstore3.0==4.14.4+74-gd7b22226b5-1 +libxentoolcore1==4.14.4+74-gd7b22226b5-1 +libxentoollog1==4.14.4+74-gd7b22226b5-1 +libxerces2-java==2.12.1-1 +libxext-dev==2:1.3.3-1.1 +libxext6==2:1.3.3-1.1 +libxfixes-dev==1:5.0.3-2 +libxfixes3==1:5.0.3-2 +libxft-dev==2.3.2-2 +libxft2==2.3.2-2 +libxi-dev==2:1.7.10-1 +libxi6==2:1.7.10-1 +libxinerama-dev==2:1.1.4-2 +libxinerama1==2:1.1.4-2 +libxkbcommon-dev==1.0.3-2 +libxkbcommon-x11-0==1.0.3-2 +libxkbcommon0==1.0.3-2 +libxkbfile1==1:1.1.0-1 +libxml-commons-external-java==1.4.01-5 +libxml-commons-resolver1.1-java==1.2-11 +libxml-libxml-perl==2.0134+dfsg-2+b1 +libxml-namespacesupport-perl==1.12-1.1 +libxml-parser-perl==2.46-2 +libxml-sax-base-perl==1.09-1.1 +libxml-sax-expat-perl==0.51-1 +libxml-sax-perl==1.02+dfsg-1 +libxml-simple-perl==2.25-1 +libxml-twig-perl==1:3.52-1 +libxml-xpathengine-perl==0.14-1 +libxml2==2.9.10+dfsg-6.7+deb11u2 +libxml2-dev==2.9.10+dfsg-6.7+deb11u2 +libxml2-utils==2.9.10+dfsg-6.7+deb11u2 +libxmlgraphics-commons-java==2.4-2~deb11u1 +libxmlrpc-lite-perl==0.717-4 +libxmu6==2:1.1.2-2+b3 +libxmuu1==2:1.1.2-2+b3 +libxnvctrl0==460.91.03-1 +libxpm4==1:3.5.12-1 +libxrandr-dev==2:1.5.1-1 +libxrandr2==2:1.5.1-1 +libxrender-dev==1:0.9.10-1 +libxrender1==1:0.9.10-1 +libxshmfence1==1.3-1 +libxslt1.1==1.1.34-4 +libxss1==1:1.2.3-1 +libxt-dev==1:1.2.0-1 +libxt6==1:1.2.0-1 +libxtables-dev==1.8.7-1 +libxtables12==1.8.7-1 +libxtst-dev==2:1.2.3-1 +libxtst6==2:1.2.3-1 +libxv1==2:1.0.11-1 +libxvidcore4==2:1.3.7-1 +libxxf86dga1==2:1.1.4-1+b3 +libxxf86vm1==1:1.1.4-1+b2 +libxz-java==1.8-2 +libyajl2==2.1.0-3 +libyaml-0-2==0.2.2-1 +libyaml-dev==0.2.2-1 +libyaml-libyaml-perl==0.82+repack-1+b1 +libz3-4==4.8.10-1 +libz3-dev==4.8.10-1 +libzmq3-dev==4.3.4-1 +libzmq5==4.3.4-1 +libzvbi-common==0.2.35-18 +libzvbi0==0.2.35-18 +libzzip-0-13==0.13.62-3.3+deb11u1 +licensecheck==3.1.1-2 +lintian==2.104.0 +linux-compiler-gcc-10-x86==5.10.113-1 +linux-headers-5.10.0-14-amd64==5.10.113-1 +linux-headers-5.10.0-14-common==5.10.113-1 +linux-headers-amd64==5.10.113-1 +linux-kbuild-5.10==5.10.113-1 +linux-libc-dev==5.10.113-1 +linuxdoc-tools==0.9.82-1 +llvm-11==1:11.0.1-2 +llvm-11-dev==1:11.0.1-2 +llvm-11-runtime==1:11.0.1-2 +llvm-11-tools==1:11.0.1-2 +lmodern==2.004.5-6.1 +locales==2.31-13+deb11u3 +logrotate==3.18.0-2 +lsb-release==11.1.0 +lsof==4.93.2+dfsg-1.1 +lua-bitop==1.0.2-5 +lua-bitop-dev==1.0.2-5 +lua-cjson==2.1.0+dfsg-2.1 +lua-cjson-dev==2.1.0+dfsg-2.1 +lvm2==2.03.11-2.1 +lynx==2.9.0dev.6-3~deb11u1 +lynx-common==2.9.0dev.6-3~deb11u1 +lz4==1.9.3-2 +lzip==1.22-3 +lzop==1.04-2 +m4==1.4.18-5 +mailcap==3.69 +mailutils==1:3.10-3+b1 +mailutils-common==1:3.10-3 +make==4.3-4.1 +man-db==2.9.4-2 +man2html-base==1.6g-14 +manpages==5.10-1 +manpages-dev==5.10-1 +mariadb-common==1:10.5.15-0+deb11u1 +maven==3.6.3-5 +maven-debian-helper==2.6 +maven-repo-helper==1.10 +media-types==4.0.0 +mesa-va-drivers==20.3.5-1 +mesa-vdpau-drivers==20.3.5-1 +mesa-vulkan-drivers==20.3.5-1 +mime-support==3.66 +module-assistant==0.11.10 +mysql-common==5.8+1.0.7 +ncurses-term==6.2+20201114-2 +netbase==6.3 +netpbm==2:10.0-15.4 +nftables==0.9.8-3.1 +node-jquery==3.5.1+dfsg+~3.5.5-7 +ocl-icd-libopencl1==2.2.14-2 +openjade==1.4devel1-22 +openjdk-11-jdk==11.0.15+10-1~deb11u1 +openjdk-11-jdk-headless==11.0.15+10-1~deb11u1 +openjdk-11-jre==11.0.15+10-1~deb11u1 +openjdk-11-jre-headless==11.0.15+10-1~deb11u1 +opensp==1.5.2-13+b2 +openssh-client==1:8.4p1-5 +openssh-server==1:8.4p1-5 +openssh-sftp-server==1:8.4p1-5 +openssl==1.1.1n-0+deb11u2 +ovmf==2020.11-2+deb11u1 +packagekit==1.2.2-2 +packagekit-tools==1.2.2-2 +pango1.0-tools==1.46.2-3 +patch==2.7.6-7 +patchutils==0.4.2-1 +pbuilder==0.231 +pbzip2==1.1.13-1 +pci.ids==0.0~2021.02.08-1 +perl==5.32.1-4+deb11u2 +perl-modules-5.32==5.32.1-4+deb11u2 +perl-openssl-defaults==5 +php-cli==2:7.4+76 +php-codecoverage==9.2.5+dfsg-3 +php-common==2:76 +php-deepcopy==1.10.2-3 +php-doctrine-instantiator==1.4.0-1 +php-file-iterator==3.0.5-2 +php-invoker==3.1.1-2 +php-mbstring==2:7.4+76 +php-parser==4.10.4-1 +php-pear==1:1.10.12+submodules+notgz+20210212-1 +php-phar-io-manifest==2.0.1-2 +php-phar-io-version==3.0.4-1 +php-phpdocumentor-reflection-common==2.2.0-1 +php-phpdocumentor-reflection-docblock==5.2.2-1 +php-phpdocumentor-type-resolver==1.4.0-2 +php-phpspec-prophecy==1.12.2-1 +php-text-template==2.0.4-1 +php-timer==5.0.3-2 +php-tokenizer==1.2.0-1 +php-webmozart-assert==1.9.1-2 +php-xml==2:7.4+76 +php7.4-cli==7.4.28-1+deb11u1 +php7.4-common==7.4.28-1+deb11u1 +php7.4-json==7.4.28-1+deb11u1 +php7.4-mbstring==7.4.28-1+deb11u1 +php7.4-opcache==7.4.28-1+deb11u1 +php7.4-readline==7.4.28-1+deb11u1 +php7.4-xml==7.4.28-1+deb11u1 +phpunit==9.5.2-1 +phpunit-cli-parser==1.0.1-1 +phpunit-code-unit==1.0.8-1 +phpunit-code-unit-reverse-lookup==2.0.3-2 +phpunit-comparator==4.0.6-1 +phpunit-complexity==2.0.2-1 +phpunit-diff==4.0.4-1 +phpunit-environment==5.1.3-2 +phpunit-exporter==4.0.3-2 +phpunit-global-state==5.0.2-1 +phpunit-lines-of-code==1.0.3-1 +phpunit-object-enumerator==4.0.4-1 +phpunit-object-reflector==2.0.4-1 +phpunit-recursion-context==4.0.4-1 +phpunit-resource-operations==3.0.3-2 +phpunit-type==2.3.1-1 +phpunit-version==3.0.2-2 +pigz==2.6-1 +pinentry-curses==1.1.0-4 +pixz==1.0.7-1 +pkg-config==0.29.2-1 +pkg-php-tools==1.40 +po-debconf==1.0.21+nmu1 +pocketsphinx-en-us==0.8+5prealpha+1-13 +policykit-1==0.105-31+deb11u1 +poppler-data==0.4.10-1 +pps-tools==1.0.2-2 +preview-latex-style==12.2-1 +pristine-tar==1.49 +procmail==3.22-26 +procps==2:3.3.17-5 +protobuf-compiler==3.12.4-1 +psmisc==23.4-2 +psutils==1.17.dfsg-4 +publicsuffix==20211207.1025-0+deb11u1 +pylint==2.7.2-3 +python-all==2.7.18-3 +python-apt-common==2.2.1 +python-babel-localedata==2.8.0+dfsg.1-7 +python-is-python3==3.9.2-1 +python-pip-whl==20.3.4-4+deb11u1 +python-pkg-resources==44.1.1-1 +python-setuptools==44.1.1-1 +python2==2.7.18-3 +python2-dev==2.7.18-3 +python2-minimal==2.7.18-3 +python2.7==2.7.18-8 +python2.7-dev==2.7.18-8 +python2.7-minimal==2.7.18-8 +python3==3.9.2-3 +python3-alabaster==0.7.8-1.1 +python3-all==3.9.2-3 +python3-all-dbg==3.9.2-3 +python3-all-dev==3.9.2-3 +python3-apt==2.2.1 +python3-astroid==2.5.1-1 +python3-attr==20.3.0-1 +python3-automat==20.2.0-1 +python3-babel==2.8.0+dfsg.1-7 +python3-bcrypt==3.1.7-4 +python3-bs4==4.9.3-1 +python3-certifi==2020.6.20-1 +python3-cffi-backend==1.14.5-1 +python3-chardet==4.0.0-1 +python3-click==7.1.2-1 +python3-colorama==0.4.4-1 +python3-constantly==15.1.0-2 +python3-cov-core==1.15.0-3 +python3-coverage==5.1+dfsg.1-2+b2 +python3-cryptography==3.3.2-1 +python3-dateutil==2.8.1-6 +python3-dbg==3.9.2-3 +python3-dbus==1.2.16-5 +python3-debian==0.1.39 +python3-dev==3.9.2-3 +python3-distro-info==1.0 +python3-distutils==3.9.2-1 +python3-docutils==0.16+dfsg-4 +python3-gi==3.38.0-2 +python3-gpg==1.14.0-1+b2 +python3-hamcrest==1.9.0-3 +python3-html5lib==1.1-3 +python3-hyperlink==19.0.0-2 +python3-idna==2.10-1 +python3-imagesize==1.2.0-2 +python3-importlib-metadata==1.6.0-2 +python3-incremental==17.5.0-1 +python3-iniconfig==1.1.1-1 +python3-ipaddr==2.2.0-4 +python3-isort==5.6.4-1 +python3-jinja2==2.11.3-1 +python3-lazy-object-proxy==1.5.2-1 +python3-lib2to3==3.9.2-1 +python3-logilab-common==1.8.1-1 +python3-lxml==4.6.3+dfsg-0.1+deb11u1 +python3-magic==2:0.4.20-3 +python3-mako==1.1.3+ds1-2 +python3-markdown==3.3.4-1 +python3-markupsafe==1.1.1-1+b3 +python3-mccabe==0.6.1-3 +python3-minimal==3.9.2-3 +python3-more-itertools==4.2.0-3 +python3-mypy-extensions==0.4.3-2 +python3-nose2==0.9.2-1 +python3-olefile==0.46-3 +python3-openssl==20.0.1-1 +python3-packaging==20.9-2 +python3-parse==1.6.6-0.2 +python3-pil==8.1.2+dfsg-0.3+deb11u1 +python3-pip==20.3.4-4+deb11u1 +python3-pkg-resources==52.0.0-4 +python3-pluggy==0.13.0-6 +python3-py==1.10.0-1 +python3-pyasn1==0.4.8-1 +python3-pyasn1-modules==0.2.1-1 +python3-pycurl==7.43.0.6-5 +python3-pygments==2.7.1+dfsg-2.1 +python3-pyparsing==2.4.7-1 +python3-pytest==6.0.2-2 +python3-pytest-cov==2.10.1-1 +python3-requests==2.25.1+dfsg-2 +python3-roman==2.0.0-5 +python3-service-identity==18.1.0-6 +python3-setuptools==52.0.0-4 +python3-six==1.16.0-2 +python3-snowballstemmer==2.1.0-1 +python3-software-properties==0.96.20.2-2.1 +python3-soupsieve==2.2.1-1 +python3-sphinx==3.4.3-2 +python3-sphinx-rtd-theme==0.5.1+dfsg-1 +python3-stdeb==0.10.0-1 +python3-tk==3.9.2-1 +python3-toml==0.10.1-1 +python3-twisted==20.3.0-7 +python3-twisted-bin==20.3.0-7 +python3-typing-extensions==3.7.4.3-1 +python3-tz==2021.1-1 +python3-unidiff==0.5.5-2 +python3-urllib3==1.26.5-1~exp1 +python3-venv==3.9.2-3 +python3-webencodings==0.5.1-2 +python3-wheel==0.34.2-1 +python3-wrapt==1.12.1-4+b1 +python3-xdg==0.27-2 +python3-yaml==5.3.1-5 +python3-zipp==1.0.0-3 +python3-zope.interface==5.2.0-1 +python3.9==3.9.2-1 +python3.9-dbg==3.9.2-1 +python3.9-dev==3.9.2-1 +python3.9-minimal==3.9.2-1 +python3.9-venv==3.9.2-1 +qemu-system-common==1:5.2+dfsg-11+deb11u2 +qemu-system-data==1:5.2+dfsg-11+deb11u2 +qemu-system-gui==1:5.2+dfsg-11+deb11u2 +qemu-system-x86==1:5.2+dfsg-11+deb11u2 +qemu-utils==1:5.2+dfsg-11+deb11u2 +qt5-gtk-platformtheme==5.15.2+dfsg-9 +qt5-qmake==5.15.2+dfsg-9 +qt5-qmake-bin==5.15.2+dfsg-9 +qtbase5-dev==5.15.2+dfsg-9 +qtbase5-dev-tools==5.15.2+dfsg-9 +qtchooser==66-2 +qttranslations5-l10n==5.15.2-2 +quilt==0.66-2.1 +rake==13.0.3-1 +readline-common==8.1-1 +rrdtool==1.7.2-3+b7 +rsync==3.2.3-4+deb11u1 +rsyslog==8.2102.0-2+deb11u1 +ruby==1:2.7+2 +ruby-all-dev==1:2.7+2 +ruby-asciidoctor==2.0.12-2 +ruby-minitest==5.13.0-1 +ruby-net-telnet==0.1.1-2 +ruby-power-assert==1.1.7-2 +ruby-rubygems==3.2.5-2 +ruby-test-unit==3.3.9-1 +ruby-xmlrpc==0.3.0-2 +ruby2.7==2.7.4-1+deb11u1 +ruby2.7-dev==2.7.4-1+deb11u1 +ruby2.7-doc==2.7.4-1+deb11u1 +rubygems-integration==1.18 +runit-helper==2.10.3 +sbsigntool==0.9.2-2 +seabios==1.14.0-2 +sensible-utils==0.0.14 +sgml-base==1.30 +sgml-data==2.0.11+nmu1 +sgmlspl==1.03ii-36 +shared-mime-info==2.0-1 +sharutils==1:4.15.2-5 +shellcheck==0.7.1-1+deb11u1 +slirp4netns==1.0.1-2 +software-properties-common==0.96.20.2-2.1 +sphinx-common==3.4.3-2 +sphinx-rtd-theme-common==0.5.1+dfsg-1 +squashfs-tools==1:4.4-2+deb11u2 +stgit==0.19-1 +strace==5.10-1 +sudo==1.9.5p2-3 +swig==4.0.2-1 +swig4.0==4.0.2-1 +systemd==247.3-7 +systemd-sysv==247.3-7 +systemd-timesyncd==247.3-7 +t1utils==1.41-4 +tcl==8.6.11+1 +tcl8.6==8.6.11+dfsg-1 +teckit==2.5.10+ds1-3 +telnet==0.17-42 +termit==3.1-1 +tex-common==6.16 +tex-gyre==20180621-3.1 +texi2html==1.82+dfsg1-6 +texinfo==6.7.0.dfsg.2-6 +texlive-base==2020.20210202-3 +texlive-binaries==2020.20200327.54578-7 +texlive-fonts-recommended==2020.20210202-3 +texlive-formats-extra==2020.20210202-3 +texlive-latex-base==2020.20210202-3 +texlive-latex-extra==2020.20210202-3 +texlive-latex-recommended==2020.20210202-3 +texlive-pictures==2020.20210202-3 +texlive-plain-generic==2020.20210202-3 +texlive-xetex==2020.20210202-3 +thin-provisioning-tools==0.9.0-1 +time==1.9-0.1 +tipa==2:1.3-20.1 +tk==8.6.11+1 +tk8.6==8.6.11-2 +tk8.6-blt2.5==2.5.3+dfsg-4.1 +ucf==3.0043 +unattended-upgrades==2.8 +unzip==6.0-26 +uuid-dev==2.36.1-8+deb11u1 +va-driver-all==2.10.0-1 +vdpau-driver-all==1.4-3 +velocity==1.7-6 +vim==2:8.2.2434-3+deb11u1 +vim-common==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 +wayland-protocols==1.20-1 +wdiff==1.2.2-2+b1 +wget==1.21-1+deb11u1 +x11-common==1:7.7+22 +x11-utils==7.7+5 +x11-xserver-utils==7.7+8 +x11proto-dev==2020.1-1 +x11proto-input-dev==2020.1-1 +x11proto-randr-dev==2020.1-1 +x11proto-record-dev==2020.1-1 +x11proto-xext-dev==2020.1-1 +x11proto-xinerama-dev==2020.1-1 +xauth==1:1.1-1 +xdelta==1.1.3-9.3 +xdelta3==3.0.11-dfsg-1+b1 +xdg-user-dirs==0.17-2 +xdg-utils==1.1.3-4.1 +xfonts-encodings==1:1.0.4-2.1 +xfonts-utils==1:7.7+6 +xkb-data==2.29-2 +xml-core==0.18+nmu1 +xorg-sgml-doctools==1:1.11-1.1 +xsltproc==1.1.34-4 +xtrans-dev==1.4.0-1 +xxd==2:8.2.2434-3+deb11u1 +xz-utils==5.2.5-2.1~deb11u1 +zip==3.0-12 +zlib1g==1:1.2.11.dfsg-2+deb11u1 +zlib1g-dev==1:1.2.11.dfsg-2+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 new file mode 100644 index 000000000000..5b748815151a --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 @@ -0,0 +1,28 @@ +base-files==11.1+deb11u3 +binutils-aarch64-linux-gnu==2.35.2-2 +binutils-arm-linux-gnueabihf==2.35.2-2 +cpp-10-arm-linux-gnueabihf==10.2.1-6cross1 +cpp-arm-linux-gnueabihf==4:10.2.1-1 +dctrl-tools==2.24-3 +dpkg==1.20.10 +dvipng==1.15-1.1 +gcc-10-arm-linux-gnueabihf==10.2.1-6cross1 +gcc-10-arm-linux-gnueabihf-base==10.2.1-6cross1 +gcc-10-cross-base==10.2.1-6cross1 +gcc-arm-linux-gnueabihf==4:10.2.1-1 +gzip==1.10-4+deb11u1 +libasan6-armhf-cross==10.2.1-6cross1 +libatomic1-armhf-cross==10.2.1-6cross1 +libc-bin==2.31-13+deb11u3 +libc6-armhf-cross==2.31-9cross4 +libgcc-10-dev-armhf-cross==10.2.1-6cross1 +libgcc-s1-armhf-cross==10.2.1-6cross1 +libgomp1-armhf-cross==10.2.1-6cross1 +libstdc++6-armhf-cross==10.2.1-6cross1 +libubsan1-armhf-cross==10.2.1-6cross1 +libxslt1-dev==1.1.34-4 +linux-headers-5.10.0-14-arm64==5.10.113-1 +linux-headers-arm64==5.10.113-1 +nodejs==14.19.3-deb-1nodesource1 +sysvinit-utils==2.96-7+deb11u1 +tzdata==2021a-1+deb11u3 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf new file mode 100644 index 000000000000..1dac0cb53d2e --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf @@ -0,0 +1,67 @@ +base-files==11.1+deb11u3 +binutils-arm-linux-gnueabihf==2.35.2-2 +bubblewrap==0.4.1-3 +dctrl-tools==2.24-3 +doxygen==1.9.1-2 +dpkg==1.20.10 +dvipng==1.15-1.1 +faketime==0.9.8-9 +gir1.2-nautilus-3.0==3.38.2-1+deb11u1 +gir1.2-poppler-0.18==20.09.0-3.1 +gir1.2-rsvg-2.0==2.50.3+dfsg-1 +golang-1.15-go==1.15.15-1~deb11u4 +golang-1.15-src==1.15.15-1~deb11u4 +gzip==1.10-4+deb11u1 +libalgorithm-c3-perl==0.11-1 +libc-bin==2.31-13+deb11u3 +libclang-11-dev==1:11.0.1-2 +libclass-c3-perl==0.35-1 +libclass-c3-xs-perl==0.15-1+b1 +libdevel-caller-perl==2.06-2+b3 +libdevel-globaldestruction-perl==0.14-1.1 +libdevel-lexalias-perl==0.05-2+b3 +libdist-checkconflicts-perl==0.11-1.1 +libemail-date-format-perl==1.005-1.1 +libeval-closure-perl==0.14-1 +libfaketime==0.9.8-9 +libimage-exiftool-perl==12.16+dfsg-2 +libipc-shareable-perl==0.61-2 +libjargs-java==1.0.0-5 +liblog-dispatch-perl==2.70-1 +liblog-log4perl-perl==1.54-1 +libmime-charset-perl==1.012.2-1 +libmime-lite-perl==3.031-1 +libmime-types-perl==2.18-1 +libmro-compat-perl==0.13-1 +libnautilus-extension1a==3.38.2-1+deb11u1 +libpadwalker-perl==2.5-1+b1 +libparams-validationcompiler-perl==0.30-1 +libpoppler-glib8==20.09.0-3.1 +libpoppler102==20.09.0-3.1 +libposix-strptime-perl==0.13-1+b7 +libsass1==3.6.4+20201122-1 +libsombok3==2.4.0-2+b1 +libspecio-perl==0.47-1 +libunicode-linebreak-perl==0.0.20190101-1+b2 +libxapian-dev==1.4.18-3 +libxslt1-dev==1.1.34-4 +libxstring-perl==0.005-1+b1 +libyaml-tiny-perl==1.73-1 +linux-compiler-gcc-10-arm==5.10.113-1 +linux-headers-5.10.0-14-armmp==5.10.113-1 +linux-headers-armmp==5.10.113-1 +mat2==0.12.1-2 +nodejs==14.19.3-deb-1nodesource1 +ps2eps==1.68+binaryfree-3 +python3-cairo==1.16.2-4+b2 +python3-gi-cairo==3.38.0-2 +python3-mutagen==1.45.1-2 +python3-nautilus==1.2.3-3+b1 +rdfind==1.4.1-1+b2 +sassc==3.6.1+20201027-1 +sysvinit-utils==2.96-7+deb11u1 +texlive-extra-utils==2020.20210202-3 +texlive-font-utils==2020.20210202-3 +texlive-luatex==2020.20210202-3 +tzdata==2021a-1+deb11u3 +yui-compressor==2.4.8-2.1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-git b/files/build/versions/dockers/sonic-slave-bullseye/versions-git new file mode 100644 index 000000000000..4971ef0418e6 --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-git @@ -0,0 +1,2 @@ +https://chromium.googlesource.com/chromium/tools/depot_tools.git==8f1fea025d78c26046d3135e026f097dc2022698 +https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 new file mode 100644 index 000000000000..30af6eae36d5 --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 @@ -0,0 +1,109 @@ +alabaster==0.7.8 +astroid==2.5.1 +async-timeout==4.0.2 +attrs==20.3.0 +automat==20.2.0 +babel==2.8.0 +bcrypt==3.1.7 +beautifulsoup4==4.9.3 +bitarray==2.5.1 +certifi==2020.6.20 +chardet==4.0.0 +click==7.1.2 +colorama==0.4.4 +constantly==15.1.0 +cov-core==1.15.0 +coverage==5.1 +crc16==0.1.1 +cryptography==3.3.2 +ctypesgen==1.0.2 +dbus-python==1.2.16 +deprecated==1.2.13 +devscripts==2.21.3+deb11u1 +distro-info==1.0 +docutils==0.16 +fastentrypoints==0.12 +gbp==0.9.22 +gcovr==4.2 +gpg===1.14.0-unknown +html5lib==1.1 +hyperlink==19.0.0 +idna==2.10 +imagesize==1.2.0 +importlib-metadata==1.6.0 +incremental==17.5.0 +iniconfig==0.0.0 +ipaddr==2.2.0 +isort==5.6.4 +j2cli==0.3.10 +jinja2==2.11.3 +lazy-object-proxy==0.0.0 +logilab-common==1.8.1 +lxml==4.6.2 +m2crypto==0.36.0 +mako==1.1.3 +markdown==3.3.4 +markupsafe==1.1.1 +mccabe==0.6.1 +mmh3==2.5.1 +mock==4.0.3 +mockredispy==2.9.3 +more-itertools==4.2.0 +mypy-extensions==0.4.3 +nose==1.3.7 +nose2==0.9.2 +olefile==0.46 +packaging==20.9 +parameterized==0.8.1 +parse==1.6.6 +pexpect==4.8.0 +pillow==8.1.2 +pluggy==0.13.0 +ptyprocess==0.7.0 +py==1.10.0 +pyang==2.4.0 +pyangbind==0.8.1 +pyasn1==0.4.8 +pyasn1-modules==0.2.1 +pycurl==7.43.0.6 +pyfakefs==4.5.6 +pygments==2.7.1 +pygobject==3.38.0 +pyhamcrest==1.9.0 +pylint==2.7.2 +pympler==0.8 +pyopenssl==20.0.1 +pyparsing==2.4.7 +pytest==6.0.2 +pytest-cov==2.10.1 +pytest-runner==5.2 +python-apt==2.2.1 +python-dateutil==2.8.1 +python-debian==0.1.39 +python-magic==0.4.20 +pytz==2021.1 +pyxdg==0.27 +pyyaml==5.4.1 +redis==4.3.2 +regex==2022.4.24 +requests==2.25.1 +roman==2.0.0 +service-identity==18.1.0 +six==1.16.0 +snowballstemmer==2.1.0 +soupsieve==2.2.1 +sphinx==3.4.3 +sphinx-rtd-theme==0.5.1 +stdeb==0.10.0 +stgit==0.19 +toml==0.10.1 +twisted==20.3.0 +typing-extensions==3.7.4.3 +unattended-upgrades==0.1 +unidiff==0.5.5 +urllib3==1.26.5 +webencodings==0.5.1 +wrapt==1.12.1 +xdg==5 +zipp==1.0.0 +zope.interface==5.2.0 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3-all-armhf b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3-all-armhf new file mode 100644 index 000000000000..acb77355d408 --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3-all-armhf @@ -0,0 +1,2 @@ +mutagen==1.45.1 +pycairo==1.16.2 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-web b/files/build/versions/dockers/sonic-slave-bullseye/versions-web new file mode 100644 index 000000000000..73b89834ca10 --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-web @@ -0,0 +1,4 @@ +https://download.docker.com/linux/debian/gpg==1afae06b34a13c1b3d9cb61a26285a15 +https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==4ea37edbea9fc2b88bdb5bbc2855be04 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-go_1.15.15-1~deb11u4%2Bfips_amd64.deb==b60f6db62805696b47ab422ab798fe56 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-src_1.15.15-1~deb11u4%2Bfips_amd64.deb==1c920937aa49b602a1bfec3c49747131 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster new file mode 100644 index 000000000000..4cc53424bc7c --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster @@ -0,0 +1,1781 @@ +adwaita-icon-theme==3.30.1-1 +ant==1.10.5-2 +ant-optional==1.10.5-2 +apt-file==3.2.2 +apt-transport-https==1.8.2.3 +apt-utils==1.8.2.3 +arch-test==0.15-2+deb10u1 +asciidoctor==1.5.8-1 +aspell==0.60.7~20110707-6+deb10u1 +aspell-en==2018.04.16-0-1 +at==3.1.23-1 +at-spi2-core==2.30.0-7 +auditd==1:2.8.4-3 +aufs-dkms==4.19+20190211-1 +aufs-tools==1:4.14+20190211-1 +augeas-lenses==1.11.0-3 +augeas-tools==1.11.0-3 +autoconf==2.69-11 +autoconf-archive==20180313-1 +autogen==1:5.18.12-4 +autogen-doc==1:5.18.12-4 +automake==1:1.16.1-4 +autopoint==0.19.8.1-9 +autotools-dev==20180224.1 +bash-completion==1:2.8-6 +bc==1.07.1-2+b1 +bind9-host==1:9.11.5.P4+dfsg-5.1+deb10u7 +binfmt-support==2.2.0-2 +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +bison==2:3.3.2.dfsg-1 +blt==2.5.3+dfsg-4 +bsd-mailx==8.1.2-0.20180807cvs-1 +bsdmainutils==11.1.2+b1 +build-essential==12.6 +byacc==20140715-1+b1 +bzip2==1.0.6-9.2~deb10u1 +bzip2-doc==1.0.6-9.2~deb10u1 +ca-certificates==20200601~deb10u2 +ca-certificates-java==20190405 +cdbs==0.4.159 +cgroupfs-mount==1.4 +check==0.10.0-3+b3 +chrpath==0.16-2+b1 +clang==1:7.0-47 +clang-7==1:7.0.1-8+deb10u2 +cm-super-minimal==0.3.4-14 +cmake==3.13.4-1 +cmake-data==3.13.4-1 +cmocka-doc==1.1.3-1 +comerr-dev==2.1-1.44.5-1+deb10u3 +containerd.io==1.6.4-1 +cowbuilder==0.88 +cowdancer==0.88 +cpio==2.12+dfsg-9 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +cppcheck==1.86-1 +cron==3.0pl1-134+deb10u1 +curl==7.64.0-4+deb10u2 +dbus==1.12.20-0+deb10u1 +dbus-user-session==1.12.20-0+deb10u1 +dconf-gsettings-backend==0.30.1-2 +dconf-service==0.30.1-2 +dctrl-tools==2.24-3 +debhelper==13.3.3~bpo10+1 +debian-keyring==2019.02.25 +debootstrap==1.0.114 +default-jdk-headless==2:1.11-71 +default-jre==2:1.11-71 +default-jre-headless==2:1.11-71 +default-libmysqlclient-dev==1.0.5 +device-tree-compiler==1.4.7-4 +devscripts==2.19.5+deb10u1 +dh-apparmor==2.13.2-10 +dh-autoreconf==19 +dh-exec==0.23.1 +dh-make==2.201802 +dh-python==3.20190308 +dh-strip-nondeterminism==1.1.2-1 +dh-systemd==12.1.1 +dictionaries-common==1.28.1 +diffstat==1.62-1 +dirmngr==2.2.12-1+deb10u1 +distro-info-data==0.41+deb10u4 +dkms==2.6.1-4 +dmeventd==2:1.02.155-3 +dmsetup==2:1.02.155-3 +dnsutils==1:9.11.5.P4+dfsg-5.1+deb10u7 +docbook==4.5-6 +docbook-dsssl==1.79-9.1 +docbook-to-man==1:2.0.0-42 +docbook-utils==0.6.14-3.3 +docbook-xml==4.5-8 +docker-ce==5:18.09.5~3-0~debian-buster +docker-ce-cli==5:18.09.5~3-0~debian-buster +docutils-common==0.14+dfsg-4 +docutils-doc==0.14+dfsg-4 +dosfstools==4.1-2 +doxygen==1.8.13-10 +dpatch==2.0.38+nmu1 +dpkg-dev==1.19.8 +dput==1.0.3 +dvipng==1.15-1.1 +dwz==0.13-5~bpo10+1 +eatmydata==105-7 +emacsen-common==3.0.4 +equivs==2.2.0 +exim4-base==4.92-8+deb10u6 +exim4-config==4.92-8+deb10u6 +exim4-daemon-light==4.92-8+deb10u6 +expat==2.2.6-2+deb10u4 +exuberant-ctags==1:5.9~svn20110310-12 +fakeroot==1.23-1 +file==1:5.35-4+deb10u2 +flex==2.6.4-6.2 +fontconfig==2.13.1-2 +fontconfig-config==2.13.1-2 +fonts-dejavu-core==2.37-1 +fonts-dejavu-extra==2.37-1 +fonts-droid-fallback==1:6.0.1r16-1.1 +fonts-font-awesome==5.0.10+really4.7.0~dfsg-1 +fonts-glyphicons-halflings==1.009~3.4.1+dfsg-1 +fonts-lato==2.0-2 +fonts-liberation==1:1.07.4-9 +fonts-lmodern==2.004.5-6 +fonts-noto-mono==20181227-1 +fonts-roboto-slab==1.100263+20170512-1 +fonts-texgyre==20180621-3 +g++==4:8.3.0-1 +g++-8==8.3.0-6 +gawk==1:4.2.1+dfsg-1 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +gcc-8-multilib==8.3.0-6 +gcc-multilib==4:8.3.0-1 +gcovr==4.1-2 +gdb==8.2.1-2+b3 +gem2deb==0.43 +gem2deb-test-runner==0.43 +geoip-database==20181108-1 +gettext==0.19.8.1-9 +gettext-base==0.19.8.1-9 +gfortran==4:8.3.0-1 +gfortran-8==8.3.0-6 +ghostscript==9.27~dfsg-2+deb10u5 +gir1.2-atk-1.0==2.30.0-2 +gir1.2-atspi-2.0==2.30.0-7 +gir1.2-freedesktop==1.58.3-2 +gir1.2-gdkpixbuf-2.0==2.38.1+dfsg-1 +gir1.2-glib-2.0==1.58.3-2 +gir1.2-gtk-3.0==3.24.5-1 +gir1.2-harfbuzz-0.0==2.3.1-1 +gir1.2-packagekitglib-1.0==1.1.12-5 +gir1.2-pango-1.0==1.42.4-8~deb10u1 +git==1:2.20.1-2+deb10u3 +git-buildpackage==0.9.14 +git-man==1:2.20.1-2+deb10u3 +glib-networking==2.58.0-2+deb10u2 +glib-networking-common==2.58.0-2+deb10u2 +glib-networking-services==2.58.0-2+deb10u2 +gnupg==2.2.12-1+deb10u1 +gnupg-l10n==2.2.12-1+deb10u1 +gnupg-utils==2.2.12-1+deb10u1 +gnupg2==2.2.12-1+deb10u1 +gobject-introspection==1.58.3-2 +googletest==1.8.1-3 +gpg==2.2.12-1+deb10u1 +gpg-agent==2.2.12-1+deb10u1 +gpg-wks-client==2.2.12-1+deb10u1 +gpg-wks-server==2.2.12-1+deb10u1 +gpgconf==2.2.12-1+deb10u1 +gpgsm==2.2.12-1+deb10u1 +graphviz==2.40.1-6+deb10u1 +groff==1.22.4-3+deb10u1 +groff-base==1.22.4-3+deb10u1 +gsettings-desktop-schemas==3.28.1-1 +gsfonts==1:8.11+urwcyr1.0.7~pre44-4.4 +gstreamer1.0-libav==1.15.0.1+git20180723+db823502-2+deb10u1 +gstreamer1.0-plugins-base==1.14.4-2+deb10u1 +gstreamer1.0-plugins-good==1.14.4-1+deb10u1 +gstreamer1.0-plugins-ugly==1.14.4-1+deb10u1 +gstreamer1.0-x==1.14.4-2+deb10u1 +gtk-update-icon-cache==3.24.5-1 +guile-2.0-libs==2.0.13+1-5.1 +hicolor-icon-theme==0.17-2 +i965-va-driver==2.3.0+dfsg1-1 +ibverbs-providers==22.1-1 +icc-profiles-free==2.0.1+dfsg-1 +icu-devtools==63.1-6+deb10u3 +imagemagick==8:6.9.10.23+dfsg-2.1+deb10u1 +imagemagick-6-common==8:6.9.10.23+dfsg-2.1+deb10u1 +imagemagick-6.q16==8:6.9.10.23+dfsg-2.1+deb10u1 +install-info==6.5.0.dfsg.1-4+b1 +intel-media-va-driver==18.4.1+dfsg1-1 +intltool-debian==0.35.0+20060710.5 +iptables==1.8.2-4 +iptables-dev==1.8.2-4 +ipxe-qemu==1.0.0+git-20190125.36a4c85-1 +iso-codes==4.2-1 +java-common==0.71 +java-wrappers==0.3 +javahelper==0.72.9 +javascript-common==11 +jq==1.5+dfsg-2+b1 +kernel-wedge==2.99 +kmod==26-1 +krb5-locales==1.17-3+deb10u3 +krb5-multidev==1.17-3+deb10u3 +lcov==1.13-4 +less==487-0.1+b1 +lib32asan5==8.3.0-6 +lib32atomic1==8.3.0-6 +lib32gcc-8-dev==8.3.0-6 +lib32gcc1==1:8.3.0-6 +lib32gomp1==8.3.0-6 +lib32itm1==8.3.0-6 +lib32mpx2==8.3.0-6 +lib32quadmath0==8.3.0-6 +lib32stdc++6==8.3.0-6 +lib32ubsan1==8.3.0-6 +liba52-0.7.4==0.7.4-19 +libaa1==1.4p5-46 +libaacs0==0.9.0-2 +libaio1==0.3.112-3 +libalgorithm-c3-perl==0.10-1 +libalgorithm-diff-perl==1.19.03-2 +libalgorithm-diff-xs-perl==0.04-5+b1 +libalgorithm-merge-perl==0.08-3 +libaom0==1.0.0-3 +libaopalliance-java==20070526-6 +libapache-pom-java==18-1 +libapparmor1==2.13.2-10 +libappconfig-perl==1.71-2 +libappstream4==0.12.5-1 +libapt-inst2.0==1.8.2.3 +libapt-pkg-perl==0.1.34+b1 +libarchive-cpio-perl==0.10-1 +libarchive-zip-perl==1.64-1 +libarchive13==3.3.3-4+deb10u1 +libargon2-1==0~20171227-0.2 +libasan5==8.3.0-6 +libasm-java==7.0-1 +libasound2==1.1.8-1 +libasound2-data==1.1.8-1 +libaspell15==0.60.7~20110707-6+deb10u1 +libass9==1:0.14.0-2 +libassuan0==2.5.2-1 +libasync-mergepoint-perl==0.04-2 +libasyncns0==0.8-6 +libatinject-jsr330-api-java==1.0+ds1-5 +libatk-bridge2.0-0==2.30.0-5 +libatk-bridge2.0-dev==2.30.0-5 +libatk-wrapper-java==0.33.3-22+deb10u1 +libatk-wrapper-java-jni==0.33.3-22+deb10u1 +libatk1.0-0==2.30.0-2 +libatk1.0-data==2.30.0-2 +libatk1.0-dev==2.30.0-2 +libatm1==1:2.5.1-2 +libatm1-dev==1:2.5.1-2 +libatomic1==8.3.0-6 +libatspi2.0-0==2.30.0-7 +libatspi2.0-dev==2.30.0-7 +libaudio2==1.9.4-6 +libaudit-dev==1:2.8.4-3 +libaugeas0==1.11.0-3 +libauparse-dev==1:2.8.4-3 +libauparse0==1:2.8.4-3 +libauthen-sasl-perl==2.1600-1 +libavahi-client3==0.7-4+deb10u1 +libavahi-common-data==0.7-4+deb10u1 +libavahi-common3==0.7-4+deb10u1 +libavalon-framework-java==4.2.0-10 +libavc1394-0==0.5.4-5 +libavcodec58==7:4.1.9-0+deb10u1 +libavfilter7==7:4.1.9-0+deb10u1 +libavformat58==7:4.1.9-0+deb10u1 +libavutil56==7:4.1.9-0+deb10u1 +libb-hooks-endofscope-perl==0.24-1 +libb-hooks-op-check-perl==0.22-1+b1 +libbabeltrace-dev==1.5.6-2+deb10u1 +libbabeltrace1==1.5.6-2+deb10u1 +libbatik-java==1.10-2+deb10u1 +libbdplus0==0.1.2-3 +libbind-export-dev==1:9.11.5.P4+dfsg-5.1+deb10u7 +libbind9-161==1:9.11.5.P4+dfsg-5.1+deb10u7 +libbinutils==2.31.1-16 +libbison-dev==2:3.3.2.dfsg-1 +libbit-vector-perl==7.4-1+b5 +libblkid-dev==2.33.1-0.1 +libbluetooth3==5.50-1.2~deb10u2 +libbluray2==1:1.1.0-1 +libboost-atomic1.71-dev==1.71.0-6~bpo10+1 +libboost-atomic1.71.0==1.71.0-6~bpo10+1 +libboost-chrono1.71-dev==1.71.0-6~bpo10+1 +libboost-chrono1.71.0==1.71.0-6~bpo10+1 +libboost-container1.71-dev==1.71.0-6~bpo10+1 +libboost-container1.71.0==1.71.0-6~bpo10+1 +libboost-context1.71-dev==1.71.0-6~bpo10+1 +libboost-context1.71.0==1.71.0-6~bpo10+1 +libboost-contract1.71-dev==1.71.0-6~bpo10+1 +libboost-contract1.71.0==1.71.0-6~bpo10+1 +libboost-coroutine1.71-dev==1.71.0-6~bpo10+1 +libboost-coroutine1.71.0==1.71.0-6~bpo10+1 +libboost-date-time1.71-dev==1.71.0-6~bpo10+1 +libboost-date-time1.71.0==1.71.0-6~bpo10+1 +libboost-fiber1.71-dev==1.71.0-6~bpo10+1 +libboost-fiber1.71.0==1.71.0-6~bpo10+1 +libboost-filesystem1.71-dev==1.71.0-6~bpo10+1 +libboost-filesystem1.71.0==1.71.0-6~bpo10+1 +libboost-graph-parallel1.71-dev==1.71.0-6~bpo10+1 +libboost-graph-parallel1.71.0==1.71.0-6~bpo10+1 +libboost-log1.71-dev==1.71.0-6~bpo10+1 +libboost-log1.71.0==1.71.0-6~bpo10+1 +libboost-mpi1.71.0==1.71.0-6~bpo10+1 +libboost-program-options1.71-dev==1.71.0-6~bpo10+1 +libboost-program-options1.71.0==1.71.0-6~bpo10+1 +libboost-regex1.71-dev==1.71.0-6~bpo10+1 +libboost-regex1.71.0==1.71.0-6~bpo10+1 +libboost-serialization1.71-dev==1.71.0-6~bpo10+1 +libboost-serialization1.71.0==1.71.0-6~bpo10+1 +libboost-system1.71-dev==1.71.0-6~bpo10+1 +libboost-system1.71.0==1.71.0-6~bpo10+1 +libboost-test1.71-dev==1.71.0-6~bpo10+1 +libboost-test1.71.0==1.71.0-6~bpo10+1 +libboost-thread1.71-dev==1.71.0-6~bpo10+1 +libboost-thread1.71.0==1.71.0-6~bpo10+1 +libboost1.71-dev==1.71.0-6~bpo10+1 +libbpf-dev==1:0.3-2~bpo10+1 +libbpf0==1:0.3-2~bpo10+1 +libbrlapi0.6==5.6-10+deb10u1 +libbrotli1==1.0.7-2+deb10u1 +libbs2b0==3.1.0+dfsg-2.2 +libbsd-dev==0.9.1-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libbsh-java==2.0b4-19 +libbz2-dev==1.0.6-9.2~deb10u1 +libc-ares-dev==1.14.0-1+deb10u1 +libc-ares2==1.14.0-1+deb10u1 +libc-dev-bin==2.28-10+deb10u1 +libc-l10n==2.28-10+deb10u1 +libc6==2.28-10+deb10u1 +libc6-dbg==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libc6-dev-i386==2.28-10+deb10u1 +libc6-dev-x32==2.28-10+deb10u1 +libc6-i386==2.28-10+deb10u1 +libc6-x32==2.28-10+deb10u1 +libcaca0==0.99.beta19-2.1 +libcacard0==1:2.6.1-1 +libcaf-openmpi-3==2.4.0-2 +libcairo-gobject2==1.16.0-4+deb10u1 +libcairo-script-interpreter2==1.16.0-4+deb10u1 +libcairo2==1.16.0-4+deb10u1 +libcairo2-dev==1.16.0-4+deb10u1 +libcap-dev==1:2.25-2 +libcap-ng-dev==0.7.9-2 +libcapstone3==4.0.1+really+3.0.5-1 +libcapture-tiny-perl==0.48-1 +libcarp-clan-perl==6.07-1 +libcc1-0==8.3.0-6 +libcdi-api-java==1.2-2 +libcdio18==2.0.0-2 +libcdparanoia0==3.10.2+debian-13 +libcdt5==2.40.1-6+deb10u1 +libcgi-fast-perl==1:2.13-1 +libcgi-pm-perl==4.40-1 +libcglib-java==3.2.10-1 +libcgraph6==2.40.1-6+deb10u1 +libchromaprint1==1.4.3-3 +libcjson-dev==1.7.10-1.1+deb10u1 +libcjson1==1.7.10-1.1+deb10u1 +libclang-common-7-dev==1:7.0.1-8+deb10u2 +libclang1-6.0==1:6.0.1-10 +libclang1-7==1:7.0.1-8+deb10u2 +libclass-accessor-perl==0.51-1 +libclass-c3-perl==0.34-1 +libclass-c3-xs-perl==0.14-1+b3 +libclass-inspector-perl==1.32-1 +libclass-load-perl==0.25-1 +libclass-load-xs-perl==0.10-1+b3 +libclass-method-modifiers-perl==2.12-1 +libclass-tiny-perl==1.006-1 +libclass-xsaccessor-perl==1.19-3+b2 +libclone-perl==0.41-1+b1 +libcmocka-dev==1.1.3-1 +libcmocka0==1.1.3-1 +libcoarrays-dev==2.4.0-2 +libcoarrays-openmpi-dev==2.4.0-2 +libcodec2-0.8.1==0.8.1-2 +libcolord2==1.4.3-4 +libcommon-sense-perl==3.74-2+b7 +libcommons-beanutils-java==1.9.3-1 +libcommons-cli-java==1.4-1 +libcommons-codec-java==1.11-1 +libcommons-collections3-java==3.2.2-2 +libcommons-compress-java==1.18-2+deb10u1 +libcommons-configuration-java==1.10-5 +libcommons-digester-java==1.8.1-5 +libcommons-io-java==2.6-2+deb10u1 +libcommons-lang-java==2.6-8 +libcommons-lang3-java==3.8-2 +libcommons-logging-java==1.2-2 +libcommons-parent-java==43-1 +libcommons-validator-java==1:1.6-2 +libconst-fast-perl==0.014-1 +libcontextual-return-perl==0.004014-2 +libconvert-binhex-perl==1.125-1 +libcroco3==0.6.12-3 +libcryptsetup12==2:2.1.0-5+deb10u2 +libcrystalhd3==1:0.0~git20110715.fdd2f19-13 +libcunit1==2.1-3-dfsg-2+b12 +libcunit1-dev==2.1-3-dfsg-2+b12 +libcups2==2.2.10-6+deb10u6 +libcupsfilters1==1.21.6-5 +libcupsimage2==2.2.10-6+deb10u6 +libcurl3-gnutls==7.64.0-4+deb10u2 +libcurl3-nss==7.64.0-4+deb10u2 +libcurl4==7.64.0-4+deb10u2 +libcurl4-nss-dev==7.64.0-4+deb10u2 +libdaemon-dev==0.14-7 +libdaemon0==0.14-7 +libdata-dump-perl==1.23-1 +libdata-optlist-perl==0.110-1 +libdatrie1==0.2.12-2 +libdb-dev==5.3.1+nmu1 +libdb5.3-dev==5.3.28+dfsg1-0.5 +libdbi1==0.9.0-5 +libdbus-1-3==1.12.20-0+deb10u1 +libdbus-1-dev==1.12.20-0+deb10u1 +libdbus-glib-1-2==0.110-4 +libdbus-glib-1-dev==0.110-4 +libdbus-glib-1-dev-bin==0.110-4 +libdconf1==0.30.1-2 +libde265-0==1.0.3-1+b1 +libdebhelper-perl==13.3.3~bpo10+1 +libdevel-callchecker-perl==0.008-1 +libdevel-caller-perl==2.06-2+b1 +libdevel-globaldestruction-perl==0.14-1 +libdevel-lexalias-perl==0.05-2+b1 +libdevel-overloadinfo-perl==0.005-1 +libdevel-partialdump-perl==0.20-1 +libdevel-stacktrace-perl==2.0300-1 +libdevmapper-event1.02.1==2:1.02.155-3 +libdevmapper1.02.1==2:1.02.155-3 +libdigest-bubblebabble-perl==0.02-2 +libdigest-hmac-perl==1.03+dfsg-2 +libdist-checkconflicts-perl==0.11-1 +libdistro-info-perl==0.21 +libdjvulibre-text==3.5.27.1-10+deb10u1 +libdjvulibre21==3.5.27.1-10+deb10u1 +libdns-export1104==1:9.11.5.P4+dfsg-5.1+deb10u7 +libdns1104==1:9.11.5.P4+dfsg-5.1+deb10u7 +libdom4j-java==2.1.1-2 +libdouble-conversion1==3.1.0-3 +libdoxia-core-java==1.7-2 +libdoxia-java==1.7-2 +libdoxia-sitetools-java==1.7.5-1 +libdpkg-perl==1.19.8 +libdrm-amdgpu1==2.4.97-1 +libdrm-common==2.4.97-1 +libdrm-dev==2.4.97-1 +libdrm-intel1==2.4.97-1 +libdrm-nouveau2==2.4.97-1 +libdrm-radeon1==2.4.97-1 +libdrm2==2.4.97-1 +libdv4==1.0.0-12 +libdvdnav4==6.0.0-1 +libdvdread4==6.0.1-1 +libdw-dev==0.176-1.1 +libdw1==0.176-1.1 +libdynaloader-functions-perl==0.003-1 +libeatmydata1==105-7 +libedit-dev==3.1-20181209-1 +libedit2==3.1-20181209-1 +libegl-mesa0==18.3.6-2+deb10u1 +libegl1==1.1.0-1 +libegl1-mesa-dev==18.3.6-2+deb10u1 +libel-api-java==3.0.0-2+deb10u1 +libelf-dev==0.176-1.1 +libemail-valid-perl==1.202-1 +libencode-locale-perl==1.05-1 +libepoxy-dev==1.5.3-0.1 +libepoxy0==1.5.3-0.1 +liberror-perl==0.17027-2 +libestr0==0.1.10-2.1 +libeval-closure-perl==0.14-1 +libevdev2==1.6.0+dfsg-1 +libevent-2.1-6==2.1.8-stable-4 +libevent-core-2.1-6==2.1.8-stable-4 +libevent-dev==2.1.8-stable-4 +libevent-extra-2.1-6==2.1.8-stable-4 +libevent-openssl-2.1-6==2.1.8-stable-4 +libevent-pthreads-2.1-6==2.1.8-stable-4 +libexpat1==2.2.6-2+deb10u4 +libexpat1-dev==2.2.6-2+deb10u4 +libexplain-dev==1.4.D001-8 +libexplain51==1.4.D001-8 +libexporter-tiny-perl==1.002001-1 +libfabric1==1.6.2-3 +libfakeroot==1.23-1 +libfastjson4==0.99.8-2 +libfcgi-perl==0.78-2+b3 +libfdt1==1.4.7-4 +libffi-dev==3.2.1-9 +libfftw3-double3==3.3.8-2 +libfile-basedir-perl==0.08-1 +libfile-chdir-perl==0.1008-1 +libfile-desktopentry-perl==0.22-1 +libfile-fcntllock-perl==0.22-3+b5 +libfile-homedir-perl==1.004-1 +libfile-listing-perl==6.04-1 +libfile-mimeinfo-perl==0.29-1 +libfile-stripnondeterminism-perl==1.1.2-1 +libfile-which-perl==1.23-1 +libfl-dev==2.6.4-6.2 +libfl2==2.6.4-6.2 +libflac8==1.3.2-3+deb10u1 +libflite1==2.1-release-3 +libfont-afm-perl==1.20-2 +libfontbox2-java==2.0.13-2 +libfontconfig1==2.13.1-2 +libfontconfig1-dev==2.13.1-2 +libfontenc1==1:1.1.3-1+b2 +libfop-java==1:2.3-2 +libfreetype6==2.9.1-3+deb10u2 +libfreetype6-dev==2.9.1-3+deb10u2 +libfribidi-dev==1.0.5-3.1+deb10u1 +libfribidi0==1.0.5-3.1+deb10u1 +libfstrm0==0.4.0-1 +libfuture-perl==0.39-1 +libgail-common==2.24.32-3 +libgail18==2.24.32-3 +libgbm1==18.3.6-2+deb10u1 +libgc1c2==1:7.6.4-0.4 +libgcc-8-dev==8.3.0-6 +libgd-perl==2.71-2 +libgd3==2.2.5-5.2 +libgdbm-compat4==1.18.1-4 +libgdbm6==1.18.1-4 +libgdk-pixbuf2.0-0==2.38.1+dfsg-1 +libgdk-pixbuf2.0-bin==2.38.1+dfsg-1 +libgdk-pixbuf2.0-common==2.38.1+dfsg-1 +libgdk-pixbuf2.0-dev==2.38.1+dfsg-1 +libgeoip1==1.6.12-1 +libgeronimo-annotation-1.3-spec-java==1.0-1 +libgeronimo-interceptor-3.0-spec-java==1.0.1-4 +libgetopt-long-descriptive-perl==0.103-2 +libgfortran-8-dev==8.3.0-6 +libgfortran5==8.3.0-6 +libgif7==5.1.4-3 +libgirepository-1.0-1==1.58.3-2 +libgirepository1.0-dev==1.58.3-2 +libgit-wrapper-perl==0.048-1 +libgitlab-api-v4-perl==0.16-1 +libgl1==1.1.0-1 +libgl1-mesa-dev==18.3.6-2+deb10u1 +libgl1-mesa-dri==18.3.6-2+deb10u1 +libglapi-mesa==18.3.6-2+deb10u1 +libgles1==1.1.0-1 +libgles2==1.1.0-1 +libglib2.0-0==2.58.3-2+deb10u3 +libglib2.0-bin==2.58.3-2+deb10u3 +libglib2.0-data==2.58.3-2+deb10u3 +libglib2.0-dev==2.58.3-2+deb10u3 +libglib2.0-dev-bin==2.58.3-2+deb10u3 +libglu1-mesa==9.0.0-2.1+b3 +libglu1-mesa-dev==9.0.0-2.1+b3 +libglvnd-core-dev==1.1.0-1 +libglvnd-dev==1.1.0-1 +libglvnd0==1.1.0-1 +libglx-mesa0==18.3.6-2+deb10u1 +libglx0==1.1.0-1 +libgme0==0.6.2-1 +libgmock-dev==1.8.1-3 +libgmp-dev==2:6.1.2+dfsg-4+deb10u1 +libgmp10==2:6.1.2+dfsg-4+deb10u1 +libgmpxx4ldbl==2:6.1.2+dfsg-4+deb10u1 +libgnutls-dane0==3.6.7-4+deb10u7 +libgnutls-openssl27==3.6.7-4+deb10u7 +libgnutls28-dev==3.6.7-4+deb10u7 +libgnutlsxx28==3.6.7-4+deb10u7 +libgomp1==8.3.0-6 +libgoogle-perftools4==2.7-1 +libgpgme11==1.12.0-6 +libgpm2==1.20.7-5 +libgraphite2-3==1.3.13-7 +libgraphite2-dev==1.3.13-7 +libgs9==9.27~dfsg-2+deb10u5 +libgs9-common==9.27~dfsg-2+deb10u5 +libgsm1==1.0.18-2 +libgssapi-krb5-2==1.17-3+deb10u3 +libgssrpc4==1.17-3+deb10u3 +libgstreamer-plugins-base1.0-0==1.14.4-2+deb10u1 +libgstreamer1.0-0==1.14.4-1 +libgtest-dev==1.8.1-3 +libgtk-3-0==3.24.5-1 +libgtk-3-bin==3.24.5-1 +libgtk-3-common==3.24.5-1 +libgtk-3-dev==3.24.5-1 +libgtk2.0-0==2.24.32-3 +libgtk2.0-bin==2.24.32-3 +libgtk2.0-common==2.24.32-3 +libgts-0.7-5==0.7.6+darcs121130-4 +libgts-bin==0.7.6+darcs121130-4 +libguava-java==19.0-1 +libgudev-1.0-0==232-2 +libguice-java==4.2.1-1 +libgvc6==2.40.1-6+deb10u1 +libgvpr2==2.40.1-6+deb10u1 +libharfbuzz-dev==2.3.1-1 +libharfbuzz-gobject0==2.3.1-1 +libharfbuzz-icu0==2.3.1-1 +libharfbuzz0b==2.3.1-1 +libhawtjni-runtime-java==1.16-1 +libheif1==1.3.2-2~deb10u1 +libhtml-form-perl==6.03-1 +libhtml-format-perl==2.12-1 +libhtml-parser-perl==3.72-3+b3 +libhtml-tagset-perl==3.20-3 +libhtml-tree-perl==5.07-2 +libhttp-cookies-perl==6.04-1 +libhttp-daemon-perl==6.01-3 +libhttp-date-perl==6.02-1 +libhttp-message-perl==6.18-1 +libhttp-negotiate-perl==6.01-1 +libhttp-tiny-multipart-perl==0.08-1 +libhttpclient-java==4.5.7-1+deb10u1 +libhttpcore-java==4.4.11-1 +libhwloc-dev==1.11.12-3 +libhwloc-plugins==1.11.12-3 +libhwloc5==1.11.12-3 +libiberty-dev==20190122-1 +libibverbs-dev==22.1-1 +libibverbs1==22.1-1 +libice-dev==2:1.0.9-2 +libice6==2:1.0.9-2 +libicu-dev==63.1-6+deb10u3 +libicu63==63.1-6+deb10u3 +libidn11==1.33-2.2 +libidn2-dev==2.0.5-1+deb10u1 +libiec61883-0==1.2.0-3 +libigdgmm5==18.4.1+ds1-1 +libijs-0.35==0.35-14 +libilmbase23==2.2.1-2 +libimagequant0==2.12.2-1.1 +libimport-into-perl==1.002005-1 +libinput-bin==1.12.6-2+deb10u1 +libinput10==1.12.6-2+deb10u1 +libio-async-perl==0.72-1 +libio-html-perl==1.001-1 +libio-prompter-perl==0.004015-1 +libio-pty-perl==1:1.08-1.1+b5 +libio-sessiondata-perl==1.03-1 +libio-socket-ssl-perl==2.060-3 +libio-string-perl==1.08-3 +libio-stringy-perl==2.111-3 +libip4tc-dev==1.8.2-4 +libip4tc0==1.8.2-4 +libip6tc-dev==1.8.2-4 +libip6tc0==1.8.2-4 +libipc-run-perl==20180523.0-1 +libipc-system-simple-perl==1.25-4 +libipt2==2.0-2 +libiptc-dev==1.8.2-4 +libiptc0==1.8.2-4 +libirs-export161==1:9.11.5.P4+dfsg-5.1+deb10u7 +libirs161==1:9.11.5.P4+dfsg-5.1+deb10u7 +libisc-export1100==1:9.11.5.P4+dfsg-5.1+deb10u7 +libisc1100==1:9.11.5.P4+dfsg-5.1+deb10u7 +libisccc-export161==1:9.11.5.P4+dfsg-5.1+deb10u7 +libisccc161==1:9.11.5.P4+dfsg-5.1+deb10u7 +libisccfg-export163==1:9.11.5.P4+dfsg-5.1+deb10u7 +libisccfg163==1:9.11.5.P4+dfsg-5.1+deb10u7 +libisl19==0.20-2 +libitext1-java==1.4-7 +libitm1==8.3.0-6 +libjack-jackd2-0==1.9.12~dfsg-2 +libjansi-java==1.17.1-1 +libjansi-native-java==1.8-1 +libjansson-dev==2.12-1 +libjansson4==2.12-1 +libjaxen-java==1.1.6-4 +libjaxp1.3-java==1.3.05-5 +libjbig0==2.1-3.1+b2 +libjbig2dec0==0.16-1+deb10u1 +libjemalloc-dev==5.1.0-3 +libjemalloc2==5.1.0-3 +libjetty9-java==9.4.16-0+deb10u1 +libjpeg62-turbo==1:1.5.2-2+deb10u1 +libjq1==1.5+dfsg-2+b1 +libjs-bootstrap==3.4.1+dfsg-1 +libjs-jquery==3.3.1~dfsg-3+deb10u1 +libjs-jquery-hotkeys==0~20130707+git2d51e3a9+dfsg-2 +libjs-jquery-isonscreen==1.2.0-1 +libjs-jquery-metadata==12-1.1 +libjs-jquery-tablesorter==1:2.31.1+dfsg1-1 +libjs-jquery-throttle-debounce==1.1+dfsg.1-1 +libjs-modernizr==2.6.2+ds1-3 +libjs-sphinxdoc==1.8.4-1 +libjs-underscore==1.9.1~dfsg-1+deb10u1 +libjson-c-dev==0.12.1+ds-2+deb10u1 +libjson-c3==0.12.1+ds-2+deb10u1 +libjson-glib-1.0-0==1.4.4-2 +libjson-glib-1.0-common==1.4.4-2 +libjson-perl==4.02000-1 +libjson-xs-perl==3.040-1+b1 +libjsoncpp1==1.7.4-3 +libjsp-api-java==2.3.4-2+deb10u1 +libjsr305-java==0.1~+svn49-11 +libjtidy-java==7+svn20110807-5 +libjudy-dev==1.0.5-5 +libjudydebian1==1.0.5-5 +libjxr-tools==1.1-6+b1 +libjxr0==1.1-6+b1 +libk5crypto3==1.17-3+deb10u3 +libkadm5clnt-mit11==1.17-3+deb10u3 +libkadm5srv-mit11==1.17-3+deb10u3 +libkdb5-9==1.17-3+deb10u3 +libkeyutils1==1.6-6 +libkmod2==26-1 +libkpathsea6==2018.20181218.49446-1 +libkrb5-3==1.17-3+deb10u3 +libkrb5-dev==1.17-3+deb10u3 +libkrb5support0==1.17-3+deb10u3 +libksba8==1.3.5-2 +liblab-gamut1==2.40.1-6+deb10u1 +liblcms2-2==2.9-3 +libldap-2.4-2==2.4.47+dfsg-3+deb10u7 +libldap-common==2.4.47+dfsg-3+deb10u7 +libldap2-dev==2.4.47+dfsg-3+deb10u7 +liblilv-0-0==0.24.2~dfsg0-2 +liblist-compare-perl==0.53-1 +liblist-moreutils-perl==0.416-1+b4 +libllvm6.0==1:6.0.1-10 +libllvm7==1:7.0.1-8+deb10u2 +liblmdb0==0.9.22-1 +liblocale-gettext-perl==1.07-3+b4 +liblockfile-bin==1.14-1.1 +liblockfile1==1.14-1.1 +liblog-any-adapter-screen-perl==0.140-1 +liblog-any-perl==1.707-1 +liblog4j1.2-java==1.2.17-8+deb10u2 +liblognorm5==2.0.5-1 +liblqr-1-0==0.4.2-2.1 +liblsan0==8.3.0-6 +libltdl-dev==2.4.6-9 +libltdl7==2.4.6-9 +liblua5.1-0==5.1.5-8.1+b2 +liblua5.1-0-dev==5.1.5-8.1+b2 +liblvm2cmd2.03==2.03.02-3 +liblwp-mediatypes-perl==6.02-1 +liblwp-protocol-https-perl==6.07-2 +liblwres161==1:9.11.5.P4+dfsg-5.1+deb10u7 +liblzma-dev==5.2.4-1+deb10u1 +liblzma5==5.2.4-1+deb10u1 +liblzo2-2==2.10-0.1 +liblzo2-dev==2.10-0.1 +libmagic-mgc==1:5.35-4+deb10u2 +libmagic1==1:5.35-4+deb10u2 +libmagickcore-6.q16-6==8:6.9.10.23+dfsg-2.1+deb10u1 +libmagickcore-6.q16-6-extra==8:6.9.10.23+dfsg-2.1+deb10u1 +libmagickwand-6.q16-6==8:6.9.10.23+dfsg-2.1+deb10u1 +libmail-sendmail-perl==0.80-1 +libmailtools-perl==2.18-1 +libmariadb-dev==1:10.3.34-0+deb10u1 +libmariadb-dev-compat==1:10.3.34-0+deb10u1 +libmariadb3==1:10.3.34-0+deb10u1 +libmaven-archiver-java==3.2.0-2 +libmaven-clean-plugin-java==3.1.0-1 +libmaven-common-artifact-filters-java==3.0.1-3 +libmaven-compiler-plugin-java==3.8.0-2 +libmaven-filtering-java==3.1.1-1 +libmaven-jar-plugin-java==3.1.1-1 +libmaven-parent-java==31-2 +libmaven-plugin-tools-java==3.6.0-1 +libmaven-reporting-api-java==3.0-1 +libmaven-reporting-exec-java==1.4-2 +libmaven-reporting-impl-java==3.0.0-2 +libmaven-resolver-java==1.3.1-1 +libmaven-resources-plugin-java==3.1.0-1 +libmaven-shared-incremental-java==1.1-3 +libmaven-shared-utils-java==3.3.0-1 +libmaven-site-plugin-java==3.6-3 +libmaven3-core-java==3.6.0-1 +libmime-tools-perl==5.509-1 +libmng1==1.0.10+dfsg-3.1+b5 +libmnl-dev==1.0.4-2 +libmodule-implementation-perl==0.09-1 +libmodule-runtime-conflicts-perl==0.003-1 +libmodule-runtime-perl==0.016-1 +libmoo-perl==2.003004-2 +libmoose-perl==2.2011-1+b1 +libmoosex-aliases-perl==0.11-1 +libmount-dev==2.33.1-0.1 +libmp3lame0==3.100-2+b1 +libmpc3==1.1.0-1 +libmpdec2==2.4.2-2 +libmpeg2-4==0.5.1-8 +libmpfr6==4.0.2-1 +libmpg123-0==1.25.10-2 +libmpx2==8.3.0-6 +libmro-compat-perl==0.13-1 +libmtdev1==1.1.5-1+b1 +libmysofa0==0.6~dfsg0-3+deb10u1 +libnamespace-autoclean-perl==0.28-1 +libnamespace-clean-perl==0.27-1 +libnanomsg-dev==1.1.5+dfsg-1 +libnanomsg5==1.1.5+dfsg-1 +libncurses-dev==6.1+20181013-2+deb10u2 +libncurses5-dev==6.1+20181013-2+deb10u2 +libncurses6==6.1+20181013-2+deb10u2 +libnet-dbus-perl==1.1.0-5+b1 +libnet-dns-perl==1.19-1 +libnet-dns-sec-perl==1.11-1 +libnet-domain-tld-perl==1.75-1 +libnet-http-perl==6.18-1 +libnet-ip-perl==1.26-2 +libnet-libidn-perl==0.12.ds-3+b1 +libnet-smtp-ssl-perl==1.04-1 +libnet-ssleay-perl==1.85-2+b1 +libnetfilter-conntrack-dev==1.0.7-1 +libnetfilter-conntrack3==1.0.7-1 +libnetpbm10==2:10.0-15.3+b2 +libnewt-dev==0.52.20-8 +libnewt0.52==0.52.20-8 +libnfnetlink-dev==1.0.1-3+b1 +libnfnetlink0==1.0.1-3+b1 +libnftables0==0.9.0-2 +libnftnl-dev==1.1.2-2 +libnftnl11==1.1.2-2 +libnghttp2-14==1.36.0-2+deb10u1 +libnl-3-200==3.4.0-1 +libnl-3-dev==3.4.0-1 +libnl-route-3-200==3.4.0-1 +libnl-route-3-dev==3.4.0-1 +libnorm-dev==1.5.8+dfsg2-1 +libnorm1==1.5.8+dfsg2-1 +libnpth0==1.6-1 +libnspr4==2:4.20-1 +libnss-systemd==241-7~deb10u8 +libnss3==2:3.42.1-1+deb10u5 +libnuma-dev==2.0.12-1 +libnuma1==2.0.12-1 +libnumber-compare-perl==0.03-1 +libnumber-range-perl==0.12-1 +libobjc-8-dev==8.3.0-6 +libobjc4==8.3.0-6 +libogg0==1.3.2-1+b1 +libomp-7-dev==1:7.0.1-8+deb10u2 +libomp5-7==1:7.0.1-8+deb10u2 +libonig5==6.9.1-1 +libopencore-amrnb0==0.1.3-2.1+b2 +libopencore-amrwb0==0.1.3-2.1+b2 +libopencsd-dev==0.10.1-1 +libopencsd0==0.10.1-1 +libopenexr23==2.2.1-4.1+deb10u1 +libopengl0==1.1.0-1 +libopenjp2-7==2.3.0-2+deb10u2 +libopenmpi-dev==3.1.3-11 +libopenmpi3==3.1.3-11 +libopenmpt0==0.4.3-1+deb10u1 +libopts25==1:5.18.12-4 +libopts25-dev==1:5.18.12-4 +libopus0==1.3-1 +liborc-0.4-0==1:0.4.28-3.1 +liboro-java==2.0.8a-13 +libosp5==1.5.2-13+b1 +libossp-uuid-perl==1.6.2-1.5+b7 +libossp-uuid16==1.6.2-1.5+b7 +libostyle1c2==1.4devel1-21.3+b1 +libp11-kit-dev==0.23.15-2+deb10u1 +libpackage-deprecationmanager-perl==0.17-1 +libpackage-stash-perl==0.38-1 +libpackage-stash-xs-perl==0.29-1 +libpackagekit-glib2-18==1.1.12-5 +libpadwalker-perl==2.3-1+b1 +libpam-systemd==241-7~deb10u8 +libpam0g-dev==1.3.1-5 +libpango-1.0-0==1.42.4-8~deb10u1 +libpango1.0-dev==1.42.4-8~deb10u1 +libpangocairo-1.0-0==1.42.4-8~deb10u1 +libpangoft2-1.0-0==1.42.4-8~deb10u1 +libpangoxft-1.0-0==1.42.4-8~deb10u1 +libpaper-utils==1.1.28 +libpaper1==1.1.28 +libparams-classify-perl==0.015-1+b1 +libparams-util-perl==1.07-3+b4 +libparams-validate-perl==1.29-1+b1 +libparboiled-java==1.1.7-2 +libparse-debianchangelog-perl==1.2.0-13 +libpath-iterator-rule-perl==1.014-1 +libpath-tiny-perl==0.108-1 +libpathplan4==2.40.1-6+deb10u1 +libpcap-dev==1.8.1-6+deb10u1 +libpcap0.8==1.8.1-6+deb10u1 +libpcap0.8-dev==1.8.1-6+deb10u1 +libpci-dev==1:3.5.2-1 +libpci3==1:3.5.2-1 +libpciaccess0==0.14-1 +libpcre16-3==2:8.39-12 +libpcre2-16-0==10.32-5 +libpcre2-32-0==10.32-5 +libpcre2-8-0==10.32-5 +libpcre2-dev==10.32-5 +libpcre2-posix0==10.32-5 +libpcre3-dev==2:8.39-12 +libpcre32-3==2:8.39-12 +libpcrecpp0v5==2:8.39-12 +libpcsclite-dev==1.8.24-1 +libpcsclite1==1.8.24-1 +libpegdown-java==1.6.0-1 +libperl-dev==5.28.1-6+deb10u1 +libperl5.28==5.28.1-6+deb10u1 +libperlio-gzip-perl==0.19-1+b5 +libpgm-5.2-0==5.2.122~dfsg-3 +libpgm-dev==5.2.122~dfsg-3 +libpipeline1==1.5.1-2 +libpixman-1-0==0.36.0-1 +libpixman-1-dev==0.36.0-1 +libplexus-ant-factory-java==1.0~alpha2.1-4 +libplexus-archiver-java==3.6.0-2 +libplexus-bsh-factory-java==1.0~alpha7-4 +libplexus-build-api-java==0.0.7-3 +libplexus-cipher-java==1.7-3 +libplexus-classworlds-java==2.6.0-1 +libplexus-compiler-java==2.8.5-1 +libplexus-component-annotations-java==1.7.1-7 +libplexus-container-default-java==1.7.1-7 +libplexus-container-default1.5-java==1.7.1-7 +libplexus-i18n-java==1.0-beta-10-5 +libplexus-interpolation-java==1.25-1 +libplexus-io-java==3.1.1-1 +libplexus-languages-java==0.9.10-1 +libplexus-sec-dispatcher-java==1.4-4 +libplexus-utils2-java==3.1.1-1 +libplexus-velocity-java==1.2-3 +libpmix2==3.1.2-3 +libpng-dev==1.6.36-6 +libpng-tools==1.6.36-6 +libpng16-16==1.6.36-6 +libpod-constants-perl==0.19-1 +libpolkit-agent-1-0==0.105-25+deb10u1 +libpolkit-backend-1-0==0.105-25+deb10u1 +libpolkit-gobject-1-0==0.105-25+deb10u1 +libpopt0==1.16-12 +libpostproc55==7:4.1.9-0+deb10u1 +libpotrace0==1.15-1 +libprocps7==2:3.3.15-2 +libprotobuf-c1==1.3.1-1+b1 +libprotobuf-dev==3.6.1.3-2 +libprotobuf-lite17==3.6.1.3-2 +libprotobuf17==3.6.1.3-2 +libprotoc17==3.6.1.3-2 +libproxy1v5==0.4.15-5+deb10u1 +libpsl5==0.20.2-2 +libpsm-infinipath1==3.3+20.604758e7-6 +libpsm2-2==11.2.78-1 +libptexenc1==2018.20181218.49446-1 +libpthread-stubs0-dev==0.4-1 +libpulse0==12.2-4+deb10u1 +libpython-all-dev==2.7.16-1 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libpython3-all-dbg==3.7.3-1 +libpython3-all-dev==3.7.3-1 +libpython3-dbg==3.7.3-1 +libpython3-dev==3.7.3-1 +libpython3-stdlib==3.7.3-1 +libpython3.7==3.7.3-2+deb10u3 +libpython3.7-dbg==3.7.3-2+deb10u3 +libpython3.7-dev==3.7.3-2+deb10u3 +libpython3.7-minimal==3.7.3-2+deb10u3 +libpython3.7-stdlib==3.7.3-2+deb10u3 +libqdox-java==1.12.1-3 +libqdox2-java==2.0~M10-1 +libqt4-dbus==4:4.8.7+dfsg-18+deb10u1 +libqt4-declarative==4:4.8.7+dfsg-18+deb10u1 +libqt4-designer==4:4.8.7+dfsg-18+deb10u1 +libqt4-dev==4:4.8.7+dfsg-18+deb10u1 +libqt4-dev-bin==4:4.8.7+dfsg-18+deb10u1 +libqt4-help==4:4.8.7+dfsg-18+deb10u1 +libqt4-network==4:4.8.7+dfsg-18+deb10u1 +libqt4-opengl==4:4.8.7+dfsg-18+deb10u1 +libqt4-opengl-dev==4:4.8.7+dfsg-18+deb10u1 +libqt4-qt3support==4:4.8.7+dfsg-18+deb10u1 +libqt4-script==4:4.8.7+dfsg-18+deb10u1 +libqt4-scripttools==4:4.8.7+dfsg-18+deb10u1 +libqt4-sql==4:4.8.7+dfsg-18+deb10u1 +libqt4-sql-mysql==4:4.8.7+dfsg-18+deb10u1 +libqt4-svg==4:4.8.7+dfsg-18+deb10u1 +libqt4-test==4:4.8.7+dfsg-18+deb10u1 +libqt4-xml==4:4.8.7+dfsg-18+deb10u1 +libqt4-xmlpatterns==4:4.8.7+dfsg-18+deb10u1 +libqt5concurrent5==5.11.3+dfsg1-1+deb10u4 +libqt5core5a==5.11.3+dfsg1-1+deb10u4 +libqt5dbus5==5.11.3+dfsg1-1+deb10u4 +libqt5gui5==5.11.3+dfsg1-1+deb10u4 +libqt5network5==5.11.3+dfsg1-1+deb10u4 +libqt5opengl5==5.11.3+dfsg1-1+deb10u4 +libqt5opengl5-dev==5.11.3+dfsg1-1+deb10u4 +libqt5printsupport5==5.11.3+dfsg1-1+deb10u4 +libqt5sql5==5.11.3+dfsg1-1+deb10u4 +libqt5sql5-sqlite==5.11.3+dfsg1-1+deb10u4 +libqt5svg5==5.11.3-2 +libqt5test5==5.11.3+dfsg1-1+deb10u4 +libqt5widgets5==5.11.3+dfsg1-1+deb10u4 +libqt5xml5==5.11.3+dfsg1-1+deb10u4 +libqtcore4==4:4.8.7+dfsg-18+deb10u1 +libqtdbus4==4:4.8.7+dfsg-18+deb10u1 +libqtgui4==4:4.8.7+dfsg-18+deb10u1 +libquadmath0==8.3.0-6 +libraw1394-11==2.1.2-1+b1 +librdmacm1==22.1-1 +libreadline-dev==7.0-5 +libreadline5==5.2+dfsg-3+b13 +libreadline7==7.0-5 +libreadonly-perl==2.050-1 +libref-util-perl==0.204-1 +libref-util-xs-perl==0.117-1+b1 +libregexp-assemble-perl==0.36-1 +libregexp-pattern-license-perl==3.0.31-4 +librest-0.7-0==0.8.1-1 +librhash0==1.3.8-1 +librole-tiny-perl==2.000006-1 +librrd-dev==1.7.1-2 +librrd8==1.7.1-2 +librsvg2-2==2.44.10-2.1 +librsvg2-common==2.44.10-2.1 +librtmp1==2.4+20151223.gitfa8646d.1-2 +librubberband2==1.8.1-7 +libruby2.5==2.5.5-3+deb10u4 +libsamplerate0==0.1.9-2 +libsasl2-2==2.1.27+dfsg-1+deb10u2 +libsasl2-modules==2.1.27+dfsg-1+deb10u2 +libsasl2-modules-db==2.1.27+dfsg-1+deb10u2 +libsaxon-java==1:6.5.5-12 +libselinux1-dev==2.8-1+b1 +libsensors-config==1:3.5.0-3 +libsensors4-dev==1:3.5.0-3 +libsensors5==1:3.5.0-3 +libsepol1-dev==2.8-1 +libserd-0-0==0.28.0~dfsg0-1 +libsereal-decoder-perl==4.005+ds-1+b1 +libsereal-encoder-perl==4.005+ds-1+b1 +libsereal-perl==4.005-1 +libservlet-api-java==4.0.1-2 +libservlet3.1-java==1:4.0.1-2 +libsgmls-perl==1.03ii-36 +libshine3==3.1.1-2 +libshout3==2.4.1-2 +libsidplay1v5==1.36.59-11 +libsigsegv2==2.12-2 +libsisu-guice-java==4.2.0-1 +libsisu-inject-java==0.3.3-1 +libsisu-ioc-java==2.3.0-11 +libsisu-plexus-java==0.3.3-3 +libslang2==2.3.2-2 +libslang2-dev==2.3.2-2 +libslf4j-java==1.7.25-3 +libsm-dev==2:1.2.3-1 +libsm6==2:1.2.3-1 +libsnappy-java==1.1.7.2-1 +libsnappy-jni==1.1.7.2-1 +libsnappy1v5==1.1.7-1 +libsndfile1==1.0.28-6+deb10u1 +libsnmp-base==5.7.3+dfsg-5+deb10u2 +libsnmp-dev==5.7.3+dfsg-5+deb10u2 +libsnmp30==5.7.3+dfsg-5+deb10u2 +libsoap-lite-perl==1.27-1 +libsodium-dev==1.0.17-1 +libsodium23==1.0.17-1 +libsord-0-0==0.16.0~dfsg0-1+b1 +libsort-key-perl==1.33-2+b1 +libsort-versions-perl==1.62-1 +libsoup-gnome2.4-1==2.64.2-2 +libsoup2.4-1==2.64.2-2 +libsoxr0==0.1.2-3 +libspeex1==1.2~rc1.2-1+b2 +libspice-server1==0.14.0-1.3+deb10u1 +libsqlite3-0==3.27.2-3+deb10u1 +libsratom-0-0==0.6.0~dfsg0-1 +libssh-gcrypt-4==0.8.7-1+deb10u1 +libssh2-1==1.8.0-2.1 +libssl-dev==1.1.1n-0+deb10u2 +libssl1.1==1.1.1n-0+deb10u2 +libstdc++-8-dev==8.3.0-6 +libstemmer0d==0+svn585-1+b2 +libstrictures-perl==2.000005-1 +libstring-copyright-perl==0.003006-1 +libstring-escape-perl==2010.002-2 +libstring-shellquote-perl==1.04-1 +libstruct-dumb-perl==0.09-1 +libsub-exporter-perl==0.987-1 +libsub-exporter-progressive-perl==0.001013-1 +libsub-identify-perl==0.14-1+b1 +libsub-install-perl==0.928-1 +libsub-name-perl==0.21-1+b3 +libsub-quote-perl==2.005001-1 +libsubunit-dev==1.3.0-1 +libsubunit0==1.3.0-1 +libsurefire-java==2.22.1-1 +libswitch-perl==2.17-2 +libswresample3==7:4.1.9-0+deb10u1 +libswscale5==7:4.1.9-0+deb10u1 +libsynctex2==2018.20181218.49446-1 +libsys-hostname-long-perl==1.5-1 +libsystemd-dev==241-7~deb10u8 +libtag1v5==1.11.1+dfsg.1-0.3+deb10u1 +libtag1v5-vanilla==1.11.1+dfsg.1-0.3+deb10u1 +libtask-weaken-perl==1.06-1 +libtasn1-6-dev==4.13-3 +libtasn1-doc==4.13-3 +libtcl8.6==8.6.9+dfsg-2 +libtcmalloc-minimal4==2.7-1 +libteckit0==2.5.8+ds2-5 +libtemplate-perl==2.27-1+b1 +libterm-readkey-perl==2.38-1 +libtest-fatal-perl==0.014-1 +libtest-refcount-perl==0.08-3 +libtexlua52==2018.20181218.49446-1 +libtexlua53==2018.20181218.49446-1 +libtexluajit2==2018.20181218.49446-1 +libtext-charwidth-perl==0.04-7.1+b1 +libtext-glob-perl==0.10-1 +libtext-iconv-perl==1.7-5+b7 +libtext-levenshtein-perl==0.13-1 +libtext-unidecode-perl==1.30-1 +libtext-wrapi18n-perl==0.06-7.1 +libthai-data==0.1.28-2 +libthai0==0.1.28-2 +libtheora0==1.1.1+dfsg.1-15 +libtie-ixhash-perl==1.23-2 +libtiff5==4.1.0+git191117-2~deb10u4 +libtimedate-perl==2.3000-2+deb10u1 +libtinyxml2-6a==7.0.0+dfsg-1 +libtinyxml2-dev==7.0.0+dfsg-1 +libtk8.6==8.6.9-2 +libtool==2.4.6-9 +libtool-bin==2.4.6-9 +libtry-tiny-perl==0.30-1 +libtsan0==8.3.0-6 +libtwolame0==0.3.13-4 +libtype-tiny-perl==1.004004-1 +libtype-tiny-xs-perl==0.014-1+b1 +libtypes-serialiser-perl==1.0-1 +libubsan1==8.3.0-6 +libuchardet0==0.0.6-3 +libudev-dev==241-7~deb10u8 +libunbound8==1.9.0-2+deb10u2 +libunicode-utf8-perl==0.62-1 +libunwind-dev==1.2.1-10~deb10u1 +libunwind8==1.2.1-10~deb10u1 +liburi-perl==1.76-1 +libusb-0.1-4==2:0.1.12-32 +libusb-1.0-0==2:1.0.22-2 +libusb-1.0-0-dev==2:1.0.22-2 +libusb-1.0-doc==2:1.0.22-2 +libusb-dev==2:0.1.12-32 +libusbredirparser1==0.8.0-1 +libutempter0==1.1.6-3 +libuv1==1.24.1-1+deb10u1 +libv4l-0==1.16.3-3 +libv4lconvert0==1.16.3-3 +libva-drm2==2.4.0-1 +libva-x11-2==2.4.0-1 +libva2==2.4.0-1 +libvariable-magic-perl==0.62-1+b1 +libvdeplug2==2.3.2+r586-2.2 +libvdpau-va-gl1==0.4.2-1+b1 +libvdpau1==1.1.1-10 +libvelocity-tools-java==2.0-7 +libvidstab1.1==1.1.0-2 +libvirglrenderer0==0.7.0-2 +libvirt-clients==5.0.0-4+deb10u1 +libvirt0==5.0.0-4+deb10u1 +libvisual-0.4-0==0.4.0-15 +libvorbis0a==1.3.6-2 +libvorbisenc2==1.3.6-2 +libvorbisfile3==1.3.6-2 +libvpx5==1.7.0-3+deb10u1 +libvte-2.91-0==0.54.2-2 +libvte-2.91-common==0.54.2-2 +libvulkan-dev==1.1.97-2 +libvulkan1==1.1.97-2 +libwacom-bin==0.32-1 +libwacom-common==0.32-1 +libwacom2==0.32-1 +libwagon-file-java==3.3.1-2 +libwagon-http-shaded-java==3.3.1-2 +libwagon-provider-api-java==3.3.1-2 +libwant-perl==0.29-1+b4 +libwavpack1==5.1.0-6+deb10u1 +libwayland-bin==1.16.0-1 +libwayland-client0==1.16.0-1 +libwayland-cursor0==1.16.0-1 +libwayland-dev==1.16.0-1 +libwayland-egl1==1.16.0-1 +libwayland-server0==1.16.0-1 +libwebp6==0.6.1-2+deb10u1 +libwebpdemux2==0.6.1-2+deb10u1 +libwebpmux3==0.6.1-2+deb10u1 +libwebsocket-api-java==1.1-1+deb10u1 +libwmf0.2-7==0.2.8.4-14 +libwoff1==1.0.2-1 +libwrap0==7.6.q-28 +libwrap0-dev==7.6.q-28 +libwww-perl==6.36-2 +libwww-robotrules-perl==6.02-1 +libx11-6==2:1.6.7-1+deb10u2 +libx11-data==2:1.6.7-1+deb10u2 +libx11-dev==2:1.6.7-1+deb10u2 +libx11-protocol-perl==0.56-7 +libx11-xcb-dev==2:1.6.7-1+deb10u2 +libx11-xcb1==2:1.6.7-1+deb10u2 +libx264-155==2:0.155.2917+git0a84d98-2 +libx265-165==2.9-4 +libx32asan5==8.3.0-6 +libx32atomic1==8.3.0-6 +libx32gcc-8-dev==8.3.0-6 +libx32gcc1==1:8.3.0-6 +libx32gomp1==8.3.0-6 +libx32itm1==8.3.0-6 +libx32quadmath0==8.3.0-6 +libx32stdc++6==8.3.0-6 +libx32ubsan1==8.3.0-6 +libxalan2-java==2.7.2-2 +libxapian30==1.4.11-1 +libxau-dev==1:1.0.8-1+b2 +libxau6==1:1.0.8-1+b2 +libxaw7==2:1.0.13-1+b2 +libxbean-reflect-java==4.5-8 +libxcb-dri2-0==1.13.1-2 +libxcb-dri2-0-dev==1.13.1-2 +libxcb-dri3-0==1.13.1-2 +libxcb-dri3-dev==1.13.1-2 +libxcb-glx0==1.13.1-2 +libxcb-glx0-dev==1.13.1-2 +libxcb-icccm4==0.4.1-1.1 +libxcb-image0==0.4.0-1+b2 +libxcb-keysyms1==0.4.0-1+b2 +libxcb-present-dev==1.13.1-2 +libxcb-present0==1.13.1-2 +libxcb-randr0==1.13.1-2 +libxcb-randr0-dev==1.13.1-2 +libxcb-render-util0==0.3.9-1+b1 +libxcb-render0==1.13.1-2 +libxcb-render0-dev==1.13.1-2 +libxcb-shape0==1.13.1-2 +libxcb-shape0-dev==1.13.1-2 +libxcb-shm0==1.13.1-2 +libxcb-shm0-dev==1.13.1-2 +libxcb-sync-dev==1.13.1-2 +libxcb-sync1==1.13.1-2 +libxcb-util0==0.3.8-3+b2 +libxcb-xfixes0==1.13.1-2 +libxcb-xfixes0-dev==1.13.1-2 +libxcb-xinerama0==1.13.1-2 +libxcb-xkb1==1.13.1-2 +libxcb1==1.13.1-2 +libxcb1-dev==1.13.1-2 +libxcomposite-dev==1:0.4.4-2 +libxcomposite1==1:0.4.4-2 +libxcursor-dev==1:1.1.15-2 +libxcursor1==1:1.1.15-2 +libxdamage-dev==1:1.1.4-3+b3 +libxdamage1==1:1.1.4-3+b3 +libxdelta2==1.1.3-9.2 +libxdmcp-dev==1:1.1.2-3 +libxdmcp6==1:1.1.2-3 +libxdot4==2.40.1-6+deb10u1 +libxencall1==4.11.4+107-gef32c7afa2-1 +libxendevicemodel1==4.11.4+107-gef32c7afa2-1 +libxenevtchn1==4.11.4+107-gef32c7afa2-1 +libxenforeignmemory1==4.11.4+107-gef32c7afa2-1 +libxengnttab1==4.11.4+107-gef32c7afa2-1 +libxenmisc4.11==4.11.4+107-gef32c7afa2-1 +libxenstore3.0==4.11.4+107-gef32c7afa2-1 +libxentoolcore1==4.11.4+107-gef32c7afa2-1 +libxentoollog1==4.11.4+107-gef32c7afa2-1 +libxerces2-java==2.12.0-1 +libxext-dev==2:1.3.3-1+b2 +libxext6==2:1.3.3-1+b2 +libxfixes-dev==1:5.0.3-1 +libxfixes3==1:5.0.3-1 +libxft-dev==2.3.2-2 +libxft2==2.3.2-2 +libxi-dev==2:1.7.9-1 +libxi6==2:1.7.9-1 +libxinerama-dev==2:1.1.4-2 +libxinerama1==2:1.1.4-2 +libxkbcommon-dev==0.8.2-1 +libxkbcommon-x11-0==0.8.2-1 +libxkbcommon0==0.8.2-1 +libxml-commons-external-java==1.4.01-3 +libxml-commons-resolver1.1-java==1.2-9 +libxml-libxml-perl==2.0134+dfsg-1 +libxml-namespacesupport-perl==1.12-1 +libxml-parser-perl==2.44-4 +libxml-sax-base-perl==1.09-1 +libxml-sax-expat-perl==0.51-1 +libxml-sax-perl==1.00+dfsg-1 +libxml-simple-perl==2.25-1 +libxml-twig-perl==1:3.50-1.1 +libxml-xpathengine-perl==0.14-1 +libxml2==2.9.4+dfsg1-7+deb10u4 +libxml2-dev==2.9.4+dfsg1-7+deb10u4 +libxml2-utils==2.9.4+dfsg1-7+deb10u4 +libxmlgraphics-commons-java==2.3-1+deb10u1 +libxmlrpc-lite-perl==0.717-2 +libxmu6==2:1.1.2-2+b3 +libxmuu1==2:1.1.2-2+b3 +libxpm4==1:3.5.12-1 +libxrandr-dev==2:1.5.1-1 +libxrandr2==2:1.5.1-1 +libxrender-dev==1:0.9.10-1 +libxrender1==1:0.9.10-1 +libxshmfence-dev==1.3-1 +libxshmfence1==1.3-1 +libxslt1.1==1.1.32-2.2~deb10u1 +libxss1==1:1.2.3-1 +libxt-dev==1:1.1.5-1+b3 +libxt6==1:1.1.5-1+b3 +libxtables-dev==1.8.2-4 +libxtst-dev==2:1.2.3-1 +libxtst6==2:1.2.3-1 +libxv1==2:1.0.11-1 +libxvidcore4==2:1.3.5-1 +libxxf86dga1==2:1.1.4-1+b3 +libxxf86vm-dev==1:1.1.4-1+b2 +libxxf86vm1==1:1.1.4-1+b2 +libxxhash0==0.6.5-2 +libxz-java==1.8-2 +libyajl2==2.1.0-3 +libyaml-0-2==0.2.1-1 +libyaml-dev==0.2.1-1 +libyaml-libyaml-perl==0.76+repack-1 +libzmq3-dev==4.3.1-4+deb10u2 +libzmq5==4.3.1-4+deb10u2 +libzvbi-common==0.2.35-16 +libzvbi0==0.2.35-16 +libzzip-0-13==0.13.62-3.2+deb10u1 +licensecheck==3.0.31-3 +lintian==2.15.0 +linux-compiler-gcc-8-x86==4.19.235-1 +linux-headers-4.19.0-20-amd64==4.19.235-1 +linux-headers-4.19.0-20-common==4.19.235-1 +linux-headers-amd64==4.19+105+deb10u15 +linux-kbuild-4.19==4.19.235-1 +linux-libc-dev==4.19.235-1 +linuxdoc-tools==0.9.73-2 +llvm-7==1:7.0.1-8+deb10u2 +llvm-7-dev==1:7.0.1-8+deb10u2 +llvm-7-runtime==1:7.0.1-8+deb10u2 +lmodern==2.004.5-6 +locales==2.28-10+deb10u1 +logrotate==3.14.0-4 +lsb-base==10.2019051400 +lsb-release==10.2019051400 +lsof==4.91+dfsg-1 +lua-bitop==1.0.2-5 +lua-bitop-dev==1.0.2-5 +lua-cjson==2.1.0+dfsg-2.1 +lua-cjson-dev==2.1.0+dfsg-2.1 +lvm2==2.03.02-3 +lynx==2.8.9rel.1-3+deb10u1 +lynx-common==2.8.9rel.1-3+deb10u1 +m4==1.4.18-2 +make==4.2.1-1.2 +man-db==2.8.5-2 +man2html-base==1.6g-11 +manpages==4.16-2 +manpages-dev==4.16-2 +mariadb-common==1:10.3.34-0+deb10u1 +maven==3.6.0-1 +maven-debian-helper==2.3.2 +maven-repo-helper==1.9.3 +mesa-common-dev==18.3.6-2+deb10u1 +mesa-va-drivers==18.3.6-2+deb10u1 +mesa-vdpau-drivers==18.3.6-2+deb10u1 +mime-support==3.62 +module-assistant==0.11.10 +mysql-common==5.8+1.0.5 +ncurses-term==6.1+20181013-2+deb10u2 +netbase==5.6 +netpbm==2:10.0-15.3+b2 +nettle-dev==3.4.1-1+deb10u1 +nftables==0.9.0-2 +ocl-icd-libopencl1==2.2.12-2 +openjade==1.4devel1-21.3+b1 +openjdk-11-jdk==11.0.15+10-1~deb10u1 +openjdk-11-jdk-headless==11.0.15+10-1~deb10u1 +openjdk-11-jre==11.0.15+10-1~deb10u1 +openjdk-11-jre-headless==11.0.15+10-1~deb10u1 +openmpi-bin==3.1.3-11 +openmpi-common==3.1.3-11 +opensp==1.5.2-13+b1 +openssh-client==1:7.9p1-10+deb10u2 +openssh-server==1:7.9p1-10+deb10u2 +openssh-sftp-server==1:7.9p1-10+deb10u2 +openssl==1.1.1n-0+deb10u2 +ovmf==0~20181115.85588389-3+deb10u3 +packagekit==1.1.12-5 +packagekit-tools==1.1.12-5 +pango1.0-tools==1.42.4-8~deb10u1 +patch==2.7.6-3+deb10u1 +patchutils==0.3.4-2 +pbuilder==0.230.4 +pbzip2==1.1.9-1+b1 +perl==5.28.1-6+deb10u1 +perl-modules-5.28==5.28.1-6+deb10u1 +perl-openssl-defaults==3 +php-cli==2:7.3+69 +php-codecoverage==6.1.4+dfsg-1 +php-common==2:69 +php-deepcopy==1.8.1-1 +php-doctrine-instantiator==1.1.0-2 +php-file-iterator==2.0.2-1 +php-mbstring==2:7.3+69 +php-pear==1:1.10.6+submodules+notgz-1.1+deb10u2 +php-phar-io-manifest==1.0.3-1 +php-phar-io-version==2.0.1-1 +php-phpdocumentor-reflection-common==1.0.1-1 +php-phpdocumentor-reflection-docblock==4.3.0-1 +php-phpdocumentor-type-resolver==0.4.0-2 +php-phpspec-prophecy==1.8.0-1 +php-text-template==1.2.1-2 +php-timer==2.1.1-1 +php-token-stream==3.0.1-1 +php-tokenizer==1.1.0-1 +php-webmozart-assert==1.4.0-3 +php-xml==2:7.3+69 +php7.3-cli==7.3.31-1~deb10u1 +php7.3-common==7.3.31-1~deb10u1 +php7.3-json==7.3.31-1~deb10u1 +php7.3-mbstring==7.3.31-1~deb10u1 +php7.3-opcache==7.3.31-1~deb10u1 +php7.3-readline==7.3.31-1~deb10u1 +php7.3-xml==7.3.31-1~deb10u1 +phpunit==7.5.6-1 +phpunit-code-unit-reverse-lookup==1.0.1-1 +phpunit-comparator==3.0.2-1 +phpunit-diff==3.0.2-1 +phpunit-environment==4.1.0-1 +phpunit-exporter==3.1.0-2 +phpunit-global-state==2.0.0really2.0.0-2 +phpunit-object-enumerator==3.0.3-3 +phpunit-object-reflector==1.1.1-2 +phpunit-recursion-context==3.0.0-2 +phpunit-resource-operations==2.0.1-1 +phpunit-version==2.0.1-1 +pigz==2.4-1 +pinentry-curses==1.1.0-2 +pkg-config==0.29-6 +pkg-php-tools==1.37 +po-debconf==1.0.21 +policykit-1==0.105-25+deb10u1 +poppler-data==0.4.9-2 +pps-tools==1.0.2-1 +preview-latex-style==11.91-2 +pristine-tar==1.46 +procmail==3.22-26 +procps==2:3.3.15-2 +protobuf-compiler==3.6.1.3-2 +psmisc==23.2-1+deb10u1 +psutils==1.17.dfsg-4 +publicsuffix==20211109.1735-0+deb10u1 +pylint==1.9.4-1 +python==2.7.16-1 +python-alabaster==0.7.8-1 +python-all==2.7.16-1 +python-all-dev==2.7.16-1 +python-apt-common==1.8.4.3 +python-asn1crypto==0.24.0-1 +python-astroid==1.6.5-3 +python-atomicwrites==1.1.5-2 +python-attr==18.2.0-1 +python-automat==0.6.0-1 +python-babel==2.6.0+dfsg.1-1+deb10u1 +python-babel-localedata==2.6.0+dfsg.1-1+deb10u1 +python-backports.functools-lru-cache==1.5-3 +python-bs4==4.7.1-1 +python-certifi==2018.8.24-1 +python-cffi-backend==1.12.2-1 +python-chardet==3.0.4-3 +python-click==7.0-1 +python-colorama==0.3.7-1 +python-concurrent.futures==3.2.0-2 +python-configparser==3.5.0b2-1 +python-constantly==15.1.0-1 +python-cov-core==1.15.0-2 +python-coverage==4.5.2+dfsg.1-1 +python-crypto==2.6.1-9+b1 +python-cryptography==2.6.1-3+deb10u2 +python-dbus==1.2.8-3 +python-dev==2.7.16-1 +python-docutils==0.14+dfsg-4 +python-egenix-mxdatetime==3.2.9-1 +python-egenix-mxtools==3.2.9-1 +python-entrypoints==0.3-1 +python-enum34==1.1.6-2 +python-funcsigs==1.0.2-4 +python-gi==3.30.4-1 +python-html5lib==1.0.1-1 +python-hyperlink==17.3.1-2 +python-idna==2.6-1 +python-imagesize==1.0.0-1 +python-incremental==16.10.1-3 +python-ipaddr==2.2.0-2 +python-ipaddress==1.0.17-1 +python-isort==4.3.4+ds1-1.1 +python-jinja2==2.10-2 +python-keyring==17.1.1-1 +python-keyrings.alt==3.1.1-1 +python-lazy-object-proxy==1.3.1-1+b1 +python-logilab-common==1.4.2-1 +python-lxml==4.3.2-1+deb10u4 +python-markupsafe==1.1.0-1 +python-mccabe==0.6.1-2 +python-minimal==2.7.16-1 +python-mock==2.0.0-4 +python-more-itertools==4.2.0-1 +python-nose2==0.8.0-1 +python-olefile==0.46-1 +python-openssl==19.0.0-1 +python-packaging==19.0-1 +python-parse==1.6.6-0.1 +python-pathlib2==2.3.3-1 +python-pbr==4.2.0-5 +python-pil==5.4.1-2+deb10u3 +python-pip==18.1-5 +python-pip-whl==18.1-5 +python-pkg-resources==40.8.0-1 +python-pluggy==0.8.0-1 +python-py==1.7.0-2 +python-pyasn1==0.4.2-3 +python-pyasn1-modules==0.2.1-0.2 +python-pygments==2.3.1+dfsg-1+deb10u2 +python-pyparsing==2.2.0+dfsg1-2 +python-pytest==3.10.1-2 +python-pytest-cov==2.6.0-1 +python-requests==2.21.0-1 +python-roman==2.0.0-3 +python-scandir==1.9.0-2 +python-secretstorage==2.3.1-2 +python-service-identity==16.0.0-2 +python-setuptools==40.8.0-1 +python-singledispatch==3.4.0.3-2 +python-six==1.12.0-1 +python-soupsieve==1.8+dfsg-1 +python-sphinx==1.8.4-1 +python-stdeb==0.8.5-1 +python-tk==2.7.16-2 +python-twisted==18.9.0-3 +python-twisted-bin==18.9.0-3 +python-twisted-core==18.9.0-3 +python-typing==3.6.6-1 +python-tz==2019.1-1 +python-urllib3==1.24.1-1 +python-webencodings==0.5.1-1 +python-wheel==0.32.3-2 +python-wrapt==1.10.11-1 +python-xdg==0.25-5 +python-zope.interface==4.3.2-1+b2 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +python3==3.7.3-1 +python3-alabaster==0.7.8-1 +python3-all==3.7.3-1 +python3-all-dbg==3.7.3-1 +python3-all-dev==3.7.3-1 +python3-apt==1.8.4.3 +python3-asn1crypto==0.24.0-1 +python3-atomicwrites==1.1.5-2 +python3-attr==18.2.0-1 +python3-babel==2.6.0+dfsg.1-1+deb10u1 +python3-certifi==2018.8.24-1 +python3-cffi-backend==1.12.2-1 +python3-chardet==3.0.4-3 +python3-cov-core==1.15.0-2 +python3-coverage==4.5.2+dfsg.1-1 +python3-crypto==2.6.1-9+b1 +python3-cryptography==2.6.1-3+deb10u2 +python3-dateutil==2.7.3-3 +python3-dbg==3.7.3-1 +python3-dbus==1.2.8-3 +python3-debian==0.1.35 +python3-dev==3.7.3-1 +python3-distro-info==0.21 +python3-distutils==3.7.3-1 +python3-docutils==0.14+dfsg-4 +python3-entrypoints==0.3-1 +python3-gi==3.30.4-1 +python3-gpg==1.12.0-6 +python3-idna==2.6-1 +python3-imagesize==1.0.0-1 +python3-jinja2==2.10-2 +python3-keyring==17.1.1-1 +python3-keyrings.alt==3.1.1-1 +python3-lib2to3==3.7.3-1 +python3-magic==2:0.4.15-2 +python3-mako==1.0.7+ds1-1 +python3-markdown==3.0.1-3 +python3-markupsafe==1.1.0-1 +python3-minimal==3.7.3-1 +python3-mock==2.0.0-4 +python3-more-itertools==4.2.0-1 +python3-nose2==0.8.0-1 +python3-olefile==0.46-1 +python3-packaging==19.0-1 +python3-pbr==4.2.0-5 +python3-pil==5.4.1-2+deb10u3 +python3-pip==18.1-5 +python3-pkg-resources==40.8.0-1 +python3-pluggy==0.8.0-1 +python3-py==1.7.0-2 +python3-pycurl==7.43.0.2-0.1 +python3-pygments==2.3.1+dfsg-1+deb10u2 +python3-pyparsing==2.2.0+dfsg1-2 +python3-pytest==3.10.1-2 +python3-pytest-cov==2.6.0-1 +python3-requests==2.21.0-1 +python3-roman==2.0.0-3 +python3-secretstorage==2.3.1-2 +python3-setuptools==40.8.0-1 +python3-six==1.12.0-1 +python3-software-properties==0.96.20.2-2 +python3-sphinx==1.8.4-1 +python3-sphinx-rtd-theme==0.4.3+dfsg-1 +python3-tz==2019.1-1 +python3-unidiff==0.5.4-1 +python3-urllib3==1.24.1-1 +python3-wheel==0.32.3-2 +python3-xdg==0.25-5 +python3-yaml==3.13-2 +python3.7==3.7.3-2+deb10u3 +python3.7-dbg==3.7.3-2+deb10u3 +python3.7-dev==3.7.3-2+deb10u3 +python3.7-minimal==3.7.3-2+deb10u3 +qdbus==4:4.8.7+dfsg-18+deb10u1 +qemu-kvm==1:3.1+dfsg-8+deb10u8 +qemu-system-common==1:3.1+dfsg-8+deb10u8 +qemu-system-data==1:3.1+dfsg-8+deb10u8 +qemu-system-gui==1:3.1+dfsg-8+deb10u8 +qemu-system-x86==1:3.1+dfsg-8+deb10u8 +qemu-utils==1:3.1+dfsg-8+deb10u8 +qt-at-spi==0.4.0-9 +qt4-linguist-tools==4:4.8.7+dfsg-18+deb10u1 +qt4-qmake==4:4.8.7+dfsg-18+deb10u1 +qt5-default==5.11.3+dfsg1-1+deb10u4 +qt5-gtk-platformtheme==5.11.3+dfsg1-1+deb10u4 +qt5-qmake==5.11.3+dfsg1-1+deb10u4 +qt5-qmake-bin==5.11.3+dfsg1-1+deb10u4 +qtbase5-dev==5.11.3+dfsg1-1+deb10u4 +qtbase5-dev-tools==5.11.3+dfsg1-1+deb10u4 +qtchooser==66-2 +qtcore4-l10n==4:4.8.7+dfsg-18+deb10u1 +qttranslations5-l10n==5.11.3-2 +quilt==0.65-3 +rake==12.3.1-3+deb10u1 +readline-common==7.0-5 +rrdtool==1.7.1-2 +rsync==3.1.3-6 +rsyslog==8.1901.0-1+deb10u2 +ruby==1:2.5.1 +ruby-all-dev==1:2.5.1 +ruby-asciidoctor==1.5.8-1 +ruby-did-you-mean==1.2.1-1 +ruby-minitest==5.11.3-1 +ruby-net-telnet==0.1.1-2 +ruby-power-assert==1.1.1-1 +ruby-setup==3.4.1-9 +ruby-test-unit==3.2.8-1 +ruby-xmlrpc==0.3.0-2 +ruby2.5==2.5.5-3+deb10u4 +ruby2.5-dev==2.5.5-3+deb10u4 +ruby2.5-doc==2.5.5-3+deb10u4 +rubygems-integration==1.11+deb10u1 +sbsigntool==0.9.2-2 +seabios==1.12.0-1 +sensible-utils==0.0.12 +sgml-base==1.29 +sgml-data==2.0.11 +sgmlspl==1.03ii-36 +shared-mime-info==1.10-1 +sharutils==1:4.15.2-4 +shellcheck==0.5.0-3 +software-properties-common==0.96.20.2-2 +sphinx-common==1.8.4-1 +sphinx-rtd-theme-common==0.4.3+dfsg-1 +squashfs-tools==1:4.3-12+deb10u2 +stgit==0.18-1 +strace==4.26-0.2 +sudo==1.8.27-1+deb10u3 +swig==3.0.12-2 +swig3.0==3.0.12-2 +systemd==241-7~deb10u8 +systemd-sysv==241-7~deb10u8 +t1utils==1.41-3 +tcl==8.6.9+1 +tcl8.6==8.6.9+dfsg-2 +teckit==2.5.8+ds2-5 +telnet==0.17-41.2 +tex-common==6.11 +tex-gyre==20180621-3 +texi2html==1.82+dfsg1-5 +texinfo==6.5.0.dfsg.1-4+b1 +texlive-base==2018.20190227-2 +texlive-binaries==2018.20181218.49446-1 +texlive-fonts-recommended==2018.20190227-2 +texlive-formats-extra==2018.20190227-2 +texlive-generic-recommended==2018.20190227-2 +texlive-latex-base==2018.20190227-2 +texlive-latex-extra==2018.20190227-2 +texlive-latex-recommended==2018.20190227-2 +texlive-pictures==2018.20190227-2 +texlive-plain-generic==2018.20190227-2 +texlive-xetex==2018.20190227-2 +thin-provisioning-tools==0.7.6-2.1 +time==1.7-25.1+b1 +tipa==2:1.3-20 +tk==8.6.9+1 +tk8.6==8.6.9-2 +tk8.6-blt2.5==2.5.3+dfsg-4 +ucf==3.0038+nmu1 +unattended-upgrades==1.11.2 +unzip==6.0-23+deb10u2 +uuid-dev==2.33.1-0.1 +va-driver-all==2.4.0-1 +vdpau-driver-all==1.1.1-10 +velocity==1.7-5+deb10u1 +vim==2:8.1.0875-5+deb10u2 +vim-common==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 +wayland-protocols==1.17-1 +wdiff==1.2.2-2+b1 +wget==1.20.1-1.1 +x11-common==1:7.7+19 +x11-utils==7.7+4 +x11-xserver-utils==7.7+8 +x11proto-composite-dev==1:2018.4-4 +x11proto-core-dev==2018.4-4 +x11proto-damage-dev==1:2018.4-4 +x11proto-dev==2018.4-4 +x11proto-fixes-dev==1:2018.4-4 +x11proto-input-dev==2018.4-4 +x11proto-randr-dev==2018.4-4 +x11proto-record-dev==2018.4-4 +x11proto-xext-dev==2018.4-4 +x11proto-xf86vidmode-dev==2018.4-4 +x11proto-xinerama-dev==2018.4-4 +xauth==1:1.0.10-1 +xbitmaps==1.1.1-2 +xdelta==1.1.3-9.2 +xdelta3==3.0.11-dfsg-1+b1 +xdg-user-dirs==0.17-2 +xdg-utils==1.1.3-1+deb10u1 +xfonts-encodings==1:1.0.4-2 +xfonts-utils==1:7.7+6 +xkb-data==2.26-2 +xml-core==0.18+nmu1 +xorg-sgml-doctools==1:1.11-1 +xsltproc==1.1.32-2.2~deb10u1 +xterm==344-1+deb10u2 +xtrans-dev==1.3.5-1 +xxd==2:8.1.0875-5+deb10u2 +xz-utils==5.2.4-1+deb10u1 +zip==3.0-11+b1 +zlib1g==1:1.2.11.dfsg-1+deb10u1 +zlib1g-dev==1:1.2.11.dfsg-1+deb10u1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-arm64 b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-arm64 new file mode 100644 index 000000000000..c04653adb0f4 --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-arm64 @@ -0,0 +1,7 @@ +binutils-aarch64-linux-gnu==2.31.1-16 +libdrm-etnaviv1==2.4.97-1 +libdrm-freedreno1==2.4.97-1 +libdrm-tegra0==2.4.97-1 +libtext-iconv-perl==1.7-5+b6 +libxslt1-dev==1.1.32-2.2~deb10u1 +nodejs==14.19.3-deb-1nodesource1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-armhf b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-armhf new file mode 100644 index 000000000000..0dbab5ad344e --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-armhf @@ -0,0 +1,112 @@ +binutils-arm-linux-gnueabihf==2.31.1-16 +libclang-6.0-dev==1:6.0.1-10 +libclang-7-dev==1:7.0.1-8+deb10u2 +libclang-common-6.0-dev==1:6.0.1-10 +libclang-dev==1:7.0-47 +libclass-data-inheritable-perl==0.08-3 +libdrm-etnaviv1==2.4.97-1 +libdrm-exynos1==2.4.97-1 +libdrm-freedreno1==2.4.97-1 +libdrm-omap1==2.4.97-1 +libdrm-tegra0==2.4.97-1 +libemail-date-format-perl==1.005-1 +libexception-class-perl==1.44-1 +libgles2-mesa-dev==18.3.6-2+deb10u1 +libipc-shareable-perl==0.61-2 +libjargs-java==1.0.0-4 +liblog-dispatch-perl==2.68-1 +liblog-log4perl-perl==1.49-1 +libmime-charset-perl==1.012.2-1 +libmime-lite-perl==3.030-2 +libmime-types-perl==2.17-1 +libparams-validationcompiler-perl==0.30-1 +librust-aho-corasick-dev==0.6.9-1 +librust-ansi-term-dev==0.11.0-1 +librust-atty-dev==0.2.11-1 +librust-autocfg-dev==0.1.1-1 +librust-backtrace+default-dev==0.3.13-1 +librust-backtrace+libbacktrace-dev==0.3.13-1 +librust-backtrace-dev==0.3.13-1 +librust-backtrace-sys-dev==0.1.28-1 +librust-bindgen+logging-dev==0.47.0-1 +librust-bindgen-dev==0.47.0-1 +librust-bitflags-dev==1.0.4-1 +librust-byteorder-dev==1.3.1-1 +librust-cc-dev==1.0.28-1 +librust-cexpr-dev==0.3.3-1 +librust-cfg-if-dev==0.1.6-1 +librust-clang-sys+clang-6-0-dev==0.27.0-1 +librust-clang-sys+runtime-dev==0.27.0-1 +librust-clang-sys-dev==0.27.0-1 +librust-clap+color-dev==2.32.0-4 +librust-clap+default-dev==2.32.0-4 +librust-clap+suggestions-dev==2.32.0-4 +librust-clap-dev==2.32.0-4 +librust-env-logger+default-dev==0.6.0-1 +librust-env-logger-dev==0.6.0-1 +librust-failure+default-dev==0.1.5-1 +librust-failure+derive-dev==0.1.5-1 +librust-failure+std-dev==0.1.5-1 +librust-failure-derive-dev==0.1.5-1 +librust-failure-dev==0.1.5-1 +librust-glob-dev==0.2.11-1 +librust-hashbrown-dev==0.1.8-1 +librust-humantime-dev==1.1.1-2 +librust-lazy-static-dev==1.2.0-1 +librust-libc-dev==0.2.48-1 +librust-libloading-dev==0.5.0-1 +librust-log-dev==0.4.6-1 +librust-memchr+default-dev==2.1.3-1 +librust-memchr+use-std-dev==2.1.3-1 +librust-memchr-dev==2.1.3-1 +librust-nom+std-dev==4.0.0-1 +librust-nom-dev==4.0.0-1 +librust-peeking-take-while-dev==0.1.2-1 +librust-proc-macro2-dev==0.4.27-1 +librust-quick-error-dev==1.2.2-1 +librust-quote+proc-macro-dev==0.6.11-1 +librust-quote-dev==0.6.11-1 +librust-redox-syscall-dev==0.1.40-2 +librust-redox-termios-dev==0.1.1-2 +librust-regex-dev==1.1.0-1 +librust-regex-syntax-dev==0.6.5-1 +librust-rustc-demangle-dev==0.1.13-1 +librust-scopeguard-dev==0.3.3-1 +librust-strsim-dev==0.7.0-1 +librust-syn+default-dev==0.15.26-1 +librust-syn+printing-dev==0.15.26-1 +librust-syn+proc-macro-dev==0.15.26-1 +librust-syn-dev==0.15.26-1 +librust-synstructure-dev==0.10.1-1 +librust-termcolor-dev==1.0.4-1 +librust-termion-dev==1.5.1-1 +librust-textwrap-dev==0.11.0-1 +librust-thread-local-dev==0.3.6-1 +librust-ucd-util-dev==0.1.1-1 +librust-unicode-width-dev==0.1.5-1 +librust-unicode-xid-dev==0.1.0-1 +librust-utf8-ranges-dev==1.0.2-1 +librust-vec-map-dev==0.8.1-2 +librust-which-dev==2.0.1-1 +librust-winapi-dev==0.3.6-1 +librust-winapi-i686-pc-windows-gnu-dev==0.4.0-1 +librust-winapi-x86-64-pc-windows-gnu-dev==0.4.0-1 +librust-wincolor-dev==1.0.0-1 +libsass1==3.5.5-4 +libsombok3==2.4.0-2 +libspecio-perl==0.43-1 +libunicode-linebreak-perl==0.0.20190101-1 +libxapian-dev==1.4.11-1 +libxslt1-dev==1.1.32-2.2~deb10u1 +libyaml-tiny-perl==1.73-1 +linux-compiler-gcc-8-arm==4.19.235-1 +llvm-6.0==1:6.0.1-10 +llvm-6.0-dev==1:6.0.1-10 +llvm-6.0-runtime==1:6.0.1-10 +nodejs==14.19.3-deb-1nodesource1 +ps2eps==1.68+binaryfree-2 +rdfind==1.4.1-1 +sassc==3.5.0-1 +texlive-extra-utils==2018.20190227-2 +texlive-font-utils==2018.20190227-2 +yui-compressor==2.4.8-2 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-git b/files/build/versions/dockers/sonic-slave-buster/versions-git new file mode 100644 index 000000000000..4971ef0418e6 --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-buster/versions-git @@ -0,0 +1,2 @@ +https://chromium.googlesource.com/chromium/tools/depot_tools.git==8f1fea025d78c26046d3135e026f097dc2022698 +https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-py2 b/files/build/versions/dockers/sonic-slave-buster/versions-py2 new file mode 100644 index 000000000000..d0fec6b1186d --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-buster/versions-py2 @@ -0,0 +1,92 @@ +alabaster==0.7.8 +asn1crypto==0.24.0 +astroid==1.6.5 +atomicwrites==1.1.5 +attrs==18.2.0 +automat==0.6.0 +babel==2.6.0 +backports.functools-lru-cache==1.5 +beautifulsoup4==4.7.1 +certifi==2018.8.24 +chardet==3.0.4 +click==7.0 +colorama==0.3.7 +configparser==3.5.0b2 +constantly==15.1.0 +cov-core==1.15.0 +coverage==4.5.2 +crc16==0.1.1 +cryptography==2.6.1 +ctypesgen==1.0.2 +docutils==0.14 +entrypoints==0.3 +enum34==1.1.6 +fastentrypoints==0.12 +funcsigs==1.0.2 +futures==3.2.0 +html5lib==1.0.1 +hyperlink==17.3.1 +idna==2.6 +imagesize==1.0.0 +incremental==16.10.1 +ipaddr==2.2.0 +ipaddress==1.0.17 +isort==4.3.4 +j2cli==0.3.10 +jinja2==2.10 +keyring==17.1.1 +keyrings.alt==3.1.1 +lazy-object-proxy==1.3.1 +logilab-common==1.4.2 +lxml==4.6.5 +m2crypto==0.36.0 +markupsafe==1.1.0 +mccabe==0.6.1 +mmh3==2.5.1 +mock==3.0.5 +mockredispy==2.9.3 +more-itertools==4.2.0 +nose==1.3.7 +nose2==0.8.0 +olefile==0.46 +packaging==19.0 +parse==1.6.6 +pathlib2==2.3.3 +pbr==4.2.0 +pexpect==4.6.0 +pillow==5.4.1 +pluggy==0.8.0 +ptyprocess==0.7.0 +py==1.7.0 +pyasn1==0.4.2 +pyasn1-modules==0.2.1 +pycrypto==2.6.1 +pygments==2.3.1 +pygobject==3.30.4 +pylint==1.9.4 +pympler==0.8 +pyopenssl==19.0.0 +pyparsing==2.2.0 +pytest==3.10.1 +pytest-cov==2.6.0 +pytest-runner==4.4 +pytz==2019.1 +pyxdg==0.25 +pyyaml==5.4.1 +requests==2.21.0 +roman==2.0.0 +scandir==1.9.0 +secretstorage==2.3.1 +service-identity==16.0.0 +singledispatch==3.4.0.3 +six==1.12.0 +soupsieve==1.8 +sphinx==1.8.4 +stdeb==0.8.5 +stgit==0.18 +twisted==18.9.0 +typing==3.6.6 +urllib3==1.24.1 +webencodings==0.5.1 +wrapt==1.10.11 +zope.interface==4.3.2 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-py3 b/files/build/versions/dockers/sonic-slave-buster/versions-py3 new file mode 100644 index 000000000000..1426823f0fc4 --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-buster/versions-py3 @@ -0,0 +1,80 @@ +alabaster==0.7.8 +asn1crypto==0.24.0 +async-timeout==4.0.2 +atomicwrites==1.1.5 +attrs==18.2.0 +babel==2.6.0 +bitarray==2.5.1 +certifi==2018.8.24 +chardet==3.0.4 +cov-core==1.15.0 +coverage==4.5.2 +cryptography==2.6.1 +deprecated==1.2.13 +devscripts==2.19.5+deb10u1 +distro-info==0.21 +docutils==0.14 +entrypoints==0.3 +fastentrypoints==0.12 +gbp==0.9.14 +gcovr==4.1 +gpg==1.12.0 +idna==2.6 +imagesize==1.0.0 +importlib-metadata==4.11.4 +jinja2==3.0.3 +keyring==17.1.1 +keyrings.alt==3.1.1 +lxml==4.6.5 +m2crypto==0.38.0 +mako==1.0.7 +markdown==3.0.1 +markupsafe==2.0.1 +mmh3==2.5.1 +mock==2.0.0 +mockredispy==2.9.3 +more-itertools==4.2.0 +nose==1.3.7 +nose2==0.8.0 +olefile==0.46 +packaging==21.3 +parameterized==0.8.1 +pbr==4.2.0 +pexpect==4.8.0 +pillow==5.4.1 +pluggy==0.8.0 +ptyprocess==0.7.0 +py==1.7.0 +pyang==2.4.0 +pyangbind==0.8.1 +pycrypto==2.6.1 +pycurl==7.43.0.2 +pyfakefs==4.5.6 +pygments==2.3.1 +pygobject==3.30.4 +pympler==0.8 +pyparsing==2.2.0 +pytest==3.10.1 +pytest-cov==2.6.0 +pytest-runner==5.2 +python-apt==1.8.4.3 +python-dateutil==2.7.3 +python-debian==0.1.35 +python-magic==0.4.16 +pytz==2019.1 +pyxdg==0.25 +pyyaml==5.4.1 +redis==4.3.2 +regex==2022.4.24 +requests==2.21.0 +roman==2.0.0 +secretstorage==2.3.1 +six==1.12.0 +sphinx==1.8.4 +sphinx-rtd-theme==0.4.3 +typing_extensions==4.2.0 +unattended-upgrades==0.1 +unidiff==0.5.4 +urllib3==1.24.1 +wrapt==1.14.1 +zipp==3.8.0 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-web b/files/build/versions/dockers/sonic-slave-buster/versions-web new file mode 100644 index 000000000000..8a09fba8aa78 --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-buster/versions-web @@ -0,0 +1,3 @@ +https://download.docker.com/linux/debian/gpg==1afae06b34a13c1b3d9cb61a26285a15 +https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==4ea37edbea9fc2b88bdb5bbc2855be04 +https://storage.googleapis.com/golang/go1.14.2.linux-amd64.tar.gz==856d248e3ea8a287d13e5f6afd086282 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch b/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch new file mode 100644 index 000000000000..b4c08951d276 --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch @@ -0,0 +1,1499 @@ +adwaita-icon-theme==3.22.0-1+deb9u1 +ant==1.9.9-1+deb9u1 +ant-optional==1.9.9-1+deb9u1 +apt-file==3.1.4 +apt-transport-https==1.4.11 +apt-utils==1.4.11 +asciidoc-base==8.6.9-5 +asciidoc-common==8.6.9-5 +aspell==0.60.7~20110707-3+deb9u1 +aspell-en==2016.11.20-0-0.1 +at==3.1.20-3 +at-spi2-core==2.22.0-6+deb9u1 +auditd==1:2.6.7-2 +aufs-dkms==4.9+20161219-1 +aufs-tools==1:4.1+20161219-1 +augeas-lenses==1.8.0-1+deb9u1 +augeas-tools==1.8.0-1+deb9u1 +autoconf==2.69-10 +autoconf-archive==20160916-1 +automake==1:1.15-6 +autopoint==0.19.8.1-2+deb9u1 +autotools-dev==20161112.1 +bash-completion==1:2.1-4.3 +bc==1.06.95-9+b3 +bind9-host==1:9.10.3.dfsg.P4-12.3+deb9u12 +binfmt-support==2.1.6-2 +binutils==2.28-5 +bison==2:3.0.4.dfsg-1+b1 +blt==2.5.3+dfsg-3 +bsdmainutils==9.0.12+nmu1 +build-essential==12.3 +byacc==20140715-1+b1 +bzip2==1.0.6-8.1 +ca-certificates==20200601~deb9u2 +ca-certificates-java==20170929~deb9u3 +cdbs==0.4.150 +cgmanager==0.41-2 +cgroupfs-mount==1.3 +check==0.10.0-3+b3 +chrpath==0.16-2+b1 +clang==1:3.8-36 +clang-3.8==1:3.8.1-24 +cm-super-minimal==0.3.4-9 +cmake==3.13.2-1~bpo9+1 +cmake-data==3.13.2-1~bpo9+1 +cmocka-doc==1.0.1-3 +containerd.io==1.4.3-1 +cowbuilder==0.85 +cowdancer==0.85 +cpio==2.11+dfsg-6 +cpp==4:6.3.0-4 +cpp-6==6.3.0-18+deb9u1 +cppcheck==1.76.1-1 +cron==3.0pl1-128+deb9u2 +curl==7.52.1-5+deb9u16 +dbus==1.10.32-0+deb9u1 +dconf-gsettings-backend==0.26.0-2+b1 +dconf-service==0.26.0-2+b1 +dctrl-tools==2.24-2+b1 +debhelper==10.2.5 +debian-keyring==2017.05.28 +debootstrap==1.0.89 +default-jdk-headless==2:1.8-58+deb9u1 +default-jre==2:1.8-58+deb9u1 +default-jre-headless==2:1.8-58+deb9u1 +default-libmysqlclient-dev==1.0.2 +devscripts==2.17.6+deb9u2 +dh-autoreconf==14 +dh-exec==0.23+b1 +dh-make==2.201608 +dh-python==2.20170125 +dh-strip-nondeterminism==0.034-1 +dh-systemd==10.2.5 +dictionaries-common==1.27.2 +diffstat==1.61-1+b1 +dirmngr==2.1.18-8~deb9u4 +distro-info-data==0.36 +dkms==2.3-2 +dmeventd==2:1.02.137-2 +dmsetup==2:1.02.137-2 +dnsutils==1:9.10.3.dfsg.P4-12.3+deb9u12 +docbook-xml==4.5-8 +docbook-xsl==1.79.1+dfsg-2 +docker-ce==5:18.09.5~3-0~debian-stretch +docker-ce-cli==5:18.09.5~3-0~debian-stretch +docutils-common==0.13.1+dfsg-2 +docutils-doc==0.13.1+dfsg-2 +dosfstools==4.1-1 +doxygen==1.8.13-4+b1 +dpatch==2.0.38 +dpkg-dev==1.18.26 +dput==0.12.1 +eatmydata==105-5 +emacsen-common==2.0.8 +equivs==2.0.9+nmu1 +exim4==4.89-2+deb9u8 +exim4-base==4.89-2+deb9u8 +exim4-config==4.89-2+deb9u8 +exim4-daemon-light==4.89-2+deb9u8 +expat==2.2.0-2+deb9u5 +exuberant-ctags==1:5.9~svn20110310-11 +fakeroot==1.21-3.1 +file==1:5.30-1+deb9u3 +flex==2.6.1-1.3 +fontconfig==2.11.0-6.7+b1 +fontconfig-config==2.11.0-6.7 +fonts-dejavu-core==2.37-1 +fonts-dejavu-extra==2.37-1 +fonts-droid-fallback==1:6.0.1r16-1.1 +fonts-font-awesome==4.7.0~dfsg-1 +fonts-lato==2.0-1 +fonts-liberation==1:1.07.4-2 +fonts-lmodern==2.004.5-3 +fonts-noto-mono==20161116-1 +fonts-texgyre==20160520-1 +fop==1:2.1-6 +g++==4:6.3.0-4 +g++-6==6.3.0-18+deb9u1 +gawk==1:4.1.4+dfsg-1 +gcc==4:6.3.0-4 +gcc-6==6.3.0-18+deb9u1 +gcc-6-multilib==6.3.0-18+deb9u1 +gcc-multilib==4:6.3.0-4 +gcovr==3.3-1 +gdb==7.12-6 +gem2deb==0.33.1 +gem2deb-test-runner==0.33.1 +geoip-database==20170512-1 +gettext==0.19.8.1-2+deb9u1 +gettext-base==0.19.8.1-2+deb9u1 +ghostscript==9.26a~dfsg-0+deb9u9 +gir1.2-glib-2.0==1.50.0-1+b1 +gir1.2-packagekitglib-1.0==1.1.5-2+deb9u2 +git==1:2.11.0-3+deb9u7 +git-buildpackage==0.8.12.2 +git-man==1:2.11.0-3+deb9u7 +glib-networking==2.50.0-1+deb9u1 +glib-networking-common==2.50.0-1+deb9u1 +glib-networking-services==2.50.0-1+deb9u1 +gnome-icon-theme==3.12.0-2 +gnupg==2.1.18-8~deb9u4 +gnupg-agent==2.1.18-8~deb9u4 +gnupg-l10n==2.1.18-8~deb9u4 +gnupg2==2.1.18-8~deb9u4 +googletest==1.8.0-10~bpo9+1 +graphviz==2.38.0-17+deb9u1 +groff==1.22.3-9 +groff-base==1.22.3-9 +gsettings-desktop-schemas==3.22.0-1 +gsfonts==1:8.11+urwcyr1.0.7~pre44-4.3 +gtk-update-icon-cache==3.22.11-1 +guile-2.0-libs==2.0.13+1-4 +hicolor-icon-theme==0.15-1 +icc-profiles-free==2.0.1+dfsg-1 +icu-devtools==57.1-6+deb9u5 +imagemagick==8:6.9.7.4+dfsg-11+deb9u14 +imagemagick-6-common==8:6.9.7.4+dfsg-11+deb9u14 +imagemagick-6.q16==8:6.9.7.4+dfsg-11+deb9u14 +install-info==6.3.0.dfsg.1-1+b2 +intltool-debian==0.35.0+20060710.4 +iptables==1.6.0+snapshot20161117-6 +iptables-dev==1.6.0+snapshot20161117-6 +ipxe-qemu==1.0.0+git-20161027.b991c67-1 +iso-codes==3.75-1 +java-common==0.58+deb9u1 +java-wrappers==0.1.28 +javahelper==0.59 +javascript-common==11 +jq==1.5+dfsg-1.3 +junit==3.8.2-8 +junit4==4.12-4+deb9u1 +kernel-wedge==2.96 +kmod==23-2 +krb5-locales==1.15-1+deb9u3 +less==481-2.1 +lib32asan3==6.3.0-18+deb9u1 +lib32atomic1==6.3.0-18+deb9u1 +lib32cilkrts5==6.3.0-18+deb9u1 +lib32gcc-6-dev==6.3.0-18+deb9u1 +lib32gcc1==1:6.3.0-18+deb9u1 +lib32gomp1==6.3.0-18+deb9u1 +lib32itm1==6.3.0-18+deb9u1 +lib32mpx2==6.3.0-18+deb9u1 +lib32quadmath0==6.3.0-18+deb9u1 +lib32stdc++6==6.3.0-18+deb9u1 +lib32ubsan0==6.3.0-18+deb9u1 +libaio1==0.3.110-3 +libalgorithm-diff-perl==1.19.03-1 +libalgorithm-diff-xs-perl==0.04-4+b2 +libalgorithm-merge-perl==0.08-3 +libann0==1.1.2+doc-6 +libaopalliance-java==20070526-5 +libapache-pom-java==10-2 +libapparmor1==2.11.0-3+deb9u2 +libapt-inst2.0==1.4.11 +libapt-pkg-perl==0.1.32 +libarchive-zip-perl==1.59-1+deb9u1 +libarchive13==3.2.2-2+deb9u3 +libasan3==6.3.0-18+deb9u1 +libasm-java==5.2-2 +libasound2==1.1.3-5 +libasound2-data==1.1.3-5 +libaspell15==0.60.7~20110707-3+deb9u1 +libassuan0==2.4.3-2 +libasyncns0==0.8-6 +libatinject-jsr330-api-java==1.0+ds1-2 +libatk-bridge2.0-0==2.22.0-2 +libatk-wrapper-java==0.33.3-13+deb9u1 +libatk-wrapper-java-jni==0.33.3-13+deb9u1 +libatk1.0-0==2.22.0-1 +libatk1.0-data==2.22.0-1 +libatm1==1:2.5.1-2 +libatm1-dev==1:2.5.1-2 +libatomic1==6.3.0-18+deb9u1 +libatspi2.0-0==2.22.0-6+deb9u1 +libaudio2==1.9.4-5+b1 +libaudit-dev==1:2.6.7-2 +libaugeas0==1.8.0-1+deb9u1 +libauparse-dev==1:2.6.7-2 +libauparse0==1:2.6.7-2 +libauthen-sasl-perl==2.1600-1 +libavahi-client3==0.6.32-2 +libavahi-common-data==0.6.32-2 +libavahi-common3==0.6.32-2 +libavalon-framework-java==4.2.0-9 +libb-hooks-endofscope-perl==0.21-1 +libbabeltrace-ctf-dev==1.5.1-1 +libbabeltrace-ctf1==1.5.1-1 +libbabeltrace-dev==1.5.1-1 +libbabeltrace1==1.5.1-1 +libbatik-java==1.8-4+deb9u2 +libbind-export-dev==1:9.10.3.dfsg.P4-12.3+deb9u12 +libbind9-140==1:9.10.3.dfsg.P4-12.3+deb9u12 +libbison-dev==2:3.0.4.dfsg-1+b1 +libbit-vector-perl==7.4-1+b2 +libbluetooth3==5.43-2+deb9u5 +libboost-all-dev==1.62.0.1 +libboost-atomic-dev==1.62.0.1 +libboost-atomic1.62-dev==1.62.0+dfsg-4 +libboost-atomic1.62.0==1.62.0+dfsg-4 +libboost-chrono-dev==1.62.0.1 +libboost-chrono1.62-dev==1.62.0+dfsg-4 +libboost-chrono1.62.0==1.62.0+dfsg-4 +libboost-context-dev==1.62.0.1 +libboost-context1.62-dev==1.62.0+dfsg-4 +libboost-context1.62.0==1.62.0+dfsg-4 +libboost-coroutine-dev==1.62.0.1 +libboost-coroutine1.62-dev==1.62.0+dfsg-4 +libboost-coroutine1.62.0==1.62.0+dfsg-4 +libboost-date-time-dev==1.62.0.1 +libboost-date-time1.62-dev==1.62.0+dfsg-4 +libboost-date-time1.62.0==1.62.0+dfsg-4 +libboost-dev==1.62.0.1 +libboost-exception-dev==1.62.0.1 +libboost-exception1.62-dev==1.62.0+dfsg-4 +libboost-fiber-dev==1.62.0.1 +libboost-fiber1.62-dev==1.62.0+dfsg-4 +libboost-fiber1.62.0==1.62.0+dfsg-4 +libboost-filesystem-dev==1.62.0.1 +libboost-filesystem1.62-dev==1.62.0+dfsg-4 +libboost-filesystem1.62.0==1.62.0+dfsg-4 +libboost-graph-dev==1.62.0.1 +libboost-graph-parallel-dev==1.62.0.1 +libboost-graph-parallel1.62-dev==1.62.0+dfsg-4 +libboost-graph-parallel1.62.0==1.62.0+dfsg-4 +libboost-graph1.62-dev==1.62.0+dfsg-4 +libboost-graph1.62.0==1.62.0+dfsg-4 +libboost-iostreams-dev==1.62.0.1 +libboost-iostreams1.62-dev==1.62.0+dfsg-4 +libboost-iostreams1.62.0==1.62.0+dfsg-4 +libboost-locale-dev==1.62.0.1 +libboost-locale1.62-dev==1.62.0+dfsg-4 +libboost-locale1.62.0==1.62.0+dfsg-4 +libboost-log-dev==1.62.0.1 +libboost-log1.62-dev==1.62.0+dfsg-4 +libboost-log1.62.0==1.62.0+dfsg-4 +libboost-math-dev==1.62.0.1 +libboost-math1.62-dev==1.62.0+dfsg-4 +libboost-math1.62.0==1.62.0+dfsg-4 +libboost-mpi-dev==1.62.0.1 +libboost-mpi-python-dev==1.62.0.1 +libboost-mpi-python1.62-dev==1.62.0+dfsg-4 +libboost-mpi-python1.62.0==1.62.0+dfsg-4 +libboost-mpi1.62-dev==1.62.0+dfsg-4 +libboost-mpi1.62.0==1.62.0+dfsg-4 +libboost-program-options-dev==1.62.0.1 +libboost-program-options1.62-dev==1.62.0+dfsg-4 +libboost-program-options1.62.0==1.62.0+dfsg-4 +libboost-python-dev==1.62.0.1 +libboost-python1.62-dev==1.62.0+dfsg-4 +libboost-python1.62.0==1.62.0+dfsg-4 +libboost-random-dev==1.62.0.1 +libboost-random1.62-dev==1.62.0+dfsg-4 +libboost-random1.62.0==1.62.0+dfsg-4 +libboost-regex-dev==1.62.0.1 +libboost-regex1.62-dev==1.62.0+dfsg-4 +libboost-regex1.62.0==1.62.0+dfsg-4 +libboost-serialization-dev==1.62.0.1 +libboost-serialization1.62-dev==1.62.0+dfsg-4 +libboost-serialization1.62.0==1.62.0+dfsg-4 +libboost-signals-dev==1.62.0.1 +libboost-signals1.62-dev==1.62.0+dfsg-4 +libboost-signals1.62.0==1.62.0+dfsg-4 +libboost-system-dev==1.62.0.1 +libboost-system1.62-dev==1.62.0+dfsg-4 +libboost-system1.62.0==1.62.0+dfsg-4 +libboost-test-dev==1.62.0.1 +libboost-test1.62-dev==1.62.0+dfsg-4 +libboost-test1.62.0==1.62.0+dfsg-4 +libboost-thread-dev==1.62.0.1 +libboost-thread1.62-dev==1.62.0+dfsg-4 +libboost-thread1.62.0==1.62.0+dfsg-4 +libboost-timer-dev==1.62.0.1 +libboost-timer1.62-dev==1.62.0+dfsg-4 +libboost-timer1.62.0==1.62.0+dfsg-4 +libboost-tools-dev==1.62.0.1 +libboost-type-erasure-dev==1.62.0.1 +libboost-type-erasure1.62-dev==1.62.0+dfsg-4 +libboost-type-erasure1.62.0==1.62.0+dfsg-4 +libboost-wave-dev==1.62.0.1 +libboost-wave1.62-dev==1.62.0+dfsg-4 +libboost-wave1.62.0==1.62.0+dfsg-4 +libboost1.62-dev==1.62.0+dfsg-4 +libboost1.62-tools-dev==1.62.0+dfsg-4 +libbrlapi0.6==5.4-7+deb9u1 +libbsd-dev==0.8.3-1+deb9u1 +libbsd0==0.8.3-1+deb9u1 +libbsf-java==1:2.4.0-5 +libbsh-java==2.0b4-18 +libc-ares-dev==1.12.0-1+deb9u2 +libc-ares2==1.12.0-1+deb9u2 +libc-dev-bin==2.24-11+deb9u4 +libc-l10n==2.24-11+deb9u4 +libc6-dbg==2.24-11+deb9u4 +libc6-dev==2.24-11+deb9u4 +libc6-dev-i386==2.24-11+deb9u4 +libc6-dev-x32==2.24-11+deb9u4 +libc6-i386==2.24-11+deb9u4 +libc6-x32==2.24-11+deb9u4 +libcaca0==0.99.beta19-2.1~deb9u2 +libcacard0==1:2.5.0-3 +libcairo-gobject2==1.14.8-1+deb9u1 +libcairo2==1.14.8-1+deb9u1 +libcap-dev==1:2.25-1 +libcap-ng-dev==0.7.7-3+b1 +libcap2-bin==1:2.25-1 +libcarp-clan-perl==6.06-1 +libcc1-0==6.3.0-18+deb9u1 +libcdi-api-java==1.0-2 +libcdt5==2.38.0-17+deb9u1 +libcgi-fast-perl==1:2.12-1 +libcgi-pm-perl==4.35-1 +libcglib-java==3.2.4-1 +libcgmanager0==0.41-2 +libcgraph6==2.38.0-17+deb9u1 +libcilkrts5==6.3.0-18+deb9u1 +libclang-common-3.8-dev==1:3.8.1-24 +libclang1-3.8==1:3.8.1-24 +libclang1-3.9==1:3.9.1-9 +libclass-accessor-perl==0.34-1 +libclass-inspector-perl==1.31-1 +libclass-method-modifiers-perl==2.12-1 +libclass-xsaccessor-perl==1.19-2+b7 +libclassworlds-java==1.1-final-5 +libclone-perl==0.38-2+b1 +libcmocka-dev==1.0.1-3 +libcmocka0==1.0.1-3 +libcolord2==1.3.3-2 +libcommons-beanutils-java==1.9.3-1 +libcommons-cli-java==1.3.1-3 +libcommons-codec-java==1.10-1 +libcommons-collections3-java==3.2.2-1 +libcommons-configuration-java==1.10-4 +libcommons-digester-java==1.8.1-4 +libcommons-httpclient-java==3.1-12 +libcommons-io-java==2.5-1+deb9u1 +libcommons-lang-java==2.6-6 +libcommons-lang3-java==3.5-1 +libcommons-logging-java==1.2-1 +libcommons-net-java==3.5-1 +libcommons-parent-java==39-3 +libcommons-validator-java==1:1.5.1-1 +libconvert-binhex-perl==1.125-1 +libcroco3==0.6.11-3 +libcryptsetup4==2:1.7.3-4 +libcunit1==2.1-3-dfsg-2 +libcunit1-dev==2.1-3-dfsg-2 +libcups2==2.2.1-8+deb9u8 +libcupsfilters1==1.11.6-3+deb9u1 +libcupsimage2==2.2.1-8+deb9u8 +libcurl3==7.52.1-5+deb9u16 +libcurl3-gnutls==7.52.1-5+deb9u16 +libcurl3-nss==7.52.1-5+deb9u16 +libcurl4-nss-dev==7.52.1-5+deb9u16 +libdaemon-dev==0.14-6 +libdaemon0==0.14-6 +libdata-optlist-perl==0.110-1 +libdatrie1==0.2.10-4+b1 +libdb-dev==5.3.1 +libdb5.3-dev==5.3.28-12+deb9u1 +libdbi1==0.9.0-4+deb9u2 +libdbus-1-3==1.10.32-0+deb9u1 +libdbus-1-dev==1.10.32-0+deb9u1 +libdbus-glib-1-2==0.108-2 +libdconf1==0.26.0-2+b1 +libdevel-globaldestruction-perl==0.14-1 +libdevmapper-event1.02.1==2:1.02.137-2 +libdevmapper1.02.1==2:1.02.137-2 +libdigest-hmac-perl==1.03+dfsg-1 +libdistro-info-perl==0.14 +libdjvulibre-text==3.5.27.1-7+deb9u2 +libdjvulibre21==3.5.27.1-7+deb9u2 +libdns-export162==1:9.10.3.dfsg.P4-12.3+deb9u12 +libdns162==1:9.10.3.dfsg.P4-12.3+deb9u12 +libdom4j-java==1.6.1+dfsg.3-2+deb9u1 +libdouble-conversion1==2.0.1-4 +libdoxia-core-java==1.1.4-6 +libdoxia-java==1.1.4-6 +libdoxia-sitetools-java==1.1.4-1.1 +libdpkg-perl==1.18.26 +libdrm-amdgpu1==2.4.74-1 +libdrm-dev==2.4.74-1 +libdrm-intel1==2.4.74-1 +libdrm-nouveau2==2.4.74-1 +libdrm-radeon1==2.4.74-1 +libdrm2==2.4.74-1 +libdw-dev==0.168-1+deb9u1 +libdw1==0.168-1+deb9u1 +libeasymock-java==3.4+ds-1 +libeatmydata1==105-5 +libeclipse-aether-java==1.0.2-1 +libedit-dev==3.1-20160903-3 +libedit2==3.1-20160903-3 +libegl1-mesa==13.0.6-1+b2 +libelf-dev==0.168-1+deb9u1 +libemail-valid-perl==1.202-1 +libencode-locale-perl==1.05-1 +libepoxy0==1.3.1-2 +liberror-perl==0.17024-1 +libestr0==0.1.10-2 +libevdev2==1.5.6+dfsg-1 +libevent-2.0-5==2.0.21-stable-3 +libevent-core-2.0-5==2.0.21-stable-3 +libevent-dev==2.0.21-stable-3 +libevent-extra-2.0-5==2.0.21-stable-3 +libevent-openssl-2.0-5==2.0.21-stable-3 +libevent-pthreads-2.0-5==2.0.21-stable-3 +libexpat1==2.2.0-2+deb9u5 +libexpat1-dev==2.2.0-2+deb9u5 +libexplain-dev==1.4.D001-6 +libexplain51==1.4.D001-6 +libexporter-tiny-perl==0.042-1 +libfabric1==1.4.0-1 +libfakeroot==1.21-3.1 +libfastjson4==0.99.4-1 +libfcgi-perl==0.78-2 +libfdt1==1.4.2-1 +libffi-dev==3.2.1-6 +libffi6==3.2.1-6 +libfftw3-double3==3.3.5-3 +libfile-basedir-perl==0.07-1 +libfile-chdir-perl==0.1008-1 +libfile-desktopentry-perl==0.22-1 +libfile-fcntllock-perl==0.22-3+b2 +libfile-homedir-perl==1.00-1 +libfile-listing-perl==6.04-1 +libfile-mimeinfo-perl==0.27-1 +libfile-stripnondeterminism-perl==0.034-1 +libfile-which-perl==1.21-1 +libfl-dev==2.6.1-1.3 +libflac8==1.3.2-2+deb9u2 +libfont-afm-perl==1.20-2 +libfontbox-java==1:1.8.12-1 +libfontconfig1==2.11.0-6.7+b1 +libfontenc1==1:1.1.3-1+b2 +libfop-java==1:2.1-6 +libfreetype6==2.6.3-3.2+deb9u2 +libfribidi0==0.19.7-1+deb9u2 +libgail-common==2.24.31-2 +libgail18==2.24.31-2 +libgbm1==13.0.6-1+b2 +libgc1c2==1:7.4.2-8+deb9u1 +libgcc-6-dev==6.3.0-18+deb9u1 +libgd3==2.2.4-2+deb9u5 +libgdbm3==1.8.3-14 +libgdk-pixbuf2.0-0==2.36.5-2+deb9u2 +libgdk-pixbuf2.0-common==2.36.5-2+deb9u2 +libgeoip1==1.6.9-4 +libgeronimo-interceptor-3.0-spec-java==1.0.1-3 +libgetopt-long-descriptive-perl==0.100-1 +libgfortran3==6.3.0-18+deb9u1 +libgif7==5.1.4-0.4 +libgirepository-1.0-1==1.50.0-1+b1 +libgit-wrapper-perl==0.047-1 +libgl1-mesa-dev==13.0.6-1+b2 +libgl1-mesa-dri==13.0.6-1+b2 +libgl1-mesa-glx==13.0.6-1+b2 +libglapi-mesa==13.0.6-1+b2 +libglew2.0==2.0.0-3+b1 +libglib2.0-0==2.50.3-2+deb9u2 +libglib2.0-bin==2.50.3-2+deb9u2 +libglib2.0-data==2.50.3-2+deb9u2 +libglib2.0-dev==2.50.3-2+deb9u2 +libglu1-mesa==9.0.0-2.1 +libglu1-mesa-dev==9.0.0-2.1 +libgmock-dev==1.8.0-10~bpo9+1 +libgmp-dev==2:6.1.2+dfsg-1+deb9u1 +libgmp10==2:6.1.2+dfsg-1+deb9u1 +libgmpxx4ldbl==2:6.1.2+dfsg-1+deb9u1 +libgnutls30==3.5.8-5+deb9u6 +libgomp1==6.3.0-18+deb9u1 +libgoogle-perftools4==2.5-2.2 +libgpgme11==1.8.0-3+b2 +libgpm2==1.20.4-6.2+b1 +libgraphite2-3==1.3.10-1 +libgs9==9.26a~dfsg-0+deb9u9 +libgs9-common==9.26a~dfsg-0+deb9u9 +libgsasl7==1.8.0-8+b2 +libgssapi-krb5-2==1.15-1+deb9u3 +libgstreamer1.0-0==1.10.4-1 +libgtest-dev==1.8.0-10~bpo9+1 +libgtk-3-0==3.22.11-1 +libgtk-3-bin==3.22.11-1 +libgtk-3-common==3.22.11-1 +libgtk2.0-0==2.24.31-2 +libgtk2.0-bin==2.24.31-2 +libgtk2.0-common==2.24.31-2 +libgts-0.7-5==0.7.6+darcs121130-4 +libgts-bin==0.7.6+darcs121130-4 +libguava-java==19.0-1 +libgudev-1.0-0==230-3 +libguice-java==4.0-3 +libgvc6==2.38.0-17+deb9u1 +libgvpr2==2.38.0-17+deb9u1 +libhamcrest-java==1.3-6 +libharfbuzz-icu0==1.4.2-1 +libharfbuzz0b==1.4.2-1 +libhogweed4==3.3-1+deb9u1 +libhtml-form-perl==6.03-1 +libhtml-format-perl==2.12-1 +libhtml-parser-perl==3.72-3 +libhtml-tagset-perl==3.20-3 +libhtml-tree-perl==5.03-2 +libhttp-cookies-perl==6.01-1 +libhttp-daemon-perl==6.01-1 +libhttp-date-perl==6.02-1 +libhttp-message-perl==6.11-1 +libhttp-negotiate-perl==6.00-2 +libhttpclient-java==4.5.2-2+deb9u1 +libhttpcore-java==4.4.6-1 +libhwloc-dev==1.11.5-1 +libhwloc-plugins==1.11.5-1 +libhwloc5==1.11.5-1 +libiberty-dev==20161220-1 +libibverbs-dev==1.2.1-2 +libibverbs1==1.2.1-2 +libice-dev==2:1.0.9-2 +libice6==2:1.0.9-2 +libicu-dev==57.1-6+deb9u5 +libicu57==57.1-6+deb9u5 +libidn2-0==0.16-1+deb9u1 +libijs-0.35==0.35-12 +libilmbase12==2.2.0-12 +libimport-into-perl==1.002005-1 +libinput-bin==1.6.3-1 +libinput10==1.6.3-1 +libio-html-perl==1.001-1 +libio-pty-perl==1:1.08-1.1+b2 +libio-sessiondata-perl==1.03-1 +libio-socket-inet6-perl==2.72-2 +libio-socket-ssl-perl==2.044-1 +libio-string-perl==1.08-3 +libio-stringy-perl==2.111-2 +libip4tc-dev==1.6.0+snapshot20161117-6 +libip4tc0==1.6.0+snapshot20161117-6 +libip6tc-dev==1.6.0+snapshot20161117-6 +libip6tc0==1.6.0+snapshot20161117-6 +libipc-run-perl==0.94-1+deb9u1 +libipc-system-simple-perl==1.25-3 +libiptc-dev==1.6.0+snapshot20161117-6 +libiptc0==1.6.0+snapshot20161117-6 +libirs-export141==1:9.10.3.dfsg.P4-12.3+deb9u12 +libisc-export160==1:9.10.3.dfsg.P4-12.3+deb9u12 +libisc160==1:9.10.3.dfsg.P4-12.3+deb9u12 +libisccc-export140==1:9.10.3.dfsg.P4-12.3+deb9u12 +libisccc140==1:9.10.3.dfsg.P4-12.3+deb9u12 +libisccfg-export140==1:9.10.3.dfsg.P4-12.3+deb9u12 +libisccfg140==1:9.10.3.dfsg.P4-12.3+deb9u12 +libisl15==0.18-1 +libisorelax-java==20041111-9 +libitext1-java==1.4-6 +libitm1==6.3.0-18+deb9u1 +libjansson-dev==2.9-1 +libjansson4==2.9-1 +libjaxen-java==1.1.6-1+deb9u1 +libjaxp1.3-java==1.3.05-2 +libjbig0==2.1-3.1+b2 +libjbig2dec0==0.13-4.1+deb9u1 +libjdom1-java==1.1.3-1+deb9u1 +libjemalloc-dev==3.6.0-9.1 +libjemalloc1==3.6.0-9.1 +libjetty9-java==9.2.30-0+deb9u2 +libjline-java==1.0-2 +libjpeg62-turbo==1:1.5.1-2+deb9u2 +libjq1==1.5+dfsg-1.3 +libjs-bootstrap==3.3.7+dfsg-2+deb9u2 +libjs-jquery==3.1.1-2+deb9u2 +libjs-jquery-hotkeys==0~20130707+git2d51e3a9+dfsg-2 +libjs-jquery-isonscreen==1.2.0-1 +libjs-jquery-metadata==11-3 +libjs-jquery-tablesorter==11-3 +libjs-jquery-throttle-debounce==1.1+dfsg.1-1 +libjs-modernizr==2.6.2+ds1-1 +libjs-sphinxdoc==1.4.9-2 +libjs-twitter-bootstrap==2.0.2+dfsg-10 +libjs-underscore==1.8.3~dfsg-1+deb9u1 +libjsch-java==0.1.54-1 +libjson-c-dev==0.12.1-1.1+deb9u1 +libjson-c3==0.12.1-1.1+deb9u1 +libjson-glib-1.0-0==1.2.6-1 +libjson-glib-1.0-common==1.2.6-1 +libjsoncpp1==1.7.4-3 +libjsoup-java==1.10.2-1 +libjsr305-java==0.1~+svn49-10 +libjtidy-java==7+svn20110807-4 +libjudy-dev==1.0.5-5 +libjudydebian1==1.0.5-5 +libjxr-tools==1.1-6+b1 +libjxr0==1.1-6+b1 +libjzlib-java==1.1.3-1 +libk5crypto3==1.15-1+deb9u3 +libkeyutils1==1.5.9-9 +libkmod2==23-2 +libkpathsea6==2016.20160513.41080.dfsg-2+deb9u1 +libkrb5-3==1.15-1+deb9u3 +libkrb5support0==1.15-1+deb9u3 +libksba8==1.3.5-2 +libkyotocabinet16v5==1.2.76-4.2+b1 +liblcms2-2==2.8-4+deb9u1 +libldap-2.4-2==2.4.44+dfsg-5+deb9u9 +libldap-common==2.4.44+dfsg-5+deb9u9 +libldap2-dev==2.4.44+dfsg-5+deb9u9 +liblist-compare-perl==0.53-1 +liblist-moreutils-perl==0.416-1+b1 +libllvm3.8==1:3.8.1-24 +libllvm3.9==1:3.9.1-9 +liblocale-gettext-perl==1.07-3+b1 +liblog4j1.2-java==1.2.17-7+deb9u2 +liblogging-stdlog0==1.0.5-2+b2 +liblognorm5==2.0.1-1.1+b1 +liblqr-1-0==0.4.2-2+b2 +liblsan0==6.3.0-18+deb9u1 +libltdl-dev==2.4.6-2 +libltdl7==2.4.6-2 +liblua5.1-0==5.1.5-8.1+b2 +liblua5.1-0-dev==5.1.5-8.1+b2 +liblvm2app2.2==2.02.168-2 +liblvm2cmd2.02==2.02.168-2 +liblwp-mediatypes-perl==6.02-1 +liblwp-protocol-https-perl==6.06-2 +liblwres141==1:9.10.3.dfsg.P4-12.3+deb9u12 +liblzo2-2==2.08-1.2+b2 +liblzo2-dev==2.08-1.2+b2 +libmagic-mgc==1:5.30-1+deb9u3 +libmagic1==1:5.30-1+deb9u3 +libmagickcore-6.q16-3==8:6.9.7.4+dfsg-11+deb9u14 +libmagickcore-6.q16-3-extra==8:6.9.7.4+dfsg-11+deb9u14 +libmagickwand-6.q16-3==8:6.9.7.4+dfsg-11+deb9u14 +libmail-sendmail-perl==0.79.16-2 +libmailtools-perl==2.18-1 +libmailutils5==1:3.1.1-1 +libmariadbclient-dev==10.1.48-0+deb9u2 +libmariadbclient-dev-compat==10.1.48-0+deb9u2 +libmariadbclient18==10.1.48-0+deb9u2 +libmaven-ant-tasks-java==2.1.3-4 +libmaven-archiver-java==2.6-3 +libmaven-clean-plugin-java==2.5-1 +libmaven-common-artifact-filters-java==1.4-1 +libmaven-compiler-plugin-java==3.2-5 +libmaven-doxia-tools-java==1.2.1-2 +libmaven-filtering-java==1.1-1 +libmaven-jar-plugin-java==2.4-1 +libmaven-parent-java==21-2 +libmaven-plugin-tools-java==3.3-5 +libmaven-reporting-impl-java==2.3-1 +libmaven-resources-plugin-java==2.6-1 +libmaven-shared-incremental-java==1.1-1 +libmaven-shared-utils-java==3.0.0-1 +libmaven-site-plugin-java==2.1-4 +libmaven2-core-java==2.2.1-26 +libmaven3-core-java==3.3.9-4 +libmime-tools-perl==5.508-1 +libmng1==1.0.10+dfsg-3.1+b5 +libmnl-dev==1.0.4-2 +libmodule-implementation-perl==0.09-1 +libmodule-runtime-perl==0.014-2 +libmoo-perl==2.002005-1 +libmpc3==1.0.3-1+b2 +libmpdec2==2.4.2-1 +libmpfr4==3.1.5-1 +libmpx2==6.3.0-18+deb9u1 +libmsv-java==2009.1+dfsg1-5 +libmtdev1==1.1.5-1+b1 +libnamespace-clean-perl==0.27-1 +libnanomsg-dev==0.8~beta+dfsg-1+b1 +libnanomsg4==0.8~beta+dfsg-1+b1 +libncurses5==6.0+20161126-1+deb9u2 +libncurses5-dev==6.0+20161126-1+deb9u2 +libnet-dbus-perl==1.1.0-4+b1 +libnet-dns-perl==1.07-1 +libnet-domain-tld-perl==1.75-1 +libnet-http-perl==6.12-1 +libnet-ip-perl==1.26-1 +libnet-smtp-ssl-perl==1.04-1 +libnet-ssleay-perl==1.80-1 +libnetfilter-conntrack-dev==1.0.6-2 +libnetfilter-conntrack3==1.0.6-2 +libnetpbm10==2:10.0-15.3+b2 +libnewt-dev==0.52.19-1+b1 +libnewt0.52==0.52.19-1+b1 +libnfnetlink-dev==1.0.1-3 +libnfnetlink0==1.0.1-3 +libnftnl-dev==1.0.7-1 +libnftnl4==1.0.7-1 +libnghttp2-14==1.18.1-1+deb9u2 +libnih-dbus1==1.0.3-8 +libnih1==1.0.3-8 +libnl-3-200==3.2.27-2 +libnl-route-3-200==3.2.27-2 +libnpth0==1.3-1 +libnspr4==2:4.12-6 +libnss3==2:3.26.2-1.1+deb9u5 +libntlm0==1.4-8+deb9u1 +libnuma-dev==2.0.11-2.1 +libnuma1==2.0.11-2.1 +libnumber-compare-perl==0.03-1 +libnumber-range-perl==0.12-1 +libobjc-6-dev==6.3.0-18+deb9u1 +libobjc4==6.3.0-18+deb9u1 +libobjenesis-java==2.5.1-1 +libogg0==1.3.2-1 +libonig4==6.1.3-2+deb9u2 +libopenexr22==2.2.0-11+deb9u4 +libopenjp2-7==2.1.2-1.1+deb9u7 +libopenmpi-dev==2.0.2-2 +libopenmpi2==2.0.2-2 +libopus0==1.2~alpha2-1 +liboro-java==2.0.8a-12 +libosp5==1.5.2-13+b1 +libossp-uuid-perl==1.6.2-1.5+b4 +libossp-uuid16==1.6.2-1.5+b4 +libp11-kit0==0.23.3-2+deb9u1 +libpackage-stash-perl==0.37-1 +libpackage-stash-xs-perl==0.28-3+b1 +libpackagekit-glib2-18==1.1.5-2+deb9u2 +libpam-cap==1:2.25-1 +libpam-systemd==232-25+deb9u13 +libpam0g-dev==1.1.8-3.6 +libpango-1.0-0==1.40.5-1 +libpangocairo-1.0-0==1.40.5-1 +libpangoft2-1.0-0==1.40.5-1 +libpaper-utils==1.1.24+nmu5 +libpaper1==1.1.24+nmu5 +libparams-classify-perl==0.013-6+b1 +libparams-util-perl==1.07-3+b1 +libparams-validate-perl==1.26-1 +libparse-debianchangelog-perl==1.2.0-12 +libpath-iterator-rule-perl==1.009-1 +libpath-tiny-perl==0.100-1 +libpathplan4==2.38.0-17+deb9u1 +libpcap-dev==1.8.1-3+deb9u1 +libpcap0.8==1.8.1-3+deb9u1 +libpcap0.8-dev==1.8.1-3+deb9u1 +libpci-dev==1:3.5.2-1 +libpci3==1:3.5.2-1 +libpciaccess0==0.13.4-1+b2 +libpcre16-3==2:8.39-3 +libpcre3-dev==2:8.39-3 +libpcre32-3==2:8.39-3 +libpcrecpp0v5==2:8.39-3 +libpcsclite1==1.8.20-1 +libperl-dev==5.24.1-3+deb9u7 +libperl5.24==5.24.1-3+deb9u7 +libperlio-gzip-perl==0.19-1+b2 +libpgm-5.2-0==5.2.122~dfsg-2 +libpipeline1==1.4.1-2 +libpixman-1-0==0.34.0-1 +libplexus-ant-factory-java==1.0~alpha2.1-3 +libplexus-archiver-java==2.2-1+deb9u1 +libplexus-bsh-factory-java==1.0~alpha7-3.1 +libplexus-build-api-java==0.0.7-1 +libplexus-cipher-java==1.7-1 +libplexus-classworlds-java==1.5.0-5 +libplexus-classworlds2-java==2.5.2-1 +libplexus-cli-java==1.2-5 +libplexus-compiler-java==2.4-3 +libplexus-component-annotations-java==1.6-3 +libplexus-component-metadata-java==1.6-3 +libplexus-container-default-java==1.0-alpha-9-stable-1-7 +libplexus-container-default1.5-java==1.6-3 +libplexus-containers-java==1.0~beta3.0.7-8 +libplexus-containers1.5-java==1.6-3 +libplexus-i18n-java==1.0-beta-10-3 +libplexus-interactivity-api-java==1.0-alpha-6-7 +libplexus-interpolation-java==1.21-1 +libplexus-io-java==1.0~alpha5-2 +libplexus-sec-dispatcher-java==1.3.1-6 +libplexus-utils-java==1:1.5.15-4+deb9u1 +libplexus-utils2-java==3.0.22-1 +libplexus-velocity-java==1.2-1 +libpng-dev==1.6.28-1+deb9u1 +libpng16-16==1.6.28-1+deb9u1 +libpod-constants-perl==0.19-1 +libpolkit-agent-1-0==0.105-18+deb9u2 +libpolkit-backend-1-0==0.105-18+deb9u2 +libpolkit-gobject-1-0==0.105-18+deb9u2 +libpoppler64==0.48.0-2+deb9u4 +libpopt0==1.16-10+b2 +libpotrace0==1.13-3 +libprocps6==2:3.3.12-3+deb9u1 +libprotobuf-dev==3.0.0-9 +libprotobuf-lite10==3.0.0-9 +libprotobuf10==3.0.0-9 +libprotoc10==3.0.0-9 +libproxy1v5==0.4.14-2+deb9u2 +libpsl5==0.17.0-3 +libpsm-infinipath1==3.3+19.g67c0807.open-3 +libptexenc1==2016.20160513.41080.dfsg-2+deb9u1 +libpthread-stubs0-dev==0.3-4 +libpulse0==10.0-1+deb9u1 +libpython-all-dev==2.7.13-2 +libpython-dev==2.7.13-2 +libpython-stdlib==2.7.13-2 +libpython2.7==2.7.13-2+deb9u6 +libpython2.7-dev==2.7.13-2+deb9u6 +libpython2.7-minimal==2.7.13-2+deb9u6 +libpython2.7-stdlib==2.7.13-2+deb9u6 +libpython3-all-dbg==3.5.3-1 +libpython3-all-dev==3.5.3-1 +libpython3-dbg==3.5.3-1 +libpython3-dev==3.5.3-1 +libpython3-stdlib==3.5.3-1 +libpython3.5==3.5.3-1+deb9u5 +libpython3.5-dbg==3.5.3-1+deb9u5 +libpython3.5-dev==3.5.3-1+deb9u5 +libpython3.5-minimal==3.5.3-1+deb9u5 +libpython3.5-stdlib==3.5.3-1+deb9u5 +libqdox-java==1.12.1-2 +libqdox2-java==2.0~M3-3 +libqt4-dbus==4:4.8.7+dfsg-11+deb9u3 +libqt4-declarative==4:4.8.7+dfsg-11+deb9u3 +libqt4-designer==4:4.8.7+dfsg-11+deb9u3 +libqt4-dev==4:4.8.7+dfsg-11+deb9u3 +libqt4-dev-bin==4:4.8.7+dfsg-11+deb9u3 +libqt4-help==4:4.8.7+dfsg-11+deb9u3 +libqt4-network==4:4.8.7+dfsg-11+deb9u3 +libqt4-opengl==4:4.8.7+dfsg-11+deb9u3 +libqt4-opengl-dev==4:4.8.7+dfsg-11+deb9u3 +libqt4-qt3support==4:4.8.7+dfsg-11+deb9u3 +libqt4-script==4:4.8.7+dfsg-11+deb9u3 +libqt4-scripttools==4:4.8.7+dfsg-11+deb9u3 +libqt4-sql==4:4.8.7+dfsg-11+deb9u3 +libqt4-sql-mysql==4:4.8.7+dfsg-11+deb9u3 +libqt4-svg==4:4.8.7+dfsg-11+deb9u3 +libqt4-test==4:4.8.7+dfsg-11+deb9u3 +libqt4-xml==4:4.8.7+dfsg-11+deb9u3 +libqt4-xmlpatterns==4:4.8.7+dfsg-11+deb9u3 +libqt5concurrent5==5.7.1+dfsg-3+deb9u3 +libqt5core5a==5.7.1+dfsg-3+deb9u3 +libqt5dbus5==5.7.1+dfsg-3+deb9u3 +libqt5gui5==5.7.1+dfsg-3+deb9u3 +libqt5network5==5.7.1+dfsg-3+deb9u3 +libqt5opengl5==5.7.1+dfsg-3+deb9u3 +libqt5opengl5-dev==5.7.1+dfsg-3+deb9u3 +libqt5printsupport5==5.7.1+dfsg-3+deb9u3 +libqt5sql5==5.7.1+dfsg-3+deb9u3 +libqt5sql5-sqlite==5.7.1+dfsg-3+deb9u3 +libqt5svg5==5.7.1~20161021-2.1+deb9u1 +libqt5test5==5.7.1+dfsg-3+deb9u3 +libqt5widgets5==5.7.1+dfsg-3+deb9u3 +libqt5xml5==5.7.1+dfsg-3+deb9u3 +libqtcore4==4:4.8.7+dfsg-11+deb9u3 +libqtdbus4==4:4.8.7+dfsg-11+deb9u3 +libqtgui4==4:4.8.7+dfsg-11+deb9u3 +libquadmath0==6.3.0-18+deb9u1 +librdmacm1==1.1.0-2 +libreadline-dev==7.0-3 +libreadline5==5.2+dfsg-3+b1 +libreadline7==7.0-3 +libregexp-assemble-perl==0.36-1 +librelaxng-datatype-java==1.0+ds1-3 +librest-0.7-0==0.8.0-2 +librhash0==1.3.3-1+b2 +librhino-java==1.7.7.1-1 +librole-tiny-perl==2.000005-1 +librrd-dev==1.6.0-1+b2 +librrd8==1.6.0-1+b2 +librsvg2-2==2.40.21-0+deb9u1 +librsvg2-common==2.40.21-0+deb9u1 +librtmp1==2.4+20151223.gitfa8646d.1-1+b1 +libruby2.3==2.3.3-1+deb9u11 +libsasl2-2==2.1.27~101-g0780600+dfsg-3+deb9u2 +libsasl2-modules==2.1.27~101-g0780600+dfsg-3+deb9u2 +libsasl2-modules-db==2.1.27~101-g0780600+dfsg-3+deb9u2 +libsaxon-java==1:6.5.5-10 +libscalar-list-utils-perl==1:1.47-1 +libsdl1.2debian==1.2.15+dfsg1-4+deb9u1 +libseccomp2==2.3.1-2.1+deb9u1 +libselinux1-dev==2.6-3+b3 +libsensors4==1:3.4.0-4 +libsensors4-dev==1:3.4.0-4 +libsepol1-dev==2.6-2 +libservlet3.1-java==8.5.54-0+deb9u8 +libsigsegv2==2.10-5 +libsisu-inject-java==0.3.2-2 +libsisu-plexus-java==0.3.2-1 +libslang2==2.3.1-5 +libslang2-dev==2.3.1-5 +libslf4j-java==1.7.22-1 +libsm-dev==2:1.2.2-1+b3 +libsm6==2:1.2.2-1+b3 +libsndfile1==1.0.27-3+deb9u2 +libsnmp-base==5.7.3+dfsg-1.7+deb9u3 +libsnmp-dev==5.7.3+dfsg-1.7+deb9u3 +libsnmp30==5.7.3+dfsg-1.7+deb9u3 +libsoap-lite-perl==1.20-1 +libsocket6-perl==0.27-1+b1 +libsodium18==1.0.11-2 +libsort-key-perl==1.33-1+b3 +libsort-versions-perl==1.62-1 +libsoup-gnome2.4-1==2.56.0-2+deb9u2 +libsoup2.4-1==2.56.0-2+deb9u2 +libspice-server1==0.12.8-2.1+deb9u4 +libsqlite3-0==3.16.2-5+deb9u3 +libssh2-1==1.7.0-1+deb9u2 +libssl-dev==1.1.0l-1~deb9u6 +libssl1.0.2==1.0.2u-1~deb9u7 +libssl1.1==1.1.0l-1~deb9u6 +libstax-java==1.2.0-3 +libstdc++-6-dev==6.3.0-18+deb9u1 +libstrictures-perl==2.000003-1 +libstring-copyright-perl==0.003005-1 +libstring-escape-perl==2010.002-1 +libsub-exporter-perl==0.986-1 +libsub-exporter-progressive-perl==0.001013-1 +libsub-identify-perl==0.12-2+b1 +libsub-install-perl==0.928-1 +libsub-name-perl==0.21-1 +libsubunit-dev==1.1.0-3 +libsubunit0==1.1.0-3 +libsurefire-java==2.17-3 +libswitch-perl==2.17-2 +libsynctex1==2016.20160513.41080.dfsg-2+deb9u1 +libsys-hostname-long-perl==1.5-1 +libsystemd-dev==232-25+deb9u13 +libtask-weaken-perl==1.04-1 +libtasn1-6==4.10-1.1+deb9u1 +libtcl8.6==8.6.6+dfsg-1+b1 +libtcmalloc-minimal4==2.5-2.2 +libtexlua52==2016.20160513.41080.dfsg-2+deb9u1 +libtexluajit2==2016.20160513.41080.dfsg-2+deb9u1 +libtext-charwidth-perl==0.04-7+b5 +libtext-glob-perl==0.10-1 +libtext-iconv-perl==1.7-5+b4 +libtext-levenshtein-perl==0.13-1 +libtext-unidecode-perl==1.30-1 +libtext-wrapi18n-perl==0.06-7.1 +libthai-data==0.1.26-1 +libthai0==0.1.26-1 +libtie-ixhash-perl==1.23-2 +libtiff5==4.0.8-2+deb9u8 +libtimedate-perl==2.3000-2+deb9u1 +libtinfo-dev==6.0+20161126-1+deb9u2 +libtinyxml2-4==4.0.1-1 +libtinyxml2-dev==4.0.1-1 +libtk8.6==8.6.6-1+b1 +libtool==2.4.6-2 +libtool-bin==2.4.6-2 +libtry-tiny-perl==0.28-1 +libtsan0==6.3.0-18+deb9u1 +libtxc-dxtn-s2tc==1.0+git20151227-2 +libubsan0==6.3.0-18+deb9u1 +libudev-dev==232-25+deb9u13 +libunicode-utf8-perl==0.60-1+b3 +libunistring0==0.9.6+really0.9.3-0.1 +libunwind-dev==1.1-4.1 +libunwind8==1.1-4.1 +libunwind8-dev==1.1-4.1 +liburi-perl==1.71-1 +libusb-0.1-4==2:0.1.12-30 +libusb-1.0-0==2:1.0.21-1 +libusb-1.0-0-dev==2:1.0.21-1 +libusb-1.0-doc==2:1.0.21-1 +libusb-dev==2:0.1.12-30 +libusbredirparser1==0.7.1-1+deb9u1 +libutempter0==1.1.6-3 +libuv1==1.34.2-1~bpo9+1 +libvariable-magic-perl==0.61-1 +libvdeplug2==2.3.2+r586-2.1 +libvirt-clients==3.0.0-4+deb9u5 +libvirt0==3.0.0-4+deb9u5 +libvorbis0a==1.3.5-4+deb9u3 +libvorbisenc2==1.3.5-4+deb9u3 +libwacom-bin==0.22-1+b1 +libwacom-common==0.22-1 +libwacom2==0.22-1+b1 +libwagon-java==1.0.0-9 +libwagon2-java==2.10-6 +libwayland-client0==1.12.0-1+deb9u1 +libwayland-cursor0==1.12.0-1+deb9u1 +libwayland-egl1-mesa==13.0.6-1+b2 +libwayland-server0==1.12.0-1+deb9u1 +libwebp6==0.5.2-1+deb9u1 +libwebpdemux2==0.5.2-1+deb9u1 +libwebpmux2==0.5.2-1+deb9u1 +libwmf0.2-7==0.2.8.4-10.6 +libwrap0==7.6.q-26 +libwrap0-dev==7.6.q-26 +libwww-perl==6.15-1 +libwww-robotrules-perl==6.01-1 +libx11-6==2:1.6.4-3+deb9u4 +libx11-data==2:1.6.4-3+deb9u4 +libx11-dev==2:1.6.4-3+deb9u4 +libx11-doc==2:1.6.4-3+deb9u4 +libx11-protocol-perl==0.56-7 +libx11-xcb-dev==2:1.6.4-3+deb9u4 +libx11-xcb1==2:1.6.4-3+deb9u4 +libx32asan3==6.3.0-18+deb9u1 +libx32atomic1==6.3.0-18+deb9u1 +libx32cilkrts5==6.3.0-18+deb9u1 +libx32gcc-6-dev==6.3.0-18+deb9u1 +libx32gcc1==1:6.3.0-18+deb9u1 +libx32gomp1==6.3.0-18+deb9u1 +libx32itm1==6.3.0-18+deb9u1 +libx32quadmath0==6.3.0-18+deb9u1 +libx32stdc++6==6.3.0-18+deb9u1 +libx32ubsan0==6.3.0-18+deb9u1 +libxalan2-java==2.7.1-9 +libxapian30==1.4.3-2+deb9u3 +libxau-dev==1:1.0.8-1 +libxau6==1:1.0.8-1 +libxaw7==2:1.0.13-1+b2 +libxbean-java==4.5-4 +libxcb-dri2-0==1.12-1 +libxcb-dri2-0-dev==1.12-1 +libxcb-dri3-0==1.12-1 +libxcb-dri3-dev==1.12-1 +libxcb-glx0==1.12-1 +libxcb-glx0-dev==1.12-1 +libxcb-icccm4==0.4.1-1 +libxcb-image0==0.4.0-1+b2 +libxcb-keysyms1==0.4.0-1+b2 +libxcb-present-dev==1.12-1 +libxcb-present0==1.12-1 +libxcb-randr0==1.12-1 +libxcb-randr0-dev==1.12-1 +libxcb-render-util0==0.3.9-1 +libxcb-render0==1.12-1 +libxcb-render0-dev==1.12-1 +libxcb-shape0==1.12-1 +libxcb-shape0-dev==1.12-1 +libxcb-shm0==1.12-1 +libxcb-sync-dev==1.12-1 +libxcb-sync1==1.12-1 +libxcb-util0==0.3.8-3+b2 +libxcb-xfixes0==1.12-1 +libxcb-xfixes0-dev==1.12-1 +libxcb-xinerama0==1.12-1 +libxcb-xkb1==1.12-1 +libxcb1==1.12-1 +libxcb1-dev==1.12-1 +libxcomposite1==1:0.4.4-2 +libxcursor1==1:1.1.14-1+deb9u2 +libxdamage-dev==1:1.1.4-2+b3 +libxdamage1==1:1.1.4-2+b3 +libxdelta2==1.1.3-9.1+b1 +libxdmcp-dev==1:1.1.2-3 +libxdmcp6==1:1.1.2-3 +libxdot4==2.38.0-17+deb9u1 +libxen-4.8==4.8.5.final+shim4.10.4-1+deb9u12 +libxenstore3.0==4.8.5.final+shim4.10.4-1+deb9u12 +libxerces2-java==2.11.0-7 +libxext-dev==2:1.3.3-1+b2 +libxext6==2:1.3.3-1+b2 +libxfixes-dev==1:5.0.3-1 +libxfixes3==1:5.0.3-1 +libxft2==2.3.2-1+b2 +libxi6==2:1.7.9-1 +libxinerama1==2:1.1.3-1+b3 +libxkbcommon-x11-0==0.7.1-2~deb9u1 +libxkbcommon0==0.7.1-2~deb9u1 +libxml-commons-external-java==1.4.01-2 +libxml-commons-resolver1.1-java==1.2-7 +libxml-libxml-perl==2.0128+dfsg-1+deb9u1 +libxml-namespacesupport-perl==1.11-1 +libxml-parser-perl==2.44-2+b1 +libxml-sax-base-perl==1.07-1 +libxml-sax-expat-perl==0.40-2 +libxml-sax-perl==0.99+dfsg-2 +libxml-simple-perl==2.22-1 +libxml-twig-perl==1:3.50-1 +libxml-xpathengine-perl==0.13-1 +libxml2==2.9.4+dfsg1-2.2+deb9u7 +libxml2-dev==2.9.4+dfsg1-2.2+deb9u7 +libxml2-utils==2.9.4+dfsg1-2.2+deb9u7 +libxmlgraphics-commons-java==2.1-2 +libxmlrpc-lite-perl==0.717-1 +libxmu6==2:1.1.2-2 +libxmuu1==2:1.1.2-2 +libxom-java==1.2.10-1 +libxpm4==1:3.5.12-1 +libxpp2-java==2.1.10-7 +libxpp3-java==1.1.4c-2 +libxrandr2==2:1.5.1-1 +libxrender1==1:0.9.10-1 +libxshmfence-dev==1.2-1+b2 +libxshmfence1==1.2-1+b2 +libxslt1.1==1.1.29-2.1+deb9u2 +libxss1==1:1.2.2-1 +libxt-dev==1:1.1.5-1 +libxt6==1:1.1.5-1 +libxtables-dev==1.6.0+snapshot20161117-6 +libxtables12==1.6.0+snapshot20161117-6 +libxtst6==2:1.2.3-1 +libxv1==2:1.0.11-1 +libxxf86dga1==2:1.1.4-1+b3 +libxxf86vm-dev==1:1.1.4-1+b2 +libxxf86vm1==1:1.1.4-1+b2 +libyajl2==2.1.0-2+b3 +libyaml-0-2==0.1.7-2 +libyaml-dev==0.1.7-2 +libyaml-libyaml-perl==0.63-2 +libyaml-tiny-perl==1.70-1 +libzmq3-dev==4.2.1-4+deb9u4 +libzmq5==4.2.1-4+deb9u4 +libzzip-0-13==0.13.62-3.2~deb9u2 +licensecheck==3.0.29-1 +lintian==2.5.50.4 +linux-compiler-gcc-6-x86==4.9.303-1 +linux-headers-4.9.0-18-amd64==4.9.303-1 +linux-headers-4.9.0-18-common==4.9.303-1 +linux-headers-amd64==4.9+80+deb9u16 +linux-kbuild-4.9==4.9.303-1 +linux-libc-dev==4.9.303-1 +linuxdoc-tools==0.9.72-4 +llvm-3.8==1:3.8.1-24 +llvm-3.8-dev==1:3.8.1-24 +llvm-3.8-runtime==1:3.8.1-24 +lmodern==2.004.5-3 +locales==2.24-11+deb9u4 +logrotate==3.11.0-0.1 +lsb-release==9.20161125 +lsof==4.89+dfsg-0.1 +lua-bitop==1.0.2-4 +lua-bitop-dev==1.0.2-4 +lua-cjson==2.1.0+dfsg-2 +lua-cjson-dev==2.1.0+dfsg-2 +lvm2==2.02.168-2 +lynx==2.8.9dev11-1+deb9u1 +lynx-common==2.8.9dev11-1+deb9u1 +m4==1.4.18-1 +mailutils==1:3.1.1-1 +mailutils-common==1:3.1.1-1 +make==4.1-9.1 +man-db==2.7.6.1-2 +man2html-base==1.6g-9 +manpages==4.10-2 +manpages-dev==4.10-2 +maven==3.3.9-4 +maven-debian-helper==2.1.3 +maven-repo-helper==1.9.2 +mesa-common-dev==13.0.6-1+b2 +mesa-utils==8.3.0-3 +mime-support==3.60 +module-assistant==0.11.9 +mpi-default-bin==1.8 +mpi-default-dev==1.8 +mysql-common==5.8+1.0.2 +ncurses-term==6.0+20161126-1+deb9u2 +netbase==5.4 +netpbm==2:10.0-15.3+b2 +ocl-icd-libopencl1==2.2.11-1 +openjdk-8-jdk==8u332-ga-1~deb9u1 +openjdk-8-jdk-headless==8u332-ga-1~deb9u1 +openjdk-8-jre==8u332-ga-1~deb9u1 +openjdk-8-jre-headless==8u332-ga-1~deb9u1 +openmpi-bin==2.0.2-2 +openmpi-common==2.0.2-2 +opensp==1.5.2-13+b1 +openssh-client==1:7.4p1-10+deb9u7 +openssh-server==1:7.4p1-10+deb9u7 +openssh-sftp-server==1:7.4p1-10+deb9u7 +openssl==1.1.0l-1~deb9u6 +packagekit==1.1.5-2+deb9u2 +packagekit-tools==1.1.5-2+deb9u2 +patch==2.7.5-1+deb9u2 +patchutils==0.3.4-2 +pbuilder==0.228.7 +pbzip2==1.1.9-1+b1 +perl==5.24.1-3+deb9u7 +perl-modules-5.24==5.24.1-3+deb9u7 +perl-openssl-defaults==3 +php-cli==1:7.0+49 +php-codecoverage==4.0.0+dfsg-1 +php-common==1:49 +php-deepcopy==1.5.5-1 +php-doctrine-instantiator==1.0.5-2 +php-file-iterator==1.4.1-2 +php-pear==1:1.10.1+submodules+notgz-9+deb9u3 +php-phpdocumentor-reflection-docblock==2.0.4-2 +php-phpspec-prophecy==1.6.2-1 +php-symfony-yaml==2.8.7+dfsg-1.3+deb9u3 +php-text-template==1.2.1-2 +php-timer==1.0.8-1 +php-token-stream==1.4.8-2 +php-xml==1:7.0+49 +php7.0-cli==7.0.33-0+deb9u12 +php7.0-common==7.0.33-0+deb9u12 +php7.0-json==7.0.33-0+deb9u12 +php7.0-opcache==7.0.33-0+deb9u12 +php7.0-readline==7.0.33-0+deb9u12 +php7.0-xml==7.0.33-0+deb9u12 +phpunit==5.4.6-2~deb9u1 +phpunit-code-unit-reverse-lookup==1.0.0-2 +phpunit-comparator==1.2.0-2 +phpunit-diff==1.4.1-2 +phpunit-environment==1.3.7-1 +phpunit-exporter==1.2.2-1 +phpunit-global-state==1.1.1-2 +phpunit-mock-object==3.2.3-1 +phpunit-object-enumerator==1.0.0-2 +phpunit-recursion-context==1.0.2-2 +phpunit-resource-operations==1.0.0-2 +phpunit-version==2.0.0-2 +pigz==2.3.4-1 +pinentry-curses==1.0.0-2 +pkg-config==0.29-4+b1 +pkg-php-tools==1.35 +po-debconf==1.0.20 +policykit-1==0.105-18+deb9u2 +poppler-data==0.4.7-8 +preview-latex-style==11.90-1 +pristine-tar==1.38 +procmail==3.22-25+deb9u1 +procps==2:3.3.12-3+deb9u1 +prosper==1.00.4+cvs.2007.05.01-4.1 +protobuf-compiler==3.0.0-9 +ps2eps==1.68+binaryfree-2 +psmisc==22.21-2.1+b2 +psutils==1.17.dfsg-4 +publicsuffix==20190415.1030-0+deb9u1 +pylint==1.6.5-1 +python==2.7.13-2 +python-alabaster==0.7.8-1 +python-all==2.7.13-2 +python-all-dev==2.7.13-2 +python-apt==1.4.3 +python-apt-common==1.4.3 +python-astroid==1.4.9-1 +python-attr==16.3.0-1 +python-babel==2.3.4+dfsg.1-2+deb9u1 +python-babel-localedata==2.3.4+dfsg.1-2+deb9u1 +python-backports.functools-lru-cache==1.3-1 +python-bs4==4.5.3-1 +python-cffi-backend==1.9.1-2 +python-chardet==2.3.0-2 +python-click==6.6-1 +python-colorama==0.3.7-1 +python-constantly==15.1.0-1 +python-cov-core==1.15.0-1 +python-coverage==4.2+dfsg.1-2 +python-crypto==2.6.1-7 +python-cryptography==1.7.1-3+deb9u2 +python-dateutil==2.5.3-2 +python-dbus==1.2.4-1+b1 +python-debian==0.1.30 +python-dev==2.7.13-2 +python-docutils==0.13.1+dfsg-2 +python-enum34==1.1.6-1 +python-gi==3.22.0-2 +python-gpg==1.8.0-3+b2 +python-html5lib==0.999999999-1 +python-idna==2.2-1 +python-imagesize==0.7.1-1 +python-incremental==16.10.1-3 +python-ipaddr==2.1.11-2 +python-ipaddress==1.0.17-1 +python-isort==4.2.5+ds1-2+deb9u1 +python-jinja2==2.8-1 +python-keyring==10.1-1 +python-keyrings.alt==1.3-1 +python-lazy-object-proxy==1.2.2-1 +python-lxml==3.7.1-1+deb9u5 +python-markupsafe==0.23-3 +python-minimal==2.7.13-2 +python-nose2==0.6.5-2 +python-openssl==16.2.0-1 +python-pam==0.4.2-13.2 +python-parse==1.6.6-0.1 +python-pil==4.0.0-4+deb9u4 +python-pip==9.0.1-2+deb9u2 +python-pip-whl==9.0.1-2+deb9u2 +python-pkg-resources==33.1.1-1 +python-py==1.4.32-3 +python-pyasn1==0.1.9-2 +python-pyasn1-modules==0.0.7-0.1 +python-pygments==2.2.0+dfsg-1+deb9u2 +python-pytest==3.0.6-1 +python-pytest-cov==2.4.0-2 +python-requests==2.12.4-1 +python-roman==2.0.0-2 +python-secretstorage==2.3.1-2 +python-serial==3.2.1-1 +python-service-identity==16.0.0-2 +python-setuptools==33.1.1-1 +python-six==1.10.0-3 +python-sphinx==1.4.9-2 +python-sphinx-rtd-theme==0.1.9-1 +python-stdeb==0.8.5-1 +python-tk==2.7.13-1 +python-twisted==16.6.0-2+deb9u3 +python-twisted-bin==16.6.0-2+deb9u3 +python-twisted-core==16.6.0-2+deb9u3 +python-tz==2016.7-0.3 +python-urllib3==1.19.1-1+deb9u1 +python-webencodings==0.5-2 +python-wheel==0.29.0-2 +python-wrapt==1.9.0-2 +python-xdg==0.25-4+deb9u1 +python-zope.interface==4.3.2-1 +python2.7==2.7.13-2+deb9u6 +python2.7-dev==2.7.13-2+deb9u6 +python2.7-minimal==2.7.13-2+deb9u6 +python3==3.5.3-1 +python3-alabaster==0.7.8-1 +python3-all==3.5.3-1 +python3-all-dbg==3.5.3-1 +python3-all-dev==3.5.3-1 +python3-apt==1.4.3 +python3-babel==2.3.4+dfsg.1-2+deb9u1 +python3-cffi-backend==1.9.1-2 +python3-chardet==2.3.0-2 +python3-crypto==2.6.1-7 +python3-cryptography==1.7.1-3+deb9u2 +python3-dbg==3.5.3-1 +python3-dbus==1.2.4-1+b1 +python3-debian==0.1.30 +python3-dev==3.5.3-1 +python3-docutils==0.13.1+dfsg-2 +python3-gi==3.22.0-2 +python3-idna==2.2-1 +python3-imagesize==0.7.1-1 +python3-jinja2==2.8-1 +python3-keyring==10.1-1 +python3-keyrings.alt==1.3-1 +python3-magic==1:5.30-1+deb9u3 +python3-markupsafe==0.23-3 +python3-minimal==3.5.3-1 +python3-pil==4.0.0-4+deb9u4 +python3-pip==9.0.1-2+deb9u2 +python3-pkg-resources==33.1.1-1 +python3-pyasn1==0.1.9-2 +python3-pycurl==7.43.0-2 +python3-pygments==2.2.0+dfsg-1+deb9u2 +python3-roman==2.0.0-2 +python3-secretstorage==2.3.1-2 +python3-setuptools==33.1.1-1 +python3-six==1.10.0-3 +python3-software-properties==0.96.20.2-1+deb9u1 +python3-sphinx==1.4.9-2 +python3-tz==2016.7-0.3 +python3-wheel==0.29.0-2 +python3-xdg==0.25-4+deb9u1 +python3.5==3.5.3-1+deb9u5 +python3.5-dbg==3.5.3-1+deb9u5 +python3.5-dev==3.5.3-1+deb9u5 +python3.5-minimal==3.5.3-1+deb9u5 +qdbus==4:4.8.7+dfsg-11+deb9u3 +qemu-kvm==1:2.8+dfsg-6+deb9u17 +qemu-system-common==1:2.8+dfsg-6+deb9u17 +qemu-system-x86==1:2.8+dfsg-6+deb9u17 +qemu-utils==1:2.8+dfsg-6+deb9u17 +qt-at-spi==0.4.0-5 +qt4-linguist-tools==4:4.8.7+dfsg-11+deb9u3 +qt4-qmake==4:4.8.7+dfsg-11+deb9u3 +qt5-default==5.7.1+dfsg-3+deb9u3 +qt5-gtk-platformtheme==5.7.1+dfsg-3+deb9u3 +qt5-qmake==5.7.1+dfsg-3+deb9u3 +qtbase5-dev==5.7.1+dfsg-3+deb9u3 +qtbase5-dev-tools==5.7.1+dfsg-3+deb9u3 +qtchooser==63-g13a3d08-1 +qtcore4-l10n==4:4.8.7+dfsg-11+deb9u3 +qttranslations5-l10n==5.7.1~20161021-1 +quilt==0.63-8 +rake==10.5.0-2+deb9u1 +readline-common==7.0-3 +rename==0.20-4 +rhino==1.7.7.1-1 +rrdtool==1.6.0-1+b2 +rsync==3.1.2-1+deb9u3 +rsyslog==8.24.0-1+deb9u3 +ruby==1:2.3.3 +ruby-all-dev==1:2.3.3 +ruby-did-you-mean==1.0.0-2 +ruby-minitest==5.9.0-1 +ruby-net-telnet==0.1.1-2 +ruby-power-assert==0.3.0-1 +ruby-setup==3.4.1-9 +ruby-test-unit==3.1.7-2 +ruby2.3==2.3.3-1+deb9u11 +ruby2.3-dev==2.3.3-1+deb9u11 +rubygems-integration==1.11 +seabios==1.10.2-1 +sgml-base==1.29 +sgml-data==2.0.10 +shared-mime-info==1.8-1+deb9u1 +sharutils==1:4.15.2-2+deb9u1 +software-properties-common==0.96.20.2-1+deb9u1 +sphinx-common==1.4.9-2 +sphinx-rtd-theme-common==0.1.9-1 +squashfs-tools==1:4.3-3+deb9u3 +stgit==0.17.1-1 +strace==4.15-2 +sudo==1.8.19p1-2.1+deb9u3 +swig==3.0.10-1.1 +swig3.0==3.0.10-1.1 +systemd==232-25+deb9u13 +systemd-shim==10-3 +t1utils==1.39-2 +tcl==8.6.0+9 +tcl8.6==8.6.6+dfsg-1+b1 +tcpd==7.6.q-26 +telnet==0.17-41 +tex-common==6.06 +tex-gyre==20160520-1 +texi2html==1.82+dfsg1-5 +texinfo==6.3.0.dfsg.1-1+b2 +texlive-base==2016.20170123-5 +texlive-binaries==2016.20160513.41080.dfsg-2+deb9u1 +texlive-extra-utils==2016.20170123-5 +texlive-font-utils==2016.20170123-5 +texlive-fonts-recommended==2016.20170123-5 +texlive-fonts-recommended-doc==2016.20170123-5 +texlive-generic-extra==2016.20170123-5 +texlive-generic-recommended==2016.20170123-5 +texlive-latex-base==2016.20170123-5 +texlive-latex-base-doc==2016.20170123-5 +texlive-latex-extra==2016.20170123-5 +texlive-latex-extra-doc==2016.20170123-5 +texlive-latex-recommended==2016.20170123-5 +texlive-latex-recommended-doc==2016.20170123-5 +texlive-pictures==2016.20170123-5 +texlive-pictures-doc==2016.20170123-5 +texlive-pstricks==2016.20170123-5 +texlive-pstricks-doc==2016.20170123-5 +time==1.7-25.1+b1 +tipa==2:1.3-20 +tk==8.6.0+9 +tk8.6==8.6.6-1+b1 +tk8.6-blt2.5==2.5.3+dfsg-3 +ucf==3.0036 +unattended-upgrades==0.93.1+nmu1 +unzip==6.0-21+deb9u2 +velocity==1.7-5+deb9u1 +vim==2:8.0.0197-4+deb9u6 +vim-common==2:8.0.0197-4+deb9u6 +vim-runtime==2:8.0.0197-4+deb9u6 +wdiff==1.2.2-2 +wget==1.18-5+deb9u3 +x11-common==1:7.7+19 +x11-utils==7.7+3+b1 +x11-xserver-utils==7.7+7+b1 +x11proto-core-dev==7.0.31-1 +x11proto-damage-dev==1:1.2.1-2 +x11proto-dri2-dev==2.8-2 +x11proto-fixes-dev==1:5.0-2 +x11proto-gl-dev==1.4.17-1 +x11proto-input-dev==2.3.2-1 +x11proto-kb-dev==1.0.7-1 +x11proto-xext-dev==7.3.0-1 +x11proto-xf86vidmode-dev==2.3.1-2 +xauth==1:1.0.9-1+b2 +xbitmaps==1.1.1-2 +xdelta==1.1.3-9.1+b1 +xdelta3==3.0.11-dfsg-1+b1 +xdg-user-dirs==0.15-2+b1 +xdg-utils==1.1.1-1+deb9u2 +xkb-data==2.19-1+deb9u1 +xml-core==0.17 +xmlto==0.0.28-1 +xorg-sgml-doctools==1:1.11-1 +xsltproc==1.1.29-2.1+deb9u2 +xterm==327-2+deb9u3 +xtrans-dev==1.3.5-1 +xxd==2:8.0.0197-4+deb9u6 +xz-utils==5.2.2-1.2+deb9u1 +zip==3.0-11+b1 +zlib1g==1:1.2.8.dfsg-5+deb9u1 +zlib1g-dev==1:1.2.8.dfsg-5+deb9u1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch-arm64 b/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch-arm64 new file mode 100644 index 000000000000..00f894c2df08 --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch-arm64 @@ -0,0 +1,8 @@ +docker-ce==18.06.3~ce~3-0~debian +libdrm-freedreno1==2.4.74-1 +libdrm-tegra0==2.4.74-1 +libtext-charwidth-perl==0.04-7+b3 +libtext-iconv-perl==1.7-5+b3 +libunicode-utf8-perl==0.60-1+b2 +libxslt1-dev==1.1.29-2.1+deb9u2 +nodejs==10.24.1-1nodesource1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch-armhf b/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch-armhf new file mode 100644 index 000000000000..fb64a5239dd9 --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch-armhf @@ -0,0 +1,14 @@ +docker-ce==18.06.3~ce~3-0~debian +libdrm-exynos1==2.4.74-1 +libdrm-freedreno1==2.4.74-1 +libdrm-omap1==2.4.74-1 +libdrm-tegra0==2.4.74-1 +libegl1-mesa-dev==13.0.6-1+b2 +libgles2-mesa==13.0.6-1+b2 +libgles2-mesa-dev==13.0.6-1+b2 +libtext-charwidth-perl==0.04-7+b6 +libwayland-bin==1.12.0-1+deb9u1 +libwayland-dev==1.12.0-1+deb9u1 +libxslt1-dev==1.1.29-2.1+deb9u2 +linux-compiler-gcc-6-arm==4.9.303-1 +nodejs==10.24.1-1nodesource1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-git b/files/build/versions/dockers/sonic-slave-stretch/versions-git new file mode 100644 index 000000000000..4971ef0418e6 --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-git @@ -0,0 +1,2 @@ +https://chromium.googlesource.com/chromium/tools/depot_tools.git==8f1fea025d78c26046d3135e026f097dc2022698 +https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-py2 b/files/build/versions/dockers/sonic-slave-stretch/versions-py2 new file mode 100644 index 000000000000..e83c0d4279cc --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-py2 @@ -0,0 +1,79 @@ +alabaster==0.7.8 +astroid==1.4.9 +attrs==16.3.0 +babel==2.3.4 +backports.functools-lru-cache==1.3 +beautifulsoup4==4.5.3 +chardet==2.3.0 +click==6.6 +colorama==0.3.7 +constantly==15.1.0 +cov-core==1.15.0 +coverage==4.2 +crc16==0.1.1 +cryptography==1.7.1 +ctypesgen==0.post125 +docutils==0.13.1 +enum34==1.1.6 +gbp==0.8.12.2 +gcovr==3.3 +gpg==1.8.0 +html5lib==0.999999999 +idna==2.2 +imagesize==0.7.1 +incremental==16.10.1 +ipaddr==2.1.11 +ipaddress==1.0.17 +isort==4.2.5 +j2cli==0.3.10 +jinja2==2.11.3 +keyring==10.1 +keyrings.alt==1.3 +lazy-object-proxy==1.2.2 +lxml==4.6.5 +m2crypto==0.36.0 +markupsafe==1.1.1 +mmh3==3.0.0 +mockredispy==2.9.3 +nose==1.3.7 +nose2==0.6.5 +pam==0.4.2 +parse==1.6.6 +pexpect==4.6.0 +pillow==4.0.0 +ptyprocess==0.7.0 +py==1.4.32 +pyasn1==0.1.9 +pyasn1-modules==0.0.7 +pycrypto==2.6.1 +pygments==2.2.0 +pygobject==3.22.0 +pylint==1.6.5 +pympler==0.8 +pyopenssl==16.2.0 +pyserial==3.2.1 +pyste==0.9.10 +pytest==3.0.6 +pytest-cov==2.4.0 +pytest-runner==4.4 +python-apt==1.4.3 +python-dateutil==2.5.3 +python-debian==0.1.30 +pytz==2016.7 +pyxdg==0.25 +pyyaml==5.3.1 +requests==2.12.4 +roman==2.0.0 +secretstorage==2.3.1 +service-identity==16.0.0 +six==1.10.0 +sphinx==1.4.9 +sphinx-rtd-theme==0.1.9 +stdeb==0.8.5 +stgit===0.17.1-dirty +twisted==16.6.0 +typing==3.10.0.0 +urllib3==1.19.1 +webencodings==0.5 +wrapt==1.9.0 +zope.interface==4.3.2 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-py3 b/files/build/versions/dockers/sonic-slave-stretch/versions-py3 new file mode 100644 index 000000000000..b06ec424cf06 --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-py3 @@ -0,0 +1,39 @@ +alabaster==0.7.8 +babel==2.3.4 +bitarray==2.5.1 +chardet==2.3.0 +cryptography==1.7.1 +devscripts==2.17.6+deb9u2 +docutils==0.13.1 +file-magic==0.3.0 +idna==2.2 +imagesize==0.7.1 +jinja2==2.8 +keyring==10.1 +keyrings.alt==1.3 +lxml==4.6.5 +markupsafe==0.23 +mockredispy==2.9.3 +nose==1.3.7 +parameterized==0.8.1 +pillow==4.0.0 +pyang==2.4.0 +pyangbind==0.8.1 +pyasn1==0.1.9 +pycrypto==2.6.1 +pycurl==7.43.0 +pyfakefs==4.5.0 +pygments==2.2.0 +pygobject==3.22.0 +python-apt==1.4.3 +python-debian==0.1.30 +pytz==2016.7 +pyxdg==0.25 +pyyaml==5.3.1 +redis==3.5.3 +regex==2022.1.18 +roman==2.0.0 +secretstorage==2.3.1 +six==1.10.0 +sphinx==1.4.9 +unattended-upgrades==0.1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-web b/files/build/versions/dockers/sonic-slave-stretch/versions-web new file mode 100644 index 000000000000..46b2a530550a --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-web @@ -0,0 +1,5 @@ +https://download.docker.com/linux/debian/gpg==1afae06b34a13c1b3d9cb61a26285a15 +https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==4ea37edbea9fc2b88bdb5bbc2855be04 +https://sonicstorage.blob.core.windows.net/packages/cmake/cmake-data_3.13.2-1_bpo9%2B1_all.deb?st=2020-03-27T02%3A22%3A24Z&se=2100-03-26T19%3A00%3A00Z&sp=rl&sv=2018-03-28&sr=b&sig=Xby%2Bm3OZOjPB%2FSlDbHD65yDcPzAgoys%2FA3vK8RB4BzA%3D==147cf42f3a68f6d6f1e53d95a599a1af +https://sonicstorage.blob.core.windows.net/packages/cmake/cmake_3.13.2-1_bpo9%2B1_amd64.deb?st=2020-03-27T02%3A27%3A21Z&se=2100-03-26T19%3A00%3A00Z&sp=rl&sv=2018-03-28&sr=b&sig=4MvmmDBQuicFEJYakLm7xCNU19yJ8GIP4ankFSnITKY%3D==e75c741e8b6918b8f03625e456fa0275 +https://storage.googleapis.com/golang/go1.14.2.linux-amd64.tar.gz==856d248e3ea8a287d13e5f6afd086282 \ No newline at end of file diff --git a/files/build/versions/host-base-image/versions-deb-bullseye b/files/build/versions/host-base-image/versions-deb-bullseye new file mode 100644 index 000000000000..9149d88a7764 --- /dev/null +++ b/files/build/versions/host-base-image/versions-deb-bullseye @@ -0,0 +1,96 @@ +adduser==3.118 +apt==2.2.4 +base-files==11.1+deb11u3 +base-passwd==3.5.51 +bash==5.1-2+b3 +bsdutils==1:2.36.1-8+deb11u1 +coreutils==8.32-4+b1 +dash==0.5.11+git20200708+dd9ef66-5 +debconf==1.5.77 +debian-archive-keyring==2021.1.1 +debianutils==4.11.2 +diffutils==1:3.7-5 +dpkg==1.20.9 +e2fsprogs==1.46.2-2 +findutils==4.8.0-1 +gcc-10-base==10.2.1-6 +gcc-9-base==9.3.0-22 +gpgv==2.2.27-2+deb11u1 +grep==3.6-1 +gzip==1.10-4 +hostname==3.23 +init-system-helpers==1.60 +libacl1==2.2.53-10 +libapt-pkg6.0==2.2.4 +libattr1==1:2.4.48-6 +libaudit-common==1:3.0-2 +libaudit1==1:3.0-2 +libblkid1==2.36.1-8+deb11u1 +libbz2-1.0==1.0.8-4 +libc-bin==2.31-13+deb11u3 +libc6==2.31-13+deb11u3 +libcap-ng0==0.7.9-2.2+b1 +libcom-err2==1.46.2-2 +libcrypt1==1:4.4.18-4 +libdb5.3==5.3.28+dfsg1-0.8 +libdebconfclient0==0.260 +libext2fs2==1.46.2-2 +libffi7==3.3-6 +libgcc-s1==10.2.1-6 +libgcrypt20==1.8.7-6 +libgmp10==2:6.2.1+dfsg-1+deb11u1 +libgnutls30==3.7.1-5 +libgpg-error0==1.38-2 +libgssapi-krb5-2==1.18.3-6+deb11u1 +libhogweed6==3.7.3-1 +libidn2-0==2.3.0-5 +libk5crypto3==1.18.3-6+deb11u1 +libkeyutils1==1.6.1-2 +libkrb5-3==1.18.3-6+deb11u1 +libkrb5support0==1.18.3-6+deb11u1 +liblz4-1==1.9.3-2 +liblzma5==5.2.5-2 +libmount1==2.36.1-8+deb11u1 +libnettle8==3.7.3-1 +libnsl2==1.3.0-2 +libp11-kit0==0.23.22-1 +libpam-modules==1.4.0-9+deb11u1 +libpam-modules-bin==1.4.0-9+deb11u1 +libpam-runtime==1.4.0-9+deb11u1 +libpam0g==1.4.0-9+deb11u1 +libpcre2-8-0==10.36-2 +libpcre3==2:8.39-13 +libseccomp2==2.5.1-1+deb11u1 +libselinux1==3.1-3 +libsemanage-common==3.1-1 +libsemanage1==3.1-1+b2 +libsepol1==3.1-1 +libsmartcols1==2.36.1-8+deb11u1 +libss2==1.46.2-2 +libssl1.1==1.1.1n-0+deb11u1 +libstdc++6==10.2.1-6 +libsystemd0==247.3-7 +libtasn1-6==4.16.0-2 +libtinfo6==6.2+20201114-2 +libtirpc-common==1.3.1-1 +libtirpc3==1.3.1-1 +libudev1==247.3-7 +libunistring2==0.9.10-4 +libuuid1==2.36.1-8+deb11u1 +libxxhash0==0.8.0-2 +libzstd1==1.4.8+dfsg-2.1 +login==1:4.8.1-1 +logsave==1.46.2-2 +lsb-base==11.1.0 +mawk==1.3.4.20200120-2 +mount==2.36.1-8+deb11u1 +ncurses-base==6.2+20201114-2 +ncurses-bin==6.2+20201114-2 +passwd==1:4.8.1-1 +perl-base==5.32.1-4+deb11u2 +sed==4.7-1 +sysvinit-utils==2.96-7+deb11u1 +tar==1.34+dfsg-1 +tzdata==2021a-1+deb11u2 +util-linux==2.36.1-8+deb11u1 +zlib1g==1:1.2.11.dfsg-2 \ No newline at end of file diff --git a/files/build/versions/host-base-image/versions-deb-bullseye-arm64 b/files/build/versions/host-base-image/versions-deb-bullseye-arm64 new file mode 100644 index 000000000000..dad0cf19bbc9 --- /dev/null +++ b/files/build/versions/host-base-image/versions-deb-bullseye-arm64 @@ -0,0 +1 @@ +coreutils==8.32-4 \ No newline at end of file diff --git a/files/build/versions/host-base-image/versions-deb-bullseye-armhf b/files/build/versions/host-base-image/versions-deb-bullseye-armhf new file mode 100644 index 000000000000..dad0cf19bbc9 --- /dev/null +++ b/files/build/versions/host-base-image/versions-deb-bullseye-armhf @@ -0,0 +1 @@ +coreutils==8.32-4 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-deb-bullseye b/files/build/versions/host-image/versions-deb-bullseye new file mode 100644 index 000000000000..6143d8ced17a --- /dev/null +++ b/files/build/versions/host-image/versions-deb-bullseye @@ -0,0 +1,401 @@ +acl==2.2.53-10 +apparmor==2.13.6-10 +apt-transport-https==2.2.4 +audisp-tacplus==1.0.2 +auditd==1:3.0-2 +bash-completion==1:2.11-2 +bash-tacplus==1.0.0 +binutils==2.35.2-2 +binutils-common==2.35.2-2 +binutils-x86-64-linux-gnu==2.35.2-2 +bridge-utils==1.7-1 +bsdextrautils==2.36.1-8+deb11u1 +bsdmainutils==12.1.7+nmu3 +build-essential==12.9 +busybox==1:1.30.1-6+b3 +bzip2==1.0.8-4 +ca-certificates==20210119 +cgroup-tools==0.41-11 +conntrack==1:1.4.6-2 +containerd.io==1.5.11-1 +cpio==2.13+dfsg-4 +cpp==4:10.2.1-1 +cpp-10==10.2.1-6 +cron==3.0pl1-137 +curl==7.74.0-1.3+deb11u1 +dbus==1.12.20-2 +device-tree-compiler==1.6.0-1 +dirmngr==2.2.27-2+deb11u1 +distro-info-data==0.51+deb11u1 +dmidecode==3.3-2 +dmsetup==2:1.02.175-2.1 +docker-ce==5:20.10.14~3-0~debian-bullseye +docker-ce-cli==5:20.10.14~3-0~debian-bullseye +dpkg==1.20.10 +dpkg-dev==1.20.10 +eatmydata==105-9 +ebtables==2.0.11-4+b1 +efibootmgr==17-1 +fdisk==2.36.1-8+deb11u1 +file==1:5.39-3 +firmware-amd-graphics==20210315-3 +firmware-linux-nonfree==20210315-3 +firmware-misc-nonfree==20210315-3 +flashrom==0.9.7 +fontconfig-config==2.13.1-4.2 +fonts-dejavu-core==2.37-2 +freeipmi-common==1.6.6-4+deb11u1 +g++==4:10.2.1-1 +g++-10==10.2.1-6 +gcc==4:10.2.1-1 +gcc-10==10.2.1-6 +gdisk==1.0.6-1.1 +gettext-base==0.21-4 +gir1.2-freedesktop==1.66.1-1+b1 +gir1.2-glib-2.0==1.66.1-1+b1 +gir1.2-packagekitglib-1.0==1.2.2-2 +gnupg==2.2.27-2+deb11u1 +gnupg-l10n==2.2.27-2+deb11u1 +gnupg-utils==2.2.27-2+deb11u1 +gobject-introspection==1.66.1-1+b1 +gpg==2.2.27-2+deb11u1 +gpg-agent==2.2.27-2+deb11u1 +gpg-wks-client==2.2.27-2+deb11u1 +gpg-wks-server==2.2.27-2+deb11u1 +gpgconf==2.2.27-2+deb11u1 +gpgsm==2.2.27-2+deb11u1 +grub-common==2.04-20 +grub2-common==2.04-20 +gzip==1.10-4+deb11u1 +haveged==1.9.14-1 +hdparm==9.60+ds-1 +hping3==3.a2.ds2-10 +hw-management==1.mlnx.7.0020.2004 +i2c-tools==4.2-1+b1 +ifmetric==0.3-5 +ifupdown2==3.0.0-1 +initramfs-tools==0.140 +initramfs-tools-core==0.140 +ipmitool==1.8.18-10.1 +iproute2==5.10.0-4 +iptables==1.8.7-1 +iptables-persistent==1.0.15 +iputils-ping==3:20210202-1 +isc-dhcp-client==4.4.1-2.3 +iso-codes==4.6.0-1 +jq==1.6-2.1 +kdump-tools==1:1.6.8.4 +kernel-mft-dkms-modules-5.10.0-12-2-amd64==4.20.0 +kexec-tools==1:2.0.20-2.1 +klibc-utils==2.0.8-6.1 +kmod==28-1 +less==551-2 +libabsl20200923==0~20200923.3-2 +libapparmor1==2.13.6-10 +libargon2-1==0~20171227-0.2 +libasan6==10.2.1-6 +libassuan0==2.5.3-7.1 +libatomic1==10.2.1-6 +libauparse0==1:3.0-2 +libbinutils==2.35.2-2 +libblkid-dev==2.36.1-8+deb11u1 +libbpf0==1:0.3-2 +libbrotli-dev==1.0.9-2+b2 +libbrotli1==1.0.9-2+b2 +libbsd0==0.11.3-1 +libc-ares2==1.17.1-1+deb11u1 +libc-dev-bin==2.31-13+deb11u3 +libc-l10n==2.31-13+deb11u3 +libc6-dev==2.31-13+deb11u3 +libcairo-gobject2==1.16.0-5 +libcairo-script-interpreter2==1.16.0-5 +libcairo2==1.16.0-5 +libcairo2-dev==1.16.0-5 +libcap2==1:2.44-1 +libcap2-bin==1:2.44-1 +libcbor0==0.5.0+dfsg-2 +libcc1-0==10.2.1-6 +libcgroup1==0.41-11 +libcrypt-dev==1:4.4.18-4 +libcryptsetup12==2:2.3.7-1+deb11u1 +libctf-nobfd0==2.35.2-2 +libctf0==2.35.2-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libcurl4==7.74.0-1.3+deb11u1 +libdbd-sqlite3-perl==1.66-1+b1 +libdbi-perl==1.643-3+b1 +libdbus-1-3==1.12.20-2 +libdbus-1-dev==1.12.20-2 +libdevmapper1.02.1==2:1.02.175-2.1 +libdns-export1110==1:9.11.19+dfsg-2.1 +libdpkg-perl==1.20.10 +libdw1==0.183-1 +libeatmydata1==105-9 +libedit2==3.1-20191231-2+b1 +libefiboot1==37-6 +libefivar1==37-6 +libelf1==0.183-1 +libestr0==0.1.10-2.1+b1 +libexpat1==2.2.10-2+deb11u3 +libexpat1-dev==2.2.10-2+deb11u3 +libfastjson4==0.99.9-1 +libfdisk1==2.36.1-8+deb11u1 +libfdt1==1.6.0-1 +libffi-dev==3.3-6 +libfido2-1==1.6.0-2 +libfontconfig-dev==2.13.1-4.2 +libfontconfig1==2.13.1-4.2 +libfontconfig1-dev==2.13.1-4.2 +libfreeipmi17==1.6.6-4+deb11u1 +libfreetype-dev==2.10.4+dfsg-1 +libfreetype6==2.10.4+dfsg-1 +libfreetype6-dev==2.10.4+dfsg-1 +libfuse2==2.9.9-5 +libgcc-10-dev==10.2.1-6 +libgdbm-compat4==1.19-2 +libgdbm6==1.19-2 +libgirepository-1.0-1==1.66.1-1+b1 +libgirepository1.0-dev==1.66.1-1+b1 +libglib2.0-0==2.66.8-1 +libglib2.0-bin==2.66.8-1 +libglib2.0-data==2.66.8-1 +libglib2.0-dev==2.66.8-1 +libglib2.0-dev-bin==2.66.8-1 +libgomp1==10.2.1-6 +libgpm2==1.20.7-8 +libgrpc++1==1.30.2-3 +libgrpc10==1.30.2-3 +libhavege2==1.9.14-1 +libhiredis0.14==0.14.0-3~bpo9+1 +libi2c0==4.2-1+b1 +libice-dev==2:1.0.10-1 +libice6==2:1.0.10-1 +libiniparser1==4.1-4 +libip4tc2==1.8.7-1 +libip6tc2==1.8.7-1 +libisc-export1105==1:9.11.19+dfsg-2.1 +libisl23==0.23-1 +libitm1==10.2.1-6 +libjansson4==2.13.1-1.1 +libjq1==1.6-2.1 +libjs-jquery==3.5.1+dfsg+~3.5.5-7 +libjs-sphinxdoc==3.4.3-2 +libjs-underscore==1.9.1~dfsg-3 +libjson-c5==0.15-2 +libk5crypto3==1.18.3-6+deb11u1+fips +libklibc==2.0.8-6.1 +libkmod2==28-1 +libksba8==1.5.0-3 +libldap-2.4-2==2.4.57+dfsg-3+deb11u1 +liblognorm5==2.0.5-1.1 +liblsan0==10.2.1-6 +liblzma5==5.2.5-2.1~deb11u1 +liblzo2-2==2.10-2 +libmagic-mgc==1:5.39-3 +libmagic1==1:5.39-3 +libmd0==1.0.3-3 +libmnl0==1.0.4-3 +libmount-dev==2.36.1-8+deb11u1 +libmpc3==1.2.0-1 +libmpdec3==2.5.1-1 +libmpfr6==4.1.0-3 +libncurses6==6.2+20201114-2 +libncursesw6==6.2+20201114-2 +libnet1==1.1.6+dfsg-3.1 +libnetfilter-conntrack3==1.0.8-3 +libnfnetlink0==1.0.1-3+b1 +libnftnl11==1.1.9-1 +libnghttp2-14==1.43.0-1 +libnl-3-200==3.5.0-1 +libnl-cli-3-200==3.5.0-1 +libnl-genl-3-200==3.5.0-1 +libnl-nf-3-200==3.5.0-1 +libnl-route-3-200==3.5.0-1 +libnpth0==1.6-3 +libnsl-dev==1.3.0-2 +libnss-radius==1.0.1-1 +libnss-tacplus==1.0.4-1 +libonig5==6.9.6-1.1 +libopts25==1:5.18.16-4 +libpackagekit-glib2-18==1.2.2-2 +libpam-radius-auth==1.4.1-1 +libpam-tacplus==1.4.1-1 +libpcap0.8==1.10.0-2 +libpci3==1:3.7.0-5 +libpcre16-3==2:8.39-13 +libpcre2-16-0==10.36-2 +libpcre2-32-0==10.36-2 +libpcre2-dev==10.36-2 +libpcre2-posix2==10.36-2 +libpcre3-dev==2:8.39-13 +libpcre32-3==2:8.39-13 +libpcrecpp0v5==2:8.39-13 +libperl5.32==5.32.1-4+deb11u2 +libpixman-1-0==0.40.0-1 +libpixman-1-dev==0.40.0-1 +libpng-dev==1.6.37-3 +libpng16-16==1.6.37-3 +libpopt0==1.18-2 +libprocps8==2:3.3.17-5 +libprotobuf23==3.12.4-1 +libpsl5==0.21.0-1.2 +libpthread-stubs0-dev==0.4-1 +libpython3-dev==3.9.2-3 +libpython3-stdlib==3.9.2-3 +libpython3.9==3.9.2-1 +libpython3.9-dev==3.9.2-1 +libpython3.9-minimal==3.9.2-1 +libpython3.9-stdlib==3.9.2-1 +libquadmath0==10.2.1-6 +libreadline8==8.1-1 +librtmp1==2.4+20151223.gitfa8646d.1-2+b2 +libsasl2-2==2.1.27+dfsg-2.1+deb11u1 +libsasl2-modules-db==2.1.27+dfsg-2.1+deb11u1 +libselinux1-dev==3.1-3 +libsepol1-dev==3.1-1 +libsm-dev==2:1.2.3-1 +libsm6==2:1.2.3-1 +libsqlite3-0==3.34.1-3 +libssh2-1==1.9.0-2 +libssl-dev==1.1.1k-1+deb11u1+fips +libssl1.1==1.1.1n-0+deb11u2 +libstdc++-10-dev==10.2.1-6 +libswsscommon==1.0.0 +libsysfs2==2.1.0+repack-7 +libsystemd-dev==247.3-7 +libtac2==1.4.1-1 +libtcl8.6==8.6.11+dfsg-1 +libtirpc-dev==1.3.1-1 +libtsan0==10.2.1-6 +libubootenv-tool==0.3.2-0.1 +libubootenv0.1==0.3.2-0.1 +libubsan1==10.2.1-6 +libusb-1.0-0==2:1.0.24-3 +libutempter0==1.2.1-2 +libwrap0==7.6.q-31 +libx11-6==2:1.7.2-1 +libx11-data==2:1.7.2-1 +libx11-dev==2:1.7.2-1 +libxau-dev==1:1.0.9-1 +libxau6==1:1.0.9-1 +libxcb-render0==1.14-3 +libxcb-render0-dev==1.14-3 +libxcb-shm0==1.14-3 +libxcb-shm0-dev==1.14-3 +libxcb1==1.14-3 +libxcb1-dev==1.14-3 +libxdmcp-dev==1:1.1.2-3 +libxdmcp6==1:1.1.2-3 +libxext-dev==2:1.3.3-1.1 +libxext6==2:1.3.3-1.1 +libxrender-dev==1:0.9.10-1 +libxrender1==1:0.9.10-1 +libxtables12==1.8.7-1 +libyaml-0-2==0.2.2-1 +libyang==1.0.73 +libyang-cpp==1.0.73 +linux-base==4.6 +linux-image-5.10.0-12-2-amd64-unsigned==5.10.103-1 +linux-libc-dev==5.10.113-1 +locales==2.31-13+deb11u3 +logrotate==3.18.0-2 +lsb-release==11.1.0 +make==4.3-4.1 +makedev==2.3.1-94.1 +makedumpfile==1:1.6.8-4 +media-types==4.0.0 +mft==4.20.0-34 +mft-oem==4.20.0-34 +monit==1:5.20.0-6 +mtd-utils==1:2.1.2-2 +mtr-tiny==0.94-1+deb11u1 +ncal==12.1.7+nmu3 +ndisc6==1.0.4-2 +net-tools==1.60+git20181103.0eebece-1 +netbase==6.3 +netfilter-persistent==1.0.15 +ntp==1:4.2.8p15+dfsg-1+deb10u2 +ntpstat==0.0.0.1-2+b1 +opennsl-modules==7.1.0.0 +openssh-client==1:8.4p1-5+fips +openssh-server==1:8.4p1-5+fips +openssh-sftp-server==1:8.4p1-5+fips +openssl==1.1.1n-0+deb11u2 +patch==2.7.6-7 +pci.ids==0.0~2021.02.08-1 +pciutils==1:3.7.0-5 +perl==5.32.1-4+deb11u2 +perl-modules-5.32==5.32.1-4+deb11u2 +picocom==3.1-2+b1 +pinentry-curses==1.1.0-4 +pkg-config==0.29.2-1 +procps==2:3.3.17-5 +psmisc==23.4-2 +python-apt-common==2.2.1 +python-is-python3==3.9.2-1 +python-pip-whl==20.3.4-4+deb11u1 +python3==3.9.2-3 +python3-apt==2.2.1 +python3-dbus==1.2.16-5 +python3-dev==3.9.2-3 +python3-distutils==3.9.2-1 +python3-lib2to3==3.9.2-1 +python3-mako==1.1.3+ds1-2 +python3-markdown==3.3.4-1 +python3-markupsafe==1.1.1-1+b3 +python3-minimal==3.9.2-3 +python3-pip==20.3.4-4+deb11u1 +python3-pkg-resources==52.0.0-4 +python3-pycurl==7.43.0.6-5 +python3-setuptools==52.0.0-4 +python3-software-properties==0.96.20.2-2.1 +python3-swsscommon==1.0.0 +python3-wheel==0.34.2-1 +python3-yang==1.0.73 +python3.9==3.9.2-1 +python3.9-dev==3.9.2-1 +python3.9-minimal==3.9.2-1 +rasdaemon==0.6.6-2 +readline-common==8.1-1 +rsyslog==8.2102.0-2+deb11u1 +runit-helper==2.10.3 +screen==4.8.0-6 +sensible-utils==0.0.14 +smartmontools==7.2-1 +software-properties-common==0.96.20.2-2.1 +sonic-device-data==1.0-1 +sonic-host-services-data==1.0-1 +sonic-platform-pddf==1.1 +sonic-utilities-data==1.0-1 +sqlite3==3.34.1-3 +squashfs-tools==1:4.4-2+deb11u2 +sudo==1.9.5p2-3 +swig==4.0.2-1 +swig4.0==4.0.2-1 +sx-kernel==1.mlnx.4.5.1500 +symcrypt-openssl==0.1 +sysfsutils==2.1.0+repack-7 +systemd==247.3-7 +systemd-sonic-generator==1.0.0 +systemd-sysv==247.3-7 +tcpdump==4.99.0-2 +tcptraceroute==1.5beta7+debian-4.1+b1 +traceroute==1:2.1.0-2+b1 +u-boot-tools==2021.01+dfsg-5 +ucf==3.0043 +udev==247.3-7 +unzip==6.0-26 +usbutils==1:013-3 +uuid-dev==2.36.1-8+deb11u1 +vim==2:8.2.2434-3+deb11u1 +vim-common==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 +x11-common==1:7.7+22 +x11proto-dev==2020.1-1 +x11proto-xext-dev==2020.1-1 +xorg-sgml-doctools==1:1.11-1.1 +xtrans-dev==1.4.0-1 +xxd==2:8.2.2434-3+deb11u1 +xz-utils==5.2.5-2.1~deb11u1 +zlib1g==1:1.2.11.dfsg-2+deb11u1 +zlib1g-dev==1:1.2.11.dfsg-2+deb11u1 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-deb-bullseye-arm64 b/files/build/versions/host-image/versions-deb-bullseye-arm64 new file mode 100644 index 000000000000..9692e5b5aaf1 --- /dev/null +++ b/files/build/versions/host-image/versions-deb-bullseye-arm64 @@ -0,0 +1,14 @@ +binutils-aarch64-linux-gnu==2.35.2-2 +ebtables==2.0.11-4 +icu-devtools==67.1-7 +libicu-dev==67.1-7 +libicu67==67.1-7 +libxml2==2.9.10+dfsg-6.7+deb11u2 +libxml2-dev==2.9.10+dfsg-6.7+deb11u2 +libxslt1-dev==1.1.34-4 +libxslt1.1==1.1.34-4 +linux-image-5.10.0-12-2-arm64-unsigned==5.10.103-1 +ntpstat==0.0.0.1-2 +picocom==3.1-2 +traceroute==1:2.1.0-2 +tsingma-bsp==1.0 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-deb-bullseye-armhf b/files/build/versions/host-image/versions-deb-bullseye-armhf new file mode 100644 index 000000000000..940a770eb151 --- /dev/null +++ b/files/build/versions/host-image/versions-deb-bullseye-armhf @@ -0,0 +1,18 @@ +binutils-arm-linux-gnueabihf==2.35.2-2 +ebtables==2.0.11-4 +icu-devtools==67.1-7 +libicu-dev==67.1-7 +libicu67==67.1-7 +libssl-dev==1.1.1n-0+deb11u2 +libxml2==2.9.10+dfsg-6.7+deb11u2 +libxml2-dev==2.9.10+dfsg-6.7+deb11u2 +libxslt1-dev==1.1.34-4 +libxslt1.1==1.1.34-4 +linux-image-5.10.0-12-2-armmp==5.10.103-1 +mrvlprestera==1.0 +ntpstat==0.0.0.1-2 +openssh-client==1:8.4p1-5 +openssh-server==1:8.4p1-5 +openssh-sftp-server==1:8.4p1-5 +picocom==3.1-2 +traceroute==1:2.1.0-2 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-py3 b/files/build/versions/host-image/versions-py3 new file mode 100644 index 000000000000..f3a774afffd7 --- /dev/null +++ b/files/build/versions/host-image/versions-py3 @@ -0,0 +1,68 @@ +azure-common==1.1.28 +azure-nspkg==3.0.2 +azure-storage==0.36.0 +bitarray==1.5.3 +blessed==1.19.1 +certifi==2022.5.18.1 +cffi==1.15.0 +charset-normalizer==2.0.12 +click==7.0 +click-log==0.4.0 +colorful==0.5.4 +cryptography==37.0.2 +dbus-python==1.2.16 +docker==5.0.3 +docker-image-py==0.1.12 +enlighten==1.10.2 +filelock==3.7.1 +grpcio==1.39.0 +grpcio-tools==1.39.0 +idna==3.3 +ijson==2.6.1 +ipaddr==2.2.0 +ipaddress==1.0.23 +j2cli==0.3.10 +jinja2==3.1.2 +jsondiff==2.0.0 +jsonpatch==1.32 +jsonpointer==2.3 +jsonschema==2.6.0 +lxml==4.6.5 +m2crypto==0.38.0 +markupsafe==2.1.1 +natsort==6.2.1 +netaddr==0.8.0 +netifaces==0.11.0 +pathtools==0.1.2 +pddf-platform==1.0 +pexpect==4.8.0 +prefixed==0.3.2 +prettyprinter==0.18.0 +protobuf==3.20.1 +psutil==5.9.1 +ptyprocess==0.7.0 +pyang==2.5.3 +pyangbind==0.8.1 +pycairo==1.21.0 +pycparser==2.21 +pygments==2.12.0 +pygobject==3.42.1 +pyroute2==0.5.19 +python-apt==2.2.1 +python-dateutil==2.8.2 +pyyaml==5.4.1 +redis==3.5.3 +regex==2022.4.24 +requests==2.27.1 +scapy==2.4.4 +semantic-version==2.10.0 +six==1.16.0 +systemd-python==234 +tabulate==0.8.2 +toposort==1.6 +urllib3==1.26.9 +watchdog==0.10.3 +wcwidth==0.2.5 +websocket-client==1.3.2 +www-authenticate==0.9.2 +xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-py3-all-armhf b/files/build/versions/host-image/versions-py3-all-armhf new file mode 100644 index 000000000000..431dc5a43838 --- /dev/null +++ b/files/build/versions/host-image/versions-py3-all-armhf @@ -0,0 +1 @@ +cryptography==3.3.1 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-web b/files/build/versions/host-image/versions-web new file mode 100644 index 000000000000..c9f935ca9a85 --- /dev/null +++ b/files/build/versions/host-image/versions-web @@ -0,0 +1 @@ +https://download.docker.com/linux/debian/gpg==1afae06b34a13c1b3d9cb61a26285a15 \ No newline at end of file From ea3df2a21a94f78c252d4455cd7b4393cfca41a5 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Sat, 4 Jun 2022 09:43:05 -0700 Subject: [PATCH 006/259] [platform build] fix platform ycabled build (#11020) * remove python2 wheel for sonic-platform-common Signed-off-by: vaibhav-dahiya --- platform/mellanox/mlnx-platform-api.mk | 11 ----------- rules/sonic-platform-common.dep | 8 -------- rules/sonic-platform-common.mk | 15 --------------- slave.mk | 2 -- 4 files changed, 36 deletions(-) diff --git a/platform/mellanox/mlnx-platform-api.mk b/platform/mellanox/mlnx-platform-api.mk index 496f393caa66..ecd8b8532e6d 100644 --- a/platform/mellanox/mlnx-platform-api.mk +++ b/platform/mellanox/mlnx-platform-api.mk @@ -14,17 +14,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # -# SONIC_PLATFORM_API_PY2 package - -ifeq ($(ENABLE_PY2_MODULES), y) - SONIC_PLATFORM_API_PY2 = mlnx_platform_api-1.0-py2-none-any.whl - $(SONIC_PLATFORM_API_PY2)_SRC_PATH = $(PLATFORM_PATH)/mlnx-platform-api - $(SONIC_PLATFORM_API_PY2)_PYTHON_VERSION = 2 - $(SONIC_PLATFORM_API_PY2)_DEPENDS = $(SONIC_PY_COMMON_PY2) $(SONIC_PLATFORM_COMMON_PY2) $(SONIC_CONFIG_ENGINE_PY2) - SONIC_PYTHON_WHEELS += $(SONIC_PLATFORM_API_PY2) -endif - -export mlnx_platform_api_py2_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_PLATFORM_API_PY2))" # SONIC_PLATFORM_API_PY3 package diff --git a/rules/sonic-platform-common.dep b/rules/sonic-platform-common.dep index 632c92c1ac78..e65222869c84 100644 --- a/rules/sonic-platform-common.dep +++ b/rules/sonic-platform-common.dep @@ -4,14 +4,6 @@ DEP_FILES := $(SONIC_COMMON_FILES_LIST) rules/sonic-platform-common.mk rules/s DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) SMDEP_FILES := $(addprefix $(SPATH)/,$(shell cd $(SPATH) && git ls-files|grep -Ev "^sonic_sfp|^sonic_eeprom")) -ifeq ($(ENABLE_PY2_MODULES), y) - $(SONIC_PLATFORM_COMMON_PY2)_CACHE_MODE := GIT_CONTENT_SHA - $(SONIC_PLATFORM_COMMON_PY2)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) - $(SONIC_PLATFORM_COMMON_PY2)_DEP_FILES := $(DEP_FILES) - $(SONIC_PLATFORM_COMMON_PY2)_SMDEP_FILES := $(SMDEP_FILES) - $(SONIC_PLATFORM_COMMON_PY2)_SMDEP_PATHS := $(SPATH) -endif - $(SONIC_PLATFORM_COMMON_PY3)_CACHE_MODE := GIT_CONTENT_SHA $(SONIC_PLATFORM_COMMON_PY3)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) diff --git a/rules/sonic-platform-common.mk b/rules/sonic-platform-common.mk index 09ce14faab15..bd5f14eaf902 100644 --- a/rules/sonic-platform-common.mk +++ b/rules/sonic-platform-common.mk @@ -1,22 +1,7 @@ -ifeq ($(ENABLE_PY2_MODULES), y) - # sonic-platform-common package - - SONIC_PLATFORM_COMMON_PY2 = sonic_platform_common-1.0-py2-none-any.whl - $(SONIC_PLATFORM_COMMON_PY2)_SRC_PATH = $(SRC_PATH)/sonic-platform-common - $(SONIC_PLATFORM_COMMON_PY2)_PYTHON_VERSION = 2 - $(SONIC_PLATFORM_COMMON_PY2)_DEPENDS += $(SONIC_PY_COMMON_PY2) $(SONIC_CONFIG_ENGINE_PY2) - $(SONIC_PLATFORM_COMMON_PY2)_DEBS_DEPENDS += $(PYTHON_SWSSCOMMON) - SONIC_PYTHON_WHEELS += $(SONIC_PLATFORM_COMMON_PY2) -endif - # Als build sonic-platform-common into python3 wheel, so we can use PSU code in SNMP docker SONIC_PLATFORM_COMMON_PY3 = sonic_platform_common-1.0-py3-none-any.whl $(SONIC_PLATFORM_COMMON_PY3)_SRC_PATH = $(SRC_PATH)/sonic-platform-common $(SONIC_PLATFORM_COMMON_PY3)_PYTHON_VERSION = 3 $(SONIC_PLATFORM_COMMON_PY3)_DEPENDS += $(SONIC_PY_COMMON_PY3) $(SONIC_CONFIG_ENGINE_PY3) $(SONIC_PLATFORM_COMMON_PY3)_DEBS_DEPENDS += $(PYTHON3_SWSSCOMMON) -ifeq ($(ENABLE_PY2_MODULES), y) - # Synthetic dependency just to avoid race condition - $(SONIC_PLATFORM_COMMON_PY3)_DEPENDS += $(SONIC_PLATFORM_COMMON_PY2) -endif SONIC_PYTHON_WHEELS += $(SONIC_PLATFORM_COMMON_PY3) diff --git a/slave.mk b/slave.mk index 7b91ba0384c0..884ab2c1fb91 100644 --- a/slave.mk +++ b/slave.mk @@ -1064,7 +1064,6 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ $(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_PY_COMMON_PY3)) \ $(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_CONFIG_ENGINE_PY2)) \ $(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_CONFIG_ENGINE_PY3)) \ - $(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_PLATFORM_COMMON_PY2)) \ $(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_PLATFORM_COMMON_PY3)) \ $(addprefix $(PYTHON_WHEELS_PATH)/,$(REDIS_DUMP_LOAD_PY2)) \ $(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_PLATFORM_API_PY2)) \ @@ -1134,7 +1133,6 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ export config_engine_py3_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_CONFIG_ENGINE_PY3))" export swsssdk_py2_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(SWSSSDK_PY2))" export swsssdk_py3_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(SWSSSDK_PY3))" - export platform_common_py2_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_PLATFORM_COMMON_PY2))" export platform_common_py3_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_PLATFORM_COMMON_PY3))" export redis_dump_load_py2_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(REDIS_DUMP_LOAD_PY2))" export redis_dump_load_py3_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(REDIS_DUMP_LOAD_PY3))" From 043656dfe86f16c8bb4c8835a00f7fd3875bc4bb Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Thu, 2 Jun 2022 15:35:17 +0800 Subject: [PATCH 007/259] Support symcrypt fips config for aboot/uboot (#10729) Why I did it Support symcrypt fips config for aboot/uboot --- build_image.sh | 8 ++++++++ files/Aboot/boot0.j2 | 2 +- installer/arm64/install.sh | 3 +++ installer/armhf/install.sh | 3 +++ platform/centec-arm64/platform.conf | 6 ++++-- platform/marvell-arm64/platform.conf | 2 +- platform/marvell-armhf/platform.conf | 2 +- 7 files changed, 21 insertions(+), 5 deletions(-) diff --git a/build_image.sh b/build_image.sh index 71351dbfe7e0..0963ff4a4843 100755 --- a/build_image.sh +++ b/build_image.sh @@ -200,6 +200,14 @@ elif [ "$IMAGE_TYPE" = "aboot" ]; then generate_device_list ".platforms_asic" zip -g $OUTPUT_ABOOT_IMAGE .platforms_asic + if [ "$ENABLE_FIPS" = "y" ]; then + echo "sonic_fips=1" > kernel-cmdline + else + echo "sonic_fips=0" > kernel-cmdline + fi + zip -g $OUTPUT_ABOOT_IMAGE kernel-cmdline + rm kernel-cmdline + zip -g $OUTPUT_ABOOT_IMAGE $ABOOT_BOOT_IMAGE rm $ABOOT_BOOT_IMAGE if [ "$SONIC_ENABLE_IMAGE_SIGNATURE" = "y" ]; then diff --git a/files/Aboot/boot0.j2 b/files/Aboot/boot0.j2 index 5fe64b6884a4..ad7540df0946 100644 --- a/files/Aboot/boot0.j2 +++ b/files/Aboot/boot0.j2 @@ -86,7 +86,7 @@ installer_image_path="$image_path/$installer_image" boot_config="$target_path/boot-config" -cmdline_allowlist="crashkernel hwaddr_ma1" +cmdline_allowlist="crashkernel hwaddr_ma1 sonic_fips" # for backward compatibility with the sonic_upgrade= behavior install="${install:-${sonic_upgrade:-}}" diff --git a/installer/arm64/install.sh b/installer/arm64/install.sh index dee3ceec9038..445b2007faeb 100755 --- a/installer/arm64/install.sh +++ b/installer/arm64/install.sh @@ -181,6 +181,9 @@ if [ "$install_env" = "onie" ]; then fi fi +extra_cmdline_linux=%%EXTRA_CMDLINE_LINUX%% +echo "EXTRA_CMDLINE_LINUX=$extra_cmdline_linux" + # Update Bootloader Menu with installed image bootloader_menu_config diff --git a/installer/armhf/install.sh b/installer/armhf/install.sh index 9ade40d5149e..0dd6e48a08e7 100755 --- a/installer/armhf/install.sh +++ b/installer/armhf/install.sh @@ -181,6 +181,9 @@ if [ "$install_env" = "onie" ]; then fi fi +extra_cmdline_linux=%%EXTRA_CMDLINE_LINUX%% +echo "EXTRA_CMDLINE_LINUX=$extra_cmdline_linux" + # Update Bootloader Menu with installed image bootloader_menu_config diff --git a/platform/centec-arm64/platform.conf b/platform/centec-arm64/platform.conf index 39dc4b70239a..09cf9be6e8cc 100755 --- a/platform/centec-arm64/platform.conf +++ b/platform/centec-arm64/platform.conf @@ -16,9 +16,10 @@ mount_partition() { bootloader_menu_config() { if [ "$install_env" = "onie" ]; then + fw_setenv -f linuxargs "${extra_cmdline_linux}" fw_setenv -f nos_bootcmd "test -n \$boot_once && setenv do_boot_once \$boot_once && setenv boot_once && saveenv && run do_boot_once; run boot_next" - fw_setenv -f sonic_image_1 "ext4load mmc 0:1 \$loadaddr \$sonic_dir_1/boot/sonic_arm64.fit && setenv bootargs quiet console=\$consoledev,\$baudrate root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 loopfstype=squashfs loop=\$sonic_dir_1/fs.squashfs systemd.unified_cgroup_hierarchy=0 && bootm \$loadaddr" + fw_setenv -f sonic_image_1 "ext4load mmc 0:1 \$loadaddr \$sonic_dir_1/boot/sonic_arm64.fit && setenv bootargs quiet console=\$consoledev,\$baudrate root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 loopfstype=squashfs loop=\$sonic_dir_1/fs.squashfs systemd.unified_cgroup_hierarchy=0 \${linuxargs} && bootm \$loadaddr" fw_setenv -f sonic_image_2 "NONE" fw_setenv -f sonic_dir_1 $image_dir fw_setenv -f sonic_dir_2 "NONE" @@ -37,9 +38,10 @@ bootloader_menu_config() { fi done + fw_setenv linuxargs "${extra_cmdline_linux}" fw_setenv nos_bootcmd "test -n \$boot_once && setenv do_boot_once \$boot_once && setenv boot_once && saveenv && run do_boot_once; run boot_next" - fw_setenv sonic_image_$idx "ext4load mmc 0:1 \$loadaddr \$sonic_dir_$idx/boot/sonic_arm64.fit && setenv bootargs quiet console=\$consoledev,\$baudrate root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 loopfstype=squashfs loop=\$sonic_dir_$idx/fs.squashfs systemd.unified_cgroup_hierarchy=0 && bootm \$loadaddr" + fw_setenv sonic_image_$idx "ext4load mmc 0:1 \$loadaddr \$sonic_dir_$idx/boot/sonic_arm64.fit && setenv bootargs quiet console=\$consoledev,\$baudrate root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 loopfstype=squashfs loop=\$sonic_dir_$idx/fs.squashfs systemd.unified_cgroup_hierarchy=0 \${linuxargs} && bootm \$loadaddr" fw_setenv sonic_dir_$idx $image_dir fw_setenv sonic_version_$idx `echo $image_dir | sed "s/^image-/SONiC-OS-/g"` diff --git a/platform/marvell-arm64/platform.conf b/platform/marvell-arm64/platform.conf index 8ecdfa317425..4ef62d36b87e 100644 --- a/platform/marvell-arm64/platform.conf +++ b/platform/marvell-arm64/platform.conf @@ -108,7 +108,7 @@ prepare_boot_menu() { BORDER='echo "---------------------------------------------------";echo;' fw_setenv ${FW_ARG} print_menu $BORDER $BOOT1 $BOOT2 $BOOT3 $BORDER > /dev/null - fw_setenv ${FW_ARG} linuxargs "net.ifnames=0 loopfstype=squashfs loop=$image_dir/$FILESYSTEM_SQUASHFS systemd.unified_cgroup_hierarchy=0 varlog_size=$VAR_LOG" > /dev/null + fw_setenv ${FW_ARG} linuxargs "net.ifnames=0 loopfstype=squashfs loop=$image_dir/$FILESYSTEM_SQUASHFS systemd.unified_cgroup_hierarchy=0 varlog_size=$VAR_LOG ${extra_cmdline_linux}" > /dev/null fw_setenv ${FW_ARG} linuxargs_old "net.ifnames=0 loopfstype=squashfs loop=$image_dir_old/$FILESYSTEM_SQUASHFS systemd.unified_cgroup_hierarchy=0 varlog_size=$VAR_LOG" > /dev/null sonic_bootargs_old='setenv bootargs root='$demo_dev' rw rootwait rootfstype=ext4 panic=1 console=ttyS0,115200 ${othbootargs} ${mtdparts} ${linuxargs_old}' fw_setenv ${FW_ARG} sonic_bootargs_old $sonic_bootargs_old > /dev/null || true diff --git a/platform/marvell-armhf/platform.conf b/platform/marvell-armhf/platform.conf index 6dd8e238f98e..df71c5d1b128 100644 --- a/platform/marvell-armhf/platform.conf +++ b/platform/marvell-armhf/platform.conf @@ -147,7 +147,7 @@ prepare_boot_menu() { BORDER='echo "---------------------------------------------------";echo;' fw_setenv ${FW_ARG} print_menu $BORDER $BOOT1 $BOOT2 $BOOT3 $BORDER > /dev/null - fw_setenv ${FW_ARG} linuxargs "net.ifnames=0 loopfstype=squashfs loop=$image_dir/$FILESYSTEM_SQUASHFS systemd.unified_cgroup_hierarchy=0 varlog_size=$VAR_LOG loglevel=4" > /dev/null + fw_setenv ${FW_ARG} linuxargs "net.ifnames=0 loopfstype=squashfs loop=$image_dir/$FILESYSTEM_SQUASHFS systemd.unified_cgroup_hierarchy=0 varlog_size=$VAR_LOG loglevel=4 ${extra_cmdline_linux}" > /dev/null fw_setenv ${FW_ARG} linuxargs_old "net.ifnames=0 loopfstype=squashfs loop=$image_dir_old/$FILESYSTEM_SQUASHFS systemd.unified_cgroup_hierarchy=0 varlog_size=$VAR_LOG loglevel=4" > /dev/null # Set boot configs From 76502c821eeaceac1e0ea9dd951af4af142c8502 Mon Sep 17 00:00:00 2001 From: bingwang-ms <66248323+bingwang-ms@users.noreply.github.com> Date: Thu, 2 Jun 2022 21:48:57 +0800 Subject: [PATCH 008/259] Update qos template to support SYSTEM_DEFAULT table (#10936) * Update qos template to support SYSTEM_DEFAULT table Signed-off-by: bingwang --- .../Arista-7050CX3-32S-D48C8/qos.json.j2 | 28 +- .../Arista-7260CX3-C64/qos.json.j2 | 25 +- files/build_templates/qos_config.j2 | 34 +- ...50cx3-dualtor-minigraph-remap-disabled.xml | 2369 +++++++++ ...ample-arista-7050cx3-dualtor-minigraph.xml | 8 + ...-7260-dualtor-minigraph-remap-disabled.xml | 4635 +++++++++++++++++ .../sample-arista-7260-dualtor-minigraph.xml | 8 + ...rista-7260-t1-minigraph-remap-disabled.xml | 2491 +++++++++ .../tests/sample-arista-7260-t1-minigraph.xml | 8 + ...-arista7050cx3-dualtor-remap-disabled.json | 1129 ++++ .../py3/qos-arista7050cx3-dualtor.json | 25 +- ...qos-arista7260-dualtor-remap-disabled.json | 2121 ++++++++ .../py3/qos-arista7260-dualtor.json | 25 +- .../py3/qos-arista7260-t1-remap-disabled.json | 1005 ++++ src/sonic-config-engine/tests/test_j2files.py | 13 +- 15 files changed, 13866 insertions(+), 58 deletions(-) create mode 100644 src/sonic-config-engine/tests/sample-arista-7050cx3-dualtor-minigraph-remap-disabled.xml create mode 100644 src/sonic-config-engine/tests/sample-arista-7260-dualtor-minigraph-remap-disabled.xml create mode 100644 src/sonic-config-engine/tests/sample-arista-7260-t1-minigraph-remap-disabled.xml create mode 100644 src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor-remap-disabled.json create mode 100644 src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor-remap-disabled.json create mode 100644 src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1-remap-disabled.json diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/qos.json.j2 b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/qos.json.j2 index 413bd575413c..e0aca4f8dd8b 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/qos.json.j2 +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/qos.json.j2 @@ -35,7 +35,7 @@ "30": "1", "31": "1", "32": "1", - "33": "2", + "33": "8", "34": "1", "35": "1", "36": "1", @@ -101,7 +101,7 @@ "30": "1", "31": "1", "32": "1", - "33": "2", + "33": "8", "34": "1", "35": "1", "36": "1", @@ -140,12 +140,13 @@ "AZURE": { "0": "0", "1": "0", - "2": "0", + "2": "2", "3": "3", "4": "4", "5": "0", - "6": "0", - "7": "7" + "6": "6", + "7": "7", + "8": "0" }, "AZURE_TUNNEL": { "0": "0", @@ -155,7 +156,8 @@ "4": "6", "5": "0", "6": "0", - "7": "0" + "7": "0", + "8": "0" } }, {%- endmacro %} @@ -164,12 +166,13 @@ "AZURE": { "0": "0", "1": "1", - "2": "1", + "2": "1", "3": "3", "4": "4", "5": "5", "6": "6", - "7": "7" + "7": "7", + "8": "1" }, "AZURE_TUNNEL": { "0": "0", @@ -179,7 +182,8 @@ "4": "6", "5": "5", "6": "1", - "7": "7" + "7": "7", + "8": "1" } }, {%- endmacro %} @@ -188,15 +192,15 @@ "AZURE_TUNNEL": { "0": "8", "1": "0", - "2": "33", + "2": "0", "3": "2", "4": "6", "5": "46", "6": "0", - "7": "48" + "7": "48", + "8": "33" } }, {%- endmacro %} {% endif %} - {%- include 'qos_config.j2' %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 index 27f6b531cb08..4d82382817cb 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 @@ -120,7 +120,7 @@ "30": "1", "31": "1", "32": "1", - "33": "2", + "33": "8", "34": "1", "35": "1", "36": "1", @@ -186,7 +186,7 @@ "30": "1", "31": "1", "32": "1", - "33": "2", + "33": "8", "34": "1", "35": "1", "36": "1", @@ -225,12 +225,13 @@ "AZURE": { "0": "0", "1": "0", - "2": "0", + "2": "2", "3": "3", "4": "4", "5": "0", - "6": "0", - "7": "7" + "6": "6", + "7": "7", + "8": "0" }, "AZURE_TUNNEL": { "0": "0", @@ -240,7 +241,8 @@ "4": "6", "5": "0", "6": "0", - "7": "0" + "7": "0", + "8": "0" } }, {%- endmacro %} @@ -254,7 +256,8 @@ "4": "4", "5": "5", "6": "6", - "7": "7" + "7": "7", + "8": "1" }, "AZURE_TUNNEL": { "0": "0", @@ -264,7 +267,8 @@ "4": "6", "5": "5", "6": "1", - "7": "7" + "7": "7", + "8": "1" } }, {%- endmacro %} @@ -273,12 +277,13 @@ "AZURE_TUNNEL": { "0": "8", "1": "0", - "2": "33", + "2": "0", "3": "2", "4": "6", "5": "46", "6": "0", - "7": "48" + "7": "48", + "8": "33" } }, {%- endmacro %} diff --git a/files/build_templates/qos_config.j2 b/files/build_templates/qos_config.j2 index 4062755827ab..3d95d333594b 100644 --- a/files/build_templates/qos_config.j2 +++ b/files/build_templates/qos_config.j2 @@ -29,12 +29,18 @@ {%- endfor %} {%- set port_names_active = port_names_list_active | join(',') -%} +{%- set tunnel_qos_remap_enable = false %} +{%- if ((SYSTEM_DEFAULTS is defined) and ('tunnel_qos_remap' in SYSTEM_DEFAULTS) and (SYSTEM_DEFAULTS['tunnel_qos_remap']['status'] == 'enabled')) %} +{%- set tunnel_qos_remap_enable = true %} +{%- endif %} + {%- set port_names_list_extra_queues = [] %} {%- for port in PORT_ACTIVE %} - {% if (generate_dscp_to_tc_map is defined) and ('type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'LeafRouter' and DEVICE_NEIGHBOR_METADATA is defined and DEVICE_NEIGHBOR[port].name in DEVICE_NEIGHBOR_METADATA and DEVICE_NEIGHBOR_METADATA[DEVICE_NEIGHBOR[port].name].type == 'ToRRouter') or - ('subtype' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['subtype'] == 'DualToR' and DEVICE_NEIGHBOR_METADATA is defined and DEVICE_NEIGHBOR[port].name in DEVICE_NEIGHBOR_METADATA and DEVICE_NEIGHBOR_METADATA[DEVICE_NEIGHBOR[port].name].type == 'LeafRouter') %} +{% if ((generate_dscp_to_tc_map is defined) and tunnel_qos_remap_enable) and +(('type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'LeafRouter' and DEVICE_NEIGHBOR_METADATA is defined and DEVICE_NEIGHBOR[port].name in DEVICE_NEIGHBOR_METADATA and DEVICE_NEIGHBOR_METADATA[DEVICE_NEIGHBOR[port].name].type == 'ToRRouter') or +('subtype' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['subtype'] == 'DualToR' and DEVICE_NEIGHBOR_METADATA is defined and DEVICE_NEIGHBOR[port].name in DEVICE_NEIGHBOR_METADATA and DEVICE_NEIGHBOR_METADATA[DEVICE_NEIGHBOR[port].name].type == 'LeafRouter')) %} {%- if port_names_list_extra_queues.append(port) %}{%- endif %} - {% endif %} +{% endif %} {%- endfor %} {%- set pfc_to_pg_map_supported_asics = ['mellanox', 'barefoot', 'marvell'] -%} @@ -43,7 +49,7 @@ { -{% if generate_tc_to_pg_map is defined %} +{% if (generate_tc_to_pg_map is defined) and tunnel_qos_remap_enable %} {{- generate_tc_to_pg_map() }} {% else %} "TC_TO_PRIORITY_GROUP_MAP": { @@ -71,7 +77,7 @@ "7": "7" } }, -{% if generate_tc_to_queue_map is defined %} +{% if (generate_tc_to_queue_map is defined) and tunnel_qos_remap_enable %} {{- generate_tc_to_queue_map() }} {% else %} "TC_TO_QUEUE_MAP": { @@ -100,7 +106,7 @@ "7": "7" } }, -{% elif generate_dscp_to_tc_map is defined %} +{% elif (generate_dscp_to_tc_map is defined) and tunnel_qos_remap_enable %} {{- generate_dscp_to_tc_map() }} {% else %} "DSCP_TO_TC_MAP": { @@ -172,7 +178,7 @@ } }, {% endif %} -{% if generate_tc_to_dscp_map is defined %} +{% if (generate_tc_to_dscp_map is defined) and tunnel_qos_remap_enable %} {{- generate_tc_to_dscp_map() }} {% endif %} {% if 'resource_type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['resource_type'] in apollo_resource_types %} @@ -289,12 +295,12 @@ {% endfor %} {% for port in PORT_ACTIVE %} "{{ port }}|2": { - {% if port in port_names_list_extra_queues %} +{% if port in port_names_list_extra_queues %} "scheduler" : "scheduler.1", "wred_profile": "AZURE_LOSSLESS" - {% else %} +{% else %} "scheduler": "scheduler.0" - {% endif %} +{% endif %} }, {% endfor %} {% for port in PORT_ACTIVE %} @@ -304,12 +310,12 @@ {% endfor %} {% for port in PORT_ACTIVE %} "{{ port }}|6": { - {% if port in port_names_list_extra_queues %} +{% if port in port_names_list_extra_queues %} "scheduler" : "scheduler.1", - "wred_profile": "AZURE_LOSSLESS" - {% else %} + "wred_profile": "AZURE_LOSSLESS" +{% else %} "scheduler": "scheduler.0" - {% endif %} +{% endif %} }{% if not loop.last %},{% endif %} {% endfor %} diff --git a/src/sonic-config-engine/tests/sample-arista-7050cx3-dualtor-minigraph-remap-disabled.xml b/src/sonic-config-engine/tests/sample-arista-7050cx3-dualtor-minigraph-remap-disabled.xml new file mode 100644 index 000000000000..9ffb8230a6bf --- /dev/null +++ b/src/sonic-config-engine/tests/sample-arista-7050cx3-dualtor-minigraph-remap-disabled.xml @@ -0,0 +1,2369 @@ + + + + + + false + str2-7050cx3-acs-10 + 10.0.0.56 + ARISTA01T1 + 10.0.0.57 + 1 + 10 + 3 + + + str2-7050cx3-acs-10 + FC00::71 + ARISTA01T1 + FC00::72 + 1 + 10 + 3 + + + false + str2-7050cx3-acs-10 + 10.0.0.58 + ARISTA02T1 + 10.0.0.59 + 1 + 10 + 3 + + + str2-7050cx3-acs-10 + FC00::75 + ARISTA02T1 + FC00::76 + 1 + 10 + 3 + + + false + str2-7050cx3-acs-10 + 10.0.0.60 + ARISTA03T1 + 10.0.0.61 + 1 + 10 + 3 + + + str2-7050cx3-acs-10 + FC00::79 + ARISTA03T1 + FC00::7A + 1 + 10 + 3 + + + false + str2-7050cx3-acs-10 + 10.0.0.62 + ARISTA04T1 + 10.0.0.63 + 1 + 10 + 3 + + + str2-7050cx3-acs-10 + FC00::7D + ARISTA04T1 + FC00::7E + 1 + 10 + 3 + + + + + 65100 + str2-7050cx3-acs-10 + + +
10.0.0.57
+ + + +
+ +
10.0.0.59
+ + + +
+ +
10.0.0.61
+ + + +
+ +
10.0.0.63
+ + + +
+ + BGPPeer +
10.1.0.32
+ + + + BGPSLBPassive + 10.255.0.0/25 +
+ + BGPPeer +
10.1.0.32
+ + + + BGPVac + 192.168.0.0/21 +
+
+ +
+ + 64600 + ARISTA01T1 + + + + 64600 + ARISTA02T1 + + + + 64600 + ARISTA03T1 + + + + 64600 + ARISTA04T1 + + +
+
+ + + + + + HostIP + Loopback0 + + 10.1.0.32/32 + + 10.1.0.32/32 + + + HostIP1 + Loopback0 + + FC00:1::32/128 + + FC00:1::32/128 + + + HostIP2 + Loopback1 + + 10.1.0.34/32 + + 10.1.0.34/32 + + + HostIP3 + Loopback1 + + FC00:1::34/128 + + FC00:1::34/128 + + HostIP6 + Loopback3 + + 10.1.0.38/32 + + 10.1.0.38/32 + + + HostIP7 + Loopback3 + + FC00:1::38/128 + + FC00:1::38/128 + + HostIP4 + Loopback2 + + 10.1.0.36/32 + + 10.1.0.36/32 + + + HostIP5 + Loopback2 + + FC00:1::36/128 + + FC00:1::36/128 + + + + HostIP + eth0 + + 10.3.146.122/23 + + 10.3.146.122/23 + + + V6HostIP + eth0 + + FC00:2::32/64 + + FC00:2::32/64 + + + + + + + str2-7050cx3-acs-10 + + + PortChannel101 + Ethernet7/1;Ethernet8/1 + + + + PortChannel102 + Ethernet9/1;Ethernet10/1 + + + + PortChannel103 + Ethernet23/1;Ethernet24/1 + + + + PortChannel104 + Ethernet25/1;Ethernet26/1 + + + + + + + + + Vlan1000 + Ethernet1/1;Ethernet2/1;Ethernet3/1;Ethernet4/1;Ethernet5/1;Ethernet6/1;Ethernet11/1;Ethernet12/1;Ethernet13/1;Ethernet14/1;Ethernet15/1;Ethernet16/1;Ethernet17/1;Ethernet18/1;Ethernet19/1;Ethernet20/1;Ethernet21/1;Ethernet22/1;Ethernet27/1;Ethernet28/1;Ethernet29/1;Ethernet30/1;Ethernet31/1;Ethernet32/1 + False + 0.0.0.0/0 + 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4;192.0.0.5;192.0.0.6;192.0.0.7;192.0.0.8;192.0.0.9;192.0.0.10;192.0.0.11;192.0.0.12;192.0.0.13;192.0.0.14;192.0.0.15;192.0.0.16;192.0.0.17;192.0.0.18;192.0.0.19;192.0.0.20;192.0.0.21;192.0.0.22;192.0.0.23;192.0.0.24;192.0.0.25;192.0.0.26;192.0.0.27;192.0.0.28;192.0.0.29;192.0.0.30;192.0.0.31;192.0.0.32;192.0.0.33;192.0.0.34;192.0.0.35;192.0.0.36;192.0.0.37;192.0.0.38;192.0.0.39;192.0.0.40;192.0.0.41;192.0.0.42;192.0.0.43;192.0.0.44;192.0.0.45;192.0.0.46;192.0.0.47;192.0.0.48 + fc02:2000::1;fc02:2000::2;fc02:2000::3;fc02:2000::4 + 1000 + 1000 + 192.168.0.0/21 + 00:aa:bb:cc:dd:ee + + + + + + PortChannel101 + 10.0.0.56/31 + + + + PortChannel101 + FC00::71/126 + + + + PortChannel102 + 10.0.0.58/31 + + + + PortChannel102 + FC00::75/126 + + + + PortChannel103 + 10.0.0.60/31 + + + + PortChannel103 + FC00::79/126 + + + + PortChannel104 + 10.0.0.62/31 + + + + PortChannel104 + FC00::7D/126 + + + + Vlan1000 + 192.168.0.1/21 + + + + Vlan1000 + fc02:1000::1/64 + + + + + + NTP_ACL + NTP + NTP + + + SNMP_ACL + SNMP + SNMP + + + ERSPAN + Everflow + Everflow + + + ERSPANV6 + EverflowV6 + EverflowV6 + + + VTY_LINE + ssh-only + SSH + + + + + + + + + + DeviceInterfaceLink + ARISTA01T1 + Ethernet1 + str2-7050cx3-acs-10 + Ethernet7/1 + + + DeviceInterfaceLink + ARISTA01T1 + Ethernet2 + str2-7050cx3-acs-10 + Ethernet8/1 + + + DeviceInterfaceLink + ARISTA02T1 + Ethernet1 + str2-7050cx3-acs-10 + Ethernet9/1 + + + DeviceInterfaceLink + ARISTA02T1 + Ethernet2 + str2-7050cx3-acs-10 + Ethernet10/1 + + + DeviceInterfaceLink + ARISTA03T1 + Ethernet1 + str2-7050cx3-acs-10 + Ethernet23/1 + + + DeviceInterfaceLink + ARISTA03T1 + Ethernet2 + str2-7050cx3-acs-10 + Ethernet24/1 + + + DeviceInterfaceLink + ARISTA04T1 + Ethernet1 + str2-7050cx3-acs-10 + Ethernet25/1 + + + DeviceInterfaceLink + ARISTA04T1 + Ethernet2 + str2-7050cx3-acs-10 + Ethernet26/1 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet1/1 + Servers0 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet2/1 + Servers1 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet3/1 + Servers2 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet4/1 + Servers3 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet5/1 + Servers4 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet6/1 + Servers5 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet11/1 + Servers6 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet12/1 + Servers7 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet13/1 + Servers8 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet14/1 + Servers9 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet15/1 + Servers10 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet16/1 + Servers11 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet17/1 + Servers12 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet18/1 + Servers13 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet19/1 + Servers14 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet20/1 + Servers15 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet21/1 + Servers16 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet22/1 + Servers17 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet27/1 + Servers18 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet28/1 + Servers19 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet29/1 + Servers20 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet30/1 + Servers21 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet31/1 + Servers22 + eth0 + + + DeviceInterfaceLink + str2-7050cx3-acs-10 + Ethernet32/1 + Servers23 + eth0 + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet1/1 + str2-7050cx3-acs-10-Servers0-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet2/1 + str2-7050cx3-acs-10-Servers1-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet3/1 + str2-7050cx3-acs-10-Servers2-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet4/1 + str2-7050cx3-acs-10-Servers3-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet5/1 + str2-7050cx3-acs-10-Servers4-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet6/1 + str2-7050cx3-acs-10-Servers5-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet11/1 + str2-7050cx3-acs-10-Servers6-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet12/1 + str2-7050cx3-acs-10-Servers7-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet13/1 + str2-7050cx3-acs-10-Servers8-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet14/1 + str2-7050cx3-acs-10-Servers9-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet15/1 + str2-7050cx3-acs-10-Servers10-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet16/1 + str2-7050cx3-acs-10-Servers11-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet17/1 + str2-7050cx3-acs-10-Servers12-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet18/1 + str2-7050cx3-acs-10-Servers13-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet19/1 + str2-7050cx3-acs-10-Servers14-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet20/1 + str2-7050cx3-acs-10-Servers15-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet21/1 + str2-7050cx3-acs-10-Servers16-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet22/1 + str2-7050cx3-acs-10-Servers17-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet27/1 + str2-7050cx3-acs-10-Servers18-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet28/1 + str2-7050cx3-acs-10-Servers19-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet29/1 + str2-7050cx3-acs-10-Servers20-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet30/1 + str2-7050cx3-acs-10-Servers21-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet31/1 + str2-7050cx3-acs-10-Servers22-SC + U + + + LogicalLink + str2-7050cx3-acs-10 + Ethernet32/1 + str2-7050cx3-acs-10-Servers23-SC + U + + + + + str2-7050cx3-acs-10 + Arista-7050CX3-32S-D48C8 +
+ 10.1.0.32/32 +
+ + FC00:1::32/128 + + + 10.3.146.122 + +
+ + str2-7050cx3-acs-11 + Arista-7050CX3-32S-D48C8 +
+ 10.1.0.33/32 +
+ + FC00:1::33/128 + + + 10.3.146.127 + +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers0-SC +
+ + Server +
+ 192.168.0.2/26 +
+ + fc02:1000::2/96 + + + 0.0.0.0/0 + + Servers0 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers1-SC +
+ + Server +
+ 192.168.0.3/26 +
+ + fc02:1000::3/96 + + + 0.0.0.0/0 + + Servers1 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers2-SC +
+ + Server +
+ 192.168.0.4/26 +
+ + fc02:1000::4/96 + + + 0.0.0.0/0 + + Servers2 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers3-SC +
+ + Server +
+ 192.168.0.5/26 +
+ + fc02:1000::5/96 + + + 0.0.0.0/0 + + Servers3 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers4-SC +
+ + Server +
+ 192.168.0.6/26 +
+ + fc02:1000::6/96 + + + 0.0.0.0/0 + + Servers4 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers5-SC +
+ + Server +
+ 192.168.0.7/26 +
+ + fc02:1000::7/96 + + + 0.0.0.0/0 + + Servers5 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers6-SC +
+ + Server +
+ 192.168.0.8/26 +
+ + fc02:1000::8/96 + + + 0.0.0.0/0 + + Servers6 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers7-SC +
+ + Server +
+ 192.168.0.9/26 +
+ + fc02:1000::9/96 + + + 0.0.0.0/0 + + Servers7 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers8-SC +
+ + Server +
+ 192.168.0.10/26 +
+ + fc02:1000::a/96 + + + 0.0.0.0/0 + + Servers8 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers9-SC +
+ + Server +
+ 192.168.0.11/26 +
+ + fc02:1000::b/96 + + + 0.0.0.0/0 + + Servers9 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers10-SC +
+ + Server +
+ 192.168.0.12/26 +
+ + fc02:1000::c/96 + + + 0.0.0.0/0 + + Servers10 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers11-SC +
+ + Server +
+ 192.168.0.13/26 +
+ + fc02:1000::d/96 + + + 0.0.0.0/0 + + Servers11 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers12-SC +
+ + Server +
+ 192.168.0.14/26 +
+ + fc02:1000::e/96 + + + 0.0.0.0/0 + + Servers12 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers13-SC +
+ + Server +
+ 192.168.0.15/26 +
+ + fc02:1000::f/96 + + + 0.0.0.0/0 + + Servers13 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers14-SC +
+ + Server +
+ 192.168.0.16/26 +
+ + fc02:1000::10/96 + + + 0.0.0.0/0 + + Servers14 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers15-SC +
+ + Server +
+ 192.168.0.17/26 +
+ + fc02:1000::11/96 + + + 0.0.0.0/0 + + Servers15 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers16-SC +
+ + Server +
+ 192.168.0.18/26 +
+ + fc02:1000::12/96 + + + 0.0.0.0/0 + + Servers16 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers17-SC +
+ + Server +
+ 192.168.0.19/26 +
+ + fc02:1000::13/96 + + + 0.0.0.0/0 + + Servers17 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers18-SC +
+ + Server +
+ 192.168.0.20/26 +
+ + fc02:1000::14/96 + + + 0.0.0.0/0 + + Servers18 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers19-SC +
+ + Server +
+ 192.168.0.21/26 +
+ + fc02:1000::15/96 + + + 0.0.0.0/0 + + Servers19 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers20-SC +
+ + Server +
+ 192.168.0.22/26 +
+ + fc02:1000::16/96 + + + 0.0.0.0/0 + + Servers20 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers21-SC +
+ + Server +
+ 192.168.0.23/26 +
+ + fc02:1000::17/96 + + + 0.0.0.0/0 + + Servers21 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers22-SC +
+ + Server +
+ 192.168.0.24/26 +
+ + fc02:1000::18/96 + + + 0.0.0.0/0 + + Servers22 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7050cx3-acs-10-Servers23-SC +
+ + Server +
+ 192.168.0.25/26 +
+ + fc02:1000::19/96 + + + 0.0.0.0/0 + + Servers23 +
+ + ARISTA04T1 + + 172.16.142.63 + + Arista-VM + + + ARISTA03T1 + + 172.16.142.62 + + Arista-VM + + + ARISTA02T1 + + 172.16.142.61 + + Arista-VM + + + ARISTA01T1 + + 172.16.142.60 + + Arista-VM + +
+
+ + + true + + + DeviceInterface + + true + true + 1 + Ethernet1/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet1/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet2/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet2/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet3/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet3/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet4/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet4/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet5/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet5/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet6/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet6/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet7/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet8/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet9/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet10/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet11/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet11/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet12/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet12/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet13/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet13/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet14/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet14/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet15/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet15/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet16/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet16/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet17/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet17/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet18/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet18/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet19/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet19/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet20/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet20/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet21/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet21/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet22/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet22/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet23/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet24/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet25/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet26/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet27/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet27/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet28/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet28/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet29/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet29/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet30/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet30/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet31/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet31/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet32/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet32/3 + + false + 0 + 0 + 50000 + + + true + 0 + Arista-7050CX3-32S-D48C8 + + + + + + + str2-7050cx3-acs-10 + + + DeploymentId + + 1 + + + QosProfile + + Profile0 + + + GeminiEnabled + + True + + + DhcpResources + + 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4;192.0.0.5;192.0.0.6;192.0.0.7;192.0.0.8;192.0.0.9;192.0.0.10;192.0.0.11;192.0.0.12;192.0.0.13;192.0.0.14;192.0.0.15;192.0.0.16;192.0.0.17;192.0.0.18;192.0.0.19;192.0.0.20;192.0.0.21;192.0.0.22;192.0.0.23;192.0.0.24;192.0.0.25;192.0.0.26;192.0.0.27;192.0.0.28;192.0.0.29;192.0.0.30;192.0.0.31;192.0.0.32;192.0.0.33;192.0.0.34;192.0.0.35;192.0.0.36;192.0.0.37;192.0.0.38;192.0.0.39;192.0.0.40;192.0.0.41;192.0.0.42;192.0.0.43;192.0.0.44;192.0.0.45;192.0.0.46;192.0.0.47;192.0.0.48 + + + NtpResources + + 10.20.8.129;10.20.8.130 + + + SnmpResources + + 10.3.145.98 + + + SyslogResources + + 10.64.246.95 + + + TacacsGroup + + Starlab + + + TacacsServer + + 100.127.20.21 + + + ForcedMgmtRoutes + + 10.3.145.98/31;10.3.145.8;100.127.20.16/28;10.3.149.170/31;40.122.216.24;13.91.48.226;10.3.145.14;10.64.246.0/24;10.3.146.0/23;10.64.5.5 + + + ErspanDestinationIpv4 + + 10.20.6.16 + + + + + + + + + + + + + GeminiPeeringLink + + True + + + UpperTOR + + str2-7050cx3-acs-10 + + + LowerTOR + + str2-7050cx3-acs-11 + + + str2-7050cx3-acs-11:MuxTunnel0;str2-7050cx3-acs-10:MuxTunnel0 + + + + str2-7050cx3-acs-10 + Arista-7050CX3-32S-D48C8 +
diff --git a/src/sonic-config-engine/tests/sample-arista-7050cx3-dualtor-minigraph.xml b/src/sonic-config-engine/tests/sample-arista-7050cx3-dualtor-minigraph.xml index 9ffb8230a6bf..6ffea8427ddb 100644 --- a/src/sonic-config-engine/tests/sample-arista-7050cx3-dualtor-minigraph.xml +++ b/src/sonic-config-engine/tests/sample-arista-7050cx3-dualtor-minigraph.xml @@ -2339,6 +2339,14 @@ + + + + TunnelQosRemapEnabled + True + + + diff --git a/src/sonic-config-engine/tests/sample-arista-7260-dualtor-minigraph-remap-disabled.xml b/src/sonic-config-engine/tests/sample-arista-7260-dualtor-minigraph-remap-disabled.xml new file mode 100644 index 000000000000..01a42f934726 --- /dev/null +++ b/src/sonic-config-engine/tests/sample-arista-7260-dualtor-minigraph-remap-disabled.xml @@ -0,0 +1,4635 @@ + + + + + + false + str2-7260cx3-acs-12 + 10.0.0.56 + ARISTA01T1 + 10.0.0.57 + 1 + 10 + 3 + + + str2-7260cx3-acs-12 + FC00::71 + ARISTA01T1 + FC00::72 + 1 + 10 + 3 + + + false + str2-7260cx3-acs-12 + 10.0.0.58 + ARISTA02T1 + 10.0.0.59 + 1 + 10 + 3 + + + str2-7260cx3-acs-12 + FC00::75 + ARISTA02T1 + FC00::76 + 1 + 10 + 3 + + + false + str2-7260cx3-acs-12 + 10.0.0.60 + ARISTA03T1 + 10.0.0.61 + 1 + 10 + 3 + + + str2-7260cx3-acs-12 + FC00::79 + ARISTA03T1 + FC00::7A + 1 + 10 + 3 + + + false + str2-7260cx3-acs-12 + 10.0.0.62 + ARISTA04T1 + 10.0.0.63 + 1 + 10 + 3 + + + str2-7260cx3-acs-12 + FC00::7D + ARISTA04T1 + FC00::7E + 1 + 10 + 3 + + + + + 65100 + str2-7260cx3-acs-12 + + +
10.0.0.57
+ + + +
+ +
10.0.0.59
+ + + +
+ +
10.0.0.61
+ + + +
+ +
10.0.0.63
+ + + +
+ + BGPPeer +
10.1.0.32
+ + + + BGPSLBPassive + 10.255.0.0/25 +
+ + BGPPeer +
10.1.0.32
+ + + + BGPVac + 192.168.0.0/21 +
+
+ +
+ + 64600 + ARISTA01T1 + + + + 64600 + ARISTA02T1 + + + + 64600 + ARISTA03T1 + + + + 64600 + ARISTA04T1 + + +
+
+ + + + + + HostIP + Loopback0 + + 10.1.0.32/32 + + 10.1.0.32/32 + + + HostIP1 + Loopback0 + + FC00:1::32/128 + + FC00:1::32/128 + + + HostIP2 + Loopback1 + + 10.1.0.34/32 + + 10.1.0.34/32 + + + HostIP3 + Loopback1 + + FC00:1::34/128 + + FC00:1::34/128 + + HostIP6 + Loopback3 + + 10.1.0.38/32 + + 10.1.0.38/32 + + + HostIP7 + Loopback3 + + FC00:1::38/128 + + FC00:1::38/128 + + HostIP4 + Loopback2 + + 10.1.0.36/32 + + 10.1.0.36/32 + + + HostIP5 + Loopback2 + + FC00:1::36/128 + + FC00:1::36/128 + + + + HostIP + eth0 + + 10.3.147.165/23 + + 10.3.147.165/23 + + + V6HostIP + eth0 + + FC00:2::32/64 + + FC00:2::32/64 + + + + + + + str2-7260cx3-acs-12 + + + PortChannel101 + Ethernet13/1;Ethernet14/1 + + + + PortChannel102 + Ethernet15/1;Ethernet16/1 + + + + PortChannel103 + Ethernet17/1;Ethernet18/1 + + + + PortChannel104 + Ethernet19/1;Ethernet20/1 + + + + + + + + + Vlan1000 + Ethernet1/1;Ethernet2/1;Ethernet3/1;Ethernet4/1;Ethernet5/1;Ethernet6/1;Ethernet7/1;Ethernet8/1;Ethernet9/1;Ethernet10/1;Ethernet11/1;Ethernet12/1;Ethernet21/1;Ethernet22/1;Ethernet23/1;Ethernet24/1;Ethernet25/1;Ethernet26/1;Ethernet27/1;Ethernet28/1;Ethernet29/1;Ethernet30/1;Ethernet31/1;Ethernet32/1;Ethernet33/1;Ethernet34/1;Ethernet35/1;Ethernet36/1;Ethernet37/1;Ethernet38/1;Ethernet39/1;Ethernet40/1;Ethernet41/1;Ethernet42/1;Ethernet43/1;Ethernet44/1;Ethernet45/1;Ethernet46/1;Ethernet47/1;Ethernet48/1;Ethernet49/1;Ethernet50/1;Ethernet51/1;Ethernet52/1;Ethernet53/1;Ethernet54/1;Ethernet55/1;Ethernet56/1;Ethernet57/1;Ethernet58/1;Ethernet59/1;Ethernet60/1;Ethernet61/1;Ethernet62/1;Ethernet63/1;Ethernet64/1 + False + 0.0.0.0/0 + 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4;192.0.0.5;192.0.0.6;192.0.0.7;192.0.0.8;192.0.0.9;192.0.0.10;192.0.0.11;192.0.0.12;192.0.0.13;192.0.0.14;192.0.0.15;192.0.0.16;192.0.0.17;192.0.0.18;192.0.0.19;192.0.0.20;192.0.0.21;192.0.0.22;192.0.0.23;192.0.0.24;192.0.0.25;192.0.0.26;192.0.0.27;192.0.0.28;192.0.0.29;192.0.0.30;192.0.0.31;192.0.0.32;192.0.0.33;192.0.0.34;192.0.0.35;192.0.0.36;192.0.0.37;192.0.0.38;192.0.0.39;192.0.0.40;192.0.0.41;192.0.0.42;192.0.0.43;192.0.0.44;192.0.0.45;192.0.0.46;192.0.0.47;192.0.0.48 + fc02:2000::1;fc02:2000::2;fc02:2000::3;fc02:2000::4 + 1000 + 1000 + 192.168.0.0/21 + 00:aa:bb:cc:dd:ee + + + + + + PortChannel101 + 10.0.0.56/31 + + + + PortChannel101 + FC00::71/126 + + + + PortChannel102 + 10.0.0.58/31 + + + + PortChannel102 + FC00::75/126 + + + + PortChannel103 + 10.0.0.60/31 + + + + PortChannel103 + FC00::79/126 + + + + PortChannel104 + 10.0.0.62/31 + + + + PortChannel104 + FC00::7D/126 + + + + Vlan1000 + 192.168.0.1/21 + + + + Vlan1000 + fc02:1000::1/64 + + + + + + NTP_ACL + NTP + NTP + + + SNMP_ACL + SNMP + SNMP + + + ERSPAN + Everflow + Everflow + + + ERSPANV6 + EverflowV6 + EverflowV6 + + + VTY_LINE + ssh-only + SSH + + + + + + + + + + DeviceInterfaceLink + ARISTA01T1 + Ethernet1 + str2-7260cx3-acs-12 + Ethernet13/1 + + + DeviceInterfaceLink + ARISTA01T1 + Ethernet2 + str2-7260cx3-acs-12 + Ethernet14/1 + + + DeviceInterfaceLink + ARISTA02T1 + Ethernet1 + str2-7260cx3-acs-12 + Ethernet15/1 + + + DeviceInterfaceLink + ARISTA02T1 + Ethernet2 + str2-7260cx3-acs-12 + Ethernet16/1 + + + DeviceInterfaceLink + ARISTA03T1 + Ethernet1 + str2-7260cx3-acs-12 + Ethernet17/1 + + + DeviceInterfaceLink + ARISTA03T1 + Ethernet2 + str2-7260cx3-acs-12 + Ethernet18/1 + + + DeviceInterfaceLink + ARISTA04T1 + Ethernet1 + str2-7260cx3-acs-12 + Ethernet19/1 + + + DeviceInterfaceLink + ARISTA04T1 + Ethernet2 + str2-7260cx3-acs-12 + Ethernet20/1 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet1/1 + Servers0 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet2/1 + Servers1 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet3/1 + Servers2 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet4/1 + Servers3 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet5/1 + Servers4 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet6/1 + Servers5 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet7/1 + Servers6 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet8/1 + Servers7 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet9/1 + Servers8 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet10/1 + Servers9 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet11/1 + Servers10 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet12/1 + Servers11 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet21/1 + Servers12 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet22/1 + Servers13 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet23/1 + Servers14 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet24/1 + Servers15 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet25/1 + Servers16 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet26/1 + Servers17 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet27/1 + Servers18 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet28/1 + Servers19 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet29/1 + Servers20 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet30/1 + Servers21 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet31/1 + Servers22 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet32/1 + Servers23 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet33/1 + Servers24 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet34/1 + Servers25 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet35/1 + Servers26 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet36/1 + Servers27 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet37/1 + Servers28 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet38/1 + Servers29 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet39/1 + Servers30 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet40/1 + Servers31 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet41/1 + Servers32 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet42/1 + Servers33 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet43/1 + Servers34 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet44/1 + Servers35 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet45/1 + Servers36 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet46/1 + Servers37 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet47/1 + Servers38 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet48/1 + Servers39 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet49/1 + Servers40 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet50/1 + Servers41 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet51/1 + Servers42 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet52/1 + Servers43 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet53/1 + Servers44 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet54/1 + Servers45 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet55/1 + Servers46 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet56/1 + Servers47 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet57/1 + Servers48 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet58/1 + Servers49 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet59/1 + Servers50 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet60/1 + Servers51 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet61/1 + Servers52 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet62/1 + Servers53 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet63/1 + Servers54 + eth0 + + + DeviceInterfaceLink + str2-7260cx3-acs-12 + Ethernet64/1 + Servers55 + eth0 + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet1/1 + str2-7260cx3-acs-12-Servers0-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet2/1 + str2-7260cx3-acs-12-Servers1-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet3/1 + str2-7260cx3-acs-12-Servers2-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet4/1 + str2-7260cx3-acs-12-Servers3-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet5/1 + str2-7260cx3-acs-12-Servers4-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet6/1 + str2-7260cx3-acs-12-Servers5-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet7/1 + str2-7260cx3-acs-12-Servers6-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet8/1 + str2-7260cx3-acs-12-Servers7-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet9/1 + str2-7260cx3-acs-12-Servers8-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet10/1 + str2-7260cx3-acs-12-Servers9-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet11/1 + str2-7260cx3-acs-12-Servers10-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet12/1 + str2-7260cx3-acs-12-Servers11-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet21/1 + str2-7260cx3-acs-12-Servers12-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet22/1 + str2-7260cx3-acs-12-Servers13-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet23/1 + str2-7260cx3-acs-12-Servers14-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet24/1 + str2-7260cx3-acs-12-Servers15-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet25/1 + str2-7260cx3-acs-12-Servers16-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet26/1 + str2-7260cx3-acs-12-Servers17-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet27/1 + str2-7260cx3-acs-12-Servers18-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet28/1 + str2-7260cx3-acs-12-Servers19-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet29/1 + str2-7260cx3-acs-12-Servers20-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet30/1 + str2-7260cx3-acs-12-Servers21-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet31/1 + str2-7260cx3-acs-12-Servers22-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet32/1 + str2-7260cx3-acs-12-Servers23-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet33/1 + str2-7260cx3-acs-12-Servers24-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet34/1 + str2-7260cx3-acs-12-Servers25-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet35/1 + str2-7260cx3-acs-12-Servers26-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet36/1 + str2-7260cx3-acs-12-Servers27-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet37/1 + str2-7260cx3-acs-12-Servers28-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet38/1 + str2-7260cx3-acs-12-Servers29-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet39/1 + str2-7260cx3-acs-12-Servers30-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet40/1 + str2-7260cx3-acs-12-Servers31-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet41/1 + str2-7260cx3-acs-12-Servers32-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet42/1 + str2-7260cx3-acs-12-Servers33-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet43/1 + str2-7260cx3-acs-12-Servers34-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet44/1 + str2-7260cx3-acs-12-Servers35-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet45/1 + str2-7260cx3-acs-12-Servers36-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet46/1 + str2-7260cx3-acs-12-Servers37-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet47/1 + str2-7260cx3-acs-12-Servers38-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet48/1 + str2-7260cx3-acs-12-Servers39-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet49/1 + str2-7260cx3-acs-12-Servers40-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet50/1 + str2-7260cx3-acs-12-Servers41-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet51/1 + str2-7260cx3-acs-12-Servers42-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet52/1 + str2-7260cx3-acs-12-Servers43-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet53/1 + str2-7260cx3-acs-12-Servers44-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet54/1 + str2-7260cx3-acs-12-Servers45-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet55/1 + str2-7260cx3-acs-12-Servers46-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet56/1 + str2-7260cx3-acs-12-Servers47-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet57/1 + str2-7260cx3-acs-12-Servers48-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet58/1 + str2-7260cx3-acs-12-Servers49-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet59/1 + str2-7260cx3-acs-12-Servers50-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet60/1 + str2-7260cx3-acs-12-Servers51-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet61/1 + str2-7260cx3-acs-12-Servers52-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet62/1 + str2-7260cx3-acs-12-Servers53-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet63/1 + str2-7260cx3-acs-12-Servers54-SC + U + + + LogicalLink + str2-7260cx3-acs-12 + Ethernet64/1 + str2-7260cx3-acs-12-Servers55-SC + U + + + + + str2-7260cx3-acs-12 + Arista-7260CX3-D108C8 +
+ 10.1.0.32/32 +
+ + FC00:1::32/128 + + + 10.3.147.165 + +
+ + str2-7260cx3-acs-13 + Arista-7260CX3-D108C8 +
+ 10.1.0.33/32 +
+ + FC00:1::33/128 + + + 10.3.147.167 + +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers0-SC +
+ + Server +
+ 192.168.0.2/26 +
+ + fc02:1000::2/96 + + + 0.0.0.0/0 + + Servers0 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers1-SC +
+ + Server +
+ 192.168.0.3/26 +
+ + fc02:1000::3/96 + + + 0.0.0.0/0 + + Servers1 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers2-SC +
+ + Server +
+ 192.168.0.4/26 +
+ + fc02:1000::4/96 + + + 0.0.0.0/0 + + Servers2 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers3-SC +
+ + Server +
+ 192.168.0.5/26 +
+ + fc02:1000::5/96 + + + 0.0.0.0/0 + + Servers3 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers4-SC +
+ + Server +
+ 192.168.0.6/26 +
+ + fc02:1000::6/96 + + + 0.0.0.0/0 + + Servers4 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers5-SC +
+ + Server +
+ 192.168.0.7/26 +
+ + fc02:1000::7/96 + + + 0.0.0.0/0 + + Servers5 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers6-SC +
+ + Server +
+ 192.168.0.8/26 +
+ + fc02:1000::8/96 + + + 0.0.0.0/0 + + Servers6 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers7-SC +
+ + Server +
+ 192.168.0.9/26 +
+ + fc02:1000::9/96 + + + 0.0.0.0/0 + + Servers7 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers8-SC +
+ + Server +
+ 192.168.0.10/26 +
+ + fc02:1000::a/96 + + + 0.0.0.0/0 + + Servers8 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers9-SC +
+ + Server +
+ 192.168.0.11/26 +
+ + fc02:1000::b/96 + + + 0.0.0.0/0 + + Servers9 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers10-SC +
+ + Server +
+ 192.168.0.12/26 +
+ + fc02:1000::c/96 + + + 0.0.0.0/0 + + Servers10 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers11-SC +
+ + Server +
+ 192.168.0.13/26 +
+ + fc02:1000::d/96 + + + 0.0.0.0/0 + + Servers11 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers12-SC +
+ + Server +
+ 192.168.0.14/26 +
+ + fc02:1000::e/96 + + + 0.0.0.0/0 + + Servers12 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers13-SC +
+ + Server +
+ 192.168.0.15/26 +
+ + fc02:1000::f/96 + + + 0.0.0.0/0 + + Servers13 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers14-SC +
+ + Server +
+ 192.168.0.16/26 +
+ + fc02:1000::10/96 + + + 0.0.0.0/0 + + Servers14 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers15-SC +
+ + Server +
+ 192.168.0.17/26 +
+ + fc02:1000::11/96 + + + 0.0.0.0/0 + + Servers15 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers16-SC +
+ + Server +
+ 192.168.0.18/26 +
+ + fc02:1000::12/96 + + + 0.0.0.0/0 + + Servers16 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers17-SC +
+ + Server +
+ 192.168.0.19/26 +
+ + fc02:1000::13/96 + + + 0.0.0.0/0 + + Servers17 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers18-SC +
+ + Server +
+ 192.168.0.20/26 +
+ + fc02:1000::14/96 + + + 0.0.0.0/0 + + Servers18 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers19-SC +
+ + Server +
+ 192.168.0.21/26 +
+ + fc02:1000::15/96 + + + 0.0.0.0/0 + + Servers19 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers20-SC +
+ + Server +
+ 192.168.0.22/26 +
+ + fc02:1000::16/96 + + + 0.0.0.0/0 + + Servers20 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers21-SC +
+ + Server +
+ 192.168.0.23/26 +
+ + fc02:1000::17/96 + + + 0.0.0.0/0 + + Servers21 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers22-SC +
+ + Server +
+ 192.168.0.24/26 +
+ + fc02:1000::18/96 + + + 0.0.0.0/0 + + Servers22 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers23-SC +
+ + Server +
+ 192.168.0.25/26 +
+ + fc02:1000::19/96 + + + 0.0.0.0/0 + + Servers23 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers24-SC +
+ + Server +
+ 192.168.0.26/26 +
+ + fc02:1000::1a/96 + + + 0.0.0.0/0 + + Servers24 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers25-SC +
+ + Server +
+ 192.168.0.27/26 +
+ + fc02:1000::1b/96 + + + 0.0.0.0/0 + + Servers25 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers26-SC +
+ + Server +
+ 192.168.0.28/26 +
+ + fc02:1000::1c/96 + + + 0.0.0.0/0 + + Servers26 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers27-SC +
+ + Server +
+ 192.168.0.29/26 +
+ + fc02:1000::1d/96 + + + 0.0.0.0/0 + + Servers27 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers28-SC +
+ + Server +
+ 192.168.0.30/26 +
+ + fc02:1000::1e/96 + + + 0.0.0.0/0 + + Servers28 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers29-SC +
+ + Server +
+ 192.168.0.31/26 +
+ + fc02:1000::1f/96 + + + 0.0.0.0/0 + + Servers29 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers30-SC +
+ + Server +
+ 192.168.0.32/26 +
+ + fc02:1000::20/96 + + + 0.0.0.0/0 + + Servers30 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers31-SC +
+ + Server +
+ 192.168.0.33/26 +
+ + fc02:1000::21/96 + + + 0.0.0.0/0 + + Servers31 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers32-SC +
+ + Server +
+ 192.168.0.34/26 +
+ + fc02:1000::22/96 + + + 0.0.0.0/0 + + Servers32 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers33-SC +
+ + Server +
+ 192.168.0.35/26 +
+ + fc02:1000::23/96 + + + 0.0.0.0/0 + + Servers33 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers34-SC +
+ + Server +
+ 192.168.0.36/26 +
+ + fc02:1000::24/96 + + + 0.0.0.0/0 + + Servers34 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers35-SC +
+ + Server +
+ 192.168.0.37/26 +
+ + fc02:1000::25/96 + + + 0.0.0.0/0 + + Servers35 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers36-SC +
+ + Server +
+ 192.168.0.38/26 +
+ + fc02:1000::26/96 + + + 0.0.0.0/0 + + Servers36 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers37-SC +
+ + Server +
+ 192.168.0.39/26 +
+ + fc02:1000::27/96 + + + 0.0.0.0/0 + + Servers37 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers38-SC +
+ + Server +
+ 192.168.0.40/26 +
+ + fc02:1000::28/96 + + + 0.0.0.0/0 + + Servers38 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers39-SC +
+ + Server +
+ 192.168.0.41/26 +
+ + fc02:1000::29/96 + + + 0.0.0.0/0 + + Servers39 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers40-SC +
+ + Server +
+ 192.168.0.42/26 +
+ + fc02:1000::2a/96 + + + 0.0.0.0/0 + + Servers40 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers41-SC +
+ + Server +
+ 192.168.0.43/26 +
+ + fc02:1000::2b/96 + + + 0.0.0.0/0 + + Servers41 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers42-SC +
+ + Server +
+ 192.168.0.44/26 +
+ + fc02:1000::2c/96 + + + 0.0.0.0/0 + + Servers42 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers43-SC +
+ + Server +
+ 192.168.0.45/26 +
+ + fc02:1000::2d/96 + + + 0.0.0.0/0 + + Servers43 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers44-SC +
+ + Server +
+ 192.168.0.46/26 +
+ + fc02:1000::2e/96 + + + 0.0.0.0/0 + + Servers44 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers45-SC +
+ + Server +
+ 192.168.0.47/26 +
+ + fc02:1000::2f/96 + + + 0.0.0.0/0 + + Servers45 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers46-SC +
+ + Server +
+ 192.168.0.48/26 +
+ + fc02:1000::30/96 + + + 0.0.0.0/0 + + Servers46 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers47-SC +
+ + Server +
+ 192.168.0.49/26 +
+ + fc02:1000::31/96 + + + 0.0.0.0/0 + + Servers47 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers48-SC +
+ + Server +
+ 192.168.0.50/26 +
+ + fc02:1000::32/96 + + + 0.0.0.0/0 + + Servers48 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers49-SC +
+ + Server +
+ 192.168.0.51/26 +
+ + fc02:1000::33/96 + + + 0.0.0.0/0 + + Servers49 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers50-SC +
+ + Server +
+ 192.168.0.52/26 +
+ + fc02:1000::34/96 + + + 0.0.0.0/0 + + Servers50 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers51-SC +
+ + Server +
+ 192.168.0.53/26 +
+ + fc02:1000::35/96 + + + 0.0.0.0/0 + + Servers51 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers52-SC +
+ + Server +
+ 192.168.0.54/26 +
+ + fc02:1000::36/96 + + + 0.0.0.0/0 + + Servers52 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers53-SC +
+ + Server +
+ 192.168.0.55/26 +
+ + fc02:1000::37/96 + + + 0.0.0.0/0 + + Servers53 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers54-SC +
+ + Server +
+ 192.168.0.56/26 +
+ + fc02:1000::38/96 + + + 0.0.0.0/0 + + Servers54 +
+ + SmartCable +
+ 0.0.0.0/0 +
+ + ::/0 + + + 0.0.0.0/0 + + + ::/0 + + + str2-7260cx3-acs-12-Servers55-SC +
+ + Server +
+ 192.168.0.57/26 +
+ + fc02:1000::39/96 + + + 0.0.0.0/0 + + Servers55 +
+ + ARISTA04T1 + + 172.16.147.75 + + Arista-VM + + + ARISTA03T1 + + 172.16.147.74 + + Arista-VM + + + ARISTA02T1 + + 172.16.147.73 + + Arista-VM + + + ARISTA01T1 + + 172.16.147.72 + + Arista-VM + +
+
+ + + true + + + DeviceInterface + + true + true + 1 + Ethernet1/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet1/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet2/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet2/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet3/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet3/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet4/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet4/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet5/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet5/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet6/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet6/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet7/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet7/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet8/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet8/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet9/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet9/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet10/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet10/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet11/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet11/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet12/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet12/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet13/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet14/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet15/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet16/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet17/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet18/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet19/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet20/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet21/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet21/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet22/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet22/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet23/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet23/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet24/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet24/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet25/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet25/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet26/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet26/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet27/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet27/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet28/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet28/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet29/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet29/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet30/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet30/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet31/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet31/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet32/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet32/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet33/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet33/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet34/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet34/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet35/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet35/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet36/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet36/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet37/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet37/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet38/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet38/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet39/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet39/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet40/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet40/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet41/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet41/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet42/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet42/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet43/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet43/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet44/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet44/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet45/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet45/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet46/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet46/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet47/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet47/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet48/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet48/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet49/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet49/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet50/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet50/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet51/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet51/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet52/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet52/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet53/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet53/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet54/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet54/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet55/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet55/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet56/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet56/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet57/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet57/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet58/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet58/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet59/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet59/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet60/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet60/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet61/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet61/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet62/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet62/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet63/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet63/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet64/1 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet64/3 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + Ethernet65 + + false + 0 + 0 + 10000 + + + DeviceInterface + + true + true + 1 + Ethernet66 + + false + 0 + 0 + 10000 + + + true + 0 + Arista-7260CX3-D108C8 + + + + + + + str2-7260cx3-acs-12 + + + DeploymentId + + 1 + + + QosProfile + + Profile0 + + + GeminiEnabled + + True + + + DhcpResources + + 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4;192.0.0.5;192.0.0.6;192.0.0.7;192.0.0.8;192.0.0.9;192.0.0.10;192.0.0.11;192.0.0.12;192.0.0.13;192.0.0.14;192.0.0.15;192.0.0.16;192.0.0.17;192.0.0.18;192.0.0.19;192.0.0.20;192.0.0.21;192.0.0.22;192.0.0.23;192.0.0.24;192.0.0.25;192.0.0.26;192.0.0.27;192.0.0.28;192.0.0.29;192.0.0.30;192.0.0.31;192.0.0.32;192.0.0.33;192.0.0.34;192.0.0.35;192.0.0.36;192.0.0.37;192.0.0.38;192.0.0.39;192.0.0.40;192.0.0.41;192.0.0.42;192.0.0.43;192.0.0.44;192.0.0.45;192.0.0.46;192.0.0.47;192.0.0.48 + + + NtpResources + + 10.20.8.129;10.20.8.130 + + + SnmpResources + + 10.3.145.98 + + + SyslogResources + + 10.64.246.95 + + + TacacsGroup + + Starlab + + + TacacsServer + + 100.127.20.21 + + + ForcedMgmtRoutes + + 10.3.145.98/31;10.3.145.8;100.127.20.16/28;10.3.149.170/31;40.122.216.24;13.91.48.226;10.3.145.14;10.64.246.0/24;10.3.146.0/23;10.64.5.5 + + + ErspanDestinationIpv4 + + 10.20.6.16 + + + + + + + + + + + + + GeminiPeeringLink + + True + + + UpperTOR + + str2-7260cx3-acs-12 + + + LowerTOR + + str2-7260cx3-acs-13 + + + str2-7260cx3-acs-13:MuxTunnel0;str2-7260cx3-acs-12:MuxTunnel0 + + + + str2-7260cx3-acs-12 + Arista-7260CX3-D108C8 +
diff --git a/src/sonic-config-engine/tests/sample-arista-7260-dualtor-minigraph.xml b/src/sonic-config-engine/tests/sample-arista-7260-dualtor-minigraph.xml index 01a42f934726..e1a7d3580594 100644 --- a/src/sonic-config-engine/tests/sample-arista-7260-dualtor-minigraph.xml +++ b/src/sonic-config-engine/tests/sample-arista-7260-dualtor-minigraph.xml @@ -4605,6 +4605,14 @@ + + + + TunnelQosRemapEnabled + True + + + diff --git a/src/sonic-config-engine/tests/sample-arista-7260-t1-minigraph-remap-disabled.xml b/src/sonic-config-engine/tests/sample-arista-7260-t1-minigraph-remap-disabled.xml new file mode 100644 index 000000000000..4367b705a11a --- /dev/null +++ b/src/sonic-config-engine/tests/sample-arista-7260-t1-minigraph-remap-disabled.xml @@ -0,0 +1,2491 @@ + + + + + + false + str-7260cx3-acs-7 + 10.0.0.32 + ARISTA01T0 + 10.0.0.33 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::41 + ARISTA01T0 + FC00::42 + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.0 + ARISTA01T2 + 10.0.0.1 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::1 + ARISTA01T2 + FC00::2 + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.34 + ARISTA02T0 + 10.0.0.35 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::45 + ARISTA02T0 + FC00::46 + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.36 + ARISTA03T0 + 10.0.0.37 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::49 + ARISTA03T0 + FC00::4A + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.4 + ARISTA03T2 + 10.0.0.5 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::5 + ARISTA03T2 + FC00::6 + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.38 + ARISTA04T0 + 10.0.0.39 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::4D + ARISTA04T0 + FC00::4E + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.40 + ARISTA05T0 + 10.0.0.41 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::51 + ARISTA05T0 + FC00::52 + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.8 + ARISTA05T2 + 10.0.0.9 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::9 + ARISTA05T2 + FC00::A + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.42 + ARISTA06T0 + 10.0.0.43 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::55 + ARISTA06T0 + FC00::56 + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.44 + ARISTA07T0 + 10.0.0.45 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::59 + ARISTA07T0 + FC00::5A + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.12 + ARISTA07T2 + 10.0.0.13 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::D + ARISTA07T2 + FC00::E + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.46 + ARISTA08T0 + 10.0.0.47 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::5D + ARISTA08T0 + FC00::5E + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.48 + ARISTA09T0 + 10.0.0.49 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::61 + ARISTA09T0 + FC00::62 + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.50 + ARISTA10T0 + 10.0.0.51 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::65 + ARISTA10T0 + FC00::66 + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.52 + ARISTA11T0 + 10.0.0.53 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::69 + ARISTA11T0 + FC00::6A + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.54 + ARISTA12T0 + 10.0.0.55 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::6D + ARISTA12T0 + FC00::6E + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.56 + ARISTA13T0 + 10.0.0.57 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::71 + ARISTA13T0 + FC00::72 + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.58 + ARISTA14T0 + 10.0.0.59 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::75 + ARISTA14T0 + FC00::76 + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.60 + ARISTA15T0 + 10.0.0.61 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::79 + ARISTA15T0 + FC00::7A + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.62 + ARISTA16T0 + 10.0.0.63 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::7D + ARISTA16T0 + FC00::7E + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.64 + ARISTA17T0 + 10.0.0.65 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::81 + ARISTA17T0 + FC00::82 + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.66 + ARISTA18T0 + 10.0.0.67 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::85 + ARISTA18T0 + FC00::86 + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.68 + ARISTA19T0 + 10.0.0.69 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::89 + ARISTA19T0 + FC00::8A + 1 + 10 + 3 + + + false + str-7260cx3-acs-7 + 10.0.0.70 + ARISTA20T0 + 10.0.0.71 + 1 + 10 + 3 + + + str-7260cx3-acs-7 + FC00::8D + ARISTA20T0 + FC00::8E + 1 + 10 + 3 + + + + + 65100 + str-7260cx3-acs-7 + + +
10.0.0.33
+ + + +
+ +
10.0.0.1
+ + + +
+ +
10.0.0.35
+ + + +
+ +
10.0.0.37
+ + + +
+ +
10.0.0.5
+ + + +
+ +
10.0.0.39
+ + + +
+ +
10.0.0.41
+ + + +
+ +
10.0.0.9
+ + + +
+ +
10.0.0.43
+ + + +
+ +
10.0.0.45
+ + + +
+ +
10.0.0.13
+ + + +
+ +
10.0.0.47
+ + + +
+ +
10.0.0.49
+ + + +
+ +
10.0.0.51
+ + + +
+ +
10.0.0.53
+ + + +
+ +
10.0.0.55
+ + + +
+ +
10.0.0.57
+ + + +
+ +
10.0.0.59
+ + + +
+ +
10.0.0.61
+ + + +
+ +
10.0.0.63
+ + + +
+ +
10.0.0.65
+ + + +
+ +
10.0.0.67
+ + + +
+ +
10.0.0.69
+ + + +
+ +
10.0.0.71
+ + + +
+
+ +
+ + 64001 + ARISTA01T0 + + + + 65200 + ARISTA01T2 + + + + 64002 + ARISTA02T0 + + + + 64003 + ARISTA03T0 + + + + 65200 + ARISTA03T2 + + + + 64004 + ARISTA04T0 + + + + 64005 + ARISTA05T0 + + + + 65200 + ARISTA05T2 + + + + 64006 + ARISTA06T0 + + + + 64007 + ARISTA07T0 + + + + 65200 + ARISTA07T2 + + + + 64008 + ARISTA08T0 + + + + 64009 + ARISTA09T0 + + + + 64010 + ARISTA10T0 + + + + 64011 + ARISTA11T0 + + + + 64012 + ARISTA12T0 + + + + 64013 + ARISTA13T0 + + + + 64014 + ARISTA14T0 + + + + 64015 + ARISTA15T0 + + + + 64016 + ARISTA16T0 + + + + 64017 + ARISTA17T0 + + + + 64018 + ARISTA18T0 + + + + 64019 + ARISTA19T0 + + + + 64020 + ARISTA20T0 + + +
+
+ + + + + + HostIP + Loopback0 + + 10.1.0.32/32 + + 10.1.0.32/32 + + + HostIP1 + Loopback0 + + FC00:1::32/128 + + FC00:1::32/128 + + + + + HostIP + eth0 + + 10.64.246.78/23 + + 10.64.246.78/23 + + + V6HostIP + eth0 + + FC00:2::32/64 + + FC00:2::32/64 + + + + + + + str-7260cx3-acs-7 + + + PortChannel101 + Ethernet35/1 + + + + PortChannel102 + Ethernet1/1;Ethernet2/1 + + + + PortChannel103 + Ethernet37/1 + + + + PortChannel104 + Ethernet38/1 + + + + PortChannel105 + Ethernet5/1;Ethernet6/1 + + + + PortChannel106 + Ethernet39/1 + + + + PortChannel107 + Ethernet40/1 + + + + PortChannel108 + Ethernet17/1;Ethernet18/1 + + + + PortChannel109 + Ethernet43/1 + + + + PortChannel1010 + Ethernet45/1 + + + + PortChannel1011 + Ethernet21/1;Ethernet22/1 + + + + PortChannel1012 + Ethernet46/1 + + + + PortChannel1013 + Ethernet47/1 + + + + PortChannel1014 + Ethernet48/1 + + + + PortChannel1015 + Ethernet51/1 + + + + PortChannel1016 + Ethernet53/1 + + + + PortChannel1017 + Ethernet54/1 + + + + PortChannel1018 + Ethernet55/1 + + + + PortChannel1019 + Ethernet56/1 + + + + PortChannel1020 + Ethernet59/1 + + + + PortChannel1021 + Ethernet61/1 + + + + PortChannel1022 + Ethernet62/1 + + + + PortChannel1023 + Ethernet63/1 + + + + PortChannel1024 + Ethernet64/1 + + + + + + + + + PortChannel101 + 10.0.0.32/31 + + + + PortChannel101 + FC00::41/126 + + + + PortChannel102 + 10.0.0.0/31 + + + + PortChannel102 + FC00::1/126 + + + + PortChannel103 + 10.0.0.34/31 + + + + PortChannel103 + FC00::45/126 + + + + PortChannel104 + 10.0.0.36/31 + + + + PortChannel104 + FC00::49/126 + + + + PortChannel105 + 10.0.0.4/31 + + + + PortChannel105 + FC00::5/126 + + + + PortChannel106 + 10.0.0.38/31 + + + + PortChannel106 + FC00::4D/126 + + + + PortChannel107 + 10.0.0.40/31 + + + + PortChannel107 + FC00::51/126 + + + + PortChannel108 + 10.0.0.8/31 + + + + PortChannel108 + FC00::9/126 + + + + PortChannel109 + 10.0.0.42/31 + + + + PortChannel109 + FC00::55/126 + + + + PortChannel1010 + 10.0.0.44/31 + + + + PortChannel1010 + FC00::59/126 + + + + PortChannel1011 + 10.0.0.12/31 + + + + PortChannel1011 + FC00::D/126 + + + + PortChannel1012 + 10.0.0.46/31 + + + + PortChannel1012 + FC00::5D/126 + + + + PortChannel1013 + 10.0.0.48/31 + + + + PortChannel1013 + FC00::61/126 + + + + PortChannel1014 + 10.0.0.50/31 + + + + PortChannel1014 + FC00::65/126 + + + + PortChannel1015 + 10.0.0.52/31 + + + + PortChannel1015 + FC00::69/126 + + + + PortChannel1016 + 10.0.0.54/31 + + + + PortChannel1016 + FC00::6D/126 + + + + PortChannel1017 + 10.0.0.56/31 + + + + PortChannel1017 + FC00::71/126 + + + + PortChannel1018 + 10.0.0.58/31 + + + + PortChannel1018 + FC00::75/126 + + + + PortChannel1019 + 10.0.0.60/31 + + + + PortChannel1019 + FC00::79/126 + + + + PortChannel1020 + 10.0.0.62/31 + + + + PortChannel1020 + FC00::7D/126 + + + + PortChannel1021 + 10.0.0.64/31 + + + + PortChannel1021 + FC00::81/126 + + + + PortChannel1022 + 10.0.0.66/31 + + + + PortChannel1022 + FC00::85/126 + + + + PortChannel1023 + 10.0.0.68/31 + + + + PortChannel1023 + FC00::89/126 + + + + PortChannel1024 + 10.0.0.70/31 + + + + PortChannel1024 + FC00::8D/126 + + + + + + NTP_ACL + NTP + NTP + + + SNMP_ACL + SNMP + SNMP + + + ERSPAN + Everflow + Everflow + + + ERSPANV6 + EverflowV6 + EverflowV6 + + + VTY_LINE + ssh-only + SSH + + + PortChannel101;PortChannel102;PortChannel103;PortChannel104;PortChannel105;PortChannel106;PortChannel107;PortChannel108;PortChannel109;PortChannel1010;PortChannel1011;PortChannel1012;PortChannel1013;PortChannel1014;PortChannel1015;PortChannel1016;PortChannel1017;PortChannel1018;PortChannel1019;PortChannel1020;PortChannel1021;PortChannel1022;PortChannel1023;PortChannel1024 + DataAcl + DataPlane + + + + + + + + + + DeviceInterfaceLink + ARISTA01T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet35/1 + + + DeviceInterfaceLink + ARISTA01T2 + Ethernet1 + str-7260cx3-acs-7 + Ethernet1/1 + + + DeviceInterfaceLink + ARISTA01T2 + Ethernet2 + str-7260cx3-acs-7 + Ethernet2/1 + + + DeviceInterfaceLink + ARISTA02T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet37/1 + + + DeviceInterfaceLink + ARISTA03T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet38/1 + + + DeviceInterfaceLink + ARISTA03T2 + Ethernet1 + str-7260cx3-acs-7 + Ethernet5/1 + + + DeviceInterfaceLink + ARISTA03T2 + Ethernet2 + str-7260cx3-acs-7 + Ethernet6/1 + + + DeviceInterfaceLink + ARISTA04T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet39/1 + + + DeviceInterfaceLink + ARISTA05T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet40/1 + + + DeviceInterfaceLink + ARISTA05T2 + Ethernet1 + str-7260cx3-acs-7 + Ethernet17/1 + + + DeviceInterfaceLink + ARISTA05T2 + Ethernet2 + str-7260cx3-acs-7 + Ethernet18/1 + + + DeviceInterfaceLink + ARISTA06T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet43/1 + + + DeviceInterfaceLink + ARISTA07T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet45/1 + + + DeviceInterfaceLink + ARISTA07T2 + Ethernet1 + str-7260cx3-acs-7 + Ethernet21/1 + + + DeviceInterfaceLink + ARISTA07T2 + Ethernet2 + str-7260cx3-acs-7 + Ethernet22/1 + + + DeviceInterfaceLink + ARISTA08T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet46/1 + + + DeviceInterfaceLink + ARISTA09T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet47/1 + + + DeviceInterfaceLink + ARISTA10T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet48/1 + + + DeviceInterfaceLink + ARISTA11T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet51/1 + + + DeviceInterfaceLink + ARISTA12T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet53/1 + + + DeviceInterfaceLink + ARISTA13T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet54/1 + + + DeviceInterfaceLink + ARISTA14T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet55/1 + + + DeviceInterfaceLink + ARISTA15T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet56/1 + + + DeviceInterfaceLink + ARISTA16T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet59/1 + + + DeviceInterfaceLink + ARISTA17T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet61/1 + + + DeviceInterfaceLink + ARISTA18T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet62/1 + + + DeviceInterfaceLink + ARISTA19T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet63/1 + + + DeviceInterfaceLink + ARISTA20T0 + Ethernet1 + str-7260cx3-acs-7 + Ethernet64/1 + + + + + str-7260cx3-acs-7 + Arista-7260CX3-C64 + + 10.64.246.78 + + + + ARISTA16T0 + + 172.16.141.95 + + Arista-VM + + + ARISTA11T0 + + 172.16.141.90 + + Arista-VM + + + ARISTA10T0 + + 172.16.141.89 + + Arista-VM + + + ARISTA17T0 + + 172.16.141.96 + + Arista-VM + + + ARISTA09T0 + + 172.16.141.88 + + Arista-VM + + + ARISTA20T0 + + 172.16.141.99 + + Arista-VM + + + ARISTA08T0 + + 172.16.141.87 + + Arista-VM + + + ARISTA07T0 + + 172.16.141.86 + + Arista-VM + + + ARISTA07T2 + + 172.16.141.79 + + Arista-VM + + + ARISTA01T2 + + 172.16.141.76 + + Arista-VM + + + ARISTA01T0 + + 172.16.141.80 + + Arista-VM + + + ARISTA05T2 + + 172.16.141.78 + + Arista-VM + + + ARISTA05T0 + + 172.16.141.84 + + Arista-VM + + + ARISTA02T0 + + 172.16.141.81 + + Arista-VM + + + ARISTA03T0 + + 172.16.141.82 + + Arista-VM + + + ARISTA03T2 + + 172.16.141.77 + + Arista-VM + + + ARISTA04T0 + + 172.16.141.83 + + Arista-VM + + + ARISTA18T0 + + 172.16.141.97 + + Arista-VM + + + ARISTA15T0 + + 172.16.141.94 + + Arista-VM + + + ARISTA19T0 + + 172.16.141.98 + + Arista-VM + + + ARISTA14T0 + + 172.16.141.93 + + Arista-VM + + + ARISTA12T0 + + 172.16.141.91 + + Arista-VM + + + ARISTA13T0 + + 172.16.141.92 + + Arista-VM + + + ARISTA06T0 + + 172.16.141.85 + + Arista-VM + + + + + + true + + + DeviceInterface + + true + true + 1 + Ethernet1/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet2/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet3/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet4/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet5/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet6/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet7/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet8/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet9/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet10/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet11/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet12/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet13/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet14/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet15/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet16/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet17/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet18/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet19/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet20/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet21/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet22/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet23/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet24/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet25/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet26/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet27/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet28/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet29/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet30/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet31/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet32/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet33/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet34/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet35/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet36/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet37/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet38/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet39/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet40/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet41/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet42/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet43/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet44/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet45/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet46/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet47/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet48/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet49/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet50/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet51/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet52/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet53/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet54/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet55/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet56/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet57/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet58/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet59/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet60/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet61/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet62/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet63/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet64/1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + Ethernet65 + + false + 0 + 0 + 10000 + + + DeviceInterface + + true + true + 1 + Ethernet66 + + false + 0 + 0 + 10000 + + + true + 0 + Arista-7260CX3-C64 + + + + + + + str-7260cx3-acs-7 + + + DeploymentId + + 1 + + + QosProfile + + Profile0 + + + DhcpResources + + 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4;192.0.0.5;192.0.0.6;192.0.0.7;192.0.0.8;192.0.0.9;192.0.0.10;192.0.0.11;192.0.0.12;192.0.0.13;192.0.0.14;192.0.0.15;192.0.0.16;192.0.0.17;192.0.0.18;192.0.0.19;192.0.0.20;192.0.0.21;192.0.0.22;192.0.0.23;192.0.0.24;192.0.0.25;192.0.0.26;192.0.0.27;192.0.0.28;192.0.0.29;192.0.0.30;192.0.0.31;192.0.0.32;192.0.0.33;192.0.0.34;192.0.0.35;192.0.0.36;192.0.0.37;192.0.0.38;192.0.0.39;192.0.0.40;192.0.0.41;192.0.0.42;192.0.0.43;192.0.0.44;192.0.0.45;192.0.0.46;192.0.0.47;192.0.0.48 + + + NtpResources + + 10.20.8.129;10.20.8.130 + + + SnmpResources + + 10.3.145.98 + + + SyslogResources + + 10.64.246.95 + + + TacacsGroup + + Starlab + + + TacacsServer + + 100.127.20.21 + + + ForcedMgmtRoutes + + 10.3.145.98/31;10.3.145.8;100.127.20.16/28;10.3.149.170/31;40.122.216.24;13.91.48.226;10.3.145.14;10.64.246.0/24;10.64.247.0/24;10.64.5.5 + + + ErspanDestinationIpv4 + + 10.20.6.16 + + + + + + + str-7260cx3-acs-7 + Arista-7260CX3-C64 +
diff --git a/src/sonic-config-engine/tests/sample-arista-7260-t1-minigraph.xml b/src/sonic-config-engine/tests/sample-arista-7260-t1-minigraph.xml index 4367b705a11a..f4f4a349e97e 100644 --- a/src/sonic-config-engine/tests/sample-arista-7260-t1-minigraph.xml +++ b/src/sonic-config-engine/tests/sample-arista-7260-t1-minigraph.xml @@ -2486,6 +2486,14 @@ + + + + TunnelQosRemapEnabled + True + + + str-7260cx3-acs-7 Arista-7260CX3-C64 diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor-remap-disabled.json new file mode 100644 index 000000000000..68774f58563a --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor-remap-disabled.json @@ -0,0 +1,1129 @@ +{ + "TC_TO_PRIORITY_GROUP_MAP": { + "AZURE": { + "0": "0", + "1": "0", + "2": "0", + "3": "3", + "4": "4", + "5": "0", + "6": "0", + "7": "7" + } + }, + "MAP_PFC_PRIORITY_TO_QUEUE": { + "AZURE": { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7" + } + }, + "TC_TO_QUEUE_MAP": { + "AZURE": { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7" + } + }, + "DSCP_TO_TC_MAP": { + "AZURE": { + "0" : "1", + "1" : "1", + "2" : "1", + "3" : "3", + "4" : "4", + "5" : "2", + "6" : "1", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "1", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "6", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" + } + }, + "SCHEDULER": { + "scheduler.0": { + "type" : "DWRR", + "weight": "14" + }, + "scheduler.1": { + "type" : "DWRR", + "weight": "15" + } + }, + "PORT_QOS_MAP": { + "Ethernet0": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet4": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet8": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet12": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet16": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet20": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet24": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet28": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet32": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet36": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet40": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet44": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet48": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet52": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet56": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet60": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet64": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet68": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet72": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet76": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet80": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet84": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet88": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet92": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet96": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet100": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet104": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet108": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet112": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet116": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet120": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet124": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + } + }, + "WRED_PROFILE": { + "AZURE_LOSSLESS" : { + "wred_green_enable" : "true", + "wred_yellow_enable" : "true", + "wred_red_enable" : "true", + "ecn" : "ecn_all", + "green_max_threshold" : "2097152", + "green_min_threshold" : "1048576", + "yellow_max_threshold" : "2097152", + "yellow_min_threshold" : "1048576", + "red_max_threshold" : "2097152", + "red_min_threshold" : "1048576", + "green_drop_probability" : "5", + "yellow_drop_probability": "5", + "red_drop_probability" : "5" + } + }, + "QUEUE": { + "Ethernet0|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet4|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet8|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet12|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet16|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet20|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet24|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet28|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet32|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet36|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet40|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet44|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet48|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet52|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet56|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet60|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet64|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet68|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet72|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet76|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet80|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet84|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet88|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet92|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet96|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet100|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet104|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet108|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet112|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet116|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet120|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet124|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet0|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet4|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet8|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet12|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet16|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet20|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet24|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet28|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet32|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet36|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet40|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet44|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet48|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet52|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet56|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet60|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet64|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet68|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet72|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet76|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet80|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet84|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet88|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet92|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet96|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet100|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet104|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet108|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet112|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet116|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet120|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet124|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet0|0": { + "scheduler": "scheduler.0" + }, + "Ethernet4|0": { + "scheduler": "scheduler.0" + }, + "Ethernet8|0": { + "scheduler": "scheduler.0" + }, + "Ethernet12|0": { + "scheduler": "scheduler.0" + }, + "Ethernet16|0": { + "scheduler": "scheduler.0" + }, + "Ethernet20|0": { + "scheduler": "scheduler.0" + }, + "Ethernet24|0": { + "scheduler": "scheduler.0" + }, + "Ethernet28|0": { + "scheduler": "scheduler.0" + }, + "Ethernet32|0": { + "scheduler": "scheduler.0" + }, + "Ethernet36|0": { + "scheduler": "scheduler.0" + }, + "Ethernet40|0": { + "scheduler": "scheduler.0" + }, + "Ethernet44|0": { + "scheduler": "scheduler.0" + }, + "Ethernet48|0": { + "scheduler": "scheduler.0" + }, + "Ethernet52|0": { + "scheduler": "scheduler.0" + }, + "Ethernet56|0": { + "scheduler": "scheduler.0" + }, + "Ethernet60|0": { + "scheduler": "scheduler.0" + }, + "Ethernet64|0": { + "scheduler": "scheduler.0" + }, + "Ethernet68|0": { + "scheduler": "scheduler.0" + }, + "Ethernet72|0": { + "scheduler": "scheduler.0" + }, + "Ethernet76|0": { + "scheduler": "scheduler.0" + }, + "Ethernet80|0": { + "scheduler": "scheduler.0" + }, + "Ethernet84|0": { + "scheduler": "scheduler.0" + }, + "Ethernet88|0": { + "scheduler": "scheduler.0" + }, + "Ethernet92|0": { + "scheduler": "scheduler.0" + }, + "Ethernet96|0": { + "scheduler": "scheduler.0" + }, + "Ethernet100|0": { + "scheduler": "scheduler.0" + }, + "Ethernet104|0": { + "scheduler": "scheduler.0" + }, + "Ethernet108|0": { + "scheduler": "scheduler.0" + }, + "Ethernet112|0": { + "scheduler": "scheduler.0" + }, + "Ethernet116|0": { + "scheduler": "scheduler.0" + }, + "Ethernet120|0": { + "scheduler": "scheduler.0" + }, + "Ethernet124|0": { + "scheduler": "scheduler.0" + }, + "Ethernet0|1": { + "scheduler": "scheduler.0" + }, + "Ethernet4|1": { + "scheduler": "scheduler.0" + }, + "Ethernet8|1": { + "scheduler": "scheduler.0" + }, + "Ethernet12|1": { + "scheduler": "scheduler.0" + }, + "Ethernet16|1": { + "scheduler": "scheduler.0" + }, + "Ethernet20|1": { + "scheduler": "scheduler.0" + }, + "Ethernet24|1": { + "scheduler": "scheduler.0" + }, + "Ethernet28|1": { + "scheduler": "scheduler.0" + }, + "Ethernet32|1": { + "scheduler": "scheduler.0" + }, + "Ethernet36|1": { + "scheduler": "scheduler.0" + }, + "Ethernet40|1": { + "scheduler": "scheduler.0" + }, + "Ethernet44|1": { + "scheduler": "scheduler.0" + }, + "Ethernet48|1": { + "scheduler": "scheduler.0" + }, + "Ethernet52|1": { + "scheduler": "scheduler.0" + }, + "Ethernet56|1": { + "scheduler": "scheduler.0" + }, + "Ethernet60|1": { + "scheduler": "scheduler.0" + }, + "Ethernet64|1": { + "scheduler": "scheduler.0" + }, + "Ethernet68|1": { + "scheduler": "scheduler.0" + }, + "Ethernet72|1": { + "scheduler": "scheduler.0" + }, + "Ethernet76|1": { + "scheduler": "scheduler.0" + }, + "Ethernet80|1": { + "scheduler": "scheduler.0" + }, + "Ethernet84|1": { + "scheduler": "scheduler.0" + }, + "Ethernet88|1": { + "scheduler": "scheduler.0" + }, + "Ethernet92|1": { + "scheduler": "scheduler.0" + }, + "Ethernet96|1": { + "scheduler": "scheduler.0" + }, + "Ethernet100|1": { + "scheduler": "scheduler.0" + }, + "Ethernet104|1": { + "scheduler": "scheduler.0" + }, + "Ethernet108|1": { + "scheduler": "scheduler.0" + }, + "Ethernet112|1": { + "scheduler": "scheduler.0" + }, + "Ethernet116|1": { + "scheduler": "scheduler.0" + }, + "Ethernet120|1": { + "scheduler": "scheduler.0" + }, + "Ethernet124|1": { + "scheduler": "scheduler.0" + }, + "Ethernet0|2": { + "scheduler": "scheduler.0" + }, + "Ethernet4|2": { + "scheduler": "scheduler.0" + }, + "Ethernet8|2": { + "scheduler": "scheduler.0" + }, + "Ethernet12|2": { + "scheduler": "scheduler.0" + }, + "Ethernet16|2": { + "scheduler": "scheduler.0" + }, + "Ethernet20|2": { + "scheduler": "scheduler.0" + }, + "Ethernet24|2": { + "scheduler": "scheduler.0" + }, + "Ethernet28|2": { + "scheduler": "scheduler.0" + }, + "Ethernet32|2": { + "scheduler": "scheduler.0" + }, + "Ethernet36|2": { + "scheduler": "scheduler.0" + }, + "Ethernet40|2": { + "scheduler": "scheduler.0" + }, + "Ethernet44|2": { + "scheduler": "scheduler.0" + }, + "Ethernet48|2": { + "scheduler": "scheduler.0" + }, + "Ethernet52|2": { + "scheduler": "scheduler.0" + }, + "Ethernet56|2": { + "scheduler": "scheduler.0" + }, + "Ethernet60|2": { + "scheduler": "scheduler.0" + }, + "Ethernet64|2": { + "scheduler": "scheduler.0" + }, + "Ethernet68|2": { + "scheduler": "scheduler.0" + }, + "Ethernet72|2": { + "scheduler": "scheduler.0" + }, + "Ethernet76|2": { + "scheduler": "scheduler.0" + }, + "Ethernet80|2": { + "scheduler": "scheduler.0" + }, + "Ethernet84|2": { + "scheduler": "scheduler.0" + }, + "Ethernet88|2": { + "scheduler": "scheduler.0" + }, + "Ethernet92|2": { + "scheduler": "scheduler.0" + }, + "Ethernet96|2": { + "scheduler": "scheduler.0" + }, + "Ethernet100|2": { + "scheduler": "scheduler.0" + }, + "Ethernet104|2": { + "scheduler": "scheduler.0" + }, + "Ethernet108|2": { + "scheduler": "scheduler.0" + }, + "Ethernet112|2": { + "scheduler": "scheduler.0" + }, + "Ethernet116|2": { + "scheduler": "scheduler.0" + }, + "Ethernet120|2": { + "scheduler": "scheduler.0" + }, + "Ethernet124|2": { + "scheduler": "scheduler.0" + }, + "Ethernet0|5": { + "scheduler": "scheduler.0" + }, + "Ethernet4|5": { + "scheduler": "scheduler.0" + }, + "Ethernet8|5": { + "scheduler": "scheduler.0" + }, + "Ethernet12|5": { + "scheduler": "scheduler.0" + }, + "Ethernet16|5": { + "scheduler": "scheduler.0" + }, + "Ethernet20|5": { + "scheduler": "scheduler.0" + }, + "Ethernet24|5": { + "scheduler": "scheduler.0" + }, + "Ethernet28|5": { + "scheduler": "scheduler.0" + }, + "Ethernet32|5": { + "scheduler": "scheduler.0" + }, + "Ethernet36|5": { + "scheduler": "scheduler.0" + }, + "Ethernet40|5": { + "scheduler": "scheduler.0" + }, + "Ethernet44|5": { + "scheduler": "scheduler.0" + }, + "Ethernet48|5": { + "scheduler": "scheduler.0" + }, + "Ethernet52|5": { + "scheduler": "scheduler.0" + }, + "Ethernet56|5": { + "scheduler": "scheduler.0" + }, + "Ethernet60|5": { + "scheduler": "scheduler.0" + }, + "Ethernet64|5": { + "scheduler": "scheduler.0" + }, + "Ethernet68|5": { + "scheduler": "scheduler.0" + }, + "Ethernet72|5": { + "scheduler": "scheduler.0" + }, + "Ethernet76|5": { + "scheduler": "scheduler.0" + }, + "Ethernet80|5": { + "scheduler": "scheduler.0" + }, + "Ethernet84|5": { + "scheduler": "scheduler.0" + }, + "Ethernet88|5": { + "scheduler": "scheduler.0" + }, + "Ethernet92|5": { + "scheduler": "scheduler.0" + }, + "Ethernet96|5": { + "scheduler": "scheduler.0" + }, + "Ethernet100|5": { + "scheduler": "scheduler.0" + }, + "Ethernet104|5": { + "scheduler": "scheduler.0" + }, + "Ethernet108|5": { + "scheduler": "scheduler.0" + }, + "Ethernet112|5": { + "scheduler": "scheduler.0" + }, + "Ethernet116|5": { + "scheduler": "scheduler.0" + }, + "Ethernet120|5": { + "scheduler": "scheduler.0" + }, + "Ethernet124|5": { + "scheduler": "scheduler.0" + }, + "Ethernet0|6": { + "scheduler": "scheduler.0" + }, + "Ethernet4|6": { + "scheduler": "scheduler.0" + }, + "Ethernet8|6": { + "scheduler": "scheduler.0" + }, + "Ethernet12|6": { + "scheduler": "scheduler.0" + }, + "Ethernet16|6": { + "scheduler": "scheduler.0" + }, + "Ethernet20|6": { + "scheduler": "scheduler.0" + }, + "Ethernet24|6": { + "scheduler": "scheduler.0" + }, + "Ethernet28|6": { + "scheduler": "scheduler.0" + }, + "Ethernet32|6": { + "scheduler": "scheduler.0" + }, + "Ethernet36|6": { + "scheduler": "scheduler.0" + }, + "Ethernet40|6": { + "scheduler": "scheduler.0" + }, + "Ethernet44|6": { + "scheduler": "scheduler.0" + }, + "Ethernet48|6": { + "scheduler": "scheduler.0" + }, + "Ethernet52|6": { + "scheduler": "scheduler.0" + }, + "Ethernet56|6": { + "scheduler": "scheduler.0" + }, + "Ethernet60|6": { + "scheduler": "scheduler.0" + }, + "Ethernet64|6": { + "scheduler": "scheduler.0" + }, + "Ethernet68|6": { + "scheduler": "scheduler.0" + }, + "Ethernet72|6": { + "scheduler": "scheduler.0" + }, + "Ethernet76|6": { + "scheduler": "scheduler.0" + }, + "Ethernet80|6": { + "scheduler": "scheduler.0" + }, + "Ethernet84|6": { + "scheduler": "scheduler.0" + }, + "Ethernet88|6": { + "scheduler": "scheduler.0" + }, + "Ethernet92|6": { + "scheduler": "scheduler.0" + }, + "Ethernet96|6": { + "scheduler": "scheduler.0" + }, + "Ethernet100|6": { + "scheduler": "scheduler.0" + }, + "Ethernet104|6": { + "scheduler": "scheduler.0" + }, + "Ethernet108|6": { + "scheduler": "scheduler.0" + }, + "Ethernet112|6": { + "scheduler": "scheduler.0" + }, + "Ethernet116|6": { + "scheduler": "scheduler.0" + }, + "Ethernet120|6": { + "scheduler": "scheduler.0" + }, + "Ethernet124|6": { + "scheduler": "scheduler.0" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json index dbab298bb76a..843e68a49c7d 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json @@ -20,7 +20,8 @@ "4": "4", "5": "5", "6": "6", - "7": "7" + "7": "7", + "8": "1" }, "AZURE_TUNNEL": { "0": "0", @@ -30,7 +31,8 @@ "4": "6", "5": "5", "6": "1", - "7": "7" + "7": "7", + "8": "1" } }, "DSCP_TO_TC_MAP": { @@ -68,7 +70,7 @@ "30": "1", "31": "1", "32": "1", - "33": "2", + "33": "8", "34": "1", "35": "1", "36": "1", @@ -134,7 +136,7 @@ "30": "1", "31": "1", "32": "1", - "33": "2", + "33": "8", "34": "1", "35": "1", "36": "1", @@ -171,12 +173,13 @@ "AZURE": { "0": "0", "1": "0", - "2": "0", + "2": "2", "3": "3", "4": "4", "5": "0", - "6": "0", - "7": "7" + "6": "6", + "7": "7", + "8": "0" }, "AZURE_TUNNEL": { "0": "0", @@ -186,19 +189,21 @@ "4": "6", "5": "0", "6": "0", - "7": "0" + "7": "0", + "8": "0" } }, "TC_TO_DSCP_MAP": { "AZURE_TUNNEL": { "0": "8", "1": "0", - "2": "33", + "2": "0", "3": "2", "4": "6", "5": "46", "6": "0", - "7": "48" + "7": "48", + "8": "33" } }, "SCHEDULER": { diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor-remap-disabled.json new file mode 100644 index 000000000000..27b7ebd7e494 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor-remap-disabled.json @@ -0,0 +1,2121 @@ +{ + "TC_TO_PRIORITY_GROUP_MAP": { + "AZURE": { + "0": "0", + "1": "0", + "2": "0", + "3": "3", + "4": "4", + "5": "0", + "6": "0", + "7": "7" + } + }, + "MAP_PFC_PRIORITY_TO_QUEUE": { + "AZURE": { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7" + } + }, + "TC_TO_QUEUE_MAP": { + "AZURE": { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7" + } + }, + "DSCP_TO_TC_MAP": { + "AZURE": { + "0" : "1", + "1" : "1", + "2" : "1", + "3" : "3", + "4" : "4", + "5" : "2", + "6" : "1", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "1", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "6", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" + } + }, + "SCHEDULER": { + "scheduler.0": { + "type" : "DWRR", + "weight": "14" + }, + "scheduler.1": { + "type" : "DWRR", + "weight": "15" + } + }, + "PORT_QOS_MAP": { + "Ethernet0": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet4": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet8": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet12": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet16": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet20": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet24": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet28": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet32": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet36": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet40": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet44": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet48": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet52": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet56": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet60": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet64": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet68": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet72": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet76": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet80": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet84": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet88": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet92": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet96": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet100": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet104": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet108": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet112": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet116": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet120": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet124": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet128": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet132": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet136": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet140": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet144": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet148": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet152": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet156": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet160": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet164": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet168": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet172": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet176": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet180": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet184": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet188": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet192": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet196": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet200": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet204": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet208": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet212": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet216": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet220": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet224": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet228": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet232": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet236": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet240": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet244": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet248": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet252": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + } + }, + "WRED_PROFILE": { + "AZURE_LOSSLESS" : { + "wred_green_enable" : "true", + "wred_yellow_enable" : "true", + "wred_red_enable" : "true", + "ecn" : "ecn_all", + "green_max_threshold" : "2097152", + "green_min_threshold" : "1048576", + "yellow_max_threshold" : "2097152", + "yellow_min_threshold" : "1048576", + "red_max_threshold" : "2097152", + "red_min_threshold" : "1048576", + "green_drop_probability" : "5", + "yellow_drop_probability": "5", + "red_drop_probability" : "5" + } + }, + "QUEUE": { + "Ethernet0|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet4|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet8|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet12|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet16|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet20|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet24|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet28|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet32|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet36|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet40|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet44|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet48|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet52|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet56|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet60|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet64|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet68|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet72|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet76|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet80|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet84|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet88|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet92|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet96|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet100|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet104|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet108|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet112|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet116|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet120|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet124|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet128|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet132|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet136|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet140|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet144|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet148|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet152|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet156|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet160|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet164|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet168|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet172|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet176|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet180|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet184|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet188|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet192|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet196|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet200|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet204|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet208|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet212|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet216|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet220|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet224|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet228|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet232|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet236|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet240|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet244|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet248|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet252|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet0|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet4|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet8|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet12|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet16|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet20|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet24|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet28|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet32|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet36|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet40|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet44|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet48|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet52|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet56|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet60|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet64|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet68|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet72|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet76|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet80|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet84|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet88|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet92|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet96|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet100|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet104|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet108|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet112|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet116|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet120|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet124|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet128|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet132|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet136|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet140|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet144|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet148|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet152|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet156|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet160|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet164|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet168|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet172|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet176|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet180|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet184|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet188|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet192|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet196|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet200|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet204|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet208|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet212|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet216|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet220|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet224|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet228|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet232|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet236|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet240|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet244|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet248|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet252|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet0|0": { + "scheduler": "scheduler.0" + }, + "Ethernet4|0": { + "scheduler": "scheduler.0" + }, + "Ethernet8|0": { + "scheduler": "scheduler.0" + }, + "Ethernet12|0": { + "scheduler": "scheduler.0" + }, + "Ethernet16|0": { + "scheduler": "scheduler.0" + }, + "Ethernet20|0": { + "scheduler": "scheduler.0" + }, + "Ethernet24|0": { + "scheduler": "scheduler.0" + }, + "Ethernet28|0": { + "scheduler": "scheduler.0" + }, + "Ethernet32|0": { + "scheduler": "scheduler.0" + }, + "Ethernet36|0": { + "scheduler": "scheduler.0" + }, + "Ethernet40|0": { + "scheduler": "scheduler.0" + }, + "Ethernet44|0": { + "scheduler": "scheduler.0" + }, + "Ethernet48|0": { + "scheduler": "scheduler.0" + }, + "Ethernet52|0": { + "scheduler": "scheduler.0" + }, + "Ethernet56|0": { + "scheduler": "scheduler.0" + }, + "Ethernet60|0": { + "scheduler": "scheduler.0" + }, + "Ethernet64|0": { + "scheduler": "scheduler.0" + }, + "Ethernet68|0": { + "scheduler": "scheduler.0" + }, + "Ethernet72|0": { + "scheduler": "scheduler.0" + }, + "Ethernet76|0": { + "scheduler": "scheduler.0" + }, + "Ethernet80|0": { + "scheduler": "scheduler.0" + }, + "Ethernet84|0": { + "scheduler": "scheduler.0" + }, + "Ethernet88|0": { + "scheduler": "scheduler.0" + }, + "Ethernet92|0": { + "scheduler": "scheduler.0" + }, + "Ethernet96|0": { + "scheduler": "scheduler.0" + }, + "Ethernet100|0": { + "scheduler": "scheduler.0" + }, + "Ethernet104|0": { + "scheduler": "scheduler.0" + }, + "Ethernet108|0": { + "scheduler": "scheduler.0" + }, + "Ethernet112|0": { + "scheduler": "scheduler.0" + }, + "Ethernet116|0": { + "scheduler": "scheduler.0" + }, + "Ethernet120|0": { + "scheduler": "scheduler.0" + }, + "Ethernet124|0": { + "scheduler": "scheduler.0" + }, + "Ethernet128|0": { + "scheduler": "scheduler.0" + }, + "Ethernet132|0": { + "scheduler": "scheduler.0" + }, + "Ethernet136|0": { + "scheduler": "scheduler.0" + }, + "Ethernet140|0": { + "scheduler": "scheduler.0" + }, + "Ethernet144|0": { + "scheduler": "scheduler.0" + }, + "Ethernet148|0": { + "scheduler": "scheduler.0" + }, + "Ethernet152|0": { + "scheduler": "scheduler.0" + }, + "Ethernet156|0": { + "scheduler": "scheduler.0" + }, + "Ethernet160|0": { + "scheduler": "scheduler.0" + }, + "Ethernet164|0": { + "scheduler": "scheduler.0" + }, + "Ethernet168|0": { + "scheduler": "scheduler.0" + }, + "Ethernet172|0": { + "scheduler": "scheduler.0" + }, + "Ethernet176|0": { + "scheduler": "scheduler.0" + }, + "Ethernet180|0": { + "scheduler": "scheduler.0" + }, + "Ethernet184|0": { + "scheduler": "scheduler.0" + }, + "Ethernet188|0": { + "scheduler": "scheduler.0" + }, + "Ethernet192|0": { + "scheduler": "scheduler.0" + }, + "Ethernet196|0": { + "scheduler": "scheduler.0" + }, + "Ethernet200|0": { + "scheduler": "scheduler.0" + }, + "Ethernet204|0": { + "scheduler": "scheduler.0" + }, + "Ethernet208|0": { + "scheduler": "scheduler.0" + }, + "Ethernet212|0": { + "scheduler": "scheduler.0" + }, + "Ethernet216|0": { + "scheduler": "scheduler.0" + }, + "Ethernet220|0": { + "scheduler": "scheduler.0" + }, + "Ethernet224|0": { + "scheduler": "scheduler.0" + }, + "Ethernet228|0": { + "scheduler": "scheduler.0" + }, + "Ethernet232|0": { + "scheduler": "scheduler.0" + }, + "Ethernet236|0": { + "scheduler": "scheduler.0" + }, + "Ethernet240|0": { + "scheduler": "scheduler.0" + }, + "Ethernet244|0": { + "scheduler": "scheduler.0" + }, + "Ethernet248|0": { + "scheduler": "scheduler.0" + }, + "Ethernet252|0": { + "scheduler": "scheduler.0" + }, + "Ethernet0|1": { + "scheduler": "scheduler.0" + }, + "Ethernet4|1": { + "scheduler": "scheduler.0" + }, + "Ethernet8|1": { + "scheduler": "scheduler.0" + }, + "Ethernet12|1": { + "scheduler": "scheduler.0" + }, + "Ethernet16|1": { + "scheduler": "scheduler.0" + }, + "Ethernet20|1": { + "scheduler": "scheduler.0" + }, + "Ethernet24|1": { + "scheduler": "scheduler.0" + }, + "Ethernet28|1": { + "scheduler": "scheduler.0" + }, + "Ethernet32|1": { + "scheduler": "scheduler.0" + }, + "Ethernet36|1": { + "scheduler": "scheduler.0" + }, + "Ethernet40|1": { + "scheduler": "scheduler.0" + }, + "Ethernet44|1": { + "scheduler": "scheduler.0" + }, + "Ethernet48|1": { + "scheduler": "scheduler.0" + }, + "Ethernet52|1": { + "scheduler": "scheduler.0" + }, + "Ethernet56|1": { + "scheduler": "scheduler.0" + }, + "Ethernet60|1": { + "scheduler": "scheduler.0" + }, + "Ethernet64|1": { + "scheduler": "scheduler.0" + }, + "Ethernet68|1": { + "scheduler": "scheduler.0" + }, + "Ethernet72|1": { + "scheduler": "scheduler.0" + }, + "Ethernet76|1": { + "scheduler": "scheduler.0" + }, + "Ethernet80|1": { + "scheduler": "scheduler.0" + }, + "Ethernet84|1": { + "scheduler": "scheduler.0" + }, + "Ethernet88|1": { + "scheduler": "scheduler.0" + }, + "Ethernet92|1": { + "scheduler": "scheduler.0" + }, + "Ethernet96|1": { + "scheduler": "scheduler.0" + }, + "Ethernet100|1": { + "scheduler": "scheduler.0" + }, + "Ethernet104|1": { + "scheduler": "scheduler.0" + }, + "Ethernet108|1": { + "scheduler": "scheduler.0" + }, + "Ethernet112|1": { + "scheduler": "scheduler.0" + }, + "Ethernet116|1": { + "scheduler": "scheduler.0" + }, + "Ethernet120|1": { + "scheduler": "scheduler.0" + }, + "Ethernet124|1": { + "scheduler": "scheduler.0" + }, + "Ethernet128|1": { + "scheduler": "scheduler.0" + }, + "Ethernet132|1": { + "scheduler": "scheduler.0" + }, + "Ethernet136|1": { + "scheduler": "scheduler.0" + }, + "Ethernet140|1": { + "scheduler": "scheduler.0" + }, + "Ethernet144|1": { + "scheduler": "scheduler.0" + }, + "Ethernet148|1": { + "scheduler": "scheduler.0" + }, + "Ethernet152|1": { + "scheduler": "scheduler.0" + }, + "Ethernet156|1": { + "scheduler": "scheduler.0" + }, + "Ethernet160|1": { + "scheduler": "scheduler.0" + }, + "Ethernet164|1": { + "scheduler": "scheduler.0" + }, + "Ethernet168|1": { + "scheduler": "scheduler.0" + }, + "Ethernet172|1": { + "scheduler": "scheduler.0" + }, + "Ethernet176|1": { + "scheduler": "scheduler.0" + }, + "Ethernet180|1": { + "scheduler": "scheduler.0" + }, + "Ethernet184|1": { + "scheduler": "scheduler.0" + }, + "Ethernet188|1": { + "scheduler": "scheduler.0" + }, + "Ethernet192|1": { + "scheduler": "scheduler.0" + }, + "Ethernet196|1": { + "scheduler": "scheduler.0" + }, + "Ethernet200|1": { + "scheduler": "scheduler.0" + }, + "Ethernet204|1": { + "scheduler": "scheduler.0" + }, + "Ethernet208|1": { + "scheduler": "scheduler.0" + }, + "Ethernet212|1": { + "scheduler": "scheduler.0" + }, + "Ethernet216|1": { + "scheduler": "scheduler.0" + }, + "Ethernet220|1": { + "scheduler": "scheduler.0" + }, + "Ethernet224|1": { + "scheduler": "scheduler.0" + }, + "Ethernet228|1": { + "scheduler": "scheduler.0" + }, + "Ethernet232|1": { + "scheduler": "scheduler.0" + }, + "Ethernet236|1": { + "scheduler": "scheduler.0" + }, + "Ethernet240|1": { + "scheduler": "scheduler.0" + }, + "Ethernet244|1": { + "scheduler": "scheduler.0" + }, + "Ethernet248|1": { + "scheduler": "scheduler.0" + }, + "Ethernet252|1": { + "scheduler": "scheduler.0" + }, + "Ethernet0|2": { + "scheduler": "scheduler.0" + }, + "Ethernet4|2": { + "scheduler": "scheduler.0" + }, + "Ethernet8|2": { + "scheduler": "scheduler.0" + }, + "Ethernet12|2": { + "scheduler": "scheduler.0" + }, + "Ethernet16|2": { + "scheduler": "scheduler.0" + }, + "Ethernet20|2": { + "scheduler": "scheduler.0" + }, + "Ethernet24|2": { + "scheduler": "scheduler.0" + }, + "Ethernet28|2": { + "scheduler": "scheduler.0" + }, + "Ethernet32|2": { + "scheduler": "scheduler.0" + }, + "Ethernet36|2": { + "scheduler": "scheduler.0" + }, + "Ethernet40|2": { + "scheduler": "scheduler.0" + }, + "Ethernet44|2": { + "scheduler": "scheduler.0" + }, + "Ethernet48|2": { + "scheduler": "scheduler.0" + }, + "Ethernet52|2": { + "scheduler": "scheduler.0" + }, + "Ethernet56|2": { + "scheduler": "scheduler.0" + }, + "Ethernet60|2": { + "scheduler": "scheduler.0" + }, + "Ethernet64|2": { + "scheduler": "scheduler.0" + }, + "Ethernet68|2": { + "scheduler": "scheduler.0" + }, + "Ethernet72|2": { + "scheduler": "scheduler.0" + }, + "Ethernet76|2": { + "scheduler": "scheduler.0" + }, + "Ethernet80|2": { + "scheduler": "scheduler.0" + }, + "Ethernet84|2": { + "scheduler": "scheduler.0" + }, + "Ethernet88|2": { + "scheduler": "scheduler.0" + }, + "Ethernet92|2": { + "scheduler": "scheduler.0" + }, + "Ethernet96|2": { + "scheduler": "scheduler.0" + }, + "Ethernet100|2": { + "scheduler": "scheduler.0" + }, + "Ethernet104|2": { + "scheduler": "scheduler.0" + }, + "Ethernet108|2": { + "scheduler": "scheduler.0" + }, + "Ethernet112|2": { + "scheduler": "scheduler.0" + }, + "Ethernet116|2": { + "scheduler": "scheduler.0" + }, + "Ethernet120|2": { + "scheduler": "scheduler.0" + }, + "Ethernet124|2": { + "scheduler": "scheduler.0" + }, + "Ethernet128|2": { + "scheduler": "scheduler.0" + }, + "Ethernet132|2": { + "scheduler": "scheduler.0" + }, + "Ethernet136|2": { + "scheduler": "scheduler.0" + }, + "Ethernet140|2": { + "scheduler": "scheduler.0" + }, + "Ethernet144|2": { + "scheduler": "scheduler.0" + }, + "Ethernet148|2": { + "scheduler": "scheduler.0" + }, + "Ethernet152|2": { + "scheduler": "scheduler.0" + }, + "Ethernet156|2": { + "scheduler": "scheduler.0" + }, + "Ethernet160|2": { + "scheduler": "scheduler.0" + }, + "Ethernet164|2": { + "scheduler": "scheduler.0" + }, + "Ethernet168|2": { + "scheduler": "scheduler.0" + }, + "Ethernet172|2": { + "scheduler": "scheduler.0" + }, + "Ethernet176|2": { + "scheduler": "scheduler.0" + }, + "Ethernet180|2": { + "scheduler": "scheduler.0" + }, + "Ethernet184|2": { + "scheduler": "scheduler.0" + }, + "Ethernet188|2": { + "scheduler": "scheduler.0" + }, + "Ethernet192|2": { + "scheduler": "scheduler.0" + }, + "Ethernet196|2": { + "scheduler": "scheduler.0" + }, + "Ethernet200|2": { + "scheduler": "scheduler.0" + }, + "Ethernet204|2": { + "scheduler": "scheduler.0" + }, + "Ethernet208|2": { + "scheduler": "scheduler.0" + }, + "Ethernet212|2": { + "scheduler": "scheduler.0" + }, + "Ethernet216|2": { + "scheduler": "scheduler.0" + }, + "Ethernet220|2": { + "scheduler": "scheduler.0" + }, + "Ethernet224|2": { + "scheduler": "scheduler.0" + }, + "Ethernet228|2": { + "scheduler": "scheduler.0" + }, + "Ethernet232|2": { + "scheduler": "scheduler.0" + }, + "Ethernet236|2": { + "scheduler": "scheduler.0" + }, + "Ethernet240|2": { + "scheduler": "scheduler.0" + }, + "Ethernet244|2": { + "scheduler": "scheduler.0" + }, + "Ethernet248|2": { + "scheduler": "scheduler.0" + }, + "Ethernet252|2": { + "scheduler": "scheduler.0" + }, + "Ethernet0|5": { + "scheduler": "scheduler.0" + }, + "Ethernet4|5": { + "scheduler": "scheduler.0" + }, + "Ethernet8|5": { + "scheduler": "scheduler.0" + }, + "Ethernet12|5": { + "scheduler": "scheduler.0" + }, + "Ethernet16|5": { + "scheduler": "scheduler.0" + }, + "Ethernet20|5": { + "scheduler": "scheduler.0" + }, + "Ethernet24|5": { + "scheduler": "scheduler.0" + }, + "Ethernet28|5": { + "scheduler": "scheduler.0" + }, + "Ethernet32|5": { + "scheduler": "scheduler.0" + }, + "Ethernet36|5": { + "scheduler": "scheduler.0" + }, + "Ethernet40|5": { + "scheduler": "scheduler.0" + }, + "Ethernet44|5": { + "scheduler": "scheduler.0" + }, + "Ethernet48|5": { + "scheduler": "scheduler.0" + }, + "Ethernet52|5": { + "scheduler": "scheduler.0" + }, + "Ethernet56|5": { + "scheduler": "scheduler.0" + }, + "Ethernet60|5": { + "scheduler": "scheduler.0" + }, + "Ethernet64|5": { + "scheduler": "scheduler.0" + }, + "Ethernet68|5": { + "scheduler": "scheduler.0" + }, + "Ethernet72|5": { + "scheduler": "scheduler.0" + }, + "Ethernet76|5": { + "scheduler": "scheduler.0" + }, + "Ethernet80|5": { + "scheduler": "scheduler.0" + }, + "Ethernet84|5": { + "scheduler": "scheduler.0" + }, + "Ethernet88|5": { + "scheduler": "scheduler.0" + }, + "Ethernet92|5": { + "scheduler": "scheduler.0" + }, + "Ethernet96|5": { + "scheduler": "scheduler.0" + }, + "Ethernet100|5": { + "scheduler": "scheduler.0" + }, + "Ethernet104|5": { + "scheduler": "scheduler.0" + }, + "Ethernet108|5": { + "scheduler": "scheduler.0" + }, + "Ethernet112|5": { + "scheduler": "scheduler.0" + }, + "Ethernet116|5": { + "scheduler": "scheduler.0" + }, + "Ethernet120|5": { + "scheduler": "scheduler.0" + }, + "Ethernet124|5": { + "scheduler": "scheduler.0" + }, + "Ethernet128|5": { + "scheduler": "scheduler.0" + }, + "Ethernet132|5": { + "scheduler": "scheduler.0" + }, + "Ethernet136|5": { + "scheduler": "scheduler.0" + }, + "Ethernet140|5": { + "scheduler": "scheduler.0" + }, + "Ethernet144|5": { + "scheduler": "scheduler.0" + }, + "Ethernet148|5": { + "scheduler": "scheduler.0" + }, + "Ethernet152|5": { + "scheduler": "scheduler.0" + }, + "Ethernet156|5": { + "scheduler": "scheduler.0" + }, + "Ethernet160|5": { + "scheduler": "scheduler.0" + }, + "Ethernet164|5": { + "scheduler": "scheduler.0" + }, + "Ethernet168|5": { + "scheduler": "scheduler.0" + }, + "Ethernet172|5": { + "scheduler": "scheduler.0" + }, + "Ethernet176|5": { + "scheduler": "scheduler.0" + }, + "Ethernet180|5": { + "scheduler": "scheduler.0" + }, + "Ethernet184|5": { + "scheduler": "scheduler.0" + }, + "Ethernet188|5": { + "scheduler": "scheduler.0" + }, + "Ethernet192|5": { + "scheduler": "scheduler.0" + }, + "Ethernet196|5": { + "scheduler": "scheduler.0" + }, + "Ethernet200|5": { + "scheduler": "scheduler.0" + }, + "Ethernet204|5": { + "scheduler": "scheduler.0" + }, + "Ethernet208|5": { + "scheduler": "scheduler.0" + }, + "Ethernet212|5": { + "scheduler": "scheduler.0" + }, + "Ethernet216|5": { + "scheduler": "scheduler.0" + }, + "Ethernet220|5": { + "scheduler": "scheduler.0" + }, + "Ethernet224|5": { + "scheduler": "scheduler.0" + }, + "Ethernet228|5": { + "scheduler": "scheduler.0" + }, + "Ethernet232|5": { + "scheduler": "scheduler.0" + }, + "Ethernet236|5": { + "scheduler": "scheduler.0" + }, + "Ethernet240|5": { + "scheduler": "scheduler.0" + }, + "Ethernet244|5": { + "scheduler": "scheduler.0" + }, + "Ethernet248|5": { + "scheduler": "scheduler.0" + }, + "Ethernet252|5": { + "scheduler": "scheduler.0" + }, + "Ethernet0|6": { + "scheduler": "scheduler.0" + }, + "Ethernet4|6": { + "scheduler": "scheduler.0" + }, + "Ethernet8|6": { + "scheduler": "scheduler.0" + }, + "Ethernet12|6": { + "scheduler": "scheduler.0" + }, + "Ethernet16|6": { + "scheduler": "scheduler.0" + }, + "Ethernet20|6": { + "scheduler": "scheduler.0" + }, + "Ethernet24|6": { + "scheduler": "scheduler.0" + }, + "Ethernet28|6": { + "scheduler": "scheduler.0" + }, + "Ethernet32|6": { + "scheduler": "scheduler.0" + }, + "Ethernet36|6": { + "scheduler": "scheduler.0" + }, + "Ethernet40|6": { + "scheduler": "scheduler.0" + }, + "Ethernet44|6": { + "scheduler": "scheduler.0" + }, + "Ethernet48|6": { + "scheduler": "scheduler.0" + }, + "Ethernet52|6": { + "scheduler": "scheduler.0" + }, + "Ethernet56|6": { + "scheduler": "scheduler.0" + }, + "Ethernet60|6": { + "scheduler": "scheduler.0" + }, + "Ethernet64|6": { + "scheduler": "scheduler.0" + }, + "Ethernet68|6": { + "scheduler": "scheduler.0" + }, + "Ethernet72|6": { + "scheduler": "scheduler.0" + }, + "Ethernet76|6": { + "scheduler": "scheduler.0" + }, + "Ethernet80|6": { + "scheduler": "scheduler.0" + }, + "Ethernet84|6": { + "scheduler": "scheduler.0" + }, + "Ethernet88|6": { + "scheduler": "scheduler.0" + }, + "Ethernet92|6": { + "scheduler": "scheduler.0" + }, + "Ethernet96|6": { + "scheduler": "scheduler.0" + }, + "Ethernet100|6": { + "scheduler": "scheduler.0" + }, + "Ethernet104|6": { + "scheduler": "scheduler.0" + }, + "Ethernet108|6": { + "scheduler": "scheduler.0" + }, + "Ethernet112|6": { + "scheduler": "scheduler.0" + }, + "Ethernet116|6": { + "scheduler": "scheduler.0" + }, + "Ethernet120|6": { + "scheduler": "scheduler.0" + }, + "Ethernet124|6": { + "scheduler": "scheduler.0" + }, + "Ethernet128|6": { + "scheduler": "scheduler.0" + }, + "Ethernet132|6": { + "scheduler": "scheduler.0" + }, + "Ethernet136|6": { + "scheduler": "scheduler.0" + }, + "Ethernet140|6": { + "scheduler": "scheduler.0" + }, + "Ethernet144|6": { + "scheduler": "scheduler.0" + }, + "Ethernet148|6": { + "scheduler": "scheduler.0" + }, + "Ethernet152|6": { + "scheduler": "scheduler.0" + }, + "Ethernet156|6": { + "scheduler": "scheduler.0" + }, + "Ethernet160|6": { + "scheduler": "scheduler.0" + }, + "Ethernet164|6": { + "scheduler": "scheduler.0" + }, + "Ethernet168|6": { + "scheduler": "scheduler.0" + }, + "Ethernet172|6": { + "scheduler": "scheduler.0" + }, + "Ethernet176|6": { + "scheduler": "scheduler.0" + }, + "Ethernet180|6": { + "scheduler": "scheduler.0" + }, + "Ethernet184|6": { + "scheduler": "scheduler.0" + }, + "Ethernet188|6": { + "scheduler": "scheduler.0" + }, + "Ethernet192|6": { + "scheduler": "scheduler.0" + }, + "Ethernet196|6": { + "scheduler": "scheduler.0" + }, + "Ethernet200|6": { + "scheduler": "scheduler.0" + }, + "Ethernet204|6": { + "scheduler": "scheduler.0" + }, + "Ethernet208|6": { + "scheduler": "scheduler.0" + }, + "Ethernet212|6": { + "scheduler": "scheduler.0" + }, + "Ethernet216|6": { + "scheduler": "scheduler.0" + }, + "Ethernet220|6": { + "scheduler": "scheduler.0" + }, + "Ethernet224|6": { + "scheduler": "scheduler.0" + }, + "Ethernet228|6": { + "scheduler": "scheduler.0" + }, + "Ethernet232|6": { + "scheduler": "scheduler.0" + }, + "Ethernet236|6": { + "scheduler": "scheduler.0" + }, + "Ethernet240|6": { + "scheduler": "scheduler.0" + }, + "Ethernet244|6": { + "scheduler": "scheduler.0" + }, + "Ethernet248|6": { + "scheduler": "scheduler.0" + }, + "Ethernet252|6": { + "scheduler": "scheduler.0" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json index 41f36a273d06..1d8c2dbdfff6 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json @@ -20,7 +20,8 @@ "4": "4", "5": "5", "6": "6", - "7": "7" + "7": "7", + "8": "1" }, "AZURE_TUNNEL": { "0": "0", @@ -30,7 +31,8 @@ "4": "6", "5": "5", "6": "1", - "7": "7" + "7": "7", + "8": "1" } }, "DSCP_TO_TC_MAP": { @@ -68,7 +70,7 @@ "30": "1", "31": "1", "32": "1", - "33": "2", + "33": "8", "34": "1", "35": "1", "36": "1", @@ -134,7 +136,7 @@ "30": "1", "31": "1", "32": "1", - "33": "2", + "33": "8", "34": "1", "35": "1", "36": "1", @@ -171,12 +173,13 @@ "AZURE": { "0": "0", "1": "0", - "2": "0", + "2": "2", "3": "3", "4": "4", "5": "0", - "6": "0", - "7": "7" + "6": "6", + "7": "7", + "8": "0" }, "AZURE_TUNNEL": { "0": "0", @@ -186,19 +189,21 @@ "4": "6", "5": "0", "6": "0", - "7": "0" + "7": "0", + "8": "0" } }, "TC_TO_DSCP_MAP": { "AZURE_TUNNEL": { "0": "8", "1": "0", - "2": "33", + "2": "0", "3": "2", "4": "6", "5": "46", "6": "0", - "7": "48" + "7": "48", + "8": "33" } }, "SCHEDULER": { diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1-remap-disabled.json new file mode 100644 index 000000000000..ae9fa775dc62 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1-remap-disabled.json @@ -0,0 +1,1005 @@ +{ + "TC_TO_PRIORITY_GROUP_MAP": { + "AZURE": { + "0": "0", + "1": "0", + "2": "0", + "3": "3", + "4": "4", + "5": "0", + "6": "0", + "7": "7" + } + }, + "MAP_PFC_PRIORITY_TO_QUEUE": { + "AZURE": { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7" + } + }, + "TC_TO_QUEUE_MAP": { + "AZURE": { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7" + } + }, + "DSCP_TO_TC_MAP": { + "AZURE": { + "0" : "1", + "1" : "1", + "2" : "1", + "3" : "3", + "4" : "4", + "5" : "2", + "6" : "1", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "1", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "6", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" + } + }, + "SCHEDULER": { + "scheduler.0": { + "type" : "DWRR", + "weight": "14" + }, + "scheduler.1": { + "type" : "DWRR", + "weight": "15" + } + }, + "PORT_QOS_MAP": { + "Ethernet0": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet4": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet16": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet20": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet64": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet68": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet80": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet84": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet136": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet144": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet148": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet152": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet156": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet168": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet176": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet180": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet184": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet188": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet200": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet208": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet212": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet216": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet220": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet232": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet240": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet244": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet248": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet252": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + } + }, + "WRED_PROFILE": { + "AZURE_LOSSLESS" : { + "wred_green_enable" : "true", + "wred_yellow_enable" : "true", + "wred_red_enable" : "true", + "ecn" : "ecn_all", + "green_max_threshold" : "2097152", + "green_min_threshold" : "1048576", + "yellow_max_threshold" : "2097152", + "yellow_min_threshold" : "1048576", + "red_max_threshold" : "2097152", + "red_min_threshold" : "1048576", + "green_drop_probability" : "5", + "yellow_drop_probability": "5", + "red_drop_probability" : "5" + } + }, + "QUEUE": { + "Ethernet0|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet4|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet16|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet20|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet64|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet68|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet80|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet84|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet136|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet144|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet148|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet152|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet156|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet168|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet176|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet180|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet184|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet188|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet200|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet208|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet212|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet216|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet220|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet232|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet240|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet244|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet248|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet252|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet0|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet4|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet16|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet20|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet64|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet68|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet80|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet84|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet136|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet144|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet148|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet152|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet156|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet168|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet176|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet180|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet184|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet188|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet200|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet208|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet212|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet216|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet220|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet232|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet240|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet244|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet248|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet252|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet0|0": { + "scheduler": "scheduler.0" + }, + "Ethernet4|0": { + "scheduler": "scheduler.0" + }, + "Ethernet16|0": { + "scheduler": "scheduler.0" + }, + "Ethernet20|0": { + "scheduler": "scheduler.0" + }, + "Ethernet64|0": { + "scheduler": "scheduler.0" + }, + "Ethernet68|0": { + "scheduler": "scheduler.0" + }, + "Ethernet80|0": { + "scheduler": "scheduler.0" + }, + "Ethernet84|0": { + "scheduler": "scheduler.0" + }, + "Ethernet136|0": { + "scheduler": "scheduler.0" + }, + "Ethernet144|0": { + "scheduler": "scheduler.0" + }, + "Ethernet148|0": { + "scheduler": "scheduler.0" + }, + "Ethernet152|0": { + "scheduler": "scheduler.0" + }, + "Ethernet156|0": { + "scheduler": "scheduler.0" + }, + "Ethernet168|0": { + "scheduler": "scheduler.0" + }, + "Ethernet176|0": { + "scheduler": "scheduler.0" + }, + "Ethernet180|0": { + "scheduler": "scheduler.0" + }, + "Ethernet184|0": { + "scheduler": "scheduler.0" + }, + "Ethernet188|0": { + "scheduler": "scheduler.0" + }, + "Ethernet200|0": { + "scheduler": "scheduler.0" + }, + "Ethernet208|0": { + "scheduler": "scheduler.0" + }, + "Ethernet212|0": { + "scheduler": "scheduler.0" + }, + "Ethernet216|0": { + "scheduler": "scheduler.0" + }, + "Ethernet220|0": { + "scheduler": "scheduler.0" + }, + "Ethernet232|0": { + "scheduler": "scheduler.0" + }, + "Ethernet240|0": { + "scheduler": "scheduler.0" + }, + "Ethernet244|0": { + "scheduler": "scheduler.0" + }, + "Ethernet248|0": { + "scheduler": "scheduler.0" + }, + "Ethernet252|0": { + "scheduler": "scheduler.0" + }, + "Ethernet0|1": { + "scheduler": "scheduler.0" + }, + "Ethernet4|1": { + "scheduler": "scheduler.0" + }, + "Ethernet16|1": { + "scheduler": "scheduler.0" + }, + "Ethernet20|1": { + "scheduler": "scheduler.0" + }, + "Ethernet64|1": { + "scheduler": "scheduler.0" + }, + "Ethernet68|1": { + "scheduler": "scheduler.0" + }, + "Ethernet80|1": { + "scheduler": "scheduler.0" + }, + "Ethernet84|1": { + "scheduler": "scheduler.0" + }, + "Ethernet136|1": { + "scheduler": "scheduler.0" + }, + "Ethernet144|1": { + "scheduler": "scheduler.0" + }, + "Ethernet148|1": { + "scheduler": "scheduler.0" + }, + "Ethernet152|1": { + "scheduler": "scheduler.0" + }, + "Ethernet156|1": { + "scheduler": "scheduler.0" + }, + "Ethernet168|1": { + "scheduler": "scheduler.0" + }, + "Ethernet176|1": { + "scheduler": "scheduler.0" + }, + "Ethernet180|1": { + "scheduler": "scheduler.0" + }, + "Ethernet184|1": { + "scheduler": "scheduler.0" + }, + "Ethernet188|1": { + "scheduler": "scheduler.0" + }, + "Ethernet200|1": { + "scheduler": "scheduler.0" + }, + "Ethernet208|1": { + "scheduler": "scheduler.0" + }, + "Ethernet212|1": { + "scheduler": "scheduler.0" + }, + "Ethernet216|1": { + "scheduler": "scheduler.0" + }, + "Ethernet220|1": { + "scheduler": "scheduler.0" + }, + "Ethernet232|1": { + "scheduler": "scheduler.0" + }, + "Ethernet240|1": { + "scheduler": "scheduler.0" + }, + "Ethernet244|1": { + "scheduler": "scheduler.0" + }, + "Ethernet248|1": { + "scheduler": "scheduler.0" + }, + "Ethernet252|1": { + "scheduler": "scheduler.0" + }, + "Ethernet0|2": { + "scheduler": "scheduler.0" + }, + "Ethernet4|2": { + "scheduler": "scheduler.0" + }, + "Ethernet16|2": { + "scheduler": "scheduler.0" + }, + "Ethernet20|2": { + "scheduler": "scheduler.0" + }, + "Ethernet64|2": { + "scheduler": "scheduler.0" + }, + "Ethernet68|2": { + "scheduler": "scheduler.0" + }, + "Ethernet80|2": { + "scheduler": "scheduler.0" + }, + "Ethernet84|2": { + "scheduler": "scheduler.0" + }, + "Ethernet136|2": { + "scheduler": "scheduler.0" + }, + "Ethernet144|2": { + "scheduler": "scheduler.0" + }, + "Ethernet148|2": { + "scheduler": "scheduler.0" + }, + "Ethernet152|2": { + "scheduler": "scheduler.0" + }, + "Ethernet156|2": { + "scheduler": "scheduler.0" + }, + "Ethernet168|2": { + "scheduler": "scheduler.0" + }, + "Ethernet176|2": { + "scheduler": "scheduler.0" + }, + "Ethernet180|2": { + "scheduler": "scheduler.0" + }, + "Ethernet184|2": { + "scheduler": "scheduler.0" + }, + "Ethernet188|2": { + "scheduler": "scheduler.0" + }, + "Ethernet200|2": { + "scheduler": "scheduler.0" + }, + "Ethernet208|2": { + "scheduler": "scheduler.0" + }, + "Ethernet212|2": { + "scheduler": "scheduler.0" + }, + "Ethernet216|2": { + "scheduler": "scheduler.0" + }, + "Ethernet220|2": { + "scheduler": "scheduler.0" + }, + "Ethernet232|2": { + "scheduler": "scheduler.0" + }, + "Ethernet240|2": { + "scheduler": "scheduler.0" + }, + "Ethernet244|2": { + "scheduler": "scheduler.0" + }, + "Ethernet248|2": { + "scheduler": "scheduler.0" + }, + "Ethernet252|2": { + "scheduler": "scheduler.0" + }, + "Ethernet0|5": { + "scheduler": "scheduler.0" + }, + "Ethernet4|5": { + "scheduler": "scheduler.0" + }, + "Ethernet16|5": { + "scheduler": "scheduler.0" + }, + "Ethernet20|5": { + "scheduler": "scheduler.0" + }, + "Ethernet64|5": { + "scheduler": "scheduler.0" + }, + "Ethernet68|5": { + "scheduler": "scheduler.0" + }, + "Ethernet80|5": { + "scheduler": "scheduler.0" + }, + "Ethernet84|5": { + "scheduler": "scheduler.0" + }, + "Ethernet136|5": { + "scheduler": "scheduler.0" + }, + "Ethernet144|5": { + "scheduler": "scheduler.0" + }, + "Ethernet148|5": { + "scheduler": "scheduler.0" + }, + "Ethernet152|5": { + "scheduler": "scheduler.0" + }, + "Ethernet156|5": { + "scheduler": "scheduler.0" + }, + "Ethernet168|5": { + "scheduler": "scheduler.0" + }, + "Ethernet176|5": { + "scheduler": "scheduler.0" + }, + "Ethernet180|5": { + "scheduler": "scheduler.0" + }, + "Ethernet184|5": { + "scheduler": "scheduler.0" + }, + "Ethernet188|5": { + "scheduler": "scheduler.0" + }, + "Ethernet200|5": { + "scheduler": "scheduler.0" + }, + "Ethernet208|5": { + "scheduler": "scheduler.0" + }, + "Ethernet212|5": { + "scheduler": "scheduler.0" + }, + "Ethernet216|5": { + "scheduler": "scheduler.0" + }, + "Ethernet220|5": { + "scheduler": "scheduler.0" + }, + "Ethernet232|5": { + "scheduler": "scheduler.0" + }, + "Ethernet240|5": { + "scheduler": "scheduler.0" + }, + "Ethernet244|5": { + "scheduler": "scheduler.0" + }, + "Ethernet248|5": { + "scheduler": "scheduler.0" + }, + "Ethernet252|5": { + "scheduler": "scheduler.0" + }, + "Ethernet0|6": { + "scheduler": "scheduler.0" + }, + "Ethernet4|6": { + "scheduler": "scheduler.0" + }, + "Ethernet16|6": { + "scheduler": "scheduler.0" + }, + "Ethernet20|6": { + "scheduler": "scheduler.0" + }, + "Ethernet64|6": { + "scheduler": "scheduler.0" + }, + "Ethernet68|6": { + "scheduler": "scheduler.0" + }, + "Ethernet80|6": { + "scheduler": "scheduler.0" + }, + "Ethernet84|6": { + "scheduler": "scheduler.0" + }, + "Ethernet136|6": { + "scheduler": "scheduler.0" + }, + "Ethernet144|6": { + "scheduler": "scheduler.0" + }, + "Ethernet148|6": { + "scheduler": "scheduler.0" + }, + "Ethernet152|6": { + "scheduler": "scheduler.0" + }, + "Ethernet156|6": { + "scheduler": "scheduler.0" + }, + "Ethernet168|6": { + "scheduler": "scheduler.0" + }, + "Ethernet176|6": { + "scheduler": "scheduler.0" + }, + "Ethernet180|6": { + "scheduler": "scheduler.0" + }, + "Ethernet184|6": { + "scheduler": "scheduler.0" + }, + "Ethernet188|6": { + "scheduler": "scheduler.0" + }, + "Ethernet200|6": { + "scheduler": "scheduler.0" + }, + "Ethernet208|6": { + "scheduler": "scheduler.0" + }, + "Ethernet212|6": { + "scheduler": "scheduler.0" + }, + "Ethernet216|6": { + "scheduler": "scheduler.0" + }, + "Ethernet220|6": { + "scheduler": "scheduler.0" + }, + "Ethernet232|6": { + "scheduler": "scheduler.0" + }, + "Ethernet240|6": { + "scheduler": "scheduler.0" + }, + "Ethernet244|6": { + "scheduler": "scheduler.0" + }, + "Ethernet248|6": { + "scheduler": "scheduler.0" + }, + "Ethernet252|6": { + "scheduler": "scheduler.0" + } + } +} diff --git a/src/sonic-config-engine/tests/test_j2files.py b/src/sonic-config-engine/tests/test_j2files.py index af66af8eb59e..e18f0e165eda 100644 --- a/src/sonic-config-engine/tests/test_j2files.py +++ b/src/sonic-config-engine/tests/test_j2files.py @@ -286,6 +286,9 @@ def test_qos_dscp_remapping_render_template(self): return dir_paths = [ + '../../../device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8', + '../../../device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8', + '../../../device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64', '../../../device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8', '../../../device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8', '../../../device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64' @@ -293,12 +296,18 @@ def test_qos_dscp_remapping_render_template(self): sample_outputs = [ 'qos-arista7050cx3-dualtor.json', 'qos-arista7260-dualtor.json', - 'qos-arista7260-t1.json' + 'qos-arista7260-t1.json', + 'qos-arista7050cx3-dualtor-remap-disabled.json', + 'qos-arista7260-dualtor-remap-disabled.json', + 'qos-arista7260-t1-remap-disabled.json' ] sample_minigraph_files = [ 'sample-arista-7050cx3-dualtor-minigraph.xml', 'sample-arista-7260-dualtor-minigraph.xml', - 'sample-arista-7260-t1-minigraph.xml' + 'sample-arista-7260-t1-minigraph.xml', + 'sample-arista-7050cx3-dualtor-minigraph-remap-disabled.xml', + 'sample-arista-7260-dualtor-minigraph-remap-disabled.xml', + 'sample-arista-7260-t1-minigraph-remap-disabled.xml' ] for i, path in enumerate(dir_paths): device_template_path = os.path.join(self.test_dir, path) From af855033ec6ac6c47fee61d338924c2c4794f120 Mon Sep 17 00:00:00 2001 From: "Richard.Yu" Date: Sun, 5 Jun 2022 08:08:36 -0700 Subject: [PATCH 009/259] [Tunnel PFC] Add property for tunnel PFC (#10962) * [Tunnel PFC] Add property for tunnel PFC Replace the config.bcm file with j2 template file - Add 'sai_remap_prio_on_tnl_egress=1' property when device metadata local - Host subtype is 'dualtor' - Change sai.profile foe the new config.bcm.j2 --- ...td3-a7050cx3-32s-32x100G.config.bcm => config.bcm.j2} | 9 +++++++++ .../Arista-7050CX3-32S-C32/sai.profile | 2 +- ...050cx3-32s-48x50G+8x100G.config.bcm => config.bcm.j2} | 9 +++++++++ .../Arista-7050CX3-32S-D48C8/sai.profile | 2 +- .../Arista-7260CX3-C64/config.bcm.j2 | 3 +++ .../Arista-7260CX3-D108C8/config.bcm.j2 | 5 ++++- .../Arista-7260CX3-Q64/config.bcm.j2 | 3 +++ 7 files changed, 30 insertions(+), 3 deletions(-) rename device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/{td3-a7050cx3-32s-32x100G.config.bcm => config.bcm.j2} (97%) rename device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/{td3-a7050cx3-32s-48x50G+8x100G.config.bcm => config.bcm.j2} (97%) diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/td3-a7050cx3-32s-32x100G.config.bcm b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/config.bcm.j2 similarity index 97% rename from device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/td3-a7050cx3-32s-32x100G.config.bcm rename to device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/config.bcm.j2 index 3b37d661f403..89a55175edc8 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/td3-a7050cx3-32s-32x100G.config.bcm +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/config.bcm.j2 @@ -1,6 +1,15 @@ +{# Construct config.bcm to include additional soc properties per specific device metadata requirement #} +{%- set map_prio = '' -%} +{%- if DEVICE_METADATA is defined and DEVICE_METADATA['localhost'] is defined and DEVICE_METADATA['localhost']['subtype'] is defined -%} +{%- set switch_subtype = DEVICE_METADATA['localhost']['subtype'] -%} +{%- if 'dualtor' in switch_subtype.lower() %} +{%- set map_prio = 'sai_remap_prio_on_tnl_egress=1' -%} +{%- endif %} +{%- endif %} sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ l3_alpm_hit_skip=1 sai_adjust_acl_drop_in_rx_drop=1 +{{ map_prio }} host_as_route_disable=1 use_all_splithorizon_groups=1 riot_enable=1 diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/sai.profile b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/sai.profile index 7d96f190de73..5163d6140f0e 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/sai.profile +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/sai.profile @@ -1,2 +1,2 @@ -SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td3-a7050cx3-32s-32x100G.config.bcm +SAI_INIT_CONFIG_FILE=/etc/sai.d/config.bcm SAI_NUM_ECMP_MEMBERS=64 diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/td3-a7050cx3-32s-48x50G+8x100G.config.bcm b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/config.bcm.j2 similarity index 97% rename from device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/td3-a7050cx3-32s-48x50G+8x100G.config.bcm rename to device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/config.bcm.j2 index 267b3bb81a9a..9f523e506660 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/td3-a7050cx3-32s-48x50G+8x100G.config.bcm +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/config.bcm.j2 @@ -1,6 +1,15 @@ +{# Construct config.bcm to include additional soc properties per specific device metadata requirement #} +{%- set map_prio = '' -%} +{%- if DEVICE_METADATA is defined and DEVICE_METADATA['localhost'] is defined and DEVICE_METADATA['localhost']['subtype'] is defined -%} +{%- set switch_subtype = DEVICE_METADATA['localhost']['subtype'] -%} +{%- if 'dualtor' in switch_subtype.lower() %} +{%- set map_prio = 'sai_remap_prio_on_tnl_egress=1' -%} +{%- endif %} +{%- endif %} sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ l3_alpm_hit_skip=1 sai_adjust_acl_drop_in_rx_drop=1 +{{ map_prio }} host_as_route_disable=1 use_all_splithorizon_groups=1 riot_enable=1 diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/sai.profile b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/sai.profile index 1865041f8d9f..5163d6140f0e 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/sai.profile +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/sai.profile @@ -1,2 +1,2 @@ -SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td3-a7050cx3-32s-48x50G+8x100G.config.bcm +SAI_INIT_CONFIG_FILE=/etc/sai.d/config.bcm SAI_NUM_ECMP_MEMBERS=64 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/config.bcm.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/config.bcm.j2 index db5b2562cca2..90d57545c099 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/config.bcm.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/config.bcm.j2 @@ -1,6 +1,7 @@ {# Construct config.bcm to include additional soc properties per specific device metadata requirement #} {%- set mmu_sock = 'mmu_init_config="MSFT-TH2-Tier1"' -%} {%- set IPinIP_sock = '' -%} +{%- set map_prio = '' -%} {%- if DEVICE_METADATA is defined and DEVICE_METADATA['localhost'] is defined -%} {%- if DEVICE_METADATA['localhost']['type'] is defined -%} {%- set switch_role = DEVICE_METADATA['localhost']['type'] -%} @@ -15,6 +16,7 @@ sai_tunnel_underlay_route_mode=1 host_as_route_disable=1 l3_ecmp_levels=2' -%} +{%- set map_prio = 'sai_remap_prio_on_tnl_egress=1' -%} {%- endif %} {%- endif %} {%- endif %} @@ -22,6 +24,7 @@ l3_alpm_hit_skip=1 sai_adjust_acl_drop_in_rx_drop=1 +{{ map_prio }} PHY_AN_ALLOW_PLL_CHANGE=1 arl_clean_timeout_usec=15000000 asf_mem_profile=2 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 index 70512203f206..145426e05915 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 @@ -1,17 +1,20 @@ {# Construct config.bcm to include additional soc properties per specific device metadata requirement #} {%- set IPinIP_sock = '' -%} +{%- set map_prio = '' -%} {%- if DEVICE_METADATA is defined and DEVICE_METADATA['localhost'] is defined and DEVICE_METADATA['localhost']['subtype'] is defined -%} {%- set switch_subtype = DEVICE_METADATA['localhost']['subtype'] -%} {%- if 'dualtor' in switch_subtype.lower() %} {%- set IPinIP_sock = 'sai_tunnel_support=1 sai_tunnel_underlay_route_mode=1 host_as_route_disable=1 - l3_ecmp_levels=2' -%} + l3_ecmp_levels=2' -%} -%} +{%- set map_prio = 'sai_remap_prio_on_tnl_egress=1' -%} {%- endif %} {%- endif %} {# The following is the common soc properties that used to be named "th2-a7260cx3-64-112x50G+8x100G.config.bcm" #} l3_alpm_hit_skip=1 sai_adjust_acl_drop_in_rx_drop=1 +{{ map_prio }} PHY_AN_ALLOW_PLL_CHANGE=1 arl_clean_timeout_usec=15000000 asf_mem_profile=2 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/config.bcm.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/config.bcm.j2 index ce8efa8572b5..78194a75830e 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/config.bcm.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/config.bcm.j2 @@ -1,6 +1,7 @@ {# Construct config.bcm to include additional soc properties per specific device metadata requirement #} {%- set mmu_sock = 'mmu_init_config="MSFT-TH2-Tier1"' -%} {%- set IPinIP_sock = '' -%} +{%- set map_prio = '' -%} {%- if DEVICE_METADATA is defined and DEVICE_METADATA['localhost'] is defined -%} {%- if DEVICE_METADATA['localhost']['type'] is defined -%} {%- set switch_role = DEVICE_METADATA['localhost']['type'] -%} @@ -15,12 +16,14 @@ sai_tunnel_underlay_route_mode=1 host_as_route_disable=1 l3_ecmp_levels=2' -%} +{%- set map_prio = 'sai_remap_prio_on_tnl_egress=1' -%} {%- endif %} {%- endif %} {%- endif %} {# The following is the common soc properties that used to be named "th2-a7260cx3-64-64x40G.config.bcm" #} l3_alpm_hit_skip=1 sai_adjust_acl_drop_in_rx_drop=1 +{{ map_prio }} PHY_AN_ALLOW_PLL_CHANGE=1 arl_clean_timeout_usec=15000000 asf_mem_profile=2 From dbb4a980469340fbb2830b5623df0b17001349d6 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Sun, 5 Jun 2022 08:23:02 -0700 Subject: [PATCH 010/259] [pr test] increase T1-lag PR test timeout to 5 hours (#11029) Why I did it Some PR test are timing out on T1-lag kvm test. How I did it Increase the timeout to 5 hours. How to verify it Test on this PR. Signed-off-by: Ying Xie ying.xie@microsoft.com --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 9c65f660af3e..92cc0ae4038b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -184,7 +184,7 @@ stages: - job: pool: sonictest-t1-lag displayName: "kvmtest-t1-lag" - timeoutInMinutes: 240 + timeoutInMinutes: 300 steps: - template: .azure-pipelines/run-test-template.yml From f6f0aaaad8a6cfca5e30e64807af0bb9820cddf6 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Sun, 5 Jun 2022 08:34:33 -0700 Subject: [PATCH 011/259] [202205][linkmgrd] advance submodule head (#11033) linkmgrd: * d27ca81 2022-06-05 | Separate I2C mux state probing and gRPC forwarding state probing (#86) (HEAD -> 202205) [Jing Zhang] * 9d7d301 2022-06-01 | Revert "Update log level for mux probing and mux state chance (#23)" (#85) [Jing Zhang] * 60d3d77 2022-06-05 | Fix peer mux wait back off factor (#84) [Longxiang Lyu] Signed-off-by: Ying Xie --- src/linkmgrd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/linkmgrd b/src/linkmgrd index 3c2b54600b2b..d27ca81ec207 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit 3c2b54600b2bc3f2f710caddeec5816ec3657a0b +Subproject commit d27ca81ec207be6767ea38cfcf3f181dcf889714 From 1c2e361080bb3703b7ba8f525a7b772c105ec04a Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Tue, 7 Jun 2022 10:01:24 +0800 Subject: [PATCH 012/259] [ci/build]: Upgrade SONiC package versions (#11048) Upgrade SONiC Versions Co-authored-by: mssonicbld --- .../versions-deb-bullseye | 1 + .../build-sonic-slave-bullseye/versions-git | 4 +- .../versions-deb-buster | 5 + .../build-sonic-slave-buster/versions-py3 | 25 + files/build/versions/default/versions-docker | 18 +- files/build/versions/default/versions-git | 10 +- files/build/versions/default/versions-web | 14 + .../versions-py3 | 2 +- .../versions-py3 | 2 +- .../versions-deb-buster | 22 + .../versions-deb-buster | 4 + .../docker-ptf-sonic/versions-deb-buster | 490 ++++++++++++++++++ .../dockers/docker-ptf-sonic/versions-py2 | 69 +++ .../dockers/docker-ptf-sonic/versions-py3 | 30 ++ .../docker-sonic-vs-sonic/versions-deb-buster | 215 ++++++++ .../docker-sonic-vs-sonic/versions-py2 | 13 + .../docker-sonic-vs-sonic/versions-py3 | 34 ++ .../versions-deb-buster | 71 +++ .../docker-syncd-bfn-rpc-sonic/versions-py2 | 5 + .../versions-deb-buster | 25 + .../versions-deb-buster | 18 + .../versions-deb-buster | 78 +++ .../versions-py2 | 5 + .../versions-deb-buster | 6 + .../versions-deb-buster-arm64 | 4 - .../versions-deb-buster | 21 + .../docker-syncd-vs-sonic/versions-deb-buster | 7 + .../versions-deb-bullseye | 7 - .../versions-deb-bullseye-arm64 | 8 +- .../versions-deb-bullseye-armhf | 6 - .../dockers/sonic-slave-bullseye/versions-git | 2 +- .../dockers/sonic-slave-bullseye/versions-py3 | 4 +- .../sonic-slave-buster/versions-deb-buster | 4 - .../dockers/sonic-slave-buster/versions-git | 2 +- .../dockers/sonic-slave-buster/versions-py3 | 4 +- .../sonic-slave-stretch/versions-deb-stretch | 1 - .../dockers/sonic-slave-stretch/versions-git | 2 +- .../versions/host-image/versions-deb-bullseye | 1 + files/build/versions/host-image/versions-py3 | 4 +- 39 files changed, 1190 insertions(+), 53 deletions(-) create mode 100644 files/build/versions/dockers/docker-gbsyncd-vs-dbg-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-gbsyncd-vs-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-ptf-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-ptf-sonic/versions-py2 create mode 100644 files/build/versions/dockers/docker-ptf-sonic/versions-py3 create mode 100644 files/build/versions/dockers/docker-sonic-vs-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-sonic-vs-sonic/versions-py2 create mode 100644 files/build/versions/dockers/docker-sonic-vs-sonic/versions-py3 create mode 100644 files/build/versions/dockers/docker-syncd-bfn-rpc-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-bfn-rpc-sonic/versions-py2 create mode 100644 files/build/versions/dockers/docker-syncd-bfn-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-centec-dbg-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-centec-rpc-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-centec-rpc-sonic/versions-py2 create mode 100644 files/build/versions/dockers/docker-syncd-centec-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-vs-dbg-sonic/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-vs-sonic/versions-deb-buster diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye index 704efe9b7884..be1f76de9fc3 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye @@ -36,6 +36,7 @@ linux-headers-5.10.0-12-2-amd64==5.10.103-1 linux-headers-5.10.0-12-2-common==5.10.103-1 lm-sensors==1:3.6.0-7 mft==4.20.0-34 +net-tools==1.60+git20181103.0eebece-1 python-thrift==0.11.0-4 python3-swsscommon==1.0.0 python3-yang==1.0.73 diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-git b/files/build/versions/build/build-sonic-slave-bullseye/versions-git index e4392800ebd5..9640d305c516 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-git +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-git @@ -2,13 +2,13 @@ https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b https://github.com/flashrom/flashrom.git==9ae0463feeff61bfec90fcdb85213e3114873ad0 -https://github.com/FreeRADIUS/freeradius-server.git==3317d67e2cc3b1f55fd8384ddddb8d80fa90db52 +https://github.com/FreeRADIUS/freeradius-server.git==07901163a18362a7e3475e0cfdccf92e7f39276b https://github.com/FreeRADIUS/pam_radius.git==5e67868520e90a489626928f28c0befa531bf7d2 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 https://github.com/thom311/libnl==44988e648cd5c9f912148e8b138776064797f49d https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b61368d4c5 -https://salsa.debian.org/kernel-team/ethtool/==0d5304a5be80cc74bed8ed78002bf5df0d49f412 +https://salsa.debian.org/kernel-team/ethtool/==38a3cce26a7fa6eb74228e3501b7ed19dced6d4b https://salsa.debian.org/kernel-team/initramfs-tools.git==9b3a06991f9f4a96efbd90faa2a096f7e059173f https://salsa.debian.org/sk-guest/monit.git==c9da7ebb1f35dfba17b50b5969a6e75e29cbec0d https://salsa.debian.org/ssh-team/openssh.git==de790f931452a2dcb4490d074d5a16ab8456a523 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster index dba39dbee098..20db24042380 100644 --- a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster +++ b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster @@ -1,3 +1,4 @@ +bfnplatform==1.0.0 libhiredis-dev==0.14.0-3~bpo9+1 libhiredis0.14==0.14.0-3~bpo9+1 libnl-cli-3-200==3.5.0-1 @@ -12,6 +13,7 @@ libsairedis==1.0.0 libsairedis-dev==1.0.0 libsaithrift-dev==0.9.4 libsaivs==1.0.0 +libsaivs-dev==1.0.0 libswsscommon==1.0.0 libswsscommon-dev==1.0.0 libteam-dev==1.30-1 @@ -20,6 +22,7 @@ libteam5==1.30-1 libteamdctl0==1.30-1 libthrift-0.11.0==0.11.0-4 libthrift-dev==0.11.0-4 +libthrift0==0.14.1 libyang==1.0.73 libyang-cpp==1.0.73 libyang-dev==1.0.73 @@ -27,10 +30,12 @@ lldpd==1.0.4-1 python-swsscommon==1.0.0 python-thrift==0.11.0-4 python3-swsscommon==1.0.0 +python3-thrift==0.14.1 python3-yang==1.0.73 sonic-mgmt-common==1.0.0 sonic-mgmt-common-codegen==1.0.0 sonic-mgmt-framework==1.0-01 swss==1.0.0 syncd==1.0.0 +syncd-vs==1.0.0 thrift-compiler==0.11.0-4 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-py3 b/files/build/versions/build/build-sonic-slave-buster/versions-py3 index 897b1f4831b3..da1b2e67601c 100644 --- a/files/build/versions/build/build-sonic-slave-buster/versions-py3 +++ b/files/build/versions/build/build-sonic-slave-buster/versions-py3 @@ -1,8 +1,33 @@ +blessed==1.19.1 +charset-normalizer==2.0.12 +click==7.0 +click-log==0.4.0 +colorful==0.5.4 +dbus-python==1.2.18 +docker==5.0.3 +docker-image-py==0.1.12 +enlighten==1.10.2 +filelock==3.7.1 ijson==2.6.1 ipaddress==1.0.23 jsondiff==2.0.0 +jsonpatch==1.32 +jsonpointer==2.3 natsort==6.2.1 netaddr==0.8.0 +netifaces==0.11.0 +prefixed==0.3.2 +prettyprinter==0.18.0 psutil==5.9.1 +pycairo==1.21.0 +pyroute2==0.5.19 python-arptable==0.0.2 +semantic-version==2.10.0 +systemd-python==234 +tabulate==0.8.2 +thrift==0.14.1 +toposort==1.6 +wcwidth==0.2.5 +websocket-client==1.3.2 +www-authenticate==0.9.2 xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/default/versions-docker b/files/build/versions/default/versions-docker index bd8d5e5a8f09..90bba2e9b189 100644 --- a/files/build/versions/default/versions-docker +++ b/files/build/versions/default/versions-docker @@ -1,15 +1,15 @@ amd64:amd64/debian:bullseye==sha256:f0203caaadfa5e8191aa8d75ad0b36c95c72543c33f76e48f0a4d9dec22d5a63 amd64:amd64/debian:buster==sha256:ff2b512c66a78380275b217fd68e81623fc899a7bf9be9bfe16d98188183fcd3 -amd64:debian:bullseye==sha256:b42494c466d101bf06038e959e2e5acd227e1251987e79528e7d8b1f4040deaf -amd64:debian:buster==sha256:d97fcaf659ba307d72b8d0fea5d0bae435247490046e7c0eca17c52fc66a53ca -amd64:debian:stretch==sha256:46b9515d5b9080939a3deb88f063a3966d23bac350affdd30520f09ec678deee +amd64:debian:bullseye==sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510 +amd64:debian:buster==sha256:e5b41ae2b4cf0d04b80cd2f89724e9cfc09e334ac64f188b9808929c748af526 +amd64:debian:stretch==sha256:22cb208880101b9a665332a9360ba4c5c021e3ed2f791638369e9a9418dac981 arm64:arm64v8/debian:bullseye==sha256:1623b714f66926243b9b946d59d200082a1b86043169f4d6602b6e64bc20a38a arm64:arm64v8/debian:buster==sha256:68f1188b21bf0b7fe9c92f3a91262d3093aafe2de76adc7c52012a16960048fc -arm64:debian:bullseye==sha256:b42494c466d101bf06038e959e2e5acd227e1251987e79528e7d8b1f4040deaf -arm64:debian:buster==sha256:d97fcaf659ba307d72b8d0fea5d0bae435247490046e7c0eca17c52fc66a53ca -arm64:debian:stretch==sha256:46b9515d5b9080939a3deb88f063a3966d23bac350affdd30520f09ec678deee +arm64:debian:bullseye==sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510 +arm64:debian:buster==sha256:e5b41ae2b4cf0d04b80cd2f89724e9cfc09e334ac64f188b9808929c748af526 +arm64:debian:stretch==sha256:22cb208880101b9a665332a9360ba4c5c021e3ed2f791638369e9a9418dac981 armhf:arm32v7/debian:bullseye==sha256:49ac40f7de436345dae5f19abaf263bc38429d6262703d3af7ae9c00042e41a7 armhf:arm32v7/debian:buster==sha256:426a61780c005de09eb9c3a08e9bcf292c95bd84514cf2fd1a63e2494bfea194 -armhf:debian:bullseye==sha256:b42494c466d101bf06038e959e2e5acd227e1251987e79528e7d8b1f4040deaf -armhf:debian:buster==sha256:d97fcaf659ba307d72b8d0fea5d0bae435247490046e7c0eca17c52fc66a53ca -armhf:debian:stretch==sha256:46b9515d5b9080939a3deb88f063a3966d23bac350affdd30520f09ec678deee \ No newline at end of file +armhf:debian:bullseye==sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510 +armhf:debian:buster==sha256:e5b41ae2b4cf0d04b80cd2f89724e9cfc09e334ac64f188b9808929c748af526 +armhf:debian:stretch==sha256:22cb208880101b9a665332a9360ba4c5c021e3ed2f791638369e9a9418dac981 \ No newline at end of file diff --git a/files/build/versions/default/versions-git b/files/build/versions/default/versions-git index dbf73e118a00..a60c0df784b1 100644 --- a/files/build/versions/default/versions-git +++ b/files/build/versions/default/versions-git @@ -1,19 +1,23 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==8f1fea025d78c26046d3135e026f097dc2022698 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==89b222dba5ea3fd91598e821c0b82797f2e2fa3c https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b -https://github.com/FreeRADIUS/freeradius-server.git==3317d67e2cc3b1f55fd8384ddddb8d80fa90db52 +https://github.com/dyninc/OpenBFDD.git==e35f43ad8d2b3f084e96a84c392528a90d05a287 +https://github.com/flashrom/flashrom.git==9ae0463feeff61bfec90fcdb85213e3114873ad0 +https://github.com/FreeRADIUS/freeradius-server.git==07901163a18362a7e3475e0cfdccf92e7f39276b https://github.com/FreeRADIUS/pam_radius.git==5e67868520e90a489626928f28c0befa531bf7d2 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 +https://github.com/lguohan/gnxi.git==53901aba9ead82be21f1408a601b6266dcf1e3e4 https://github.com/Marvell-switching/mrvl-prestera.git==9dbae444204a2c27b33be698ce497d55926b8893 https://github.com/Mellanox/libpsample.git==62bb27d9a49424e45191eee81df7ce0d8c74e774 +https://github.com/p4lang/scapy-vxlan.git==85ffe83da156568ee47a0750f638227e6e1d7479 https://github.com/sflow/host-sflow==2b8771aa7284d3b34cfc43fccba67649d30d0c64 https://github.com/sflow/sflowtool==4be2a17b36a3b9796c280b117b8b786323a84ae8 https://github.com/thom311/libnl==44988e648cd5c9f912148e8b138776064797f49d https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b61368d4c5 -https://salsa.debian.org/kernel-team/ethtool/==0d5304a5be80cc74bed8ed78002bf5df0d49f412 +https://salsa.debian.org/kernel-team/ethtool/==38a3cce26a7fa6eb74228e3501b7ed19dced6d4b https://salsa.debian.org/kernel-team/initramfs-tools.git==9b3a06991f9f4a96efbd90faa2a096f7e059173f https://salsa.debian.org/sk-guest/monit.git==c9da7ebb1f35dfba17b50b5969a6e75e29cbec0d https://salsa.debian.org/ssh-team/openssh.git==de790f931452a2dcb4490d074d5a16ab8456a523 \ No newline at end of file diff --git a/files/build/versions/default/versions-web b/files/build/versions/default/versions-web index 36e024149a78..34b541ff4012 100644 --- a/files/build/versions/default/versions-web +++ b/files/build/versions/default/versions-web @@ -4,6 +4,9 @@ http://deb.debian.org/debian/pool/main/d/doxygen/doxygen_1.8.13.orig.tar.gz==0fa http://deb.debian.org/debian/pool/main/d/doxygen/doxygen_1.9.1-2.debian.tar.xz==c384375e2eb13c5ee58f34a91f06320e http://deb.debian.org/debian/pool/main/d/doxygen/doxygen_1.9.1-2.dsc==cc5e340bf811697859b558aec4c69b45 http://deb.debian.org/debian/pool/main/d/doxygen/doxygen_1.9.1.orig.tar.gz==04f2f374392cf0ee36503ea8a07f07cd +http://deb.debian.org/debian/pool/main/i/iproute2/iproute2_5.10.0-4~bpo10+1.debian.tar.xz==4fcbfdd68253864ebbfc11c3fb1480c6 +http://deb.debian.org/debian/pool/main/i/iproute2/iproute2_5.10.0-4~bpo10+1.dsc==81cf5b863f12de38a48b5a3b602cfff4 +http://deb.debian.org/debian/pool/main/i/iproute2/iproute2_5.10.0.orig.tar.xz==f36f0a0612f7fd565680e918d692900d http://deb.debian.org/debian/pool/main/i/iptables/iptables_1.8.2-4.debian.tar.xz==c27e499611c48ba307792518d29cdcc7 http://deb.debian.org/debian/pool/main/i/iptables/iptables_1.8.2-4.dsc==d9572a9f48c88293341681601a7b18c5 http://deb.debian.org/debian/pool/main/i/iptables/iptables_1.8.2.orig.tar.bz2==944558e88ddcc3b9b0d9550070fa3599 @@ -20,7 +23,9 @@ http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0-3~bpo9+1.debian http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0-3~bpo9+1.dsc==be4ce11ef67268e59e4b6be587327c40 http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0.orig.tar.gz==6d565680a4af0d2e261abbc3e3431b2b http://www.mellanox.com/downloads/MFT/mft-4.20.0-34-x86_64-deb.tgz==87ad9025d4fc0c3abb9272c3e93af496 +https://archive.apache.org/dist/thrift/0.14.1/thrift-0.14.1.tar.gz==c64434548438df2cb1e53fb27c600e85 https://bootstrap.pypa.io/pip/2.7/get-pip.py==60e8267eb1b7bc71dc4843eb7bd294d3 +https://chrome-infra-packages.appspot.com/client?platform=linux-amd64&version=git_revision:673f5ee1931bc72a2b3d4ac712a7f7bc541f089b==e813a6e475d01264a4b855c13ff52805 https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.dsc==de6e9967da7c4992ffd1a72b815994f7 https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.tar.gz==b959c7ac01839e9b96a733d27b19e59e https://deb.debian.org/debian/pool/main/k/kdump-tools/kdump-tools_1.6.8.4.dsc==f96a03bb090ab03d484e5d232161fafe @@ -32,8 +37,13 @@ https://deb.nodesource.com/node_14.x/dists/buster/Release==6b181b4ad151ab26c7c77 https://deb.nodesource.com/setup_10.x==6742c0148159980e8f6e886df1f8bbe1 https://deb.nodesource.com/setup_14.x==3fb63a2bd38414a2b249fa9b3dbbbc3e https://download.docker.com/linux/debian/gpg==1afae06b34a13c1b3d9cb61a26285a15 +https://github.com/barefootnetworks/sonic-release-pkgs/raw/dev/bfnplatform_20220408_sai_1.9.1_deb10.deb==890a53ca1374dfcf8c12091d74fd2ef8 +https://github.com/barefootnetworks/sonic-release-pkgs/raw/dev/bfnsdk_20220408_sai_1.9.1_deb10.deb==a54c351ee84ddb63837085272a1c4eae https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==4ea37edbea9fc2b88bdb5bbc2855be04 https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-arm64==913165e7536ebd338a3614b27e480d87 +https://github.com/CentecNetworks/sonic-binaries/raw/master/amd64/sai/libsai_1.9.1-0_amd64.deb==08e1a82bd42ca1cba08fd6deec43c02a +https://github.com/CentecNetworks/sonic-binaries/raw/master/amd64/third_party/advantech/_Susi4.so==5e1b8daef522c9da00af400abe25810b +https://github.com/CentecNetworks/sonic-binaries/raw/master/amd64/third_party/advantech/libSUSI-4.00.so.1==393a94b0abba146777e276e1febe0cb0 https://github.com/CentecNetworks/sonic-binaries/raw/master/arm64/sai/libsai_1.9.1-0_arm64.deb==c354c766cc763a5af621a88637b9e126 https://github.com/CumulusNetworks/ifupdown2/archive/3.0.0-1.tar.gz==755459b3a58fbc11625336846cea7420 https://github.com/Marvell-switching/sonic-marvell-binaries/raw/master/armhf/sai-plugin/mrvllibsai_1.9.1-2_armhf.deb==41989b6336eaca539d81981ce82df2d4 @@ -68,6 +78,10 @@ https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1.orig.ta https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0-4.debian.tar.xz?sv=2015-04-05&sr=b&sig=dj9uJ5YjUNupcmuxSX6%2F5IS9NqaGAyM9iF2h%2F2rROZA%3D&se=2156-02-02T17%3A19%3A34Z&sp=r==52ad383b97ad051f4d1d25b54aaad569 https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0-4.dsc?sv=2015-04-05&sr=b&sig=pWfg55owvQ2jZtZ6ylHp0OP8uZyfc9sxO6H%2BP4Ez7w4%3D&se=2156-02-02T17%3A20%3A05Z&sp=r==6917fe7b3ada9313be94713dd50fee7b https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0.orig.tar.gz?sv=2015-04-05&sr=b&sig=%2BrAjWESiSNRCMN7NGqEqVGceLefpwwS%2FWPKEfJpPLSQ%3D&se=2156-02-02T17%3A17%3A20Z&sp=r==0be59730ebce071eceaf6bfdb8d3a20e +https://sonicstorage.blob.core.windows.net/packages/onie/onie-recovery-x86_64-kvm_x86_64-r0.iso?sv=2015-04-05&sr=b&sig=XMAk1cttBFM369CMbihe5oZgXwe4uaDVfwg4CTLT%2F5U%3D&se=2155-10-13T10%3A40%3A13Z&sp=r==54e11e450a461b1f4ae39c3ce3f15eff +https://sonicstorage.blob.core.windows.net/packages/onie/onie-recovery-x86_64-kvm_x86_64_4_asic-r0.iso?sv=2020-04-08&st=2021-08-27T22%3A41%3A07Z&se=2030-08-28T22%3A41%3A00Z&sr=b&sp=r&sig=zyaX7rHnE5jXldpgrnWq1nvsfmMTrVCSuESZqrIxDLc%3D==1d8b8d3fa37f842d0184b5205be22be9 +https://sonicstorage.blob.core.windows.net/packages/onie/onie-recovery-x86_64-kvm_x86_64_6_asic-r0.iso?sv=2020-04-08&st=2021-08-27T22%3A42%3A24Z&se=2030-08-28T22%3A42%3A00Z&sr=b&sp=r&sig=RqbtHJt8Hvy7j78jt3TgXo27T7zjdUDfSxqmOID1YUU%3D==58494305d4ac201daedf9364a1018a1b +https://sonicstorage.blob.core.windows.net/packages/redis/redis-server_6.0.6-1~bpo10+1_amd64.deb?sv=2015-04-05&sr=b&sig=2Ketg7BmkZEaTxR%2FgvAFVmhjn7ywdmkc7l2T2rsL57o%3D&se=2030-09-06T19%3A45%3A20Z&sp=r==09af97c096f4c854d238f91614a3415b https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1_bpo10+1_arm64.deb?sv=2015-04-05&sr=b&sig=GbkJV2wWln3hoz27zKi5erdk3NDKrAFrQriA97bcRCY%3D&se=2030-10-24T04%3A22%3A21Z&sp=r==282b4766cc9ac7d8bb70622bd69d9f5c https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1_bpo10+1_armhf.deb?sv=2015-04-05&sr=b&sig=67vHAMxsl%2BS3X1KsqhdYhakJkGdg5FKSPgU8kUiw4as%3D&se=2030-10-24T04%3A22%3A40Z&sp=r==62f287117afab6caaec564232ebbb5de https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1~bpo10+1_amd64.deb?sv=2015-04-05&sr=b&sig=73zbmjkf3pi%2Bn0R8Hy7CWT2EUvOAyzM5aLYJWCLySGM%3D&se=2030-09-06T19%3A44%3A59Z&sp=r==2d58c3c3358290c04d5e0ba70f297f18 diff --git a/files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-py3 b/files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-py3 index bb197b61f1bb..b376f6857364 100644 --- a/files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-py3 +++ b/files/build/versions/dockers/docker-config-engine-bullseye-sonic/versions-py3 @@ -10,6 +10,6 @@ pyangbind==0.8.1 pyyaml==5.4.1 redis==3.5.3 redis-dump-load==1.1 -regex==2022.4.24 +regex==2022.6.2 six==1.16.0 xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-buster-sonic/versions-py3 b/files/build/versions/dockers/docker-config-engine-buster-sonic/versions-py3 index bb197b61f1bb..b376f6857364 100644 --- a/files/build/versions/dockers/docker-config-engine-buster-sonic/versions-py3 +++ b/files/build/versions/dockers/docker-config-engine-buster-sonic/versions-py3 @@ -10,6 +10,6 @@ pyangbind==0.8.1 pyyaml==5.4.1 redis==3.5.3 redis-dump-load==1.1 -regex==2022.4.24 +regex==2022.6.2 six==1.16.0 xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-gbsyncd-vs-dbg-sonic/versions-deb-buster b/files/build/versions/dockers/docker-gbsyncd-vs-dbg-sonic/versions-deb-buster new file mode 100644 index 000000000000..2a34f929c434 --- /dev/null +++ b/files/build/versions/dockers/docker-gbsyncd-vs-dbg-sonic/versions-deb-buster @@ -0,0 +1,22 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libsaimetadata-dbg==1.0.0 +libsairedis-dbg==1.0.0 +libsaivs-dbg==1.0.0 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +syncd-vs-dbg==1.0.0 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-gbsyncd-vs-sonic/versions-deb-buster b/files/build/versions/dockers/docker-gbsyncd-vs-sonic/versions-deb-buster new file mode 100644 index 000000000000..cdeca7d09f45 --- /dev/null +++ b/files/build/versions/dockers/docker-gbsyncd-vs-sonic/versions-deb-buster @@ -0,0 +1,4 @@ +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libsaivs==1.0.0 +syncd-vs==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-ptf-sonic/versions-deb-buster b/files/build/versions/dockers/docker-ptf-sonic/versions-deb-buster new file mode 100644 index 000000000000..1af060040488 --- /dev/null +++ b/files/build/versions/dockers/docker-ptf-sonic/versions-deb-buster @@ -0,0 +1,490 @@ +arping==2.19-6 +autoconf==2.69-11 +automake==1:1.16.1-4 +autotools-dev==20180224.1 +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +blt==2.5.3+dfsg-4 +bridge-utils==1.6-2 +bsd-mailx==8.1.2-0.20180807cvs-1 +build-essential==12.6 +bzip2==1.0.6-9.2~deb10u1 +ca-certificates==20200601~deb10u2 +cmake==3.13.4-1 +cmake-data==3.13.4-1 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +cron==3.0pl1-134+deb10u1 +curl==7.64.0-4+deb10u2 +dbus==1.12.20-0+deb10u1 +dh-python==3.20190308 +dirmngr==2.2.12-1+deb10u1 +dmsetup==2:1.02.155-3 +dpkg-dev==1.19.8 +ethtool==1:4.19-1 +exim4-base==4.92-8+deb10u6 +exim4-config==4.92-8+deb10u6 +exim4-daemon-light==4.92-8+deb10u6 +fakeroot==1.23-1 +file==1:5.35-4+deb10u2 +fontconfig==2.13.1-2 +fontconfig-config==2.13.1-2 +fonts-droid-fallback==1:6.0.1r16-1.1 +fonts-liberation==1:1.07.4-9 +fonts-lmodern==2.004.5-6 +fonts-lyx==2.3.2-1 +fonts-noto-mono==20181227-1 +g++==4:8.3.0-1 +g++-8==8.3.0-6 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +gdb==8.2.1-2+b3 +gir1.2-glib-2.0==1.58.3-2 +git==1:2.20.1-2+deb10u3 +git-man==1:2.20.1-2+deb10u3 +gnupg==2.2.12-1+deb10u1 +gnupg-l10n==2.2.12-1+deb10u1 +gnupg-utils==2.2.12-1+deb10u1 +gpg==2.2.12-1+deb10u1 +gpg-agent==2.2.12-1+deb10u1 +gpg-wks-client==2.2.12-1+deb10u1 +gpg-wks-server==2.2.12-1+deb10u1 +gpgconf==2.2.12-1+deb10u1 +gpgsm==2.2.12-1+deb10u1 +graphviz==2.40.1-6+deb10u1 +hping3==3.a2.ds2-7 +ipython3==5.8.0-1+deb10u1 +javascript-common==11 +krb5-locales==1.17-3+deb10u3 +less==487-0.1+b1 +libalgorithm-diff-perl==1.19.03-2 +libalgorithm-diff-xs-perl==0.04-5+b1 +libalgorithm-merge-perl==0.08-3 +libapparmor1==2.13.2-10 +libarchive13==3.3.3-4+deb10u1 +libargon2-1==0~20171227-0.2 +libasan5==8.3.0-6 +libassuan0==2.5.2-1 +libatomic1==8.3.0-6 +libauthen-sasl-perl==2.1600-1 +libavahi-client3==0.7-4+deb10u1 +libavahi-common-data==0.7-4+deb10u1 +libavahi-common3==0.7-4+deb10u1 +libbabeltrace1==1.5.6-2+deb10u1 +libbinutils==2.31.1-16 +libblas3==3.8.0-2 +libboost-atomic1.71.0==1.71.0-6~bpo10+1 +libbrotli1==1.0.7-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libc-dev-bin==2.28-10+deb10u1 +libc6-dbg==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libcairo2==1.16.0-4+deb10u1 +libcc1-0==8.3.0-6 +libcdt5==2.40.1-6+deb10u1 +libcgraph6==2.40.1-6+deb10u1 +libcryptsetup12==2:2.1.0-5+deb10u2 +libcups2==2.2.10-6+deb10u6 +libcupsfilters1==1.21.6-5 +libcupsimage2==2.2.10-6+deb10u6 +libcurl3-gnutls==7.64.0-4+deb10u2 +libcurl4==7.64.0-4+deb10u2 +libdaemon0==0.14-7 +libdata-dump-perl==1.23-1 +libdatrie1==0.2.12-2 +libdbus-1-3==1.12.20-0+deb10u1 +libdevmapper1.02.1==2:1.02.155-3 +libdouble-conversion1==3.1.0-3 +libdpkg-perl==1.19.8 +libdrm-amdgpu1==2.4.97-1 +libdrm-common==2.4.97-1 +libdrm-intel1==2.4.97-1 +libdrm-nouveau2==2.4.97-1 +libdrm-radeon1==2.4.97-1 +libdrm2==2.4.97-1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libencode-locale-perl==1.05-1 +liberror-perl==0.17027-2 +libestr0==0.1.10-2.1 +libevent-2.1-6==2.1.8-stable-4 +libevent-core-2.1-6==2.1.8-stable-4 +libevent-pthreads-2.1-6==2.1.8-stable-4 +libexpat1==2.2.6-2+deb10u4 +libexpat1-dev==2.2.6-2+deb10u4 +libfakeroot==1.23-1 +libfastjson4==0.99.8-2 +libffi-dev==3.2.1-9 +libfile-basedir-perl==0.08-1 +libfile-desktopentry-perl==0.22-1 +libfile-fcntllock-perl==0.22-3+b5 +libfile-listing-perl==6.04-1 +libfile-mimeinfo-perl==0.29-1 +libfont-afm-perl==1.20-2 +libfontconfig1==2.13.1-2 +libfontenc1==1:1.1.3-1+b2 +libfreetype6==2.9.1-3+deb10u2 +libfribidi0==1.0.5-3.1+deb10u1 +libgcc-8-dev==8.3.0-6 +libgd3==2.2.5-5.2 +libgdbm-compat4==1.18.1-4 +libgdbm6==1.18.1-4 +libgfortran5==8.3.0-6 +libgirepository-1.0-1==1.58.3-2 +libgl1==1.1.0-1 +libgl1-mesa-dri==18.3.6-2+deb10u1 +libglapi-mesa==18.3.6-2+deb10u1 +libglib2.0-0==2.58.3-2+deb10u3 +libglib2.0-data==2.58.3-2+deb10u3 +libglvnd0==1.1.0-1 +libglx-mesa0==18.3.6-2+deb10u1 +libglx0==1.1.0-1 +libgnutls-dane0==3.6.7-4+deb10u7 +libgomp1==8.3.0-6 +libgpm2==1.20.7-5 +libgraphite2-3==1.3.13-7 +libgs9==9.27~dfsg-2+deb10u5 +libgs9-common==9.27~dfsg-2+deb10u5 +libgssapi-krb5-2==1.17-3+deb10u3 +libgts-0.7-5==0.7.6+darcs121130-4 +libgts-bin==0.7.6+darcs121130-4 +libgvc6==2.40.1-6+deb10u1 +libgvpr2==2.40.1-6+deb10u1 +libharfbuzz-icu0==2.3.1-1 +libharfbuzz0b==2.3.1-1 +libhtml-form-perl==6.03-1 +libhtml-format-perl==2.12-1 +libhtml-parser-perl==3.72-3+b3 +libhtml-tagset-perl==3.20-3 +libhtml-tree-perl==5.07-2 +libhttp-cookies-perl==6.04-1 +libhttp-daemon-perl==6.01-3 +libhttp-date-perl==6.02-1 +libhttp-message-perl==6.18-1 +libhttp-negotiate-perl==6.01-1 +libice6==2:1.0.9-2 +libicu63==63.1-6+deb10u3 +libidn11==1.33-2.2 +libijs-0.35==0.35-14 +libimagequant0==2.12.2-1.1 +libio-html-perl==1.001-1 +libio-socket-ssl-perl==2.060-3 +libio-stringy-perl==2.111-3 +libip4tc0==1.8.2-4 +libipc-system-simple-perl==1.25-4 +libipt2==2.0-2 +libisl19==0.20-2 +libitm1==8.3.0-6 +libjansson4==2.12-1 +libjbig0==2.1-3.1+b2 +libjbig2dec0==0.16-1+deb10u1 +libjpeg62-turbo==1:1.5.2-2+deb10u1 +libjs-jquery==3.3.1~dfsg-3+deb10u1 +libjs-jquery-ui==1.12.1+dfsg-5 +libjson-c3==0.12.1+ds-2+deb10u1 +libjsoncpp1==1.7.4-3 +libk5crypto3==1.17-3+deb10u3 +libkeyutils1==1.6-6 +libkmod2==26-1 +libkpathsea6==2018.20181218.49446-1 +libkrb5-3==1.17-3+deb10u3 +libkrb5support0==1.17-3+deb10u3 +libksba8==1.3.5-2 +liblab-gamut1==2.40.1-6+deb10u1 +liblapack3==3.8.0-2 +liblcms2-2==2.9-3 +libldap-2.4-2==2.4.47+dfsg-3+deb10u7 +libldap-common==2.4.47+dfsg-3+deb10u7 +libllvm7==1:7.0.1-8+deb10u2 +liblocale-gettext-perl==1.07-3+b4 +liblockfile-bin==1.14-1.1 +liblockfile1==1.14-1.1 +liblognorm5==2.0.5-1 +liblsan0==8.3.0-6 +libltdl7==2.4.6-9 +liblwp-mediatypes-perl==6.02-1 +liblwp-protocol-https-perl==6.07-2 +libmagic-mgc==1:5.35-4+deb10u2 +libmagic1==1:5.35-4+deb10u2 +libmailtools-perl==2.18-1 +libmpc3==1.1.0-1 +libmpdec2==2.4.2-2 +libmpfr6==4.0.2-1 +libmpx2==8.3.0-6 +libncurses6==6.1+20181013-2+deb10u2 +libnet-dbus-perl==1.1.0-5+b1 +libnet-http-perl==6.18-1 +libnet-smtp-ssl-perl==1.04-1 +libnet-ssleay-perl==1.85-2+b1 +libnet1==1.1.6+dfsg-3.1 +libnghttp2-14==1.36.0-2+deb10u1 +libnl-3-200==3.4.0-1 +libnl-cli-3-200==3.4.0-1 +libnl-genl-3-200==3.4.0-1 +libnl-nf-3-200==3.4.0-1 +libnl-route-3-200==3.4.0-1 +libnpth0==1.6-1 +libnss-systemd==241-7~deb10u8 +libopenjp2-7==2.3.0-2+deb10u2 +libopts25==1:5.18.12-4 +libpam-systemd==241-7~deb10u8 +libpango-1.0-0==1.42.4-8~deb10u1 +libpangocairo-1.0-0==1.42.4-8~deb10u1 +libpangoft2-1.0-0==1.42.4-8~deb10u1 +libpaper-utils==1.1.28 +libpaper1==1.1.28 +libpathplan4==2.40.1-6+deb10u1 +libpcap-dev==1.8.1-6+deb10u1 +libpcap0.8==1.8.1-6+deb10u1 +libpcap0.8-dev==1.8.1-6+deb10u1 +libpciaccess0==0.14-1 +libpcre2-16-0==10.32-5 +libpcre2-8-0==10.32-5 +libperl5.28==5.28.1-6+deb10u1 +libpixman-1-0==0.36.0-1 +libpng16-16==1.6.36-6 +libpopt0==1.16-12 +libpotrace0==1.15-1 +libprocps7==2:3.3.15-2 +libpsl5==0.20.2-2 +libptexenc1==2018.20181218.49446-1 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libpython3-dev==3.7.3-1 +libpython3-stdlib==3.7.3-1 +libpython3.7==3.7.3-2+deb10u3 +libpython3.7-dev==3.7.3-2+deb10u3 +libpython3.7-minimal==3.7.3-2+deb10u3 +libpython3.7-stdlib==3.7.3-2+deb10u3 +libqt5core5a==5.11.3+dfsg1-1+deb10u4 +libqt5dbus5==5.11.3+dfsg1-1+deb10u4 +libqt5network5==5.11.3+dfsg1-1+deb10u4 +libquadmath0==8.3.0-6 +libreadline7==7.0-5 +librhash0==1.3.8-1 +librtmp1==2.4+20151223.gitfa8646d.1-2 +libsasl2-2==2.1.27+dfsg-1+deb10u2 +libsasl2-modules==2.1.27+dfsg-1+deb10u2 +libsasl2-modules-db==2.1.27+dfsg-1+deb10u2 +libsensors-config==1:3.5.0-3 +libsensors5==1:3.5.0-3 +libsigsegv2==2.12-2 +libsm6==2:1.2.3-1 +libsqlite3-0==3.27.2-3+deb10u1 +libssh2-1==1.8.0-2.1 +libssl-dev==1.1.1n-0+deb10u2 +libssl1.1==1.1.1n-0+deb10u2 +libstdc++-8-dev==8.3.0-6 +libsynctex2==2018.20181218.49446-1 +libtacacs+1==4.0.4.27a-3 +libtcl8.6==8.6.9+dfsg-2 +libteam-utils==1.28-1 +libteam5==1.28-1 +libteamdctl0==1.28-1 +libteckit0==2.5.8+ds2-5 +libtexlua52==2018.20181218.49446-1 +libtexlua53==2018.20181218.49446-1 +libtexluajit2==2018.20181218.49446-1 +libtext-iconv-perl==1.7-5+b7 +libthai-data==0.1.28-2 +libthai0==0.1.28-2 +libthrift-0.11.0==0.11.0-4 +libtie-ixhash-perl==1.23-2 +libtiff5==4.1.0+git191117-2~deb10u4 +libtimedate-perl==2.3000-2+deb10u1 +libtk8.6==8.6.9-2 +libtry-tiny-perl==0.30-1 +libtsan0==8.3.0-6 +libubsan1==8.3.0-6 +libunbound8==1.9.0-2+deb10u2 +liburi-perl==1.76-1 +libutempter0==1.1.6-3 +libuv1==1.24.1-1+deb10u1 +libwebp6==0.6.1-2+deb10u1 +libwebpdemux2==0.6.1-2+deb10u1 +libwebpmux3==0.6.1-2+deb10u1 +libwoff1==1.0.2-1 +libwrap0==7.6.q-28 +libwww-perl==6.36-2 +libwww-robotrules-perl==6.02-1 +libx11-6==2:1.6.7-1+deb10u2 +libx11-data==2:1.6.7-1+deb10u2 +libx11-protocol-perl==0.56-7 +libx11-xcb1==2:1.6.7-1+deb10u2 +libxau6==1:1.0.8-1+b2 +libxaw7==2:1.0.13-1+b2 +libxcb-dri2-0==1.13.1-2 +libxcb-dri3-0==1.13.1-2 +libxcb-glx0==1.13.1-2 +libxcb-present0==1.13.1-2 +libxcb-render0==1.13.1-2 +libxcb-shape0==1.13.1-2 +libxcb-shm0==1.13.1-2 +libxcb-sync1==1.13.1-2 +libxcb1==1.13.1-2 +libxcomposite1==1:0.4.4-2 +libxcursor1==1:1.1.15-2 +libxdamage1==1:1.1.4-3+b3 +libxdmcp6==1:1.1.2-3 +libxdot4==2.40.1-6+deb10u1 +libxext6==2:1.3.3-1+b2 +libxfixes3==1:5.0.3-1 +libxft2==2.3.2-2 +libxi6==2:1.7.9-1 +libxinerama1==2:1.1.4-2 +libxml-parser-perl==2.44-4 +libxml-twig-perl==1:3.50-1.1 +libxml-xpathengine-perl==0.14-1 +libxml2==2.9.4+dfsg1-7+deb10u4 +libxmu6==2:1.1.2-2+b3 +libxmuu1==2:1.1.2-2+b3 +libxpm4==1:3.5.12-1 +libxrandr2==2:1.5.1-1 +libxrender1==1:0.9.10-1 +libxshmfence1==1.3-1 +libxss1==1:1.2.3-1 +libxt6==1:1.1.5-1+b3 +libxtst6==2:1.2.3-1 +libxv1==2:1.0.11-1 +libxxf86dga1==2:1.1.4-1+b3 +libxxf86vm1==1:1.1.4-1+b2 +libxxhash0==0.6.5-2 +libzzip-0-13==0.13.62-3.2+deb10u1 +linux-libc-dev==4.19.235-1 +lmodern==2.004.5-6 +logrotate==3.14.0-4 +lsb-base==10.2019051400 +lsof==4.91+dfsg-1 +m4==1.4.18-2 +make==4.2.1-1.2 +manpages==4.16-2 +manpages-dev==4.16-2 +mime-support==3.62 +ncurses-term==6.1+20181013-2+deb10u2 +net-tools==1.60+git20180626.aebd88e-1 +netbase==5.6 +ntp==1:4.2.8p12+dfsg-4 +ntpdate==1:4.2.8p12+dfsg-4 +ntpstat==0.0.0.1-2 +openssh-client==1:7.9p1-10+deb10u2 +openssh-server==1:7.9p1-10+deb10u2 +openssh-sftp-server==1:7.9p1-10+deb10u2 +openssl==1.1.1n-0+deb10u2 +patch==2.7.6-3+deb10u1 +perl==5.28.1-6+deb10u1 +perl-modules-5.28==5.28.1-6+deb10u1 +perl-openssl-defaults==3 +pinentry-curses==1.1.0-2 +pkg-config==0.29-6 +poppler-data==0.4.9-2 +procps==2:3.3.15-2 +psmisc==23.2-1+deb10u1 +publicsuffix==20211109.1735-0+deb10u1 +python==2.7.16-1 +python-dev==2.7.16-1 +python-libpcap==0.6.4-1 +python-matplotlib-data==3.0.2-2 +python-minimal==2.7.16-1 +python-pip-whl==18.1-5 +python-ptf==0.9-1 +python-saithrift==0.9.4 +python-scapy==2.4.0-2 +python-six==1.12.0-1 +python-thrift==0.11.0-4 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +python3==3.7.3-1 +python3-asn1crypto==0.24.0-1 +python3-cffi-backend==1.12.2-1 +python3-crypto==2.6.1-9+b1 +python3-cryptography==2.6.1-3+deb10u2 +python3-cycler==0.10.0-1 +python3-dateutil==2.7.3-3 +python3-dbus==1.2.8-3 +python3-decorator==4.3.0-1.1 +python3-dev==3.7.3-1 +python3-distutils==3.7.3-1 +python3-entrypoints==0.3-1 +python3-gi==3.30.4-1 +python3-ipython==5.8.0-1+deb10u1 +python3-ipython-genutils==0.2.0-1 +python3-keyring==17.1.1-1 +python3-keyrings.alt==3.1.1-1 +python3-kiwisolver==1.0.1-2+b1 +python3-lib2to3==3.7.3-1 +python3-matplotlib==3.0.2-2 +python3-minimal==3.7.3-1 +python3-numpy==1:1.16.2-1 +python3-olefile==0.46-1 +python3-pexpect==4.6.0-1 +python3-pickleshare==0.7.5-1 +python3-pil==5.4.1-2+deb10u3 +python3-pip==18.1-5 +python3-pkg-resources==40.8.0-1 +python3-prompt-toolkit==1.0.15-1 +python3-ptyprocess==0.6.0-1 +python3-pygments==2.3.1+dfsg-1+deb10u2 +python3-pyparsing==2.2.0+dfsg1-2 +python3-pyx==0.14.1-9 +python3-scapy==2.4.0-2 +python3-secretstorage==2.3.1-2 +python3-setuptools==40.8.0-1 +python3-simplegeneric==0.8.1-2 +python3-six==1.12.0-1 +python3-tk==3.7.3-1 +python3-traitlets==4.3.2-1 +python3-venv==3.7.3-1 +python3-wcwidth==0.1.7+dfsg1-3 +python3-wheel==0.32.3-2 +python3-xdg==0.25-5 +python3.7==3.7.3-2+deb10u3 +python3.7-dev==3.7.3-2+deb10u3 +python3.7-minimal==3.7.3-2+deb10u3 +python3.7-venv==3.7.3-2+deb10u3 +qttranslations5-l10n==5.11.3-2 +readline-common==7.0-5 +rsyslog==8.1901.0-1+deb10u2 +sensible-utils==0.0.12 +shared-mime-info==1.10-1 +sntp==1:4.2.8p12+dfsg-4 +systemd==241-7~deb10u8 +systemd-sysv==241-7~deb10u8 +t1utils==1.41-3 +tacacs+==4.0.4.27a-3 +tcpdump==4.9.3-1~deb10u2 +telnet==0.17-41.2 +tex-common==6.11 +texlive-base==2018.20190227-2 +texlive-binaries==2018.20181218.49446-1 +texlive-latex-base==2018.20190227-2 +tk8.6-blt2.5==2.5.3+dfsg-4 +tmux==2.8-3 +traceroute==1:2.1.0-2 +ttf-bitstream-vera==1.10-8 +ucf==3.0038+nmu1 +unzip==6.0-23+deb10u2 +vim==2:8.1.0875-5+deb10u2 +vim-common==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 +wget==1.20.1-1.1 +x11-common==1:7.7+19 +x11-utils==7.7+4 +x11-xserver-utils==7.7+8 +xauth==1:1.0.10-1 +xdg-user-dirs==0.17-2 +xdg-utils==1.1.3-1+deb10u1 +xfonts-encodings==1:1.0.4-2 +xfonts-utils==1:7.7+6 +xxd==2:8.1.0875-5+deb10u2 +xz-utils==5.2.4-1+deb10u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-ptf-sonic/versions-py2 b/files/build/versions/dockers/docker-ptf-sonic/versions-py2 new file mode 100644 index 000000000000..1f04aee01357 --- /dev/null +++ b/files/build/versions/dockers/docker-ptf-sonic/versions-py2 @@ -0,0 +1,69 @@ +backports.functools-lru-cache==1.6.4 +backports.shutil-get-terminal-size==1.0.0 +bcrypt==3.1.7 +cffi==1.15.0 +click==7.1.2 +contextlib2==0.6.0.post1 +cryptography==3.3.2 +decorator==4.4.2 +dpkt==1.9.7.2 +enum34==1.1.6 +exabgp==3.4.17 +flask==1.0 +flask-httpauth==2.5.0 +future==0.18.2 +futures==3.2.0 +grpcio==1.18.0 +grpcio-tools==1.15.0 +importlib-resources==3.3.1 +ipaddress==1.0.23 +ipython==5.4.1 +ipython-genutils==0.2.0 +itsdangerous==1.1.0 +jinja2==2.11.3 +markupsafe==1.1.1 +netaddr==0.8.0 +nnpy==1.4.2 +oslo.config==2.1.0 +paramiko==2.11.0 +pathlib2==2.3.7.post1 +pbr==2.0.0 +pexpect==4.8.0 +pickleshare==0.7.5 +plumbum==1.7.2 +prompt-toolkit==1.0.18 +protobuf==3.6.1 +ptf==0.9.1 +ptyprocess==0.7.0 +pyaml==21.10.1 +pybrctl==0.1.3 +pycparser==2.21 +pygments==2.5.2 +pylibpcap==0.6.4 +pynacl==1.4.0 +pyrasite==2.0 +pyro4==4.82 +pysubnettree==0.26 +pyyaml==5.4.1 +retrying==1.3.3 +rpyc==4.1.5 +saithrift==0.9 +scandir==1.10.0 +scapy==2.2.0.dev0 +selectors34==1.2 +serpent==1.28 +simplegeneric==0.8.1 +singledispatch==3.7.0 +six==1.12.0 +stevedore==1.32.0 +supervisor==4.2.4 +thrift==0.11.0 +traitlets==4.3.3 +twisted==16.0.0 +typing==3.10.0.0 +unittest-xml-reporting==2.5.2 +wcwidth==0.2.5 +werkzeug==1.0.1 +yabgp==0.8.2 +zipp==1.2.0 +zope.interface==5.4.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-ptf-sonic/versions-py3 b/files/build/versions/dockers/docker-ptf-sonic/versions-py3 new file mode 100644 index 000000000000..68ff645ebbd6 --- /dev/null +++ b/files/build/versions/dockers/docker-ptf-sonic/versions-py3 @@ -0,0 +1,30 @@ +asn1crypto==0.24.0 +cryptography==2.6.1 +cycler==0.10.0 +decorator==4.3.0 +entrypoints==0.3 +ipython==5.8.0 +ipython-genutils==0.2.0 +keyring==17.1.1 +keyrings.alt==3.1.1 +kiwisolver==1.0.1 +matplotlib==3.0.2 +numpy==1.16.2 +olefile==0.46 +pexpect==4.6.0 +pickleshare==0.7.5 +pillow==5.4.1 +prompt-toolkit==1.0.15 +pycrypto==2.6.1 +pygments==2.3.1 +pygobject==3.30.4 +pyparsing==2.2.0 +python-dateutil==2.7.3 +pyx==0.14.1 +pyxdg==0.25 +scapy==2.4.0 +secretstorage==2.3.1 +simplegeneric==0.8.1 +six==1.12.0 +traitlets==4.3.2 +wcwidth==0.1.7 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-vs-sonic/versions-deb-buster b/files/build/versions/dockers/docker-sonic-vs-sonic/versions-deb-buster new file mode 100644 index 000000000000..1c6e788d3d60 --- /dev/null +++ b/files/build/versions/dockers/docker-sonic-vs-sonic/versions-deb-buster @@ -0,0 +1,215 @@ +arping==2.19-6 +bash-completion==1:2.8-6 +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +bridge-utils==1.6-2 +build-essential==12.6 +conntrack==1:1.4.5-2 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +cron==3.0pl1-134+deb10u1 +dh-python==3.20190308 +dirmngr==2.2.12-1+deb10u1 +dmsetup==2:1.02.155-3 +ethtool==1:4.19-1 +fontconfig-config==2.13.1-2 +fonts-dejavu-core==2.37-1 +frr==8.2.2-sonic-0 +g++==4:8.3.0-1 +g++-8==8.3.0-6 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +gettext-base==0.19.8.1-9 +gir1.2-freedesktop==1.58.3-2 +gir1.2-glib-2.0==1.58.3-2 +gnupg==2.2.12-1+deb10u1 +gnupg-l10n==2.2.12-1+deb10u1 +gnupg-utils==2.2.12-1+deb10u1 +gobject-introspection==1.58.3-2 +gpg==2.2.12-1+deb10u1 +gpg-agent==2.2.12-1+deb10u1 +gpg-wks-client==2.2.12-1+deb10u1 +gpg-wks-server==2.2.12-1+deb10u1 +gpgconf==2.2.12-1+deb10u1 +gpgsm==2.2.12-1+deb10u1 +grub-common==2.02+dfsg1-20+deb10u4 +grub2-common==2.02+dfsg1-20+deb10u4 +ifupdown==0.8.35 +iproute2==5.10.0-4~bpo10+1 +iptables==1.8.2-4 +libasan5==8.3.0-6 +libassuan0==2.5.2-1 +libbinutils==2.31.1-16 +libblkid-dev==2.33.1-0.1 +libboost-atomic1.71.0==1.71.0-6~bpo10+1 +libboost-program-options1.71.0==1.71.0-6~bpo10+1 +libboost-system1.71.0==1.71.0-6~bpo10+1 +libboost-thread1.71.0==1.71.0-6~bpo10+1 +libbpf0==1:0.3-2~bpo10+1 +libbsd0==0.9.1-2+deb10u1 +libc-ares2==1.14.0-1+deb10u1 +libc-dev-bin==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libcairo-gobject2==1.16.0-4+deb10u1 +libcairo-script-interpreter2==1.16.0-4+deb10u1 +libcairo2==1.16.0-4+deb10u1 +libcairo2-dev==1.16.0-4+deb10u1 +libcc1-0==8.3.0-6 +libdbus-1-dev==1.12.20-0+deb10u1 +libdevmapper1.02.1==2:1.02.155-3 +libdouble-conversion1==3.1.0-3 +libdpkg-perl==1.19.8 +libedit2==3.1-20181209-1 +libefiboot1==37-2+deb10u1 +libefivar1==37-2+deb10u1 +libexpat1-dev==2.2.6-2+deb10u4 +libffi-dev==3.2.1-9 +libfontconfig1==2.13.1-2 +libfontconfig1-dev==2.13.1-2 +libfreetype6==2.9.1-3+deb10u2 +libfreetype6-dev==2.9.1-3+deb10u2 +libfuse2==2.9.9-1+deb10u1 +libgcc-8-dev==8.3.0-6 +libgirepository-1.0-1==1.58.3-2 +libgirepository1.0-dev==1.58.3-2 +libglib2.0-0==2.58.3-2+deb10u3 +libglib2.0-bin==2.58.3-2+deb10u3 +libglib2.0-data==2.58.3-2+deb10u3 +libglib2.0-dev==2.58.3-2+deb10u3 +libglib2.0-dev-bin==2.58.3-2+deb10u3 +libgomp1==8.3.0-6 +libice-dev==2:1.0.9-2 +libice6==2:1.0.9-2 +libicu63==63.1-6+deb10u3 +libip4tc0==1.8.2-4 +libip6tc0==1.8.2-4 +libiptc0==1.8.2-4 +libisl19==0.20-2 +libitm1==8.3.0-6 +libjson-c3==0.12.1+ds-2+deb10u1 +libjudydebian1==1.0.5-5 +libksba8==1.3.5-2 +liblsan0==8.3.0-6 +liblzo2-2==2.10-0.1 +libmount-dev==2.33.1-0.1 +libmpc3==1.1.0-1 +libmpfr6==4.0.2-1 +libmpx2==8.3.0-6 +libnet1==1.1.6+dfsg-3.1 +libnetfilter-conntrack3==1.0.7-1 +libnfnetlink0==1.0.1-3+b1 +libnftnl11==1.1.2-2 +libnpth0==1.6-1 +libpcap0.8==1.8.1-6+deb10u1 +libpcre16-3==2:8.39-12 +libpcre2-16-0==10.32-5 +libpcre2-8-0==10.32-5 +libpcre3-dev==2:8.39-12 +libpcre32-3==2:8.39-12 +libpcrecpp0v5==2:8.39-12 +libpixman-1-0==0.36.0-1 +libpixman-1-dev==0.36.0-1 +libpng-dev==1.6.36-6 +libpng16-16==1.6.36-6 +libpopt0==1.16-12 +libpthread-stubs0-dev==0.4-1 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libpython3-dev==3.7.3-1 +libpython3.7-dev==3.7.3-2+deb10u3 +libqt5core5a==5.11.3+dfsg1-1+deb10u4 +libqt5dbus5==5.11.3+dfsg1-1+deb10u4 +libqt5network5==5.11.3+dfsg1-1+deb10u4 +libquadmath0==8.3.0-6 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libsaivs==1.0.0 +libselinux1-dev==2.8-1+b1 +libsepol1-dev==2.8-1 +libsm-dev==2:1.2.3-1 +libsm6==2:1.2.3-1 +libssl-dev==1.1.1n-0+deb10u2 +libstdc++-8-dev==8.3.0-6 +libsystemd-dev==241-7~deb10u8 +libteam-utils==1.30-1 +libteam5==1.30-1 +libteamdctl0==1.30-1 +libtsan0==8.3.0-6 +libubsan1==8.3.0-6 +libunwind8==1.2.1-10~deb10u1 +libx11-6==2:1.6.7-1+deb10u2 +libx11-data==2:1.6.7-1+deb10u2 +libx11-dev==2:1.6.7-1+deb10u2 +libxau-dev==1:1.0.8-1+b2 +libxau6==1:1.0.8-1+b2 +libxcb-render0==1.13.1-2 +libxcb-render0-dev==1.13.1-2 +libxcb-shm0==1.13.1-2 +libxcb-shm0-dev==1.13.1-2 +libxcb1==1.13.1-2 +libxcb1-dev==1.13.1-2 +libxdmcp-dev==1:1.1.2-3 +libxdmcp6==1:1.1.2-3 +libxext-dev==2:1.3.3-1+b2 +libxext6==2:1.3.3-1+b2 +libxrender-dev==1:0.9.10-1 +libxrender1==1:0.9.10-1 +libyang2==2.0.112-6 +linux-libc-dev==4.19.235-1 +logrotate==3.14.0-4 +lsof==4.91+dfsg-1 +make==4.2.1-1.2 +ndisc6==1.0.4-1 +openssh-client==1:7.9p1-10+deb10u2 +openssh-server==1:7.9p1-10+deb10u2 +openssh-sftp-server==1:7.9p1-10+deb10u2 +patch==2.7.6-3+deb10u1 +pinentry-curses==1.1.0-2 +pkg-config==0.29-6 +psmisc==23.2-1+deb10u1 +python==2.7.16-1 +python-dev==2.7.16-1 +python-minimal==2.7.16-1 +python-pip==18.1-5 +python-pip-whl==18.1-5 +python-ply==3.11-3 +python-scapy==2.4.0-2 +python-swsscommon==1.0.0 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +python3-dev==3.7.3-1 +python3-mako==1.0.7+ds1-1 +python3-markdown==3.0.1-3 +python3-markupsafe==1.1.0-1 +python3-pkg-resources==40.8.0-1 +python3.7-dev==3.7.3-2+deb10u3 +redis-server==5:6.0.6-1~bpo10+1 +sensible-utils==0.0.12 +sonic-device-data==1.0-1 +sonic-host-services-data==1.0-1 +sonic-utilities-data==1.0-1 +swig==3.0.12-2 +swig3.0==3.0.12-2 +swss==1.0.0 +syncd-vs==1.0.0 +tcpdump==4.9.3-1~deb10u2 +ucf==3.0038+nmu1 +uuid-dev==2.33.1-0.1 +x11-common==1:7.7+19 +x11proto-core-dev==2018.4-4 +x11proto-dev==2018.4-4 +x11proto-xext-dev==2018.4-4 +xorg-sgml-doctools==1:1.11-1 +xtrans-dev==1.3.5-1 +zlib1g-dev==1:1.2.11.dfsg-1+deb10u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-vs-sonic/versions-py2 b/files/build/versions/dockers/docker-sonic-vs-sonic/versions-py2 new file mode 100644 index 000000000000..d6a13c7bdda0 --- /dev/null +++ b/files/build/versions/dockers/docker-sonic-vs-sonic/versions-py2 @@ -0,0 +1,13 @@ +certifi==2021.10.8 +chardet==4.0.0 +crontab==0.23.0 +idna==2.10 +monotonic==1.5 +netifaces==0.10.7 +ply==3.11 +py2-ipaddress==3.4.2 +pyroute2==0.5.3 +requests==2.27.1 +scapy==2.4.0 +six==1.16.0 +urllib3==1.26.9 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-vs-sonic/versions-py3 b/files/build/versions/dockers/docker-sonic-vs-sonic/versions-py3 new file mode 100644 index 000000000000..d578f36173a5 --- /dev/null +++ b/files/build/versions/dockers/docker-sonic-vs-sonic/versions-py3 @@ -0,0 +1,34 @@ +blessed==1.19.1 +certifi==2022.5.18.1 +charset-normalizer==2.0.12 +click==7.0 +click-log==0.4.0 +colorful==0.5.4 +dbus-python==1.2.18 +docker==5.0.3 +docker-image-py==0.1.12 +enlighten==1.10.2 +filelock==3.7.1 +idna==3.3 +jsonpatch==1.32 +jsonpointer==2.3 +m2crypto==0.38.0 +netifaces==0.10.9 +pexpect==4.8.0 +prefixed==0.3.2 +prettyprinter==0.18.0 +ptyprocess==0.7.0 +pycairo==1.21.0 +pygments==2.12.0 +pygobject==3.42.1 +pyroute2==0.5.14 +requests==2.27.1 +scapy==2.4.4 +semantic-version==2.10.0 +systemd-python==234 +tabulate==0.8.2 +toposort==1.6 +urllib3==1.26.9 +wcwidth==0.2.5 +websocket-client==1.3.2 +www-authenticate==0.9.2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-bfn-rpc-sonic/versions-deb-buster b/files/build/versions/dockers/docker-syncd-bfn-rpc-sonic/versions-deb-buster new file mode 100644 index 000000000000..aaa13c3b66f1 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-bfn-rpc-sonic/versions-deb-buster @@ -0,0 +1,71 @@ +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +build-essential==12.6 +cmake==3.13.4-1 +cmake-data==3.13.4-1 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +g++==4:8.3.0-1 +g++-8==8.3.0-6 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +libarchive13==3.3.3-4+deb10u1 +libasan5==8.3.0-6 +libbinutils==2.31.1-16 +libboost-atomic1.71.0==1.71.0-6~bpo10+1 +libcc1-0==8.3.0-6 +libdouble-conversion1==3.1.0-3 +libdpkg-perl==1.19.8 +libexpat1-dev==2.2.6-2+deb10u4 +libffi-dev==3.2.1-9 +libgcc-8-dev==8.3.0-6 +libglib2.0-0==2.58.3-2+deb10u3 +libgomp1==8.3.0-6 +libisl19==0.20-2 +libitm1==8.3.0-6 +libjsoncpp1==1.7.4-3 +liblsan0==8.3.0-6 +libmpc3==1.1.0-1 +libmpfr6==4.0.2-1 +libmpx2==8.3.0-6 +libpcre2-16-0==10.32-5 +libpcre2-8-0==10.32-5 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libqt5core5a==5.11.3+dfsg1-1+deb10u4 +libqt5dbus5==5.11.3+dfsg1-1+deb10u4 +libqt5network5==5.11.3+dfsg1-1+deb10u4 +libquadmath0==8.3.0-6 +librhash0==1.3.8-1 +libssl-dev==1.1.1n-0+deb10u2 +libstdc++-8-dev==8.3.0-6 +libthrift0==0.14.1 +libtsan0==8.3.0-6 +libubsan1==8.3.0-6 +libuv1==1.24.1-1+deb10u1 +make==4.2.1-1.2 +patch==2.7.6-3+deb10u1 +python==2.7.16-1 +python-dev==2.7.16-1 +python-minimal==2.7.16-1 +python-pip==18.1-5 +python-pip-whl==18.1-5 +python-pkg-resources==40.8.0-1 +python-ptf==0.9-1 +python-scapy==2.4.0-2 +python-setuptools==40.8.0-1 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +syncd-rpc==1.0.0 +wget==1.20.1-1.1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-bfn-rpc-sonic/versions-py2 b/files/build/versions/dockers/docker-syncd-bfn-rpc-sonic/versions-py2 new file mode 100644 index 000000000000..60b9f31f8e4a --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-bfn-rpc-sonic/versions-py2 @@ -0,0 +1,5 @@ +cffi==1.7.0 +nnpy==1.4.2 +ptf==0.9.1 +pycparser==2.21 +scapy==2.4.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-bfn-sonic/versions-deb-buster b/files/build/versions/dockers/docker-syncd-bfn-sonic/versions-deb-buster new file mode 100644 index 000000000000..43e096cc1b8d --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-bfn-sonic/versions-deb-buster @@ -0,0 +1,25 @@ +bfnplatform==1.0.0 +bfnsdk==1.0.0 +libbsd0==0.9.1-2+deb10u1 +libc-ares2==1.14.0-1+deb10u1 +libc-dev-bin==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libcurl3-gnutls==7.64.0-4+deb10u2 +libcurl4-gnutls-dev==7.64.0-4+deb10u2 +libedit2==3.1-20181209-1 +libgoogle-perftools4==2.7-1 +libicu63==63.1-6+deb10u3 +liblzma-dev==5.2.4-1+deb10u1 +libpcap-dev==1.8.1-6+deb10u1 +libpcap0.8==1.8.1-6+deb10u1 +libpcap0.8-dev==1.8.1-6+deb10u1 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libtcmalloc-minimal4==2.7-1 +libunwind-dev==1.2.1-10~deb10u1 +libunwind8==1.2.1-10~deb10u1 +libusb-1.0-0==2:1.0.22-2 +libusb-1.0-0-dev==2:1.0.22-2 +libxml2==2.9.4+dfsg1-7+deb10u4 +linux-libc-dev==4.19.235-1 +syncd==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-centec-dbg-sonic/versions-deb-buster b/files/build/versions/dockers/docker-syncd-centec-dbg-sonic/versions-deb-buster new file mode 100644 index 000000000000..f284636434e0 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-centec-dbg-sonic/versions-deb-buster @@ -0,0 +1,18 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-centec-rpc-sonic/versions-deb-buster b/files/build/versions/dockers/docker-syncd-centec-rpc-sonic/versions-deb-buster new file mode 100644 index 000000000000..655bb8fff570 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-centec-rpc-sonic/versions-deb-buster @@ -0,0 +1,78 @@ +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +build-essential==12.6 +cmake==3.13.4-1 +cmake-data==3.13.4-1 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +g++==4:8.3.0-1 +g++-8==8.3.0-6 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +libarchive13==3.3.3-4+deb10u1 +libasan5==8.3.0-6 +libbinutils==2.31.1-16 +libboost-atomic1.71-dev==1.71.0-6~bpo10+1 +libboost-atomic1.71.0==1.71.0-6~bpo10+1 +libboost1.71-dev==1.71.0-6~bpo10+1 +libc-dev-bin==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libcc1-0==8.3.0-6 +libdouble-conversion1==3.1.0-3 +libdpkg-perl==1.19.8 +libexpat1-dev==2.2.6-2+deb10u4 +libffi-dev==3.2.1-9 +libgcc-8-dev==8.3.0-6 +libglib2.0-0==2.58.3-2+deb10u3 +libgomp1==8.3.0-6 +libicu63==63.1-6+deb10u3 +libisl19==0.20-2 +libitm1==8.3.0-6 +libjsoncpp1==1.7.4-3 +liblsan0==8.3.0-6 +libmpc3==1.1.0-1 +libmpfr6==4.0.2-1 +libmpx2==8.3.0-6 +libpcre2-16-0==10.32-5 +libpcre2-8-0==10.32-5 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libqt5core5a==5.11.3+dfsg1-1+deb10u4 +libqt5dbus5==5.11.3+dfsg1-1+deb10u4 +libqt5network5==5.11.3+dfsg1-1+deb10u4 +libquadmath0==8.3.0-6 +librhash0==1.3.8-1 +libssl-dev==1.1.1n-0+deb10u2 +libstdc++-8-dev==8.3.0-6 +libthrift-0.11.0==0.11.0-4 +libtsan0==8.3.0-6 +libubsan1==8.3.0-6 +libuv1==1.24.1-1+deb10u1 +libxml2==2.9.4+dfsg1-7+deb10u4 +linux-libc-dev==4.19.235-1 +make==4.2.1-1.2 +patch==2.7.6-3+deb10u1 +python==2.7.16-1 +python-dev==2.7.16-1 +python-minimal==2.7.16-1 +python-pip==18.1-5 +python-pip-whl==18.1-5 +python-pkg-resources==40.8.0-1 +python-ptf==0.9-1 +python-scapy==2.4.0-2 +python-setuptools==40.8.0-1 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +syncd-rpc==1.0.0 +wget==1.20.1-1.1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-centec-rpc-sonic/versions-py2 b/files/build/versions/dockers/docker-syncd-centec-rpc-sonic/versions-py2 new file mode 100644 index 000000000000..60b9f31f8e4a --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-centec-rpc-sonic/versions-py2 @@ -0,0 +1,5 @@ +cffi==1.7.0 +nnpy==1.4.2 +ptf==0.9.1 +pycparser==2.21 +scapy==2.4.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-centec-sonic/versions-deb-buster b/files/build/versions/dockers/docker-syncd-centec-sonic/versions-deb-buster new file mode 100644 index 000000000000..6cc1695682c8 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-centec-sonic/versions-deb-buster @@ -0,0 +1,6 @@ +kmod==26-1 +libkmod2==26-1 +libsai==1.9.1-0 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +syncd==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-centec-sonic/versions-deb-buster-arm64 b/files/build/versions/dockers/docker-syncd-centec-sonic/versions-deb-buster-arm64 index daacd0ace9bb..e13071edf35e 100644 --- a/files/build/versions/dockers/docker-syncd-centec-sonic/versions-deb-buster-arm64 +++ b/files/build/versions/dockers/docker-syncd-centec-sonic/versions-deb-buster-arm64 @@ -15,9 +15,6 @@ libpython2.7==2.7.16-2+deb10u1 libpython2.7-dev==2.7.16-2+deb10u1 libpython2.7-minimal==2.7.16-2+deb10u1 libpython2.7-stdlib==2.7.16-2+deb10u1 -libsai==1.9.1-0 -libsaimetadata==1.0.0 -libsairedis==1.0.0 libsensors-config==1:3.5.0-3 libsensors4-dev==1:3.5.0-3 libsensors5==1:3.5.0-3 @@ -37,5 +34,4 @@ rpcbind==1.2.5-0.3+deb10u1 sensible-utils==0.0.12 swig==3.0.12-2 swig3.0==3.0.12-2 -syncd==1.0.0 ucf==3.0038+nmu1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-vs-dbg-sonic/versions-deb-buster b/files/build/versions/dockers/docker-syncd-vs-dbg-sonic/versions-deb-buster new file mode 100644 index 000000000000..bc36990fa19b --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-vs-dbg-sonic/versions-deb-buster @@ -0,0 +1,21 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libsaimetadata-dbg==1.0.0 +libsairedis-dbg==1.0.0 +libsaivs-dbg==1.0.0 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +syncd-vs-dbg==1.0.0 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-vs-sonic/versions-deb-buster b/files/build/versions/dockers/docker-syncd-vs-sonic/versions-deb-buster new file mode 100644 index 000000000000..4f293eb8a139 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-vs-sonic/versions-deb-buster @@ -0,0 +1,7 @@ +iproute2==5.10.0-4~bpo10+1 +libbpf0==1:0.3-2~bpo10+1 +libbsd0==0.9.1-2+deb10u1 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libsaivs==1.0.0 +syncd-vs==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye index 7a4a77c5bda5..1dd30cefe07e 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye @@ -175,7 +175,6 @@ gpg-wks-client==2.2.27-2+deb11u1 gpg-wks-server==2.2.27-2+deb11u1 gpgconf==2.2.27-2+deb11u1 gpgsm==2.2.27-2+deb11u1 -gpgv==2.2.27-2+deb11u1 graphviz==2.42.2-5 groff==1.22.4-6 groff-base==1.22.4-6 @@ -357,7 +356,6 @@ libc-ares2==1.17.1-1+deb11u1 libc-dev-bin==2.31-13+deb11u3 libc-devtools==2.31-13+deb11u3 libc-l10n==2.31-13+deb11u3 -libc6==2.31-13+deb11u3 libc6-dbg==2.31-13+deb11u3 libc6-dev==2.31-13+deb11u3 libc6-dev-i386==2.31-13+deb11u3 @@ -763,7 +761,6 @@ liblvm2cmd2.03==2.03.11-2.1 liblwp-mediatypes-perl==6.04-1 liblwp-protocol-https-perl==6.10-1 liblzma-dev==5.2.5-2.1~deb11u1 -liblzma5==5.2.5-2.1~deb11u1 liblzo2-2==2.10-2 liblzo2-dev==2.10-2 libmagic-mgc==1:5.39-3 @@ -1085,7 +1082,6 @@ libsrt1.4-gnutls==1.4.2-1.3 libssh-gcrypt-4==0.9.5-1+deb11u1 libssh2-1==1.9.0-2 libssl-dev==1.1.1n-0+deb11u2 -libssl1.1==1.1.1n-0+deb11u2 libstdc++-10-dev==10.2.1-6 libstemmer0d==2.1.0-1 libstrictures-perl==2.000006-1 @@ -1109,7 +1105,6 @@ libsynctex2==2020.20200327.54578-7 libsys-cpuaffinity-perl==1.13~03-1 libsys-hostname-long-perl==1.5-2 libsystemd-dev==247.3-7 -libsystemd0==247.3-7 libtag1v5==1.11.1+dfsg.1-3 libtag1v5-vanilla==1.11.1+dfsg.1-3 libtask-weaken-perl==1.06-1 @@ -1154,7 +1149,6 @@ libubsan1==10.2.1-6 libuchardet0==0.0.7-1 libucx0==1.10.1~rc1+really.1.10.0-1 libudev-dev==247.3-7 -libudev1==247.3-7 libudfread0==1.1.1-1 libunbound8==1.13.1-1 libunicode-utf8-perl==0.62-1+b2 @@ -1717,5 +1711,4 @@ xtrans-dev==1.4.0-1 xxd==2:8.2.2434-3+deb11u1 xz-utils==5.2.5-2.1~deb11u1 zip==3.0-12 -zlib1g==1:1.2.11.dfsg-2+deb11u1 zlib1g-dev==1:1.2.11.dfsg-2+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 index 5b748815151a..26ca435122ac 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 @@ -1,19 +1,15 @@ -base-files==11.1+deb11u3 binutils-aarch64-linux-gnu==2.35.2-2 binutils-arm-linux-gnueabihf==2.35.2-2 cpp-10-arm-linux-gnueabihf==10.2.1-6cross1 cpp-arm-linux-gnueabihf==4:10.2.1-1 dctrl-tools==2.24-3 -dpkg==1.20.10 dvipng==1.15-1.1 gcc-10-arm-linux-gnueabihf==10.2.1-6cross1 gcc-10-arm-linux-gnueabihf-base==10.2.1-6cross1 gcc-10-cross-base==10.2.1-6cross1 gcc-arm-linux-gnueabihf==4:10.2.1-1 -gzip==1.10-4+deb11u1 libasan6-armhf-cross==10.2.1-6cross1 libatomic1-armhf-cross==10.2.1-6cross1 -libc-bin==2.31-13+deb11u3 libc6-armhf-cross==2.31-9cross4 libgcc-10-dev-armhf-cross==10.2.1-6cross1 libgcc-s1-armhf-cross==10.2.1-6cross1 @@ -23,6 +19,4 @@ libubsan1-armhf-cross==10.2.1-6cross1 libxslt1-dev==1.1.34-4 linux-headers-5.10.0-14-arm64==5.10.113-1 linux-headers-arm64==5.10.113-1 -nodejs==14.19.3-deb-1nodesource1 -sysvinit-utils==2.96-7+deb11u1 -tzdata==2021a-1+deb11u3 \ No newline at end of file +nodejs==14.19.3-deb-1nodesource1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf index 1dac0cb53d2e..a9321cac9b68 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf @@ -1,9 +1,7 @@ -base-files==11.1+deb11u3 binutils-arm-linux-gnueabihf==2.35.2-2 bubblewrap==0.4.1-3 dctrl-tools==2.24-3 doxygen==1.9.1-2 -dpkg==1.20.10 dvipng==1.15-1.1 faketime==0.9.8-9 gir1.2-nautilus-3.0==3.38.2-1+deb11u1 @@ -11,9 +9,7 @@ gir1.2-poppler-0.18==20.09.0-3.1 gir1.2-rsvg-2.0==2.50.3+dfsg-1 golang-1.15-go==1.15.15-1~deb11u4 golang-1.15-src==1.15.15-1~deb11u4 -gzip==1.10-4+deb11u1 libalgorithm-c3-perl==0.11-1 -libc-bin==2.31-13+deb11u3 libclang-11-dev==1:11.0.1-2 libclass-c3-perl==0.35-1 libclass-c3-xs-perl==0.15-1+b1 @@ -59,9 +55,7 @@ python3-mutagen==1.45.1-2 python3-nautilus==1.2.3-3+b1 rdfind==1.4.1-1+b2 sassc==3.6.1+20201027-1 -sysvinit-utils==2.96-7+deb11u1 texlive-extra-utils==2020.20210202-3 texlive-font-utils==2020.20210202-3 texlive-luatex==2020.20210202-3 -tzdata==2021a-1+deb11u3 yui-compressor==2.4.8-2.1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-git b/files/build/versions/dockers/sonic-slave-bullseye/versions-git index 4971ef0418e6..36ba9f15c6e5 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-git +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==8f1fea025d78c26046d3135e026f097dc2022698 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==89b222dba5ea3fd91598e821c0b82797f2e2fa3c https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 index 30af6eae36d5..6a7c0cb33445 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 @@ -84,8 +84,8 @@ python-magic==0.4.20 pytz==2021.1 pyxdg==0.27 pyyaml==5.4.1 -redis==4.3.2 -regex==2022.4.24 +redis==4.3.3 +regex==2022.6.2 requests==2.25.1 roman==2.0.0 service-identity==18.1.0 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster index 4cc53424bc7c..7b81b41c1956 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster +++ b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster @@ -340,7 +340,6 @@ libc-ares-dev==1.14.0-1+deb10u1 libc-ares2==1.14.0-1+deb10u1 libc-dev-bin==2.28-10+deb10u1 libc-l10n==2.28-10+deb10u1 -libc6==2.28-10+deb10u1 libc6-dbg==2.28-10+deb10u1 libc6-dev==2.28-10+deb10u1 libc6-dev-i386==2.28-10+deb10u1 @@ -575,7 +574,6 @@ libglx0==1.1.0-1 libgme0==0.6.2-1 libgmock-dev==1.8.1-3 libgmp-dev==2:6.1.2+dfsg-4+deb10u1 -libgmp10==2:6.1.2+dfsg-4+deb10u1 libgmpxx4ldbl==2:6.1.2+dfsg-4+deb10u1 libgnutls-dane0==3.6.7-4+deb10u7 libgnutls-openssl27==3.6.7-4+deb10u7 @@ -754,7 +752,6 @@ liblwp-mediatypes-perl==6.02-1 liblwp-protocol-https-perl==6.07-2 liblwres161==1:9.11.5.P4+dfsg-5.1+deb10u7 liblzma-dev==5.2.4-1+deb10u1 -liblzma5==5.2.4-1+deb10u1 liblzo2-2==2.10-0.1 liblzo2-dev==2.10-0.1 libmagic-mgc==1:5.35-4+deb10u2 @@ -1777,5 +1774,4 @@ xtrans-dev==1.3.5-1 xxd==2:8.1.0875-5+deb10u2 xz-utils==5.2.4-1+deb10u1 zip==3.0-11+b1 -zlib1g==1:1.2.11.dfsg-1+deb10u1 zlib1g-dev==1:1.2.11.dfsg-1+deb10u1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-git b/files/build/versions/dockers/sonic-slave-buster/versions-git index 4971ef0418e6..36ba9f15c6e5 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-git +++ b/files/build/versions/dockers/sonic-slave-buster/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==8f1fea025d78c26046d3135e026f097dc2022698 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==89b222dba5ea3fd91598e821c0b82797f2e2fa3c https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-py3 b/files/build/versions/dockers/sonic-slave-buster/versions-py3 index 1426823f0fc4..ad49b5ebe21e 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-py3 +++ b/files/build/versions/dockers/sonic-slave-buster/versions-py3 @@ -64,8 +64,8 @@ python-magic==0.4.16 pytz==2019.1 pyxdg==0.25 pyyaml==5.4.1 -redis==4.3.2 -regex==2022.4.24 +redis==4.3.3 +regex==2022.6.2 requests==2.21.0 roman==2.0.0 secretstorage==2.3.1 diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch b/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch index b4c08951d276..6947e944e598 100644 --- a/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch @@ -1495,5 +1495,4 @@ xtrans-dev==1.3.5-1 xxd==2:8.0.0197-4+deb9u6 xz-utils==5.2.2-1.2+deb9u1 zip==3.0-11+b1 -zlib1g==1:1.2.8.dfsg-5+deb9u1 zlib1g-dev==1:1.2.8.dfsg-5+deb9u1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-git b/files/build/versions/dockers/sonic-slave-stretch/versions-git index 4971ef0418e6..36ba9f15c6e5 100644 --- a/files/build/versions/dockers/sonic-slave-stretch/versions-git +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==8f1fea025d78c26046d3135e026f097dc2022698 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==89b222dba5ea3fd91598e821c0b82797f2e2fa3c https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/host-image/versions-deb-bullseye b/files/build/versions/host-image/versions-deb-bullseye index 6143d8ced17a..7efa9a46e9be 100644 --- a/files/build/versions/host-image/versions-deb-bullseye +++ b/files/build/versions/host-image/versions-deb-bullseye @@ -5,6 +5,7 @@ audisp-tacplus==1.0.2 auditd==1:3.0-2 bash-completion==1:2.11-2 bash-tacplus==1.0.0 +bfn-modules==1.0 binutils==2.35.2-2 binutils-common==2.35.2-2 binutils-x86-64-linux-gnu==2.35.2-2 diff --git a/files/build/versions/host-image/versions-py3 b/files/build/versions/host-image/versions-py3 index f3a774afffd7..d5d3fefda832 100644 --- a/files/build/versions/host-image/versions-py3 +++ b/files/build/versions/host-image/versions-py3 @@ -45,6 +45,7 @@ pyang==2.5.3 pyangbind==0.8.1 pycairo==1.21.0 pycparser==2.21 +pycurl==7.43.0.6 pygments==2.12.0 pygobject==3.42.1 pyroute2==0.5.19 @@ -52,13 +53,14 @@ python-apt==2.2.1 python-dateutil==2.8.2 pyyaml==5.4.1 redis==3.5.3 -regex==2022.4.24 +regex==2022.6.2 requests==2.27.1 scapy==2.4.4 semantic-version==2.10.0 six==1.16.0 systemd-python==234 tabulate==0.8.2 +thrift==0.13.0 toposort==1.6 urllib3==1.26.9 watchdog==0.10.3 From edf5e445be1f2ebee0d3fe037760ff0f50015546 Mon Sep 17 00:00:00 2001 From: Shilong Liu Date: Wed, 8 Jun 2022 17:54:00 +0800 Subject: [PATCH 013/259] [build] Disable reproducible build in 202205. (#11071) Why I did it It seems that reproducible build and dood conflicts. Disable reproducible build first. Investigate the issue later. --- .azure-pipelines/azure-pipelines-repd-build-variables.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.azure-pipelines/azure-pipelines-repd-build-variables.yml b/.azure-pipelines/azure-pipelines-repd-build-variables.yml index 7e831109e2ad..971722ce576c 100644 --- a/.azure-pipelines/azure-pipelines-repd-build-variables.yml +++ b/.azure-pipelines/azure-pipelines-repd-build-variables.yml @@ -1,5 +1,5 @@ variables: ${{ if and(ge(variables['Build.SourceBranchName'], '202012'), le(variables['Build.SourceBranchName'], '299999')) }}: - VERSION_CONTROL_OPTIONS: 'SONIC_VERSION_CONTROL_COMPONENTS=deb,py2,py3,web,git,docker' + VERSION_CONTROL_OPTIONS: '' ${{ if or(lt(variables['Build.SourceBranchName'], '202012'), gt(variables['Build.SourceBranchName'], '299999')) }}: VERSION_CONTROL_OPTIONS: '' From d4c49932829b84f2ba4cd6f43662eb2a5c8fa5e8 Mon Sep 17 00:00:00 2001 From: vdahiya12 <67608553+vdahiya12@users.noreply.github.com> Date: Wed, 8 Jun 2022 19:50:48 -0700 Subject: [PATCH 014/259] [202205][sonic-utilities] submodule update (#11065) 0fc6f47 (HEAD -> 202205, origin/202205) [config][muxcable] Add support for displaying soc_ipv4 and cable_type in config/show muxcable commands (#2189) Signed-off-by: vaibhav-dahiya vdahiya@microsoft.com --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index 288c2d8d9328..0fc6f47743c5 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 288c2d8d932899c71c34d360983cee640a9694fd +Subproject commit 0fc6f47743c5a7c8018ae0a4e0385f9fd88f270f From 00d04dcb5ff8164ff1b4b9117e0ca446a556f0c9 Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox <57339448+Junchao-Mellanox@users.noreply.github.com> Date: Tue, 7 Jun 2022 20:13:16 +0800 Subject: [PATCH 015/259] [Mellanox] optimize platform API import time (#10815) - Why I did it "import sonic_platform" takes about 600ms ~ 1000ms, it is kind of slow. After this optimization, the time is about 100ms. The benefit is that those CLIs which does not need the slow import sentence would be faster than before. - How I did it Find slow import and call them when need. - How to verify it Measure the import time. --- .../mellanox/mlnx-platform-api/sonic_platform/chassis.py | 7 ++++--- .../mlnx-platform-api/sonic_platform/device_data.py | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py index c7bafc0d8921..f68d1033f019 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py @@ -30,7 +30,6 @@ from . import utils from .device_data import DeviceDataManager - from .sfp import SFP, deinitialize_sdk_handle except ImportError as e: raise ImportError (str(e) + "- required module not found") @@ -113,8 +112,10 @@ def __del__(self): if self.sfp_event: self.sfp_event.deinitialize() - if SFP.shared_sdk_handle: - deinitialize_sdk_handle(SFP.shared_sdk_handle) + if self._sfp_list: + from .sfp import SFP, deinitialize_sdk_handle + if SFP.shared_sdk_handle: + deinitialize_sdk_handle(SFP.shared_sdk_handle) ############################################## # PSU methods diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py b/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py index cd909231d1bc..17fe88037e06 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py @@ -17,7 +17,6 @@ import glob import os -from sonic_py_common import device_info from . import utils @@ -173,6 +172,7 @@ class DeviceDataManager: @classmethod @utils.read_only_cache() def get_platform_name(cls): + from sonic_py_common import device_info return device_info.get_platform() @classmethod From 7af4efacb72d8e76317cfa54d34b09cd2de0f200 Mon Sep 17 00:00:00 2001 From: Kebo Liu Date: Tue, 7 Jun 2022 20:05:54 +0800 Subject: [PATCH 016/259] [Mellanox] Update SN2201 sai profile and platform reboot script (#10978) - Why I did it 1. SN2201 sai profile needs to be updated according to the latest hardware. 2. In the reboot script, need to use the common symbol link of the power_cycle sysfs instead of directly accessing it due to SN2201 sysfs is different than other platforms. 3. echo 1 > $SYSFS_PWR_CYCLE will trigger the reboot immediately, the following sleep 3 and echo 0 > $SYSFS_PWR_CYCLE will never be executed, can be removed. - How I did it 1. Replace the SN2201 sai profile with the latest one. 2. In the platform_reboot script, replace the direct sysfs path with the symbol link path. 3. Remove the redundant code from platform_reboot - How to verify it Perform reboot on all the Nvidia platforms, and check all can be rebooted successfully. Signed-off-by: Kebo Liu --- .../x86_64-mlnx_msn2700-r0/platform_reboot | 4 +- .../ACS-SN2201/sai_2201.xml | 128 +++++++++--------- 2 files changed, 65 insertions(+), 67 deletions(-) diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/platform_reboot b/device/mellanox/x86_64-mlnx_msn2700-r0/platform_reboot index 7a38268ff09c..b2188fde6f5d 100755 --- a/device/mellanox/x86_64-mlnx_msn2700-r0/platform_reboot +++ b/device/mellanox/x86_64-mlnx_msn2700-r0/platform_reboot @@ -5,7 +5,7 @@ declare -r EXIT_ERROR="1" declare -r PENDING_COMPONENT_FW="/usr/bin/install-pending-fw.py" declare -r FW_UPGRADE_SCRIPT="/usr/bin/mlnx-fw-upgrade.sh" -declare -r SYSFS_PWR_CYCLE="/sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/pwr_cycle" +declare -r SYSFS_PWR_CYCLE="/var/run/hw-management/system/pwr_cycle" FORCE_REBOOT="no" @@ -24,8 +24,6 @@ function SafePwrCycle() { sync ; sync umount -fa > /dev/null 2&>1 echo 1 > $SYSFS_PWR_CYCLE - sleep 3 - echo 0 > $SYSFS_PWR_CYCLE } ParseArguments "$@" diff --git a/device/mellanox/x86_64-nvidia_sn2201-r0/ACS-SN2201/sai_2201.xml b/device/mellanox/x86_64-nvidia_sn2201-r0/ACS-SN2201/sai_2201.xml index d50843270cfd..8c57d2f20b6e 100644 --- a/device/mellanox/x86_64-nvidia_sn2201-r0/ACS-SN2201/sai_2201.xml +++ b/device/mellanox/x86_64-nvidia_sn2201-r0/ACS-SN2201/sai_2201.xml @@ -36,337 +36,337 @@ 0 0 - - 3 + + 131072 62 1 1 0 - 3 + 131072 63 1 2 0 - 3 + 131072 64 1 3 0 - 3 + 131072 57 1 4 0 - 3 + 131072 58 1 5 0 - 3 + 131072 59 1 6 0 - 3 + 131072 60 1 7 0 - 3 + 131072 53 1 8 0 - 3 + 131072 54 1 9 0 - 3 + 131072 55 1 10 0 - 3 + 131072 56 1 11 0 - 3 + 131072 49 1 12 0 - 3 + 131072 50 1 13 0 - 3 + 131072 51 1 14 0 - 3 + 131072 52 1 15 0 - 3 + 131072 45 1 16 0 - 3 + 131072 46 1 17 0 - 3 + 131072 47 1 18 0 - 3 + 131072 48 1 19 0 - 3 + 131072 41 1 20 0 - 3 + 131072 42 1 21 0 - 3 + 131072 43 1 22 0 - 3 + 131072 44 1 23 0 - 3 + 131072 37 1 24 0 - 3 + 131072 38 1 25 0 - 3 + 131072 39 1 26 0 - 3 + 131072 40 1 27 0 - 3 + 131072 33 1 28 0 - 3 + 131072 34 1 29 0 - 3 + 131072 35 1 30 0 - 3 + 131072 36 1 31 0 - 3 + 131072 1 1 32 0 - 3 + 131072 2 1 33 0 - 3 + 131072 3 1 34 0 - 3 + 131072 4 1 35 0 - 3 + 131072 - 5 + 21 1 36 0 - 3 + 131072 - 6 + 22 1 37 0 - 3 + 131072 - 17 + 23 1 38 0 - 3 + 131072 - 18 + 24 1 39 0 - 3 + 131072 - 19 + 25 1 40 0 - 3 + 131072 - 20 + 26 1 41 0 - 3 + 131072 - 21 + 27 1 42 0 - 3 + 131072 - 22 + 28 1 43 0 - 3 + 131072 - 23 + 29 1 44 0 - 3 + 131072 - 24 + 30 1 45 0 - 3 + 131072 - 25 + 31 1 46 0 - 3 + 131072 - 26 + 32 1 47 0 - 3 + 131072 9 @@ -376,21 +376,21 @@ 11534336 - 7 + 5 4 49 3 11534336 - 13 + 17 4 50 3 11534336 - 11 + 13 4 51 3 From e853f8e7ff8960d05d7ffede75334505af03a1a0 Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Mon, 6 Jun 2022 19:35:53 +0800 Subject: [PATCH 017/259] [Build]: Fix the version files for armhf/arm64 not used issue (#11021) Why I did it [Build]: Fix the version files in host-base-image for armhf/arm64 not used issue --- scripts/build_debian_base_system.sh | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/scripts/build_debian_base_system.sh b/scripts/build_debian_base_system.sh index 72e3779ff3e2..0e00eeeac532 100755 --- a/scripts/build_debian_base_system.sh +++ b/scripts/build_debian_base_system.sh @@ -48,11 +48,20 @@ fi ARCH=$(dpkg --print-architecture) DISTRO=$(grep CODENAME /etc/os-release | cut -d= -f2) if [ "$ARCH" != "$CONFIGURED_ARCH" ] || [ "$DISTRO" != "$IMAGE_DISTRO" ]; then - "Not support to build different ARCH/DISTRO ${CONFIGURED_ARCH}:${$IMAGE_DISTRO} in ${ARCH}:${DISTRO}." + "Not support to build different ARCH/DISTRO ${CONFIGURED_ARCH}:${IMAGE_DISTRO} in ${ARCH}:${DISTRO}." exit 1 fi -BASE_VERSIONS=files/build/versions/host-base-image/versions-deb-${IMAGE_DISTRO} +# Generate the version files for the host base image +TEMP_DIR=$(mktemp -d) +./scripts/versions_manager.py generate -t $TEMP_DIR -n host-base-image -d $IMAGE_DISTRO -a $CONFIGURED_ARCH +PACKAGES=$(sed -E 's/=(=[^=]*)$/\1/' $TEMP_DIR/version-deb) +if [ -z "$PACKAGES" ]; then + echo "Not found host-base-image packages, please check the version files in files/build/versions/host-base-image" 2>&1 + exit 1 +fi +rm -rf $TEMP_DIR + BASEIMAGE_TARBALLPATH=$TARGET/baseimage BASEIMAGE_TARBALL=$(realpath -e $TARGET)/baseimage.tgz @@ -69,7 +78,6 @@ DEBOOTSTRAP_REQUIRED=$TARGET_DEBOOTSTRAP/required mkdir -p $ARCHIEVES mkdir -p $APTLIST mkdir -p $TARGET_DEBOOTSTRAP -PACKAGES=$(sed -E 's/=(=[^=]*)$/\1/' $BASE_VERSIONS) URL_ARR=$(apt-get download --print-uris $PACKAGES | cut -d" " -f1 | tr -d "'") PACKAGE_ARR=($PACKAGES) LENGTH=${#PACKAGE_ARR[@]} @@ -80,7 +88,7 @@ do encoded_packagename=$(urlencode $packagename) url=$(echo "$URL_ARR" | grep -i "/${packagename}_\|/${encoded_packagename}_") if [ -z "$url" ] || [[ $(echo "$url" | wc -l) -gt 1 ]]; then - echo "No found package or found multiple package for package $packagename, url: $url" 2>&1 + echo "No found package or found multiple package for package $packagename, url: $url" 1>&2 exit 1 fi filename=$(basename "$url") From 40a421913a652cca655971eb98b53e0de7535055 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Wed, 8 Jun 2022 18:00:37 -0700 Subject: [PATCH 018/259] [makefile] remove all fsroot folders (#11030) Why I did it Make reset didn't clean-up all fsroot folders. How I did it Remove all fsroot folders used during build. How to verify it Run local build and local make reset: sudo mkdir fsroot-test sudo touch fsroot-test/foo make reset (Without this change, make reset cannot remove fsroot-foo, with the change, the repo become clean after make reset.) Signed-off-by: Ying Xie ying.xie@microsoft.com --- Makefile.work | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.work b/Makefile.work index c1a6555cc5bc..ba01e27fd02d 100644 --- a/Makefile.work +++ b/Makefile.work @@ -463,7 +463,7 @@ reset : @read ans && ( if [ $$ans == y ]; then echo "Resetting local repository. Please wait..."; - $(DOCKER_RUN) $(SLAVE_IMAGE):$(SLAVE_TAG) sudo rm -rf fsroot; + sudo rm -rf fsroot*; if [ "$(MULTIARCH_QEMU_ENVIRON)" == y ] && [[ "$(CONFIGURED_ARCH)" == "armhf" || "$(CONFIGURED_ARCH)" == "arm64" ]]; then echo "Stopping march $(CONFIGURED_ARCH) docker" sudo kill -9 `sudo cat /var/run/march/docker.pid` || true From c7d8f51c6826f5f14e66bd03a3ae13d5a244327f Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Fri, 10 Jun 2022 07:42:43 -0700 Subject: [PATCH 019/259] [202205][linkmgrd][sairedis] advance submodule head (#11091) linkmgrd: * 2da783b 2022-06-07 | Check self's mux mode before switching peer to standby & add support for `detach` mode (#79) (HEAD -> 202205, github/202205) [Jing Zhang] sairedis: * 54642c7 2022-06-09 | [counter] Fix port flex counter (#1052) (HEAD -> 202205, github/202205) [Junhua Zhai] * b7f5f92 2022-06-06 | [ci] Paralize azure pipeline (#1054) [Shilong Liu] swss: * 77043fb 2022-06-09 | [fpmsyncd] don't manipulate route weight (#2321) (HEAD -> 202205, github/202205) [Ying Xie] * ae157f1 2022-06-10 | Fix test_warm_reboot issues blocking PR merge (#2309) (#2318) [Shilong Liu] Signed-off-by: Ying Xie --- src/linkmgrd | 2 +- src/sonic-sairedis | 2 +- src/sonic-swss | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/linkmgrd b/src/linkmgrd index d27ca81ec207..2da783bb4d83 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit d27ca81ec207be6767ea38cfcf3f181dcf889714 +Subproject commit 2da783bb4d8318d28434b0082642b8de2eb9b98d diff --git a/src/sonic-sairedis b/src/sonic-sairedis index f67bcddf15d3..54642c72bd47 160000 --- a/src/sonic-sairedis +++ b/src/sonic-sairedis @@ -1 +1 @@ -Subproject commit f67bcddf15d315a01ac4f3fafe14e9db2231c195 +Subproject commit 54642c72bd4787b0bf8abcad1e7f095bfa484701 diff --git a/src/sonic-swss b/src/sonic-swss index 7ff8f753ba9e..77043fb2564a 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 7ff8f753ba9e53231a3790996645849b5b4891d7 +Subproject commit 77043fb2564a98ff302d9363af47c532ea1121a5 From 921658c7a6715fccd0deaf6ee1417510f6210558 Mon Sep 17 00:00:00 2001 From: Saikrishna Arcot Date: Fri, 10 Jun 2022 07:40:37 -0700 Subject: [PATCH 020/259] Add ping to swss-layer docker (#11093) Signed-off-by: Saikrishna Arcot --- dockers/docker-swss-layer-bullseye/Dockerfile.j2 | 2 ++ dockers/docker-swss-layer-buster/Dockerfile.j2 | 2 ++ 2 files changed, 4 insertions(+) diff --git a/dockers/docker-swss-layer-bullseye/Dockerfile.j2 b/dockers/docker-swss-layer-bullseye/Dockerfile.j2 index 15f0e0edcc4a..cd250698dace 100644 --- a/dockers/docker-swss-layer-bullseye/Dockerfile.j2 +++ b/dockers/docker-swss-layer-bullseye/Dockerfile.j2 @@ -6,6 +6,8 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update +RUN apt-get install iputils-ping + {% if docker_swss_layer_bullseye_debs.strip() -%} # Copy locally-built Debian package dependencies {{ copy_files("debs/", docker_swss_layer_bullseye_debs.split(' '), "/debs/") }} diff --git a/dockers/docker-swss-layer-buster/Dockerfile.j2 b/dockers/docker-swss-layer-buster/Dockerfile.j2 index 36f085936dcf..a86b72941858 100644 --- a/dockers/docker-swss-layer-buster/Dockerfile.j2 +++ b/dockers/docker-swss-layer-buster/Dockerfile.j2 @@ -6,6 +6,8 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update +RUN apt-get install iputils-ping + {% if docker_swss_layer_buster_debs.strip() -%} # Copy locally-built Debian package dependencies {{ copy_files("debs/", docker_swss_layer_buster_debs.split(' '), "/debs/") }} From 933e0d11dfc90daf768a1da4d1eb68cbd1bc7d75 Mon Sep 17 00:00:00 2001 From: Shilong Liu Date: Mon, 13 Jun 2022 11:15:00 +0800 Subject: [PATCH 021/259] [build] Fix issue between reproducible build and dood. (#11084) --- scripts/collect_docker_version_files.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/collect_docker_version_files.sh b/scripts/collect_docker_version_files.sh index 73f0a9b53198..546d8458f259 100755 --- a/scripts/collect_docker_version_files.sh +++ b/scripts/collect_docker_version_files.sh @@ -5,7 +5,7 @@ TARGET_PATH=$2 [ -z "$TARGET_PATH" ] && TARGET_PATH=./target -DOCKER_IMAGE_NAME=$(echo $DOCKER_IMAGE | cut -d: -f1) +DOCKER_IMAGE_NAME=$(echo $DOCKER_IMAGE | cut -d: -f1 | sed "s/-$DOCKER_USERNAME\$//") DOCKER_CONTAINER=$DOCKER_IMAGE_NAME TARGET_VERSIONS_PATH=$TARGET_PATH/versions/dockers/$DOCKER_IMAGE_NAME From 3467f434e8995c3f6312cb37fdc3547ae2308072 Mon Sep 17 00:00:00 2001 From: "Richard.Yu" Date: Sat, 11 Jun 2022 02:14:45 +0800 Subject: [PATCH 022/259] [Tunnel PFC][Fix bug] Fix bug and Tests for adding property 'sai_remap_prio_on_tnl_egress' (#11027) * [Tunnel PFC] Tests for adding property 'sai_remap_prio_on_tnl_egress' Add tests for adding property 'sai_remap_prio_on_tnl_egress', this property should only be added in dual tor environment. Test done: Run test test_j2files.py Co-authored-by: richardyu --- .../Arista-7260CX3-D108C8/config.bcm.j2 | 2 +- .../tests/data/j2_template/config.bcm.j2 | 28 ++++++++ .../tests/data/j2_template/port_config.ini | 67 +++++++++++++++++++ .../py3/arista7050cx3-dualtor.config.bcm | 8 +++ .../py3/arista7260-dualtor.config.bcm | 8 +++ .../py3/arista7260-t1.config.bcm | 5 ++ src/sonic-config-engine/tests/test_j2files.py | 31 +++++++++ 7 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 src/sonic-config-engine/tests/data/j2_template/config.bcm.j2 create mode 100644 src/sonic-config-engine/tests/data/j2_template/port_config.ini create mode 100644 src/sonic-config-engine/tests/sample_output/py3/arista7050cx3-dualtor.config.bcm create mode 100644 src/sonic-config-engine/tests/sample_output/py3/arista7260-dualtor.config.bcm create mode 100644 src/sonic-config-engine/tests/sample_output/py3/arista7260-t1.config.bcm diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 index 145426e05915..1221cdc6691e 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 @@ -7,7 +7,7 @@ {%- set IPinIP_sock = 'sai_tunnel_support=1 sai_tunnel_underlay_route_mode=1 host_as_route_disable=1 - l3_ecmp_levels=2' -%} -%} + l3_ecmp_levels=2' -%} {%- set map_prio = 'sai_remap_prio_on_tnl_egress=1' -%} {%- endif %} {%- endif %} diff --git a/src/sonic-config-engine/tests/data/j2_template/config.bcm.j2 b/src/sonic-config-engine/tests/data/j2_template/config.bcm.j2 new file mode 100644 index 000000000000..187d40af2d4e --- /dev/null +++ b/src/sonic-config-engine/tests/data/j2_template/config.bcm.j2 @@ -0,0 +1,28 @@ +{# Construct config.bcm to include additional soc properties per specific device metadata requirement #} +{%- set mmu_sock = 'mmu_init_config="MSFT-TH2-Tier1"' -%} +{%- set IPinIP_sock = '' -%} +{%- set map_prio = '' -%} +{%- if DEVICE_METADATA is defined and DEVICE_METADATA['localhost'] is defined -%} +{%- if DEVICE_METADATA['localhost']['type'] is defined -%} +{%- set switch_role = DEVICE_METADATA['localhost']['type'] -%} +{%- if 'torrouter' in switch_role.lower() or 'torswitch' in switch_role.lower() %} +{%- set mmu_sock = 'mmu_init_config="MSFT-TH2-Tier0"' -%} +{%- endif %} +{%- endif %} +{%- if DEVICE_METADATA['localhost']['subtype'] is defined -%} +{%- set switch_subtype = DEVICE_METADATA['localhost']['subtype'] -%} +{%- if 'dualtor' in switch_subtype.lower() %} +{%- set IPinIP_sock = 'sai_tunnel_support=1 + sai_tunnel_underlay_route_mode=1 + host_as_route_disable=1 + l3_ecmp_levels=2' -%} +{%- set map_prio = 'sai_remap_prio_on_tnl_egress=1' -%} +{%- endif %} +{%- endif %} +{%- endif %} +{# The following is the common soc properties that used to be named "th2-a7260cx3-64-64x100G-t1.config.bcm" #} + +l3_alpm_hit_skip=1 +{{ map_prio }} +{{ mmu_sock }} +{{ IPinIP_sock }} diff --git a/src/sonic-config-engine/tests/data/j2_template/port_config.ini b/src/sonic-config-engine/tests/data/j2_template/port_config.ini new file mode 100644 index 000000000000..3940948a3541 --- /dev/null +++ b/src/sonic-config-engine/tests/data/j2_template/port_config.ini @@ -0,0 +1,67 @@ +# name lanes alias index speed +Ethernet0 77,78,79,80 Ethernet1/1 1 100000 +Ethernet4 65,66,67,68 Ethernet2/1 2 100000 +Ethernet8 85,86,87,88 Ethernet3/1 3 100000 +Ethernet12 89,90,91,92 Ethernet4/1 4 100000 +Ethernet16 109,110,111,112 Ethernet5/1 5 100000 +Ethernet20 97,98,99,100 Ethernet6/1 6 100000 +Ethernet24 5,6,7,8 Ethernet7/1 7 100000 +Ethernet28 13,14,15,16 Ethernet8/1 8 100000 +Ethernet32 25,26,27,28 Ethernet9/1 9 100000 +Ethernet36 21,22,23,24 Ethernet10/1 10 100000 +Ethernet40 37,38,39,40 Ethernet11/1 11 100000 +Ethernet44 45,46,47,48 Ethernet12/1 12 100000 +Ethernet48 57,58,59,60 Ethernet13/1 13 100000 +Ethernet52 53,54,55,56 Ethernet14/1 14 100000 +Ethernet56 117,118,119,120 Ethernet15/1 15 100000 +Ethernet60 121,122,123,124 Ethernet16/1 16 100000 +Ethernet64 141,142,143,144 Ethernet17/1 17 100000 +Ethernet68 133,134,135,136 Ethernet18/1 18 100000 +Ethernet72 197,198,199,200 Ethernet19/1 19 100000 +Ethernet76 205,206,207,208 Ethernet20/1 20 100000 +Ethernet80 217,218,219,220 Ethernet21/1 21 100000 +Ethernet84 213,214,215,216 Ethernet22/1 22 100000 +Ethernet88 229,230,231,232 Ethernet23/1 23 100000 +Ethernet92 237,238,239,240 Ethernet24/1 24 100000 +Ethernet96 249,250,251,252 Ethernet25/1 25 100000 +Ethernet100 245,246,247,248 Ethernet26/1 26 100000 +Ethernet104 149,150,151,152 Ethernet27/1 27 100000 +Ethernet108 153,154,155,156 Ethernet28/1 28 100000 +Ethernet112 173,174,175,176 Ethernet29/1 29 100000 +Ethernet116 161,162,163,164 Ethernet30/1 30 100000 +Ethernet120 181,182,183,184 Ethernet31/1 31 100000 +Ethernet124 185,186,187,188 Ethernet32/1 32 100000 +Ethernet128 69,70,71,72 Ethernet33/1 33 100000 +Ethernet132 73,74,75,76 Ethernet34/1 34 100000 +Ethernet136 93,94,95,96 Ethernet35/1 35 100000 +Ethernet140 81,82,83,84 Ethernet36/1 36 100000 +Ethernet144 101,102,103,104 Ethernet37/1 37 100000 +Ethernet148 105,106,107,108 Ethernet38/1 38 100000 +Ethernet152 9,10,11,12 Ethernet39/1 39 100000 +Ethernet156 1,2,3,4 Ethernet40/1 40 100000 +Ethernet160 17,18,19,20 Ethernet41/1 41 100000 +Ethernet164 29,30,31,32 Ethernet42/1 42 100000 +Ethernet168 41,42,43,44 Ethernet43/1 43 100000 +Ethernet172 33,34,35,36 Ethernet44/1 44 100000 +Ethernet176 49,50,51,52 Ethernet45/1 45 100000 +Ethernet180 61,62,63,64 Ethernet46/1 46 100000 +Ethernet184 125,126,127,128 Ethernet47/1 47 100000 +Ethernet188 113,114,115,116 Ethernet48/1 48 100000 +Ethernet192 129,130,131,132 Ethernet49/1 49 100000 +Ethernet196 137,138,139,140 Ethernet50/1 50 100000 +Ethernet200 201,202,203,204 Ethernet51/1 51 100000 +Ethernet204 193,194,195,196 Ethernet52/1 52 100000 +Ethernet208 209,210,211,212 Ethernet53/1 53 100000 +Ethernet212 221,222,223,224 Ethernet54/1 54 100000 +Ethernet216 233,234,235,236 Ethernet55/1 55 100000 +Ethernet220 225,226,227,228 Ethernet56/1 56 100000 +Ethernet224 241,242,243,244 Ethernet57/1 57 100000 +Ethernet228 253,254,255,256 Ethernet58/1 58 100000 +Ethernet232 157,158,159,160 Ethernet59/1 59 100000 +Ethernet236 145,146,147,148 Ethernet60/1 60 100000 +Ethernet240 165,166,167,168 Ethernet61/1 61 100000 +Ethernet244 169,170,171,172 Ethernet62/1 62 100000 +Ethernet248 189,190,191,192 Ethernet63/1 63 100000 +Ethernet252 177,178,179,180 Ethernet64/1 64 100000 +Ethernet256 257 Ethernet65 65 10000 +Ethernet260 259 Ethernet66 66 10000 diff --git a/src/sonic-config-engine/tests/sample_output/py3/arista7050cx3-dualtor.config.bcm b/src/sonic-config-engine/tests/sample_output/py3/arista7050cx3-dualtor.config.bcm new file mode 100644 index 000000000000..7d21ac82f120 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/arista7050cx3-dualtor.config.bcm @@ -0,0 +1,8 @@ + +l3_alpm_hit_skip=1 +sai_remap_prio_on_tnl_egress=1 +mmu_init_config="MSFT-TH2-Tier0" +sai_tunnel_support=1 + sai_tunnel_underlay_route_mode=1 + host_as_route_disable=1 + l3_ecmp_levels=2 diff --git a/src/sonic-config-engine/tests/sample_output/py3/arista7260-dualtor.config.bcm b/src/sonic-config-engine/tests/sample_output/py3/arista7260-dualtor.config.bcm new file mode 100644 index 000000000000..7d21ac82f120 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/arista7260-dualtor.config.bcm @@ -0,0 +1,8 @@ + +l3_alpm_hit_skip=1 +sai_remap_prio_on_tnl_egress=1 +mmu_init_config="MSFT-TH2-Tier0" +sai_tunnel_support=1 + sai_tunnel_underlay_route_mode=1 + host_as_route_disable=1 + l3_ecmp_levels=2 diff --git a/src/sonic-config-engine/tests/sample_output/py3/arista7260-t1.config.bcm b/src/sonic-config-engine/tests/sample_output/py3/arista7260-t1.config.bcm new file mode 100644 index 000000000000..84a917290f24 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/arista7260-t1.config.bcm @@ -0,0 +1,5 @@ + +l3_alpm_hit_skip=1 + +mmu_init_config="MSFT-TH2-Tier1" + diff --git a/src/sonic-config-engine/tests/test_j2files.py b/src/sonic-config-engine/tests/test_j2files.py index e18f0e165eda..8bcb523c2799 100644 --- a/src/sonic-config-engine/tests/test_j2files.py +++ b/src/sonic-config-engine/tests/test_j2files.py @@ -332,6 +332,37 @@ def test_qos_dscp_remapping_render_template(self): assert utils.cmp(sample_output_file, test_output) os.remove(test_output) + def test_config_brcm_render_template(self): + if utils.PYvX_DIR != 'py3': + #Skip on python2 as the change will not be backported to previous version + return + + config_bcm_sample_outputs = [ + 'arista7050cx3-dualtor.config.bcm', + 'arista7260-dualtor.config.bcm', + 'arista7260-t1.config.bcm' + ] + sample_minigraph_files = [ + 'sample-arista-7050cx3-dualtor-minigraph.xml', + 'sample-arista-7260-dualtor-minigraph.xml', + 'sample-arista-7260-t1-minigraph.xml' + ] + for i, config in enumerate(config_bcm_sample_outputs): + device_template_path = os.path.join(self.test_dir, './data/j2_template') + config_sample_output = config_bcm_sample_outputs[i] + sample_minigraph_file = os.path.join(self.test_dir,sample_minigraph_files[i]) + port_config_ini_file = os.path.join(device_template_path, 'port_config.ini') + config_bcm_file = os.path.join(device_template_path, 'config.bcm.j2') + config_test_output = os.path.join(self.test_dir, 'config_output.bcm') + + argument = '-m ' + sample_minigraph_file + ' -p ' + port_config_ini_file + ' -t ' + config_bcm_file + ' > ' + config_test_output + self.run_script(argument) + + #check output config.bcm + config_sample_output_file = os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, config_sample_output) + assert utils.cmp(config_sample_output_file, config_test_output) + os.remove(config_test_output) + def _test_buffers_render_template(self, vendor, platform, sku, minigraph, buffer_template, expected): dir_path = os.path.join(self.test_dir, '..', '..', '..', 'device', vendor, platform, sku) buffers_file = os.path.join(dir_path, buffer_template) From a4c82906373c4fdc019d4c9deb065bb7efc3e256 Mon Sep 17 00:00:00 2001 From: StormLiangMS <89824293+StormLiangMS@users.noreply.github.com> Date: Thu, 16 Jun 2022 08:03:49 +0800 Subject: [PATCH 023/259] [202205] [submodule] Advanced sonic-swss (#11137) submodule advance Commit included: 54a9828 - (HEAD, public/202205) Combine PGs in buffermgrd (https://github.com/Azure/sonic-buildimage/pull/2281) (https://github.com/Azure/sonic-buildimage/pull/2329) (6 minutes ago) --- src/sonic-swss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-swss b/src/sonic-swss index 77043fb2564a..54a9828a6d32 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 77043fb2564a98ff302d9363af47c532ea1121a5 +Subproject commit 54a9828a6d32013115a33b7b8b92e29e8990a2aa From 8fc5c9b31f92ed7ac50a08b22f75d0d825b9d877 Mon Sep 17 00:00:00 2001 From: judyjoseph <53951155+judyjoseph@users.noreply.github.com> Date: Thu, 9 Jun 2022 15:32:24 -0700 Subject: [PATCH 024/259] Cleanup macsec stateDB tables on restart (#11066) Clean macsec tables in STATE_DB on start --- files/scripts/swss.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/scripts/swss.sh b/files/scripts/swss.sh index 000790c6d051..5b2772eafac4 100755 --- a/files/scripts/swss.sh +++ b/files/scripts/swss.sh @@ -176,7 +176,7 @@ start() { $SONIC_DB_CLI GB_ASIC_DB FLUSHDB $SONIC_DB_CLI GB_COUNTERS_DB FLUSHDB $SONIC_DB_CLI RESTAPI_DB FLUSHDB - clean_up_tables STATE_DB "'PORT_TABLE*', 'MGMT_PORT_TABLE*', 'VLAN_TABLE*', 'VLAN_MEMBER_TABLE*', 'LAG_TABLE*', 'LAG_MEMBER_TABLE*', 'INTERFACE_TABLE*', 'MIRROR_SESSION*', 'VRF_TABLE*', 'FDB_TABLE*', 'FG_ROUTE_TABLE*', 'BUFFER_POOL*', 'BUFFER_PROFILE*', 'MUX_CABLE_TABLE*', 'ADVERTISE_NETWORK_TABLE*', 'VXLAN_TUNNEL_TABLE*'" + clean_up_tables STATE_DB "'PORT_TABLE*', 'MGMT_PORT_TABLE*', 'VLAN_TABLE*', 'VLAN_MEMBER_TABLE*', 'LAG_TABLE*', 'LAG_MEMBER_TABLE*', 'INTERFACE_TABLE*', 'MIRROR_SESSION*', 'VRF_TABLE*', 'FDB_TABLE*', 'FG_ROUTE_TABLE*', 'BUFFER_POOL*', 'BUFFER_PROFILE*', 'MUX_CABLE_TABLE*', 'ADVERTISE_NETWORK_TABLE*', 'VXLAN_TUNNEL_TABLE*', 'MACSEC_PORT_TABLE*', 'MACSEC_INGRESS_SA_TABLE*', 'MACSEC_EGRESS_SA_TABLE*', 'MACSEC_INGRESS_SC_TABLE*', 'MACSEC_EGRESS_SC_TABLE*'" $SONIC_DB_CLI APPL_STATE_DB FLUSHDB fi From b2685736e0959806e952cd1bb8ecd8856df84e54 Mon Sep 17 00:00:00 2001 From: Jon Goldberg <63672455+jon-nokia@users.noreply.github.com> Date: Tue, 14 Jun 2022 11:56:27 -0400 Subject: [PATCH 025/259] [installer]: fix armhf for installer.conf usage (#11121) This fixes the build for armhf to be able to use '/device///installer.conf' files. Specifically, armhf needs support to be able to change the size of /var/log/ directory. It is hardcoded to 512 bytes on all armhf platforms currently. This change will allow any armhf platform to be able to use an installer.conf file to customize the installed image. --- build_image.sh | 8 ++++---- platform/marvell-armhf/platform.conf | 5 ++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/build_image.sh b/build_image.sh index 0963ff4a4843..69ea4ddf56ca 100755 --- a/build_image.sh +++ b/build_image.sh @@ -71,12 +71,12 @@ generate_onie_installer_image() output_file=$OUTPUT_ONIE_IMAGE [ -n "$1" ] && output_file=$1 # Copy platform-specific ONIE installer config files where onie-mk-demo.sh expects them - rm -rf ./installer/x86_64/platforms/ - mkdir -p ./installer/x86_64/platforms/ + rm -rf ./installer/${TARGET_PLATFORM}/platforms/ + mkdir -p ./installer/${TARGET_PLATFORM}/platforms/ for VENDOR in `ls ./device`; do - for PLATFORM in `ls ./device/$VENDOR`; do + for PLATFORM in `ls ./device/$VENDOR | grep ^${TARGET_PLATFORM}`; do if [ -f ./device/$VENDOR/$PLATFORM/installer.conf ]; then - cp ./device/$VENDOR/$PLATFORM/installer.conf ./installer/x86_64/platforms/$PLATFORM + cp ./device/$VENDOR/$PLATFORM/installer.conf ./installer/${TARGET_PLATFORM}/platforms/$PLATFORM fi done diff --git a/platform/marvell-armhf/platform.conf b/platform/marvell-armhf/platform.conf index df71c5d1b128..2f2a22cd8640 100644 --- a/platform/marvell-armhf/platform.conf +++ b/platform/marvell-armhf/platform.conf @@ -9,7 +9,6 @@ kernel_addr=0x1100000 fdt_addr=0x1000000 fdt_high=0x10fffff initrd_addr=0x2000000 -VAR_LOG=512 kernel_fname="/boot/vmlinuz-5.10.0-12-2-armmp" initrd_fname="/boot/initrd.img-5.10.0-12-2-armmp" @@ -147,8 +146,8 @@ prepare_boot_menu() { BORDER='echo "---------------------------------------------------";echo;' fw_setenv ${FW_ARG} print_menu $BORDER $BOOT1 $BOOT2 $BOOT3 $BORDER > /dev/null - fw_setenv ${FW_ARG} linuxargs "net.ifnames=0 loopfstype=squashfs loop=$image_dir/$FILESYSTEM_SQUASHFS systemd.unified_cgroup_hierarchy=0 varlog_size=$VAR_LOG loglevel=4 ${extra_cmdline_linux}" > /dev/null - fw_setenv ${FW_ARG} linuxargs_old "net.ifnames=0 loopfstype=squashfs loop=$image_dir_old/$FILESYSTEM_SQUASHFS systemd.unified_cgroup_hierarchy=0 varlog_size=$VAR_LOG loglevel=4" > /dev/null + fw_setenv ${FW_ARG} linuxargs "net.ifnames=0 loopfstype=squashfs loop=$image_dir/$FILESYSTEM_SQUASHFS systemd.unified_cgroup_hierarchy=0 varlog_size=$VAR_LOG_SIZE loglevel=4 ${extra_cmdline_linux}" > /dev/null + fw_setenv ${FW_ARG} linuxargs_old "net.ifnames=0 loopfstype=squashfs loop=$image_dir_old/$FILESYSTEM_SQUASHFS systemd.unified_cgroup_hierarchy=0 varlog_size=$VAR_LOG_SIZE loglevel=4" > /dev/null # Set boot configs fw_setenv ${FW_ARG} kernel_addr $kernel_addr > /dev/null From 3f12919deee1fd7e3496a59e6c9d3a024dc0a45e Mon Sep 17 00:00:00 2001 From: Jon Goldberg <63672455+jon-nokia@users.noreply.github.com> Date: Tue, 14 Jun 2022 11:57:33 -0400 Subject: [PATCH 026/259] [Nokia ixs7215] change var/log size to 4GB (#11122) This makes use of #11121 to add support for configuration of VAR_LOG_SIZE on Nokia IXS7215 --- device/nokia/armhf-nokia_ixs7215_52x-r0/installer.conf | 1 + 1 file changed, 1 insertion(+) create mode 100644 device/nokia/armhf-nokia_ixs7215_52x-r0/installer.conf diff --git a/device/nokia/armhf-nokia_ixs7215_52x-r0/installer.conf b/device/nokia/armhf-nokia_ixs7215_52x-r0/installer.conf new file mode 100644 index 000000000000..b138f294e1ea --- /dev/null +++ b/device/nokia/armhf-nokia_ixs7215_52x-r0/installer.conf @@ -0,0 +1 @@ +VAR_LOG_SIZE=4096 From ae90bfae4bad0f1161983e5d50971eb9e328e86f Mon Sep 17 00:00:00 2001 From: zitingguo-ms <736034564@qq.com> Date: Thu, 16 Jun 2022 08:29:45 +0800 Subject: [PATCH 027/259] [AN/LT][Fix bug]:enable phy_an_lt_msft attribute on some platforms (#11147) --- .../Arista-7050CX3-32S-C32/config.bcm.j2 | 1 + .../Arista-7050CX3-32S-D48C8/config.bcm.j2 | 1 + .../Arista-7060CX-32S-C32/th-a7060-cx32s-32x100G-t1.config.bcm | 1 + .../th-a7060-cx32s-8x100G+48x50G.config.bcm | 1 + .../th-a7060-cx32s-8x100G+24x40G.config.bcm | 1 + .../Arista-7060CX-32S-Q32/th-a7060-cx32s-32x40G-t0.config.bcm | 1 + .../Arista-7060CX-32S-Q32/th-a7060-cx32s-32x40G-t1.config.bcm | 1 + .../th-a7060-cx32s-8x100G+96x25G.config.bcm | 1 + .../x86_64-arista_7260cx3_64/Arista-7260CX3-C64/config.bcm.j2 | 1 + .../x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 | 1 + .../x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/config.bcm.j2 | 1 + .../Celestica-DX010-C32/th-seastone-dx010-32x100G-t0.config.bcm | 1 + .../Celestica-DX010-C32/th-seastone-dx010-32x100G-t1.config.bcm | 1 + .../th-seastone-dx010-48x50G+8x100G.config.bcm | 1 + src/sonic-device-data/tests/permitted_list | 1 + 15 files changed, 15 insertions(+) diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/config.bcm.j2 b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/config.bcm.j2 index 89a55175edc8..3f81bfcc9951 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/config.bcm.j2 +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/config.bcm.j2 @@ -527,3 +527,4 @@ serdes_preemphasis_123=0x14410a serdes_preemphasis_127=0x14410a serdes_driver_current_130=0xe serdes_preemphasis_130=0x102804 +phy_an_lt_msft=1 diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/config.bcm.j2 b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/config.bcm.j2 index 9f523e506660..da09c09b167e 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/config.bcm.j2 +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/config.bcm.j2 @@ -570,3 +570,4 @@ serdes_preemphasis_123=0x85804 serdes_preemphasis_125=0x85804 serdes_preemphasis_127=0x85804 serdes_preemphasis_129=0x85804 +phy_an_lt_msft=1 diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/th-a7060-cx32s-32x100G-t1.config.bcm b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/th-a7060-cx32s-32x100G-t1.config.bcm index 63846c22b3fe..f082229dc5e4 100644 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/th-a7060-cx32s-32x100G-t1.config.bcm +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/th-a7060-cx32s-32x100G-t1.config.bcm @@ -450,3 +450,4 @@ serdes_driver_current_109=0xa serdes_preemphasis_109=0x284008 mmu_init_config="MSFT-TH-Tier1" +phy_an_lt_msft=1 diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/th-a7060-cx32s-8x100G+48x50G.config.bcm b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/th-a7060-cx32s-8x100G+48x50G.config.bcm index f7460e8b23f7..932fb369df13 100644 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/th-a7060-cx32s-8x100G+48x50G.config.bcm +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/th-a7060-cx32s-8x100G+48x50G.config.bcm @@ -551,3 +551,4 @@ serdes_driver_current_115=0xa serdes_preemphasis_115=0x284008 mmu_init_config="MSFT-TH-Tier0" +phy_an_lt_msft=1 diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/th-a7060-cx32s-8x100G+24x40G.config.bcm b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/th-a7060-cx32s-8x100G+24x40G.config.bcm index 2be9e3187ea8..3d9d632178e6 100644 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/th-a7060-cx32s-8x100G+24x40G.config.bcm +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/th-a7060-cx32s-8x100G+24x40G.config.bcm @@ -450,3 +450,4 @@ serdes_driver_current_109=0x4 serdes_preemphasis_109=0x145c00 mmu_init_config="MSFT-TH-Tier1" +phy_an_lt_msft=1 diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/th-a7060-cx32s-32x40G-t0.config.bcm b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/th-a7060-cx32s-32x40G-t0.config.bcm index e82627d6086a..568457ac6e79 100644 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/th-a7060-cx32s-32x40G-t0.config.bcm +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/th-a7060-cx32s-32x40G-t0.config.bcm @@ -448,3 +448,4 @@ serdes_driver_current_109=0x4 serdes_preemphasis_109=0x145c00 mmu_init_config="MSFT-TH-Tier0" +phy_an_lt_msft=1 diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/th-a7060-cx32s-32x40G-t1.config.bcm b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/th-a7060-cx32s-32x40G-t1.config.bcm index 90061ce680c8..9b0dc219307f 100644 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/th-a7060-cx32s-32x40G-t1.config.bcm +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/th-a7060-cx32s-32x40G-t1.config.bcm @@ -448,3 +448,4 @@ serdes_driver_current_109=0x4 serdes_preemphasis_109=0x145c00 mmu_init_config="MSFT-TH-Tier1" +phy_an_lt_msft=1 diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-T96C8/th-a7060-cx32s-8x100G+96x25G.config.bcm b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-T96C8/th-a7060-cx32s-8x100G+96x25G.config.bcm index 6827156a1c7e..a9be3a5cae5d 100644 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-T96C8/th-a7060-cx32s-8x100G+96x25G.config.bcm +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-T96C8/th-a7060-cx32s-8x100G+96x25G.config.bcm @@ -784,3 +784,4 @@ serdes_driver_current_126=0xa serdes_preemphasis_126=0x284008 serdes_driver_current_127=0xa serdes_preemphasis_127=0x284008 +phy_an_lt_msft=1 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/config.bcm.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/config.bcm.j2 index 90d57545c099..7ad0311ab888 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/config.bcm.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/config.bcm.j2 @@ -1041,3 +1041,4 @@ serdes_preemphasis_117=0x133c06 {{ mmu_sock }} {{ IPinIP_sock }} +phy_an_lt_msft=1 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 index 1221cdc6691e..642b36312d5c 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 @@ -952,3 +952,4 @@ serdes_preemphasis_131=0x580c mmu_init_config="MSFT-TH2-Tier0" {{ IPinIP_sock }} +phy_an_lt_msft=1 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/config.bcm.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/config.bcm.j2 index 78194a75830e..5ff359e06b72 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/config.bcm.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/config.bcm.j2 @@ -1040,3 +1040,4 @@ serdes_preemphasis_117=0x105004 {{ mmu_sock }} {{ IPinIP_sock }} +phy_an_lt_msft=1 diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/th-seastone-dx010-32x100G-t0.config.bcm b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/th-seastone-dx010-32x100G-t0.config.bcm index f3a381563349..e5e60d51b326 100644 --- a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/th-seastone-dx010-32x100G-t0.config.bcm +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/th-seastone-dx010-32x100G-t0.config.bcm @@ -380,3 +380,4 @@ phy_xaui_tx_polarity_flip_130=0x0006 phy_xaui_rx_polarity_flip_130=0x0000 mmu_init_config="MSFT-TH-Tier0" +phy_an_lt_msft=1 diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/th-seastone-dx010-32x100G-t1.config.bcm b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/th-seastone-dx010-32x100G-t1.config.bcm index c3c755f4e446..3ff49d672fc2 100644 --- a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/th-seastone-dx010-32x100G-t1.config.bcm +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/th-seastone-dx010-32x100G-t1.config.bcm @@ -700,3 +700,4 @@ serdes_preemphasis_lane2_130=0x2b4104 serdes_preemphasis_lane3_130=0x2b4104 mmu_init_config="MSFT-TH-Tier1" +phy_an_lt_msft=1 diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/th-seastone-dx010-48x50G+8x100G.config.bcm b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/th-seastone-dx010-48x50G+8x100G.config.bcm index 2cb58079f423..787cce0d986c 100644 --- a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/th-seastone-dx010-48x50G+8x100G.config.bcm +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/th-seastone-dx010-48x50G+8x100G.config.bcm @@ -652,3 +652,4 @@ serdes_preemphasis_lane1_5=0x244a02 serdes_preemphasis_lane2_5=0x244a02 serdes_preemphasis_lane3_5=0x254902 +phy_an_lt_msft=1 diff --git a/src/sonic-device-data/tests/permitted_list b/src/sonic-device-data/tests/permitted_list index e1a651569b84..74f24bc537e0 100644 --- a/src/sonic-device-data/tests/permitted_list +++ b/src/sonic-device-data/tests/permitted_list @@ -313,3 +313,4 @@ port_gmii_mode phy_force_firmware_load phy_pcs_repeater l3_alpm_hit_skip +phy_an_lt_msft From 1817c325d3200ea51d368121966765e0fc8da892 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Thu, 16 Jun 2022 23:33:23 +0800 Subject: [PATCH 028/259] [ci/build]: Upgrade SONiC package versions (#11060) Co-authored-by: mssonicbld --- .../build-sonic-slave-bullseye/versions-git | 8 +- files/build/versions/default/versions-git | 10 +- .../versions-deb-bullseye | 81 +++ .../dockers/docker-base-bullseye/versions-py3 | 6 + .../docker-base-buster/versions-deb-buster | 71 +++ .../dockers/docker-base-buster/versions-py3 | 6 + .../dockers/docker-base-buster/versions-web | 1 + .../versions-deb-bullseye | 60 +++ .../versions-deb-bullseye-arm64 | 8 + .../versions-deb-bullseye-armhf | 8 + .../versions-py3 | 15 + .../versions-deb-buster | 54 ++ .../versions-deb-buster-arm64 | 11 + .../versions-deb-buster-armhf | 11 + .../docker-config-engine-buster/versions-py3 | 15 + .../docker-database/versions-deb-bullseye | 26 + .../docker-dhcp-relay/versions-deb-bullseye | 39 ++ .../docker-fpm-frr/versions-deb-buster | 40 ++ .../dockers/docker-fpm-frr/versions-py3 | 1 + .../docker-gbsyncd-credo/versions-deb-buster | 23 + .../docker-gbsyncd-vs/versions-deb-buster | 26 + .../dockers/docker-lldp/versions-deb-buster | 31 ++ .../docker-macsec/versions-deb-bullseye | 34 ++ .../dockers/docker-mux/versions-deb-bullseye | 31 ++ .../dockers/docker-nat/versions-deb-buster | 28 + .../docker-orchagent/versions-deb-bullseye | 86 +++ .../versions-deb-bullseye-arm64 | 1 + .../versions-deb-bullseye-armhf | 1 + .../dockers/docker-orchagent/versions-py3 | 2 + .../versions-deb-bullseye | 141 +++++ .../versions-deb-bullseye-arm64 | 1 + .../versions-deb-bullseye-armhf | 1 + .../docker-platform-monitor/versions-py3 | 11 + .../dockers/docker-ptf/versions-deb-buster | 491 ++++++++++++++++++ .../versions/dockers/docker-ptf/versions-py2 | 69 +++ .../versions/dockers/docker-ptf/versions-py3 | 30 ++ .../versions-deb-bullseye | 26 + .../dockers/docker-sflow/versions-deb-buster | 22 + .../dockers/docker-snmp/versions-deb-buster | 67 +++ .../docker-snmp/versions-deb-buster-arm64 | 1 + .../docker-snmp/versions-deb-buster-armhf | 1 + .../versions/dockers/docker-snmp/versions-py3 | 4 + .../versions-deb-buster | 26 + .../docker-sonic-mgmt-framework/versions-py3 | 26 + .../versions-deb-bullseye | 27 + .../docker-sonic-vs/versions-deb-buster | 215 ++++++++ .../dockers/docker-sonic-vs/versions-py2 | 13 + .../dockers/docker-sonic-vs/versions-py3 | 34 ++ .../versions-deb-bullseye | 6 + .../versions-deb-buster | 5 + .../docker-syncd-bfn-rpc/versions-deb-buster | 71 +++ .../dockers/docker-syncd-bfn-rpc/versions-py2 | 5 + .../docker-syncd-bfn/versions-deb-buster | 25 + .../versions-deb-buster | 76 +++ .../docker-syncd-brcm-dnx-rpc/versions-py2 | 5 + .../docker-syncd-brcm-dnx-rpc/versions-web | 2 + .../docker-syncd-brcm-dnx/versions-deb-buster | 28 + .../docker-syncd-brcm-rpc/versions-deb-buster | 76 +++ .../docker-syncd-brcm-rpc/versions-py2 | 5 + .../docker-syncd-brcm-rpc/versions-web | 2 + .../docker-syncd-brcm/versions-deb-buster | 29 ++ .../versions-deb-buster | 78 +++ .../docker-syncd-centec-rpc/versions-py2 | 5 + .../docker-syncd-centec/versions-deb-buster | 24 + .../versions-deb-buster-arm64 | 37 ++ .../versions-deb-bullseye | 71 +++ .../docker-syncd-mlnx-rpc/versions-py2 | 6 + .../docker-syncd-mlnx/versions-deb-bullseye | 73 +++ .../dockers/docker-syncd-mlnx/versions-py3 | 1 + .../versions-deb-buster-armhf | 41 ++ .../docker-syncd-vs/versions-deb-buster | 28 + .../dockers/docker-teamd/versions-deb-buster | 22 + .../versions-deb-bullseye | 14 +- .../versions-deb-bullseye-arm64 | 7 +- .../versions-deb-bullseye-armhf | 7 +- .../dockers/sonic-slave-bullseye/versions-git | 2 +- .../sonic-slave-buster/versions-deb-buster | 2 +- .../dockers/sonic-slave-buster/versions-git | 2 +- .../sonic-slave-stretch/versions-deb-stretch | 14 +- .../dockers/sonic-slave-stretch/versions-git | 2 +- .../versions/host-image/versions-deb-bullseye | 2 +- files/build/versions/host-image/versions-py3 | 2 +- 82 files changed, 2680 insertions(+), 35 deletions(-) create mode 100644 files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-base-bullseye/versions-py3 create mode 100644 files/build/versions/dockers/docker-base-buster/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-base-buster/versions-py3 create mode 100644 files/build/versions/dockers/docker-base-buster/versions-web create mode 100644 files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye-arm64 create mode 100644 files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye-armhf create mode 100644 files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 create mode 100644 files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster-arm64 create mode 100644 files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster-armhf create mode 100644 files/build/versions/dockers/docker-config-engine-buster/versions-py3 create mode 100644 files/build/versions/dockers/docker-database/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-dhcp-relay/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-fpm-frr/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-fpm-frr/versions-py3 create mode 100644 files/build/versions/dockers/docker-gbsyncd-credo/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-gbsyncd-vs/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-lldp/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-macsec/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-mux/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-nat/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-orchagent/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-orchagent/versions-deb-bullseye-arm64 create mode 100644 files/build/versions/dockers/docker-orchagent/versions-deb-bullseye-armhf create mode 100644 files/build/versions/dockers/docker-orchagent/versions-py3 create mode 100644 files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye-arm64 create mode 100644 files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye-armhf create mode 100644 files/build/versions/dockers/docker-platform-monitor/versions-py3 create mode 100644 files/build/versions/dockers/docker-ptf/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-ptf/versions-py2 create mode 100644 files/build/versions/dockers/docker-ptf/versions-py3 create mode 100644 files/build/versions/dockers/docker-router-advertiser/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-sflow/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-snmp/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-snmp/versions-deb-buster-arm64 create mode 100644 files/build/versions/dockers/docker-snmp/versions-deb-buster-armhf create mode 100644 files/build/versions/dockers/docker-snmp/versions-py3 create mode 100644 files/build/versions/dockers/docker-sonic-mgmt-framework/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 create mode 100644 files/build/versions/dockers/docker-sonic-telemetry/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-sonic-vs/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-sonic-vs/versions-py2 create mode 100644 files/build/versions/dockers/docker-sonic-vs/versions-py3 create mode 100644 files/build/versions/dockers/docker-swss-layer-bullseye/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-swss-layer-buster/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-bfn-rpc/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-bfn-rpc/versions-py2 create mode 100644 files/build/versions/dockers/docker-syncd-bfn/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-py2 create mode 100644 files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-web create mode 100644 files/build/versions/dockers/docker-syncd-brcm-dnx/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-brcm-rpc/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-brcm-rpc/versions-py2 create mode 100644 files/build/versions/dockers/docker-syncd-brcm-rpc/versions-web create mode 100644 files/build/versions/dockers/docker-syncd-brcm/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-centec-rpc/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-centec-rpc/versions-py2 create mode 100644 files/build/versions/dockers/docker-syncd-centec/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-syncd-centec/versions-deb-buster-arm64 create mode 100644 files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-py2 create mode 100644 files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye create mode 100644 files/build/versions/dockers/docker-syncd-mlnx/versions-py3 create mode 100644 files/build/versions/dockers/docker-syncd-mrvl/versions-deb-buster-armhf create mode 100644 files/build/versions/dockers/docker-syncd-vs/versions-deb-buster create mode 100644 files/build/versions/dockers/docker-teamd/versions-deb-buster diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-git b/files/build/versions/build/build-sonic-slave-bullseye/versions-git index 9640d305c516..9f7f33d8f702 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-git +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-git @@ -1,14 +1,14 @@ https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b -https://github.com/flashrom/flashrom.git==9ae0463feeff61bfec90fcdb85213e3114873ad0 -https://github.com/FreeRADIUS/freeradius-server.git==07901163a18362a7e3475e0cfdccf92e7f39276b +https://github.com/flashrom/flashrom.git==cba5de5e24bc2d9b9250263060999d081d18db4a +https://github.com/FreeRADIUS/freeradius-server.git==c39ce28ec64a4b9c285329da643e8628994b4a63 https://github.com/FreeRADIUS/pam_radius.git==5e67868520e90a489626928f28c0befa531bf7d2 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 https://github.com/thom311/libnl==44988e648cd5c9f912148e8b138776064797f49d https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b61368d4c5 -https://salsa.debian.org/kernel-team/ethtool/==38a3cce26a7fa6eb74228e3501b7ed19dced6d4b -https://salsa.debian.org/kernel-team/initramfs-tools.git==9b3a06991f9f4a96efbd90faa2a096f7e059173f +https://salsa.debian.org/kernel-team/ethtool/==3ad654942c84bb0f461c2e86d326c1d2adb4ac4c +https://salsa.debian.org/kernel-team/initramfs-tools.git==6b632f95213043634b947f156c3c736a46186090 https://salsa.debian.org/sk-guest/monit.git==c9da7ebb1f35dfba17b50b5969a6e75e29cbec0d https://salsa.debian.org/ssh-team/openssh.git==de790f931452a2dcb4490d074d5a16ab8456a523 \ No newline at end of file diff --git a/files/build/versions/default/versions-git b/files/build/versions/default/versions-git index a60c0df784b1..0a01d8056359 100644 --- a/files/build/versions/default/versions-git +++ b/files/build/versions/default/versions-git @@ -1,11 +1,11 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==89b222dba5ea3fd91598e821c0b82797f2e2fa3c +https://chromium.googlesource.com/chromium/tools/depot_tools.git==407333d42436270d60043ca49241cedc0ebc6eb1 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b https://github.com/dyninc/OpenBFDD.git==e35f43ad8d2b3f084e96a84c392528a90d05a287 -https://github.com/flashrom/flashrom.git==9ae0463feeff61bfec90fcdb85213e3114873ad0 -https://github.com/FreeRADIUS/freeradius-server.git==07901163a18362a7e3475e0cfdccf92e7f39276b +https://github.com/flashrom/flashrom.git==5b78c08156ddc5b4391157f7d7a0456060eed2c2 +https://github.com/FreeRADIUS/freeradius-server.git==c39ce28ec64a4b9c285329da643e8628994b4a63 https://github.com/FreeRADIUS/pam_radius.git==5e67868520e90a489626928f28c0befa531bf7d2 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 @@ -17,7 +17,7 @@ https://github.com/sflow/host-sflow==2b8771aa7284d3b34cfc43fccba67649d30d0c64 https://github.com/sflow/sflowtool==4be2a17b36a3b9796c280b117b8b786323a84ae8 https://github.com/thom311/libnl==44988e648cd5c9f912148e8b138776064797f49d https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b61368d4c5 -https://salsa.debian.org/kernel-team/ethtool/==38a3cce26a7fa6eb74228e3501b7ed19dced6d4b -https://salsa.debian.org/kernel-team/initramfs-tools.git==9b3a06991f9f4a96efbd90faa2a096f7e059173f +https://salsa.debian.org/kernel-team/ethtool/==6ee7deceebaa9013a0d29936248cdde7236489b1 +https://salsa.debian.org/kernel-team/initramfs-tools.git==6b632f95213043634b947f156c3c736a46186090 https://salsa.debian.org/sk-guest/monit.git==c9da7ebb1f35dfba17b50b5969a6e75e29cbec0d https://salsa.debian.org/ssh-team/openssh.git==de790f931452a2dcb4490d074d5a16ab8456a523 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye b/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye new file mode 100644 index 000000000000..59765e67b0b9 --- /dev/null +++ b/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye @@ -0,0 +1,81 @@ +ca-certificates==20210119 +curl==7.74.0-1.3+deb11u1 +iproute2==5.10.0-4 +jq==1.6-2.1 +less==551-2 +libatomic1==10.2.1-6 +libbpf0==1:0.3-2 +libbrotli1==1.0.9-2+b2 +libbsd0==0.11.3-1 +libcap2==1:2.44-1 +libcap2-bin==1:2.44-1 +libcurl4==7.74.0-1.3+deb11u1 +libdaemon0==0.14-7.1 +libdbus-1-3==1.12.20-2 +libelf1==0.183-1 +libestr0==0.1.10-2.1+b1 +libexpat1==2.2.10-2+deb11u3 +libfastjson4==0.99.9-1 +libgdbm-compat4==1.19-2 +libgdbm6==1.19-2 +libjansson4==2.13.1-1.1 +libjemalloc2==5.2.1-3 +libjq1==1.6-2.1 +libk5crypto3==1.18.3-6+deb11u1+fips +libldap-2.4-2==2.4.57+dfsg-3+deb11u1 +liblognorm5==2.0.5-1.1 +liblua5.1-0==5.1.5-8.1+b3 +liblzf1==3.6-3 +libmd0==1.0.3-3 +libmnl0==1.0.4-3 +libmpdec3==2.5.1-1 +libncurses6==6.2+20201114-2 +libncursesw6==6.2+20201114-2 +libnghttp2-14==1.43.0-1 +libnorm1==1.5.9+dfsg-2 +libonig5==6.9.6-1.1 +libperl5.32==5.32.1-4+deb11u2 +libpgm-5.3-0==5.3.128~dfsg-2 +libprocps8==2:3.3.17-5 +libpsl5==0.21.0-1.2 +libpython3-stdlib==3.9.2-3 +libpython3.9-minimal==3.9.2-1 +libpython3.9-stdlib==3.9.2-1 +libreadline8==8.1-1 +librtmp1==2.4+20151223.gitfa8646d.1-2+b2 +libsasl2-2==2.1.27+dfsg-2.1+deb11u1 +libsasl2-modules-db==2.1.27+dfsg-2.1+deb11u1 +libsodium23==1.0.18-1 +libsqlite3-0==3.34.1-3 +libssh2-1==1.9.0-2 +libssl-dev==1.1.1k-1+deb11u1+fips +libwrap0==7.6.q-31 +libxtables12==1.8.7-1 +libzmq5==4.3.4-1 +lua-bitop==1.0.2-5 +lua-cjson==2.1.0+dfsg-2.1 +media-types==4.0.0 +net-tools==1.60+git20181103.0eebece-1 +openssl==1.1.1n-0+deb11u2 +perl==5.32.1-4+deb11u2 +perl-modules-5.32==5.32.1-4+deb11u2 +procps==2:3.3.17-5 +python-pip-whl==20.3.4-4+deb11u1 +python3==3.9.2-3 +python3-distutils==3.9.2-1 +python3-lib2to3==3.9.2-1 +python3-minimal==3.9.2-3 +python3-pip==20.3.4-4+deb11u1 +python3-pkg-resources==52.0.0-4 +python3-setuptools==52.0.0-4 +python3-wheel==0.34.2-1 +python3.9==3.9.2-1 +python3.9-minimal==3.9.2-1 +readline-common==8.1-1 +redis-tools==5:6.0.16-1+deb11u2 +rsyslog==8.2102.0-2+deb11u1 +socat==1.7.4.1-3 +symcrypt-openssl==0.1 +vim-common==2:8.2.2434-3+deb11u1 +vim-tiny==2:8.2.2434-3+deb11u1 +xxd==2:8.2.2434-3+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-base-bullseye/versions-py3 b/files/build/versions/dockers/docker-base-bullseye/versions-py3 new file mode 100644 index 000000000000..4cb64ea768d0 --- /dev/null +++ b/files/build/versions/dockers/docker-base-bullseye/versions-py3 @@ -0,0 +1,6 @@ +j2cli==0.3.10 +jinja2==3.1.2 +markupsafe==2.1.1 +supervisor==4.2.1 +supervisord-dependent-startup==1.4.0 +toposort==1.7 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-base-buster/versions-deb-buster b/files/build/versions/dockers/docker-base-buster/versions-deb-buster new file mode 100644 index 000000000000..93562f2b6be5 --- /dev/null +++ b/files/build/versions/dockers/docker-base-buster/versions-deb-buster @@ -0,0 +1,71 @@ +ca-certificates==20200601~deb10u2 +curl==7.64.0-4+deb10u2 +jq==1.5+dfsg-2+b1 +less==487-0.1+b1 +libatomic1==8.3.0-6 +libcurl4==7.64.0-4+deb10u2 +libdaemon0==0.14-7 +libdbus-1-3==1.12.20-0+deb10u1 +libestr0==0.1.10-2.1 +libexpat1==2.2.6-2+deb10u4 +libfastjson4==0.99.8-2 +libgdbm-compat4==1.18.1-4 +libgdbm6==1.18.1-4 +libgssapi-krb5-2==1.17-3+deb10u3 +libjansson4==2.12-1 +libjemalloc2==5.1.0-3 +libjq1==1.5+dfsg-2+b1 +libk5crypto3==1.17-3+deb10u3 +libkeyutils1==1.6-6 +libkrb5-3==1.17-3+deb10u3 +libkrb5support0==1.17-3+deb10u3 +libldap-2.4-2==2.4.47+dfsg-3+deb10u7 +libldap-common==2.4.47+dfsg-3+deb10u7 +liblognorm5==2.0.5-1 +liblua5.1-0==5.1.5-8.1+b2 +libmpdec2==2.4.2-2 +libncurses6==6.1+20181013-2+deb10u2 +libnghttp2-14==1.36.0-2+deb10u1 +libnorm1==1.5.8+dfsg2-1 +libonig5==6.9.1-1 +libperl5.28==5.28.1-6+deb10u1 +libpgm-5.2-0==5.2.122~dfsg-3 +libprocps7==2:3.3.15-2 +libpsl5==0.20.2-2 +libpython3-stdlib==3.7.3-1 +libpython3.7-minimal==3.7.3-2+deb10u3 +libpython3.7-stdlib==3.7.3-2+deb10u3 +libreadline7==7.0-5 +librtmp1==2.4+20151223.gitfa8646d.1-2 +libsasl2-2==2.1.27+dfsg-1+deb10u2 +libsasl2-modules-db==2.1.27+dfsg-1+deb10u2 +libsodium23==1.0.17-1 +libsqlite3-0==3.27.2-3+deb10u1 +libssh2-1==1.8.0-2.1 +libssl1.1==1.1.1n-0+deb10u2 +libwrap0==7.6.q-28 +libzmq5==4.3.1-4+deb10u2 +lsb-base==10.2019051400 +lua-bitop==1.0.2-5 +lua-cjson==2.1.0+dfsg-2.1 +mime-support==3.62 +net-tools==1.60+git20180626.aebd88e-1 +openssl==1.1.1n-0+deb10u2 +perl==5.28.1-6+deb10u1 +perl-modules-5.28==5.28.1-6+deb10u1 +procps==2:3.3.15-2 +python-pip-whl==18.1-5 +python3==3.7.3-1 +python3-distutils==3.7.3-1 +python3-lib2to3==3.7.3-1 +python3-minimal==3.7.3-1 +python3-pip==18.1-5 +python3.7==3.7.3-2+deb10u3 +python3.7-minimal==3.7.3-2+deb10u3 +readline-common==7.0-5 +redis-tools==5:6.0.6-1~bpo10+1 +rsyslog==8.1901.0-1+deb10u2 +socat==1.7.4.1-3 +vim-common==2:8.1.0875-5+deb10u2 +vim-tiny==2:8.1.0875-5+deb10u2 +xxd==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-base-buster/versions-py3 b/files/build/versions/dockers/docker-base-buster/versions-py3 new file mode 100644 index 000000000000..4cb64ea768d0 --- /dev/null +++ b/files/build/versions/dockers/docker-base-buster/versions-py3 @@ -0,0 +1,6 @@ +j2cli==0.3.10 +jinja2==3.1.2 +markupsafe==2.1.1 +supervisor==4.2.1 +supervisord-dependent-startup==1.4.0 +toposort==1.7 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-base-buster/versions-web b/files/build/versions/dockers/docker-base-buster/versions-web new file mode 100644 index 000000000000..d85bc54c0062 --- /dev/null +++ b/files/build/versions/dockers/docker-base-buster/versions-web @@ -0,0 +1 @@ +https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1~bpo10+1_amd64.deb?sv=2015-04-05&sr=b&sig=73zbmjkf3pi%2Bn0R8Hy7CWT2EUvOAyzM5aLYJWCLySGM%3D&se=2030-09-06T19%3A44%3A59Z&sp=r==2d58c3c3358290c04d5e0ba70f297f18 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye b/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye new file mode 100644 index 000000000000..8bc97fb3ffe7 --- /dev/null +++ b/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye @@ -0,0 +1,60 @@ +apt-utils==2.2.4 +binutils==2.35.2-2 +binutils-common==2.35.2-2 +binutils-x86-64-linux-gnu==2.35.2-2 +build-essential==12.9 +bzip2==1.0.8-4 +cpp==4:10.2.1-1 +cpp-10==10.2.1-6 +dpkg-dev==1.20.10 +g++==4:10.2.1-1 +g++-10==10.2.1-6 +gcc==4:10.2.1-1 +gcc-10==10.2.1-6 +libasan6==10.2.1-6 +libbinutils==2.35.2-2 +libc-dev-bin==2.31-13+deb11u3 +libc6-dev==2.31-13+deb11u3 +libcc1-0==10.2.1-6 +libcrypt-dev==1:4.4.18-4 +libctf-nobfd0==2.35.2-2 +libctf0==2.35.2-2 +libdpkg-perl==1.20.10 +libexpat1-dev==2.2.10-2+deb11u3 +libgcc-10-dev==10.2.1-6 +libgomp1==10.2.1-6 +libhiredis0.14==0.14.0-3~bpo9+1 +libisl23==0.23-1 +libitm1==10.2.1-6 +libjs-jquery==3.5.1+dfsg+~3.5.5-7 +libjs-sphinxdoc==3.4.3-2 +libjs-underscore==1.9.1~dfsg-3 +liblsan0==10.2.1-6 +libmpc3==1.2.0-1 +libmpfr6==4.1.0-3 +libnl-3-200==3.5.0-1 +libnl-cli-3-200==3.5.0-1 +libnl-genl-3-200==3.5.0-1 +libnl-nf-3-200==3.5.0-1 +libnl-route-3-200==3.5.0-1 +libnsl-dev==1.3.0-2 +libpython3-dev==3.9.2-3 +libpython3.9==3.9.2-1 +libpython3.9-dev==3.9.2-1 +libquadmath0==10.2.1-6 +libstdc++-10-dev==10.2.1-6 +libswsscommon==1.0.0 +libtirpc-dev==1.3.1-1 +libtsan0==10.2.1-6 +libubsan1==10.2.1-6 +libyang==1.0.73 +libyang-cpp==1.0.73 +linux-libc-dev==5.10.120-1 +make==4.3-4.1 +patch==2.7.6-7 +python3-dev==3.9.2-3 +python3-swsscommon==1.0.0 +python3-yang==1.0.73 +python3.9-dev==3.9.2-1 +xz-utils==5.2.5-2.1~deb11u1 +zlib1g-dev==1:1.2.11.dfsg-2+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye-arm64 b/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye-arm64 new file mode 100644 index 000000000000..2a19b9b9d0a1 --- /dev/null +++ b/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye-arm64 @@ -0,0 +1,8 @@ +binutils-aarch64-linux-gnu==2.35.2-2 +icu-devtools==67.1-7 +libicu-dev==67.1-7 +libicu67==67.1-7 +libxml2==2.9.10+dfsg-6.7+deb11u2 +libxml2-dev==2.9.10+dfsg-6.7+deb11u2 +libxslt1-dev==1.1.34-4 +libxslt1.1==1.1.34-4 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye-armhf b/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye-armhf new file mode 100644 index 000000000000..496ff3df2c3b --- /dev/null +++ b/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye-armhf @@ -0,0 +1,8 @@ +binutils-arm-linux-gnueabihf==2.35.2-2 +icu-devtools==67.1-7 +libicu-dev==67.1-7 +libicu67==67.1-7 +libxml2==2.9.10+dfsg-6.7+deb11u2 +libxml2-dev==2.9.10+dfsg-6.7+deb11u2 +libxslt1-dev==1.1.34-4 +libxslt1.1==1.1.34-4 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 b/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 new file mode 100644 index 000000000000..b376f6857364 --- /dev/null +++ b/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 @@ -0,0 +1,15 @@ +bitarray==1.5.3 +ijson==2.6.1 +ipaddress==1.0.23 +jsondiff==2.0.0 +lxml==4.6.5 +natsort==6.2.1 +netaddr==0.8.0 +pyang==2.5.3 +pyangbind==0.8.1 +pyyaml==5.4.1 +redis==3.5.3 +redis-dump-load==1.1 +regex==2022.6.2 +six==1.16.0 +xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster b/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster new file mode 100644 index 000000000000..506f92bc40fc --- /dev/null +++ b/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster @@ -0,0 +1,54 @@ +apt-utils==1.8.2.3 +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +build-essential==12.6 +bzip2==1.0.6-9.2~deb10u1 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +dh-python==3.20190308 +dpkg-dev==1.19.8 +g++==4:8.3.0-1 +g++-8==8.3.0-6 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +libapt-inst2.0==1.8.2.3 +libasan5==8.3.0-6 +libbinutils==2.31.1-16 +libc-dev-bin==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libcc1-0==8.3.0-6 +libdpkg-perl==1.19.8 +libexpat1-dev==2.2.6-2+deb10u4 +libgcc-8-dev==8.3.0-6 +libgomp1==8.3.0-6 +libhiredis0.14==0.14.0-3~bpo9+1 +libisl19==0.20-2 +libitm1==8.3.0-6 +liblsan0==8.3.0-6 +libmpc3==1.1.0-1 +libmpfr6==4.0.2-1 +libmpx2==8.3.0-6 +libnl-3-200==3.5.0-1 +libnl-cli-3-200==3.5.0-1 +libnl-genl-3-200==3.5.0-1 +libnl-nf-3-200==3.5.0-1 +libnl-route-3-200==3.5.0-1 +libpython3-dev==3.7.3-1 +libpython3.7==3.7.3-2+deb10u3 +libpython3.7-dev==3.7.3-2+deb10u3 +libquadmath0==8.3.0-6 +libstdc++-8-dev==8.3.0-6 +libswsscommon==1.0.0 +libtsan0==8.3.0-6 +libubsan1==8.3.0-6 +libyang==1.0.73 +libyang-cpp==1.0.73 +linux-libc-dev==4.19.235-1 +make==4.2.1-1.2 +patch==2.7.6-3+deb10u1 +python3-dev==3.7.3-1 +python3-swsscommon==1.0.0 +python3-yang==1.0.73 +python3.7-dev==3.7.3-2+deb10u3 +xz-utils==5.2.4-1+deb10u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster-arm64 b/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster-arm64 new file mode 100644 index 000000000000..1f699501031d --- /dev/null +++ b/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster-arm64 @@ -0,0 +1,11 @@ +binutils-aarch64-linux-gnu==2.31.1-16 +icu-devtools==63.1-6+deb10u3 +libglib2.0-0==2.58.3-2+deb10u3 +libicu-dev==63.1-6+deb10u3 +libicu63==63.1-6+deb10u3 +libxml2==2.9.4+dfsg1-7+deb10u4 +libxml2-dev==2.9.4+dfsg1-7+deb10u4 +libxslt1-dev==1.1.32-2.2~deb10u1 +libxslt1.1==1.1.32-2.2~deb10u1 +pkg-config==0.29-6 +zlib1g-dev==1:1.2.11.dfsg-1+deb10u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster-armhf b/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster-armhf new file mode 100644 index 000000000000..967b10df80c8 --- /dev/null +++ b/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster-armhf @@ -0,0 +1,11 @@ +binutils-arm-linux-gnueabihf==2.31.1-16 +icu-devtools==63.1-6+deb10u3 +libglib2.0-0==2.58.3-2+deb10u3 +libicu-dev==63.1-6+deb10u3 +libicu63==63.1-6+deb10u3 +libxml2==2.9.4+dfsg1-7+deb10u4 +libxml2-dev==2.9.4+dfsg1-7+deb10u4 +libxslt1-dev==1.1.32-2.2~deb10u1 +libxslt1.1==1.1.32-2.2~deb10u1 +pkg-config==0.29-6 +zlib1g-dev==1:1.2.11.dfsg-1+deb10u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-buster/versions-py3 b/files/build/versions/dockers/docker-config-engine-buster/versions-py3 new file mode 100644 index 000000000000..b376f6857364 --- /dev/null +++ b/files/build/versions/dockers/docker-config-engine-buster/versions-py3 @@ -0,0 +1,15 @@ +bitarray==1.5.3 +ijson==2.6.1 +ipaddress==1.0.23 +jsondiff==2.0.0 +lxml==4.6.5 +natsort==6.2.1 +netaddr==0.8.0 +pyang==2.5.3 +pyangbind==0.8.1 +pyyaml==5.4.1 +redis==3.5.3 +redis-dump-load==1.1 +regex==2022.6.2 +six==1.16.0 +xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-database/versions-deb-bullseye b/files/build/versions/dockers/docker-database/versions-deb-bullseye new file mode 100644 index 000000000000..cf06df5d25ee --- /dev/null +++ b/files/build/versions/dockers/docker-database/versions-deb-bullseye @@ -0,0 +1,26 @@ +gdb==10.1-1.7 +gdbserver==10.1-1.7 +libbabeltrace1==1.5.8-1+b3 +libboost-regex1.74.0==1.74.0-9 +libcbor0==0.5.0+dfsg-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libfido2-1==1.6.0-2 +libglib2.0-0==2.66.8-1 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu67==67.1-7 +libipt2==2.0.3-1 +libmpfr6==4.1.0-3 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libunwind8==1.3.2-2 +openssh-client==1:8.4p1-5 +redis-server==5:6.0.16-1+deb11u2 +sshpass==1.09-1+b1 +strace==5.10-1 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bullseye b/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bullseye new file mode 100644 index 000000000000..1505a810ea61 --- /dev/null +++ b/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bullseye @@ -0,0 +1,39 @@ +gdb==10.1-1.7 +gdbserver==10.1-1.7 +isc-dhcp-relay==4.4.1-2.3 +isc-dhcp-relay-dbgsym==4.4.1-2.3 +libbabeltrace1==1.5.8-1+b3 +libboost-regex1.74.0==1.74.0-9 +libboost-thread1.74.0==1.74.0-9 +libcbor0==0.5.0+dfsg-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdns-export1110==1:9.11.19+dfsg-2.1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libevent-2.1-7==2.1.12-stable-1 +libexplain51==1.4.D001-11 +libfido2-1==1.6.0-2 +libglib2.0-0==2.66.8-1 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu67==67.1-7 +libipt2==2.0.3-1 +libirs-export161==1:9.11.19+dfsg-2.1 +libisc-export1105==1:9.11.19+dfsg-2.1 +libisccfg-export163==1:9.11.19+dfsg-2.1 +libmpfr6==4.1.0-3 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libunwind8==1.3.2-2 +lsof==4.93.2+dfsg-1.1 +openssh-client==1:8.4p1-5 +sonic-dhcp6relay==1.0.0-0 +sonic-dhcp6relay-dbgsym==1.0.0-0 +sonic-dhcpmon==1.0.0-0 +sonic-dhcpmon-dbgsym==1.0.0-0 +sshpass==1.09-1+b1 +strace==5.10-1 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-fpm-frr/versions-deb-buster b/files/build/versions/dockers/docker-fpm-frr/versions-deb-buster new file mode 100644 index 000000000000..27f679a24a5f --- /dev/null +++ b/files/build/versions/dockers/docker-fpm-frr/versions-deb-buster @@ -0,0 +1,40 @@ +cron==3.0pl1-134+deb10u1 +frr==8.2.2-sonic-0 +frr-dbgsym==8.2.2-sonic-0 +frr-snmp==8.2.2-sonic-0 +frr-snmp-dbgsym==8.2.2-sonic-0 +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libc-ares2==1.14.0-1+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libjson-c3==0.12.1+ds-2+deb10u1 +libmariadb3==1:10.3.34-0+deb10u1 +libpci3==1:3.5.2-1 +libpcre2-8-0==10.32-5 +libpopt0==1.16-12 +libsensors-config==1:3.5.0-3 +libsensors5==1:3.5.0-3 +libsnmp-base==5.7.3+dfsg-5+deb10u2 +libsnmp30==5.7.3+dfsg-5+deb10u2 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +libyang2==2.0.112-6 +libyang2-dbgsym==2.0.112-6 +logrotate==3.14.0-4 +lsof==4.91+dfsg-1 +mariadb-common==1:10.3.34-0+deb10u1 +mysql-common==5.8+1.0.5 +openssh-client==1:7.9p1-10+deb10u2 +sensible-utils==0.0.12 +sshpass==1.06-1 +strace==4.26-0.2 +swss-dbg==1.0.0 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-fpm-frr/versions-py3 b/files/build/versions/dockers/docker-fpm-frr/versions-py3 new file mode 100644 index 000000000000..ff7826d683d4 --- /dev/null +++ b/files/build/versions/dockers/docker-fpm-frr/versions-py3 @@ -0,0 +1 @@ +zipp==1.2.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-gbsyncd-credo/versions-deb-buster b/files/build/versions/dockers/docker-gbsyncd-credo/versions-deb-buster new file mode 100644 index 000000000000..5ac2cb7c4163 --- /dev/null +++ b/files/build/versions/dockers/docker-gbsyncd-credo/versions-deb-buster @@ -0,0 +1,23 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libsaicredo==0.7.5 +libsaicredo-owl==0.7.5 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +syncd==1.0.0 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-gbsyncd-vs/versions-deb-buster b/files/build/versions/dockers/docker-gbsyncd-vs/versions-deb-buster new file mode 100644 index 000000000000..5e6ca2021684 --- /dev/null +++ b/files/build/versions/dockers/docker-gbsyncd-vs/versions-deb-buster @@ -0,0 +1,26 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libsaimetadata==1.0.0 +libsaimetadata-dbg==1.0.0 +libsairedis==1.0.0 +libsairedis-dbg==1.0.0 +libsaivs==1.0.0 +libsaivs-dbg==1.0.0 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +syncd-vs==1.0.0 +syncd-vs-dbg==1.0.0 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-lldp/versions-deb-buster b/files/build/versions/dockers/docker-lldp/versions-deb-buster new file mode 100644 index 000000000000..a1fbf6d0d00a --- /dev/null +++ b/files/build/versions/dockers/docker-lldp/versions-deb-buster @@ -0,0 +1,31 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libevent-2.1-6==2.1.8-stable-4 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu63==63.1-6+deb10u3 +libipt2==2.0-2 +libmariadb3==1:10.3.34-0+deb10u1 +libpci3==1:3.5.2-1 +libpopt0==1.16-12 +libsensors-config==1:3.5.0-3 +libsensors5==1:3.5.0-3 +libsnmp-base==5.7.3+dfsg-5 +libsnmp30==5.7.3+dfsg-5 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +libxml2==2.9.4+dfsg1-7+deb10u4 +lldpd==1.0.4-1 +lldpd-dbgsym==1.0.4-1 +mariadb-common==1:10.3.34-0+deb10u1 +mysql-common==5.8+1.0.5 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-macsec/versions-deb-bullseye b/files/build/versions/dockers/docker-macsec/versions-deb-bullseye new file mode 100644 index 000000000000..bec602f0d36b --- /dev/null +++ b/files/build/versions/dockers/docker-macsec/versions-deb-bullseye @@ -0,0 +1,34 @@ +gdb==10.1-1.7 +gdbserver==10.1-1.7 +libbabeltrace1==1.5.8-1+b3 +libboost-regex1.74.0==1.74.0-9 +libcbor0==0.5.0+dfsg-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libfido2-1==1.6.0-2 +libglib2.0-0==2.66.8-1 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu67==67.1-7 +libipt2==2.0.3-1 +libmpfr6==4.1.0-3 +libpcsclite1==1.9.1-1 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libteam5==1.30-1 +libteamdctl0==1.30-1 +libunwind8==1.3.2-2 +openssh-client==1:8.4p1-5 +sshpass==1.09-1+b1 +strace==5.10-1 +swss==1.0.0 +swss-dbg==1.0.0 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 +wpasupplicant==2:2.9.0-14 +wpasupplicant-dbgsym==2:2.9.0-14 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-mux/versions-deb-bullseye b/files/build/versions/dockers/docker-mux/versions-deb-bullseye new file mode 100644 index 000000000000..1cc76af6e2a6 --- /dev/null +++ b/files/build/versions/dockers/docker-mux/versions-deb-bullseye @@ -0,0 +1,31 @@ +gdb==10.1-1.7 +gdbserver==10.1-1.7 +libbabeltrace1==1.5.8-1+b3 +libboost-filesystem1.74.0==1.74.0-9 +libboost-log1.74.0==1.74.0-9 +libboost-program-options1.74.0==1.74.0-9 +libboost-regex1.74.0==1.74.0-9 +libboost-thread1.74.0==1.74.0-9 +libcbor0==0.5.0+dfsg-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libfido2-1==1.6.0-2 +libglib2.0-0==2.66.8-1 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu67==67.1-7 +libipt2==2.0.3-1 +libmpfr6==4.1.0-3 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libunwind8==1.3.2-2 +openssh-client==1:8.4p1-5 +sonic-linkmgrd==1.0.0-1 +sonic-linkmgrd-dbgsym==1.0.0-1 +sshpass==1.09-1+b1 +strace==5.10-1 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-nat/versions-deb-buster b/files/build/versions/dockers/docker-nat/versions-deb-buster new file mode 100644 index 000000000000..89c628522f75 --- /dev/null +++ b/files/build/versions/dockers/docker-nat/versions-deb-buster @@ -0,0 +1,28 @@ +bridge-utils==1.6-2 +conntrack==1:1.4.5-2 +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +iptables==1.8.2-4 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libip4tc0==1.8.2-4 +libip6tc0==1.8.2-4 +libipt2==2.0-2 +libiptc0==1.8.2-4 +libnetfilter-conntrack3==1.0.7-1 +libnfnetlink0==1.0.1-3+b1 +libnftnl11==1.1.2-2 +libpopt0==1.16-12 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +swss-dbg==1.0.0 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye b/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye new file mode 100644 index 000000000000..b174e46c1080 --- /dev/null +++ b/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye @@ -0,0 +1,86 @@ +arping==2.21-2 +binutils==2.35.2-2 +binutils-common==2.35.2-2 +binutils-x86-64-linux-gnu==2.35.2-2 +bridge-utils==1.7-1 +build-essential==12.9 +bzip2==1.0.8-4 +conntrack==1:1.4.6-2 +cpp==4:10.2.1-1 +cpp-10==10.2.1-6 +g++==4:10.2.1-1 +g++-10==10.2.1-6 +gcc==4:10.2.1-1 +gcc-10==10.2.1-6 +gdb==10.1-1.7 +gdbserver==10.1-1.7 +ifupdown==0.8.36 +libasan6==10.2.1-6 +libbabeltrace1==1.5.8-1+b3 +libbinutils==2.35.2-2 +libboost-regex1.74.0==1.74.0-9 +libc-dev-bin==2.31-13+deb11u3 +libc6-dev==2.31-13+deb11u3 +libcbor0==0.5.0+dfsg-2 +libcc1-0==10.2.1-6 +libcrypt-dev==1:4.4.18-4 +libctf-nobfd0==2.35.2-2 +libctf0==2.35.2-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdpkg-perl==1.20.10 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libexpat1-dev==2.2.10-2+deb11u3 +libfido2-1==1.6.0-2 +libgcc-10-dev==10.2.1-6 +libglib2.0-0==2.66.8-1 +libgomp1==10.2.1-6 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu67==67.1-7 +libipt2==2.0.3-1 +libisl23==0.23-1 +libitm1==10.2.1-6 +libjs-sphinxdoc==3.4.3-2 +libjs-underscore==1.9.1~dfsg-3 +libkmod2==28-1 +liblsan0==10.2.1-6 +libmpc3==1.2.0-1 +libmpfr6==4.1.0-3 +libnet1==1.1.6+dfsg-3.1 +libnetfilter-conntrack3==1.0.8-3 +libnfnetlink0==1.0.1-3+b1 +libnsl-dev==1.3.0-2 +libpcap0.8==1.10.0-2 +libpci3==1:3.7.0-5 +libpython3-dev==3.9.2-3 +libpython3.9-dev==3.9.2-1 +libquadmath0==10.2.1-6 +libsairedis-dbg==1.0.0 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libstdc++-10-dev==10.2.1-6 +libswsscommon-dbg==1.0.0 +libtirpc-dev==1.3.1-1 +libtsan0==10.2.1-6 +libubsan1==10.2.1-6 +libunwind8==1.3.2-2 +linux-libc-dev==5.10.120-1 +make==4.3-4.1 +ndisc6==1.0.4-2 +ndppd==0.2.5-6 +openssh-client==1:8.4p1-5 +patch==2.7.6-7 +pci.ids==0.0~2021.02.08-1 +pciutils==1:3.7.0-5 +python3-dev==3.9.2-3 +python3.9-dev==3.9.2-1 +sshpass==1.09-1+b1 +strace==5.10-1 +swss-dbg==1.0.0 +tcpdump==4.99.0-2 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 +xz-utils==5.2.5-2.1~deb11u1 +zlib1g-dev==1:1.2.11.dfsg-2+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye-arm64 b/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye-arm64 new file mode 100644 index 000000000000..8774e0ea85bd --- /dev/null +++ b/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye-arm64 @@ -0,0 +1 @@ +binutils-aarch64-linux-gnu==2.35.2-2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye-armhf b/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye-armhf new file mode 100644 index 000000000000..6571b460660f --- /dev/null +++ b/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye-armhf @@ -0,0 +1 @@ +binutils-arm-linux-gnueabihf==2.35.2-2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-orchagent/versions-py3 b/files/build/versions/dockers/docker-orchagent/versions-py3 new file mode 100644 index 000000000000..aa6d42d04fba --- /dev/null +++ b/files/build/versions/dockers/docker-orchagent/versions-py3 @@ -0,0 +1,2 @@ +netifaces==0.10.9 +pyroute2==0.5.14 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye new file mode 100644 index 000000000000..65345aa7b682 --- /dev/null +++ b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye @@ -0,0 +1,141 @@ +applibs==1.mlnx.4.5.1500 +applibs-dev==1.mlnx.4.5.1500 +binutils==2.35.2-2 +binutils-common==2.35.2-2 +binutils-x86-64-linux-gnu==2.35.2-2 +build-essential==12.9 +bzip2==1.0.8-4 +cpp==4:10.2.1-1 +cpp-10==10.2.1-6 +dmidecode==3.3-2 +ethtool==1:5.9-1 +fancontrol==1:3.6.0-7 +fontconfig==2.13.1-4.2 +fontconfig-config==2.13.1-4.2 +fonts-dejavu-core==2.37-2 +freeipmi-common==1.6.6-4+deb11u1 +g++==4:10.2.1-1 +g++-10==10.2.1-6 +gcc==4:10.2.1-1 +gcc-10==10.2.1-6 +gdb==10.1-1.7 +gdbserver==10.1-1.7 +i2c-tools==4.2-1+b1 +ipmitool==1.8.18-10.1 +libasan6==10.2.1-6 +libbabeltrace1==1.5.8-1+b3 +libbinutils==2.35.2-2 +libboost-regex1.74.0==1.74.0-9 +libc-dev-bin==2.31-13+deb11u3 +libc6-dev==2.31-13+deb11u3 +libcairo2==1.16.0-5 +libcbor0==0.5.0+dfsg-2 +libcc1-0==10.2.1-6 +libcrypt-dev==1:4.4.18-4 +libctf-nobfd0==2.35.2-2 +libctf0==2.35.2-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdatrie1==0.2.13-1 +libdbi1==0.9.0-6 +libdebuginfod1==0.183-1 +libdpkg-perl==1.20.10 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libexpat1-dev==2.2.10-2+deb11u3 +libfido2-1==1.6.0-2 +libfontconfig1==2.13.1-4.2 +libfreeipmi17==1.6.6-4+deb11u1 +libfreetype6==2.10.4+dfsg-1 +libfribidi0==1.0.8-2 +libgcc-10-dev==10.2.1-6 +libglib2.0-0==2.66.8-1 +libgomp1==10.2.1-6 +libgpm2==1.20.7-8 +libgraphite2-3==1.3.14-1 +libharfbuzz0b==2.7.4-1 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libi2c0==4.2-1+b1 +libicu67==67.1-7 +libipt2==2.0.3-1 +libisl23==0.23-1 +libitm1==10.2.1-6 +libjs-sphinxdoc==3.4.3-2 +libjs-underscore==1.9.1~dfsg-3 +libkmod2==28-1 +liblsan0==10.2.1-6 +libmpc3==1.2.0-1 +libmpfr6==4.1.0-3 +libnsl-dev==1.3.0-2 +libpango-1.0-0==1.46.2-3 +libpangocairo-1.0-0==1.46.2-3 +libpangoft2-1.0-0==1.46.2-3 +libpci3==1:3.7.0-5 +libpixman-1-0==0.40.0-1 +libpng16-16==1.6.37-3 +libpython3-dev==3.9.2-3 +libpython3.9-dev==3.9.2-1 +libquadmath0==10.2.1-6 +librrd-dev==1.7.2-3+b7 +librrd8==1.7.2-3+b7 +libsensors-config==1:3.6.0-7 +libsensors5==1:3.6.0-7 +libsensors5-dbgsym==1:3.6.0-7 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libstdc++-10-dev==10.2.1-6 +libswsscommon-dbg==1.0.0 +libthai-data==0.1.28-3 +libthai0==0.1.28-3 +libtirpc-dev==1.3.1-1 +libtsan0==10.2.1-6 +libubsan1==10.2.1-6 +libunwind8==1.3.2-2 +libx11-6==2:1.7.2-1 +libx11-data==2:1.7.2-1 +libxau6==1:1.0.9-1 +libxcb-render0==1.14-3 +libxcb-shm0==1.14-3 +libxcb1==1.14-3 +libxdmcp6==1:1.1.2-3 +libxext6==2:1.3.3-1.1 +libxml2==2.9.10+dfsg-6.7+deb11u2 +libxrender1==1:0.9.10-1 +linux-libc-dev==5.10.120-1 +lm-sensors==1:3.6.0-7 +lm-sensors-dbgsym==1:3.6.0-7 +make==4.3-4.1 +openssh-client==1:8.4p1-5 +patch==2.7.6-7 +pci.ids==0.0~2021.02.08-1 +psmisc==23.4-2 +python-sdk-api==1.mlnx.4.5.1500 +python3-attr==20.3.0-1 +python3-dev==3.9.2-3 +python3-importlib-metadata==1.6.0-2 +python3-jsonschema==3.2.0-3 +python3-more-itertools==4.2.0-3 +python3-pkg-resources==52.0.0-4 +python3-pyrsistent==0.15.5-1+b3 +python3-setuptools==52.0.0-4 +python3-six==1.16.0-2 +python3-smbus==4.2-1+b1 +python3-zipp==1.0.0-3 +python3.9-dev==3.9.2-1 +rrdtool==1.7.2-3+b7 +sensible-utils==0.0.14 +sensord==1:3.6.0-7 +sensord-dbgsym==1:3.6.0-7 +sshpass==1.09-1+b1 +strace==5.10-1 +sx-complib==1.mlnx.4.5.1500 +sx-complib-dev==1.mlnx.4.5.1500 +sx-gen-utils==1.mlnx.4.5.1500 +sx-gen-utils-dev==1.mlnx.4.5.1500 +sxd-libs==1.mlnx.4.5.1500 +sxd-libs-dev==1.mlnx.4.5.1500 +ucf==3.0043 +udev==247.3-7 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 +xz-utils==5.2.5-2.1~deb11u1 +zlib1g-dev==1:1.2.11.dfsg-2+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye-arm64 b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye-arm64 new file mode 100644 index 000000000000..8774e0ea85bd --- /dev/null +++ b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye-arm64 @@ -0,0 +1 @@ +binutils-aarch64-linux-gnu==2.35.2-2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye-armhf b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye-armhf new file mode 100644 index 000000000000..6571b460660f --- /dev/null +++ b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye-armhf @@ -0,0 +1 @@ +binutils-arm-linux-gnueabihf==2.35.2-2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-platform-monitor/versions-py3 b/files/build/versions/dockers/docker-platform-monitor/versions-py3 new file mode 100644 index 000000000000..dd2f1421b9c2 --- /dev/null +++ b/files/build/versions/dockers/docker-platform-monitor/versions-py3 @@ -0,0 +1,11 @@ +attrs==20.3.0 +grpcio==1.39.0 +grpcio-tools==1.39.0 +importlib-metadata==1.6.0 +jsonschema==2.6.0 +more-itertools==4.2.0 +protobuf==3.20.1 +pyrsistent==0.15.5 +python_sdk_api==4.5.1500 +thrift==0.13.0 +zipp==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-ptf/versions-deb-buster b/files/build/versions/dockers/docker-ptf/versions-deb-buster new file mode 100644 index 000000000000..c8ad68f9690d --- /dev/null +++ b/files/build/versions/dockers/docker-ptf/versions-deb-buster @@ -0,0 +1,491 @@ +arping==2.19-6 +autoconf==2.69-11 +automake==1:1.16.1-4 +autotools-dev==20180224.1 +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +blt==2.5.3+dfsg-4 +bridge-utils==1.6-2 +bsd-mailx==8.1.2-0.20180807cvs-1 +build-essential==12.6 +bzip2==1.0.6-9.2~deb10u1 +ca-certificates==20200601~deb10u2 +cmake==3.13.4-1 +cmake-data==3.13.4-1 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +cron==3.0pl1-134+deb10u1 +curl==7.64.0-4+deb10u2 +dbus==1.12.20-0+deb10u1 +dh-python==3.20190308 +dirmngr==2.2.12-1+deb10u1 +dmsetup==2:1.02.155-3 +dpkg-dev==1.19.8 +ethtool==1:4.19-1 +exim4-base==4.92-8+deb10u6 +exim4-config==4.92-8+deb10u6 +exim4-daemon-light==4.92-8+deb10u6 +fakeroot==1.23-1 +file==1:5.35-4+deb10u2 +fontconfig==2.13.1-2 +fontconfig-config==2.13.1-2 +fonts-droid-fallback==1:6.0.1r16-1.1 +fonts-liberation==1:1.07.4-9 +fonts-lmodern==2.004.5-6 +fonts-lyx==2.3.2-1 +fonts-noto-mono==20181227-1 +g++==4:8.3.0-1 +g++-8==8.3.0-6 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +gdb==8.2.1-2+b3 +gir1.2-glib-2.0==1.58.3-2 +git==1:2.20.1-2+deb10u3 +git-man==1:2.20.1-2+deb10u3 +gnupg==2.2.12-1+deb10u1 +gnupg-l10n==2.2.12-1+deb10u1 +gnupg-utils==2.2.12-1+deb10u1 +gpg==2.2.12-1+deb10u1 +gpg-agent==2.2.12-1+deb10u1 +gpg-wks-client==2.2.12-1+deb10u1 +gpg-wks-server==2.2.12-1+deb10u1 +gpgconf==2.2.12-1+deb10u1 +gpgsm==2.2.12-1+deb10u1 +graphviz==2.40.1-6+deb10u1 +hping3==3.a2.ds2-7 +ipython3==5.8.0-1+deb10u1 +javascript-common==11 +krb5-locales==1.17-3+deb10u3 +less==487-0.1+b1 +libalgorithm-diff-perl==1.19.03-2 +libalgorithm-diff-xs-perl==0.04-5+b1 +libalgorithm-merge-perl==0.08-3 +libapparmor1==2.13.2-10 +libarchive13==3.3.3-4+deb10u1 +libargon2-1==0~20171227-0.2 +libasan5==8.3.0-6 +libassuan0==2.5.2-1 +libatomic1==8.3.0-6 +libauthen-sasl-perl==2.1600-1 +libavahi-client3==0.7-4+deb10u1 +libavahi-common-data==0.7-4+deb10u1 +libavahi-common3==0.7-4+deb10u1 +libbabeltrace1==1.5.6-2+deb10u1 +libbinutils==2.31.1-16 +libblas3==3.8.0-2 +libboost-atomic1.71.0==1.71.0-6~bpo10+1 +libbrotli1==1.0.7-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libc-dev-bin==2.28-10+deb10u1 +libc6-dbg==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libcairo2==1.16.0-4+deb10u1 +libcc1-0==8.3.0-6 +libcdt5==2.40.1-6+deb10u1 +libcgraph6==2.40.1-6+deb10u1 +libcryptsetup12==2:2.1.0-5+deb10u2 +libcups2==2.2.10-6+deb10u6 +libcupsfilters1==1.21.6-5 +libcupsimage2==2.2.10-6+deb10u6 +libcurl3-gnutls==7.64.0-4+deb10u2 +libcurl4==7.64.0-4+deb10u2 +libdaemon0==0.14-7 +libdata-dump-perl==1.23-1 +libdatrie1==0.2.12-2 +libdbus-1-3==1.12.20-0+deb10u1 +libdevmapper1.02.1==2:1.02.155-3 +libdouble-conversion1==3.1.0-3 +libdpkg-perl==1.19.8 +libdrm-amdgpu1==2.4.97-1 +libdrm-common==2.4.97-1 +libdrm-intel1==2.4.97-1 +libdrm-nouveau2==2.4.97-1 +libdrm-radeon1==2.4.97-1 +libdrm2==2.4.97-1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libencode-locale-perl==1.05-1 +liberror-perl==0.17027-2 +libestr0==0.1.10-2.1 +libevent-2.1-6==2.1.8-stable-4 +libevent-core-2.1-6==2.1.8-stable-4 +libevent-pthreads-2.1-6==2.1.8-stable-4 +libexpat1==2.2.6-2+deb10u4 +libexpat1-dev==2.2.6-2+deb10u4 +libfakeroot==1.23-1 +libfastjson4==0.99.8-2 +libffi-dev==3.2.1-9 +libfile-basedir-perl==0.08-1 +libfile-desktopentry-perl==0.22-1 +libfile-fcntllock-perl==0.22-3+b5 +libfile-listing-perl==6.04-1 +libfile-mimeinfo-perl==0.29-1 +libfont-afm-perl==1.20-2 +libfontconfig1==2.13.1-2 +libfontenc1==1:1.1.3-1+b2 +libfreetype6==2.9.1-3+deb10u2 +libfribidi0==1.0.5-3.1+deb10u1 +libgcc-8-dev==8.3.0-6 +libgd3==2.2.5-5.2 +libgdbm-compat4==1.18.1-4 +libgdbm6==1.18.1-4 +libgfortran5==8.3.0-6 +libgirepository-1.0-1==1.58.3-2 +libgl1==1.1.0-1 +libgl1-mesa-dri==18.3.6-2+deb10u1 +libglapi-mesa==18.3.6-2+deb10u1 +libglib2.0-0==2.58.3-2+deb10u3 +libglib2.0-data==2.58.3-2+deb10u3 +libglvnd0==1.1.0-1 +libglx-mesa0==18.3.6-2+deb10u1 +libglx0==1.1.0-1 +libgnutls-dane0==3.6.7-4+deb10u7 +libgomp1==8.3.0-6 +libgpm2==1.20.7-5 +libgraphite2-3==1.3.13-7 +libgs9==9.27~dfsg-2+deb10u5 +libgs9-common==9.27~dfsg-2+deb10u5 +libgssapi-krb5-2==1.17-3+deb10u3 +libgts-0.7-5==0.7.6+darcs121130-4 +libgts-bin==0.7.6+darcs121130-4 +libgvc6==2.40.1-6+deb10u1 +libgvpr2==2.40.1-6+deb10u1 +libharfbuzz-icu0==2.3.1-1 +libharfbuzz0b==2.3.1-1 +libhtml-form-perl==6.03-1 +libhtml-format-perl==2.12-1 +libhtml-parser-perl==3.72-3+b3 +libhtml-tagset-perl==3.20-3 +libhtml-tree-perl==5.07-2 +libhttp-cookies-perl==6.04-1 +libhttp-daemon-perl==6.01-3 +libhttp-date-perl==6.02-1 +libhttp-message-perl==6.18-1 +libhttp-negotiate-perl==6.01-1 +libice6==2:1.0.9-2 +libicu63==63.1-6+deb10u3 +libidn11==1.33-2.2 +libijs-0.35==0.35-14 +libimagequant0==2.12.2-1.1 +libio-html-perl==1.001-1 +libio-socket-ssl-perl==2.060-3 +libio-stringy-perl==2.111-3 +libip4tc0==1.8.2-4 +libipc-system-simple-perl==1.25-4 +libipt2==2.0-2 +libisl19==0.20-2 +libitm1==8.3.0-6 +libjansson4==2.12-1 +libjbig0==2.1-3.1+b2 +libjbig2dec0==0.16-1+deb10u1 +libjpeg62-turbo==1:1.5.2-2+deb10u1 +libjs-jquery==3.3.1~dfsg-3+deb10u1 +libjs-jquery-ui==1.12.1+dfsg-5 +libjson-c3==0.12.1+ds-2+deb10u1 +libjsoncpp1==1.7.4-3 +libk5crypto3==1.17-3+deb10u3 +libkeyutils1==1.6-6 +libkmod2==26-1 +libkpathsea6==2018.20181218.49446-1 +libkrb5-3==1.17-3+deb10u3 +libkrb5support0==1.17-3+deb10u3 +libksba8==1.3.5-2 +liblab-gamut1==2.40.1-6+deb10u1 +liblapack3==3.8.0-2 +liblcms2-2==2.9-3 +libldap-2.4-2==2.4.47+dfsg-3+deb10u7 +libldap-common==2.4.47+dfsg-3+deb10u7 +libllvm7==1:7.0.1-8+deb10u2 +liblocale-gettext-perl==1.07-3+b4 +liblockfile-bin==1.14-1.1 +liblockfile1==1.14-1.1 +liblognorm5==2.0.5-1 +liblsan0==8.3.0-6 +libltdl7==2.4.6-9 +liblwp-mediatypes-perl==6.02-1 +liblwp-protocol-https-perl==6.07-2 +libmagic-mgc==1:5.35-4+deb10u2 +libmagic1==1:5.35-4+deb10u2 +libmailtools-perl==2.18-1 +libmpc3==1.1.0-1 +libmpdec2==2.4.2-2 +libmpfr6==4.0.2-1 +libmpx2==8.3.0-6 +libncurses6==6.1+20181013-2+deb10u2 +libnet-dbus-perl==1.1.0-5+b1 +libnet-http-perl==6.18-1 +libnet-smtp-ssl-perl==1.04-1 +libnet-ssleay-perl==1.85-2+b1 +libnet1==1.1.6+dfsg-3.1 +libnghttp2-14==1.36.0-2+deb10u1 +libnl-3-200==3.4.0-1 +libnl-cli-3-200==3.4.0-1 +libnl-genl-3-200==3.4.0-1 +libnl-nf-3-200==3.4.0-1 +libnl-route-3-200==3.4.0-1 +libnpth0==1.6-1 +libnss-systemd==241-7~deb10u8 +libopenjp2-7==2.3.0-2+deb10u2 +libopts25==1:5.18.12-4 +libpam-systemd==241-7~deb10u8 +libpango-1.0-0==1.42.4-8~deb10u1 +libpangocairo-1.0-0==1.42.4-8~deb10u1 +libpangoft2-1.0-0==1.42.4-8~deb10u1 +libpaper-utils==1.1.28 +libpaper1==1.1.28 +libpathplan4==2.40.1-6+deb10u1 +libpcap-dev==1.8.1-6+deb10u1 +libpcap0.8==1.8.1-6+deb10u1 +libpcap0.8-dev==1.8.1-6+deb10u1 +libpciaccess0==0.14-1 +libpcre2-16-0==10.32-5 +libpcre2-8-0==10.32-5 +libperl5.28==5.28.1-6+deb10u1 +libpixman-1-0==0.36.0-1 +libpng16-16==1.6.36-6 +libpopt0==1.16-12 +libpotrace0==1.15-1 +libprocps7==2:3.3.15-2 +libpsl5==0.20.2-2 +libptexenc1==2018.20181218.49446-1 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libpython3-dev==3.7.3-1 +libpython3-stdlib==3.7.3-1 +libpython3.7==3.7.3-2+deb10u3 +libpython3.7-dev==3.7.3-2+deb10u3 +libpython3.7-minimal==3.7.3-2+deb10u3 +libpython3.7-stdlib==3.7.3-2+deb10u3 +libqt5core5a==5.11.3+dfsg1-1+deb10u4 +libqt5dbus5==5.11.3+dfsg1-1+deb10u4 +libqt5network5==5.11.3+dfsg1-1+deb10u4 +libquadmath0==8.3.0-6 +libreadline7==7.0-5 +librhash0==1.3.8-1 +librtmp1==2.4+20151223.gitfa8646d.1-2 +libsasl2-2==2.1.27+dfsg-1+deb10u2 +libsasl2-modules==2.1.27+dfsg-1+deb10u2 +libsasl2-modules-db==2.1.27+dfsg-1+deb10u2 +libsensors-config==1:3.5.0-3 +libsensors5==1:3.5.0-3 +libsigsegv2==2.12-2 +libsm6==2:1.2.3-1 +libsqlite3-0==3.27.2-3+deb10u1 +libssh2-1==1.8.0-2.1 +libssl-dev==1.1.1n-0+deb10u2 +libssl1.1==1.1.1n-0+deb10u2 +libstdc++-8-dev==8.3.0-6 +libsynctex2==2018.20181218.49446-1 +libtacacs+1==4.0.4.27a-3 +libtcl8.6==8.6.9+dfsg-2 +libteam-utils==1.28-1 +libteam5==1.28-1 +libteamdctl0==1.28-1 +libteckit0==2.5.8+ds2-5 +libtexlua52==2018.20181218.49446-1 +libtexlua53==2018.20181218.49446-1 +libtexluajit2==2018.20181218.49446-1 +libtext-iconv-perl==1.7-5+b7 +libthai-data==0.1.28-2 +libthai0==0.1.28-2 +libthrift-0.11.0==0.11.0-4 +libtie-ixhash-perl==1.23-2 +libtiff5==4.1.0+git191117-2~deb10u4 +libtimedate-perl==2.3000-2+deb10u1 +libtk8.6==8.6.9-2 +libtry-tiny-perl==0.30-1 +libtsan0==8.3.0-6 +libubsan1==8.3.0-6 +libunbound8==1.9.0-2+deb10u2 +liburi-perl==1.76-1 +libutempter0==1.1.6-3 +libuv1==1.24.1-1+deb10u1 +libwebp6==0.6.1-2+deb10u1 +libwebpdemux2==0.6.1-2+deb10u1 +libwebpmux3==0.6.1-2+deb10u1 +libwoff1==1.0.2-1 +libwrap0==7.6.q-28 +libwww-perl==6.36-2 +libwww-robotrules-perl==6.02-1 +libx11-6==2:1.6.7-1+deb10u2 +libx11-data==2:1.6.7-1+deb10u2 +libx11-protocol-perl==0.56-7 +libx11-xcb1==2:1.6.7-1+deb10u2 +libxau6==1:1.0.8-1+b2 +libxaw7==2:1.0.13-1+b2 +libxcb-dri2-0==1.13.1-2 +libxcb-dri3-0==1.13.1-2 +libxcb-glx0==1.13.1-2 +libxcb-present0==1.13.1-2 +libxcb-render0==1.13.1-2 +libxcb-shape0==1.13.1-2 +libxcb-shm0==1.13.1-2 +libxcb-sync1==1.13.1-2 +libxcb1==1.13.1-2 +libxcomposite1==1:0.4.4-2 +libxcursor1==1:1.1.15-2 +libxdamage1==1:1.1.4-3+b3 +libxdmcp6==1:1.1.2-3 +libxdot4==2.40.1-6+deb10u1 +libxext6==2:1.3.3-1+b2 +libxfixes3==1:5.0.3-1 +libxft2==2.3.2-2 +libxi6==2:1.7.9-1 +libxinerama1==2:1.1.4-2 +libxml-parser-perl==2.44-4 +libxml-twig-perl==1:3.50-1.1 +libxml-xpathengine-perl==0.14-1 +libxml2==2.9.4+dfsg1-7+deb10u4 +libxmu6==2:1.1.2-2+b3 +libxmuu1==2:1.1.2-2+b3 +libxpm4==1:3.5.12-1 +libxrandr2==2:1.5.1-1 +libxrender1==1:0.9.10-1 +libxshmfence1==1.3-1 +libxss1==1:1.2.3-1 +libxt6==1:1.1.5-1+b3 +libxtst6==2:1.2.3-1 +libxv1==2:1.0.11-1 +libxxf86dga1==2:1.1.4-1+b3 +libxxf86vm1==1:1.1.4-1+b2 +libxxhash0==0.6.5-2 +libzzip-0-13==0.13.62-3.2+deb10u1 +linux-libc-dev==4.19.235-1 +lmodern==2.004.5-6 +logrotate==3.14.0-4 +lsb-base==10.2019051400 +lsof==4.91+dfsg-1 +m4==1.4.18-2 +make==4.2.1-1.2 +manpages==4.16-2 +manpages-dev==4.16-2 +mime-support==3.62 +ncurses-term==6.1+20181013-2+deb10u2 +net-tools==1.60+git20180626.aebd88e-1 +netbase==5.6 +ntp==1:4.2.8p12+dfsg-4 +ntpdate==1:4.2.8p12+dfsg-4 +ntpstat==0.0.0.1-2 +openssh-client==1:7.9p1-10+deb10u2 +openssh-server==1:7.9p1-10+deb10u2 +openssh-sftp-server==1:7.9p1-10+deb10u2 +openssl==1.1.1n-0+deb10u2 +patch==2.7.6-3+deb10u1 +perl==5.28.1-6+deb10u1 +perl-modules-5.28==5.28.1-6+deb10u1 +perl-openssl-defaults==3 +pinentry-curses==1.1.0-2 +pkg-config==0.29-6 +poppler-data==0.4.9-2 +procps==2:3.3.15-2 +psmisc==23.2-1+deb10u1 +publicsuffix==20211109.1735-0+deb10u1 +python==2.7.16-1 +python-dev==2.7.16-1 +python-libpcap==0.6.4-1 +python-matplotlib-data==3.0.2-2 +python-minimal==2.7.16-1 +python-pip-whl==18.1-5 +python-ptf==0.9-1 +python-saithrift==0.9.4 +python-scapy==2.4.0-2 +python-six==1.12.0-1 +python-thrift==0.11.0-4 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +python3==3.7.3-1 +python3-asn1crypto==0.24.0-1 +python3-cffi-backend==1.12.2-1 +python3-crypto==2.6.1-9+b1 +python3-cryptography==2.6.1-3+deb10u2 +python3-cycler==0.10.0-1 +python3-dateutil==2.7.3-3 +python3-dbus==1.2.8-3 +python3-decorator==4.3.0-1.1 +python3-dev==3.7.3-1 +python3-distutils==3.7.3-1 +python3-entrypoints==0.3-1 +python3-gi==3.30.4-1 +python3-ipython==5.8.0-1+deb10u1 +python3-ipython-genutils==0.2.0-1 +python3-keyring==17.1.1-1 +python3-keyrings.alt==3.1.1-1 +python3-kiwisolver==1.0.1-2+b1 +python3-lib2to3==3.7.3-1 +python3-matplotlib==3.0.2-2 +python3-minimal==3.7.3-1 +python3-numpy==1:1.16.2-1 +python3-olefile==0.46-1 +python3-pexpect==4.6.0-1 +python3-pickleshare==0.7.5-1 +python3-pil==5.4.1-2+deb10u3 +python3-pip==18.1-5 +python3-pkg-resources==40.8.0-1 +python3-prompt-toolkit==1.0.15-1 +python3-ptyprocess==0.6.0-1 +python3-pygments==2.3.1+dfsg-1+deb10u2 +python3-pyparsing==2.2.0+dfsg1-2 +python3-pyx==0.14.1-9 +python3-scapy==2.4.0-2 +python3-secretstorage==2.3.1-2 +python3-setuptools==40.8.0-1 +python3-simplegeneric==0.8.1-2 +python3-six==1.12.0-1 +python3-tk==3.7.3-1 +python3-traitlets==4.3.2-1 +python3-venv==3.7.3-1 +python3-wcwidth==0.1.7+dfsg1-3 +python3-wheel==0.32.3-2 +python3-xdg==0.25-5 +python3.7==3.7.3-2+deb10u3 +python3.7-dev==3.7.3-2+deb10u3 +python3.7-minimal==3.7.3-2+deb10u3 +python3.7-venv==3.7.3-2+deb10u3 +qttranslations5-l10n==5.11.3-2 +readline-common==7.0-5 +rsyslog==8.1901.0-1+deb10u2 +sensible-utils==0.0.12 +shared-mime-info==1.10-1 +sntp==1:4.2.8p12+dfsg-4 +systemd==241-7~deb10u8 +systemd-sysv==241-7~deb10u8 +t1utils==1.41-3 +tacacs+==4.0.4.27a-3 +tcpdump==4.9.3-1~deb10u2 +telnet==0.17-41.2 +tex-common==6.11 +texlive-base==2018.20190227-2 +texlive-binaries==2018.20181218.49446-1 +texlive-latex-base==2018.20190227-2 +tk8.6-blt2.5==2.5.3+dfsg-4 +tmux==2.8-3 +traceroute==1:2.1.0-2 +ttf-bitstream-vera==1.10-8 +tzdata==2021a-0+deb10u5 +ucf==3.0038+nmu1 +unzip==6.0-23+deb10u2 +vim==2:8.1.0875-5+deb10u2 +vim-common==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 +wget==1.20.1-1.1 +x11-common==1:7.7+19 +x11-utils==7.7+4 +x11-xserver-utils==7.7+8 +xauth==1:1.0.10-1 +xdg-user-dirs==0.17-2 +xdg-utils==1.1.3-1+deb10u1 +xfonts-encodings==1:1.0.4-2 +xfonts-utils==1:7.7+6 +xxd==2:8.1.0875-5+deb10u2 +xz-utils==5.2.4-1+deb10u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-ptf/versions-py2 b/files/build/versions/dockers/docker-ptf/versions-py2 new file mode 100644 index 000000000000..1f04aee01357 --- /dev/null +++ b/files/build/versions/dockers/docker-ptf/versions-py2 @@ -0,0 +1,69 @@ +backports.functools-lru-cache==1.6.4 +backports.shutil-get-terminal-size==1.0.0 +bcrypt==3.1.7 +cffi==1.15.0 +click==7.1.2 +contextlib2==0.6.0.post1 +cryptography==3.3.2 +decorator==4.4.2 +dpkt==1.9.7.2 +enum34==1.1.6 +exabgp==3.4.17 +flask==1.0 +flask-httpauth==2.5.0 +future==0.18.2 +futures==3.2.0 +grpcio==1.18.0 +grpcio-tools==1.15.0 +importlib-resources==3.3.1 +ipaddress==1.0.23 +ipython==5.4.1 +ipython-genutils==0.2.0 +itsdangerous==1.1.0 +jinja2==2.11.3 +markupsafe==1.1.1 +netaddr==0.8.0 +nnpy==1.4.2 +oslo.config==2.1.0 +paramiko==2.11.0 +pathlib2==2.3.7.post1 +pbr==2.0.0 +pexpect==4.8.0 +pickleshare==0.7.5 +plumbum==1.7.2 +prompt-toolkit==1.0.18 +protobuf==3.6.1 +ptf==0.9.1 +ptyprocess==0.7.0 +pyaml==21.10.1 +pybrctl==0.1.3 +pycparser==2.21 +pygments==2.5.2 +pylibpcap==0.6.4 +pynacl==1.4.0 +pyrasite==2.0 +pyro4==4.82 +pysubnettree==0.26 +pyyaml==5.4.1 +retrying==1.3.3 +rpyc==4.1.5 +saithrift==0.9 +scandir==1.10.0 +scapy==2.2.0.dev0 +selectors34==1.2 +serpent==1.28 +simplegeneric==0.8.1 +singledispatch==3.7.0 +six==1.12.0 +stevedore==1.32.0 +supervisor==4.2.4 +thrift==0.11.0 +traitlets==4.3.3 +twisted==16.0.0 +typing==3.10.0.0 +unittest-xml-reporting==2.5.2 +wcwidth==0.2.5 +werkzeug==1.0.1 +yabgp==0.8.2 +zipp==1.2.0 +zope.interface==5.4.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-ptf/versions-py3 b/files/build/versions/dockers/docker-ptf/versions-py3 new file mode 100644 index 000000000000..68ff645ebbd6 --- /dev/null +++ b/files/build/versions/dockers/docker-ptf/versions-py3 @@ -0,0 +1,30 @@ +asn1crypto==0.24.0 +cryptography==2.6.1 +cycler==0.10.0 +decorator==4.3.0 +entrypoints==0.3 +ipython==5.8.0 +ipython-genutils==0.2.0 +keyring==17.1.1 +keyrings.alt==3.1.1 +kiwisolver==1.0.1 +matplotlib==3.0.2 +numpy==1.16.2 +olefile==0.46 +pexpect==4.6.0 +pickleshare==0.7.5 +pillow==5.4.1 +prompt-toolkit==1.0.15 +pycrypto==2.6.1 +pygments==2.3.1 +pygobject==3.30.4 +pyparsing==2.2.0 +python-dateutil==2.7.3 +pyx==0.14.1 +pyxdg==0.25 +scapy==2.4.0 +secretstorage==2.3.1 +simplegeneric==0.8.1 +six==1.12.0 +traitlets==4.3.2 +wcwidth==0.1.7 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-router-advertiser/versions-deb-bullseye b/files/build/versions/dockers/docker-router-advertiser/versions-deb-bullseye new file mode 100644 index 000000000000..cbb71db18c65 --- /dev/null +++ b/files/build/versions/dockers/docker-router-advertiser/versions-deb-bullseye @@ -0,0 +1,26 @@ +gdb==10.1-1.7 +gdbserver==10.1-1.7 +libbabeltrace1==1.5.8-1+b3 +libboost-regex1.74.0==1.74.0-9 +libcbor0==0.5.0+dfsg-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libfido2-1==1.6.0-2 +libglib2.0-0==2.66.8-1 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu67==67.1-7 +libipt2==2.0.3-1 +libmpfr6==4.1.0-3 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libunwind8==1.3.2-2 +openssh-client==1:8.4p1-5 +radvd==1:2.18-3 +sshpass==1.09-1+b1 +strace==5.10-1 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sflow/versions-deb-buster b/files/build/versions/dockers/docker-sflow/versions-deb-buster new file mode 100644 index 000000000000..422ff6f697f2 --- /dev/null +++ b/files/build/versions/dockers/docker-sflow/versions-deb-buster @@ -0,0 +1,22 @@ +dmidecode==3.2-1 +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +hsflowd==2.0.34-1 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +psample==1.1-1 +sflowtool==5.04 +sshpass==1.06-1 +strace==4.26-0.2 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-snmp/versions-deb-buster b/files/build/versions/dockers/docker-snmp/versions-deb-buster new file mode 100644 index 000000000000..38f6e3e081ed --- /dev/null +++ b/files/build/versions/dockers/docker-snmp/versions-deb-buster @@ -0,0 +1,67 @@ +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +dh-python==3.20190308 +freeipmi-common==1.6.3-1.1 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +ipmitool==1.8.18-6+deb10u1 +libasan5==8.3.0-6 +libbabeltrace1==1.5.6-2+deb10u1 +libbinutils==2.31.1-16 +libbsd0==0.9.1-2+deb10u1 +libc-dev-bin==2.28-10+deb10u1 +libc-l10n==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libcc1-0==8.3.0-6 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libexpat1-dev==2.2.6-2+deb10u4 +libfreeipmi17==1.6.3-1.1 +libgcc-8-dev==8.3.0-6 +libglib2.0-0==2.58.3-2+deb10u3 +libgomp1==8.3.0-6 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libisl19==0.20-2 +libitm1==8.3.0-6 +liblsan0==8.3.0-6 +libmariadb3==1:10.3.34-0+deb10u1 +libmpc3==1.1.0-1 +libmpfr6==4.0.2-1 +libmpx2==8.3.0-6 +libpci3==1:3.5.2-1 +libpopt0==1.16-12 +libpython3-dev==3.7.3-1 +libpython3.7-dev==3.7.3-2+deb10u3 +libquadmath0==8.3.0-6 +libsensors-config==1:3.5.0-3 +libsensors5==1:3.5.0-3 +libsnmp-base==5.7.3+dfsg-5 +libsnmp30==5.7.3+dfsg-5 +libsnmp30-dbg==5.7.3+dfsg-5 +libswsscommon-dbg==1.0.0 +libtsan0==8.3.0-6 +libubsan1==8.3.0-6 +libunwind8==1.2.1-10~deb10u1 +linux-libc-dev==4.19.235-1 +locales==2.28-10+deb10u1 +make==4.2.1-1.2 +mariadb-common==1:10.3.34-0+deb10u1 +mysql-common==5.8+1.0.5 +openssh-client==1:7.9p1-10+deb10u2 +python3-dev==3.7.3-1 +python3.7-dev==3.7.3-2+deb10u3 +snmp==5.7.3+dfsg-5 +snmp-dbgsym==5.7.3+dfsg-5 +snmpd==5.7.3+dfsg-5 +snmpd-dbgsym==5.7.3+dfsg-5 +sshpass==1.06-1 +strace==4.26-0.2 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-snmp/versions-deb-buster-arm64 b/files/build/versions/dockers/docker-snmp/versions-deb-buster-arm64 new file mode 100644 index 000000000000..76a3c3a88288 --- /dev/null +++ b/files/build/versions/dockers/docker-snmp/versions-deb-buster-arm64 @@ -0,0 +1 @@ +binutils-aarch64-linux-gnu==2.31.1-16 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-snmp/versions-deb-buster-armhf b/files/build/versions/dockers/docker-snmp/versions-deb-buster-armhf new file mode 100644 index 000000000000..568b8b43bc13 --- /dev/null +++ b/files/build/versions/dockers/docker-snmp/versions-deb-buster-armhf @@ -0,0 +1 @@ +binutils-arm-linux-gnueabihf==2.31.1-16 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-snmp/versions-py3 b/files/build/versions/dockers/docker-snmp/versions-py3 new file mode 100644 index 000000000000..ab2b43ab082f --- /dev/null +++ b/files/build/versions/dockers/docker-snmp/versions-py3 @@ -0,0 +1,4 @@ +hiredis==2.0.0 +psutil==5.9.1 +python-arptable==0.0.2 +smbus==1.1.post2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-deb-buster b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-deb-buster new file mode 100644 index 000000000000..0dce31058746 --- /dev/null +++ b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-deb-buster @@ -0,0 +1,26 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libcjson-dev==1.7.10-1.1+deb10u1 +libcjson1==1.7.10-1.1+deb10u1 +libcurl3-gnutls==7.64.0-4+deb10u2 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu63==63.1-6+deb10u3 +libipt2==2.0-2 +libpopt0==1.16-12 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +libxml2==2.9.4+dfsg1-7+deb10u4 +openssh-client==1:7.9p1-10+deb10u2 +sonic-mgmt-common==1.0.0 +sonic-mgmt-framework==1.0-01 +sonic-mgmt-framework-dbg==1.0-01 +sshpass==1.06-1 +strace==4.26-0.2 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 new file mode 100644 index 000000000000..bc529f84381c --- /dev/null +++ b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 @@ -0,0 +1,26 @@ +attrs==21.4.0 +certifi==2017.4.17 +charset-normalizer==2.0.12 +click==8.1.3 +clickclick==20.10.2 +connexion==2.7.0 +flask==2.1.2 +grpcio==1.46.3 +grpcio-tools==1.20.0 +idna==3.3 +importlib-metadata==4.11.4 +importlib-resources==5.7.1 +inflection==0.5.1 +itsdangerous==2.1.2 +jsonschema==4.6.0 +openapi-schema-validator==0.2.3 +openapi-spec-validator==0.4.0 +protobuf==4.21.1 +pyrsistent==0.18.1 +python-dateutil==2.6.0 +requests==2.28.0 +six==1.11.0 +typing_extensions==4.2.0 +urllib3==1.26.5 +werkzeug==2.1.2 +zipp==3.8.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-telemetry/versions-deb-bullseye b/files/build/versions/dockers/docker-sonic-telemetry/versions-deb-bullseye new file mode 100644 index 000000000000..8823d5c6ef45 --- /dev/null +++ b/files/build/versions/dockers/docker-sonic-telemetry/versions-deb-bullseye @@ -0,0 +1,27 @@ +gdb==10.1-1.7 +gdbserver==10.1-1.7 +libbabeltrace1==1.5.8-1+b3 +libboost-regex1.74.0==1.74.0-9 +libcbor0==0.5.0+dfsg-2 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libfido2-1==1.6.0-2 +libglib2.0-0==2.66.8-1 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu67==67.1-7 +libipt2==2.0.3-1 +libmpfr6==4.1.0-3 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libunwind8==1.3.2-2 +openssh-client==1:8.4p1-5 +sonic-mgmt-common==1.0.0 +sonic-telemetry==0.1 +sshpass==1.09-1+b1 +strace==5.10-1 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-vs/versions-deb-buster b/files/build/versions/dockers/docker-sonic-vs/versions-deb-buster new file mode 100644 index 000000000000..1c6e788d3d60 --- /dev/null +++ b/files/build/versions/dockers/docker-sonic-vs/versions-deb-buster @@ -0,0 +1,215 @@ +arping==2.19-6 +bash-completion==1:2.8-6 +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +bridge-utils==1.6-2 +build-essential==12.6 +conntrack==1:1.4.5-2 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +cron==3.0pl1-134+deb10u1 +dh-python==3.20190308 +dirmngr==2.2.12-1+deb10u1 +dmsetup==2:1.02.155-3 +ethtool==1:4.19-1 +fontconfig-config==2.13.1-2 +fonts-dejavu-core==2.37-1 +frr==8.2.2-sonic-0 +g++==4:8.3.0-1 +g++-8==8.3.0-6 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +gettext-base==0.19.8.1-9 +gir1.2-freedesktop==1.58.3-2 +gir1.2-glib-2.0==1.58.3-2 +gnupg==2.2.12-1+deb10u1 +gnupg-l10n==2.2.12-1+deb10u1 +gnupg-utils==2.2.12-1+deb10u1 +gobject-introspection==1.58.3-2 +gpg==2.2.12-1+deb10u1 +gpg-agent==2.2.12-1+deb10u1 +gpg-wks-client==2.2.12-1+deb10u1 +gpg-wks-server==2.2.12-1+deb10u1 +gpgconf==2.2.12-1+deb10u1 +gpgsm==2.2.12-1+deb10u1 +grub-common==2.02+dfsg1-20+deb10u4 +grub2-common==2.02+dfsg1-20+deb10u4 +ifupdown==0.8.35 +iproute2==5.10.0-4~bpo10+1 +iptables==1.8.2-4 +libasan5==8.3.0-6 +libassuan0==2.5.2-1 +libbinutils==2.31.1-16 +libblkid-dev==2.33.1-0.1 +libboost-atomic1.71.0==1.71.0-6~bpo10+1 +libboost-program-options1.71.0==1.71.0-6~bpo10+1 +libboost-system1.71.0==1.71.0-6~bpo10+1 +libboost-thread1.71.0==1.71.0-6~bpo10+1 +libbpf0==1:0.3-2~bpo10+1 +libbsd0==0.9.1-2+deb10u1 +libc-ares2==1.14.0-1+deb10u1 +libc-dev-bin==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libcairo-gobject2==1.16.0-4+deb10u1 +libcairo-script-interpreter2==1.16.0-4+deb10u1 +libcairo2==1.16.0-4+deb10u1 +libcairo2-dev==1.16.0-4+deb10u1 +libcc1-0==8.3.0-6 +libdbus-1-dev==1.12.20-0+deb10u1 +libdevmapper1.02.1==2:1.02.155-3 +libdouble-conversion1==3.1.0-3 +libdpkg-perl==1.19.8 +libedit2==3.1-20181209-1 +libefiboot1==37-2+deb10u1 +libefivar1==37-2+deb10u1 +libexpat1-dev==2.2.6-2+deb10u4 +libffi-dev==3.2.1-9 +libfontconfig1==2.13.1-2 +libfontconfig1-dev==2.13.1-2 +libfreetype6==2.9.1-3+deb10u2 +libfreetype6-dev==2.9.1-3+deb10u2 +libfuse2==2.9.9-1+deb10u1 +libgcc-8-dev==8.3.0-6 +libgirepository-1.0-1==1.58.3-2 +libgirepository1.0-dev==1.58.3-2 +libglib2.0-0==2.58.3-2+deb10u3 +libglib2.0-bin==2.58.3-2+deb10u3 +libglib2.0-data==2.58.3-2+deb10u3 +libglib2.0-dev==2.58.3-2+deb10u3 +libglib2.0-dev-bin==2.58.3-2+deb10u3 +libgomp1==8.3.0-6 +libice-dev==2:1.0.9-2 +libice6==2:1.0.9-2 +libicu63==63.1-6+deb10u3 +libip4tc0==1.8.2-4 +libip6tc0==1.8.2-4 +libiptc0==1.8.2-4 +libisl19==0.20-2 +libitm1==8.3.0-6 +libjson-c3==0.12.1+ds-2+deb10u1 +libjudydebian1==1.0.5-5 +libksba8==1.3.5-2 +liblsan0==8.3.0-6 +liblzo2-2==2.10-0.1 +libmount-dev==2.33.1-0.1 +libmpc3==1.1.0-1 +libmpfr6==4.0.2-1 +libmpx2==8.3.0-6 +libnet1==1.1.6+dfsg-3.1 +libnetfilter-conntrack3==1.0.7-1 +libnfnetlink0==1.0.1-3+b1 +libnftnl11==1.1.2-2 +libnpth0==1.6-1 +libpcap0.8==1.8.1-6+deb10u1 +libpcre16-3==2:8.39-12 +libpcre2-16-0==10.32-5 +libpcre2-8-0==10.32-5 +libpcre3-dev==2:8.39-12 +libpcre32-3==2:8.39-12 +libpcrecpp0v5==2:8.39-12 +libpixman-1-0==0.36.0-1 +libpixman-1-dev==0.36.0-1 +libpng-dev==1.6.36-6 +libpng16-16==1.6.36-6 +libpopt0==1.16-12 +libpthread-stubs0-dev==0.4-1 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libpython3-dev==3.7.3-1 +libpython3.7-dev==3.7.3-2+deb10u3 +libqt5core5a==5.11.3+dfsg1-1+deb10u4 +libqt5dbus5==5.11.3+dfsg1-1+deb10u4 +libqt5network5==5.11.3+dfsg1-1+deb10u4 +libquadmath0==8.3.0-6 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libsaivs==1.0.0 +libselinux1-dev==2.8-1+b1 +libsepol1-dev==2.8-1 +libsm-dev==2:1.2.3-1 +libsm6==2:1.2.3-1 +libssl-dev==1.1.1n-0+deb10u2 +libstdc++-8-dev==8.3.0-6 +libsystemd-dev==241-7~deb10u8 +libteam-utils==1.30-1 +libteam5==1.30-1 +libteamdctl0==1.30-1 +libtsan0==8.3.0-6 +libubsan1==8.3.0-6 +libunwind8==1.2.1-10~deb10u1 +libx11-6==2:1.6.7-1+deb10u2 +libx11-data==2:1.6.7-1+deb10u2 +libx11-dev==2:1.6.7-1+deb10u2 +libxau-dev==1:1.0.8-1+b2 +libxau6==1:1.0.8-1+b2 +libxcb-render0==1.13.1-2 +libxcb-render0-dev==1.13.1-2 +libxcb-shm0==1.13.1-2 +libxcb-shm0-dev==1.13.1-2 +libxcb1==1.13.1-2 +libxcb1-dev==1.13.1-2 +libxdmcp-dev==1:1.1.2-3 +libxdmcp6==1:1.1.2-3 +libxext-dev==2:1.3.3-1+b2 +libxext6==2:1.3.3-1+b2 +libxrender-dev==1:0.9.10-1 +libxrender1==1:0.9.10-1 +libyang2==2.0.112-6 +linux-libc-dev==4.19.235-1 +logrotate==3.14.0-4 +lsof==4.91+dfsg-1 +make==4.2.1-1.2 +ndisc6==1.0.4-1 +openssh-client==1:7.9p1-10+deb10u2 +openssh-server==1:7.9p1-10+deb10u2 +openssh-sftp-server==1:7.9p1-10+deb10u2 +patch==2.7.6-3+deb10u1 +pinentry-curses==1.1.0-2 +pkg-config==0.29-6 +psmisc==23.2-1+deb10u1 +python==2.7.16-1 +python-dev==2.7.16-1 +python-minimal==2.7.16-1 +python-pip==18.1-5 +python-pip-whl==18.1-5 +python-ply==3.11-3 +python-scapy==2.4.0-2 +python-swsscommon==1.0.0 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +python3-dev==3.7.3-1 +python3-mako==1.0.7+ds1-1 +python3-markdown==3.0.1-3 +python3-markupsafe==1.1.0-1 +python3-pkg-resources==40.8.0-1 +python3.7-dev==3.7.3-2+deb10u3 +redis-server==5:6.0.6-1~bpo10+1 +sensible-utils==0.0.12 +sonic-device-data==1.0-1 +sonic-host-services-data==1.0-1 +sonic-utilities-data==1.0-1 +swig==3.0.12-2 +swig3.0==3.0.12-2 +swss==1.0.0 +syncd-vs==1.0.0 +tcpdump==4.9.3-1~deb10u2 +ucf==3.0038+nmu1 +uuid-dev==2.33.1-0.1 +x11-common==1:7.7+19 +x11proto-core-dev==2018.4-4 +x11proto-dev==2018.4-4 +x11proto-xext-dev==2018.4-4 +xorg-sgml-doctools==1:1.11-1 +xtrans-dev==1.3.5-1 +zlib1g-dev==1:1.2.11.dfsg-1+deb10u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-vs/versions-py2 b/files/build/versions/dockers/docker-sonic-vs/versions-py2 new file mode 100644 index 000000000000..d6a13c7bdda0 --- /dev/null +++ b/files/build/versions/dockers/docker-sonic-vs/versions-py2 @@ -0,0 +1,13 @@ +certifi==2021.10.8 +chardet==4.0.0 +crontab==0.23.0 +idna==2.10 +monotonic==1.5 +netifaces==0.10.7 +ply==3.11 +py2-ipaddress==3.4.2 +pyroute2==0.5.3 +requests==2.27.1 +scapy==2.4.0 +six==1.16.0 +urllib3==1.26.9 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-vs/versions-py3 b/files/build/versions/dockers/docker-sonic-vs/versions-py3 new file mode 100644 index 000000000000..6a36185b4f3c --- /dev/null +++ b/files/build/versions/dockers/docker-sonic-vs/versions-py3 @@ -0,0 +1,34 @@ +blessed==1.19.1 +certifi==2022.5.18.1 +charset-normalizer==2.0.12 +click==7.0 +click-log==0.4.0 +colorful==0.5.4 +dbus-python==1.2.18 +docker==5.0.3 +docker-image-py==0.1.12 +enlighten==1.10.2 +filelock==3.7.1 +idna==3.3 +jsonpatch==1.32 +jsonpointer==2.3 +m2crypto==0.38.0 +netifaces==0.10.9 +pexpect==4.8.0 +prefixed==0.3.2 +prettyprinter==0.18.0 +ptyprocess==0.7.0 +pycairo==1.21.0 +pygments==2.12.0 +pygobject==3.42.1 +pyroute2==0.5.14 +requests==2.28.0 +scapy==2.4.4 +semantic-version==2.10.0 +systemd-python==234 +tabulate==0.8.2 +toposort==1.6 +urllib3==1.26.9 +wcwidth==0.2.5 +websocket-client==1.3.2 +www-authenticate==0.9.2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-swss-layer-bullseye/versions-deb-bullseye b/files/build/versions/dockers/docker-swss-layer-bullseye/versions-deb-bullseye new file mode 100644 index 000000000000..2bbf607b7222 --- /dev/null +++ b/files/build/versions/dockers/docker-swss-layer-bullseye/versions-deb-bullseye @@ -0,0 +1,6 @@ +iputils-ping==3:20210202-1 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libteam5==1.30-1 +libteamdctl0==1.30-1 +swss==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-swss-layer-buster/versions-deb-buster b/files/build/versions/dockers/docker-swss-layer-buster/versions-deb-buster new file mode 100644 index 000000000000..5690a145b7a2 --- /dev/null +++ b/files/build/versions/dockers/docker-swss-layer-buster/versions-deb-buster @@ -0,0 +1,5 @@ +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libteam5==1.30-1 +libteamdctl0==1.30-1 +swss==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-bfn-rpc/versions-deb-buster b/files/build/versions/dockers/docker-syncd-bfn-rpc/versions-deb-buster new file mode 100644 index 000000000000..aaa13c3b66f1 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-bfn-rpc/versions-deb-buster @@ -0,0 +1,71 @@ +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +build-essential==12.6 +cmake==3.13.4-1 +cmake-data==3.13.4-1 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +g++==4:8.3.0-1 +g++-8==8.3.0-6 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +libarchive13==3.3.3-4+deb10u1 +libasan5==8.3.0-6 +libbinutils==2.31.1-16 +libboost-atomic1.71.0==1.71.0-6~bpo10+1 +libcc1-0==8.3.0-6 +libdouble-conversion1==3.1.0-3 +libdpkg-perl==1.19.8 +libexpat1-dev==2.2.6-2+deb10u4 +libffi-dev==3.2.1-9 +libgcc-8-dev==8.3.0-6 +libglib2.0-0==2.58.3-2+deb10u3 +libgomp1==8.3.0-6 +libisl19==0.20-2 +libitm1==8.3.0-6 +libjsoncpp1==1.7.4-3 +liblsan0==8.3.0-6 +libmpc3==1.1.0-1 +libmpfr6==4.0.2-1 +libmpx2==8.3.0-6 +libpcre2-16-0==10.32-5 +libpcre2-8-0==10.32-5 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libqt5core5a==5.11.3+dfsg1-1+deb10u4 +libqt5dbus5==5.11.3+dfsg1-1+deb10u4 +libqt5network5==5.11.3+dfsg1-1+deb10u4 +libquadmath0==8.3.0-6 +librhash0==1.3.8-1 +libssl-dev==1.1.1n-0+deb10u2 +libstdc++-8-dev==8.3.0-6 +libthrift0==0.14.1 +libtsan0==8.3.0-6 +libubsan1==8.3.0-6 +libuv1==1.24.1-1+deb10u1 +make==4.2.1-1.2 +patch==2.7.6-3+deb10u1 +python==2.7.16-1 +python-dev==2.7.16-1 +python-minimal==2.7.16-1 +python-pip==18.1-5 +python-pip-whl==18.1-5 +python-pkg-resources==40.8.0-1 +python-ptf==0.9-1 +python-scapy==2.4.0-2 +python-setuptools==40.8.0-1 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +syncd-rpc==1.0.0 +wget==1.20.1-1.1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-bfn-rpc/versions-py2 b/files/build/versions/dockers/docker-syncd-bfn-rpc/versions-py2 new file mode 100644 index 000000000000..60b9f31f8e4a --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-bfn-rpc/versions-py2 @@ -0,0 +1,5 @@ +cffi==1.7.0 +nnpy==1.4.2 +ptf==0.9.1 +pycparser==2.21 +scapy==2.4.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-bfn/versions-deb-buster b/files/build/versions/dockers/docker-syncd-bfn/versions-deb-buster new file mode 100644 index 000000000000..43e096cc1b8d --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-bfn/versions-deb-buster @@ -0,0 +1,25 @@ +bfnplatform==1.0.0 +bfnsdk==1.0.0 +libbsd0==0.9.1-2+deb10u1 +libc-ares2==1.14.0-1+deb10u1 +libc-dev-bin==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libcurl3-gnutls==7.64.0-4+deb10u2 +libcurl4-gnutls-dev==7.64.0-4+deb10u2 +libedit2==3.1-20181209-1 +libgoogle-perftools4==2.7-1 +libicu63==63.1-6+deb10u3 +liblzma-dev==5.2.4-1+deb10u1 +libpcap-dev==1.8.1-6+deb10u1 +libpcap0.8==1.8.1-6+deb10u1 +libpcap0.8-dev==1.8.1-6+deb10u1 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libtcmalloc-minimal4==2.7-1 +libunwind-dev==1.2.1-10~deb10u1 +libunwind8==1.2.1-10~deb10u1 +libusb-1.0-0==2:1.0.22-2 +libusb-1.0-0-dev==2:1.0.22-2 +libxml2==2.9.4+dfsg1-7+deb10u4 +linux-libc-dev==4.19.235-1 +syncd==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-deb-buster new file mode 100644 index 000000000000..62a05ece6439 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-deb-buster @@ -0,0 +1,76 @@ +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +build-essential==12.6 +cmake==3.13.4-1 +cmake-data==3.13.4-1 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +g++==4:8.3.0-1 +g++-8==8.3.0-6 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +libarchive13==3.3.3-4+deb10u1 +libasan5==8.3.0-6 +libbinutils==2.31.1-16 +libboost-atomic1.71.0==1.71.0-6~bpo10+1 +libc-dev-bin==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libcc1-0==8.3.0-6 +libdouble-conversion1==3.1.0-3 +libdpkg-perl==1.19.8 +libexpat1-dev==2.2.6-2+deb10u4 +libffi-dev==3.2.1-9 +libgcc-8-dev==8.3.0-6 +libglib2.0-0==2.58.3-2+deb10u3 +libgomp1==8.3.0-6 +libicu63==63.1-6+deb10u3 +libisl19==0.20-2 +libitm1==8.3.0-6 +libjsoncpp1==1.7.4-3 +liblsan0==8.3.0-6 +libmpc3==1.1.0-1 +libmpfr6==4.0.2-1 +libmpx2==8.3.0-6 +libpcre2-16-0==10.32-5 +libpcre2-8-0==10.32-5 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libqt5core5a==5.11.3+dfsg1-1+deb10u4 +libqt5dbus5==5.11.3+dfsg1-1+deb10u4 +libqt5network5==5.11.3+dfsg1-1+deb10u4 +libquadmath0==8.3.0-6 +librhash0==1.3.8-1 +libssl-dev==1.1.1n-0+deb10u2 +libstdc++-8-dev==8.3.0-6 +libthrift-0.11.0==0.11.0-4 +libtsan0==8.3.0-6 +libubsan1==8.3.0-6 +libuv1==1.24.1-1+deb10u1 +libxml2==2.9.4+dfsg1-7+deb10u4 +linux-libc-dev==4.19.235-1 +make==4.2.1-1.2 +patch==2.7.6-3+deb10u1 +python==2.7.16-1 +python-dev==2.7.16-1 +python-minimal==2.7.16-1 +python-pip==18.1-5 +python-pip-whl==18.1-5 +python-pkg-resources==40.8.0-1 +python-ptf==0.9-1 +python-scapy==2.4.0-2 +python-setuptools==40.8.0-1 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +syncd-rpc==1.0.0 +wget==1.20.1-1.1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-py2 b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-py2 new file mode 100644 index 000000000000..60b9f31f8e4a --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-py2 @@ -0,0 +1,5 @@ +cffi==1.7.0 +nnpy==1.4.2 +ptf==0.9.1 +pycparser==2.21 +scapy==2.4.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-web b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-web new file mode 100644 index 000000000000..bb00691a9700 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-web @@ -0,0 +1,2 @@ +https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz==6f56ef28c93cee644e8c4aaaef7cfb55 +https://raw.githubusercontent.com/p4lang/ptf/master/ptf_nn/ptf_nn_agent.py==628956b660575965429cec84b1778816 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-dnx/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm-dnx/versions-deb-buster new file mode 100644 index 000000000000..9f0247c817d3 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-dnx/versions-deb-buster @@ -0,0 +1,28 @@ +ethtool==1:4.19-1 +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +kmod==26-1 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libkmod2==26-1 +libpopt0==1.16-12 +libsaibcm==7.1.0.0-1 +libsaimetadata==1.0.0 +libsaimetadata-dbg==1.0.0 +libsairedis==1.0.0 +libsairedis-dbg==1.0.0 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +syncd==1.0.0 +syncd-dbg==1.0.0 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-deb-buster new file mode 100644 index 000000000000..62a05ece6439 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-deb-buster @@ -0,0 +1,76 @@ +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +build-essential==12.6 +cmake==3.13.4-1 +cmake-data==3.13.4-1 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +g++==4:8.3.0-1 +g++-8==8.3.0-6 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +libarchive13==3.3.3-4+deb10u1 +libasan5==8.3.0-6 +libbinutils==2.31.1-16 +libboost-atomic1.71.0==1.71.0-6~bpo10+1 +libc-dev-bin==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libcc1-0==8.3.0-6 +libdouble-conversion1==3.1.0-3 +libdpkg-perl==1.19.8 +libexpat1-dev==2.2.6-2+deb10u4 +libffi-dev==3.2.1-9 +libgcc-8-dev==8.3.0-6 +libglib2.0-0==2.58.3-2+deb10u3 +libgomp1==8.3.0-6 +libicu63==63.1-6+deb10u3 +libisl19==0.20-2 +libitm1==8.3.0-6 +libjsoncpp1==1.7.4-3 +liblsan0==8.3.0-6 +libmpc3==1.1.0-1 +libmpfr6==4.0.2-1 +libmpx2==8.3.0-6 +libpcre2-16-0==10.32-5 +libpcre2-8-0==10.32-5 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libqt5core5a==5.11.3+dfsg1-1+deb10u4 +libqt5dbus5==5.11.3+dfsg1-1+deb10u4 +libqt5network5==5.11.3+dfsg1-1+deb10u4 +libquadmath0==8.3.0-6 +librhash0==1.3.8-1 +libssl-dev==1.1.1n-0+deb10u2 +libstdc++-8-dev==8.3.0-6 +libthrift-0.11.0==0.11.0-4 +libtsan0==8.3.0-6 +libubsan1==8.3.0-6 +libuv1==1.24.1-1+deb10u1 +libxml2==2.9.4+dfsg1-7+deb10u4 +linux-libc-dev==4.19.235-1 +make==4.2.1-1.2 +patch==2.7.6-3+deb10u1 +python==2.7.16-1 +python-dev==2.7.16-1 +python-minimal==2.7.16-1 +python-pip==18.1-5 +python-pip-whl==18.1-5 +python-pkg-resources==40.8.0-1 +python-ptf==0.9-1 +python-scapy==2.4.0-2 +python-setuptools==40.8.0-1 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +syncd-rpc==1.0.0 +wget==1.20.1-1.1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-py2 b/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-py2 new file mode 100644 index 000000000000..60b9f31f8e4a --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-py2 @@ -0,0 +1,5 @@ +cffi==1.7.0 +nnpy==1.4.2 +ptf==0.9.1 +pycparser==2.21 +scapy==2.4.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-web b/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-web new file mode 100644 index 000000000000..bb00691a9700 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-web @@ -0,0 +1,2 @@ +https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz==6f56ef28c93cee644e8c4aaaef7cfb55 +https://raw.githubusercontent.com/p4lang/ptf/master/ptf_nn/ptf_nn_agent.py==628956b660575965429cec84b1778816 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm/versions-deb-buster new file mode 100644 index 000000000000..0790ae1804f0 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-brcm/versions-deb-buster @@ -0,0 +1,29 @@ +ethtool==1:4.19-1 +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +kmod==26-1 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libkmod2==26-1 +libpopt0==1.16-12 +libsaibcm==7.1.0.0-1 +libsaimetadata==1.0.0 +libsaimetadata-dbg==1.0.0 +libsairedis==1.0.0 +libsairedis-dbg==1.0.0 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +libyaml-0-2==0.2.1-1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +syncd==1.0.0 +syncd-dbg==1.0.0 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-centec-rpc/versions-deb-buster b/files/build/versions/dockers/docker-syncd-centec-rpc/versions-deb-buster new file mode 100644 index 000000000000..655bb8fff570 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-centec-rpc/versions-deb-buster @@ -0,0 +1,78 @@ +binutils==2.31.1-16 +binutils-common==2.31.1-16 +binutils-x86-64-linux-gnu==2.31.1-16 +build-essential==12.6 +cmake==3.13.4-1 +cmake-data==3.13.4-1 +cpp==4:8.3.0-1 +cpp-8==8.3.0-6 +g++==4:8.3.0-1 +g++-8==8.3.0-6 +gcc==4:8.3.0-1 +gcc-8==8.3.0-6 +libarchive13==3.3.3-4+deb10u1 +libasan5==8.3.0-6 +libbinutils==2.31.1-16 +libboost-atomic1.71-dev==1.71.0-6~bpo10+1 +libboost-atomic1.71.0==1.71.0-6~bpo10+1 +libboost1.71-dev==1.71.0-6~bpo10+1 +libc-dev-bin==2.28-10+deb10u1 +libc6-dev==2.28-10+deb10u1 +libcc1-0==8.3.0-6 +libdouble-conversion1==3.1.0-3 +libdpkg-perl==1.19.8 +libexpat1-dev==2.2.6-2+deb10u4 +libffi-dev==3.2.1-9 +libgcc-8-dev==8.3.0-6 +libglib2.0-0==2.58.3-2+deb10u3 +libgomp1==8.3.0-6 +libicu63==63.1-6+deb10u3 +libisl19==0.20-2 +libitm1==8.3.0-6 +libjsoncpp1==1.7.4-3 +liblsan0==8.3.0-6 +libmpc3==1.1.0-1 +libmpfr6==4.0.2-1 +libmpx2==8.3.0-6 +libpcre2-16-0==10.32-5 +libpcre2-8-0==10.32-5 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libqt5core5a==5.11.3+dfsg1-1+deb10u4 +libqt5dbus5==5.11.3+dfsg1-1+deb10u4 +libqt5network5==5.11.3+dfsg1-1+deb10u4 +libquadmath0==8.3.0-6 +librhash0==1.3.8-1 +libssl-dev==1.1.1n-0+deb10u2 +libstdc++-8-dev==8.3.0-6 +libthrift-0.11.0==0.11.0-4 +libtsan0==8.3.0-6 +libubsan1==8.3.0-6 +libuv1==1.24.1-1+deb10u1 +libxml2==2.9.4+dfsg1-7+deb10u4 +linux-libc-dev==4.19.235-1 +make==4.2.1-1.2 +patch==2.7.6-3+deb10u1 +python==2.7.16-1 +python-dev==2.7.16-1 +python-minimal==2.7.16-1 +python-pip==18.1-5 +python-pip-whl==18.1-5 +python-pkg-resources==40.8.0-1 +python-ptf==0.9-1 +python-scapy==2.4.0-2 +python-setuptools==40.8.0-1 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +syncd-rpc==1.0.0 +wget==1.20.1-1.1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-centec-rpc/versions-py2 b/files/build/versions/dockers/docker-syncd-centec-rpc/versions-py2 new file mode 100644 index 000000000000..60b9f31f8e4a --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-centec-rpc/versions-py2 @@ -0,0 +1,5 @@ +cffi==1.7.0 +nnpy==1.4.2 +ptf==0.9.1 +pycparser==2.21 +scapy==2.4.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-centec/versions-deb-buster b/files/build/versions/dockers/docker-syncd-centec/versions-deb-buster new file mode 100644 index 000000000000..c8f9793711b4 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-centec/versions-deb-buster @@ -0,0 +1,24 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +kmod==26-1 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libkmod2==26-1 +libpopt0==1.16-12 +libsai==1.9.1-0 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +syncd==1.0.0 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-centec/versions-deb-buster-arm64 b/files/build/versions/dockers/docker-syncd-centec/versions-deb-buster-arm64 new file mode 100644 index 000000000000..e13071edf35e --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-centec/versions-deb-buster-arm64 @@ -0,0 +1,37 @@ +dmsetup==2:1.02.155-3 +keyutils==1.6-6 +libdevmapper1.02.1==2:1.02.155-3 +libevent-2.1-6==2.1.8-stable-4 +libexpat1-dev==2.2.6-2+deb10u4 +libnfsidmap2==0.25-5.1 +libpcap-dev==1.8.1-6+deb10u1 +libpcap0.8==1.8.1-6+deb10u1 +libpcap0.8-dev==1.8.1-6+deb10u1 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libsensors-config==1:3.5.0-3 +libsensors4-dev==1:3.5.0-3 +libsensors5==1:3.5.0-3 +libtirpc-common==1.1.4-0.4 +libtirpc3==1.1.4-0.4 +nfs-common==1:1.3.4-2.5+deb10u1 +python==2.7.16-1 +python-dev==2.7.16-1 +python-minimal==2.7.16-1 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +rpcbind==1.2.5-0.3+deb10u1 +sensible-utils==0.0.12 +swig==3.0.12-2 +swig3.0==3.0.12-2 +ucf==3.0038+nmu1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-deb-bullseye new file mode 100644 index 000000000000..1a806b02efa8 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-deb-bullseye @@ -0,0 +1,71 @@ +binutils==2.35.2-2 +binutils-common==2.35.2-2 +binutils-x86-64-linux-gnu==2.35.2-2 +build-essential==12.9 +bzip2==1.0.8-4 +cmake==3.18.4-2+deb11u1 +cmake-data==3.18.4-2+deb11u1 +cpp==4:10.2.1-1 +cpp-10==10.2.1-6 +g++==4:10.2.1-1 +g++-10==10.2.1-6 +gcc==4:10.2.1-1 +gcc-10==10.2.1-6 +libarchive13==3.4.3-2+deb11u1 +libasan6==10.2.1-6 +libbinutils==2.35.2-2 +libboost-atomic1.74.0==1.74.0-9 +libcc1-0==10.2.1-6 +libctf-nobfd0==2.35.2-2 +libctf0==2.35.2-2 +libdouble-conversion3==3.1.5-6.1 +libdpkg-perl==1.20.10 +libffi-dev==3.3-6 +libgcc-10-dev==10.2.1-6 +libglib2.0-0==2.66.8-1 +libgomp1==10.2.1-6 +libisl23==0.23-1 +libitm1==10.2.1-6 +libjsoncpp24==1.9.4-4 +liblsan0==10.2.1-6 +libmpc3==1.2.0-1 +libmpfr6==4.1.0-3 +libpcre2-16-0==10.36-2 +libpython2-dev==2.7.18-3 +libpython2-stdlib==2.7.18-3 +libpython2.7==2.7.18-8 +libpython2.7-dev==2.7.18-8 +libpython2.7-minimal==2.7.18-8 +libpython2.7-stdlib==2.7.18-8 +libqt5core5a==5.15.2+dfsg-9 +libqt5dbus5==5.15.2+dfsg-9 +libqt5network5==5.15.2+dfsg-9 +libquadmath0==10.2.1-6 +librhash0==1.4.1-2 +libssl-dev==1.1.1n-0+deb11u2 +libssl1.1==1.1.1n-0+deb11u2 +libstdc++-10-dev==10.2.1-6 +libthrift-0.11.0==0.11.0-4 +libtsan0==10.2.1-6 +libubsan1==10.2.1-6 +libuv1==1.40.0-2 +mailcap==3.69 +make==4.3-4.1 +mime-support==3.66 +patch==2.7.6-7 +python-dev-is-python2==2.7.18-9 +python-is-python2==2.7.18-9 +python-pkg-resources==44.1.1-1 +python-ptf==0.9-1 +python-scapy==2.4.0-2 +python-setuptools==44.1.1-1 +python2==2.7.18-3 +python2-dev==2.7.18-3 +python2-minimal==2.7.18-3 +python2.7==2.7.18-8 +python2.7-dev==2.7.18-8 +python2.7-minimal==2.7.18-8 +shared-mime-info==2.0-1 +syncd-rpc==1.0.0 +wget==1.21-1+deb11u1 +xz-utils==5.2.5-2.1~deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-py2 b/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-py2 new file mode 100644 index 000000000000..7201952ab7cd --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-py2 @@ -0,0 +1,6 @@ +cffi==1.7.0 +nnpy==1.4.2 +ptf==0.9.1 +pycparser==2.21 +python-sdk-api==4.5.1500 +scapy==2.4.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye new file mode 100644 index 000000000000..7cc5d44a5e97 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye @@ -0,0 +1,73 @@ +applibs==1.mlnx.4.5.1500 +applibs-dev==1.mlnx.4.5.1500 +gdb==10.1-1.7 +gdbserver==10.1-1.7 +iproute2-dev==1.mlnx.4.5.1500 +libbabeltrace1==1.5.8-1+b3 +libboost-regex1.74.0==1.74.0-9 +libc-dev-bin==2.31-13+deb11u3 +libc6-dev==2.31-13+deb11u3 +libcbor0==0.5.0+dfsg-2 +libcrypt-dev==1:4.4.18-4 +libcurl3-gnutls==7.74.0-1.3+deb11u1 +libdebuginfod1==0.183-1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libelf1==0.183-1 +libexpat1-dev==2.2.10-2+deb11u3 +libfido2-1==1.6.0-2 +libglib2.0-0==2.66.8-1 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu67==67.1-7 +libipt2==2.0.3-1 +libjs-sphinxdoc==3.4.3-2 +libjs-underscore==1.9.1~dfsg-3 +libmpfr6==4.1.0-3 +libnsl-dev==1.3.0-2 +libpython3-dev==3.9.2-3 +libpython3.9-dev==3.9.2-1 +libsaimetadata==1.0.0 +libsaimetadata-dbg==1.0.0 +libsairedis==1.0.0 +libsairedis-dbg==1.0.0 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libtirpc-dev==1.3.1-1 +libunwind8==1.3.2-2 +libxml2==2.9.10+dfsg-6.7+deb11u2 +linux-libc-dev==5.10.120-1 +mft==4.20.0-34 +mlnx-sai==1.mlnx.SAIRel1.21.1.0 +openssh-client==1:8.4p1-5 +python-is-python3==3.9.2-1 +python-pip-whl==20.3.4-4+deb11u1 +python-sdk-api==1.mlnx.4.5.1500 +python3-dev==3.9.2-3 +python3-pip==20.3.4-4+deb11u1 +python3-pkg-resources==52.0.0-4 +python3-setuptools==52.0.0-4 +python3-wheel==0.34.2-1 +python3.9-dev==3.9.2-1 +sshpass==1.09-1+b1 +strace==5.10-1 +sx-acl-helper==1.mlnx.4.5.1500 +sx-acl-helper-dev==1.mlnx.4.5.1500 +sx-complib==1.mlnx.4.5.1500 +sx-complib-dev==1.mlnx.4.5.1500 +sx-examples==1.mlnx.4.5.1500 +sx-examples-dev==1.mlnx.4.5.1500 +sx-gen-utils==1.mlnx.4.5.1500 +sx-gen-utils-dev==1.mlnx.4.5.1500 +sx-scew==1.mlnx.4.5.1500 +sx-scew-dev==1.mlnx.4.5.1500 +sxd-libs==1.mlnx.4.5.1500 +sxd-libs-dev==1.mlnx.4.5.1500 +syncd==1.0.0 +syncd-dbg==1.0.0 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 +wjh-libs==1.mlnx.4.5.1500 +wjh-libs-dev==1.mlnx.4.5.1500 +zlib1g-dev==1:1.2.11.dfsg-2+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mlnx/versions-py3 b/files/build/versions/dockers/docker-syncd-mlnx/versions-py3 new file mode 100644 index 000000000000..c46d8d44f0cf --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-mlnx/versions-py3 @@ -0,0 +1 @@ +python_sdk_api==4.5.1500 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-buster-armhf b/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-buster-armhf new file mode 100644 index 000000000000..17631314c5d7 --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-buster-armhf @@ -0,0 +1,41 @@ +dmsetup==2:1.02.155-3 +keyutils==1.6-6 +libdevmapper1.02.1==2:1.02.155-3 +libevent-2.1-6==2.1.8-stable-4 +libexpat1-dev==2.2.6-2+deb10u4 +libnfsidmap2==0.25-5.1 +libpcap-dev==1.8.1-6+deb10u1 +libpcap0.8==1.8.1-6+deb10u1 +libpcap0.8-dev==1.8.1-6+deb10u1 +libpython-dev==2.7.16-1 +libpython-stdlib==2.7.16-1 +libpython2-dev==2.7.16-1 +libpython2-stdlib==2.7.16-1 +libpython2.7==2.7.16-2+deb10u1 +libpython2.7-dev==2.7.16-2+deb10u1 +libpython2.7-minimal==2.7.16-2+deb10u1 +libpython2.7-stdlib==2.7.16-2+deb10u1 +libsaimetadata==1.0.0 +libsairedis==1.0.0 +libsensors-config==1:3.5.0-3 +libsensors4-dev==1:3.5.0-3 +libsensors5==1:3.5.0-3 +libtirpc-common==1.1.4-0.4 +libtirpc3==1.1.4-0.4 +mrvllibsai==1.9.1-2 +nfs-common==1:1.3.4-2.5+deb10u1 +python==2.7.16-1 +python-dev==2.7.16-1 +python-minimal==2.7.16-1 +python2==2.7.16-1 +python2-dev==2.7.16-1 +python2-minimal==2.7.16-1 +python2.7==2.7.16-2+deb10u1 +python2.7-dev==2.7.16-2+deb10u1 +python2.7-minimal==2.7.16-2+deb10u1 +rpcbind==1.2.5-0.3+deb10u1 +sensible-utils==0.0.12 +swig==3.0.12-2 +swig3.0==3.0.12-2 +syncd==1.0.0 +ucf==3.0038+nmu1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-vs/versions-deb-buster b/files/build/versions/dockers/docker-syncd-vs/versions-deb-buster new file mode 100644 index 000000000000..4f7069c028cc --- /dev/null +++ b/files/build/versions/dockers/docker-syncd-vs/versions-deb-buster @@ -0,0 +1,28 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +iproute2==5.10.0-4~bpo10+1 +libbabeltrace1==1.5.6-2+deb10u1 +libbpf0==1:0.3-2~bpo10+1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libsaimetadata==1.0.0 +libsaimetadata-dbg==1.0.0 +libsairedis==1.0.0 +libsairedis-dbg==1.0.0 +libsaivs==1.0.0 +libsaivs-dbg==1.0.0 +libswsscommon-dbg==1.0.0 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +syncd-vs==1.0.0 +syncd-vs-dbg==1.0.0 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-teamd/versions-deb-buster b/files/build/versions/dockers/docker-teamd/versions-deb-buster new file mode 100644 index 000000000000..f89cae273ac8 --- /dev/null +++ b/files/build/versions/dockers/docker-teamd/versions-deb-buster @@ -0,0 +1,22 @@ +gdb==8.2.1-2+b3 +gdbserver==8.2.1-2+b3 +libbabeltrace1==1.5.6-2+deb10u1 +libbsd0==0.9.1-2+deb10u1 +libdw1==0.176-1.1 +libedit2==3.1-20181209-1 +libglib2.0-0==2.58.3-2+deb10u3 +libgpm2==1.20.7-5 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libipt2==2.0-2 +libpopt0==1.16-12 +libswsscommon-dbg==1.0.0 +libteam-utils==1.30-1 +libteam-utils-dbgsym==1.30-1 +libteamdctl0-dbgsym==1.30-1 +libunwind8==1.2.1-10~deb10u1 +openssh-client==1:7.9p1-10+deb10u2 +sshpass==1.06-1 +strace==4.26-0.2 +swss-dbg==1.0.0 +vim==2:8.1.0875-5+deb10u2 +vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye index 1dd30cefe07e..ca8666d6fb45 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye @@ -95,7 +95,7 @@ docbook-utils==0.6.14-3.4 docbook-xml==4.5-9 docker-ce==5:20.10.14~3-0~debian-bullseye docker-ce-cli==5:20.10.14~3-0~debian-bullseye -docker-ce-rootless-extras==5:20.10.16~3-0~debian-bullseye +docker-ce-rootless-extras==5:20.10.17~3-0~debian-bullseye docker-scan-plugin==0.17.0~debian-bullseye docutils-common==0.16+dfsg-4 dosfstools==4.2-1 @@ -1340,12 +1340,12 @@ libzvbi0==0.2.35-18 libzzip-0-13==0.13.62-3.3+deb11u1 licensecheck==3.1.1-2 lintian==2.104.0 -linux-compiler-gcc-10-x86==5.10.113-1 -linux-headers-5.10.0-14-amd64==5.10.113-1 -linux-headers-5.10.0-14-common==5.10.113-1 -linux-headers-amd64==5.10.113-1 -linux-kbuild-5.10==5.10.113-1 -linux-libc-dev==5.10.113-1 +linux-compiler-gcc-10-x86==5.10.120-1 +linux-headers-5.10.0-15-amd64==5.10.120-1 +linux-headers-5.10.0-15-common==5.10.120-1 +linux-headers-amd64==5.10.120-1 +linux-kbuild-5.10==5.10.120-1 +linux-libc-dev==5.10.120-1 linuxdoc-tools==0.9.82-1 llvm-11==1:11.0.1-2 llvm-11-dev==1:11.0.1-2 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 index 26ca435122ac..a94d939e59a6 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 @@ -17,6 +17,7 @@ libgomp1-armhf-cross==10.2.1-6cross1 libstdc++6-armhf-cross==10.2.1-6cross1 libubsan1-armhf-cross==10.2.1-6cross1 libxslt1-dev==1.1.34-4 -linux-headers-5.10.0-14-arm64==5.10.113-1 -linux-headers-arm64==5.10.113-1 -nodejs==14.19.3-deb-1nodesource1 \ No newline at end of file +linux-headers-5.10.0-15-arm64==5.10.120-1 +linux-headers-arm64==5.10.120-1 +nodejs==14.19.3-deb-1nodesource1 +tzdata==2021a-1+deb11u4 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf index a9321cac9b68..be660d720617 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf @@ -43,9 +43,9 @@ libxapian-dev==1.4.18-3 libxslt1-dev==1.1.34-4 libxstring-perl==0.005-1+b1 libyaml-tiny-perl==1.73-1 -linux-compiler-gcc-10-arm==5.10.113-1 -linux-headers-5.10.0-14-armmp==5.10.113-1 -linux-headers-armmp==5.10.113-1 +linux-compiler-gcc-10-arm==5.10.120-1 +linux-headers-5.10.0-15-armmp==5.10.120-1 +linux-headers-armmp==5.10.120-1 mat2==0.12.1-2 nodejs==14.19.3-deb-1nodesource1 ps2eps==1.68+binaryfree-3 @@ -58,4 +58,5 @@ sassc==3.6.1+20201027-1 texlive-extra-utils==2020.20210202-3 texlive-font-utils==2020.20210202-3 texlive-luatex==2020.20210202-3 +tzdata==2021a-1+deb11u4 yui-compressor==2.4.8-2.1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-git b/files/build/versions/dockers/sonic-slave-bullseye/versions-git index 36ba9f15c6e5..14afff859581 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-git +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==89b222dba5ea3fd91598e821c0b82797f2e2fa3c +https://chromium.googlesource.com/chromium/tools/depot_tools.git==3133f98f3f1e3b46b10a284ff8280d79d7450698 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster index 7b81b41c1956..84518cce9a7d 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster +++ b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster @@ -50,7 +50,7 @@ cmake==3.13.4-1 cmake-data==3.13.4-1 cmocka-doc==1.1.3-1 comerr-dev==2.1-1.44.5-1+deb10u3 -containerd.io==1.6.4-1 +containerd.io==1.6.6-1 cowbuilder==0.88 cowdancer==0.88 cpio==2.12+dfsg-9 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-git b/files/build/versions/dockers/sonic-slave-buster/versions-git index 36ba9f15c6e5..66776c8d73ec 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-git +++ b/files/build/versions/dockers/sonic-slave-buster/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==89b222dba5ea3fd91598e821c0b82797f2e2fa3c +https://chromium.googlesource.com/chromium/tools/depot_tools.git==407333d42436270d60043ca49241cedc0ebc6eb1 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch b/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch index 6947e944e598..66d9472c6fef 100644 --- a/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch @@ -219,9 +219,9 @@ libaugeas0==1.8.0-1+deb9u1 libauparse-dev==1:2.6.7-2 libauparse0==1:2.6.7-2 libauthen-sasl-perl==2.1600-1 -libavahi-client3==0.6.32-2 -libavahi-common-data==0.6.32-2 -libavahi-common3==0.6.32-2 +libavahi-client3==0.6.32-2+deb9u1 +libavahi-common-data==0.6.32-2+deb9u1 +libavahi-common3==0.6.32-2+deb9u1 libavalon-framework-java==4.2.0-9 libb-hooks-endofscope-perl==0.21-1 libbabeltrace-ctf-dev==1.5.1-1 @@ -497,10 +497,10 @@ libgl1-mesa-dri==13.0.6-1+b2 libgl1-mesa-glx==13.0.6-1+b2 libglapi-mesa==13.0.6-1+b2 libglew2.0==2.0.0-3+b1 -libglib2.0-0==2.50.3-2+deb9u2 -libglib2.0-bin==2.50.3-2+deb9u2 -libglib2.0-data==2.50.3-2+deb9u2 -libglib2.0-dev==2.50.3-2+deb9u2 +libglib2.0-0==2.50.3-2+deb9u3 +libglib2.0-bin==2.50.3-2+deb9u3 +libglib2.0-data==2.50.3-2+deb9u3 +libglib2.0-dev==2.50.3-2+deb9u3 libglu1-mesa==9.0.0-2.1 libglu1-mesa-dev==9.0.0-2.1 libgmock-dev==1.8.0-10~bpo9+1 diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-git b/files/build/versions/dockers/sonic-slave-stretch/versions-git index 36ba9f15c6e5..66776c8d73ec 100644 --- a/files/build/versions/dockers/sonic-slave-stretch/versions-git +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==89b222dba5ea3fd91598e821c0b82797f2e2fa3c +https://chromium.googlesource.com/chromium/tools/depot_tools.git==407333d42436270d60043ca49241cedc0ebc6eb1 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/host-image/versions-deb-bullseye b/files/build/versions/host-image/versions-deb-bullseye index 7efa9a46e9be..a0c1393eaa61 100644 --- a/files/build/versions/host-image/versions-deb-bullseye +++ b/files/build/versions/host-image/versions-deb-bullseye @@ -297,7 +297,7 @@ libyang==1.0.73 libyang-cpp==1.0.73 linux-base==4.6 linux-image-5.10.0-12-2-amd64-unsigned==5.10.103-1 -linux-libc-dev==5.10.113-1 +linux-libc-dev==5.10.120-1 locales==2.31-13+deb11u3 logrotate==3.18.0-2 lsb-release==11.1.0 diff --git a/files/build/versions/host-image/versions-py3 b/files/build/versions/host-image/versions-py3 index d5d3fefda832..1d015243afbd 100644 --- a/files/build/versions/host-image/versions-py3 +++ b/files/build/versions/host-image/versions-py3 @@ -54,7 +54,7 @@ python-dateutil==2.8.2 pyyaml==5.4.1 redis==3.5.3 regex==2022.6.2 -requests==2.27.1 +requests==2.28.0 scapy==2.4.4 semantic-version==2.10.0 six==1.16.0 From f14d2ae5e398089afdaa845b0712dc5f59bbefdd Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Thu, 16 Jun 2022 15:59:55 -0700 Subject: [PATCH 029/259] [202205][linkmgr] advance submodule head (#11158) linkmgrrd: * d6518dd 2022-06-14 | Fix IP header checksum in handleSendSwitchCommand (#88) (HEAD -> 202205, github/202205) [Jing Zhang] swss: * 4430445 2022-06-03 | Add port counter sanity check (#2300) (HEAD -> 202205, github/202205) [Junhua Zhai] * 01b017c 2022-05-28 | [counter] Support gearbox counters (#2218) [Junhua Zhai] utilities: * ce96543 2022-05-26 | [subinterface]Avoid removing the subinterface when last configured ip is removed (#2181) (HEAD -> 202205, github/202205) [Sudharsan Dhamal Gopalarathnam] * ed97c6f 2022-05-26 | [subinterface] Fix route add command to accept subinterface as dev (#2180) [Sudharsan Dhamal Gopalarathnam] * 53ff644 2022-06-09 | [gendump] Add Support to dump BCM-DNX commands (#1813) [saksarav-nokia] * 0e31790 2022-06-15 | [config][muxcable] fix minor config DB logic issue (#2210) [vdahiya12] Signed-off-by: Ying Xie --- src/linkmgrd | 2 +- src/sonic-swss | 2 +- src/sonic-utilities | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/linkmgrd b/src/linkmgrd index 2da783bb4d83..d6518dd70326 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit 2da783bb4d8318d28434b0082642b8de2eb9b98d +Subproject commit d6518dd70326c95c58b368164021034615347c5c diff --git a/src/sonic-swss b/src/sonic-swss index 54a9828a6d32..443044581d92 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 54a9828a6d32013115a33b7b8b92e29e8990a2aa +Subproject commit 443044581d92e72ceb35a9d27137c097268b2f61 diff --git a/src/sonic-utilities b/src/sonic-utilities index 0fc6f47743c5..ce9654335a1f 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 0fc6f47743c5a7c8018ae0a4e0385f9fd88f270f +Subproject commit ce9654335a1f0bda76637088d6d1a21a5c7db48f From 9329c4b987a10748fc724cead9d63863dbf694be Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Thu, 16 Jun 2022 16:00:17 -0700 Subject: [PATCH 030/259] [202205][bcm sai] upgrade Broadcom SAI to 7.1.0.0-5 (#11159) * [bcm sai] upgrade Broadcom SAI to 7.1.0.0-5 - Enable Microsoft AN/LT patch Signed-off-by: Ying Xie --- platform/broadcom/sai.mk | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/platform/broadcom/sai.mk b/platform/broadcom/sai.mk index 876c7af83850..f3f6448d2e46 100644 --- a/platform/broadcom/sai.mk +++ b/platform/broadcom/sai.mk @@ -1,18 +1,20 @@ -LIBSAIBCM_VERSION = 7.1.0.0-1 +LIBSAIBCM_XGS_VERSION = 7.1.0.0-5 +LIBSAIBCM_DNX_VERSION = 7.1.0.0-1 LIBSAIBCM_BRANCH_NAME = REL_7.0 -LIBSAIBCM_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/$(LIBSAIBCM_BRANCH_NAME)/$(LIBSAIBCM_VERSION)" +LIBSAIBCM_XGS_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/$(LIBSAIBCM_BRANCH_NAME)/$(LIBSAIBCM_XGS_VERSION)" +LIBSAIBCM_DNX_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/$(LIBSAIBCM_BRANCH_NAME)/$(LIBSAIBCM_DNX_VERSION)" -BRCM_SAI = libsaibcm_$(LIBSAIBCM_VERSION)_amd64.deb -$(BRCM_SAI)_URL = "$(LIBSAIBCM_URL_PREFIX)/$(BRCM_SAI)" -BRCM_SAI_DEV = libsaibcm-dev_$(LIBSAIBCM_VERSION)_amd64.deb -$(eval $(call add_derived_package,$(BRCM_SAI),$(BRCM_SAI_DEV))) -$(BRCM_SAI_DEV)_URL = "$(LIBSAIBCM_URL_PREFIX)/$(BRCM_SAI_DEV)" +BRCM_XGS_SAI = libsaibcm_$(LIBSAIBCM_XGS_VERSION)_amd64.deb +$(BRCM_XGS_SAI)_URL = "$(LIBSAIBCM_XGS_URL_PREFIX)/$(BRCM_XGS_SAI)" +BRCM_XGS_SAI_DEV = libsaibcm-dev_$(LIBSAIBCM_XGS_VERSION)_amd64.deb +$(eval $(call add_derived_package,$(BRCM_XGS_SAI),$(BRCM_XGS_SAI_DEV))) +$(BRCM_XGS_SAI_DEV)_URL = "$(LIBSAIBCM_XGS_URL_PREFIX)/$(BRCM_XGS_SAI_DEV)" # SAI module for DNX Asic family -BRCM_DNX_SAI = libsaibcm_dnx_$(LIBSAIBCM_VERSION)_amd64.deb -$(BRCM_DNX_SAI)_URL = "$(LIBSAIBCM_URL_PREFIX)/$(BRCM_DNX_SAI)" +BRCM_DNX_SAI = libsaibcm_dnx_$(LIBSAIBCM_DNX_VERSION)_amd64.deb +$(BRCM_DNX_SAI)_URL = "$(LIBSAIBCM_DNX_URL_PREFIX)/$(BRCM_DNX_SAI)" -SONIC_ONLINE_DEBS += $(BRCM_SAI) +SONIC_ONLINE_DEBS += $(BRCM_XGS_SAI) SONIC_ONLINE_DEBS += $(BRCM_DNX_SAI) -$(BRCM_SAI_DEV)_DEPENDS += $(BRCM_SAI) -$(eval $(call add_conflict_package,$(BRCM_SAI_DEV),$(LIBSAIVS_DEV))) +$(BRCM_XGS_SAI_DEV)_DEPENDS += $(BRCM_XGS_SAI) +$(eval $(call add_conflict_package,$(BRCM_XGS_SAI_DEV),$(LIBSAIVS_DEV))) From bb8e12fe94cf1f26adbd86e37803ced18f60c255 Mon Sep 17 00:00:00 2001 From: vdahiya12 <67608553+vdahiya12@users.noreply.github.com> Date: Thu, 16 Jun 2022 16:01:14 -0700 Subject: [PATCH 031/259] [202205][sonic-platform-daemons] submodule update (#11169) The following commits are pushed 1f112b8 (HEAD -> 202205, origin/202205) [sonic-ycabled] fix grpc logic for timeout,cli HWSTATUS value retrival logic for active-active cable (#264) Signed-off-by: vaibhav-dahiya vdahiya@microsoft.com --- src/sonic-platform-daemons | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index 0d90023b4ae9..1f112b8c28da 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit 0d90023b4ae973bd2fa01381d4d1ba4992b45025 +Subproject commit 1f112b8c28daa3d5e8236cec4cfb73296ee761d4 From 8a76cdc66e046a93150e20942c5f7bfe030b5432 Mon Sep 17 00:00:00 2001 From: yozhao101 <56170650+yozhao101@users.noreply.github.com> Date: Thu, 2 Jun 2022 15:59:36 -0700 Subject: [PATCH 032/259] [hostcfgd] Initialize `Restart=` in feature's systemd config by the value of `auto_restart` in `CONFIG_DB` (#10915) Why I did it Recently the nightly testing pipeline found that the autorestart test case was failed when it was run against master image. The reason is Restart= field in each container's systemd configuration file was set to Restart=no even the value of auto_restart field in FEATURE table of CONFIG_DB is enabled. This issue introduced by #10168 can be reproduced by the following steps: Issues the config command to disable the auto-restart feature of a container Runs command config reload or config reload minigraph to enable auto-restart of the container Checks Restart= field in the container's systemd config file mentioned in step 1 by running the command sudo systemctl cat .service Initially this PR (#10168) wants to revert the changes proposed by this: #8861. However, it did not fully revert all the changes. How I did it When hostcfgd started or was restarted, the Restart= field in each container's systemd configuration file should be initialized according to the value of auto_restart field in FEATURE table of CONFIG_DB. How to verify it I verified this change by running auto-restart test case against newly built master image and also ran the unittest: --- src/sonic-host-services/scripts/hostcfgd | 78 ++++--- .../tests/hostcfgd/hostcfgd_test.py | 196 +++++++++++------- .../tests/hostcfgd/test_vectors.py | 28 ++- 3 files changed, 188 insertions(+), 114 deletions(-) diff --git a/src/sonic-host-services/scripts/hostcfgd b/src/sonic-host-services/scripts/hostcfgd index 7f8f4be0b2e7..41da37490be4 100755 --- a/src/sonic-host-services/scripts/hostcfgd +++ b/src/sonic-host-services/scripts/hostcfgd @@ -104,6 +104,7 @@ def obfuscate(data): else: return data + def get_pid(procname): for dirname in os.listdir('/proc'): if dirname == 'curproc': @@ -117,6 +118,7 @@ def get_pid(procname): return dirname return "" + class Feature(object): """ Represents a feature configuration from CONFIG_DB data. """ @@ -182,10 +184,10 @@ class FeatureHandler(object): self._cached_config = {} self.is_multi_npu = device_info.is_multi_npu() - def handle(self, feature_name, op, feature_cfg): + def handler(self, feature_name, op, feature_cfg): if not feature_cfg: syslog.syslog(syslog.LOG_INFO, "Deregistering feature {}".format(feature_name)) - self._cached_config.pop(feature_name) + self._cached_config.pop(feature_name, None) self._feature_state_table._del(feature_name) return @@ -197,7 +199,11 @@ class FeatureHandler(object): # the next called self.update_feature_state will start it again. If it will fail # again the auto restart will kick-in. Another order may leave it in failed state # and not auto restart. - self.update_feature_auto_restart(feature, feature_name) + if self._cached_config[feature_name].auto_restart != feature.auto_restart: + syslog.syslog(syslog.LOG_INFO, "Auto-restart status of feature '{}' is changed from '{}' to '{}' ..." + .format(feature_name, self._cached_config[feature_name].auto_restart, feature.auto_restart)) + self.update_systemd_config(feature) + self._cached_config[feature_name].auto_restart = feature.auto_restart # Enable/disable the container service if the feature state was changed from its previous state. if self._cached_config[feature_name].state != feature.state: @@ -220,7 +226,7 @@ class FeatureHandler(object): feature = Feature(feature_name, feature_table[feature_name], self._device_config) self._cached_config.setdefault(feature_name, feature) - self.update_feature_auto_restart(feature, feature_name) + self.update_systemd_config(feature) self.update_feature_state(feature) self.resync_feature_state(feature) @@ -265,41 +271,45 @@ class FeatureHandler(object): return True - def update_feature_auto_restart(self, feature, feature_name): - dir_name = self.SYSTEMD_SERVICE_CONF_DIR.format(feature_name) - auto_restart_conf = os.path.join(dir_name, 'auto_restart.conf') + def update_systemd_config(self, feature_config): + """Updates `Restart=` field in feature's systemd configuration file + according to the value of `auto_restart` field in `FEATURE` table of `CONFIG_DB`. - write_conf = False - if not os.path.exists(auto_restart_conf): # if the auto_restart_conf file is not found, set it - write_conf = True - - if self._cached_config[feature_name].auto_restart != feature.auto_restart: - write_conf = True + Args: + feature: An object represents a feature's configuration in `FEATURE` + table of `CONFIG_DB`. - if not write_conf: - return + Returns: + None. + """ + restart_field_str = "always" if "enabled" in feature_config.auto_restart else "no" + feature_systemd_config = "[Service]\nRestart={}\n".format(restart_field_str) + feature_names, feature_suffixes = self.get_multiasic_feature_instances(feature_config) - self._cached_config[feature_name].auto_restart = feature.auto_restart # Update Cache + # On multi-ASIC device, creates systemd configuration file for each feature instance + # residing in difference namespace. + for feature_name in feature_names: + syslog.syslog(syslog.LOG_INFO, "Updating feature '{}' systemd config file related to auto-restart ..." + .format(feature_name)) + feature_systemd_config_dir_path = self.SYSTEMD_SERVICE_CONF_DIR.format(feature_name) + feature_systemd_config_file_path = os.path.join(feature_systemd_config_dir_path, 'auto_restart.conf') - restart_config = "always" if feature.auto_restart == "enabled" else "no" - service_conf = "[Service]\nRestart={}\n".format(restart_config) - feature_names, feature_suffixes = self.get_feature_attribute(feature) + if not os.path.exists(feature_systemd_config_dir_path): + os.mkdir(feature_systemd_config_dir_path) + with open(feature_systemd_config_file_path, 'w') as feature_systemd_config_file_handler: + feature_systemd_config_file_handler.write(feature_systemd_config) - for name in feature_names: - dir_name = self.SYSTEMD_SERVICE_CONF_DIR.format(name) - auto_restart_conf = os.path.join(dir_name, 'auto_restart.conf') - if not os.path.exists(dir_name): - os.mkdir(dir_name) - with open(auto_restart_conf, 'w') as cfgfile: - cfgfile.write(service_conf) + syslog.syslog(syslog.LOG_INFO, "Feautre '{}' systemd config file related to auto-restart is updated!" + .format(feature_name)) try: + syslog.syslog(syslog.LOG_INFO, "Reloading systemd configuration files ...") run_cmd("sudo systemctl daemon-reload", raise_exception=True) + syslog.syslog(syslog.LOG_INFO, "Systemd configuration files are reloaded!") except Exception as err: - syslog.syslog(syslog.LOG_ERR, "Feature '{}' failed to configure auto_restart".format(feature.name)) - return + syslog.syslog(syslog.LOG_ERR, "Failed to reload systemd configuration files!") - def get_feature_attribute(self, feature): + def get_multiasic_feature_instances(self, feature): # Create feature name suffix depending feature is running in host or namespace or in both feature_names = ( ([feature.name] if feature.has_global_scope or not self.is_multi_npu else []) + @@ -330,7 +340,7 @@ class FeatureHandler(object): def enable_feature(self, feature): cmds = [] - feature_names, feature_suffixes = self.get_feature_attribute(feature) + feature_names, feature_suffixes = self.get_multiasic_feature_instances(feature) for feature_name in feature_names: # Check if it is already enabled, if yes skip the system call unit_file_state = self.get_systemd_unit_state("{}.{}".format(feature_name, feature_suffixes[-1])) @@ -352,7 +362,7 @@ class FeatureHandler(object): run_cmd(cmd, raise_exception=True) except Exception as err: syslog.syslog(syslog.LOG_ERR, "Feature '{}.{}' failed to be enabled and started" - .format(feature.name, feature_suffixes[-1])) + .format(feature.name, feature_suffixes[-1])) self.set_feature_state(feature, self.FEATURE_STATE_FAILED) return @@ -360,7 +370,7 @@ class FeatureHandler(object): def disable_feature(self, feature): cmds = [] - feature_names, feature_suffixes = self.get_feature_attribute(feature) + feature_names, feature_suffixes = self.get_multiasic_feature_instances(feature) for feature_name in feature_names: # Check if it is already disabled, if yes skip the system call unit_file_state = self.get_systemd_unit_state("{}.{}".format(feature_name, feature_suffixes[-1])) @@ -377,7 +387,7 @@ class FeatureHandler(object): run_cmd(cmd, raise_exception=True) except Exception as err: syslog.syslog(syslog.LOG_ERR, "Feature '{}.{}' failed to be stopped and disabled" - .format(feature.name, feature_suffixes[-1])) + .format(feature.name, feature_suffixes[-1])) self.set_feature_state(feature, self.FEATURE_STATE_FAILED) return @@ -1212,7 +1222,7 @@ class HostConfigDaemon: self.config_db.subscribe('KDUMP', make_callback(self.kdump_handler)) # Handle FEATURE updates before other tables - self.config_db.subscribe('FEATURE', make_callback(self.feature_handler.handle)) + self.config_db.subscribe('FEATURE', make_callback(self.feature_handler.handler)) # Handle AAA, TACACS and RADIUS related tables self.config_db.subscribe('AAA', make_callback(self.aaa_handler)) self.config_db.subscribe('TACPLUS', make_callback(self.tacacs_global_handler)) diff --git a/src/sonic-host-services/tests/hostcfgd/hostcfgd_test.py b/src/sonic-host-services/tests/hostcfgd/hostcfgd_test.py index 28d4f6f8a724..786bd1c8f2a9 100644 --- a/src/sonic-host-services/tests/hostcfgd/hostcfgd_test.py +++ b/src/sonic-host-services/tests/hostcfgd/hostcfgd_test.py @@ -27,112 +27,162 @@ hostcfgd.Table = mock.Mock() -class TestHostcfgd(TestCase): +class TestFeatureHandler(TestCase): + """Test methods of `FeatureHandler` class. """ - Test hostcfd daemon - feature - """ - def __verify_table(self, table, feature_state_table, expected_table): + def checks_config_table(self, feature_table, expected_table): + """Compares `FEATURE` table in `CONFIG_DB` with expected output table. + + Args: + feature_table: A dictionary indicates current `FEATURE` table in `CONFIG_DB`. + expected_table A dictionary indicates the expected `FEATURE` table in `CONFIG_DB`. + + Returns: + Returns True if `FEATURE` table in `CONFIG_DB` was not modified unexpectedly; + otherwise, returns False. """ - verify config db tables + ddiff = DeepDiff(feature_table, expected_table, ignore_order=True) + + return True if not ddiff else False - Compares Config DB table (FEATURE) with expected output table. - Verifies that State DB table (FEATURE) is updated. + def checks_systemd_config_file(self, feature_table): + """Checks whether the systemd configuration file of each feature was created or not + and whether the `Restart=` field in the file is set correctly or not. - Args: - table(dict): Current Config Db table - feature_state_table(Mock): Mocked State DB FEATURE table - expected_table(dict): Expected Config Db table + Args: + feature_table: A dictionary indicates `Feature` table in `CONFIG_DB`. - Returns: - None + Returns: Boolean value indicates whether test passed or not. """ - ddiff = DeepDiff(table, expected_table, ignore_order=True) - print('DIFF:', ddiff) - - def get_state(cfg_state): - """ Translates CONFIG DB state field into STATE DB state field """ - if cfg_state == 'always_disabled': - return 'disabled' - elif cfg_state == 'always_enabled': - return 'enabled' - else: - return cfg_state - feature_state_table.set.assert_has_calls([ - mock.call(feature, [('state', get_state(table[feature]['state']))]) for feature in table - ]) - return True if not ddiff else False + truth_table = {'enabled': 'always', + 'disabled': 'no'} + + systemd_config_file_path = os.path.join(hostcfgd.FeatureHandler.SYSTEMD_SERVICE_CONF_DIR, + 'auto_restart.conf') + + for feature_name in feature_table: + auto_restart_status = feature_table[feature_name].get('auto_restart', 'disabled') + if "enabled" in auto_restart_status: + auto_restart_status = "enabled" + elif "disabled" in auto_restart_status: + auto_restart_status = "disabled" - def __verify_fs(self, table): + feature_systemd_config_file_path = systemd_config_file_path.format(feature_name) + is_config_file_existing = os.path.exists(feature_systemd_config_file_path) + assert is_config_file_existing, "Systemd configuration file of feature '{}' does not exist!".format(feature_name) + + with open(feature_systemd_config_file_path) as systemd_config_file: + status = systemd_config_file.read().strip() + assert status == '[Service]\nRestart={}'.format(truth_table[auto_restart_status]) + + def get_state_db_set_calls(self, feature_table): + """Returns a Mock call objects which recorded the `set` calls to `FEATURE` table in `STATE_DB`. + + Args: + feature_table: A dictionary indicates `FEATURE` table in `CONFIG_DB`. + + Returns: + set_call_list: A list indicates Mock call objects. """ - verify filesystem changes made by hostcfgd. + set_call_list = [] + + for feature_name in feature_table.keys(): + feature_state = "" + if "enabled" in feature_table[feature_name]["state"]: + feature_state = "enabled" + elif "disabled" in feature_table[feature_name]["state"]: + feature_state = "disabled" + else: + feature_state = feature_table[feature_name]["state"] + + set_call_list.append(mock.call(feature_name, [("state", feature_state)])) - Checks whether systemd override configuration files - were generated and Restart= for systemd unit is set - correctly + return set_call_list + + @parameterized.expand(HOSTCFGD_TEST_VECTOR) + @patchfs + def test_sync_state_field(self, test_scenario_name, config_data, fs): + """Tests the method `sync_state_field(...)` of `FeatureHandler` class. - Args: - table(dict): Current Config Db table + Args: + test_secnario_name: A string indicates different testing scenario. + config_data: A dictionary contains initial `CONFIG_DB` tables and expected results. - Returns: Boolean wether test passed. + Returns: + Boolean value indicates whether test will pass or not. """ + # add real path of sesscommon for database_config.json + fs.add_real_paths(swsscommon_package.__path__) + fs.create_dir(hostcfgd.FeatureHandler.SYSTEMD_SYSTEM_DIR) - exp_dict = { - 'enabled': 'always', - 'disabled': 'no', - } - auto_restart_conf = os.path.join(hostcfgd.FeatureHandler.SYSTEMD_SERVICE_CONF_DIR, 'auto_restart.conf') + MockConfigDb.set_config_db(config_data['config_db']) + feature_state_table_mock = mock.Mock() + with mock.patch('hostcfgd.subprocess') as mocked_subprocess: + popen_mock = mock.Mock() + attrs = config_data['popen_attributes'] + popen_mock.configure_mock(**attrs) + mocked_subprocess.Popen.return_value = popen_mock - for feature in table: - auto_restart = table[feature].get('auto_restart', 'disabled') - with open(auto_restart_conf.format(feature)) as conf: - conf = conf.read().strip() - assert conf == '[Service]\nRestart={}'.format(exp_dict[auto_restart]) + device_config = {} + device_config['DEVICE_METADATA'] = MockConfigDb.CONFIG_DB['DEVICE_METADATA'] + feature_handler = hostcfgd.FeatureHandler(MockConfigDb(), feature_state_table_mock, device_config) + + feature_table = MockConfigDb.CONFIG_DB['FEATURE'] + feature_handler.sync_state_field(feature_table) + + is_any_difference = self.checks_config_table(MockConfigDb.get_config_db()['FEATURE'], + config_data['expected_config_db']['FEATURE']) + assert is_any_difference, "'FEATURE' table in 'CONFIG_DB' is modified unexpectedly!" + + feature_table_state_db_calls = self.get_state_db_set_calls(feature_table) + self.checks_systemd_config_file(config_data['config_db']['FEATURE']) + mocked_subprocess.check_call.assert_has_calls(config_data['enable_feature_subprocess_calls'], + any_order=True) + mocked_subprocess.check_call.assert_has_calls(config_data['daemon_reload_subprocess_call'], + any_order=True) + feature_state_table_mock.set.assert_has_calls(feature_table_state_db_calls) + self.checks_systemd_config_file(config_data['config_db']['FEATURE']) @parameterized.expand(HOSTCFGD_TEST_VECTOR) @patchfs - def test_hostcfgd_feature_handler(self, test_name, test_data, fs): - """ - Test feature config capability in the hostcfd + def test_handler(self, test_scenario_name, config_data, fs): + """Tests the method `handle(...)` of `FeatureHandler` class. - Args: - test_name(str): test name - test_data(dict): test data which contains initial Config Db tables, and expected results + Args: + test_secnario_name: A string indicates different testing scenario. + config_data: A dictionary contains initial `CONFIG_DB` tables and expected results. - Returns: - None + Returns: + Boolean value indicates whether test will pass or not. """ - fs.add_real_paths(swsscommon_package.__path__) # add real path of swsscommon for database_config.json + # add real path of sesscommon for database_config.json + fs.add_real_paths(swsscommon_package.__path__) fs.create_dir(hostcfgd.FeatureHandler.SYSTEMD_SYSTEM_DIR) - MockConfigDb.set_config_db(test_data['config_db']) + + MockConfigDb.set_config_db(config_data['config_db']) feature_state_table_mock = mock.Mock() with mock.patch('hostcfgd.subprocess') as mocked_subprocess: popen_mock = mock.Mock() - attrs = test_data['popen_attributes'] + attrs = config_data['popen_attributes'] popen_mock.configure_mock(**attrs) mocked_subprocess.Popen.return_value = popen_mock - # Initialize Feature Handler device_config = {} device_config['DEVICE_METADATA'] = MockConfigDb.CONFIG_DB['DEVICE_METADATA'] feature_handler = hostcfgd.FeatureHandler(MockConfigDb(), feature_state_table_mock, device_config) - # sync the state field and Handle Feature Updates - features = MockConfigDb.CONFIG_DB['FEATURE'] - feature_handler.sync_state_field(features) - for key, fvs in features.items(): - feature_handler.handle(key, 'SET', fvs) - - # Verify if the updates are properly updated - assert self.__verify_table( - MockConfigDb.get_config_db()['FEATURE'], - feature_state_table_mock, - test_data['expected_config_db']['FEATURE'] - ), 'Test failed for test data: {0}'.format(test_data) - mocked_subprocess.check_call.assert_has_calls(test_data['expected_subprocess_calls'], any_order=True) - - self.__verify_fs(test_data['config_db']['FEATURE']) + feature_table = MockConfigDb.CONFIG_DB['FEATURE'] + + for feature_name, feature_config in feature_table.items(): + feature_handler.handler(feature_name, 'SET', feature_config) + + self.checks_systemd_config_file(config_data['config_db']['FEATURE']) + mocked_subprocess.check_call.assert_has_calls(config_data['enable_feature_subprocess_calls'], + any_order=True) + mocked_subprocess.check_call.assert_has_calls(config_data['daemon_reload_subprocess_call'], + any_order=True) def test_feature_config_parsing(self): swss_feature = hostcfgd.Feature('swss', { diff --git a/src/sonic-host-services/tests/hostcfgd/test_vectors.py b/src/sonic-host-services/tests/hostcfgd/test_vectors.py index 28ffe89d841c..43754252c0e3 100644 --- a/src/sonic-host-services/tests/hostcfgd/test_vectors.py +++ b/src/sonic-host-services/tests/hostcfgd/test_vectors.py @@ -41,7 +41,7 @@ "state": "{% if 'subtype' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['subtype'] == 'DualToR' %}enabled{% else %}always_disabled{% endif %}" }, "telemetry": { - "auto_restart": "disabled", + "auto_restart": "enabled", "has_global_scope": "True", "has_per_asic_scope": "False", "has_timer": "True", @@ -73,7 +73,7 @@ "state": "enabled" }, "telemetry": { - "auto_restart": "disabled", + "auto_restart": "enabled", "has_global_scope": "True", "has_per_asic_scope": "False", "has_timer": "True", @@ -84,7 +84,7 @@ }, }, }, - "expected_subprocess_calls": [ + "enable_feature_subprocess_calls": [ call("sudo systemctl unmask dhcp_relay.service", shell=True), call("sudo systemctl enable dhcp_relay.service", shell=True), call("sudo systemctl start dhcp_relay.service", shell=True), @@ -96,6 +96,9 @@ call("sudo systemctl enable telemetry.timer", shell=True), call("sudo systemctl start telemetry.timer", shell=True), ], + "daemon_reload_subprocess_call": [ + call("sudo systemctl daemon-reload", shell=True), + ], "popen_attributes": { 'communicate.return_value': ('output', 'error') }, @@ -198,7 +201,7 @@ }, }, }, - "expected_subprocess_calls": [ + "enable_feature_subprocess_calls": [ call("sudo systemctl stop mux.service", shell=True), call("sudo systemctl disable mux.service", shell=True), call("sudo systemctl mask mux.service", shell=True), @@ -210,6 +213,9 @@ call("sudo systemctl enable sflow.service", shell=True), call("sudo systemctl start sflow.service", shell=True), ], + "daemon_reload_subprocess_call": [ + call("sudo systemctl daemon-reload", shell=True), + ], "popen_attributes": { 'communicate.return_value': ('output', 'error') }, @@ -294,7 +300,7 @@ }, }, }, - "expected_subprocess_calls": [ + "enable_feature_subprocess_calls": [ call("sudo systemctl stop mux.service", shell=True), call("sudo systemctl disable mux.service", shell=True), call("sudo systemctl mask mux.service", shell=True), @@ -303,6 +309,9 @@ call("sudo systemctl enable telemetry.timer", shell=True), call("sudo systemctl start telemetry.timer", shell=True), ], + "daemon_reload_subprocess_call": [ + call("sudo systemctl daemon-reload", shell=True), + ], "popen_attributes": { 'communicate.return_value': ('output', 'error') }, @@ -387,7 +396,7 @@ }, }, }, - "expected_subprocess_calls": [ + "enable_feature_subprocess_calls": [ call("sudo systemctl unmask dhcp_relay.service", shell=True), call("sudo systemctl enable dhcp_relay.service", shell=True), call("sudo systemctl start dhcp_relay.service", shell=True), @@ -399,6 +408,9 @@ call("sudo systemctl enable telemetry.timer", shell=True), call("sudo systemctl start telemetry.timer", shell=True), ], + "daemon_reload_subprocess_call": [ + call("sudo systemctl daemon-reload", shell=True), + ], "popen_attributes": { 'communicate.return_value': ('output', 'error') }, @@ -484,7 +496,9 @@ }, }, }, - "expected_subprocess_calls": [ + "enable_feature_subprocess_calls": [], + "daemon_reload_subprocess_call": [ + call("sudo systemctl daemon-reload", shell=True), ], "popen_attributes": { 'communicate.return_value': ('enabled', 'error') From 323aa791ec4372ef844fde6e22ca881e0dc71973 Mon Sep 17 00:00:00 2001 From: shlomibitton <60430976+shlomibitton@users.noreply.github.com> Date: Thu, 16 Jun 2022 12:15:09 +0300 Subject: [PATCH 033/259] [Mellanox] [pmon] Fix for PMON service not starting when restarting SWSS service after fast/warm reboot (#10901) - Why I did it Recent change to delay PMON service in case of fast/warm reboot introduce an issue when restarting only SWSS service after fast/warm reboot for Nvidia platform. Since the timer is triggered only when the system boot, in a scenario when the system is after a fast/warm reboot and the user restart SWSS service, as part of syncd.sh script, PMON service will stop but the timer will not start again. - How I did it On syncd.sh script, in case of fast/warm indication, check if pmon.timer is running. If it is running it means we are at the first boot and continue normally. If it is not running, meaning the service was restarted, start the timer to keep the system behavior consistent. - How to verify it Run fast/warm reboot. service swss restart. Observe PMON service starting. Signed-off-by: Shlomi Bitton --- files/scripts/syncd.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/files/scripts/syncd.sh b/files/scripts/syncd.sh index 628609e0a5f0..065574e501bf 100755 --- a/files/scripts/syncd.sh +++ b/files/scripts/syncd.sh @@ -48,7 +48,12 @@ function waitplatform() { BOOT_TYPE=`getBootType` if [[ x"$sonic_asic_platform" == x"mellanox" ]]; then if [[ x"$BOOT_TYPE" = @(x"fast"|x"warm"|x"fastfast") ]]; then - debug "PMON service is delayed by a timer for better fast/warm boot performance" + PMON_TIMER_STATUS=$(systemctl is-active pmon.timer) + if [[ x"$PMON_TIMER_STATUS" = x"inactive" ]]; then + systemctl start pmon.timer + else + debug "PMON service is delayed by a timer for better fast/warm boot performance" + fi else debug "Starting pmon service..." /bin/systemctl start pmon From 255d77e610b4907899f7cab0565db4962ad46c40 Mon Sep 17 00:00:00 2001 From: bingwang-ms <66248323+bingwang-ms@users.noreply.github.com> Date: Fri, 17 Jun 2022 08:44:30 +0800 Subject: [PATCH 034/259] Generate switch level dscp_to_tc_map entry from qos_config template (#11087) * Generate switch level dscp_to_tc_map Signed-off-by: bingwang --- files/build_templates/qos_config.j2 | 7 +++++++ .../tests/sample_output/py2/qos-arista7050.json | 3 +++ .../tests/sample_output/py2/qos-arista7800r3-48cq2-lc.json | 3 +++ .../tests/sample_output/py2/qos-dell6100.json | 3 +++ .../tests/sample_output/py2/qos-dell9332.json | 3 +++ .../tests/sample_output/py3/qos-arista7050.json | 3 +++ .../py3/qos-arista7050cx3-dualtor-remap-disabled.json | 3 +++ .../tests/sample_output/py3/qos-arista7050cx3-dualtor.json | 3 +++ .../py3/qos-arista7260-dualtor-remap-disabled.json | 3 +++ .../tests/sample_output/py3/qos-arista7260-dualtor.json | 3 +++ .../py3/qos-arista7260-t1-remap-disabled.json | 3 +++ .../tests/sample_output/py3/qos-arista7260-t1.json | 3 +++ .../tests/sample_output/py3/qos-arista7800r3-48cq2-lc.json | 3 +++ .../tests/sample_output/py3/qos-dell6100.json | 3 +++ .../tests/sample_output/py3/qos-dell9332.json | 3 +++ 15 files changed, 49 insertions(+) diff --git a/files/build_templates/qos_config.j2 b/files/build_templates/qos_config.j2 index 3d95d333594b..46cebb6e32d1 100644 --- a/files/build_templates/qos_config.j2 +++ b/files/build_templates/qos_config.j2 @@ -217,6 +217,13 @@ }, {% endif %} "PORT_QOS_MAP": { +{% if generate_global_dscp_to_tc_map is defined %} + {{- generate_global_dscp_to_tc_map() }} +{% else %} + "global": { + "dscp_to_tc_map" : "AZURE" + }{% if PORT_ACTIVE %},{% endif %} +{% endif %} {% for port in PORT_ACTIVE %} "{{ port }}": { {% if 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] in backend_device_types and 'storage_device' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['storage_device'] == 'true' %} diff --git a/src/sonic-config-engine/tests/sample_output/py2/qos-arista7050.json b/src/sonic-config-engine/tests/sample_output/py2/qos-arista7050.json index b15fcf7a36c1..6a09e605c3f2 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/qos-arista7050.json +++ b/src/sonic-config-engine/tests/sample_output/py2/qos-arista7050.json @@ -114,6 +114,9 @@ } }, "PORT_QOS_MAP": { + "global": { + "dscp_to_tc_map" : "AZURE" + }, "Ethernet4": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", diff --git a/src/sonic-config-engine/tests/sample_output/py2/qos-arista7800r3-48cq2-lc.json b/src/sonic-config-engine/tests/sample_output/py2/qos-arista7800r3-48cq2-lc.json index 92ba2caf8d17..48b3a293e02b 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/qos-arista7800r3-48cq2-lc.json +++ b/src/sonic-config-engine/tests/sample_output/py2/qos-arista7800r3-48cq2-lc.json @@ -114,6 +114,9 @@ } }, "PORT_QOS_MAP": { + "global": { + "dscp_to_tc_map" : "AZURE" + }, "Ethernet0": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", diff --git a/src/sonic-config-engine/tests/sample_output/py2/qos-dell6100.json b/src/sonic-config-engine/tests/sample_output/py2/qos-dell6100.json index 27bea8cd32d3..bf28af765e17 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/qos-dell6100.json +++ b/src/sonic-config-engine/tests/sample_output/py2/qos-dell6100.json @@ -114,6 +114,9 @@ } }, "PORT_QOS_MAP": { + "global": { + "dscp_to_tc_map" : "AZURE" + }, "Ethernet0": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", diff --git a/src/sonic-config-engine/tests/sample_output/py2/qos-dell9332.json b/src/sonic-config-engine/tests/sample_output/py2/qos-dell9332.json index 8130a455497a..a3dd5cbeea2b 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/qos-dell9332.json +++ b/src/sonic-config-engine/tests/sample_output/py2/qos-dell9332.json @@ -118,6 +118,9 @@ } }, "PORT_QOS_MAP": { + "global": { + "dscp_to_tc_map" : "AZURE" + }, "Ethernet0": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050.json index b15fcf7a36c1..6a09e605c3f2 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050.json @@ -114,6 +114,9 @@ } }, "PORT_QOS_MAP": { + "global": { + "dscp_to_tc_map" : "AZURE" + }, "Ethernet4": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor-remap-disabled.json index 68774f58563a..67669c169b16 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor-remap-disabled.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor-remap-disabled.json @@ -114,6 +114,9 @@ } }, "PORT_QOS_MAP": { + "global": { + "dscp_to_tc_map" : "AZURE" + }, "Ethernet0": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json index 843e68a49c7d..a48656d57c0c 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json @@ -217,6 +217,9 @@ } }, "PORT_QOS_MAP": { + "global": { + "dscp_to_tc_map" : "AZURE" + }, "Ethernet0": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor-remap-disabled.json index 27b7ebd7e494..49ed2038e71b 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor-remap-disabled.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor-remap-disabled.json @@ -114,6 +114,9 @@ } }, "PORT_QOS_MAP": { + "global": { + "dscp_to_tc_map" : "AZURE" + }, "Ethernet0": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json index 1d8c2dbdfff6..cad403c93d2e 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json @@ -217,6 +217,9 @@ } }, "PORT_QOS_MAP": { + "global": { + "dscp_to_tc_map" : "AZURE" + }, "Ethernet0": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1-remap-disabled.json index ae9fa775dc62..f4e639b3ddfe 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1-remap-disabled.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1-remap-disabled.json @@ -114,6 +114,9 @@ } }, "PORT_QOS_MAP": { + "global": { + "dscp_to_tc_map" : "AZURE" + }, "Ethernet0": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json index 9db828a759e4..f850e3285bef 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json @@ -114,6 +114,9 @@ } }, "PORT_QOS_MAP": { + "global": { + "dscp_to_tc_map" : "AZURE" + }, "Ethernet0": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7800r3-48cq2-lc.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7800r3-48cq2-lc.json index 92ba2caf8d17..48b3a293e02b 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7800r3-48cq2-lc.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7800r3-48cq2-lc.json @@ -114,6 +114,9 @@ } }, "PORT_QOS_MAP": { + "global": { + "dscp_to_tc_map" : "AZURE" + }, "Ethernet0": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-dell6100.json b/src/sonic-config-engine/tests/sample_output/py3/qos-dell6100.json index 27bea8cd32d3..bf28af765e17 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-dell6100.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-dell6100.json @@ -114,6 +114,9 @@ } }, "PORT_QOS_MAP": { + "global": { + "dscp_to_tc_map" : "AZURE" + }, "Ethernet0": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-dell9332.json b/src/sonic-config-engine/tests/sample_output/py3/qos-dell9332.json index 8130a455497a..a3dd5cbeea2b 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-dell9332.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-dell9332.json @@ -118,6 +118,9 @@ } }, "PORT_QOS_MAP": { + "global": { + "dscp_to_tc_map" : "AZURE" + }, "Ethernet0": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", From 16c424b081acf26b6632147bb14f2865c527108b Mon Sep 17 00:00:00 2001 From: bingwang-ms <66248323+bingwang-ms@users.noreply.github.com> Date: Thu, 16 Jun 2022 11:29:38 +0800 Subject: [PATCH 035/259] Update YANG for PORT_QOS_MAP to support switch level mapping (#11089) Signed-off-by: bingwang Co-authored-by: Neetha John --- .../tests/yang_model_tests/tests/qosmaps.json | 6 +++- .../tests_config/qosmaps.json | 33 +++++++++++++++++++ .../yang-models/sonic-port-qos-map.yang | 15 ++++++--- 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/qosmaps.json b/src/sonic-yang-models/tests/yang_model_tests/tests/qosmaps.json index 90344d8f119d..0528e0e3fe89 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/qosmaps.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/qosmaps.json @@ -86,6 +86,10 @@ "PORT_QOS_MAP_APPLY_MAPS": { "desc": "Configure qos maps on port." }, + + "PORT_QOS_MAP_APPLY_MAP_TO_GLOBAL": { + "desc": "Configure qos maps on switch level." + }, "PORT_QOS_MAP_APPLY_NON_EXISTS_MAPS": { "desc": "Configure non exists qos maps on port.", @@ -94,7 +98,7 @@ "PORT_QOS_MAP_APPLY_NON_EXISTS_PORT": { "desc": "Configure port qos map entry on non exists port.", - "eStrKey": "LeafRef" + "eStr": "Invalid value" }, "PORT_QOS_MAP_APPLY_INVALID_PFC": { diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/qosmaps.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/qosmaps.json index 991675bc3979..f5e5701938c3 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/qosmaps.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/qosmaps.json @@ -629,6 +629,39 @@ } }, + "PORT_QOS_MAP_APPLY_MAP_TO_GLOBAL": { + "sonic-dscp-tc-map:sonic-dscp-tc-map": { + "sonic-dscp-tc-map:DSCP_TO_TC_MAP": { + "DSCP_TO_TC_MAP_LIST": [ + { + "name": "map1", + "DSCP_TO_TC_MAP": [ + { + "dscp": "1", + "tc": "1" + }, + { + "dscp":"2", + "tc":"2" + } + ] + } + ] + } + }, + + "sonic-port-qos-map:sonic-port-qos-map": { + "sonic-port-qos-map:PORT_QOS_MAP": { + "PORT_QOS_MAP_LIST": [ + { + "ifname": "global", + "dscp_to_tc_map": "map1" + } + ] + } + } + }, + "PORT_QOS_MAP_APPLY_NON_EXISTS_MAPS": { "sonic-port:sonic-port": { "sonic-port:PORT": { diff --git a/src/sonic-yang-models/yang-models/sonic-port-qos-map.yang b/src/sonic-yang-models/yang-models/sonic-port-qos-map.yang index 8f4c2d88f4ed..53ef7f48f5b7 100644 --- a/src/sonic-yang-models/yang-models/sonic-port-qos-map.yang +++ b/src/sonic-yang-models/yang-models/sonic-port-qos-map.yang @@ -56,11 +56,16 @@ module sonic-port-qos-map { key "ifname"; leaf ifname { - type leafref { - path "/prt:sonic-port/prt:PORT/prt:PORT_LIST/prt:name"; - } - description - "Reference of port on which QOS MAPS to be configured."; + type union { + type string { + pattern "global"; + } + type leafref { + path "/prt:sonic-port/prt:PORT/prt:PORT_LIST/prt:name"; + } + } + description + "Reference of port or global on which QOS MAPS to be configured."; } leaf tc_to_pg_map { From 90e56cc55bc51f3740159ee7f11210c603d339da Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Thu, 16 Jun 2022 14:13:01 +0800 Subject: [PATCH 036/259] [Build] Improve docker build performance (#11111) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Why I did it The docker storage driver vfs is not a good option for build, it uses the “deep copy” when building a new layer, leads to lower performance and more space used on disk than other storage drivers. A better docker storage driver is the default one overlay2, it is a modern union filesystem. --- .azure-pipelines/template-variables.yml | 1 + Makefile.work | 8 ++++++++ rules/config | 3 +++ slave.mk | 1 + 4 files changed, 13 insertions(+) diff --git a/.azure-pipelines/template-variables.yml b/.azure-pipelines/template-variables.yml index 9f192d35bd5e..462a417c0173 100644 --- a/.azure-pipelines/template-variables.yml +++ b/.azure-pipelines/template-variables.yml @@ -1,3 +1,4 @@ variables: DEFAULT_CONTAINER_REGISTRY: 'publicmirror.azurecr.io' COMMON_LIB_BUILD_ENVS: 'bullseye' + SONIC_SLAVE_DOCKER_DRIVER: 'overlay2' diff --git a/Makefile.work b/Makefile.work index ba01e27fd02d..0428c3cbc553 100644 --- a/Makefile.work +++ b/Makefile.work @@ -137,6 +137,7 @@ MULTIARCH_QEMU_ENVIRON = y endif endif SLAVE_IMAGE = $(SLAVE_BASE_IMAGE)-$(USER_LC) +DOCKER_ROOT = $(PWD)/fsroot.docker.$(BLDENV) # Support FIPS feature, armhf not supported yet ifeq ($(PLATFORM_ARCH),armhf) @@ -181,6 +182,7 @@ endif DOCKER_LOCKFILE_SAVE := $(DOCKER_LOCKDIR)/docker_save.lock $(shell mkdir -m 0777 -p $(DOCKER_LOCKDIR)) $(shell [ -f $(DOCKER_LOCKFILE_SAVE) ] || (touch $(DOCKER_LOCKFILE_SAVE) && chmod 0777 $(DOCKER_LOCKFILE_SAVE))) +$(shell sudo rm -rf $(DOCKER_ROOT) && mkdir -p $(DOCKER_ROOT)) ifeq ($(DOCKER_BUILDER_MOUNT),) override DOCKER_BUILDER_MOUNT := "$(PWD):/sonic" @@ -200,6 +202,11 @@ DOCKER_RUN := docker run --rm=true --privileged --init \ -i$(shell { if [ -t 0 ]; then echo t; fi }) \ $(SONIC_BUILDER_EXTRA_CMDLINE) +# Mount the $(DOCKER_ROOT) to /var/lib/docker in the slave container, the overlay fs is not supported as dockerd root folder. +ifneq ($(filter $(SONIC_SLAVE_DOCKER_DRIVER),overlay overlay2),) + DOCKER_RUN += -v $(DOCKER_ROOT):/var/lib/docker +endif + ifneq ($(DOCKER_BUILDER_USER_MOUNT),) DOCKER_RUN += $(foreach mount,$(subst $(comma), ,$(DOCKER_BUILDER_USER_MOUNT)), $(addprefix -v , $(mount))) endif @@ -376,6 +383,7 @@ SONIC_BUILD_INSTRUCTION := make \ ENABLE_ASAN=$(ENABLE_ASAN) \ ENABLE_FIPS_FEATURE=$(ENABLE_FIPS_FEATURE) \ ENABLE_FIPS=$(ENABLE_FIPS) \ + SONIC_SLAVE_DOCKER_DRIVER=$(SONIC_SLAVE_DOCKER_DRIVER) \ $(SONIC_OVERRIDE_BUILD_VARS) .PHONY: sonic-slave-build sonic-slave-bash init reset diff --git a/rules/config b/rules/config index 415aa795e767..0fdbc2b59e9b 100644 --- a/rules/config +++ b/rules/config @@ -229,3 +229,6 @@ DEFAULT_CONTAINER_REGISTRY ?= # ENABLE_FIPS - support FIPS flag, if enabled, no additional config requred for the image to support FIPS ENABLE_FIPS_FEATURE ?= y ENABLE_FIPS ?= n + +# SONIC_SLAVE_DOCKER_DRIVER - set the sonic slave docker storage driver +SONIC_SLAVE_DOCKER_DRIVER ?= vfs diff --git a/slave.mk b/slave.mk index 884ab2c1fb91..092c515475e3 100644 --- a/slave.mk +++ b/slave.mk @@ -791,6 +791,7 @@ $(SONIC_INSTALL_WHEELS) : $(PYTHON_WHEELS_PATH)/%-install : .platform $$(addsuff # start docker daemon docker-start : + @sudo sed -i 's/--storage-driver=vfs/--storage-driver=$(SONIC_SLAVE_DOCKER_DRIVER)/' /etc/default/docker @sudo sed -i -e '/http_proxy/d' -e '/https_proxy/d' /etc/default/docker @sudo bash -c "{ echo \"export http_proxy=$$http_proxy\"; \ echo \"export https_proxy=$$https_proxy\"; \ From 95dc2e23ff585e26a11f5657bd30b7c025695523 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Fri, 17 Jun 2022 05:02:00 -0700 Subject: [PATCH 037/259] [202205][BRCM_SAI] update Brcm SAI dependencies (#11173) Signed-off-by: Ying Xie --- platform/broadcom/docker-pde.mk | 2 +- platform/broadcom/docker-syncd-brcm.mk | 3 ++- platform/broadcom/libsaithrift-dev.mk | 4 ++-- platform/broadcom/rules.mk | 4 ++-- platform/broadcom/sai.dep | 20 ++++++++++---------- platform/broadcom/sonic-pde-tests.mk | 2 +- platform/marvell/libsaithrift-dev.mk | 2 +- 7 files changed, 19 insertions(+), 18 deletions(-) diff --git a/platform/broadcom/docker-pde.mk b/platform/broadcom/docker-pde.mk index 2d0f371fde11..d433160e2a7d 100644 --- a/platform/broadcom/docker-pde.mk +++ b/platform/broadcom/docker-pde.mk @@ -6,7 +6,7 @@ DOCKER_PDE = $(DOCKER_PDE_STEM).gz DOCKER_PDE_DBG = $(DOCKER_PDE_STEM)-$(DBG_IMAGE_MARK).gz $(DOCKER_PDE)_PATH = $(DOCKERS_PATH)/$(DOCKER_PDE_STEM) $(DOCKER_PDE)_DEPENDS += $(PYTHON_NETIFACES) -$(DOCKER_PDE)_DEPENDS += $(SONIC_PLATFORM_PDE) $(BRCM_SAI) +$(DOCKER_PDE)_DEPENDS += $(SONIC_PLATFORM_PDE) $(BRCM_XGS_SAI) $(DOCKER_PDE_RDEPENDS += $(PYTHON_NETIFACES) $(DOCKER_PDE)_PYTHON_DEBS += $(SONIC_UTILS) diff --git a/platform/broadcom/docker-syncd-brcm.mk b/platform/broadcom/docker-syncd-brcm.mk index 1129c7681c34..e91f4fb0eec9 100644 --- a/platform/broadcom/docker-syncd-brcm.mk +++ b/platform/broadcom/docker-syncd-brcm.mk @@ -1,10 +1,11 @@ # docker image for brcm syncd +th modified: platform/broadcom/sai.mk DOCKER_SYNCD_PLATFORM_CODE = brcm include $(PLATFORM_PATH)/../template/docker-syncd-base.mk $(DOCKER_SYNCD_BASE)_DEPENDS += $(SYNCD) -$(DOCKER_SYNCD_BASE)_DEPENDS += $(BRCM_SAI) +$(DOCKER_SYNCD_BASE)_DEPENDS += $(BRCM_XGS_SAI) $(DOCKER_SYNCD_BASE)_FILES += $(DSSERVE) $(BCMCMD) $(DOCKER_SYNCD_BASE)_DBG_DEPENDS += $(SYNCD_DBG) \ diff --git a/platform/broadcom/libsaithrift-dev.mk b/platform/broadcom/libsaithrift-dev.mk index c1bd9b90de13..ec4e1f6e6da6 100644 --- a/platform/broadcom/libsaithrift-dev.mk +++ b/platform/broadcom/libsaithrift-dev.mk @@ -13,8 +13,8 @@ else $(LIBSAITHRIFT_DEV)_DEPENDS += $(LIBTHRIFT) $(LIBTHRIFT_DEV) $(PYTHON_THRIFT) $(THRIFT_COMPILER) $(LIBSAITHRIFT_DEV)_RDEPENDS += $(LIBTHRIFT) endif -$(LIBSAITHRIFT_DEV)_DEPENDS += $(BRCM_SAI) $(BRCM_SAI_DEV) -$(LIBSAITHRIFT_DEV)_RDEPENDS += $(BRCM_SAI) +$(LIBSAITHRIFT_DEV)_DEPENDS += $(BRCM_XGS_SAI) $(BRCM_XGS_SAI_DEV) +$(LIBSAITHRIFT_DEV)_RDEPENDS += $(BRCM_XGS_SAI) SONIC_DPKG_DEBS += $(LIBSAITHRIFT_DEV) PYTHON_SAITHRIFT = python-saithrift$(SAITHRIFT_VER)_$(SAI_VER)_amd64.deb diff --git a/platform/broadcom/rules.mk b/platform/broadcom/rules.mk index 5f3172ca0305..b13a145b2b0f 100644 --- a/platform/broadcom/rules.mk +++ b/platform/broadcom/rules.mk @@ -42,8 +42,8 @@ SONIC_ALL += $(SONIC_ONE_IMAGE) $(SONIC_ONE_ABOOT_IMAGE) \ $(DOCKER_FPM) # Inject brcm sai into syncd -$(SYNCD)_DEPENDS += $(BRCM_SAI) $(BRCM_SAI_DEV) -$(SYNCD)_UNINSTALLS += $(BRCM_SAI_DEV) $(BRCM_SAI) +$(SYNCD)_DEPENDS += $(BRCM_XGS_SAI) $(BRCM_XGS_SAI_DEV) +$(SYNCD)_UNINSTALLS += $(BRCM_XGS_SAI_DEV) $(BRCM_XGS_SAI) ifeq ($(ENABLE_SYNCD_RPC),y) $(SYNCD)_DEPENDS += $(LIBSAITHRIFT_DEV) diff --git a/platform/broadcom/sai.dep b/platform/broadcom/sai.dep index d6f6bb374f0d..f91f61f6132b 100644 --- a/platform/broadcom/sai.dep +++ b/platform/broadcom/sai.dep @@ -1,22 +1,22 @@ #DPKG FRK -SPATH := $($(BRCM_SAI)_SRC_PATH) -DEP_FILES := $(SONIC_COMMON_FILES_LIST) platform/broadcom/sai.mk platform/broadcom/sai.dep +SPATH := $($(BRCM_XGS_SAI)_SRC_PATH) +DEP_FILES := $(SONIC_COMMON_FILES_LIST) platform/broadcom/sai.mk platform/broadcom/sai.dep DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) # Get the Latest HTTP Header and calculate the SHA value as it is a softlink that always points to LATEST_INT_OCP_SAI_X.X.X -SAI_FLAGS := $(shell wget --spider --server-response $($(BRCM_SAI)_URL) $($(BRCM_SAI_DEV)_URL) 2>&1 \ +SAI_FLAGS := $(shell wget --spider --server-response $($(BRCM_XGS_SAI)_URL) $($(BRCM_XGS_SAI_DEV)_URL) 2>&1 \ | grep -Ev -- '--|Date:|x-ms-request-id'|sha256sum|awk '{print $$1}' ) -$(BRCM_SAI)_CACHE_MODE := GIT_CONTENT_SHA -$(BRCM_SAI)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) $(SAI_FLAGS) -$(BRCM_SAI)_DEP_FILES := $(DEP_FILES) +$(BRCM_XGS_SAI)_CACHE_MODE := GIT_CONTENT_SHA +$(BRCM_XGS_SAI)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) $(SAI_FLAGS) +$(BRCM_XGS_SAI)_DEP_FILES := $(DEP_FILES) -$(BRCM_SAI_DEV)_CACHE_MODE := GIT_CONTENT_SHA -$(BRCM_SAI_DEV)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) $(SAI_FLAGS) -$(BRCM_SAI_DEV)_DEP_FILES := $(DEP_FILES) +$(BRCM_XGS_SAI_DEV)_CACHE_MODE := GIT_CONTENT_SHA +$(BRCM_XGS_SAI_DEV)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) $(SAI_FLAGS) +$(BRCM_XGS_SAI_DEV)_DEP_FILES := $(DEP_FILES) # Dependencies for SAI DNX ASIC family -$(BRCM_DNX_SAI)_CACHE_MODE := GIT_CONTENT_SHA +$(BRCM_DNX_SAI)_CACHE_MODE := GIT_CONTENT_SHA $(BRCM_DNX_SAI)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) $(SAI_FLAGS) $(BRCM_DNX_SAI)_DEP_FILES := $(DEP_FILES) diff --git a/platform/broadcom/sonic-pde-tests.mk b/platform/broadcom/sonic-pde-tests.mk index a7482625c87e..2d76bbfacd62 100644 --- a/platform/broadcom/sonic-pde-tests.mk +++ b/platform/broadcom/sonic-pde-tests.mk @@ -2,6 +2,6 @@ SONIC_PLATFORM_PDE = sonic-platform-pde_1.0_amd64.deb $(SONIC_PLATFORM_PDE)_SRC_PATH = $(SRC_PATH)/sonic-platform-pde -$(SONIC_PLATFORM_PDE)_DEPENDS += $(BRCM_SAI) $(BRCM_SAI_DEV) $(SWIG) +$(SONIC_PLATFORM_PDE)_DEPENDS += $(BRCM_XGS_SAI) $(BRCM_XGS_SAI_DEV) $(SWIG) SONIC_DPKG_DEBS += $(SONIC_PLATFORM_PDE) diff --git a/platform/marvell/libsaithrift-dev.mk b/platform/marvell/libsaithrift-dev.mk index d1607a1ba220..dd178c0b1304 100644 --- a/platform/marvell/libsaithrift-dev.mk +++ b/platform/marvell/libsaithrift-dev.mk @@ -12,7 +12,7 @@ PYTHON_SAITHRIFT = python-saithrift_$(SAI_VER)_amd64.deb $(eval $(call add_extra_package,$(LIBSAITHRIFT_DEV),$(PYTHON_SAITHRIFT))) SAISERVER = saiserver_$(SAI_VER)_amd64.deb -$(SAISERVER)_RDEPENDS += $(LIBTHRIFT) $(BRCM_SAI) +$(SAISERVER)_RDEPENDS += $(LIBTHRIFT) $(BRCM_XGS_SAI) $(eval $(call add_extra_package,$(LIBSAITHRIFT_DEV),$(SAISERVER))) SAISERVER_DBG = saiserver-dbg_$(SAI_VER)_amd64.deb From 36b54da653a0afe15f26b47514a544aac4d47feb Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Fri, 17 Jun 2022 07:51:35 -0700 Subject: [PATCH 038/259] [brcm docker build] remove extra line (#11182) Signed-off-by: Ying Xie --- platform/broadcom/docker-syncd-brcm.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/platform/broadcom/docker-syncd-brcm.mk b/platform/broadcom/docker-syncd-brcm.mk index e91f4fb0eec9..cb4ee813d914 100644 --- a/platform/broadcom/docker-syncd-brcm.mk +++ b/platform/broadcom/docker-syncd-brcm.mk @@ -1,5 +1,4 @@ # docker image for brcm syncd -th modified: platform/broadcom/sai.mk DOCKER_SYNCD_PLATFORM_CODE = brcm include $(PLATFORM_PATH)/../template/docker-syncd-base.mk From d63d16ba58d8e49c6d914c5c681ec7096977ed4d Mon Sep 17 00:00:00 2001 From: yozhao101 <56170650+yozhao101@users.noreply.github.com> Date: Fri, 17 Jun 2022 12:13:18 -0700 Subject: [PATCH 039/259] [memory_checker] Do not check memory usage of containers which are not created (#11129) Signed-off-by: Yong Zhao yozhao@microsoft.com Why I did it This PR aims to fix an issue (#10088) by enhancing the script memory_checker. Specifically, if container is not created successfully during device is booted/rebooted, then memory_checker do not need check its memory usage. How I did it In the script memory_checker, a function is added to get names of running containers. If the specified container name is not in current running container list, then this script will exit without checking its memory usage. How to verify it I tested on a lab device by following the steps: Stops telemetry container with command sudo systemctl stop telemetry.service Removes telemetry container with command docker rm telemetry Checks whether the script memory_checker ran by Monit will generate the syslog message saying it will exit without checking memory usage of telemetry. --- files/image_config/monit/memory_checker | 34 +++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/files/image_config/monit/memory_checker b/files/image_config/monit/memory_checker index 3cd0f2d80225..dfe270e79524 100755 --- a/files/image_config/monit/memory_checker +++ b/files/image_config/monit/memory_checker @@ -25,6 +25,8 @@ import sys import syslog import re +import docker + def get_command_result(command): """Executes the command and return the resulting output. @@ -86,7 +88,7 @@ def check_memory_usage(container_name, threshold_value): print("[{}]: Memory usage ({} Bytes) is larger than the threshold ({} Bytes)!" .format(container_name, mem_usage_bytes, threshold_value)) syslog.syslog(syslog.LOG_INFO, "[{}]: Memory usage ({} Bytes) is larger than the threshold ({} Bytes)!" - .format(container_name, mem_usage_bytes, threshold_value)) + .format(container_name, mem_usage_bytes, threshold_value)) sys.exit(3) else: syslog.syslog(syslog.LOG_ERR, "[memory_checker] Failed to retrieve memory value from '{}'" @@ -94,6 +96,28 @@ def check_memory_usage(container_name, threshold_value): sys.exit(4) +def get_running_container_names(): + """Retrieves names of running containers by talking to the docker daemon. + + Args: + None. + + Returns: + running_container_names: A list indicates names of running containers. + """ + try: + docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock') + running_container_list = docker_client.containers.list(filters={"status": "running"}) + running_container_names = [ container.name for container in running_container_list ] + except (docker.errors.APIError, docker.errors.DockerException) as err: + syslog.syslog(syslog.LOG_ERR, + "Failed to retrieve the running container list from docker daemon! Error message is: '{}'" + .format(err)) + sys.exit(5) + + return running_container_names + + def main(): parser = argparse.ArgumentParser(description="Check memory usage of a container \ and an alerting message will be written into syslog if memory usage \ @@ -104,7 +128,13 @@ def main(): parser.add_argument("threshold_value", type=int, help="threshold value in bytes") args = parser.parse_args() - check_memory_usage(args.container_name, args.threshold_value) + running_container_names = get_running_container_names() + if args.container_name in running_container_names: + check_memory_usage(args.container_name, args.threshold_value) + else: + syslog.syslog(syslog.LOG_INFO, + "[memory_checker] Exits without checking memory usage since container '{}' is not running!" + .format(args.container_name)) if __name__ == "__main__": From 7a22cbff289007021075b95cfdcb708ef9c6b0c3 Mon Sep 17 00:00:00 2001 From: jingwenxie Date: Mon, 20 Jun 2022 09:02:24 -0700 Subject: [PATCH 040/259] [202205][utilities] advance utilities submodule head (#11184) 13ec600 [generic-config-updater] Add NTP validator (#2212) 4fc09b1 [GCU] Handling non-compliant leaf-list with string values (#2174) ac89489 Modify override testcase to cover PORT admin_status (#2165) d7953d2 [GCU] Validate peer_group_range ip_range are correct (#2145) --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index ce9654335a1f..13ec600c4ae7 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit ce9654335a1f0bda76637088d6d1a21a5c7db48f +Subproject commit 13ec600c4ae7b6af88121d5d1af5cc1be27feec6 From 3ea8df3096e47fbcc60045f019e8f09807379823 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Tue, 21 Jun 2022 09:28:46 -0700 Subject: [PATCH 041/259] [202205][swss] advance submodule head (#11200) swss: * a3bfd96 2022-06-18 | Enhance mock test for dynamic buffer manager for port removing and qos reload flows (#2262) (HEAD -> 202205, github/202205) [Stephen Sun] * b17d6c0 2022-05-28 | Support mock_test infra for dynamic buffer manager and fix issues found during mock test (#2234) [Stephen Sun] * 3fb23a1 2022-06-16 | [aclorch] Fix and simplify DTel watchlist tables and entries (#2155) [Mickey Spiegel] * 9ace643 2022-06-16 | [intfmgr]: Set proxy_arp kernel param (#2334) [Lawrence Lee] * 013609a 2022-06-14 | [crmorch] Prevent exceededLogCounter from resetting when low and high values are equal (#2327) [Alexander Allen] * 83a1306 2022-06-13 | Fix key generation in removeDecapTunnel (#2322) [Myron Sosyak] * 3d018ad 2022-06-15 | Apply `DSCP_TO_TC_MAP` from `PORT_QOS_MAP|global` to switch level (#2314) [bingwang-ms] Signed-off-by: Ying Xie --- src/sonic-swss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-swss b/src/sonic-swss index 443044581d92..a3bfd96a122b 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 443044581d92e72ceb35a9d27137c097268b2f61 +Subproject commit a3bfd96a122bcb657683be9bc8e42535b01e8abf From 57244dd24ad401bdf8074a0d5152066b91ea5f8a Mon Sep 17 00:00:00 2001 From: Liu Shilong Date: Wed, 22 Jun 2022 14:12:25 +0800 Subject: [PATCH 042/259] [build] Add version files to docker image dependencies (#11195) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [ci] Support to skip vstest using include/exclude config file. (#11086) example: ├── folderA │ ├── fileA (skip vstest) │ ├── fileB │ └── fileC If we want to skip vstest when changing /folderA/fileA, and not skip vstest when changing fileB or fileC. vstest-include: ^folderA/fileA vstest-exclude: ^folderA * [build] Add version files to docker image dependencies --- .azure-pipelines/azure-pipelines-build.yml | 1 + .azure-pipelines/template-skipvstest.yml | 12 ++++++++++++ .azure-pipelines/vstest-exclude | 3 +++ .azure-pipelines/vstest-include | 2 ++ Makefile.cache | 6 ++++++ azure-pipelines.yml | 1 + 6 files changed, 25 insertions(+) create mode 100644 .azure-pipelines/template-skipvstest.yml create mode 100644 .azure-pipelines/vstest-exclude create mode 100644 .azure-pipelines/vstest-include diff --git a/.azure-pipelines/azure-pipelines-build.yml b/.azure-pipelines/azure-pipelines-build.yml index c84c91441806..f7eeb8c95d9b 100644 --- a/.azure-pipelines/azure-pipelines-build.yml +++ b/.azure-pipelines/azure-pipelines-build.yml @@ -98,6 +98,7 @@ jobs: platform_rpc: nephos buildSteps: + - template: template-skipvstest.yml - bash: | set -ex if [ $(GROUP_NAME) == vs ]; then diff --git a/.azure-pipelines/template-skipvstest.yml b/.azure-pipelines/template-skipvstest.yml new file mode 100644 index 000000000000..b47f17ce6e81 --- /dev/null +++ b/.azure-pipelines/template-skipvstest.yml @@ -0,0 +1,12 @@ +steps: +- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: + - script: | + set -ex + tar_branch=origin/$(System.PullRequest.TargetBranch) + git diff $tar_branch..HEAD --name-only | grep -v -f .azure-pipelines/vstest-exclude && exit 0 + git diff $tar_branch..HEAD --name-only | grep -f .azure-pipelines/vstest-include && exit 0 + set +x + echo "Skip vstest jobs" + echo "##vso[task.setvariable variable=SKIP_VSTEST;isOutput=true]YES" + name: SetVar + displayName: "Check if vstest is needed." diff --git a/.azure-pipelines/vstest-exclude b/.azure-pipelines/vstest-exclude new file mode 100644 index 000000000000..71616704707a --- /dev/null +++ b/.azure-pipelines/vstest-exclude @@ -0,0 +1,3 @@ +^platform +^.azure-pipelines +^files/build/versions diff --git a/.azure-pipelines/vstest-include b/.azure-pipelines/vstest-include new file mode 100644 index 000000000000..86fb3a9d88ba --- /dev/null +++ b/.azure-pipelines/vstest-include @@ -0,0 +1,2 @@ +^platform/vs +^.azure-pipelines/run-test-template.yml diff --git a/Makefile.cache b/Makefile.cache index 50fac768a599..9b6d6175780e 100644 --- a/Makefile.cache +++ b/Makefile.cache @@ -561,6 +561,12 @@ define SHA_DEP_RULES ALL_DEP_FILES_LIST += $(foreach pkg,$(2), $($(filter none,$($(1)_CACHE_MODE)), \ $(addsuffix .$(3),$(addprefix $(pkg)/, $(1))) \ $(addsuffix .$(3).sha,$(addprefix $(pkg)/, $(1))))) +$(foreach docker, $(filter $(SONIC_DOCKER_IMAGES), $(1)), \ + $(eval $(docker)_DEP_FILES+=$(wildcard files/build/versions/default/*) \ + $(wildcard files/build/versions/dockers/$(basename $(docker))/*))) +$(foreach docker, $(filter $(SONIC_DOCKER_DBG_IMAGES), $(1)), \ + $(eval $(docker)_DEP_FILES+=$(wildcard files/build/versions/default/*) \ + $(wildcard files/build/versions/dockers/$(patsubst %-$(DBG_IMAGE_MARK).gz,%,$(docker))/*))) $(addsuffix .$(3),$(addprefix $(2)/, $(1))) : $(2)/%.$(3) : \ $(2)/%.flags $$$$($$$$*_DEP_FILES) $$$$(if $$$$($$$$*_SMDEP_FILES), $(2)/%.smdep) @$$(eval $$*_DEP_FILES_MODIFIED := $$? ) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 92cc0ae4038b..4cf0e71db56d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -77,6 +77,7 @@ stages: - stage: Test dependsOn: BuildVS + condition: and(ne(stageDependencies.BuildVS.outputs['vs.SetVar.SKIP_VSTEST'], 'YES'), succeeded()) variables: - name: inventory value: veos_vtb From 6f713419bafd3919701aa16b0f34b7701bdb841f Mon Sep 17 00:00:00 2001 From: bingwang-ms <66248323+bingwang-ms@users.noreply.github.com> Date: Fri, 3 Jun 2022 04:03:27 +0800 Subject: [PATCH 043/259] Add two extra lossless queues for bounced back traffic (#10496) Signed-off-by: bingwang Why I did it This PR is to add two extra lossless queues for bounced back traffic. HLD sonic-net/SONiC#950 SKUs include Arista-7050CX3-32S-C32 Arista-7050CX3-32S-D48C8 Arista-7260CX3-D108C8 Arista-7260CX3-C64 Arista-7260CX3-Q64 How I did it Update the buffers.json.j2 template and buffers_config.j2 template to generate new BUFFER_QUEUE table. For T1 devices, queue 2 and queue 6 are set as lossless queues on T0 facing ports. For T0 devices, queue 2 and queue 6 are set as lossless queues on T1 facing ports. Queue 7 is added as a new lossy queue as DSCP 48 is mapped to TC 7, and then mapped into Queue 7 How to verify it Verified by UT Verified by coping the new template and generate buffer config with sonic-cfggen --- .../buffers_defaults_t0.j2 | 6 + .../buffers_extra_queues.j2 | 1 + .../buffers_defaults_t0.j2 | 6 + .../buffers_extra_queues.j2 | 37 + .../Arista-7260CX3-C64/buffers_defaults_t0.j2 | 6 + .../Arista-7260CX3-C64/buffers_defaults_t1.j2 | 6 + .../buffers_extra_queues.j2 | 38 + .../buffers_defaults_t0.j2 | 6 + .../buffers_extra_queues.j2 | 1 + .../Arista-7260CX3-Q64/buffers_defaults_t0.j2 | 6 + .../Arista-7260CX3-Q64/buffers_defaults_t1.j2 | 6 + .../buffers_extra_queues.j2 | 1 + files/build_templates/buffers_config.j2 | 14 + ...-arista7050cx3-dualtor-remap-disabled.json | 487 +++++++++ .../py3/buffer-arista7050cx3-dualtor.json | 537 ++++++++++ ...fer-arista7260-dualtor-remap-disabled.json | 937 +++++++++++++++++ .../py3/buffer-arista7260-dualtor.json | 987 ++++++++++++++++++ .../buffer-arista7260-t1-remap-disabled.json | 449 ++++++++ .../py3/buffer-arista7260-t1.json | 570 ++++++++++ src/sonic-config-engine/tests/test_j2files.py | 23 + 20 files changed, 4124 insertions(+) create mode 120000 device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/buffers_extra_queues.j2 create mode 100644 device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/buffers_extra_queues.j2 create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_extra_queues.j2 create mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_extra_queues.j2 create mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_extra_queues.j2 create mode 100644 src/sonic-config-engine/tests/sample_output/py3/buffer-arista7050cx3-dualtor-remap-disabled.json create mode 100644 src/sonic-config-engine/tests/sample_output/py3/buffer-arista7050cx3-dualtor.json create mode 100644 src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-dualtor-remap-disabled.json create mode 100644 src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-dualtor.json create mode 100644 src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1-remap-disabled.json create mode 100644 src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/buffers_defaults_t0.j2 index 6bea9e4a5be0..1a6187edbddd 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/buffers_defaults_t0.j2 +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/buffers_defaults_t0.j2 @@ -44,3 +44,9 @@ } }, {%- endmacro %} + +{% import 'buffers_extra_queues.j2' as defs with context %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} +{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/buffers_extra_queues.j2 b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/buffers_extra_queues.j2 new file mode 120000 index 000000000000..2c4dff993ce9 --- /dev/null +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/buffers_extra_queues.j2 @@ -0,0 +1 @@ +../Arista-7050CX3-32S-D48C8/buffers_extra_queues.j2 \ No newline at end of file diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/buffers_defaults_t0.j2 index a7441471e0cc..bfeb2185623a 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/buffers_defaults_t0.j2 +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/buffers_defaults_t0.j2 @@ -45,3 +45,9 @@ } }, {%- endmacro %} + +{% import 'buffers_extra_queues.j2' as defs with context %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} +{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/buffers_extra_queues.j2 b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/buffers_extra_queues.j2 new file mode 100644 index 000000000000..8ec4ad46d667 --- /dev/null +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/buffers_extra_queues.j2 @@ -0,0 +1,37 @@ +{% if DEVICE_METADATA is defined and 'subtype' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['subtype'] == 'DualToR' %} +{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} + "BUFFER_QUEUE": { +{% for port in port_names.split(',') %} +{% if port in port_names_require_extra_buffer.split(',') %} + "{{ port }}|0-1": { + "profile" : "egress_lossy_profile" + }, + "{{ port }}|2-4": { + "profile" : "egress_lossless_profile" + }, + "{{ port }}|5": { + "profile" : "egress_lossy_profile" + }, + "{{ port }}|6": { + "profile" : "egress_lossless_profile" + }, + "{{ port }}|7": { + "profile" : "egress_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% else %} + "{{ port }}|0-2": { + "profile" : "egress_lossy_profile" + }, + "{{ port }}|3-4": { + "profile" : "egress_lossless_profile" + }, + "{{ port }}|5-7": { + "profile" : "egress_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% endif %} +{% endfor %} + } +{% endmacro %} +{% endif %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t0.j2 index 241f0c9a9d25..625ca0ab119e 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t0.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t0.j2 @@ -44,3 +44,9 @@ } }, {%- endmacro %} + +{% import 'buffers_extra_queues.j2' as defs with context %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} +{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{%- endmacro %} \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 index 9294691c2f5d..68af36a27518 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 @@ -50,3 +50,9 @@ } }, {%- endmacro %} + +{% import 'buffers_extra_queues.j2' as defs with context %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} +{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_extra_queues.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_extra_queues.j2 new file mode 100644 index 000000000000..3ad6c5b9bc9e --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_extra_queues.j2 @@ -0,0 +1,38 @@ +{% if DEVICE_METADATA is defined and 'type' in DEVICE_METADATA['localhost'] and +(DEVICE_METADATA['localhost']['type'] == 'LeafRouter' or DEVICE_METADATA['localhost']['subtype'] == 'DualToR') %} +{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} + "BUFFER_QUEUE": { +{% for port in port_names.split(',') %} +{% if port in port_names_require_extra_buffer.split(',') %} + "{{ port }}|0-1": { + "profile" : "egress_lossy_profile" + }, + "{{ port }}|2-4": { + "profile" : "egress_lossless_profile" + }, + "{{ port }}|5": { + "profile" : "egress_lossy_profile" + }, + "{{ port }}|6": { + "profile" : "egress_lossless_profile" + }, + "{{ port }}|7": { + "profile" : "egress_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% else %} + "{{ port }}|0-2": { + "profile" : "egress_lossy_profile" + }, + "{{ port }}|3-4": { + "profile" : "egress_lossless_profile" + }, + "{{ port }}|5-7": { + "profile" : "egress_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% endif %} +{% endfor %} + } +{% endmacro %} +{% endif %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_defaults_t0.j2 index e4377bd47ab1..10b9d70d24bf 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_defaults_t0.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_defaults_t0.j2 @@ -52,3 +52,9 @@ } }, {%- endmacro %} + +{% import 'buffers_extra_queues.j2' as defs with context %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} +{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_extra_queues.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_extra_queues.j2 new file mode 120000 index 000000000000..92b7e9ffbee5 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_extra_queues.j2 @@ -0,0 +1 @@ +../Arista-7260CX3-C64/buffers_extra_queues.j2 \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t0.j2 index 241f0c9a9d25..01b5a1dd8b3e 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t0.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t0.j2 @@ -44,3 +44,9 @@ } }, {%- endmacro %} + +{% import 'buffers_extra_queues.j2' as defs with context %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} +{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 index 23a969c8755e..1d8fbb3e852f 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 @@ -44,3 +44,9 @@ } }, {%- endmacro %} + +{% import 'buffers_extra_queues.j2' as defs with context %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} +{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_extra_queues.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_extra_queues.j2 new file mode 120000 index 000000000000..92b7e9ffbee5 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_extra_queues.j2 @@ -0,0 +1 @@ +../Arista-7260CX3-C64/buffers_extra_queues.j2 \ No newline at end of file diff --git a/files/build_templates/buffers_config.j2 b/files/build_templates/buffers_config.j2 index a67316af5f3d..814e470d0211 100644 --- a/files/build_templates/buffers_config.j2 +++ b/files/build_templates/buffers_config.j2 @@ -128,6 +128,16 @@ def {%- endfor %} {%- set port_names_active = port_names_list_active | join(',') %} +{%- set port_names_list_extra_queues = [] %} +{%- for port in PORT_ACTIVE %} + {%- if ((SYSTEM_DEFAULTS is defined) and ('tunnel_qos_remap' in SYSTEM_DEFAULTS) and (SYSTEM_DEFAULTS['tunnel_qos_remap']['status'] == 'enabled')) and + (('type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'LeafRouter' and DEVICE_NEIGHBOR_METADATA is defined and DEVICE_NEIGHBOR[port].name in DEVICE_NEIGHBOR_METADATA and DEVICE_NEIGHBOR_METADATA[DEVICE_NEIGHBOR[port].name].type == 'ToRRouter') or + ('subtype' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['subtype'] == 'DualToR' and DEVICE_NEIGHBOR_METADATA is defined and DEVICE_NEIGHBOR[port].name in DEVICE_NEIGHBOR_METADATA and DEVICE_NEIGHBOR_METADATA[DEVICE_NEIGHBOR[port].name].type == 'LeafRouter')) %} + {%- if port_names_list_extra_queues.append(port) %}{%- endif %} + {%- endif %} +{%- endfor %} +{%- set port_names_extra_queues = port_names_list_extra_queues | join(',') %} + {%- set port_names_list_inactive = [] %} {%- for port in PORT_INACTIVE %} {%- if port_names_list_inactive.append(port) %}{%- endif %} @@ -182,6 +192,10 @@ def {{ defs.generate_queue_buffers(port_names_active) }} {% elif defs.generate_queue_buffers_with_inactive_ports is defined %} {{ defs.generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) }} +{% elif (defs.generate_queue_buffers_with_extra_lossless_queues_with_inactive_ports is defined) and (port_names_extra_queues != '') %} +{{ defs.generate_queue_buffers_with_extra_lossless_queues_with_inactive_ports(port_names_active, port_names_extra_queues, port_names_inactive) }} +{% elif (defs.generate_queue_buffers_with_extra_lossless_queues is defined) and (port_names_extra_queues != '') %} +{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names_active, port_names_extra_queues) }} {% else %} "BUFFER_QUEUE": { {% for port in PORT_ACTIVE %} diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7050cx3-dualtor-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7050cx3-dualtor-remap-disabled.json new file mode 100644 index 000000000000..883757d621ad --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7050cx3-dualtor-remap-disabled.json @@ -0,0 +1,487 @@ +{ + "CABLE_LENGTH": { + "AZURE": { + "Ethernet0": "5m", + "Ethernet2": "300m", + "Ethernet4": "5m", + "Ethernet6": "300m", + "Ethernet8": "5m", + "Ethernet10": "300m", + "Ethernet12": "5m", + "Ethernet14": "300m", + "Ethernet16": "5m", + "Ethernet18": "300m", + "Ethernet20": "5m", + "Ethernet22": "300m", + "Ethernet24": "40m", + "Ethernet28": "40m", + "Ethernet32": "40m", + "Ethernet36": "40m", + "Ethernet40": "5m", + "Ethernet42": "300m", + "Ethernet44": "5m", + "Ethernet46": "300m", + "Ethernet48": "5m", + "Ethernet50": "300m", + "Ethernet52": "5m", + "Ethernet54": "300m", + "Ethernet56": "5m", + "Ethernet58": "300m", + "Ethernet60": "5m", + "Ethernet62": "300m", + "Ethernet64": "5m", + "Ethernet66": "300m", + "Ethernet68": "5m", + "Ethernet70": "300m", + "Ethernet72": "5m", + "Ethernet74": "300m", + "Ethernet76": "5m", + "Ethernet78": "300m", + "Ethernet80": "5m", + "Ethernet82": "300m", + "Ethernet84": "5m", + "Ethernet86": "300m", + "Ethernet88": "40m", + "Ethernet92": "40m", + "Ethernet96": "40m", + "Ethernet100": "40m", + "Ethernet104": "5m", + "Ethernet106": "300m", + "Ethernet108": "5m", + "Ethernet110": "300m", + "Ethernet112": "5m", + "Ethernet114": "300m", + "Ethernet116": "5m", + "Ethernet118": "300m", + "Ethernet120": "5m", + "Ethernet122": "300m", + "Ethernet124": "5m", + "Ethernet126": "300m" + } + }, + + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "32689152", + "type": "ingress", + "mode": "dynamic", + "xoff": "2058240" + }, + "egress_lossy_pool": { + "size": "24192256", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "32340992", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"0", + "static_th":"32340992" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1792", + "dynamic_th":"-1" + } + }, + "BUFFER_PG": { + "Ethernet24|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet28|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet32|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet36|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet88|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet92|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet96|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet100|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet0|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet4|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet8|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet12|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet16|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet20|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet40|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet44|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet48|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet52|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet56|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet60|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet64|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet68|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet72|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet76|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet80|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet84|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet104|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet108|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet112|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet116|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet120|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet124|0": { + "profile" : "ingress_lossy_profile" + } + }, + + "BUFFER_QUEUE": { + "Ethernet24|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet28|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet32|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet36|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet88|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet92|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet96|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet100|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet0|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet4|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet8|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet12|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet16|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet20|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet40|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet44|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet48|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet52|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet56|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet60|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet64|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet68|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet72|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet76|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet80|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet84|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet104|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet108|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet112|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet116|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet120|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet124|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet24|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet28|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet32|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet36|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet88|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet92|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet96|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet100|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet0|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet4|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet8|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet12|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet16|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet20|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet40|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet44|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet48|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet52|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet56|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet60|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet64|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet68|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet72|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet76|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet80|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet84|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet104|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet108|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet112|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet116|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet120|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet124|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet24|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet28|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet32|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet36|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet88|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet92|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet96|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet100|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet0|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet4|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet8|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet12|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet16|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet20|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet40|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet44|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet48|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet52|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet56|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet60|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet64|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet68|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet72|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet76|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet80|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet84|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet104|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet108|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet112|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet116|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet120|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet124|5-6": { + "profile" : "egress_lossy_profile" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7050cx3-dualtor.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7050cx3-dualtor.json new file mode 100644 index 000000000000..02c3a0c6e8df --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7050cx3-dualtor.json @@ -0,0 +1,537 @@ +{ + "CABLE_LENGTH": { + "AZURE": { + "Ethernet0": "5m", + "Ethernet2": "300m", + "Ethernet4": "5m", + "Ethernet6": "300m", + "Ethernet8": "5m", + "Ethernet10": "300m", + "Ethernet12": "5m", + "Ethernet14": "300m", + "Ethernet16": "5m", + "Ethernet18": "300m", + "Ethernet20": "5m", + "Ethernet22": "300m", + "Ethernet24": "40m", + "Ethernet28": "40m", + "Ethernet32": "40m", + "Ethernet36": "40m", + "Ethernet40": "5m", + "Ethernet42": "300m", + "Ethernet44": "5m", + "Ethernet46": "300m", + "Ethernet48": "5m", + "Ethernet50": "300m", + "Ethernet52": "5m", + "Ethernet54": "300m", + "Ethernet56": "5m", + "Ethernet58": "300m", + "Ethernet60": "5m", + "Ethernet62": "300m", + "Ethernet64": "5m", + "Ethernet66": "300m", + "Ethernet68": "5m", + "Ethernet70": "300m", + "Ethernet72": "5m", + "Ethernet74": "300m", + "Ethernet76": "5m", + "Ethernet78": "300m", + "Ethernet80": "5m", + "Ethernet82": "300m", + "Ethernet84": "5m", + "Ethernet86": "300m", + "Ethernet88": "40m", + "Ethernet92": "40m", + "Ethernet96": "40m", + "Ethernet100": "40m", + "Ethernet104": "5m", + "Ethernet106": "300m", + "Ethernet108": "5m", + "Ethernet110": "300m", + "Ethernet112": "5m", + "Ethernet114": "300m", + "Ethernet116": "5m", + "Ethernet118": "300m", + "Ethernet120": "5m", + "Ethernet122": "300m", + "Ethernet124": "5m", + "Ethernet126": "300m" + } + }, + + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "32689152", + "type": "ingress", + "mode": "dynamic", + "xoff": "2058240" + }, + "egress_lossy_pool": { + "size": "24192256", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "32340992", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"0", + "static_th":"32340992" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1792", + "dynamic_th":"-1" + } + }, + "BUFFER_PG": { + "Ethernet24|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet28|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet32|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet36|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet88|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet92|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet96|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet100|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet0|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet4|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet8|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet12|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet16|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet20|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet40|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet44|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet48|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet52|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet56|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet60|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet64|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet68|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet72|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet76|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet80|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet84|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet104|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet108|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet112|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet116|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet120|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet124|0": { + "profile" : "ingress_lossy_profile" + } + }, + + + "BUFFER_QUEUE": { + "Ethernet24|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet24|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet24|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet24|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet24|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet28|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet28|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet28|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet28|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet28|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet32|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet32|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet32|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet32|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet32|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet36|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet36|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet36|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet36|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet36|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet88|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet88|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet88|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet88|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet88|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet92|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet92|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet92|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet92|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet92|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet96|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet96|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet96|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet96|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet96|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet100|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet100|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet100|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet100|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet100|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet0|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet0|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet0|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet4|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet4|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet4|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet8|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet8|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet8|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet12|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet12|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet12|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet16|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet16|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet16|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet20|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet20|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet20|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet40|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet40|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet40|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet44|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet44|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet44|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet48|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet48|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet48|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet52|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet52|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet52|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet56|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet56|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet56|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet60|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet60|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet60|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet64|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet64|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet64|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet68|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet68|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet68|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet72|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet72|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet72|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet76|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet76|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet76|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet80|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet80|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet80|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet84|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet84|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet84|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet104|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet104|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet104|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet108|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet108|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet108|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet112|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet112|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet112|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet116|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet116|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet116|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet120|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet120|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet120|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet124|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet124|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet124|5-7": { + "profile" : "egress_lossy_profile" + } + } + +} diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-dualtor-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-dualtor-remap-disabled.json new file mode 100644 index 000000000000..f6bad8e11d1b --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-dualtor-remap-disabled.json @@ -0,0 +1,937 @@ +{ + "CABLE_LENGTH": { + "AZURE": { + "Ethernet0": "5m", + "Ethernet2": "5m", + "Ethernet4": "5m", + "Ethernet6": "5m", + "Ethernet8": "5m", + "Ethernet10": "5m", + "Ethernet12": "5m", + "Ethernet14": "5m", + "Ethernet16": "5m", + "Ethernet18": "5m", + "Ethernet20": "5m", + "Ethernet22": "5m", + "Ethernet24": "5m", + "Ethernet26": "5m", + "Ethernet28": "5m", + "Ethernet30": "5m", + "Ethernet32": "5m", + "Ethernet34": "5m", + "Ethernet36": "5m", + "Ethernet38": "5m", + "Ethernet40": "5m", + "Ethernet42": "5m", + "Ethernet44": "5m", + "Ethernet46": "5m", + "Ethernet48": "40m", + "Ethernet52": "40m", + "Ethernet56": "40m", + "Ethernet60": "40m", + "Ethernet64": "40m", + "Ethernet68": "40m", + "Ethernet72": "40m", + "Ethernet76": "40m", + "Ethernet80": "5m", + "Ethernet82": "5m", + "Ethernet84": "5m", + "Ethernet86": "5m", + "Ethernet88": "5m", + "Ethernet90": "5m", + "Ethernet92": "5m", + "Ethernet94": "5m", + "Ethernet96": "5m", + "Ethernet98": "5m", + "Ethernet100": "5m", + "Ethernet102": "5m", + "Ethernet104": "5m", + "Ethernet106": "5m", + "Ethernet108": "5m", + "Ethernet110": "5m", + "Ethernet112": "5m", + "Ethernet114": "5m", + "Ethernet116": "5m", + "Ethernet118": "5m", + "Ethernet120": "5m", + "Ethernet122": "5m", + "Ethernet124": "5m", + "Ethernet126": "5m", + "Ethernet128": "5m", + "Ethernet130": "5m", + "Ethernet132": "5m", + "Ethernet134": "5m", + "Ethernet136": "5m", + "Ethernet138": "5m", + "Ethernet140": "5m", + "Ethernet142": "5m", + "Ethernet144": "5m", + "Ethernet146": "5m", + "Ethernet148": "5m", + "Ethernet150": "5m", + "Ethernet152": "5m", + "Ethernet154": "5m", + "Ethernet156": "5m", + "Ethernet158": "5m", + "Ethernet160": "5m", + "Ethernet162": "5m", + "Ethernet164": "5m", + "Ethernet166": "5m", + "Ethernet168": "5m", + "Ethernet170": "5m", + "Ethernet172": "5m", + "Ethernet174": "5m", + "Ethernet176": "5m", + "Ethernet178": "5m", + "Ethernet180": "5m", + "Ethernet182": "5m", + "Ethernet184": "5m", + "Ethernet186": "5m", + "Ethernet188": "5m", + "Ethernet190": "5m", + "Ethernet192": "5m", + "Ethernet194": "5m", + "Ethernet196": "5m", + "Ethernet198": "5m", + "Ethernet200": "5m", + "Ethernet202": "5m", + "Ethernet204": "5m", + "Ethernet206": "5m", + "Ethernet208": "5m", + "Ethernet210": "5m", + "Ethernet212": "5m", + "Ethernet214": "5m", + "Ethernet216": "5m", + "Ethernet218": "5m", + "Ethernet220": "5m", + "Ethernet222": "5m", + "Ethernet224": "5m", + "Ethernet226": "5m", + "Ethernet228": "5m", + "Ethernet230": "5m", + "Ethernet232": "5m", + "Ethernet234": "5m", + "Ethernet236": "5m", + "Ethernet238": "5m", + "Ethernet240": "5m", + "Ethernet242": "5m", + "Ethernet244": "5m", + "Ethernet246": "5m", + "Ethernet248": "5m", + "Ethernet250": "5m", + "Ethernet252": "5m", + "Ethernet254": "5m", + "Ethernet256": "5m", + "Ethernet260": "5m" + } + }, + + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "33329088", + "type": "ingress", + "mode": "dynamic", + "xoff": "7827456" + }, + "egress_lossy_pool": { + "size": "26663272", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "42349632", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "static_th":"44302336" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"0", + "static_th":"42349632" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1664", + "dynamic_th":"-1" + } + }, + "BUFFER_PG": { + "Ethernet48|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet52|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet56|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet60|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet64|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet68|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet72|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet76|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet0|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet4|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet8|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet12|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet16|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet20|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet24|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet28|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet32|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet36|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet40|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet44|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet80|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet84|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet88|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet92|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet96|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet100|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet104|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet108|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet112|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet116|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet120|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet124|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet128|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet132|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet136|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet140|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet144|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet148|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet152|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet156|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet160|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet164|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet168|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet172|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet176|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet180|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet184|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet188|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet192|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet196|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet200|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet204|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet208|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet212|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet216|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet220|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet224|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet228|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet232|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet236|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet240|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet244|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet248|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet252|0": { + "profile" : "ingress_lossy_profile" + } + }, + + "BUFFER_QUEUE": { + "Ethernet48|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet52|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet56|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet60|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet64|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet68|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet72|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet76|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet0|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet4|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet8|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet12|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet16|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet20|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet24|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet28|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet32|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet36|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet40|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet44|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet80|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet84|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet88|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet92|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet96|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet100|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet104|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet108|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet112|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet116|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet120|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet124|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet128|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet132|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet136|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet140|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet144|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet148|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet152|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet156|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet160|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet164|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet168|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet172|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet176|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet180|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet184|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet188|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet192|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet196|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet200|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet204|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet208|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet212|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet216|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet220|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet224|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet228|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet232|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet236|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet240|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet244|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet248|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet252|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet48|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet52|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet56|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet60|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet64|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet68|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet72|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet76|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet0|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet4|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet8|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet12|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet16|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet20|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet24|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet28|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet32|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet36|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet40|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet44|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet80|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet84|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet88|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet92|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet96|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet100|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet104|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet108|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet112|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet116|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet120|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet124|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet128|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet132|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet136|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet140|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet144|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet148|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet152|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet156|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet160|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet164|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet168|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet172|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet176|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet180|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet184|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet188|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet192|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet196|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet200|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet204|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet208|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet212|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet216|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet220|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet224|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet228|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet232|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet236|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet240|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet244|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet248|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet252|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet48|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet52|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet56|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet60|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet64|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet68|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet72|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet76|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet0|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet4|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet8|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet12|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet16|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet20|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet24|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet28|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet32|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet36|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet40|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet44|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet80|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet84|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet88|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet92|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet96|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet100|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet104|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet108|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet112|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet116|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet120|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet124|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet128|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet132|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet136|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet140|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet144|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet148|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet152|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet156|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet160|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet164|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet168|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet172|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet176|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet180|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet184|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet188|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet192|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet196|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet200|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet204|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet208|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet212|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet216|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet220|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet224|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet228|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet232|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet236|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet240|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet244|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet248|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet252|5-6": { + "profile" : "egress_lossy_profile" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-dualtor.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-dualtor.json new file mode 100644 index 000000000000..32fbfe24370a --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-dualtor.json @@ -0,0 +1,987 @@ +{ + "CABLE_LENGTH": { + "AZURE": { + "Ethernet0": "5m", + "Ethernet2": "5m", + "Ethernet4": "5m", + "Ethernet6": "5m", + "Ethernet8": "5m", + "Ethernet10": "5m", + "Ethernet12": "5m", + "Ethernet14": "5m", + "Ethernet16": "5m", + "Ethernet18": "5m", + "Ethernet20": "5m", + "Ethernet22": "5m", + "Ethernet24": "5m", + "Ethernet26": "5m", + "Ethernet28": "5m", + "Ethernet30": "5m", + "Ethernet32": "5m", + "Ethernet34": "5m", + "Ethernet36": "5m", + "Ethernet38": "5m", + "Ethernet40": "5m", + "Ethernet42": "5m", + "Ethernet44": "5m", + "Ethernet46": "5m", + "Ethernet48": "40m", + "Ethernet52": "40m", + "Ethernet56": "40m", + "Ethernet60": "40m", + "Ethernet64": "40m", + "Ethernet68": "40m", + "Ethernet72": "40m", + "Ethernet76": "40m", + "Ethernet80": "5m", + "Ethernet82": "5m", + "Ethernet84": "5m", + "Ethernet86": "5m", + "Ethernet88": "5m", + "Ethernet90": "5m", + "Ethernet92": "5m", + "Ethernet94": "5m", + "Ethernet96": "5m", + "Ethernet98": "5m", + "Ethernet100": "5m", + "Ethernet102": "5m", + "Ethernet104": "5m", + "Ethernet106": "5m", + "Ethernet108": "5m", + "Ethernet110": "5m", + "Ethernet112": "5m", + "Ethernet114": "5m", + "Ethernet116": "5m", + "Ethernet118": "5m", + "Ethernet120": "5m", + "Ethernet122": "5m", + "Ethernet124": "5m", + "Ethernet126": "5m", + "Ethernet128": "5m", + "Ethernet130": "5m", + "Ethernet132": "5m", + "Ethernet134": "5m", + "Ethernet136": "5m", + "Ethernet138": "5m", + "Ethernet140": "5m", + "Ethernet142": "5m", + "Ethernet144": "5m", + "Ethernet146": "5m", + "Ethernet148": "5m", + "Ethernet150": "5m", + "Ethernet152": "5m", + "Ethernet154": "5m", + "Ethernet156": "5m", + "Ethernet158": "5m", + "Ethernet160": "5m", + "Ethernet162": "5m", + "Ethernet164": "5m", + "Ethernet166": "5m", + "Ethernet168": "5m", + "Ethernet170": "5m", + "Ethernet172": "5m", + "Ethernet174": "5m", + "Ethernet176": "5m", + "Ethernet178": "5m", + "Ethernet180": "5m", + "Ethernet182": "5m", + "Ethernet184": "5m", + "Ethernet186": "5m", + "Ethernet188": "5m", + "Ethernet190": "5m", + "Ethernet192": "5m", + "Ethernet194": "5m", + "Ethernet196": "5m", + "Ethernet198": "5m", + "Ethernet200": "5m", + "Ethernet202": "5m", + "Ethernet204": "5m", + "Ethernet206": "5m", + "Ethernet208": "5m", + "Ethernet210": "5m", + "Ethernet212": "5m", + "Ethernet214": "5m", + "Ethernet216": "5m", + "Ethernet218": "5m", + "Ethernet220": "5m", + "Ethernet222": "5m", + "Ethernet224": "5m", + "Ethernet226": "5m", + "Ethernet228": "5m", + "Ethernet230": "5m", + "Ethernet232": "5m", + "Ethernet234": "5m", + "Ethernet236": "5m", + "Ethernet238": "5m", + "Ethernet240": "5m", + "Ethernet242": "5m", + "Ethernet244": "5m", + "Ethernet246": "5m", + "Ethernet248": "5m", + "Ethernet250": "5m", + "Ethernet252": "5m", + "Ethernet254": "5m", + "Ethernet256": "5m", + "Ethernet260": "5m" + } + }, + + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "33329088", + "type": "ingress", + "mode": "dynamic", + "xoff": "7827456" + }, + "egress_lossy_pool": { + "size": "26663272", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "42349632", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "static_th":"44302336" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"0", + "static_th":"42349632" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1664", + "dynamic_th":"-1" + } + }, + "BUFFER_PG": { + "Ethernet48|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet52|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet56|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet60|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet64|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet68|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet72|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet76|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet0|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet4|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet8|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet12|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet16|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet20|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet24|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet28|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet32|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet36|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet40|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet44|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet80|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet84|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet88|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet92|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet96|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet100|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet104|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet108|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet112|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet116|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet120|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet124|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet128|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet132|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet136|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet140|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet144|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet148|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet152|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet156|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet160|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet164|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet168|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet172|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet176|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet180|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet184|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet188|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet192|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet196|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet200|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet204|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet208|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet212|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet216|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet220|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet224|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet228|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet232|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet236|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet240|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet244|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet248|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet252|0": { + "profile" : "ingress_lossy_profile" + } + }, + + + "BUFFER_QUEUE": { + "Ethernet48|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet48|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet48|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet48|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet48|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet52|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet52|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet52|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet52|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet52|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet56|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet56|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet56|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet56|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet56|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet60|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet60|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet60|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet60|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet60|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet64|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet64|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet64|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet64|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet64|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet68|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet68|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet68|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet68|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet68|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet72|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet72|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet72|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet72|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet72|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet76|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet76|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet76|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet76|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet76|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet0|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet0|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet0|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet4|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet4|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet4|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet8|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet8|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet8|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet12|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet12|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet12|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet16|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet16|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet16|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet20|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet20|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet20|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet24|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet24|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet24|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet28|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet28|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet28|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet32|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet32|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet32|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet36|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet36|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet36|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet40|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet40|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet40|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet44|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet44|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet44|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet80|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet80|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet80|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet84|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet84|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet84|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet88|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet88|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet88|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet92|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet92|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet92|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet96|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet96|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet96|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet100|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet100|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet100|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet104|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet104|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet104|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet108|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet108|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet108|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet112|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet112|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet112|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet116|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet116|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet116|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet120|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet120|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet120|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet124|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet124|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet124|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet128|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet128|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet128|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet132|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet132|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet132|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet136|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet136|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet136|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet140|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet140|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet140|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet144|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet144|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet144|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet148|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet148|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet148|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet152|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet152|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet152|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet156|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet156|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet156|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet160|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet160|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet160|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet164|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet164|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet164|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet168|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet168|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet168|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet172|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet172|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet172|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet176|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet176|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet176|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet180|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet180|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet180|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet184|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet184|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet184|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet188|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet188|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet188|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet192|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet192|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet192|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet196|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet196|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet196|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet200|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet200|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet200|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet204|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet204|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet204|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet208|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet208|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet208|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet212|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet212|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet212|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet216|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet216|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet216|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet220|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet220|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet220|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet224|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet224|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet224|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet228|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet228|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet228|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet232|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet232|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet232|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet236|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet236|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet236|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet240|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet240|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet240|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet244|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet244|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet244|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet248|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet248|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet248|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet252|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet252|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet252|5-7": { + "profile" : "egress_lossy_profile" + } + } + +} diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1-remap-disabled.json new file mode 100644 index 000000000000..9306b98e8134 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1-remap-disabled.json @@ -0,0 +1,449 @@ +{ + "CABLE_LENGTH": { + "AZURE": { + "Ethernet0": "300m", + "Ethernet4": "300m", + "Ethernet8": "300m", + "Ethernet12": "300m", + "Ethernet16": "300m", + "Ethernet20": "300m", + "Ethernet24": "300m", + "Ethernet28": "300m", + "Ethernet32": "300m", + "Ethernet36": "300m", + "Ethernet40": "300m", + "Ethernet44": "300m", + "Ethernet48": "300m", + "Ethernet52": "300m", + "Ethernet56": "300m", + "Ethernet60": "300m", + "Ethernet64": "300m", + "Ethernet68": "300m", + "Ethernet72": "300m", + "Ethernet76": "300m", + "Ethernet80": "300m", + "Ethernet84": "300m", + "Ethernet88": "300m", + "Ethernet92": "300m", + "Ethernet96": "300m", + "Ethernet100": "300m", + "Ethernet104": "300m", + "Ethernet108": "300m", + "Ethernet112": "300m", + "Ethernet116": "300m", + "Ethernet120": "300m", + "Ethernet124": "300m", + "Ethernet128": "300m", + "Ethernet132": "300m", + "Ethernet136": "40m", + "Ethernet140": "300m", + "Ethernet144": "40m", + "Ethernet148": "40m", + "Ethernet152": "40m", + "Ethernet156": "40m", + "Ethernet160": "300m", + "Ethernet164": "300m", + "Ethernet168": "40m", + "Ethernet172": "300m", + "Ethernet176": "40m", + "Ethernet180": "40m", + "Ethernet184": "40m", + "Ethernet188": "40m", + "Ethernet192": "300m", + "Ethernet196": "300m", + "Ethernet200": "40m", + "Ethernet204": "300m", + "Ethernet208": "40m", + "Ethernet212": "40m", + "Ethernet216": "40m", + "Ethernet220": "40m", + "Ethernet224": "300m", + "Ethernet228": "300m", + "Ethernet232": "40m", + "Ethernet236": "300m", + "Ethernet240": "40m", + "Ethernet244": "40m", + "Ethernet248": "40m", + "Ethernet252": "40m", + "Ethernet256": "300m", + "Ethernet260": "300m" + } + }, + + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "33582016", + "type": "ingress", + "mode": "dynamic", + "xoff": "8965632" + }, + "egress_lossy_pool": { + "size": "26866112", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "43481152", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "static_th":"44302336" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"0", + "static_th":"43481152" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1664", + "dynamic_th":"-1" + } + }, + "BUFFER_PG": { + "Ethernet136|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet0|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet4|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet144|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet148|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet16|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet20|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet152|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet156|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet64|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet68|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet168|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet176|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet80|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet84|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet180|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet184|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet188|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet200|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet208|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet212|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet216|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet220|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet232|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet240|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet244|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet248|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet252|0": { + "profile" : "ingress_lossy_profile" + } + }, + + "BUFFER_QUEUE": { + "Ethernet136|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet0|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet4|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet144|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet148|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet16|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet20|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet152|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet156|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet64|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet68|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet168|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet176|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet80|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet84|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet180|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet184|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet188|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet200|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet208|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet212|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet216|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet220|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet232|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet240|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet244|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet248|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet252|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet136|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet0|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet4|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet144|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet148|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet16|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet20|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet152|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet156|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet64|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet68|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet168|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet176|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet80|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet84|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet180|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet184|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet188|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet200|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet208|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet212|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet216|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet220|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet232|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet240|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet244|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet248|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet252|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet136|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet0|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet4|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet144|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet148|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet16|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet20|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet152|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet156|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet64|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet68|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet168|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet176|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet80|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet84|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet180|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet184|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet188|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet200|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet208|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet212|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet216|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet220|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet232|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet240|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet244|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet248|5-6": { + "profile" : "egress_lossy_profile" + }, + "Ethernet252|5-6": { + "profile" : "egress_lossy_profile" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json new file mode 100644 index 000000000000..2491d376c771 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json @@ -0,0 +1,570 @@ +{ + "CABLE_LENGTH": { + "AZURE": { + "Ethernet0": "300m", + "Ethernet4": "300m", + "Ethernet8": "300m", + "Ethernet12": "300m", + "Ethernet16": "300m", + "Ethernet20": "300m", + "Ethernet24": "300m", + "Ethernet28": "300m", + "Ethernet32": "300m", + "Ethernet36": "300m", + "Ethernet40": "300m", + "Ethernet44": "300m", + "Ethernet48": "300m", + "Ethernet52": "300m", + "Ethernet56": "300m", + "Ethernet60": "300m", + "Ethernet64": "300m", + "Ethernet68": "300m", + "Ethernet72": "300m", + "Ethernet76": "300m", + "Ethernet80": "300m", + "Ethernet84": "300m", + "Ethernet88": "300m", + "Ethernet92": "300m", + "Ethernet96": "300m", + "Ethernet100": "300m", + "Ethernet104": "300m", + "Ethernet108": "300m", + "Ethernet112": "300m", + "Ethernet116": "300m", + "Ethernet120": "300m", + "Ethernet124": "300m", + "Ethernet128": "300m", + "Ethernet132": "300m", + "Ethernet136": "40m", + "Ethernet140": "300m", + "Ethernet144": "40m", + "Ethernet148": "40m", + "Ethernet152": "40m", + "Ethernet156": "40m", + "Ethernet160": "300m", + "Ethernet164": "300m", + "Ethernet168": "40m", + "Ethernet172": "300m", + "Ethernet176": "40m", + "Ethernet180": "40m", + "Ethernet184": "40m", + "Ethernet188": "40m", + "Ethernet192": "300m", + "Ethernet196": "300m", + "Ethernet200": "40m", + "Ethernet204": "300m", + "Ethernet208": "40m", + "Ethernet212": "40m", + "Ethernet216": "40m", + "Ethernet220": "40m", + "Ethernet224": "300m", + "Ethernet228": "300m", + "Ethernet232": "40m", + "Ethernet236": "300m", + "Ethernet240": "40m", + "Ethernet244": "40m", + "Ethernet248": "40m", + "Ethernet252": "40m", + "Ethernet256": "300m", + "Ethernet260": "300m" + } + }, + + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "33582016", + "type": "ingress", + "mode": "dynamic", + "xoff": "8965632" + }, + "egress_lossy_pool": { + "size": "26866112", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "43481152", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "static_th":"44302336" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"0", + "static_th":"43481152" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1664", + "dynamic_th":"-1" + } + }, + "BUFFER_PG": { + "Ethernet136|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet0|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet4|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet144|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet148|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet16|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet20|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet152|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet156|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet64|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet68|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet168|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet176|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet80|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet84|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet180|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet184|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet188|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet200|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet208|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet212|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet216|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet220|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet232|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet240|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet244|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet248|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet252|0": { + "profile" : "ingress_lossy_profile" + } + }, + + "BUFFER_QUEUE": { + "Ethernet136|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet136|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet136|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet136|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet136|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet0|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet0|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet0|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet4|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet4|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet4|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet144|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet144|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet144|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet144|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet144|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet148|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet148|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet148|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet148|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet148|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet16|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet16|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet16|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet20|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet20|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet20|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet152|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet152|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet152|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet152|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet152|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet156|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet156|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet156|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet156|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet156|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet64|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet64|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet64|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet68|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet68|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet68|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet168|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet168|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet168|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet168|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet168|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet176|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet176|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet176|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet176|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet176|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet80|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet80|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet80|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet84|0-2": { + "profile" : "egress_lossy_profile" + }, + "Ethernet84|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet84|5-7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet180|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet180|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet180|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet180|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet180|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet184|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet184|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet184|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet184|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet184|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet188|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet188|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet188|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet188|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet188|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet200|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet200|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet200|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet200|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet200|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet208|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet208|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet208|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet208|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet208|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet212|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet212|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet212|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet212|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet212|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet216|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet216|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet216|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet216|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet216|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet220|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet220|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet220|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet220|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet220|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet232|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet232|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet232|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet232|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet232|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet240|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet240|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet240|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet240|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet240|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet244|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet244|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet244|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet244|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet244|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet248|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet248|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet248|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet248|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet248|7": { + "profile" : "egress_lossy_profile" + }, + "Ethernet252|0-1": { + "profile" : "egress_lossy_profile" + }, + "Ethernet252|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet252|5": { + "profile" : "egress_lossy_profile" + }, + "Ethernet252|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet252|7": { + "profile" : "egress_lossy_profile" + } + } + +} diff --git a/src/sonic-config-engine/tests/test_j2files.py b/src/sonic-config-engine/tests/test_j2files.py index 8bcb523c2799..ba39e15450c7 100644 --- a/src/sonic-config-engine/tests/test_j2files.py +++ b/src/sonic-config-engine/tests/test_j2files.py @@ -395,6 +395,29 @@ def test_buffers_mellanox2410_render_template(self): def test_buffers_mellanox2410_dynamic_render_template(self): self._test_buffers_render_template('mellanox', 'x86_64-mlnx_msn2410-r0', 'ACS-MSN2410', 'sample-mellanox-2410-t1-minigraph.xml', 'buffers_dynamic.json.j2', 'buffers-mellanox2410-dynamic.json') + def test_extra_lossless_buffer_for_tunnel_remapping(self): + if utils.PYvX_DIR != 'py3': + # Skip on python2 as the change will not be backported to previous version + return + + TEST_DATA = [ + # (vendor, platform, sku, minigraph, buffer_template, sample_output ) + ('arista', 'x86_64-arista_7050cx3_32s', 'Arista-7050CX3-32S-D48C8', 'sample-arista-7050cx3-dualtor-minigraph.xml', 'buffers.json.j2', 'buffer-arista7050cx3-dualtor.json'), + ('arista', 'x86_64-arista_7050cx3_32s', 'Arista-7050CX3-32S-D48C8', 'sample-arista-7050cx3-dualtor-minigraph-remap-disabled.xml', 'buffers.json.j2', 'buffer-arista7050cx3-dualtor-remap-disabled.json'), + ('arista', 'x86_64-arista_7260cx3_64', 'Arista-7260CX3-D108C8', 'sample-arista-7260-dualtor-minigraph.xml', 'buffers.json.j2', 'buffer-arista7260-dualtor.json'), + ('arista', 'x86_64-arista_7260cx3_64', 'Arista-7260CX3-D108C8', 'sample-arista-7260-dualtor-minigraph-remap-disabled.xml', 'buffers.json.j2', 'buffer-arista7260-dualtor-remap-disabled.json'), + ('arista', 'x86_64-arista_7260cx3_64', 'Arista-7260CX3-C64', 'sample-arista-7260-t1-minigraph.xml', 'buffers.json.j2', 'buffer-arista7260-t1.json'), + ('arista', 'x86_64-arista_7260cx3_64', 'Arista-7260CX3-C64', 'sample-arista-7260-t1-minigraph-remap-disabled.xml', 'buffers.json.j2', 'buffer-arista7260-t1-remap-disabled.json') + ] + + for test_data in TEST_DATA: + self._test_buffers_render_template(vendor=test_data[0], + platform=test_data[1], + sku=test_data[2], + minigraph=test_data[3], + buffer_template=test_data[4], + expected=test_data[5]) + def test_ipinip_multi_asic(self): ipinip_file = os.path.join(self.test_dir, '..', '..', '..', 'dockers', 'docker-orchagent', 'ipinip.json.j2') argument = '-m ' + self.multi_asic_minigraph + ' -p ' + self.multi_asic_port_config + ' -t ' + ipinip_file + ' -n asic0 ' + ' > ' + self.output_file From d9f8af8e3185d6e0743265ac59ef8c9ce72ed090 Mon Sep 17 00:00:00 2001 From: Andriy Yurkiv <70649192+ayurkiv-nvda@users.noreply.github.com> Date: Sun, 19 Jun 2022 14:16:09 +0300 Subject: [PATCH 044/259] [Mellanox] Install MFT package on platform monitor (pmon) container (#10932) - Why I did it Need to execute mlxreg inside pmon docker - How I did it Add MFT package to pmon Makefile - How to verify it Install image, go to pmon : docker exec -it pmon bash, exec mlxreg Verifiy warm, fast and cold reboot while MFT is being called in pmon constantly Signed-off-by: Andriy Yurkiv --- rules/docker-platform-monitor.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/docker-platform-monitor.mk b/rules/docker-platform-monitor.mk index bcfd6000fa00..cb9be990e61b 100644 --- a/rules/docker-platform-monitor.mk +++ b/rules/docker-platform-monitor.mk @@ -6,7 +6,7 @@ DOCKER_PLATFORM_MONITOR_DBG = $(DOCKER_PLATFORM_MONITOR_STEM)-$(DBG_IMAGE_MARK). $(DOCKER_PLATFORM_MONITOR)_PATH = $(DOCKERS_PATH)/$(DOCKER_PLATFORM_MONITOR_STEM) -$(DOCKER_PLATFORM_MONITOR)_DEPENDS += $(LIBSENSORS) $(LM_SENSORS) $(FANCONTROL) $(SENSORD) $(LIBSWSSCOMMON) $(PYTHON3_SWSSCOMMON) $(ETHTOOL) +$(DOCKER_PLATFORM_MONITOR)_DEPENDS += $(LIBSENSORS) $(LM_SENSORS) $(FANCONTROL) $(SENSORD) $(LIBSWSSCOMMON) $(PYTHON3_SWSSCOMMON) $(ETHTOOL) $(MFT) $(DOCKER_PLATFORM_MONITOR)_PYTHON_WHEELS += $(SONIC_PLATFORM_COMMON_PY3) From e015232ebf0c12204446254bff368516b5597072 Mon Sep 17 00:00:00 2001 From: Lior Avramov <73036155+liorghub@users.noreply.github.com> Date: Mon, 20 Jun 2022 21:45:08 +0300 Subject: [PATCH 045/259] Add IP interface loopback action related content to YANG models. (#11012) *Add IP interface loopback action related content to the required YANG models. --- src/sonic-yang-models/doc/Configuration.md | 29 +++++++++----- .../tests/files/sample_config_db.json | 12 ++++-- .../yang_model_tests/tests/interface.json | 5 +++ .../yang_model_tests/tests/portchannel.json | 5 +++ .../tests/yang_model_tests/tests/vlan.json | 5 +++ .../tests/vlan_sub_interface.json | 5 +++ .../tests_config/interface.json | 28 +++++++++++++ .../tests_config/portchannel.json | 40 +++++++++++++++++++ .../yang_model_tests/tests_config/vlan.json | 12 ++++++ .../tests_config/vlan_sub_interface.json | 27 +++++++++++++ .../yang-models/sonic-interface.yang | 6 +++ .../yang-models/sonic-portchannel.yang | 5 +++ .../yang-models/sonic-vlan-sub-interface.yang | 5 +++ .../yang-models/sonic-vlan.yang | 5 +++ .../yang-templates/sonic-types.yang.j2 | 6 +++ 15 files changed, 181 insertions(+), 14 deletions(-) diff --git a/src/sonic-yang-models/doc/Configuration.md b/src/sonic-yang-models/doc/Configuration.md index 3d5bf91db542..bf254f5da538 100644 --- a/src/sonic-yang-models/doc/Configuration.md +++ b/src/sonic-yang-models/doc/Configuration.md @@ -707,12 +707,13 @@ This kind of profiles will be handled by buffer manager and won't be applied to ### Data Plane L3 Interfaces -IP configuration for data plane are defined in **INTERFACE**, -**PORTCHANNEL_INTERFACE**, and **VLAN_INTERFACE** table. The objects -in all three tables have the interface (could be physical port, port -channel, or vlan) that IP address is attached to as first-level key, and -IP prefix as second-level key. IP interface objects don't have any -attributes. +IP configuration for data plane are defined in **INTERFACE**, **VLAN_SUB_INTERFACE**, +**PORTCHANNEL_INTERFACE** and **VLAN_INTERFACE** table. The objects +in all four tables have the interface (could be physical port, port +channel, vlan or vlan sub interface) that IP address is attached to as first-level key, and +IP prefix as second-level key. IP interface address objects don't have any attributes. +IP interface attributes, resides in those tables as well, key is the interface name +and value is a list of field-values representing the interface attributes, e.g. loopback action. ``` { @@ -720,21 +721,29 @@ attributes. "Ethernet0|10.0.0.0/31": {}, "Ethernet4|10.0.0.2/31": {}, "Ethernet8|10.0.0.4/31": {} - ... + "Ethernet8": { + "loopback_action": "drop" + } }, - + "PORTCHANNEL_INTERFACE": { "PortChannel01|10.0.0.56/31": {}, "PortChannel01|FC00::71/126": {}, "PortChannel02|10.0.0.58/31": {}, "PortChannel02|FC00::75/126": {} - ... }, + "VLAN_INTERFACE": { "Vlan1000|192.168.0.1/27": {} + }, + +"VLAN_SUB_INTERFACE": { + "Ethernet4.1|10.0.0.2/31": {}, + "Ethernet4.1": { + "loopback_action": "drop" + } } } - ``` diff --git a/src/sonic-yang-models/tests/files/sample_config_db.json b/src/sonic-yang-models/tests/files/sample_config_db.json index 9be6d29e8922..720c3c652325 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -117,7 +117,8 @@ }, "PORTCHANNEL_INTERFACE": { "PortChannel0003": { - "nat_zone": "1" + "nat_zone": "1", + "loopback_action": "drop" }, "PortChannel0004": {"vrf_name": "Vrf_blue"}, "PortChannel42|10.1.0.1/31": {}, @@ -132,7 +133,8 @@ }, "VLAN_INTERFACE": { "Vlan111": { - "nat_zone": "0" + "nat_zone": "0", + "loopback_action": "forward" }, "Vlan777": {}, "Vlan111|2a04:5555:45:6709::1/64": { @@ -925,7 +927,8 @@ "Ethernet14": {}, "Ethernet16": {}, "Ethernet18": { - "nat_zone": "1" + "nat_zone": "1", + "loopback_action": "forward" }, "Ethernet112|2a04:5555:40:a709::2/126": { "scope": "global", @@ -962,7 +965,8 @@ }, "VLAN_SUB_INTERFACE": { "Ethernet12.10": { - "admin_status": "up" + "admin_status": "up", + "loopback_action": "drop" }, "Ethernet12.10|10.0.1.56/31": {}, "Ethernet12.10|fc00::1:71/126": {}, diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/interface.json b/src/sonic-yang-models/tests/yang_model_tests/tests/interface.json index 1c93238c1889..ed561f25bc2a 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/interface.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/interface.json @@ -17,5 +17,10 @@ }, "INTERFACE_VALID_NAT_ZONE_RANGE": { "desc": "Configure valid value for nat zone." + }, + "INTERFACE_INVALID_LOOPBACK_ACTION": { + "desc": "INCORRECT LOOPBACK ACTION IN INTERFACE TABLE.", + "eStrKey" : "Pattern", + "eStr": ["drop|forward"] } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/portchannel.json b/src/sonic-yang-models/tests/yang_model_tests/tests/portchannel.json index 693b0fd47b75..e69074bdfbf6 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/portchannel.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/portchannel.json @@ -58,5 +58,10 @@ }, "PORTCHANNEL_INTERFACE_VALID_NAT_ZONE_RANGE": { "desc": "Configure valid value for nat zone." + }, + "PORTCHANNEL_INTERFACE_INVALID_LOOPBACK_ACTION": { + "desc": "INCORRECT LOOPBACK ACTION IN PORTCHANNEL_INTERFACE TABLE.", + "eStrKey" : "Pattern", + "eStr": ["drop|forward"] } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/vlan.json b/src/sonic-yang-models/tests/yang_model_tests/tests/vlan.json index a872784ff236..cf5fccf02bc0 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/vlan.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/vlan.json @@ -74,5 +74,10 @@ "VLAN_INTERFACE_INVALID_PROXY_ARP": { "desc": "VLAN_INTERFACE with invalid proxy_arp value", "eStrKey": "Pattern" + }, + "VLAN_INTERFACE_INVALID_LOOPBACK_ACTION": { + "desc": "INCORRECT LOOPBACK ACTION IN VLAN_INTERFACE TABLE.", + "eStrKey" : "Pattern", + "eStr": ["drop|forward"] } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/vlan_sub_interface.json b/src/sonic-yang-models/tests/yang_model_tests/tests/vlan_sub_interface.json index d112587307e4..b91c8a94f386 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/vlan_sub_interface.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/vlan_sub_interface.json @@ -50,5 +50,10 @@ "VLAN_SUB_INTERFACE_INVALID_NAME_TEST": { "desc": "Configure invalid vlan sub interface name with no separator.", "eStrKey": "Pattern" + }, + "VLAN_SUB_INTERFACE_INVALID_LOOPBACK_ACTION": { + "desc": "INCORRECT LOOPBACK ACTION IN VLAN_SUB_INTERFACE TABLE.", + "eStrKey" : "Pattern", + "eStr": ["drop|forward"] } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/interface.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/interface.json index db4763870d1d..2f20f8475b64 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/interface.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/interface.json @@ -181,5 +181,33 @@ ] } } + }, + "INTERFACE_INVALID_LOOPBACK_ACTION": { + "sonic-interface:sonic-interface": { + "sonic-interface:INTERFACE": { + "INTERFACE_LIST": [ + { + "name": "Ethernet8", + "loopback_action": "trap" + } + ] + } + }, + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "admin_status": "up", + "alias": "eth8", + "description": "Ethernet8", + "fec": "rs", + "lanes": "65", + "mtu": 9000, + "name": "Ethernet8", + "speed": 25000 + } + ] + } + } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/portchannel.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/portchannel.json index d9a54b885958..6c26e9ce83e6 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/portchannel.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/portchannel.json @@ -374,5 +374,45 @@ ] } } + }, + "PORTCHANNEL_INTERFACE_INVALID_LOOPBACK_ACTION": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "admin_status": "up", + "alias": "eth0", + "description": "Ethernet0", + "lanes": "65", + "mtu": 9000, + "name": "Ethernet0", + "speed": 25000 + } + ] + } + }, + "sonic-portchannel:sonic-portchannel": { + "sonic-portchannel:PORTCHANNEL": { + "PORTCHANNEL_LIST": [ + { + "admin_status": "up", + "members": [ + "Ethernet0" + ], + "min_links": "1", + "mtu": "9100", + "name": "PortChannel0001" + } + ] + }, + "sonic-portchannel:PORTCHANNEL_INTERFACE": { + "PORTCHANNEL_INTERFACE_LIST": [ + { + "name": "PortChannel0001", + "loopback_action": "trap" + } + ] + } + } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/vlan.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/vlan.json index 2ae87a7b822e..c5934bc39c93 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/vlan.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/vlan.json @@ -614,5 +614,17 @@ ] } } + }, + "VLAN_INTERFACE_INVALID_LOOPBACK_ACTION": { + "sonic-vlan:sonic-vlan": { + "sonic-vlan:VLAN_INTERFACE": { + "VLAN_INTERFACE_LIST": [ + { + "name": "Vlan1000", + "loopback_action": "trap" + } + ] + } + } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/vlan_sub_interface.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/vlan_sub_interface.json index 860de64ba663..b249510f4370 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/vlan_sub_interface.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/vlan_sub_interface.json @@ -518,5 +518,32 @@ ] } } + }, + "VLAN_SUB_INTERFACE_INVALID_LOOPBACK_ACTION": { + "sonic-vlan-sub-interface:sonic-vlan-sub-interface": { + "sonic-vlan-sub-interface:VLAN_SUB_INTERFACE": { + "VLAN_SUB_INTERFACE_LIST": [ + { + "name": "Ethernet8.10", + "loopback_action": "trap" + } + ] + } + }, + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "name": "Ethernet8", + "admin_status": "up", + "alias": "Ethernet8/1", + "description": "Ethernet8", + "lanes": "45,46,47,48", + "mtu": 9000, + "speed": 100000 + } + ] + } + } } } diff --git a/src/sonic-yang-models/yang-models/sonic-interface.yang b/src/sonic-yang-models/yang-models/sonic-interface.yang index 746dbba46b7b..74f241fed0d4 100644 --- a/src/sonic-yang-models/yang-models/sonic-interface.yang +++ b/src/sonic-yang-models/yang-models/sonic-interface.yang @@ -66,6 +66,7 @@ module sonic-interface { } default "0"; } + leaf mpls { description "Enable/disable MPLS routing for the interface"; type enumeration { @@ -73,6 +74,11 @@ module sonic-interface { enum disable; } } + + leaf loopback_action { + description "Packet action when a packet ingress and gets routed on the same IP interface"; + type stypes:loopback_action; + } } /* end of INTERFACE_LIST */ diff --git a/src/sonic-yang-models/yang-models/sonic-portchannel.yang b/src/sonic-yang-models/yang-models/sonic-portchannel.yang index 083a413527ec..27df0625dfee 100644 --- a/src/sonic-yang-models/yang-models/sonic-portchannel.yang +++ b/src/sonic-yang-models/yang-models/sonic-portchannel.yang @@ -167,6 +167,11 @@ module sonic-portchannel { } } + leaf loopback_action { + description "Packet action when a packet ingress and gets routed on the same IP interface"; + type stypes:loopback_action; + } + leaf nat_zone { description "NAT Zone for the portchannel interface"; type uint8 { diff --git a/src/sonic-yang-models/yang-models/sonic-vlan-sub-interface.yang b/src/sonic-yang-models/yang-models/sonic-vlan-sub-interface.yang index 212fb5533c3b..bc13113ef53e 100644 --- a/src/sonic-yang-models/yang-models/sonic-vlan-sub-interface.yang +++ b/src/sonic-yang-models/yang-models/sonic-vlan-sub-interface.yang @@ -65,6 +65,11 @@ module sonic-vlan-sub-interface { path "/vrf:sonic-vrf/vrf:VRF/vrf:VRF_LIST/vrf:name"; } } + + leaf loopback_action { + description "Packet action when a packet ingress and gets routed on the same IP interface"; + type stypes:loopback_action; + } } list VLAN_SUB_INTERFACE_IPPREFIX_LIST { diff --git a/src/sonic-yang-models/yang-models/sonic-vlan.yang b/src/sonic-yang-models/yang-models/sonic-vlan.yang index 960f4b44c0d0..48ec466b825b 100644 --- a/src/sonic-yang-models/yang-models/sonic-vlan.yang +++ b/src/sonic-yang-models/yang-models/sonic-vlan.yang @@ -101,6 +101,11 @@ module sonic-vlan { pattern "enabled|disabled"; } } + + leaf loopback_action { + description "Packet action when a packet ingress and gets routed on the same IP interface"; + type stypes:loopback_action; + } } /* end of VLAN_INTERFACE_LIST */ diff --git a/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 b/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 index 29be032e8876..6d8bd198d216 100644 --- a/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 +++ b/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 @@ -117,6 +117,12 @@ module sonic-types { } } + typedef loopback_action { + type string { + pattern "drop|forward"; + } + } + typedef admin_mode { type enumeration { enum enabled; From 379d77af4226dded20c4e27d68747d440a3fa25f Mon Sep 17 00:00:00 2001 From: Sudharsan Dhamal Gopalarathnam Date: Tue, 21 Jun 2022 17:11:41 -0700 Subject: [PATCH 046/259] [lldp]Fix lldp spawned after reboot when disabled (#11080) - Why I did it When LLDP is disabled through feature command, it gets spawned after reboot. - How I did it In syncd.sh check if the service is enabled before spawning automatically during cold reboot. - How to verify it Disable lldp feature. Perform cold reboot and verify its not spawned. --- files/scripts/syncd.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/files/scripts/syncd.sh b/files/scripts/syncd.sh index 065574e501bf..10535a8ff448 100755 --- a/files/scripts/syncd.sh +++ b/files/scripts/syncd.sh @@ -63,9 +63,13 @@ function waitplatform() { if [[ x"$BOOT_TYPE" = @(x"fast"|x"warm"|x"fastfast") ]]; then debug "LLDP service is delayed by a timer for better fast/warm boot performance" else - debug "Starting lldp service..." - /bin/systemctl start lldp - debug "Started lldp service" + lldp_state=$(systemctl is-enabled lldp.timer) + if [[ $lldp_state == "enabled" ]] + then + debug "Starting lldp service..." + /bin/systemctl start lldp + debug "Started lldp service" + fi fi } From 5a3c8d693fabc3b611833128b3a50c9836852443 Mon Sep 17 00:00:00 2001 From: saksarav-nokia Date: Sat, 18 Jun 2022 13:47:49 -0400 Subject: [PATCH 047/259] Updated Nokia device BCM and platform config (#11106) --- .../0/jr2cp-nokia-18x400g-config.bcm | 9 +- .../0/sai_postinit_cmd.soc | 45 ++-- .../1/jr2cp-nokia-18x400g-config.bcm | 3 + .../1/sai_postinit_cmd.soc | 8 + .../platform.json | 207 +++++++++++------- .../platform_ndk.json | 8 + .../platform_reboot | 2 + .../system_health_monitoring_config.json | 1 - .../Nokia-IXR7250E-SUP-10/platform.json | 7 +- .../platform_ndk.json | 10 +- .../platform_reboot | 2 + 11 files changed, 199 insertions(+), 103 deletions(-) diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm index bbafccdc377e..264cfb30a310 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm @@ -1641,9 +1641,9 @@ port_fec.18.BCM8885x=9 serdes_tx_taps_1.BCM8885X=pam4:-8:128:-8:0:0:0 serdes_tx_taps_2.BCM8885X=pam4:-8:128:-8:0:0:0 -serdes_tx_taps_3.BCM8885X=pam4:-8:132:-12:4:0:0 +serdes_tx_taps_3.BCM8885X=pam4:-12:128:-12:2:0:0 serdes_tx_taps_4.BCM8885X=pam4:-8:128:-4:4:0:0 -serdes_tx_taps_5.BCM8885X=pam4:-8:128:-4:4:0:0 +serdes_tx_taps_5.BCM8885X=pam4:-4:152:0:0:0:0 serdes_tx_taps_6.BCM8885X=pam4:-8:136:0:0:0:0 serdes_tx_taps_7.BCM8885X=pam4:-8:132:-4:0:-4:0 serdes_tx_taps_8.BCM8885X=pam4:-4:144:0:0:0:0 @@ -1651,7 +1651,7 @@ serdes_tx_taps_9.BCM8885X=pam4:-8:132:-4:2:-4:0 serdes_tx_taps_10.BCM8885X=pam4:-4:144:0:0:0:0 serdes_tx_taps_11.BCM8885X=pam4:-8:132:-4:0:-4:0 serdes_tx_taps_12.BCM8885X=pam4:-4:144:0:0:0:0 -serdes_tx_taps_13.BCM8885X=pam4:-8:128:-8:4:0:0 +serdes_tx_taps_13.BCM8885X=pam4:-4:132:-4:0:0:0 serdes_tx_taps_14.BCM8885X=pam4:-4:144:0:0:0:0 serdes_tx_taps_15.BCM8885X=pam4:-8:128:-8:4:0:0 serdes_tx_taps_16.BCM8885X=pam4:-8:136:-4:4:-4:0 @@ -2052,3 +2052,6 @@ sai_recycle_port_lane_base=96 appl_param_nof_ports_per_modid=64 udh_exists=1 modreg IPS_FORCE_LOCAL_OR_FABRIC FORCE_FABRIC=1 + +xflow_macsec_secure_chan_to_num_secure_assoc_encrypt=2 +xflow_macsec_secure_chan_to_num_secure_assoc_decrypt=4 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/sai_postinit_cmd.soc b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/sai_postinit_cmd.soc index 26466f89ae44..650134e7e589 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/sai_postinit_cmd.soc +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/sai_postinit_cmd.soc @@ -1,25 +1,3 @@ -phy set 3 reg=0xd134 data=-8 lane=0 -phy set 3 reg=0xd135 data=132 lane=0 -phy set 3 reg=0xd136 data=-8 lane=0 -phy set 3 reg=0xd137 data=0 lane=0 -phy set 3 reg=0xd138 data=0 lane=0 -phy set 3 reg=0xd133 data=0x1802 lane=0 - -phy set 3 reg=0xd134 data=-8 lane=1 -phy set 3 reg=0xd135 data=132 lane=1 -phy set 3 reg=0xd136 data=-12 lane=1 -phy set 3 reg=0xd137 data=0 lane=1 -phy set 3 reg=0xd138 data=0 lane=1 -phy set 3 reg=0xd133 data=0x1800 lane=1 - -phy set 3 reg=0xd134 data=-8 lane=7 -phy set 3 reg=0xd135 data=132 lane=7 -phy set 3 reg=0xd136 data=-8 lane=7 -phy set 3 reg=0xd137 data=0 lane=7 -phy set 3 reg=0xd138 data=0 lane=7 -phy set 3 reg=0xd133 data=0x1804 lane=7 - - phy set 6 reg=0xd134 data=-8 lane=1 phy set 6 reg=0xd135 data=132 lane=1 phy set 6 reg=0xd136 data=-8 lane=1 @@ -34,3 +12,26 @@ phy set 8 reg=0xd136 data=-8 lane=1 phy set 8 reg=0xd137 data=0 lane=1 phy set 8 reg=0xd138 data=0 lane=1 phy set 8 reg=0xd133 data=0x1802 lane=1 + + +phy set 15 reg=0xd134 data=-8 lane=0 +phy set 15 reg=0xd135 data=144 lane=0 +phy set 15 reg=0xd136 data=-8 lane=0 +phy set 15 reg=0xd137 data=0 lane=0 +phy set 15 reg=0xd138 data=0 lane=0 +phy set 15 reg=0xd133 data=0x1800 lane=0 + +phy set 15 reg=0xd134 data=-8 lane=3 +phy set 15 reg=0xd135 data=144 lane=3 +phy set 15 reg=0xd136 data=-8 lane=3 +phy set 15 reg=0xd137 data=0 lane=3 +phy set 15 reg=0xd138 data=0 lane=3 +phy set 15 reg=0xd133 data=0x1800 lane=3 + + +phy set 17 reg=0xd134 data=-8 lane=2 +phy set 17 reg=0xd135 data=132 lane=2 +phy set 17 reg=0xd136 data=-16 lane=2 +phy set 17 reg=0xd137 data=0 lane=2 +phy set 17 reg=0xd138 data=0 lane=2 +phy set 17 reg=0xd133 data=0x1804 lane=2 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm index ce7f77de5bb2..733ab75004e4 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm @@ -2054,3 +2054,6 @@ sai_recycle_port_lane_base=96 appl_param_nof_ports_per_modid=64 udh_exists=1 modreg IPS_FORCE_LOCAL_OR_FABRIC FORCE_FABRIC=1 + +xflow_macsec_secure_chan_to_num_secure_assoc_encrypt=2 +xflow_macsec_secure_chan_to_num_secure_assoc_decrypt=4 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/sai_postinit_cmd.soc b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/sai_postinit_cmd.soc index db5ad5ebb264..b22dde093132 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/sai_postinit_cmd.soc +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/sai_postinit_cmd.soc @@ -1,3 +1,11 @@ +phy set 3 reg=0xd134 data=-8 lane=4 +phy set 3 reg=0xd135 data=132 lane=4 +phy set 3 reg=0xd136 data=0 lane=4 +phy set 3 reg=0xd137 data=0 lane=4 +phy set 3 reg=0xd138 data=0 lane=4 +phy set 3 reg=0xd133 data=0x1800 lane=4 + + phy set 8 reg=0xd134 data=-8 lane=1 phy set 8 reg=0xd135 data=132 lane=1 phy set 8 reg=0xd136 data=-8 lane=1 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform.json b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform.json index 55630de1126a..3980c99648bc 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform.json +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform.json @@ -19,7 +19,8 @@ "model": false, "serial": false, "base_mac": false, - "system_eeprom_info": false + "system_eeprom_info": false, + "reboot_other_modules": false }, "thermal_temperature": { "minimum": 0, @@ -30,6 +31,94 @@ "master_psu_led_color": [], "psus": [], "thermals": [ + { + "name": "ASIC0_0--FAB0", + "controllable": false + }, + { + "name": "ASIC0_1--FAB1", + "controllable": false + }, + { + "name": "ASIC0_2--FAB2", + "controllable": false + }, + { + "name": "ASIC0_3--FAB3", + "controllable": false + }, + { + "name": "ASIC0_4--NIF0", + "controllable": false + }, + { + "name": "ASIC0_5--NIF1", + "controllable": false + }, + { + "name": "ASIC0_6--PRM", + "controllable": false + }, + { + "name": "ASIC0_7--EMI0", + "controllable": false + }, + { + "name": "ASIC0_8--EMI1", + "controllable": false + }, + { + "name": "ASIC0_dram-0x0", + "controllable": false + }, + { + "name": "ASIC0_dram-0x1", + "controllable": false + }, + { + "name": "ASIC1_0--FAB0", + "controllable": false + }, + { + "name": "ASIC1_1--FAB1", + "controllable": false + }, + { + "name": "ASIC1_2--FAB2", + "controllable": false + }, + { + "name": "ASIC1_3--FAB3", + "controllable": false + }, + { + "name": "ASIC1_4--NIF0", + "controllable": false + }, + { + "name": "ASIC1_5--NIF1", + "controllable": false + }, + { + "name": "ASIC1_6--PRM", + "controllable": false + }, + { + "name": "ASIC1_7--EMI0", + "controllable": false + }, + { + "name": "ASIC1_8--EMI1", + "controllable": false + }, + { + "name": "ASIC1_dram-0x0", + "controllable": false + }, + { + "name": "ASIC1_dram-0x1", + "controllable": false + }, { "name": "temp_1(fan)", "controllable": false @@ -43,7 +132,7 @@ "controllable": false }, { - "name": "temp_4", + "name": "temp_4(fan)", "controllable": false }, { @@ -51,7 +140,7 @@ "controllable": false }, { - "name": "temp_6(fan)", + "name": "temp_6", "controllable": false }, { @@ -69,152 +158,120 @@ { "name": "temp_10(fan)", "controllable": false + }, + { + "name": "temp_11(fan)", + "controllable": false } ], "sfps": [ { - "name": "QSFPDD_1", - "tx_disable_channel": false + "name": "QSFPDD_1" }, { - "name": "QSFPDD_2", - "tx_disable_channel": false + "name": "QSFPDD_2" }, { - "name": "QSFPDD_3", - "tx_disable_channel": false + "name": "QSFPDD_3" }, { - "name": "QSFPDD_4", - "tx_disable_channel": false + "name": "QSFPDD_4" }, { - "name": "QSFPDD_5", - "tx_disable_channel": false + "name": "QSFPDD_5" }, { - "name": "QSFPDD_6", - "tx_disable_channel": false + "name": "QSFPDD_6" }, { - "name": "QSFPDD_7", - "tx_disable_channel": false + "name": "QSFPDD_7" }, { - "name": "QSFPDD_8", - "tx_disable_channel": false + "name": "QSFPDD_8" }, { - "name": "QSFPDD_9", - "tx_disable_channel": false + "name": "QSFPDD_9" }, { - "name": "QSFPDD_10", - "tx_disable_channel": false + "name": "QSFPDD_10" }, { - "name": "QSFPDD_11", - "tx_disable_channel": false + "name": "QSFPDD_11" }, { - "name": "QSFPDD_12", - "tx_disable_channel": false + "name": "QSFPDD_12" }, { - "name": "QSFPDD_13", - "tx_disable_channel": false + "name": "QSFPDD_13" }, { - "name": "QSFPDD_14", - "tx_disable_channel": false + "name": "QSFPDD_14" }, { - "name": "QSFPDD_15", - "tx_disable_channel": false + "name": "QSFPDD_15" }, { - "name": "QSFPDD_16", - "tx_disable_channel": false + "name": "QSFPDD_16" }, { - "name": "QSFPDD_17", - "tx_disable_channel": false + "name": "QSFPDD_17" }, { - "name": "QSFPDD_18", - "tx_disable_channel": false + "name": "QSFPDD_18" }, { - "name": "QSFPDD_19", - "tx_disable_channel": false + "name": "QSFPDD_19" }, { - "name": "QSFPDD_20", - "tx_disable_channel": false + "name": "QSFPDD_20" }, { - "name": "QSFPDD_21", - "tx_disable_channel": false + "name": "QSFPDD_21" }, { - "name": "QSFPDD_22", - "tx_disable_channel": false + "name": "QSFPDD_22" }, { - "name": "QSFPDD_23", - "tx_disable_channel": false + "name": "QSFPDD_23" }, { - "name": "QSFPDD_24", - "tx_disable_channel": false + "name": "QSFPDD_24" }, { - "name": "QSFPDD_25", - "tx_disable_channel": false + "name": "QSFPDD_25" }, { - "name": "QSFPDD_26", - "tx_disable_channel": false + "name": "QSFPDD_26" }, { - "name": "QSFPDD_27", - "tx_disable_channel": false + "name": "QSFPDD_27" }, { - "name": "QSFPDD_28", - "tx_disable_channel": false + "name": "QSFPDD_28" }, { - "name": "QSFPDD_29", - "tx_disable_channel": false + "name": "QSFPDD_29" }, { - "name": "QSFPDD_30", - "tx_disable_channel": false + "name": "QSFPDD_30" }, { - "name": "QSFPDD_31", - "tx_disable_channel": false + "name": "QSFPDD_31" }, { - "name": "QSFPDD_32", - "tx_disable_channel": false + "name": "QSFPDD_32" }, { - "name": "QSFPDD_33", - "tx_disable_channel": false + "name": "QSFPDD_33" }, { - "name": "QSFPDD_34", - "tx_disable_channel": false + "name": "QSFPDD_34" }, { - "name": "QSFPDD_35", - "tx_disable_channel": false + "name": "QSFPDD_35" }, { - "name": "QSFPDD_36", - "tx_disable_channel": false + "name": "QSFPDD_36" } ] }, diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform_ndk.json b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform_ndk.json index 039b950f03ba..2220f8747894 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform_ndk.json +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform_ndk.json @@ -31,6 +31,14 @@ { "key": "update_asic_pvt", "intval": 10 + }, + { + "key": "amd_pcon", + "intval": 4 + }, + { + "key": "enable_firmware_update", + "intval": 0 } ] } diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform_reboot b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform_reboot index d128455d40fc..a32a3549bc35 100755 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform_reboot +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform_reboot @@ -6,5 +6,7 @@ echo "w" > /dev/watchdog kick_date=`date -u` echo "last watchdog kick $kick_date" > /var/log/nokia-watchdog-last.log rm -f /sys/firmware/efi/efivars/dump-* +touch /etc/opt/srlinux/devmgr_reboot_cause.done +rm -f /etc/opt/srlinux/reboot-cause.txt sync /sbin/reboot diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/system_health_monitoring_config.json b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/system_health_monitoring_config.json index 57006d67ecf5..1375bd80c3f8 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/system_health_monitoring_config.json +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/system_health_monitoring_config.json @@ -1,7 +1,6 @@ { "services_to_ignore": [], "devices_to_ignore": [ - "asic", "fan", "psu" ], diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/platform.json b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/platform.json index 4e24bb3e8d92..e41b6fc8e5e4 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/platform.json +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/platform.json @@ -16,7 +16,8 @@ "model": false, "serial": false, "base_mac": false, - "system_eeprom_info": false + "system_eeprom_info": false, + "reboot_other_modules": false }, "thermal_temperature": { "minimum": 0, @@ -149,6 +150,10 @@ "name": "temp_5(fan)", "controllable": false }, + { + "name": "temp_6(fan)", + "controllable": false + }, { "name": "sfm1_1(fan)", "controllable": false diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/platform_ndk.json b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/platform_ndk.json index 10a09a91e0e5..a6d6bbf8a45a 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/platform_ndk.json +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/platform_ndk.json @@ -19,6 +19,14 @@ { "intval": 1, "key": "disable_vfio" - } + }, + { + "key": "amd_pcon", + "intval": 1 + }, + { + "key": "enable_firmware_update", + "intval": 0 + } ] } diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/platform_reboot b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/platform_reboot index c5ff45d1848e..ba47829674a4 100755 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/platform_reboot +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/platform_reboot @@ -6,6 +6,8 @@ echo "w" > /dev/watchdog kick_date=`date -u` echo "last watchdog kick $kick_date" > /var/log/nokia-watchdog-last.log rm -f /sys/firmware/efi/efivars/dump-* +touch /etc/opt/srlinux/devmgr_reboot_cause.done +rm -f /etc/opt/srlinux/reboot-cause.txt sync echo "Rebooting all Linecards" python3 -c 'import sonic_platform.platform; platform_chassis = sonic_platform.platform.Platform().get_chassis(); platform_chassis.reboot_imms()' From 1976e550105e730a89932893a27a1f16ce80b975 Mon Sep 17 00:00:00 2001 From: saksarav-nokia Date: Sat, 18 Jun 2022 13:47:13 -0400 Subject: [PATCH 048/259] Update platform/broadcom/sonic-platform-modules-nokia (#11107) --- platform/broadcom/sonic-platform-modules-nokia | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/broadcom/sonic-platform-modules-nokia b/platform/broadcom/sonic-platform-modules-nokia index b67d4795e691..0f27485ea43b 160000 --- a/platform/broadcom/sonic-platform-modules-nokia +++ b/platform/broadcom/sonic-platform-modules-nokia @@ -1 +1 @@ -Subproject commit b67d4795e691cccd4321b196ba92942f5e8fe395 +Subproject commit 0f27485ea43b98e4382aae12f3c4780b44e02c05 From d97b336a5d16be37a1903e2bcf494f6ff779cdd4 Mon Sep 17 00:00:00 2001 From: Hua Liu <58683130+liuh-80@users.noreply.github.com> Date: Thu, 16 Jun 2022 13:27:07 +0800 Subject: [PATCH 049/259] [SSHD] Enable SSHD keepalive timeout feature (#11115) #### Why I did it SSHD keepalive timeout feature not enabled on sonic. #### How I did it Enable SSHD keepalive timeout feature by set ClientAliveCountMax to 1. #### How to verify it Pass All E2E test case. Manually test with following steps: 1. Change config and restart sshd 2. Connect a ssh with -vvv option to show debug message 3. Get running ssh by command and stop it: ``` azureuser@liuh-dev-vm-02:~$ ps -auxww | grep vvv azureus+ 1614153 0.0 0.0 12244 6004 pts/1S+ 15:48 0:00 ssh admin@10.250.0.101 -vvv azureus+ 1615570 0.0 0.0 8168 2424 pts/3S+ 15:49 0:00 grep --color=auto vvv azureuser@liuh-dev-vm-02:~$ kill -Stop 1614153 ``` 4. Check TCP status from server side with ss command: https://man7.org/linux/man-pages/man8/ss.8.html ``` admin@vlab-01:~$ ss | grep -i ssh tcp ESTAB 0 010.250.0.101:ssh 10.250.0.1:58150 tcp FIN-WAIT-2 0 010.250.0.101:ssh 10.250.0.1:58164 tcp ESTAB 0 010.250.0.101:ssh 10.250.0.1:57978 ``` FIN-WAIT-2 means server already terminate the connection and wait for client response: https://kb.iu.edu/d/ajmi . FIN-WAIT-2 <-- <-- CLOSE-WAIT 5. Check again later will show the session been complete closed: ``` admin@vlab-01:~$ ss | grep -i ssh tcp ESTAB 0 010.250.0.101:ssh 10.250.0.1:58150 tcp ESTAB 0 010.250.0.101:ssh 10.250.0.1:57978 ``` --- build_debian.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_debian.sh b/build_debian.sh index 25f039c90697..dbf39949c329 100755 --- a/build_debian.sh +++ b/build_debian.sh @@ -422,7 +422,7 @@ rm /files/etc/ssh/sshd_config/ClientAliveCountMax touch /files/etc/ssh/sshd_config/EmptyLineHack rename /files/etc/ssh/sshd_config/EmptyLineHack "" set /files/etc/ssh/sshd_config/ClientAliveInterval 900 -set /files/etc/ssh/sshd_config/ClientAliveCountMax 0 +set /files/etc/ssh/sshd_config/ClientAliveCountMax 1 ins #comment before /files/etc/ssh/sshd_config/ClientAliveInterval set /files/etc/ssh/sshd_config/#comment[following-sibling::*[1][self::ClientAliveInterval]] "Close inactive client sessions after 15 minutes" save From 40f7cec98db9b149d888e5a5b1f76e65fadd8bff Mon Sep 17 00:00:00 2001 From: Ze Gan Date: Tue, 21 Jun 2022 15:47:06 +0800 Subject: [PATCH 050/259] [azurepipeline]: Add t0-sonic pool back to Azp checker (#11181) Why I did it The t0-sonic pool has been fixed, so add it back to azp checker. How I did it Remove continueOnError in run-test-template.yml. Signed-off-by: Ze Gan --- .azure-pipelines/run-test-template.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.azure-pipelines/run-test-template.yml b/.azure-pipelines/run-test-template.yml index 7d3a6c8dd612..2a75d1bc32dc 100644 --- a/.azure-pipelines/run-test-template.yml +++ b/.azure-pipelines/run-test-template.yml @@ -51,8 +51,6 @@ steps: rm -rf $(Build.ArtifactStagingDirectory)/* docker exec sonic-mgmt bash -c "/data/sonic-mgmt/tests/kvmtest.sh -en -T ${{ parameters.tbtype }} ${{ parameters.tbname }} ${{ parameters.dut }} ${{ parameters.section }}" displayName: "Run tests" - ${{ if eq(parameters.tbtype, 't0-sonic') }}: - continueOnError: true - script: | # save dut state if test fails From f9e93d2f31bacbebaededee9ba3d2fd5aaf9fe0c Mon Sep 17 00:00:00 2001 From: Lior Avramov <73036155+liorghub@users.noreply.github.com> Date: Thu, 23 Jun 2022 00:54:14 +0300 Subject: [PATCH 051/259] Change severity of log messages for cases where docker container was stopped during service checker operation (#11188) #### Why I did it There might be a case where service checker periodic operation determined that specific container is running but when it tries to perform an operation on it, it was already closed by the user. This is a valid flow and we should not log an error message, informative warning is enough. #### How I did it I reduce log severity. #### How to verify it I verified it manually. --- src/system-health/health_checker/service_checker.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/system-health/health_checker/service_checker.py b/src/system-health/health_checker/service_checker.py index 6918da0b9f0e..33eeb4dfb707 100644 --- a/src/system-health/health_checker/service_checker.py +++ b/src/system-health/health_checker/service_checker.py @@ -144,11 +144,11 @@ def fill_critical_process_by_container(self, container): # Get container volumn folder container_folder = self._get_container_folder(container) if not container_folder: - logger.log_error('Failed to get container folder for {}'.format(container_folder)) + logger.log_warning('Could not find MergedDir of container {}, was container stopped?'.format(container)) return if not os.path.exists(container_folder): - logger.log_error('Container folder does not exist: {}'.format(container_folder)) + logger.log_warning('MergedDir {} of container {} not found in filesystem, was container stopped?'.format(container_folder, container)) return # Get critical_processes file path From 3304fcd3a57520904d289e78afdf76b53aa0edd3 Mon Sep 17 00:00:00 2001 From: Neetha John Date: Sun, 5 Jun 2022 22:20:26 -0700 Subject: [PATCH 052/259] [qos]: Adjust 7260 buffer sizes to accomodate extra lossless queues (#11018) Why I did it As part of PCBB changes, we need to enable 2 extra lossless queues. The changes in this PR are done to adjust only the reserved sizes on Th2 for the additional 2 lossless queues Calculations are done based on 40 downlinks for T1 and 16 uplinks for dual ToR How to verify it Verified that the rendering works fine on Th2 dut Unit tests have been updated to reflect the modified buffer sizes when pcbb is enabled. There are existing testcases that will test the original buffer sizes when pcbb is disabled. With these changes, was able to build sonic-config-engine wheel successfully Signed-off-by: Neetha John --- .../Arista-7260CX3-C64/buffers_defaults_t0.j2 | 10 +++++-- .../Arista-7260CX3-C64/buffers_defaults_t1.j2 | 8 +++-- .../buffers_pool_sizes_t0.j2 | 8 +++++ .../buffers_pool_sizes_t1.j2 | 8 +++++ .../buffers_defaults_t0.j2 | 8 +++-- .../buffers_pool_sizes_t0.j2 | 1 + .../Arista-7260CX3-Q64/buffers_defaults_t0.j2 | 8 +++-- .../Arista-7260CX3-Q64/buffers_defaults_t1.j2 | 8 +++-- .../buffers_pool_sizes_t0.j2 | 1 + .../py3/buffer-arista7260-dualtor.json | 4 +-- .../py3/buffer-arista7260-t1.json | 12 ++++---- src/sonic-config-engine/tests/test_j2files.py | 29 ++++++++++++++++++- 12 files changed, 85 insertions(+), 20 deletions(-) create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_pool_sizes_t0.j2 create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_pool_sizes_t1.j2 create mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_pool_sizes_t0.j2 create mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_pool_sizes_t0.j2 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t0.j2 index 625ca0ab119e..bee86a9b3a85 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t0.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t0.j2 @@ -7,16 +7,20 @@ {%- endfor %} {%- endmacro %} +{%- import 'buffers_pool_sizes_t0.j2' as defs with context %} +{%- set ingress_lossless_pool_size = defs.ingress_lossless_pool_size %} +{%- set egress_lossy_pool_size = defs.egress_lossy_pool_size %} + {%- macro generate_buffer_pool_and_profiles() %} "BUFFER_POOL": { "ingress_lossless_pool": { - "size": "33329088", + "size": "{{ ingress_lossless_pool_size }}", "type": "ingress", "mode": "dynamic", "xoff": "7827456" }, "egress_lossy_pool": { - "size": "26663272", + "size": "{{ egress_lossy_pool_size }}", "type": "egress", "mode": "dynamic" }, @@ -49,4 +53,4 @@ {%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} {{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} -{%- endmacro %} \ No newline at end of file +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 index 68af36a27518..c5d390668a33 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 @@ -7,11 +7,15 @@ {%- endfor %} {%- endmacro %} +{%- import 'buffers_pool_sizes_t1.j2' as defs with context %} +{%- set ingress_lossless_pool_size = defs.ingress_lossless_pool_size %} +{%- set egress_lossy_pool_size = defs.egress_lossy_pool_size %} + {%- macro generate_buffer_pool_and_profiles() %} "BUFFER_POOL": { "ingress_lossless_pool": { {# SS Tab2 Row 71 #} - "size": "33582016", + "size": "{{ ingress_lossless_pool_size }}", "type": "ingress", "mode": "dynamic", {# SS Tab2 Row 68 #} @@ -19,7 +23,7 @@ }, "egress_lossy_pool": { {# SS Tab2 Row 60 #} - "size": "26866112", + "size": "{{ egress_lossy_pool_size }}", "type": "egress", "mode": "dynamic" }, diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_pool_sizes_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_pool_sizes_t0.j2 new file mode 100644 index 000000000000..bd82c947e4fc --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_pool_sizes_t0.j2 @@ -0,0 +1,8 @@ +{%- set ingress_lossless_pool_size = '33329088' %} +{%- set egress_lossy_pool_size = '26663272' %} + +{%- if ((SYSTEM_DEFAULTS is defined) and ('tunnel_qos_remap' in SYSTEM_DEFAULTS) and (SYSTEM_DEFAULTS['tunnel_qos_remap']['status'] == 'enabled')) and +((DEVICE_METADATA is defined) and ('localhost' in DEVICE_METADATA) and ('subtype' in DEVICE_METADATA['localhost']) and (DEVICE_METADATA['localhost']['subtype'] == 'DualToR')) %} + {%- set ingress_lossless_pool_size = '33169344' %} + {%- set egress_lossy_pool_size = '26535808' %} +{%- endif %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_pool_sizes_t1.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_pool_sizes_t1.j2 new file mode 100644 index 000000000000..43b31de8ad43 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_pool_sizes_t1.j2 @@ -0,0 +1,8 @@ +{%- set ingress_lossless_pool_size = '33582016' %} +{%- set egress_lossy_pool_size = '26866112' %} + +{%- if ((SYSTEM_DEFAULTS is defined) and ('tunnel_qos_remap' in SYSTEM_DEFAULTS) and (SYSTEM_DEFAULTS['tunnel_qos_remap']['status'] == 'enabled')) and +((DEVICE_METADATA is defined) and ('localhost' in DEVICE_METADATA) and ('type' in DEVICE_METADATA['localhost']) and (DEVICE_METADATA['localhost']['type'] == 'LeafRouter')) %} + {%- set ingress_lossless_pool_size = '33262528' %} + {%- set egress_lossy_pool_size = '26610688' %} +{%- endif %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_defaults_t0.j2 index 10b9d70d24bf..5ac1d2d2aef9 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_defaults_t0.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_defaults_t0.j2 @@ -15,16 +15,20 @@ {%- endfor %} {%- endmacro %} +{%- import 'buffers_pool_sizes_t0.j2' as defs with context %} +{%- set ingress_lossless_pool_size = defs.ingress_lossless_pool_size %} +{%- set egress_lossy_pool_size = defs.egress_lossy_pool_size %} + {%- macro generate_buffer_pool_and_profiles() %} "BUFFER_POOL": { "ingress_lossless_pool": { - "size": "33329088", + "size": "{{ ingress_lossless_pool_size }}", "type": "ingress", "mode": "dynamic", "xoff": "7827456" }, "egress_lossy_pool": { - "size": "26663272", + "size": "{{ egress_lossy_pool_size }}", "type": "egress", "mode": "dynamic" }, diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_pool_sizes_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_pool_sizes_t0.j2 new file mode 120000 index 000000000000..72e16a608268 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_pool_sizes_t0.j2 @@ -0,0 +1 @@ +../Arista-7260CX3-C64/buffers_pool_sizes_t0.j2 \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t0.j2 index 01b5a1dd8b3e..bee86a9b3a85 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t0.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t0.j2 @@ -7,16 +7,20 @@ {%- endfor %} {%- endmacro %} +{%- import 'buffers_pool_sizes_t0.j2' as defs with context %} +{%- set ingress_lossless_pool_size = defs.ingress_lossless_pool_size %} +{%- set egress_lossy_pool_size = defs.egress_lossy_pool_size %} + {%- macro generate_buffer_pool_and_profiles() %} "BUFFER_POOL": { "ingress_lossless_pool": { - "size": "33329088", + "size": "{{ ingress_lossless_pool_size }}", "type": "ingress", "mode": "dynamic", "xoff": "7827456" }, "egress_lossy_pool": { - "size": "26663272", + "size": "{{ egress_lossy_pool_size }}", "type": "egress", "mode": "dynamic" }, diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 index 1d8fbb3e852f..f531b5e208e9 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 @@ -7,16 +7,20 @@ {%- endfor %} {%- endmacro %} +{%- import 'buffers_pool_sizes_t0.j2' as defs with context %} +{%- set ingress_lossless_pool_size = defs.ingress_lossless_pool_size %} +{%- set egress_lossy_pool_size = defs.egress_lossy_pool_size %} + {%- macro generate_buffer_pool_and_profiles() %} "BUFFER_POOL": { "ingress_lossless_pool": { - "size": "33329088", + "size": "{{ ingress_lossless_pool_size }}", "type": "ingress", "mode": "dynamic", "xoff": "7827456" }, "egress_lossy_pool": { - "size": "26663272", + "size": "{{ egress_lossy_pool_size }}", "type": "egress", "mode": "dynamic" }, diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_pool_sizes_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_pool_sizes_t0.j2 new file mode 120000 index 000000000000..72e16a608268 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_pool_sizes_t0.j2 @@ -0,0 +1 @@ +../Arista-7260CX3-C64/buffers_pool_sizes_t0.j2 \ No newline at end of file diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-dualtor.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-dualtor.json index 32fbfe24370a..6b1f4c433fa0 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-dualtor.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-dualtor.json @@ -128,13 +128,13 @@ "BUFFER_POOL": { "ingress_lossless_pool": { - "size": "33329088", + "size": "33169344", "type": "ingress", "mode": "dynamic", "xoff": "7827456" }, "egress_lossy_pool": { - "size": "26663272", + "size": "26535808", "type": "egress", "mode": "dynamic" }, diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json index 2491d376c771..702076249ac6 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json @@ -72,18 +72,18 @@ "BUFFER_POOL": { "ingress_lossless_pool": { - "size": "33582016", + "size": "33262528", "type": "ingress", "mode": "dynamic", - "xoff": "8965632" + "xoff": "8965632" }, "egress_lossy_pool": { - "size": "26866112", + "size": "26610688", "type": "egress", "mode": "dynamic" }, "egress_lossless_pool": { - "size": "43481152", + "size": "43481152", "type": "egress", "mode": "static" } @@ -92,12 +92,12 @@ "ingress_lossy_profile": { "pool":"ingress_lossless_pool", "size":"0", - "static_th":"44302336" + "static_th":"44302336" }, "egress_lossless_profile": { "pool":"egress_lossless_pool", "size":"0", - "static_th":"43481152" + "static_th":"43481152" }, "egress_lossy_profile": { "pool":"egress_lossy_pool", diff --git a/src/sonic-config-engine/tests/test_j2files.py b/src/sonic-config-engine/tests/test_j2files.py index ba39e15450c7..f728277a3a3e 100644 --- a/src/sonic-config-engine/tests/test_j2files.py +++ b/src/sonic-config-engine/tests/test_j2files.py @@ -42,6 +42,31 @@ def run_script(self, argument): def run_diff(self, file1, file2): return subprocess.check_output('diff -u {} {} || true'.format(file1, file2), shell=True) + def create_machine_conf(self, platform, vendor): + file_exist = True + dir_exist = True + mode = {'arista': 'aboot', + 'dell': 'onie', + 'mellanox': 'onie' + } + echo_cmd = "echo '{}_platform={}' | sudo tee -a /host/machine.conf > /dev/null".format(mode[vendor], platform) + if not os.path.exists('/host/machine.conf'): + file_exist = False + if not os.path.isdir('/host'): + dir_exist = False + os.system('sudo mkdir /host') + os.system('sudo touch /host/machine.conf') + os.system(echo_cmd) + + return file_exist, dir_exist + + def remove_machine_conf(self, file_exist, dir_exist): + if not file_exist: + os.system('sudo rm -f /host/machine.conf') + + if not dir_exist: + os.system('sudo rmdir /host') + def test_interfaces(self): interfaces_template = os.path.join(self.test_dir, '..', '..', '..', 'files', 'image_config', 'interfaces', 'interfaces.j2') argument = '-m ' + self.t0_minigraph + ' -p ' + self.t0_port_config + ' -a \'{\"hwaddr\":\"e4:1d:2d:a5:f3:ad\"}\' -t ' + interfaces_template + ' > ' + self.output_file @@ -364,6 +389,7 @@ def test_config_brcm_render_template(self): os.remove(config_test_output) def _test_buffers_render_template(self, vendor, platform, sku, minigraph, buffer_template, expected): + file_exist, dir_exist = self.create_machine_conf(platform, vendor) dir_path = os.path.join(self.test_dir, '..', '..', '..', 'device', vendor, platform, sku) buffers_file = os.path.join(dir_path, buffer_template) port_config_ini_file = os.path.join(dir_path, 'port_config.ini') @@ -379,6 +405,7 @@ def _test_buffers_render_template(self, vendor, platform, sku, minigraph, buffer # cleanup buffers_config_file_new = os.path.join(dir_path, 'buffers_config.j2') os.remove(buffers_config_file_new) + self.remove_machine_conf(file_exist, dir_exist) sample_output_file = os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, expected) assert utils.cmp(sample_output_file, self.output_file), self.run_diff(sample_output_file, self.output_file) @@ -409,7 +436,7 @@ def test_extra_lossless_buffer_for_tunnel_remapping(self): ('arista', 'x86_64-arista_7260cx3_64', 'Arista-7260CX3-C64', 'sample-arista-7260-t1-minigraph.xml', 'buffers.json.j2', 'buffer-arista7260-t1.json'), ('arista', 'x86_64-arista_7260cx3_64', 'Arista-7260CX3-C64', 'sample-arista-7260-t1-minigraph-remap-disabled.xml', 'buffers.json.j2', 'buffer-arista7260-t1-remap-disabled.json') ] - + for test_data in TEST_DATA: self._test_buffers_render_template(vendor=test_data[0], platform=test_data[1], From ef9fb9db05e1c1cbd607aabf8f7b4cb070d6e937 Mon Sep 17 00:00:00 2001 From: Neetha John Date: Wed, 15 Jun 2022 02:16:36 -0700 Subject: [PATCH 053/259] [sonic-config-engine] Generate expected output with different cable len (#11092) Why I did it To address internal build failures where the cable len for some of the skus is set to 300m for all tiers. How I did it For the buffers test, generate a new output file based off the original expected output with CABLE_LENGTH table updated to use 300m. In the comparison logic, compare against each of the expected output files and if any matches, the testcase is set to pass Signed-off-by: Neetha John --- src/sonic-config-engine/tests/test_j2files.py | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/sonic-config-engine/tests/test_j2files.py b/src/sonic-config-engine/tests/test_j2files.py index f728277a3a3e..5237ddd85067 100644 --- a/src/sonic-config-engine/tests/test_j2files.py +++ b/src/sonic-config-engine/tests/test_j2files.py @@ -67,6 +67,20 @@ def remove_machine_conf(self, file_exist, dir_exist): if not dir_exist: os.system('sudo rmdir /host') + def modify_cable_len(self, base_file, file_dir): + input_file = os.path.join(file_dir, base_file) + with open(input_file, 'r') as ifd: + object = json.load(ifd) + if 'CABLE_LENGTH' in object and 'AZURE' in object['CABLE_LENGTH']: + for key in object['CABLE_LENGTH']['AZURE']: + object['CABLE_LENGTH']['AZURE'][key] = '300m' + prefix, extension = base_file.split('.') + output_file = '{}_300m.{}'.format(prefix, extension) + out_file_path = os.path.join(file_dir, output_file) + with open(out_file_path, 'w') as wfd: + json.dump(object, wfd, indent=4) + return output_file + def test_interfaces(self): interfaces_template = os.path.join(self.test_dir, '..', '..', '..', 'files', 'image_config', 'interfaces', 'interfaces.j2') argument = '-m ' + self.t0_minigraph + ' -p ' + self.t0_port_config + ' -a \'{\"hwaddr\":\"e4:1d:2d:a5:f3:ad\"}\' -t ' + interfaces_template + ' > ' + self.output_file @@ -398,7 +412,7 @@ def _test_buffers_render_template(self, vendor, platform, sku, minigraph, buffer buffers_config_file = os.path.join(self.test_dir, '..', '..', '..', 'files', 'build_templates', 'buffers_config.j2') shutil.copy2(buffers_config_file, dir_path) - minigraph = os.path.join(self.test_dir, minigraph) + minigraph = os.path.join(self.test_dir, minigraph) argument = '-m ' + minigraph + ' -p ' + port_config_ini_file + ' -t ' + buffers_file + ' > ' + self.output_file self.run_script(argument) @@ -407,8 +421,21 @@ def _test_buffers_render_template(self, vendor, platform, sku, minigraph, buffer os.remove(buffers_config_file_new) self.remove_machine_conf(file_exist, dir_exist) - sample_output_file = os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, expected) - assert utils.cmp(sample_output_file, self.output_file), self.run_diff(sample_output_file, self.output_file) + out_file_dir = os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR) + expected_files = [expected, self.modify_cable_len(expected, out_file_dir)] + match = False + diff = '' + for out_file in expected_files: + sample_output_file = os.path.join(out_file_dir, out_file) + if utils.cmp(sample_output_file, self.output_file): + match = True + break + else: + diff = diff + str(self.run_diff(sample_output_file, self.output_file)) + + os.remove(os.path.join(out_file_dir, expected_files[1])) + + assert match, diff def test_buffers_dell6100_render_template(self): self._test_buffers_render_template('dell', 'x86_64-dell_s6100_c2538-r0', 'Force10-S6100', 'sample-dell-6100-t0-minigraph.xml', 'buffers.json.j2', 'buffers-dell6100.json') From 8249d0da80a8df25078e5f4e42f20ae509070cd4 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Wed, 22 Jun 2022 21:11:40 -0700 Subject: [PATCH 054/259] [202205] add release tag file (#11222) Signed-off-by: Ying Xie --- files/image_config/sonic_release | 1 + 1 file changed, 1 insertion(+) create mode 100644 files/image_config/sonic_release diff --git a/files/image_config/sonic_release b/files/image_config/sonic_release new file mode 100644 index 000000000000..469e689a84e3 --- /dev/null +++ b/files/image_config/sonic_release @@ -0,0 +1 @@ +202205 From f6f87f1a8ca0624e608069931deaed9ae4630fdf Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Thu, 23 Jun 2022 16:14:00 -0700 Subject: [PATCH 055/259] [202205][swss][utilities][sairedis][pmon] advance submodule head (#11223) swss: * 43b9f06 2022-06-23 | [ACL] Support stage particular match fields (#2341) (HEAD -> 202205) [bingwang-ms] * c7f1add 2022-06-22 | Fix qos map test in vs test (#2343) [bingwang-ms] * 0549f3c 2022-06-22 | Fix for "orchagent crashed when trying to delete fdb static entry with swssconfig #11046" (#2332) [anilkpan] utilities: * 785508d 2022-05-25 | [GCU] Handling type1 lists (#2171) (HEAD -> 202205) [Mohamed Ghoneim] * 56c2c6b 2022-06-22 | [config reload] Fixing config reload when timer based services are disabled (#2200) (#2226) (HEAD -> 202205, github/202205) [Sudharsan Dhamal Gopalarathnam] * 600979e 2022-06-16 | Fix header for the output table following 'show ipv6 interface' command (#2219) [Dror Prital] sairedis: * 14fba45 2022-06-13 | [vslib]: Fixbug in cleanup MACsec device (#1059) (HEAD -> 202205) [Ze Gan] * ac6e7ad 2022-04-29 | [vslib]: Update packet number of MACsec SA at runtime (#1007) [Ze Gan] platform-daemons: * 6ffec22 2022-06-22 | [ycabled] Fix the init values for active-active ports (#266) (HEAD -> 202205) [vdahiya12] Signed-off-by: Ying Xie --- src/sonic-platform-daemons | 2 +- src/sonic-sairedis | 2 +- src/sonic-swss | 2 +- src/sonic-utilities | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index 1f112b8c28da..6ffec229a3c4 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit 1f112b8c28daa3d5e8236cec4cfb73296ee761d4 +Subproject commit 6ffec229a3c417586a1fd20ba65ce2e8bce96be2 diff --git a/src/sonic-sairedis b/src/sonic-sairedis index 54642c72bd47..14fba4582e30 160000 --- a/src/sonic-sairedis +++ b/src/sonic-sairedis @@ -1 +1 @@ -Subproject commit 54642c72bd4787b0bf8abcad1e7f095bfa484701 +Subproject commit 14fba4582e3057c3ab031851b79ce172493daabb diff --git a/src/sonic-swss b/src/sonic-swss index a3bfd96a122b..c15da3b3013b 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit a3bfd96a122bcb657683be9bc8e42535b01e8abf +Subproject commit c15da3b3013b0658498b378a935d64ce96eb0fff diff --git a/src/sonic-utilities b/src/sonic-utilities index 13ec600c4ae7..785508d9b6bb 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 13ec600c4ae7b6af88121d5d1af5cc1be27feec6 +Subproject commit 785508d9b6bbef0e5c8c114fa422d8276afd5dd8 From 75f73899e1d34e64918e9a9884510d45a340e5a4 Mon Sep 17 00:00:00 2001 From: Yakiv Huryk <62013282+Yakiv-Huryk@users.noreply.github.com> Date: Fri, 24 Jun 2022 01:38:24 +0300 Subject: [PATCH 056/259] [vs][asan] add /var/log/asan to ASAN-enabled docker-sonic-vs image (#11059) To ensure that ASAN logs are always generated. Currently, the way to get the logs is to map the "/var/log/asan" outside of a container, which doesn't work for DVS test run with "--imgname" option. Signed-off-by: Yakiv Huryk --- platform/vs/docker-sonic-vs/Dockerfile.j2 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/platform/vs/docker-sonic-vs/Dockerfile.j2 b/platform/vs/docker-sonic-vs/Dockerfile.j2 index e0edc4b4bac2..70ac1d9da8da 100644 --- a/platform/vs/docker-sonic-vs/Dockerfile.j2 +++ b/platform/vs/docker-sonic-vs/Dockerfile.j2 @@ -186,6 +186,10 @@ RUN mkdir -p /etc/supervisor/conf.d/ RUN sonic-cfggen -a "{\"ENABLE_ASAN\":\"{{ENABLE_ASAN}}\"}" -t /usr/share/sonic/templates/supervisord.conf.j2 > /etc/supervisor/conf.d/supervisord.conf RUN rm -f /usr/share/sonic/templates/supervisord.conf.j2 +{%- if ENABLE_ASAN == "y" %} +RUN mkdir -p /var/log/asan +{%- endif %} + # Workaround the tcpdump issue RUN mv /usr/sbin/tcpdump /usr/bin/tcpdump From 7c5567553fe8a15fe8a120807f3ca889c3dc902b Mon Sep 17 00:00:00 2001 From: vmittal-msft <46945843+vmittal-msft@users.noreply.github.com> Date: Wed, 22 Jun 2022 21:55:17 -0700 Subject: [PATCH 057/259] Updated buffer profile settings for TD3 based HWSKUs (Arista-7050CX3-32S-C32, Arista-7050CX3-32S-D48C8) (#11202) * Updated buffer profile settings for TD3 based HWSKUs (Arista-7050CX3-32S-C32, Arista-7050CX3-32S-D48C8) --- .../Arista-7050CX3-32S-C32/buffers_defaults_t0.j2 | 4 ++-- .../Arista-7050CX3-32S-C32/buffers_defaults_t1.j2 | 4 ++-- .../Arista-7050CX3-32S-C32/pg_profile_lookup.ini | 12 ++++++------ .../Arista-7050CX3-32S-D48C8/buffers_defaults_t0.j2 | 4 ++-- .../Arista-7050CX3-32S-D48C8/pg_profile_lookup.ini | 12 ++++++------ .../buffer-arista7050cx3-dualtor-remap-disabled.json | 4 ++-- .../py3/buffer-arista7050cx3-dualtor.json | 4 ++-- 7 files changed, 22 insertions(+), 22 deletions(-) diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/buffers_defaults_t0.j2 index 1a6187edbddd..d71cdcb265f6 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/buffers_defaults_t0.j2 +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/buffers_defaults_t0.j2 @@ -30,7 +30,7 @@ "ingress_lossy_profile": { "pool":"ingress_lossless_pool", "size":"0", - "dynamic_th":"3" + "static_th":"32732160" }, "egress_lossless_profile": { "pool":"egress_lossless_pool", @@ -40,7 +40,7 @@ "egress_lossy_profile": { "pool":"egress_lossy_pool", "size":"1792", - "dynamic_th":"-1" + "dynamic_th":"3" } }, {%- endmacro %} diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/buffers_defaults_t1.j2 index cb5c8ade6372..eb1dc510e91b 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/buffers_defaults_t1.j2 +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/buffers_defaults_t1.j2 @@ -30,7 +30,7 @@ "ingress_lossy_profile": { "pool":"ingress_lossless_pool", "size":"0", - "dynamic_th":"3" + "static_th":"32712448" }, "egress_lossless_profile": { "pool":"egress_lossless_pool", @@ -40,7 +40,7 @@ "egress_lossy_profile": { "pool":"egress_lossy_pool", "size":"1792", - "dynamic_th":"-1" + "dynamic_th":"3" } }, {%- endmacro %} diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/pg_profile_lookup.ini b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/pg_profile_lookup.ini index e30c3aeae2e0..dd405301f720 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/pg_profile_lookup.ini +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/pg_profile_lookup.ini @@ -1,8 +1,8 @@ # PG lossless profiles. # speed cable size xon xoff threshold xon_offset - 50000 5m 4608 4608 33792 -3 4608 - 100000 5m 4608 4608 49408 -3 4608 - 50000 40m 4608 4608 36352 -3 4608 - 100000 40m 4608 4608 54528 -3 4608 - 50000 300m 4608 4608 55296 -3 4608 - 100000 300m 4608 4608 92672 -3 4608 + 50000 5m 4608 4608 33792 0 4608 + 100000 5m 4608 4608 49408 0 4608 + 50000 40m 4608 4608 36352 0 4608 + 100000 40m 4608 4608 54528 0 4608 + 50000 300m 4608 4608 55296 0 4608 + 100000 300m 4608 4608 92672 0 4608 diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/buffers_defaults_t0.j2 index bfeb2185623a..57a7fb131466 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/buffers_defaults_t0.j2 +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/buffers_defaults_t0.j2 @@ -31,7 +31,7 @@ "ingress_lossy_profile": { "pool":"ingress_lossless_pool", "size":"0", - "dynamic_th":"3" + "static_th":"32689152" }, "egress_lossless_profile": { "pool":"egress_lossless_pool", @@ -41,7 +41,7 @@ "egress_lossy_profile": { "pool":"egress_lossy_pool", "size":"1792", - "dynamic_th":"-1" + "dynamic_th":"3" } }, {%- endmacro %} diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/pg_profile_lookup.ini b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/pg_profile_lookup.ini index 44880400d0f6..8ee7a6714b1e 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/pg_profile_lookup.ini +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/pg_profile_lookup.ini @@ -1,8 +1,8 @@ # PG lossless profiles. # speed cable size xon xoff threshold xon_offset - 50000 5m 4608 4608 79872 -3 4608 - 100000 5m 4608 4608 54528 -3 4608 - 50000 40m 4608 4608 39936 -3 4608 - 100000 40m 4608 4608 60416 -3 4608 - 50000 300m 4608 4608 61440 -3 4608 - 100000 300m 4608 4608 103680 -3 4608 + 50000 5m 4608 4608 79872 0 4608 + 100000 5m 4608 4608 54528 0 4608 + 50000 40m 4608 4608 39936 0 4608 + 100000 40m 4608 4608 60416 0 4608 + 50000 300m 4608 4608 61440 0 4608 + 100000 300m 4608 4608 103680 0 4608 diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7050cx3-dualtor-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7050cx3-dualtor-remap-disabled.json index 883757d621ad..54e7e8167b45 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7050cx3-dualtor-remap-disabled.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7050cx3-dualtor-remap-disabled.json @@ -82,7 +82,7 @@ "ingress_lossy_profile": { "pool":"ingress_lossless_pool", "size":"0", - "dynamic_th":"3" + "static_th":"32689152" }, "egress_lossless_profile": { "pool":"egress_lossless_pool", @@ -92,7 +92,7 @@ "egress_lossy_profile": { "pool":"egress_lossy_pool", "size":"1792", - "dynamic_th":"-1" + "dynamic_th":"3" } }, "BUFFER_PG": { diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7050cx3-dualtor.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7050cx3-dualtor.json index 02c3a0c6e8df..4b55f2bbe82e 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7050cx3-dualtor.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7050cx3-dualtor.json @@ -82,7 +82,7 @@ "ingress_lossy_profile": { "pool":"ingress_lossless_pool", "size":"0", - "dynamic_th":"3" + "static_th":"32689152" }, "egress_lossless_profile": { "pool":"egress_lossless_pool", @@ -92,7 +92,7 @@ "egress_lossy_profile": { "pool":"egress_lossy_pool", "size":"1792", - "dynamic_th":"-1" + "dynamic_th":"3" } }, "BUFFER_PG": { From 71c2b40491da180f42918042d1601f2705b6d793 Mon Sep 17 00:00:00 2001 From: Stephen Sun <5379172+stephenxs@users.noreply.github.com> Date: Fri, 24 Jun 2022 02:29:50 +0800 Subject: [PATCH 058/259] Support LOSSLESS_TRAFFIC_PATTERN and DEFAULT_LOSSLESS_BUFFER_PARAMETER (#11058) #### Why I did it Support the following tables which were introduced during dynamic buffer calculation - LOSSLESS_TRAFFIC_PATTERN - DEFAULT_LOSSLESS_BUFFER_PARAMETER #### How I did it - LOSSLESS_TRAFFIC_PATTERN |name|type|range|mandatory|description| |---|---|---|---|---| |mtu|uint16|64~10240|true|The maximum packet size of a lossless packet| |small_packet_percentage|uint8|0~100|true|The percentage of small packet| - DEFAULT_LOSSLESS_BUFFER_PARAMETER |name|type|range|mandatory|description| |---|---|---|---|---| |default_dynamic_th|int8|-8~7|true|The default dynamic_th for all buffer profiles that are dynamically generated for lossless PG| |over_subscribe_ratio|uint16|-|false|The oversubscribe ratio for shared headroom pool.| |||||Semantically, the upper bound is the number of physical ports but it can not be represented in the yang module. So we keep the upper bound open. As the type is (signed) integer whose lower bound is 0 by nature, we do not need to specify the range.| #### How to verify it Run unit test --- src/sonic-yang-models/setup.py | 2 + .../tests/files/sample_config_db.json | 14 ++ .../default_lossless_buffer_parameter.json | 33 +++++ .../tests/lossless_traffic_pattern.json | 41 ++++++ .../default_lossless_buffer_parameter.json | 105 ++++++++++++++ .../lossless_traffic_pattern.json | 130 ++++++++++++++++++ ...nic-default-lossless-buffer-parameter.yang | 53 +++++++ .../sonic-lossless-traffic-pattern.yang | 58 ++++++++ 8 files changed, 436 insertions(+) create mode 100644 src/sonic-yang-models/tests/yang_model_tests/tests/default_lossless_buffer_parameter.json create mode 100644 src/sonic-yang-models/tests/yang_model_tests/tests/lossless_traffic_pattern.json create mode 100644 src/sonic-yang-models/tests/yang_model_tests/tests_config/default_lossless_buffer_parameter.json create mode 100644 src/sonic-yang-models/tests/yang_model_tests/tests_config/lossless_traffic_pattern.json create mode 100644 src/sonic-yang-models/yang-models/sonic-default-lossless-buffer-parameter.yang create mode 100644 src/sonic-yang-models/yang-models/sonic-lossless-traffic-pattern.yang diff --git a/src/sonic-yang-models/setup.py b/src/sonic-yang-models/setup.py index 3dfdde1cef89..4d61be960c3b 100644 --- a/src/sonic-yang-models/setup.py +++ b/src/sonic-yang-models/setup.py @@ -98,6 +98,7 @@ def run(self): './yang-models/sonic-cable-length.yang', './yang-models/sonic-copp.yang', './yang-models/sonic-crm.yang', + './yang-models/sonic-default-lossless-buffer-parameter.yang', './yang-models/sonic-device_metadata.yang', './yang-models/sonic-device_neighbor.yang', './yang-models/sonic-dhcpv6-relay.yang', @@ -107,6 +108,7 @@ def run(self): './yang-models/sonic-interface.yang', './yang-models/sonic-kdump.yang', './yang-models/sonic-loopback-interface.yang', + './yang-models/sonic-lossless-traffic-pattern.yang', './yang-models/sonic-mgmt_interface.yang', './yang-models/sonic-mgmt_port.yang', './yang-models/sonic-mgmt_vrf.yang', diff --git a/src/sonic-yang-models/tests/files/sample_config_db.json b/src/sonic-yang-models/tests/files/sample_config_db.json index 720c3c652325..340e36cadbec 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -1873,6 +1873,20 @@ "LAG" ] } + }, + + "LOSSLESS_TRAFFIC_PATTERN": { + "AZURE": { + "mtu": "1024", + "small_packet_percentage": "100" + } + }, + + "DEFAULT_LOSSLESS_BUFFER_PARAMETER": { + "AZURE": { + "default_dynamic_th": "0", + "over_subscribe_ratio": "0" + } } }, "SAMPLE_CONFIG_DB_UNKNOWN": { diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/default_lossless_buffer_parameter.json b/src/sonic-yang-models/tests/yang_model_tests/tests/default_lossless_buffer_parameter.json new file mode 100644 index 000000000000..058d0f021a99 --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/default_lossless_buffer_parameter.json @@ -0,0 +1,33 @@ +{ + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_TEST": { + "desc": "Configure DEFAULT_LOSSLESS_BUFFER_PARAMETER table." + }, + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_INVALID_NAME_TEST": { + "desc": "Configure DEFAULT_LOSSLESS_BUFFER_PARAMETER table with invalid character.", + "eStr": "Invalid default lossless buffer parameter list name." + }, + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_TOO_LONG_NAME_TEST": { + "desc": "Configure DEFAULT_LOSSLESS_BUFFER_PARAMETER table with too long name.", + "eStr": "Invalid length for the default lossless buffer parameter list name." + }, + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_TOO_SMALL_DYNAMIC_TH_TEST": { + "desc": "Configure DEFAULT_LOSSLESS_BUFFER_PARAMETER table with a dynamic_th exceeding the lowerbound.", + "eStr": "Invalid default dynamic_th which should be a number in the range [-8, 7]." + }, + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_TOO_LARGE_DYNAMIC_TH_TEST": { + "desc": "Configure DEFAULT_LOSSLESS_BUFFER_PARAMETER table with a dynamic_th exceeding the upperbound.", + "eStr": "Invalid default dynamic_th which should be a number in the range [-8, 7]." + }, + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_INVALID_FORMAT_DYNAMIC_TH_TEST": { + "desc": "Configure DEFAULT_LOSSLESS_BUFFER_PARAMETER table with an invalid dynamic_th", + "eStr": "Invalid" + }, + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_LACK_DYNAMIC_TH_TEST": { + "desc": "Configure DEFAULT_LOSSLESS_BUFFER_PARAMETER table without dynamic_th", + "eStrKey" : "Mandatory" + }, + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_INVALID_FORMAT_OVER_SUBSCRIBE_RATIO_TEST": { + "desc": "Configure DEFAULT_LOSSLESS_BUFFER_PARAMETER table with an invalid over subscribe ratio.", + "eStr": "Invalid" + } +} diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/lossless_traffic_pattern.json b/src/sonic-yang-models/tests/yang_model_tests/tests/lossless_traffic_pattern.json new file mode 100644 index 000000000000..6f7fc517d361 --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/lossless_traffic_pattern.json @@ -0,0 +1,41 @@ +{ + "LOSSLESS_TRAFFIC_PATTERN_TEST": { + "desc": "Configure LOSSLESS_TRAFFIC_PATTERN table." + }, + "LOSSLESS_TRAFFIC_PATTERN_INVALID_NAME_TEST": { + "desc": "Configure LOSSLESS_TRAFFIC_PATTERN table with invalid character.", + "eStr": "Invalid lossless traffic pattern list name." + }, + "LOSSLESS_TRAFFIC_PATTERN_TOO_LONG_NAME_TEST": { + "desc": "Configure LOSSLESS_TRAFFIC_PATTERN table with too long name.", + "eStr": "Invalid length for the lossless traffic pattern list name." + }, + "LOSSLESS_TRAFFIC_PATTERN_TOO_SMALL_MTU_TEST": { + "desc": "Configure LOSSLESS_TRAFFIC_PATTERN table with an MTU exceeding the lowerbound.", + "eStr": "Invaild MTU which should be in [1, 9216]." + }, + "LOSSLESS_TRAFFIC_PATTERN_TOO_LARGE_MTU_TEST": { + "desc": "Configure LOSSLESS_TRAFFIC_PATTERN table with an MTU exceeding the upperbound.", + "eStr": "Invaild MTU which should be in [1, 9216]." + }, + "LOSSLESS_TRAFFIC_PATTERN_INVALID_FORMAT_MTU_TEST": { + "desc": "Configure LOSSLESS_TRAFFIC_PATTERN table with an invalid MTU", + "eStr": "Invalid" + }, + "LOSSLESS_TRAFFIC_PATTERN_LACK_MTU_TEST": { + "desc": "Configure LOSSLESS_TRAFFIC_PATTERN table without MTU", + "eStrKey": "Mandatory" + }, + "LOSSLESS_TRAFFIC_PATTERN_TOO_LARGE_SMALL_PACKET_PERCENTAGE_TEST": { + "desc": "Configure LOSSLESS_TRAFFIC_PATTERN table with a small packet percentage exceeding the upperbound.", + "eStr": "Invalid small packets percentage which should be in [0, 100]." + }, + "LOSSLESS_TRAFFIC_PATTERN_INVALID_FORMAT_SMALL_PACKET_PERCENTAGE_TEST": { + "desc": "Configure LOSSLESS_TRAFFIC_PATTERN table with an invalid small packet percentage", + "eStr": "Invalid" + }, + "LOSSLESS_TRAFFIC_PATTERN_LACK_SMALL_PACKET_PERCENTAGE_TEST": { + "desc": "Configure LOSSLESS_TRAFFIC_PATTERN table without small packet percentage", + "eStrKey": "Mandatory" + } +} diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/default_lossless_buffer_parameter.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/default_lossless_buffer_parameter.json new file mode 100644 index 000000000000..2557950df4ce --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/default_lossless_buffer_parameter.json @@ -0,0 +1,105 @@ +{ + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_TEST": { + "sonic-default-lossless-buffer-parameter:sonic-default-lossless-buffer-parameter": { + "sonic-default-lossless-buffer-parameter:DEFAULT_LOSSLESS_BUFFER_PARAMETER": { + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_LIST": [ + { + "name": "AZURE", + "default_dynamic_th": "0", + "over_subscribe_ratio": "0" + } + ] + } + } + }, + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_INVALID_NAME_TEST": { + "sonic-default-lossless-buffer-parameter:sonic-default-lossless-buffer-parameter": { + "sonic-default-lossless-buffer-parameter:DEFAULT_LOSSLESS_BUFFER_PARAMETER": { + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_LIST": [ + { + "name": "Invalid$", + "default_dynamic_th": "0", + "over_subscribe_ratio": "0" + } + ] + } + } + }, + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_TOO_LONG_NAME_TEST": { + "sonic-default-lossless-buffer-parameter:sonic-default-lossless-buffer-parameter": { + "sonic-default-lossless-buffer-parameter:DEFAULT_LOSSLESS_BUFFER_PARAMETER": { + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_LIST": [ + { + "name": "Long_name_which_exceeds_the_limit", + "default_dynamic_th": "0", + "over_subscribe_ratio": "0" + } + ] + } + } + }, + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_TOO_SMALL_DYNAMIC_TH_TEST": { + "sonic-default-lossless-buffer-parameter:sonic-default-lossless-buffer-parameter": { + "sonic-default-lossless-buffer-parameter:DEFAULT_LOSSLESS_BUFFER_PARAMETER": { + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_LIST": [ + { + "name": "AZURE", + "default_dynamic_th": "-9", + "over_subscribe_ratio": "0" + } + ] + } + } + }, + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_TOO_LARGE_DYNAMIC_TH_TEST": { + "sonic-default-lossless-buffer-parameter:sonic-default-lossless-buffer-parameter": { + "sonic-default-lossless-buffer-parameter:DEFAULT_LOSSLESS_BUFFER_PARAMETER": { + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_LIST": [ + { + "name": "AZURE", + "default_dynamic_th": "8", + "over_subscribe_ratio": "0" + } + ] + } + } + }, + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_INVALID_FORMAT_DYNAMIC_TH_TEST": { + "sonic-default-lossless-buffer-parameter:sonic-default-lossless-buffer-parameter": { + "sonic-default-lossless-buffer-parameter:DEFAULT_LOSSLESS_BUFFER_PARAMETER": { + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_LIST": [ + { + "name": "AZURE", + "default_dynamic_th": "NaN", + "over_subscribe_ratio": "0" + } + ] + } + } + }, + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_LACK_DYNAMIC_TH_TEST": { + "sonic-default-lossless-buffer-parameter:sonic-default-lossless-buffer-parameter": { + "sonic-default-lossless-buffer-parameter:DEFAULT_LOSSLESS_BUFFER_PARAMETER": { + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_LIST": [ + { + "name": "AZURE", + "over_subscribe_ratio": "0" + } + ] + } + } + }, + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_INVALID_FORMAT_OVER_SUBSCRIBE_RATIO_TEST": { + "sonic-default-lossless-buffer-parameter:sonic-default-lossless-buffer-parameter": { + "sonic-default-lossless-buffer-parameter:DEFAULT_LOSSLESS_BUFFER_PARAMETER": { + "DEFAULT_LOSSLESS_BUFFER_PARAMETER_LIST": [ + { + "name": "AZURE", + "default_dynamic_th": "0", + "over_subscribe_ratio": "NaN" + } + ] + } + } + } +} diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/lossless_traffic_pattern.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/lossless_traffic_pattern.json new file mode 100644 index 000000000000..9f4f347aa3a6 --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/lossless_traffic_pattern.json @@ -0,0 +1,130 @@ +{ + "LOSSLESS_TRAFFIC_PATTERN_TEST": { + "sonic-lossless-traffic-pattern:sonic-lossless-traffic-pattern": { + "sonic-lossless-traffic-pattern:LOSSLESS_TRAFFIC_PATTERN": { + "LOSSLESS_TRAFFIC_PATTERN_LIST": [ + { + "name": "AZURE", + "mtu": "1024", + "small_packet_percentage": "100" + } + ] + } + } + }, + "LOSSLESS_TRAFFIC_PATTERN_INVALID_NAME_TEST": { + "sonic-lossless-traffic-pattern:sonic-lossless-traffic-pattern": { + "sonic-lossless-traffic-pattern:LOSSLESS_TRAFFIC_PATTERN": { + "LOSSLESS_TRAFFIC_PATTERN_LIST": [ + { + "name": "Invalid$", + "mtu": "1024", + "small_packet_percentage": "100" + } + ] + } + } + }, + "LOSSLESS_TRAFFIC_PATTERN_TOO_LONG_NAME_TEST": { + "sonic-lossless-traffic-pattern:sonic-lossless-traffic-pattern": { + "sonic-lossless-traffic-pattern:LOSSLESS_TRAFFIC_PATTERN": { + "LOSSLESS_TRAFFIC_PATTERN_LIST": [ + { + "name": "Long_name_which_exceeds_the_limit", + "mtu": "1024", + "small_packet_percentage": "100" + } + ] + } + } + }, + "LOSSLESS_TRAFFIC_PATTERN_TOO_SMALL_MTU_TEST": { + "sonic-lossless-traffic-pattern:sonic-lossless-traffic-pattern": { + "sonic-lossless-traffic-pattern:LOSSLESS_TRAFFIC_PATTERN": { + "LOSSLESS_TRAFFIC_PATTERN_LIST": [ + { + "name": "AZURE", + "mtu": "0", + "small_packet_percentage": "100" + } + ] + } + } + }, + "LOSSLESS_TRAFFIC_PATTERN_TOO_LARGE_MTU_TEST": { + "sonic-lossless-traffic-pattern:sonic-lossless-traffic-pattern": { + "sonic-lossless-traffic-pattern:LOSSLESS_TRAFFIC_PATTERN": { + "LOSSLESS_TRAFFIC_PATTERN_LIST": [ + { + "name": "AZURE", + "mtu": "9217", + "small_packet_percentage": "100" + } + ] + } + } + }, + "LOSSLESS_TRAFFIC_PATTERN_INVALID_FORMAT_MTU_TEST": { + "sonic-lossless-traffic-pattern:sonic-lossless-traffic-pattern": { + "sonic-lossless-traffic-pattern:LOSSLESS_TRAFFIC_PATTERN": { + "LOSSLESS_TRAFFIC_PATTERN_LIST": [ + { + "name": "AZURE", + "mtu": "NaN", + "small_packet_percentage": "100" + } + ] + } + } + }, + "LOSSLESS_TRAFFIC_PATTERN_LACK_MTU_TEST": { + "sonic-lossless-traffic-pattern:sonic-lossless-traffic-pattern": { + "sonic-lossless-traffic-pattern:LOSSLESS_TRAFFIC_PATTERN": { + "LOSSLESS_TRAFFIC_PATTERN_LIST": [ + { + "name": "AZURE", + "small_packet_percentage": "100" + } + ] + } + } + }, + "LOSSLESS_TRAFFIC_PATTERN_TOO_LARGE_SMALL_PACKET_PERCENTAGE_TEST": { + "sonic-lossless-traffic-pattern:sonic-lossless-traffic-pattern": { + "sonic-lossless-traffic-pattern:LOSSLESS_TRAFFIC_PATTERN": { + "LOSSLESS_TRAFFIC_PATTERN_LIST": [ + { + "name": "AZURE", + "mtu": "1024", + "small_packet_percentage": "101" + } + ] + } + } + }, + "LOSSLESS_TRAFFIC_PATTERN_INVALID_FORMAT_SMALL_PACKET_PERCENTAGE_TEST": { + "sonic-lossless-traffic-pattern:sonic-lossless-traffic-pattern": { + "sonic-lossless-traffic-pattern:LOSSLESS_TRAFFIC_PATTERN": { + "LOSSLESS_TRAFFIC_PATTERN_LIST": [ + { + "name": "AZURE", + "mtu": "1024", + "small_packet_percentage": "NaN" + } + ] + } + } + }, + "LOSSLESS_TRAFFIC_PATTERN_LACK_SMALL_PACKET_PERCENTAGE_TEST": { + "sonic-lossless-traffic-pattern:sonic-lossless-traffic-pattern": { + "sonic-lossless-traffic-pattern:LOSSLESS_TRAFFIC_PATTERN": { + "LOSSLESS_TRAFFIC_PATTERN_LIST": [ + { + "name": "AZURE", + "mtu": "1024" + } + ] + } + } + } +} diff --git a/src/sonic-yang-models/yang-models/sonic-default-lossless-buffer-parameter.yang b/src/sonic-yang-models/yang-models/sonic-default-lossless-buffer-parameter.yang new file mode 100644 index 000000000000..6f98d9a922b7 --- /dev/null +++ b/src/sonic-yang-models/yang-models/sonic-default-lossless-buffer-parameter.yang @@ -0,0 +1,53 @@ +module sonic-default-lossless-buffer-parameter { + + yang-version 1.1; + + namespace "http://github.com/Azure/sonic-default-lossless-buffer-parameter"; + + prefix default-lossless-buffer-parameter; + + description "DEFAULT_LOSSLESS_BUFFER_PARAMETER YANG module for SONiC OS"; + + revision 2022-05-31 { + description "Initial version"; + } + + container sonic-default-lossless-buffer-parameter { + container DEFAULT_LOSSLESS_BUFFER_PARAMETER { + + description "DEFAULT_LOSSLESS_BUFFER_PARAMETER part of config_db.json"; + + list DEFAULT_LOSSLESS_BUFFER_PARAMETER_LIST { + key "name"; + + leaf name { + type string { + pattern '[a-zA-Z0-9]{1}([-a-zA-Z0-9_]{0,31})' { + error-message "Invalid default lossless buffer parameter list name."; + error-app-tag default-lossless-buffer-parameter-invalid-list-name; + } + length 1..32 { + error-message "Invalid length for the default lossless buffer parameter list name."; + error-app-tag default-lossless-buffer-parameter-invalid-list-name-length; + } + } + } + + leaf default_dynamic_th { + type int8 { + range -8..7 { + error-message "Invalid default dynamic_th which should be a number in the range [-8, 7]."; + } + } + mandatory true; + description "The default dynamic_th used in lossless buffer profile generated dynamically"; + } + + leaf over_subscribe_ratio { + type uint16; + description "The over subscribe ratio of shared headroom pool"; + } + } + } + } +} diff --git a/src/sonic-yang-models/yang-models/sonic-lossless-traffic-pattern.yang b/src/sonic-yang-models/yang-models/sonic-lossless-traffic-pattern.yang new file mode 100644 index 000000000000..6901dc01e007 --- /dev/null +++ b/src/sonic-yang-models/yang-models/sonic-lossless-traffic-pattern.yang @@ -0,0 +1,58 @@ +module sonic-lossless-traffic-pattern { + + yang-version 1.1; + + namespace "http://github.com/Azure/sonic-lossless-traffic-pattern"; + + prefix lossless-traffic-pattern; + + description "LOSSLESS_TRAFFIC_PATTERN YANG module for SONiC OS"; + + revision 2022-05-31 { + description "Initial version"; + } + + container sonic-lossless-traffic-pattern { + container LOSSLESS_TRAFFIC_PATTERN { + + description "LOSSLESS_TRAFFIC_PATTERN part of config_db.json"; + + list LOSSLESS_TRAFFIC_PATTERN_LIST { + key "name"; + + leaf name { + type string { + pattern '[a-zA-Z0-9]{1}([-a-zA-Z0-9_]{0,31})' { + error-message "Invalid lossless traffic pattern list name."; + error-app-tag lossless-traffic-pattern-invalid-list-name; + } + length 1..32 { + error-message "Invalid length for the lossless traffic pattern list name."; + error-app-tag lossless-traffic-pattern-invalid-list-name-length; + } + } + } + + leaf mtu { + type uint16 { + range 1..9216 { + error-message "Invaild MTU which should be in [1, 9216]."; + } + } + mandatory true; + description "The maximum packet size of a lossless packet"; + } + + leaf small_packet_percentage { + type uint8 { + range 0..100 { + error-message "Invalid small packets percentage which should be in [0, 100]."; + } + } + mandatory true; + description "The percentage of small packets which is used to calculate the headroom size"; + } + } + } + } +} From ae66e14f4284f1bdd93a5bd0d60764e307cbe85b Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Mon, 27 Jun 2022 08:35:31 -0700 Subject: [PATCH 059/259] [202205][swss][swss-common][linkmgrd] advance submodule head (#11254) swss: * ad2d0ad 2022-06-24 | [PFC_WD] Avoid applying ZeroBuffer Profiles to ingress PG when a PFC storm is detected (#2304) (HEAD -> 202205) [Vivek R] * ef75554 2022-06-25 | [swssconfig] Optimize performance of swssconfig (#2336) [Junchao-Mellanox] * d9e9ba8 2022-06-24 | [fdborch] fix heap-use-after-free in clearFdbEntry() (#2353) [Yakiv Huryk] * 585a69b 2022-06-24 | Create ACL table fails due to incorrect check for supported ACL actions #11235 (#2351) [Ravindranath C K] * 0d19560 2022-06-24 | [macsec] Refactor the logic of macsec name map (#2348) [Junhua Zhai] * 111dfc2 2022-06-23 | [macsec] Update macsec flex counter (#2338) (HEAD -> 202205, github/202205) [Junhua Zhai] swss-common: * 0213d55 2022-06-23 | [portcounter] Check if counter ID exists before arithmetic operation (#632) (HEAD -> 202205, github/202205) [Junhua Zhai] * c21c47e 2022-06-14 | [counter] Add counter table (#622) [Junhua Zhai] utilities: * 430cd65 2022-06-23 | [202205] [generate dump] Move the Core/Log collection to the End of process Execution and removed default timeout (#2230) (github/202205) [Vivek R] linkmgrd: * 59334be 2022-06-24 | Remove exception throwing when initializing missing loopback interface (#90) (HEAD -> 202205) [Jing Zhang] Signed-off-by: Ying Xie --- src/linkmgrd | 2 +- src/sonic-swss | 2 +- src/sonic-swss-common | 2 +- src/sonic-utilities | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/linkmgrd b/src/linkmgrd index d6518dd70326..59334bee6dd7 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit d6518dd70326c95c58b368164021034615347c5c +Subproject commit 59334bee6dd7da5db5565ba51abc011ed94fe7b9 diff --git a/src/sonic-swss b/src/sonic-swss index c15da3b3013b..ad2d0adacf1c 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit c15da3b3013b0658498b378a935d64ce96eb0fff +Subproject commit ad2d0adacf1c1e066559d240b24f5896ad79aee7 diff --git a/src/sonic-swss-common b/src/sonic-swss-common index 7ae22be4c1bf..0213d558c293 160000 --- a/src/sonic-swss-common +++ b/src/sonic-swss-common @@ -1 +1 @@ -Subproject commit 7ae22be4c1bf8dd7c5f697cdf2faf7317a02ba14 +Subproject commit 0213d558c293766a4dc6677292402f7c96f5f508 diff --git a/src/sonic-utilities b/src/sonic-utilities index 785508d9b6bb..430cd65ec6fe 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 785508d9b6bbef0e5c8c114fa422d8276afd5dd8 +Subproject commit 430cd65ec6fe4ffc0a57857609cff2bc01019b69 From e2bee174e1893f3485548ea338d94dda06c31727 Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Tue, 21 Jun 2022 13:03:55 +0800 Subject: [PATCH 060/259] [Build]: Support to use symbol links for lazy installation targets to reduce the image size (#10923) Why I did it Support to use symbol links in platform folder to reduce the image size. The current solution is to copy each lazy installation targets (xxx.deb files) to each of the folders in the platform folder. The size will keep growing when more and more packages added in the platform folder. For cisco-8000 as an example, the size will be up to 2G, while most of them are duplicate packages in the platform folder. How I did it Create a new folder in platform/common, all the deb packages are copied to the folder, any other folders where use the packages are the symbol links to the common folder. Why platform.tar? We have implemented a patch for it, see #10775, but the problem is the the onie use really old unzip version, cannot support the symbol links. The current solution is similar to the PR 10775, but make the platform folder into a tar package, which can be supported by onie. During the installation, the package.tar will be extracted to the original folder and removed. --- build_debian.sh | 2 +- files/Aboot/boot0.j2 | 7 ++++++- files/build_templates/sonic_debian_extension.j2 | 4 +++- installer/arm64/install.sh | 6 ++++-- installer/armhf/install.sh | 6 ++++-- installer/x86_64/install.sh | 7 +++++-- 6 files changed, 23 insertions(+), 9 deletions(-) diff --git a/build_debian.sh b/build_debian.sh index dbf39949c329..a4c1fddca1b8 100755 --- a/build_debian.sh +++ b/build_debian.sh @@ -647,5 +647,5 @@ fi pushd $FILESYSTEM_ROOT && sudo tar czf $OLDPWD/$FILESYSTEM_DOCKERFS -C ${DOCKERFS_PATH}var/lib/docker .; popd ## Compress together with /boot, /var/lib/docker and $PLATFORM_DIR as an installer payload zip file -pushd $FILESYSTEM_ROOT && sudo zip $OLDPWD/$ONIE_INSTALLER_PAYLOAD -r boot/ $PLATFORM_DIR/; popd +pushd $FILESYSTEM_ROOT && sudo tar czf platform.tar.gz -C $PLATFORM_DIR . && sudo zip -n .gz $OLDPWD/$ONIE_INSTALLER_PAYLOAD -r boot/ platform.tar.gz; popd sudo zip -g -n .squashfs:.gz $ONIE_INSTALLER_PAYLOAD $FILESYSTEM_SQUASHFS $FILESYSTEM_DOCKERFS diff --git a/files/Aboot/boot0.j2 b/files/Aboot/boot0.j2 index ad7540df0946..e6dac1101fb3 100644 --- a/files/Aboot/boot0.j2 +++ b/files/Aboot/boot0.j2 @@ -348,7 +348,12 @@ extract_image() { info "Extracting swi content" ## Unzip the image except boot0 and dockerfs archive - unzip -oq "$swipath" -x boot0 "$dockerfs" -d "$image_path" + unzip -oq "$swipath" -x boot0 "$dockerfs" "platform.tar.gz" -d "$image_path" + + ## Extract the platform.tar.gz + info "Extracting platform.tar.gz" + mkdir -p "$image_path/platform" + unzip -oqp "$swipath" "platform.tar.gz" | tar xzf - -C "$image_path/platform" $TAR_EXTRA_OPTION ## detect rootfs type local mountstr="$(grep " $target_path " /proc/mounts)" diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 659921d50aa9..185184fb91d5 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -610,7 +610,9 @@ sudo LANG=C chroot $FILESYSTEM_ROOT depmod -a {{kversion}} sudo dpkg --root=$FILESYSTEM_ROOT -i {{deb}} || sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f --download-only sudo mkdir -p $FILESYSTEM_ROOT/$PLATFORM_DIR/{{dev}} -sudo cp {{ deb }} $FILESYSTEM_ROOT/$PLATFORM_DIR/{{dev}}/ +sudo mkdir -p $FILESYSTEM_ROOT/$PLATFORM_DIR/common +sudo cp {{ deb }} $FILESYSTEM_ROOT/$PLATFORM_DIR/common/ +sudo ln -sf "../common/{{ debfilename }}" "$FILESYSTEM_ROOT/$PLATFORM_DIR/{{dev}}/{{ debfilename }}" for f in $(find $FILESYSTEM_ROOT/var/cache/apt/archives -name "*.deb"); do sudo mv $f $FILESYSTEM_ROOT/$PLATFORM_DIR/{{dev}}/ done diff --git a/installer/arm64/install.sh b/installer/arm64/install.sh index 445b2007faeb..54ce1dda934e 100755 --- a/installer/arm64/install.sh +++ b/installer/arm64/install.sh @@ -155,9 +155,9 @@ fi # Decompress the file for the file system directly to the partition if [ x"$docker_inram" = x"on" ]; then # when disk is small, keep dockerfs.tar.gz in disk, expand it into ramfs during initrd - unzip -o $ONIE_INSTALLER_PAYLOAD -d $demo_mnt/$image_dir + unzip -o $ONIE_INSTALLER_PAYLOAD -x "platform.tar.gz" -d $demo_mnt/$image_dir else - unzip -o $ONIE_INSTALLER_PAYLOAD -x "$FILESYSTEM_DOCKERFS" -d $demo_mnt/$image_dir + unzip -o $ONIE_INSTALLER_PAYLOAD -x "$FILESYSTEM_DOCKERFS" "platform.tar.gz" -d $demo_mnt/$image_dir if [ "$install_env" = "onie" ]; then TAR_EXTRA_OPTION="--numeric-owner" @@ -168,6 +168,8 @@ else unzip -op $ONIE_INSTALLER_PAYLOAD "$FILESYSTEM_DOCKERFS" | tar xz $TAR_EXTRA_OPTION -f - -C $demo_mnt/$image_dir/$DOCKERFS_DIR fi +mkdir -p $demo_mnt/$image_dir/platform +unzip -op $ONIE_INSTALLER_PAYLOAD "platform.tar.gz" | tar xz $TAR_EXTRA_OPTION -f - -C $demo_mnt/$image_dir/platform if [ "$install_env" = "onie" ]; then # Store machine description in target file system diff --git a/installer/armhf/install.sh b/installer/armhf/install.sh index 0dd6e48a08e7..4ced27f48fa6 100755 --- a/installer/armhf/install.sh +++ b/installer/armhf/install.sh @@ -155,9 +155,9 @@ fi # Decompress the file for the file system directly to the partition if [ x"$docker_inram" = x"on" ]; then # when disk is small, keep dockerfs.tar.gz in disk, expand it into ramfs during initrd - unzip -o $ONIE_INSTALLER_PAYLOAD -d $demo_mnt/$image_dir + unzip -o $ONIE_INSTALLER_PAYLOAD -x "platform.tar.gz" -d $demo_mnt/$image_dir else - unzip -o $ONIE_INSTALLER_PAYLOAD -x "$FILESYSTEM_DOCKERFS" -d $demo_mnt/$image_dir + unzip -o $ONIE_INSTALLER_PAYLOAD -x "$FILESYSTEM_DOCKERFS" "platform.tar.gz" -d $demo_mnt/$image_dir if [ "$install_env" = "onie" ]; then TAR_EXTRA_OPTION="--numeric-owner" @@ -168,6 +168,8 @@ else unzip -op $ONIE_INSTALLER_PAYLOAD "$FILESYSTEM_DOCKERFS" | tar xz $TAR_EXTRA_OPTION -f - -C $demo_mnt/$image_dir/$DOCKERFS_DIR fi +mkdir -p $demo_mnt/$image_dir/platform +unzip -op $ONIE_INSTALLER_PAYLOAD "platform.tar.gz" | tar xz $TAR_EXTRA_OPTION -f - -C $demo_mnt/$image_dir/platform if [ "$install_env" = "onie" ]; then # Store machine description in target file system diff --git a/installer/x86_64/install.sh b/installer/x86_64/install.sh index f41a671543e8..926c54683a9e 100755 --- a/installer/x86_64/install.sh +++ b/installer/x86_64/install.sh @@ -536,9 +536,9 @@ fi # Decompress the file for the file system directly to the partition if [ x"$docker_inram" = x"on" ]; then # when disk is small, keep dockerfs.tar.gz in disk, expand it into ramfs during initrd - unzip -o $ONIE_INSTALLER_PAYLOAD -d $demo_mnt/$image_dir + unzip -o $ONIE_INSTALLER_PAYLOAD -x "platform.tar.gz" -d $demo_mnt/$image_dir else - unzip -o $ONIE_INSTALLER_PAYLOAD -x "$FILESYSTEM_DOCKERFS" -d $demo_mnt/$image_dir + unzip -o $ONIE_INSTALLER_PAYLOAD -x "$FILESYSTEM_DOCKERFS" "platform.tar.gz" -d $demo_mnt/$image_dir if [ "$install_env" = "onie" ]; then TAR_EXTRA_OPTION="--numeric-owner" @@ -549,6 +549,9 @@ else unzip -op $ONIE_INSTALLER_PAYLOAD "$FILESYSTEM_DOCKERFS" | tar xz $TAR_EXTRA_OPTION -f - -C $demo_mnt/$image_dir/$DOCKERFS_DIR fi +mkdir -p $demo_mnt/$image_dir/platform +unzip -op $ONIE_INSTALLER_PAYLOAD "platform.tar.gz" | tar xz $TAR_EXTRA_OPTION -f - -C $demo_mnt/$image_dir/platform + if [ "$install_env" = "onie" ]; then # Store machine description in target file system if [ -f /etc/machine-build.conf ]; then From 68f6833d8158e15b640f08375e5902642b07da98 Mon Sep 17 00:00:00 2001 From: Jing Kan <672454911@qq.com> Date: Tue, 28 Jun 2022 20:14:53 +0800 Subject: [PATCH 061/259] [minigraph] Support parse IPv6 in device_desc.xml (#11095) Signed-off-by: Jing Kan jika@microsoft.com --- src/sonic-config-engine/minigraph.py | 27 +++++++++++++------ .../simple-sample-device-desc-ipv6-only.xml | 11 ++++++++ .../tests/simple-sample-device-desc.xml | 11 ++++++++ .../tests/test_minigraph_case.py | 21 +++++++++++++-- 4 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 src/sonic-config-engine/tests/simple-sample-device-desc-ipv6-only.xml create mode 100644 src/sonic-config-engine/tests/simple-sample-device-desc.xml diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index b1ad117d255c..15d6682359f3 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -87,6 +87,7 @@ def parse_device(device): lo_prefix = None lo_prefix_v6 = None mgmt_prefix = None + mgmt_prefix_v6 = None d_type = None # don't shadow type() hwsku = None name = None @@ -101,6 +102,8 @@ def parse_device(device): lo_prefix_v6 = node.find(str(QName(ns2, "IPPrefix"))).text elif node.tag == str(QName(ns, "ManagementAddress")): mgmt_prefix = node.find(str(QName(ns2, "IPPrefix"))).text + elif node.tag == str(QName(ns, "ManagementAddressV6")): + mgmt_prefix_v6 = node.find(str(QName(ns2, "IPPrefix"))).text elif node.tag == str(QName(ns, "Hostname")): name = node.text elif node.tag == str(QName(ns, "HwSku")): @@ -117,7 +120,7 @@ def parse_device(device): if d_type is None and str(QName(ns3, "type")) in device.attrib: d_type = device.attrib[str(QName(ns3, "type"))] - return (lo_prefix, lo_prefix_v6, mgmt_prefix, name, hwsku, d_type, deployment_id, cluster, d_subtype) + return (lo_prefix, lo_prefix_v6, mgmt_prefix, mgmt_prefix_v6, name, hwsku, d_type, deployment_id, cluster, d_subtype) def calculate_lcm_for_ecmp (nhdevices_bank_map, nhip_bank_map): @@ -254,7 +257,7 @@ def parse_png(png, hname, dpg_ecmp_content = None): if child.tag == str(QName(ns, "Devices")): for device in child.findall(str(QName(ns, "Device"))): - (lo_prefix, lo_prefix_v6, mgmt_prefix, name, hwsku, d_type, deployment_id, cluster, d_subtype) = parse_device(device) + (lo_prefix, lo_prefix_v6, mgmt_prefix, mgmt_prefix_v6, name, hwsku, d_type, deployment_id, cluster, d_subtype) = parse_device(device) device_data = {'lo_addr': lo_prefix, 'type': d_type, 'mgmt_addr': mgmt_prefix, 'hwsku': hwsku} if cluster: device_data['cluster'] = cluster @@ -387,7 +390,7 @@ def parse_asic_png(png, asic_name, hostname): if child.tag == str(QName(ns, "Devices")): for device in child.findall(str(QName(ns, "Device"))): - (lo_prefix, lo_prefix_v6, mgmt_prefix, name, hwsku, d_type, deployment_id, cluster, _) = parse_device(device) + (lo_prefix, lo_prefix_v6, mgmt_prefix, mgmt_prefix_v6, name, hwsku, d_type, deployment_id, cluster, _) = parse_device(device) device_data = {'lo_addr': lo_prefix, 'type': d_type, 'mgmt_addr': mgmt_prefix, 'hwsku': hwsku } if cluster: device_data['cluster'] = cluster @@ -1836,7 +1839,7 @@ def get_mux_cable_entries(mux_cable_ports, neighbors, devices): def parse_device_desc_xml(filename): root = ET.parse(filename).getroot() - (lo_prefix, lo_prefix_v6, mgmt_prefix, hostname, hwsku, d_type, _, _, _) = parse_device(root) + (lo_prefix, lo_prefix_v6, mgmt_prefix, mgmt_prefix_v6, hostname, hwsku, d_type, _, _, _) = parse_device(root) results = {} results['DEVICE_METADATA'] = {'localhost': { @@ -1848,10 +1851,18 @@ def parse_device_desc_xml(filename): if lo_prefix_v6: results['LOOPBACK_INTERFACE'] = {('lo_v6', lo_prefix_v6): {}} - mgmt_intf = {} - mgmtipn = ipaddress.ip_network(UNICODE_TYPE(mgmt_prefix), False) - gwaddr = ipaddress.ip_address((next(mgmtipn.hosts()))) - results['MGMT_INTERFACE'] = {('eth0', mgmt_prefix): {'gwaddr': gwaddr}} + results['MGMT_INTERFACE'] = {} + if mgmt_prefix: + mgmtipn = ipaddress.ip_network(UNICODE_TYPE(mgmt_prefix), False) + if mgmtipn != ipaddress.ip_network(u'0.0.0.0/0', False): + gwaddr = ipaddress.ip_address((next(mgmtipn.hosts()))) + results['MGMT_INTERFACE'].update({('eth0', mgmt_prefix): {'gwaddr': gwaddr}}) + + if mgmt_prefix_v6: + mgmtipn_v6 = ipaddress.ip_network(UNICODE_TYPE(mgmt_prefix_v6), False) + if mgmtipn != ipaddress.ip_network(u'::/0', False): + gwaddr_v6 = ipaddress.ip_address((next(mgmtipn_v6.hosts()))) + results['MGMT_INTERFACE'].update({('eth0', mgmt_prefix_v6): {'gwaddr': gwaddr_v6}}) return results diff --git a/src/sonic-config-engine/tests/simple-sample-device-desc-ipv6-only.xml b/src/sonic-config-engine/tests/simple-sample-device-desc-ipv6-only.xml new file mode 100644 index 000000000000..c35d2354a900 --- /dev/null +++ b/src/sonic-config-engine/tests/simple-sample-device-desc-ipv6-only.xml @@ -0,0 +1,11 @@ + + switch-t0 + Force10-S6000 + AAA00PrdStr00 + + 0.0.0.0/0 + + + FC00:1::32/64 + + diff --git a/src/sonic-config-engine/tests/simple-sample-device-desc.xml b/src/sonic-config-engine/tests/simple-sample-device-desc.xml new file mode 100644 index 000000000000..72941dfcd9b6 --- /dev/null +++ b/src/sonic-config-engine/tests/simple-sample-device-desc.xml @@ -0,0 +1,11 @@ + + switch-t0 + Force10-S6000 + AAA00PrdStr00 + + 10.0.0.100/24 + + + FC00:1::32/64 + + diff --git a/src/sonic-config-engine/tests/test_minigraph_case.py b/src/sonic-config-engine/tests/test_minigraph_case.py index b4756219399d..16ad019032f2 100644 --- a/src/sonic-config-engine/tests/test_minigraph_case.py +++ b/src/sonic-config-engine/tests/test_minigraph_case.py @@ -1,6 +1,7 @@ import json import os import subprocess +import ipaddress import tests.common_utils as utils import minigraph @@ -21,6 +22,8 @@ def setUp(self): self.sample_simple_graph = os.path.join(self.test_dir, 'simple-sample-graph.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.sample_simple_device_desc = os.path.join(self.test_dir, 'simple-sample-device-desc.xml') + self.sample_simple_device_desc_ipv6_only = os.path.join(self.test_dir, 'simple-sample-device-desc-ipv6-only.xml') self.port_config = os.path.join(self.test_dir, 't0-sample-port-config.ini') def run_script(self, argument, check_stderr=False): @@ -463,5 +466,19 @@ def test_minigraph_mirror_dscp(self): expected_ports.sort() ) - - + def test_parse_device_desc_xml_mgmt_interface(self): + # Regular device_desc.xml with both IPv4 and IPv6 mgmt address + result = minigraph.parse_device_desc_xml(self.sample_simple_device_desc) + mgmt_intf = result['MGMT_INTERFACE'] + self.assertEqual(len(mgmt_intf.keys()), 2) + self.assertTrue(('eth0', '10.0.0.100/24') in mgmt_intf.keys()) + self.assertTrue(('eth0', 'FC00:1::32/64') in mgmt_intf.keys()) + self.assertTrue(ipaddress.ip_address(u'10.0.0.1') == mgmt_intf[('eth0', '10.0.0.100/24')]['gwaddr']) + self.assertTrue(ipaddress.ip_address(u'fc00:1::1') == mgmt_intf[('eth0', 'FC00:1::32/64')]['gwaddr']) + + # Special device_desc.xml with IPv6 mgmt address only + result = minigraph.parse_device_desc_xml(self.sample_simple_device_desc_ipv6_only) + mgmt_intf = result['MGMT_INTERFACE'] + self.assertEqual(len(mgmt_intf.keys()), 1) + self.assertTrue(('eth0', 'FC00:1::32/64') in mgmt_intf.keys()) + self.assertTrue(ipaddress.ip_address(u'fc00:1::1') == mgmt_intf[('eth0', 'FC00:1::32/64')]['gwaddr']) From d7db8a285db81555c7a6e76a1f53c4fce7741628 Mon Sep 17 00:00:00 2001 From: judyjoseph <53951155+judyjoseph@users.noreply.github.com> Date: Fri, 24 Jun 2022 10:32:02 -0700 Subject: [PATCH 062/259] Update include_macsec flag if type is SpineRouter (#11141) Add the support to enable macsec when type is SpineRouter --- files/build_templates/init_cfg.json.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/build_templates/init_cfg.json.j2 b/files/build_templates/init_cfg.json.j2 index a197c22a9020..0ea859e6b6c3 100644 --- a/files/build_templates/init_cfg.json.j2 +++ b/files/build_templates/init_cfg.json.j2 @@ -46,7 +46,7 @@ {%- if include_p4rt == "y" %}{% do features.append(("p4rt", "enabled", false, "enabled")) %}{% endif %} {%- if include_restapi == "y" %}{% do features.append(("restapi", "enabled", false, "enabled")) %}{% endif %} {%- if include_sflow == "y" %}{% do features.append(("sflow", "disabled", false, "enabled")) %}{% endif %} -{%- if include_macsec == "y" %}{% do features.append(("macsec", "disabled", false, "enabled")) %}{% endif %} +{%- if include_macsec == "y" %}{% do features.append(("macsec", "{% if 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'SpineRouter' %}enabled{% else %}disabled{% endif %}", false, "enabled")) %}{% endif %} {%- if include_system_telemetry == "y" %}{% do features.append(("telemetry", "enabled", true, "enabled")) %}{% endif %} "FEATURE": { {# has_timer field if set, will start the feature systemd .timer unit instead of .service unit #} From 7d832d1a8a3d67462cd10d2fcc1afd5ba6098308 Mon Sep 17 00:00:00 2001 From: Ze Gan Date: Tue, 28 Jun 2022 09:29:59 +0800 Subject: [PATCH 063/259] [submodule]: Update submodule for wpa-supplicant (#11264) 3f43852b8 [sonic_operators.cpp]: Increasing select timeout (#55) a1142e251 [sonic_operators.cpp] Update sonic_db_manager::get_counter (#56) 1069d2dd4 [sonic_operators.cpp]: Fixbug wait with false positive to return success (#54) Signed-off-by: Ze Gan --- src/wpasupplicant/sonic-wpa-supplicant | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wpasupplicant/sonic-wpa-supplicant b/src/wpasupplicant/sonic-wpa-supplicant index 1069d2dd4f71..3f43852b8ccd 160000 --- a/src/wpasupplicant/sonic-wpa-supplicant +++ b/src/wpasupplicant/sonic-wpa-supplicant @@ -1 +1 @@ -Subproject commit 1069d2dd4f7108838246abe2b8f693180c972acd +Subproject commit 3f43852b8ccd5d2a0877c86b82d227893e4566d4 From 97cb6137291285fec621705fb9c76d7e903852b2 Mon Sep 17 00:00:00 2001 From: Yakiv Huryk <62013282+Yakiv-Huryk@users.noreply.github.com> Date: Tue, 28 Jun 2022 18:45:52 +0300 Subject: [PATCH 064/259] [asan] add print_suppressions=0 to ASAN configs (#11252) - Why I did it To provide an ability to suppress ASAN false positives and have a clean ASAN report for docker-sonic-vs/mlnx-syncd/orchagent docker - How I did it Added the "print_suppressions=0" to ASAN configs. - How to verify it add a suppression to some ASAN-enabled component (the suppression should catch some leak) build with ENABLE_ASAN=y run a test and see that the ASAN report is empty instead of having the suppression summary Signed-off-by: Yakiv Huryk --- dockers/docker-orchagent/supervisord.conf.j2 | 31 +++++++------- .../docker-syncd-mlnx/supervisord.conf.j2 | 3 +- .../vs/docker-sonic-vs/supervisord.conf.j2 | 41 ++++++++++--------- 3 files changed, 39 insertions(+), 36 deletions(-) diff --git a/dockers/docker-orchagent/supervisord.conf.j2 b/dockers/docker-orchagent/supervisord.conf.j2 index 7cd31a113223..9751a58bb833 100644 --- a/dockers/docker-orchagent/supervisord.conf.j2 +++ b/dockers/docker-orchagent/supervisord.conf.j2 @@ -36,6 +36,7 @@ dependent_startup=true {% set orchagent_dependent_startup_wait_for = "rsyslogd:running" %} {%- endif %} {%- endif %} +{% set asan_extra_options = ':print_suppressions=0' %} {% if is_fabric_asic == 0 %} [program:gearsyncd] @@ -50,7 +51,7 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=rsyslogd:running {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/gearsyncd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/gearsyncd-asan.log{{ asan_extra_options }}" {% endif %} {%- endif %} @@ -65,7 +66,7 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=rsyslogd:running {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/portsyncd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/portsyncd-asan.log{{ asan_extra_options }}" {% endif %} {%- endif %} @@ -79,7 +80,7 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for={{ orchagent_dependent_startup_wait_for }} {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/orchagent-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/orchagent-asan.log{{ asan_extra_options }}" {% endif %} [program:swssconfig] @@ -94,7 +95,7 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=orchagent:running {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/swssconfig-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/swssconfig-asan.log{{ asan_extra_options }}" {% endif %} {% if is_fabric_asic == 0 %} @@ -124,7 +125,7 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=orchagent:running {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/coppmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/coppmgrd-asan.log{{ asan_extra_options }}" {% endif %} {%- endif %} @@ -139,7 +140,7 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=swssconfig:exited {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/neighsyncd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/neighsyncd-asan.log{{ asan_extra_options }}" {% endif %} {%- endif %} @@ -154,7 +155,7 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=swssconfig:exited {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/vlanmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/vlanmgrd-asan.log{{ asan_extra_options }}" {% endif %} {%- endif %} @@ -169,7 +170,7 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=swssconfig:exited {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/intfmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/intfmgrd-asan.log{{ asan_extra_options }}" {% endif %} {%- endif %} @@ -184,7 +185,7 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=swssconfig:exited {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/portmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/portmgrd-asan.log{{ asan_extra_options }}" {% endif %} {%- endif %} @@ -199,7 +200,7 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=swssconfig:exited {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/buffermgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/buffermgrd-asan.log{{ asan_extra_options }}" {% endif %} {%- endif %} @@ -214,7 +215,7 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=swssconfig:exited {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/vrfmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/vrfmgrd-asan.log{{ asan_extra_options }}" {% endif %} {%- endif %} @@ -229,7 +230,7 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=swssconfig:exited {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/nbrmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/nbrmgrd-asan.log{{ asan_extra_options }}" {% endif %} {%- endif %} @@ -244,7 +245,7 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=swssconfig:exited {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/vxlanmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/vxlanmgrd-asan.log{{ asan_extra_options }}" {% endif %} {%- endif %} @@ -259,7 +260,7 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=swssconfig:exited {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/tunnelmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/tunnelmgrd-asan.log{{ asan_extra_options }}" {% endif %} {%- endif %} @@ -284,7 +285,7 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=swssconfig:exited {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/fdbsyncd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/fdbsyncd-asan.log{{ asan_extra_options }}" {% endif %} {%- endif %} diff --git a/platform/mellanox/docker-syncd-mlnx/supervisord.conf.j2 b/platform/mellanox/docker-syncd-mlnx/supervisord.conf.j2 index cc07096b20c6..a6c7e8121ab8 100644 --- a/platform/mellanox/docker-syncd-mlnx/supervisord.conf.j2 +++ b/platform/mellanox/docker-syncd-mlnx/supervisord.conf.j2 @@ -1,3 +1,4 @@ +{% set asan_extra_options = ':print_suppressions=0' %} [supervisord] logfile_maxbytes=1MB logfile_backups=2 @@ -38,5 +39,5 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=rsyslogd:running {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/syncd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/syncd-asan.log{{ asan_extra_options }}" {% endif %} diff --git a/platform/vs/docker-sonic-vs/supervisord.conf.j2 b/platform/vs/docker-sonic-vs/supervisord.conf.j2 index a49f33866edf..ba63d2b77dda 100644 --- a/platform/vs/docker-sonic-vs/supervisord.conf.j2 +++ b/platform/vs/docker-sonic-vs/supervisord.conf.j2 @@ -1,3 +1,4 @@ +{% set asan_extra_options = ':print_suppressions=0' %} [supervisord] logfile_maxbytes=1MB logfile_backups=2 @@ -43,7 +44,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/syncd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/syncd-asan.log{{ asan_extra_options }}" {% endif %} [program:gbsyncd] @@ -71,7 +72,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/portsyncd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/portsyncd-asan.log{{ asan_extra_options }}" {% endif %} [program:orchagent] @@ -82,7 +83,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/orchagent-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/orchagent-asan.log{{ asan_extra_options }}" {% endif %} [program:coppmgrd] @@ -93,7 +94,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/coppmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/coppmgrd-asan.log{{ asan_extra_options }}" {% endif %} [program:neighsyncd] @@ -104,7 +105,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/neighsyncd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/neighsyncd-asan.log{{ asan_extra_options }}" {% endif %} [program:teamsyncd] @@ -115,7 +116,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/teamsyncd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/teamsyncd-asan.log{{ asan_extra_options }}" {% endif %} [program:vlanmgrd] @@ -126,7 +127,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/vlanmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/vlanmgrd-asan.log{{ asan_extra_options }}" {% endif %} [program:intfmgrd] @@ -137,7 +138,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/intfmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/intfmgrd-asan.log{{ asan_extra_options }}" {% endif %} [program:portmgrd] @@ -148,7 +149,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/portmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/portmgrd-asan.log{{ asan_extra_options }}" {% endif %} [program:teammgrd] @@ -159,7 +160,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/teammgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/teammgrd-asan.log{{ asan_extra_options }}" {% endif %} [program:zebra] @@ -194,7 +195,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/fpmsyncd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/fpmsyncd-asan.log{{ asan_extra_options }}" {% endif %} [program:arp_update] @@ -213,7 +214,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/buffermgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/buffermgrd-asan.log{{ asan_extra_options }}" {% endif %} [program:vrfmgrd] @@ -224,7 +225,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/vrfmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/vrfmgrd-asan.log{{ asan_extra_options }}" {% endif %} [program:restore_neighbors] @@ -245,7 +246,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/nbrmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/nbrmgrd-asan.log{{ asan_extra_options }}" {% endif %} [program:vxlanmgrd] @@ -256,7 +257,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/vxlanmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/vxlanmgrd-asan.log{{ asan_extra_options }}" {% endif %} [program:sflowmgrd] @@ -267,7 +268,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/sflowmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/sflowmgrd-asan.log{{ asan_extra_options }}" {% endif %} [program:natmgrd] @@ -278,7 +279,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/natmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/natmgrd-asan.log{{ asan_extra_options }}" {% endif %} [program:natsyncd] @@ -289,7 +290,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/natsyncd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/natsyncd-asan.log{{ asan_extra_options }}" {% endif %} [program:fdbsyncd] @@ -300,7 +301,7 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/fdbsyncd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/fdbsyncd-asan.log{{ asan_extra_options }}" {% endif %} [program:tunnelmgrd] @@ -311,5 +312,5 @@ autorestart=false stdout_logfile=syslog stderr_logfile=syslog {% if ENABLE_ASAN == "y" %} -environment=ASAN_OPTIONS="log_path=/var/log/asan/tunnelmgrd-asan.log" +environment=ASAN_OPTIONS="log_path=/var/log/asan/tunnelmgrd-asan.log{{ asan_extra_options }}" {% endif %} From 097e315f0866c0599d1fcb39a34ea38f32b8fe31 Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox <57339448+Junchao-Mellanox@users.noreply.github.com> Date: Tue, 28 Jun 2022 23:48:10 +0800 Subject: [PATCH 065/259] =?UTF-8?q?[system-health]=20Fix=20error=20log=20s?= =?UTF-8?q?ystem=5Fservice'state'=20while=20doing=20confi=E2=80=A6=20(#112?= =?UTF-8?q?25)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Why I did it While doing config reload, FEATURE table may be removed and re-add. During this process, updating FEATURE table is not atomic. It could be that the FEATURE table has entry, but each entry has no field. This PR introduces a retry mechanism to avoid this. - How I did it Introduces a retry mechanism to avoid this. - How to verify it New unit test added to verify the flow as well as running some manual test. --- .../health_checker/sysmonitor.py | 43 ++++++++++++++++--- src/system-health/tests/test_system_health.py | 20 +++++++++ 2 files changed, 57 insertions(+), 6 deletions(-) diff --git a/src/system-health/health_checker/sysmonitor.py b/src/system-health/health_checker/sysmonitor.py index a4058f8c09d3..e69d289fc537 100755 --- a/src/system-health/health_checker/sysmonitor.py +++ b/src/system-health/health_checker/sysmonitor.py @@ -2,6 +2,7 @@ import os import sys +import time import glob import multiprocessing from datetime import datetime @@ -145,12 +146,7 @@ def get_all_service_list(self): dir_list += [os.path.basename(i) for i in glob.glob('{}/*.service'.format(path))] #add the enabled docker services from config db feature table - feature_table = self.config_db.get_table("FEATURE") - for srv in feature_table.keys(): - if feature_table[srv]["state"] not in ["disabled", "always_disabled"]: - srvext = srv + ".service" - if srvext not in dir_list: - dir_list.append(srvext) + self.get_service_from_feature_table(dir_list) self.config.load_config() if self.config and self.config.ignore_services: @@ -161,6 +157,41 @@ def get_all_service_list(self): dir_list.sort() return dir_list + def get_service_from_feature_table(self, dir_list): + """Get service from CONFIG DB FEATURE table. During "config reload" command, filling FEATURE table + is not an atomic operation, sonic-cfggen do it with two steps: + 1. Add an empty table entry to CONFIG DB + 2. Add all fields to the table + + So, if system health read db on middle of step 1 and step 2, it might read invalid data. A retry + mechanism is here to avoid such issue. + + Args: + dir_list (list): service list + """ + max_retry = 3 + retry_delay = 1 + success = True + + while max_retry > 0: + success = True + feature_table = self.config_db.get_table("FEATURE") + for srv, fields in feature_table.items(): + if 'state' not in fields: + success = False + logger.log_warning("FEATURE table is not fully ready: {}, retrying".format(feature_table)) + break + if fields["state"] not in ["disabled", "always_disabled"]: + srvext = srv + ".service" + if srvext not in dir_list: + dir_list.append(srvext) + if not success: + max_retry -= 1 + time.sleep(retry_delay) + else: + break + if not success: + logger.log_error("FEATURE table is not fully ready: {}, max retry reached".format(feature_table)) #Checks FEATURE table from config db for the service' check_up_status flag #if marked to true, then read the service up_status from FEATURE table of state db. diff --git a/src/system-health/tests/test_system_health.py b/src/system-health/tests/test_system_health.py index 76f3ceea5d3f..d58c69bececa 100644 --- a/src/system-health/tests/test_system_health.py +++ b/src/system-health/tests/test_system_health.py @@ -720,3 +720,23 @@ def test_system_service(): sysmon.task_run() assert sysmon._task_process is not None sysmon.task_stop() + + +def test_get_service_from_feature_table(): + sysmon = Sysmonitor() + sysmon.config_db = MagicMock() + sysmon.config_db.get_table = MagicMock() + sysmon.config_db.get_table.side_effect = [ + { + 'bgp': {}, + 'swss': {} + }, + { + 'bgp': {'state': 'enabled'}, + 'swss': {'state': 'disabled'} + } + ] + dir_list = [] + sysmon.get_service_from_feature_table(dir_list) + assert 'bgp.service' in dir_list + assert 'swss.service' not in dir_list From f16d4949bb726d0d1c5b4944342ec4da4163b469 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Tue, 28 Jun 2022 19:46:55 -0700 Subject: [PATCH 066/259] [202205][swss][linkmgrd] advance submodule head (#11275) swss: * 665bbbb 2022-06-27 | Add support for IP interface loopback action (#2307) (HEAD -> 202205, github/202205) [Lior Avramov] * c7f5743 2022-06-28 | [asan] suppress the static variable leaks (#2354) [Yakiv Huryk] * 37e2a31 2022-06-28 | [tests] [asan] add graceful stop flag (#2347) [Yakiv Huryk] * 5ab84cf 2022-06-28 | [202205][cherry-pick] Fix mux_acl_rule adding issue (#2358) [bingwang-ms] linkmgrd: * a836ef7 2022-06-28 | Use Vlan MAC as src MAC for link prober by default (#93) (HEAD -> 202205) [Jing Zhang] * a828e86 2022-06-28 | Fix inconsistent mux state (#92) (github/202205) [Longxiang Lyu] Signed-off-by: Ying Xie --- src/linkmgrd | 2 +- src/sonic-swss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/linkmgrd b/src/linkmgrd index 59334bee6dd7..a836ef754940 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit 59334bee6dd7da5db5565ba51abc011ed94fe7b9 +Subproject commit a836ef754940cda251a8d5f0f71f68f41f92fac0 diff --git a/src/sonic-swss b/src/sonic-swss index ad2d0adacf1c..665bbbb8b217 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit ad2d0adacf1c1e066559d240b24f5896ad79aee7 +Subproject commit 665bbbb8b217d2f49dfaea89ff7c83eeeb10edb6 From 4ad895c312d4de1f5ce932e04691138575d9041a Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Wed, 29 Jun 2022 22:15:05 -0700 Subject: [PATCH 067/259] [202205][pmon] advance submodule head (#11293) pmon: * 547acc0 2022-06-29 | [ycabled] add some retry logic for gRPC channel setup;fix no channel gRPC notification (#269) (HEAD -> 202205, github/202205) [vdahiya12] Signed-off-by: Ying Xie --- src/sonic-platform-daemons | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index 6ffec229a3c4..547acc062409 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit 6ffec229a3c417586a1fd20ba65ce2e8bce96be2 +Subproject commit 547acc062409f8da32b93a8f162b18d73b0ce52b From d9cd1a135594650564ca4b586c2578ac3290a50f Mon Sep 17 00:00:00 2001 From: bingwang-ms <66248323+bingwang-ms@users.noreply.github.com> Date: Wed, 29 Jun 2022 03:50:33 +0800 Subject: [PATCH 068/259] Add extra lossy PG profile for ports between T1 and T2 (#11157) Signed-off-by: bingwang Why I did it This PR brings two changes Add lossy PG profile for PG2 and PG6 on T1 for ports between T1 and T2. After PR Update qos config to clear queues for bounced back traffic #10176 , the DSCP_TO_TC_MAP and TC_TO_PG_MAP is updated when remapping is enable DSCP_TO_TC_MAP Before After Why do this change "2" : "1" "2" : "2" Only change for leaf router to map DSCP 2 to TC 2 as TC 2 will be used for lossless TC "6" : "1" "6" : "6" Only change for leaf router to map DSCP 6 to TC 6 as TC 6 will be used for lossless TC TC_TO_PRIORITY_GROUP_MAP Before After Why do this change "2" : "0" "2" : "2" Only change for leaf router to map TC 2 to PG 2 as PG 2 will be used for lossless PG "6" : "0" "6" : "6" Only change for leaf router to map TC 6 to PG 6 as PG 6 will be used for lossless PG So, we have two new lossy PGs (2 and 6) for the T2 facing ports on T1, and two new lossless PGs (2 and 6) for the T0 facing port on T1. However, there is no lossy PG profile for the T2 facing ports on T1. The lossless PGs for ports between T1 and T0 have been handled by buffermgrd .Therefore, We need to add lossy PG profiles for T2 facing ports on T1. We don't have this issue on T0 because PG 2 and PG 6 are lossless PGs, and there is no lossy traffic mapped to PG 2 and PG 6 Map port level TC7 to PG0 Before the PCBB change, DSCP48 -> TC 6 -> PG 0. After the PCBB change, DSCP48 -> TC 7 -> PG 7 Actually, we can map TC7 to PG0 to save a lossy PG. How I did it Update the qos and buffer template. How to verify it Verified by UT. --- .../Arista-7050CX3-32S-D48C8/qos.json.j2 | 2 +- .../Arista-7260CX3-C64/buffers_defaults_t1.j2 | 8 +++- .../Arista-7260CX3-C64/buffers_extra_pgs.j2 | 20 ++++++++ .../Arista-7260CX3-C64/qos.json.j2 | 4 +- .../Arista-7260CX3-Q64/buffers_defaults_t1.j2 | 8 +++- .../Arista-7260CX3-Q64/buffers_extra_pgs.j2 | 1 + files/build_templates/buffers_config.j2 | 4 ++ .../py3/buffer-arista7260-t1.json | 48 +++++++++++++++++++ .../py3/qos-arista7050cx3-dualtor.json | 2 +- .../py3/qos-arista7260-dualtor.json | 2 +- .../sample_output/py3/qos-arista7260-t1.json | 2 +- 11 files changed, 91 insertions(+), 10 deletions(-) create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_extra_pgs.j2 create mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_extra_pgs.j2 diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/qos.json.j2 b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/qos.json.j2 index e0aca4f8dd8b..6719911b29e5 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/qos.json.j2 +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/qos.json.j2 @@ -145,7 +145,7 @@ "4": "4", "5": "0", "6": "6", - "7": "7", + "7": "0", "8": "0" }, "AZURE_TUNNEL": { diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 index c5d390668a33..469f5fc4001a 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 @@ -55,8 +55,12 @@ }, {%- endmacro %} -{% import 'buffers_extra_queues.j2' as defs with context %} +{% import 'buffers_extra_queues.j2' as defs1 with context %} +{% import 'buffers_extra_pgs.j2' as defs2 with context %} {%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} -{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{{ defs1.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{%- endmacro %} +{%- macro generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) %} +{{ defs2.generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) }} {%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_extra_pgs.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_extra_pgs.j2 new file mode 100644 index 000000000000..73c1c1a9b30e --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_extra_pgs.j2 @@ -0,0 +1,20 @@ +{% if DEVICE_METADATA is defined and 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'LeafRouter' %} +{%- macro generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pg) %} + "BUFFER_PG": { +{% for port in port_names.split(',') %} +{% if port not in port_names_require_no_extra_pg.split(',') %} + "{{ port }}|2": { + "profile" : "ingress_lossy_profile" + }, + "{{ port }}|6": { + "profile" : "ingress_lossy_profile" + }, +{% endif %} + "{{ port }}|0": { + "profile" : "ingress_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% endfor %} + }, +{% endmacro %} +{% endif %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 index 4d82382817cb..cb3ad17faa39 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 @@ -79,7 +79,7 @@ "4": "4", "5": "0", "6": "6", - "7": "7" + "7": "0" } }, {%- endmacro %} @@ -230,7 +230,7 @@ "4": "4", "5": "0", "6": "6", - "7": "7", + "7": "0", "8": "0" }, "AZURE_TUNNEL": { diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 index f531b5e208e9..c73fde73562b 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 @@ -49,8 +49,12 @@ }, {%- endmacro %} -{% import 'buffers_extra_queues.j2' as defs with context %} +{% import 'buffers_extra_queues.j2' as defs1 with context %} +{% import 'buffers_extra_pgs.j2' as defs2 with context %} {%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} -{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{{ defs1.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{%- endmacro %} +{%- macro generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) %} +{{ defs2.generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) }} {%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_extra_pgs.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_extra_pgs.j2 new file mode 120000 index 000000000000..7dfb03cbc9d0 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_extra_pgs.j2 @@ -0,0 +1 @@ +../Arista-7260CX3-C64/buffers_extra_pgs.j2 \ No newline at end of file diff --git a/files/build_templates/buffers_config.j2 b/files/build_templates/buffers_config.j2 index 814e470d0211..f03a7f9f63e3 100644 --- a/files/build_templates/buffers_config.j2 +++ b/files/build_templates/buffers_config.j2 @@ -172,6 +172,10 @@ def {{ defs.generate_pg_profils(port_names_active) }} {% elif defs.generate_pg_profiles_with_inactive_ports is defined %} {{ defs.generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) }}, +{% elif (defs.generate_pg_buffers_with_extra_lossy_pgs is defined) and (port_names_extra_queues != '') %} +{{ defs.generate_pg_buffers_with_extra_lossy_pgs(port_names_active, port_names_extra_queues) }} +{% elif (defs.generate_pg_buffers_with_extra_lossy_pgs_with_inactive_ports is defined) and (port_names_extra_queues != '') %} +{{ defs.generate_pg_buffers_with_extra_lossy_pgs_with_inactive_ports(port_names_active, port_names_extra_queues, port_names_inactive) }} {% else %} "BUFFER_PG": { {% for port in PORT_ACTIVE %} diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json index 702076249ac6..1ce8a99e4fb7 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json @@ -112,9 +112,21 @@ "Ethernet0|0": { "profile" : "ingress_lossy_profile" }, + "Ethernet0|2": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet0|6": { + "profile" : "ingress_lossy_profile" + }, "Ethernet4|0": { "profile" : "ingress_lossy_profile" }, + "Ethernet4|2": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet4|6": { + "profile" : "ingress_lossy_profile" + }, "Ethernet144|0": { "profile" : "ingress_lossy_profile" }, @@ -124,9 +136,21 @@ "Ethernet16|0": { "profile" : "ingress_lossy_profile" }, + "Ethernet16|2": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet16|6": { + "profile" : "ingress_lossy_profile" + }, "Ethernet20|0": { "profile" : "ingress_lossy_profile" }, + "Ethernet20|2": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet20|6": { + "profile" : "ingress_lossy_profile" + }, "Ethernet152|0": { "profile" : "ingress_lossy_profile" }, @@ -136,9 +160,21 @@ "Ethernet64|0": { "profile" : "ingress_lossy_profile" }, + "Ethernet64|2": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet64|6": { + "profile" : "ingress_lossy_profile" + }, "Ethernet68|0": { "profile" : "ingress_lossy_profile" }, + "Ethernet68|2": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet68|6": { + "profile" : "ingress_lossy_profile" + }, "Ethernet168|0": { "profile" : "ingress_lossy_profile" }, @@ -148,9 +184,21 @@ "Ethernet80|0": { "profile" : "ingress_lossy_profile" }, + "Ethernet80|2": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet80|6": { + "profile" : "ingress_lossy_profile" + }, "Ethernet84|0": { "profile" : "ingress_lossy_profile" }, + "Ethernet84|2": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet84|6": { + "profile" : "ingress_lossy_profile" + }, "Ethernet180|0": { "profile" : "ingress_lossy_profile" }, diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json index a48656d57c0c..8e1d376f19db 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json @@ -178,7 +178,7 @@ "4": "4", "5": "0", "6": "6", - "7": "7", + "7": "0", "8": "0" }, "AZURE_TUNNEL": { diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json index cad403c93d2e..85339be6d10d 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json @@ -178,7 +178,7 @@ "4": "4", "5": "0", "6": "6", - "7": "7", + "7": "0", "8": "0" }, "AZURE_TUNNEL": { diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json index f850e3285bef..eff232ab179d 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json @@ -100,7 +100,7 @@ "4": "4", "5": "0", "6": "6", - "7": "7" + "7": "0" } }, "SCHEDULER": { From 6708a5565418b20e5083b1edb69389f7c5f3b2f5 Mon Sep 17 00:00:00 2001 From: jingwenxie Date: Thu, 30 Jun 2022 10:09:54 +0800 Subject: [PATCH 069/259] [yang] update TCP_FLAGS format in sonic-acl.yang (#11270) Why I did it Fix #11224 TCP_FLAGS supports flags/mask pattern. How I did it Change the pattern. How to verify it Add unit test. --- .../tests/yang_model_tests/tests/acl.json | 3 ++ .../yang_model_tests/tests_config/acl.json | 40 ++++++++++++++++++- .../yang-templates/sonic-acl.yang.j2 | 2 +- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/acl.json b/src/sonic-yang-models/tests/yang_model_tests/tests/acl.json index b7968e240767..3bfb0611fb2e 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/acl.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/acl.json @@ -129,5 +129,8 @@ }, "ACL_RULE_WITH_VALID_MIRROR_INGRESS_ACTION": { "desc": "Configure ACL_RULE with valid mirror action." + }, + "ACL_RULE_VALID_TCP_FLAGS": { + "desc": "Configure ACL_RULE with valid TCP_FLAGS." } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/acl.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/acl.json index d98645b8a19c..6c3d3ad3ec64 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/acl.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/acl.json @@ -953,7 +953,7 @@ "ACL_TABLE_NAME": "EVERFLOW_DSCP", "policy_desc": "EVERFLOW_DSCP", "ports": [ - "" + "" ], "stage": "ingress", "type": "MIRROR_DSCP" @@ -981,7 +981,7 @@ "ACL_TABLE_NAME": "EVERFLOW_DSCP", "policy_desc": "EVERFLOW_DSCP", "ports": [ - "" + "" ], "stage": "ingress", "type": "MIRROR_DSCP" @@ -1003,5 +1003,41 @@ ] } } + }, + "ACL_RULE_VALID_TCP_FLAGS": { + "sonic-acl:sonic-acl": { + "sonic-acl:ACL_RULE": { + "ACL_RULE_LIST": [ + { + "ACL_TABLE_NAME": "TCP_FLAGS_TEST", + "ETHER_TYPE": "2048", + "PACKET_ACTION": "DROP", + "PRIORITY": 9981, + "TCP_FLAGS": "0x24", + "RULE_NAME": "Rule_19" + }, + { + "ACL_TABLE_NAME": "TCP_FLAGS_TEST", + "ETHER_TYPE": "2048", + "PACKET_ACTION": "DROP", + "PRIORITY": 9981, + "TCP_FLAGS": "0x24/0x24", + "RULE_NAME": "Rule_20" + } + + ] + }, + "sonic-acl:ACL_TABLE": { + "ACL_TABLE_LIST": [ + { + "ACL_TABLE_NAME": "TCP_FLAGS_TEST", + "policy_desc": "TCP_FLAGS_TEST", + "ports": [ "" ], + "stage": "INGRESS", + "type": "L3" + } + ] + } + } } } diff --git a/src/sonic-yang-models/yang-templates/sonic-acl.yang.j2 b/src/sonic-yang-models/yang-templates/sonic-acl.yang.j2 index 2a527aa2bcf9..e9461be2ceed 100644 --- a/src/sonic-yang-models/yang-templates/sonic-acl.yang.j2 +++ b/src/sonic-yang-models/yang-templates/sonic-acl.yang.j2 @@ -184,7 +184,7 @@ module sonic-acl { leaf TCP_FLAGS { type string { - pattern '0[x][0-9a-fA-F]{1,2}|0[X][0-9a-fA-F]{1,2}'; + pattern '0[xX][0-9a-fA-F]{1,2}(/0[xX][0-9a-fA-F]{1,2})?'; } } From f25a84c1484effffc9c195743136e210e20cf831 Mon Sep 17 00:00:00 2001 From: Jing Zhang Date: Wed, 29 Jun 2022 21:34:02 -0700 Subject: [PATCH 070/259] Avoid write_standby in warm restart context (#11283) Avoid write_standby in warm restart context. sign-off: Jing Zhang zhangjing@microsoft.com Why I did it In warm restart context, we should avoid mux state change. How I did it Check warm restart flag before applying changes to app db. How to verify it Ran write_standby in table missing, key missing, field missing scenarios. Did a warm restart, app db changes were skipped. Saw this in syslog: WARNING write_standby: Taking no action due to ongoing warmrestart. --- files/scripts/write_standby.py | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/files/scripts/write_standby.py b/files/scripts/write_standby.py index 53cf5265ecde..3a41fe58bbe6 100755 --- a/files/scripts/write_standby.py +++ b/files/scripts/write_standby.py @@ -3,8 +3,8 @@ import time from sonic_py_common import logger as log -from swsscommon.swsscommon import ConfigDBConnector, DBConnector, FieldValuePairs, ProducerStateTable, SonicV2Connector -from swsscommon.swsscommon import APPL_DB +from swsscommon.swsscommon import ConfigDBConnector, DBConnector, FieldValuePairs, ProducerStateTable, SonicV2Connector, Table +from swsscommon.swsscommon import APPL_DB, STATE_DB logger = log.Logger('write_standby') @@ -22,6 +22,7 @@ class MuxStateWriter(object): def __init__(self): self.config_db_connector = None self.appl_db_connector = None + self.state_db_connector = None self.asic_db_connector = None @property @@ -45,6 +46,16 @@ def appl_db(self): if self.appl_db_connector is None: self.appl_db_connector = DBConnector(APPL_DB, REDIS_SOCK_PATH, True) return self.appl_db_connector + + @property + def state_db(self): + """ + Returns the state DB connector. + Intializes the connector during the first call + """ + if self.state_db_connector is None: + self.state_db_connector = DBConnector(STATE_DB, REDIS_SOCK_PATH, True) + return self.state_db_connector @property def asic_db(self): @@ -75,6 +86,16 @@ def is_dualtor(self): return 'subtype' in metadata and 'dualtor' in metadata['subtype'].lower() + @property + def is_warmrestart(self): + """ + Checks if a warmrestart is going on + """ + tbl = Table(self.state_db, 'WARM_RESTART_ENABLE_TABLE') + (status, value) = tbl.hget('system', 'enable') + + return status and value == 'true' + def get_auto_mux_intfs(self): """ Returns a list of all mux cable interfaces that are configured to auto-switch @@ -117,6 +138,12 @@ def apply_mux_config(self): if not self.is_dualtor: # If not running on a dual ToR system, take no action return + + if self.is_warmrestart: + # If in warmrestart context, take no action + logger.log_warning("Skip setting mux state due to ongoing warmrestart.") + return + intfs = self.get_auto_mux_intfs() state = 'standby' if self.wait_for_tunnel(): From ab87fb8b608818d4ef10390d32d4a88833652425 Mon Sep 17 00:00:00 2001 From: yozhao101 <56170650+yozhao101@users.noreply.github.com> Date: Tue, 28 Jun 2022 17:29:02 -0700 Subject: [PATCH 071/259] [tunnel_packet_handler] Add a whitespace in the warning syslog message. (#11232) *This PR aims to add a whitespace in the warning syslog message of process tunnel_packet_handler. Signed-off-by: Yong Zhao --- dockers/docker-orchagent/tunnel_packet_handler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dockers/docker-orchagent/tunnel_packet_handler.py b/dockers/docker-orchagent/tunnel_packet_handler.py index 682316eb6d49..3d75fdd94a0c 100755 --- a/dockers/docker-orchagent/tunnel_packet_handler.py +++ b/dockers/docker-orchagent/tunnel_packet_handler.py @@ -192,7 +192,7 @@ def get_ipinip_tunnel_addrs(self): peer_switch = self.config_db.get_keys(PEER_SWITCH_TABLE)[0] tunnel = self.config_db.get_keys(TUNNEL_TABLE)[0] except IndexError: - logger.log_warning('PEER_SWITCH or TUNNEL table' + logger.log_warning('PEER_SWITCH or TUNNEL table ' 'not found in config DB') return None, None From f17d55dc676f1798bdaab9736d400de53a3a1e3e Mon Sep 17 00:00:00 2001 From: davidpil2002 <91657985+davidpil2002@users.noreply.github.com> Date: Wed, 29 Jun 2022 15:34:56 +0300 Subject: [PATCH 072/259] Add support for Password Hardening (#10323) - Why I did it New security feature for enforcing strong passwords when login or changing passwords of existing users into the switch. - How I did it By using mainly Linux package named pam-cracklib that support the enforcement of user passwords, the daemon named hostcfgd, will support add/modify password policies that enforce and strengthen the user passwords. - How to verify it Manually Verification- 1. Enable the feature, using the new sonic-cli command passw-hardening or manually add the password hardening table like shown in HLD by using redis-cli command 2. Change password policies manually like in step 1. Notes: password hardening CLI can be found in sonic-utilities repo- P.R: Add support for Password Hardening sonic-utilities#2121 code config path: config/plugins/sonic-passwh_yang.py code show path: show/plugins/sonic-passwh_yang.py 3. Create a new user (using adduser command) or modify an existing password by using passwd command in the terminal. And it will now request a strong password instead of default linux policies. Automatic Verification - Unitest: This PR contained unitest that cover: 1. test default init values of the feature in PAM files 2. test all the types of classes policies supported by the feature in PAM files 3. test aging policy configuration in PAM files --- .../build_templates/sonic_debian_extension.j2 | 3 + .../templates/common-password.j2 | 43 +++ src/sonic-host-services/scripts/hostcfgd | 211 ++++++++++- .../tests/hostcfgd/hostcfgd_passwh_test.py | 182 ++++++++++ .../PASSWORD_HARDENING/login.defs.old | 340 ++++++++++++++++++ .../common-password | 36 ++ .../login.defs | 340 ++++++++++++++++++ .../common-password | 39 ++ .../login.defs | 340 ++++++++++++++++++ .../common-password | 39 ++ .../login.defs | 340 ++++++++++++++++++ .../tests/hostcfgd/test_passwh_vectors.py | 244 +++++++++++++ 12 files changed, 2155 insertions(+), 2 deletions(-) create mode 100644 src/sonic-host-services-data/templates/common-password.j2 create mode 100755 src/sonic-host-services/tests/hostcfgd/hostcfgd_passwh_test.py create mode 100644 src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING/login.defs.old create mode 100644 src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_default_values/common-password create mode 100644 src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_default_values/login.defs create mode 100644 src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_enable_digits_class/common-password create mode 100644 src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_enable_digits_class/login.defs create mode 100644 src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_enable_feature/common-password create mode 100644 src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_enable_feature/login.defs create mode 100644 src/sonic-host-services/tests/hostcfgd/test_passwh_vectors.py diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 185184fb91d5..357c0df6656c 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -266,6 +266,9 @@ fi sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/sonic-device-data_*.deb || \ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f +# package for supporting password hardening +sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install libpam-cracklib + # Install pam-tacplus and nss-tacplus sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/libtac2_*.deb || \ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f diff --git a/src/sonic-host-services-data/templates/common-password.j2 b/src/sonic-host-services-data/templates/common-password.j2 new file mode 100644 index 000000000000..c5fd3f889c24 --- /dev/null +++ b/src/sonic-host-services-data/templates/common-password.j2 @@ -0,0 +1,43 @@ +#THIS IS AN AUTO-GENERATED FILE +# +# /etc/pam.d/common-password - password-related modules common to all services +# +# This file is included from other service-specific PAM config files, +# and should contain a list of modules that define the services to be +# used to change user passwords. The default is pam_unix. + +# Explanation of pam_unix options: +# The "yescrypt" option enables +#hashed passwords using the yescrypt algorithm, introduced in Debian +#11. Without this option, the default is Unix crypt. Prior releases +#used the option "sha512"; if a shadow password hash will be shared +#between Debian 11 and older releases replace "yescrypt" with "sha512" +#for compatibility . The "obscure" option replaces the old +#`OBSCURE_CHECKS_ENAB' option in login.defs. See the pam_unix manpage +#for other options. + +# As of pam 1.0.1-6, this file is managed by pam-auth-update by default. +# To take advantage of this, it is recommended that you configure any +# local modules either before or after the default block, and use +# pam-auth-update to manage selection of other modules. See +# pam-auth-update(8) for details. + +# here are the per-package modules (the "Primary" block) + +{% if passw_policies %} +{% if passw_policies['state'] == 'enabled' %} +password requisite pam_cracklib.so retry=3 maxrepeat=0 {% if passw_policies['len_min'] %}minlen={{passw_policies['len_min']}}{% endif %} {% if passw_policies['upper_class'] %}ucredit=-1{% else %}ucredit=0{% endif %} {% if passw_policies['lower_class'] %}lcredit=-1{% else %}lcredit=0{% endif %} {% if passw_policies['digits_class'] %}dcredit=-1{% else %}dcredit=0{% endif %} {% if passw_policies['special_class'] %}ocredit=-1{% else %}ocredit=0{% endif %} {% if passw_policies['reject_user_passw_match'] %}reject_username{% endif %} enforce_for_root + +password required pam_pwhistory.so {% if passw_policies['history_cnt'] %}remember={{passw_policies['history_cnt']}}{% endif %} use_authtok enforce_for_root +{% endif %} +{% endif %} + +password [success=1 default=ignore] pam_unix.so obscure yescrypt +# here's the fallback if no module succeeds +password requisite pam_deny.so +# prime the stack with a positive return value if there isn't one already; +# this avoids us returning an error just because nothing sets a success code +# since the modules above will each just jump around +password required pam_permit.so +# and here are more per-package modules (the "Additional" block) +# end of pam-auth-update config diff --git a/src/sonic-host-services/scripts/hostcfgd b/src/sonic-host-services/scripts/hostcfgd index 41da37490be4..a82a630bfc0a 100755 --- a/src/sonic-host-services/scripts/hostcfgd +++ b/src/sonic-host-services/scripts/hostcfgd @@ -8,7 +8,7 @@ import sys import subprocess import syslog import signal - +import re import jinja2 from sonic_py_common import device_info from swsscommon.swsscommon import ConfigDBConnector, DBConnector, Table @@ -16,6 +16,8 @@ from swsscommon.swsscommon import ConfigDBConnector, DBConnector, Table # FILE PAM_AUTH_CONF = "/etc/pam.d/common-auth-sonic" PAM_AUTH_CONF_TEMPLATE = "/usr/share/sonic/templates/common-auth-sonic.j2" +PAM_PASSWORD_CONF = "/etc/pam.d/common-password" +PAM_PASSWORD_CONF_TEMPLATE = "/usr/share/sonic/templates/common-password.j2" NSS_TACPLUS_CONF = "/etc/tacplus_nss.conf" NSS_TACPLUS_CONF_TEMPLATE = "/usr/share/sonic/templates/tacplus_nss.conf.j2" NSS_RADIUS_CONF = "/etc/radius_nss.conf" @@ -24,6 +26,16 @@ PAM_RADIUS_AUTH_CONF_TEMPLATE = "/usr/share/sonic/templates/pam_radius_auth.conf NSS_CONF = "/etc/nsswitch.conf" ETC_PAMD_SSHD = "/etc/pam.d/sshd" ETC_PAMD_LOGIN = "/etc/pam.d/login" +ETC_LOGIN_DEF = "/etc/login.defs" + +# Linux login.def default values (password hardening disable) +LINUX_DEFAULT_PASS_MAX_DAYS = 99999 +LINUX_DEFAULT_PASS_WARN_AGE = 7 + +ACCOUNT_NAME = 0 # index of account name +AGE_DICT = { 'MAX_DAYS': {'REGEX_DAYS': r'^PASS_MAX_DAYS[ \t]*(?P\d*)', 'DAYS': 'max_days', 'CHAGE_FLAG': '-M '}, + 'WARN_DAYS': {'REGEX_DAYS': r'^PASS_WARN_AGE[ \t]*(?P\d*)', 'DAYS': 'warn_days', 'CHAGE_FLAG': '-W '} + } PAM_LIMITS_CONF_TEMPLATE = "/usr/share/sonic/templates/pam_limits.j2" LIMITS_CONF_TEMPLATE = "/usr/share/sonic/templates/limits.conf.j2" PAM_LIMITS_CONF = "/etc/pam.d/pam-limits-conf" @@ -85,8 +97,10 @@ def run_cmd(cmd, log_err=True, raise_exception=False): def is_true(val): if val == 'True' or val == 'true': return True - else: + elif val == 'False' or val == 'false': return False + syslog.syslog(syslog.LOG_ERR, "Failed to get bool value, instead val= {}".format(val)) + return False def is_vlan_sub_interface(ifname): @@ -867,6 +881,189 @@ class AaaCfg(object): .format(err.cmd, err.returncode, err.output)) +class PasswHardening(object): + def __init__(self): + self.passw_policies_default = {} + self.passw_policies = {} + + self.debug = False + self.trace = False + + def load(self, policies_conf): + for row in policies_conf: + self.passw_policies_update(row, policies_conf[row], modify_conf=False) + + self.modify_passw_conf_file() + + def passw_policies_update(self, key, data, modify_conf=True): + syslog.syslog(syslog.LOG_DEBUG, "passw_policies_update - key: {}".format(key)) + syslog.syslog(syslog.LOG_DEBUG, "passw_policies_update - data: {}".format(data)) + + if data == {}: + self.passw_policies = {} + else: + if 'reject_user_passw_match' in data: + data['reject_user_passw_match'] = is_true(data['reject_user_passw_match']) + if 'lower_class' in data: + data['lower_class'] = is_true(data['lower_class']) + if 'upper_class' in data: + data['upper_class'] = is_true(data['upper_class']) + if 'digits_class' in data: + data['digits_class'] = is_true(data['digits_class']) + if 'special_class' in data: + data['special_class'] = is_true(data['special_class']) + + if key == 'POLICIES': + self.passw_policies = data + + if modify_conf: + self.modify_passw_conf_file() + + def modify_single_file_inplace(self, filename, operations=None): + if operations: + cmd = "sed -i {0} {1}".format(' -i '.join(operations), filename) + syslog.syslog(syslog.LOG_DEBUG, "modify_single_file_inplace: cmd - {}".format(cmd)) + os.system(cmd) + + def set_passw_hardening_policies(self, passw_policies): + # Password Hardening flow + # When feature is enabled, the passw_policies from CONFIG_DB will be set in the pam files /etc/pam.d/common-password and /etc/login.def. + # When the feature is disabled, the files above will be generate with the linux default (without secured passw_policies). + syslog.syslog(syslog.LOG_DEBUG, "modify_conf_file: passw_policies - {}".format(passw_policies)) + + template_passwh_file = os.path.abspath(PAM_PASSWORD_CONF_TEMPLATE) + env = jinja2.Environment(loader=jinja2.FileSystemLoader('/'), trim_blocks=True) + env.filters['sub'] = sub + template_passwh = env.get_template(template_passwh_file) + + # Render common-password file with passw hardening policies if any. Other render without them. + pam_passwh_conf = template_passwh.render(debug=self.debug, passw_policies=passw_policies) + + # Use rename(), which is atomic (on the same fs) to avoid empty file + with open(PAM_PASSWORD_CONF + ".tmp", 'w') as f: + f.write(pam_passwh_conf) + os.chmod(PAM_PASSWORD_CONF + ".tmp", 0o644) + os.rename(PAM_PASSWORD_CONF + ".tmp", PAM_PASSWORD_CONF) + + # Age policy + # When feature disabled or age policy disabled, expiry days policy should be as linux default, other, accoriding CONFIG_DB. + curr_expiration = LINUX_DEFAULT_PASS_MAX_DAYS + curr_expiration_warning = LINUX_DEFAULT_PASS_WARN_AGE + + if passw_policies: + if 'state' in passw_policies: + if passw_policies['state'] == 'enabled': + if 'expiration' in passw_policies: + if int(self.passw_policies['expiration']) != 0: # value '0' meaning age policy is disabled + # the logic is to modify the expiration time according the last updated modificatiion + # + curr_expiration = int(passw_policies['expiration']) + + if 'expiration_warning' in passw_policies: + if int(self.passw_policies['expiration_warning']) != 0: # value '0' meaning age policy is disabled + curr_expiration_warning = int(passw_policies['expiration_warning']) + + if self.is_passwd_aging_expire_update(curr_expiration, 'MAX_DAYS'): + # Set aging policy for existing users + self.passwd_aging_expire_modify(curr_expiration, 'MAX_DAYS') + + # Aging policy for new users + self.modify_single_file_inplace(ETC_LOGIN_DEF, ["\'/^PASS_MAX_DAYS/c\PASS_MAX_DAYS " +str(curr_expiration)+"\'"]) + + if self.is_passwd_aging_expire_update(curr_expiration_warning, 'WARN_DAYS'): + # Aging policy for existing users + self.passwd_aging_expire_modify(curr_expiration_warning, 'WARN_DAYS') + + # Aging policy for new users + self.modify_single_file_inplace(ETC_LOGIN_DEF, ["\'/^PASS_WARN_AGE/c\PASS_WARN_AGE " +str(curr_expiration_warning)+"\'"]) + + def passwd_aging_expire_modify(self, curr_expiration, age_type): + normal_accounts = self.get_normal_accounts() + if not normal_accounts: + syslog.syslog(syslog.LOG_ERR,"failed, no normal users found in /etc/passwd") + return + chage_flag = AGE_DICT[age_type]['CHAGE_FLAG'] + for normal_account in normal_accounts: + try: + chage_p_m = subprocess.Popen(('chage', chage_flag + str(curr_expiration), normal_account), stdout=subprocess.PIPE) + return_code_chage_p_m = chage_p_m.poll() + if return_code_chage_p_m != 0: + syslog.syslog(syslog.LOG_ERR, "failed: return code - {}".format(return_code_chage_p_m)) + + except subprocess.CalledProcessError as e: + syslog.syslog(syslog.LOG_ERR, "{} - failed: return code - {}, output:\n{}".format(e.cmd, e.returncode, e.output)) + + def is_passwd_aging_expire_update(self, curr_expiration, age_type): + """ Function verify that the current age expiry policy values are equal from the old one + Return update_age_status 'True' value meaning that was a modification from the last time, and vice versa. + """ + update_age_status = False + days_num = None + regex_days = AGE_DICT[age_type]['REGEX_DAYS'] + days_type = AGE_DICT[age_type]['DAYS'] + if os.path.exists(ETC_LOGIN_DEF): + with open(ETC_LOGIN_DEF, 'r') as f: + login_def_data = f.readlines() + + for line in login_def_data: + m1 = re.match(regex_days, line) + if m1: + days_num = int(m1.group(days_type)) + break + + if curr_expiration != days_num: + update_age_status = True + + return update_age_status + + def get_normal_accounts(self): + # Get user list + try: + getent_out = subprocess.check_output(['getent', 'passwd']).decode('utf-8').split('\n') + except subprocess.CalledProcessError as err: + syslog.syslog(syslog.LOG_ERR, "{} - failed: return code - {}, output:\n{}".format(err.cmd, err.returncode, err.output)) + return False + + # Get range of normal users + REGEX_UID_MAX = r'^UID_MAX[ \t]*(?P\d*)' + REGEX_UID_MIN = r'^UID_MIN[ \t]*(?P\d*)' + uid_max = None + uid_min = None + if os.path.exists(ETC_LOGIN_DEF): + with open(ETC_LOGIN_DEF, 'r') as f: + login_def_data = f.readlines() + + for line in login_def_data: + m1 = re.match(REGEX_UID_MAX, line) + m2 = re.match(REGEX_UID_MIN, line) + if m1: + uid_max = int(m1.group("uid_max")) + if m2: + uid_min = int(m2.group("uid_min")) + + if not uid_max or not uid_min: + syslog.syslog(syslog.LOG_ERR,"failed, no UID_MAX/UID_MIN founded in login.def file") + return False + + # Get normal user list + normal_accounts = [] + for account in getent_out[0:-1]: # last item is always empty + account_spl = account.split(':') + account_number = int(account_spl[2]) + if account_number >= uid_min and account_number <= uid_max: + normal_accounts.append(account_spl[ACCOUNT_NAME]) + + normal_accounts.append('root') # root is also a candidate to be age modify. + return normal_accounts + + def modify_passw_conf_file(self): + passw_policies = self.passw_policies_default.copy() + passw_policies.update(self.passw_policies) + + # set new Password Hardening policies. + self.set_passw_hardening_policies(passw_policies) + + class KdumpCfg(object): def __init__(self, CfgDb): self.config_db = CfgDb @@ -1090,6 +1287,9 @@ class HostConfigDaemon: self.hostname_cache="" self.aaacfg = AaaCfg() + # Initialize PasswHardening + self.passwcfg = PasswHardening() + # Initialize PamLimitsCfg self.pamLimitsCfg = PamLimitsCfg(self.config_db) self.pamLimitsCfg.update_config_file() @@ -1105,12 +1305,14 @@ class HostConfigDaemon: ntp_server = init_data['NTP_SERVER'] ntp_global = init_data['NTP'] kdump = init_data['KDUMP'] + passwh = init_data['PASSW_HARDENING'] self.feature_handler.sync_state_field(features) self.aaacfg.load(aaa, tacacs_global, tacacs_server, radius_global, radius_server) self.iptables.load(lpbk_table) self.ntpcfg.load(ntp_global, ntp_server) self.kdumpCfg.load(kdump) + self.passwcfg.load(passwh) dev_meta = self.config_db.get_table('DEVICE_METADATA') if 'localhost' in dev_meta: @@ -1131,6 +1333,10 @@ class HostConfigDaemon: self.aaacfg.aaa_update(key, data) syslog.syslog(syslog.LOG_INFO, 'AAA Update: key: {}, op: {}, data: {}'.format(key, op, data)) + def passwh_handler(self, key, op, data): + self.passwcfg.passw_policies_update(key, data) + syslog.syslog(syslog.LOG_INFO, 'PASSW_HARDENING Update: key: {}, op: {}, data: {}'.format(key, op, data)) + def tacacs_server_handler(self, key, op, data): self.aaacfg.tacacs_server_update(key, data) log_data = copy.deepcopy(data) @@ -1229,6 +1435,7 @@ class HostConfigDaemon: self.config_db.subscribe('TACPLUS_SERVER', make_callback(self.tacacs_server_handler)) self.config_db.subscribe('RADIUS', make_callback(self.radius_global_handler)) self.config_db.subscribe('RADIUS_SERVER', make_callback(self.radius_server_handler)) + self.config_db.subscribe('PASSW_HARDENING', make_callback(self.passwh_handler)) # Handle IPTables configuration self.config_db.subscribe('LOOPBACK_INTERFACE', make_callback(self.lpbk_handler)) # Handle NTP & NTP_SERVER updates diff --git a/src/sonic-host-services/tests/hostcfgd/hostcfgd_passwh_test.py b/src/sonic-host-services/tests/hostcfgd/hostcfgd_passwh_test.py new file mode 100755 index 000000000000..da68ad861207 --- /dev/null +++ b/src/sonic-host-services/tests/hostcfgd/hostcfgd_passwh_test.py @@ -0,0 +1,182 @@ +import importlib.machinery +import importlib.util +import filecmp +import shutil +import os +import sys +import subprocess +import re + +from parameterized import parameterized +from unittest import TestCase, mock +from tests.hostcfgd.test_passwh_vectors import HOSTCFGD_TEST_PASSWH_VECTOR +from tests.common.mock_configdb import MockConfigDb, MockDBConnector + +test_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +modules_path = os.path.dirname(test_path) +scripts_path = os.path.join(modules_path, "scripts") +src_path = os.path.dirname(modules_path) +templates_path = os.path.join(src_path, "sonic-host-services-data/templates") +output_path = os.path.join(test_path, "hostcfgd/output") +sample_output_path = os.path.join(test_path, "hostcfgd/sample_output") +sys.path.insert(0, modules_path) + +# Load the file under test +hostcfgd_path = os.path.join(scripts_path, 'hostcfgd') +loader = importlib.machinery.SourceFileLoader('hostcfgd', hostcfgd_path) +spec = importlib.util.spec_from_loader(loader.name, loader) +hostcfgd = importlib.util.module_from_spec(spec) +loader.exec_module(hostcfgd) +sys.modules['hostcfgd'] = hostcfgd + +# Mock swsscommon classes +hostcfgd.ConfigDBConnector = MockConfigDb +hostcfgd.DBConnector = MockDBConnector +hostcfgd.Table = mock.Mock() + +AGE_DICT = { 'MAX_DAYS': {'REGEX_DAYS': r'^PASS_MAX_DAYS[ \t]*(?P\d*)', 'DAYS': 'max_days', 'CHAGE_FLAG': '-M '}, + 'WARN_DAYS': {'REGEX_DAYS': r'^PASS_WARN_AGE[ \t]*(?P\d*)', 'DAYS': 'warn_days', 'CHAGE_FLAG': '-W '} + } + +class TestHostcfgdPASSWH(TestCase): + """ + Test hostcfd daemon - PASSWH + """ + def run_diff(self, file1, file2): + try: + diff_out = subprocess.check_output('diff -ur {} {} || true'.format(file1, file2), shell=True) + return diff_out + except subprocess.CalledProcessError as err: + syslog.syslog(syslog.LOG_ERR, "{} - failed: return code - {}, output:\n{}".format(err.cmd, err.returncode, err.output)) + return -1 + + def get_passw_days(self, login_file, age_type): + days_num = -1 + + regex_days = AGE_DICT[age_type]['REGEX_DAYS'] + days_type = AGE_DICT[age_type]['DAYS'] + + with open(login_file, 'r') as f: + login_def_data = f.readlines() + + for line in login_def_data: + m1 = re.match(regex_days, line) + if m1: + days_num = int(m1.group(days_type)) + break + return days_num + + """ + Check different config + """ + def check_config(self, test_name, test_data, config_name): + t_path = templates_path + op_path = output_path + "/" + test_name + "_" + config_name + sop_path = sample_output_path + "/" + test_name + "_" + config_name + sop_path_common = sample_output_path + "/" + test_name + + hostcfgd.PAM_PASSWORD_CONF_TEMPLATE = t_path + "/common-password.j2" + hostcfgd.PAM_AUTH_CONF_TEMPLATE = t_path + "/common-auth-sonic.j2" + hostcfgd.NSS_TACPLUS_CONF_TEMPLATE = t_path + "/tacplus_nss.conf.j2" + hostcfgd.NSS_RADIUS_CONF_TEMPLATE = t_path + "/radius_nss.conf.j2" + hostcfgd.PAM_RADIUS_AUTH_CONF_TEMPLATE = t_path + "/pam_radius_auth.conf.j2" + hostcfgd.PAM_PASSWORD_CONF = op_path + "/common-password" + hostcfgd.ETC_LOGIN_DEF = op_path + "/login.defs" + hostcfgd.PAM_AUTH_CONF = op_path + "/common-auth-sonic" + hostcfgd.NSS_TACPLUS_CONF = op_path + "/tacplus_nss.conf" + hostcfgd.NSS_RADIUS_CONF = op_path + "/radius_nss.conf" + hostcfgd.NSS_CONF = op_path + "/nsswitch.conf" + hostcfgd.ETC_PAMD_SSHD = op_path + "/sshd" + hostcfgd.ETC_PAMD_LOGIN = op_path + "/login" + hostcfgd.RADIUS_PAM_AUTH_CONF_DIR = op_path + "/" + + shutil.rmtree(op_path, ignore_errors=True) + os.mkdir(op_path) + + shutil.copyfile(sop_path_common + "/login.defs.old", op_path + "/login.defs") + MockConfigDb.set_config_db(test_data[config_name]) + host_config_daemon = hostcfgd.HostConfigDaemon() + + try: + passwh_table = host_config_daemon.config_db.get_table('PASSW_HARDENING') + except Exception as e: + syslog.syslog(syslog.LOG_ERR, "failed: get_table 'PASSW_HARDENING', exception={}".format(e)) + passwh_table = [] + + host_config_daemon.passwcfg.load(passwh_table) + + + diff_output = "" + files_to_compare = ['common-password'] + + # check output files exists + for name in files_to_compare: + if not os.path.isfile(sop_path + "/" + name): + raise ValueError('filename: %s not exit' % (sop_path + "/" + name)) + if not os.path.isfile(op_path + "/" + name): + raise ValueError('filename: %s not exit' % (op_path + "/" + name)) + + # deep comparison + match, mismatch, errors = filecmp.cmpfiles(sop_path, op_path, files_to_compare, shallow=False) + + if not match: + for name in files_to_compare: + diff_output += self.run_diff( sop_path + "/" + name,\ + op_path + "/" + name).decode('utf-8') + + self.assertTrue(len(diff_output) == 0, diff_output) + + # compare age data in login.def file. + out_passw_age_days = self.get_passw_days(op_path + "/login.defs", 'MAX_DAYS') + sout_passw_age_days = self.get_passw_days(sop_path + "/login.defs", 'MAX_DAYS') + out_passw_age_warn_days = self.get_passw_days(op_path + "/login.defs", 'WARN_DAYS') + sout_passw_age_warn_days = self.get_passw_days(sop_path + "/login.defs", 'WARN_DAYS') + + self.assertEqual(out_passw_age_days, sout_passw_age_days) + self.assertEqual(out_passw_age_warn_days, sout_passw_age_warn_days) + + @parameterized.expand(HOSTCFGD_TEST_PASSWH_VECTOR) + def test_hostcfgd_passwh(self, test_name, test_data): + """ + Test PASSWH hostcfd daemon initialization + + Args: + test_name(str): test name + test_data(dict): test data which contains initial Config Db tables, and expected results + + Returns: + None + """ + + self.check_config(test_name, test_data, "default_values") + + @parameterized.expand(HOSTCFGD_TEST_PASSWH_VECTOR) + def test_hostcfgd_passwh_enable(self, test_name, test_data): + """ + Test PASSWH hostcfd daemon initialization + + Args: + test_name(str): test name + test_data(dict): test data which contains initial Config Db tables, and expected results + + Returns: + None + """ + + self.check_config(test_name, test_data, "enable_feature") + + + @parameterized.expand(HOSTCFGD_TEST_PASSWH_VECTOR) + def test_hostcfgd_passwh_classes(self, test_name, test_data): + """ + Test PASSWH hostcfd daemon initialization + + Args: + test_name(str): test name + test_data(dict): test data which contains initial Config Db tables, and expected results + + Returns: + None + """ + + self.check_config(test_name, test_data, "enable_digits_class") \ No newline at end of file diff --git a/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING/login.defs.old b/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING/login.defs.old new file mode 100644 index 000000000000..db8baa4d2bf8 --- /dev/null +++ b/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING/login.defs.old @@ -0,0 +1,340 @@ +# +# /etc/login.defs - Configuration control definitions for the login package. +# +# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH. +# If unspecified, some arbitrary (and possibly incorrect) value will +# be assumed. All other items are optional - if not specified then +# the described action or option will be inhibited. +# +# Comment lines (lines beginning with "#") and blank lines are ignored. +# +# Modified for Linux. --marekm + +# REQUIRED for useradd/userdel/usermod +# Directory where mailboxes reside, _or_ name of file, relative to the +# home directory. If you _do_ define MAIL_DIR and MAIL_FILE, +# MAIL_DIR takes precedence. +# +# Essentially: +# - MAIL_DIR defines the location of users mail spool files +# (for mbox use) by appending the username to MAIL_DIR as defined +# below. +# - MAIL_FILE defines the location of the users mail spool files as the +# fully-qualified filename obtained by prepending the user home +# directory before $MAIL_FILE +# +# NOTE: This is no more used for setting up users MAIL environment variable +# which is, starting from shadow 4.0.12-1 in Debian, entirely the +# job of the pam_mail PAM modules +# See default PAM configuration files provided for +# login, su, etc. +# +# This is a temporary situation: setting these variables will soon +# move to /etc/default/useradd and the variables will then be +# no more supported +MAIL_DIR /var/mail +#MAIL_FILE .mail + +# +# Enable logging and display of /var/log/faillog login failure info. +# This option conflicts with the pam_tally PAM module. +# +FAILLOG_ENAB yes + +# +# Enable display of unknown usernames when login failures are recorded. +# +# WARNING: Unknown usernames may become world readable. +# See #290803 and #298773 for details about how this could become a security +# concern +LOG_UNKFAIL_ENAB no + +# +# Enable logging of successful logins +# +LOG_OK_LOGINS no + +# +# Enable "syslog" logging of su activity - in addition to sulog file logging. +# SYSLOG_SG_ENAB does the same for newgrp and sg. +# +SYSLOG_SU_ENAB yes +SYSLOG_SG_ENAB yes + +# +# If defined, all su activity is logged to this file. +# +#SULOG_FILE /var/log/sulog + +# +# If defined, file which maps tty line to TERM environment parameter. +# Each line of the file is in a format something like "vt100 tty01". +# +#TTYTYPE_FILE /etc/ttytype + +# +# If defined, login failures will be logged here in a utmp format +# last, when invoked as lastb, will read /var/log/btmp, so... +# +FTMP_FILE /var/log/btmp + +# +# If defined, the command name to display when running "su -". For +# example, if this is defined as "su" then a "ps" will display the +# command is "-su". If not defined, then "ps" would display the +# name of the shell actually being run, e.g. something like "-sh". +# +SU_NAME su + +# +# If defined, file which inhibits all the usual chatter during the login +# sequence. If a full pathname, then hushed mode will be enabled if the +# user's name or shell are found in the file. If not a full pathname, then +# hushed mode will be enabled if the file exists in the user's home directory. +# +HUSHLOGIN_FILE .hushlogin +#HUSHLOGIN_FILE /etc/hushlogins + +# +# *REQUIRED* The default PATH settings, for superuser and normal users. +# +# (they are minimal, add the rest in the shell startup files) +ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games + +# +# Terminal permissions +# +# TTYGROUP Login tty will be assigned this group ownership. +# TTYPERM Login tty will be set to this permission. +# +# If you have a "write" program which is "setgid" to a special group +# which owns the terminals, define TTYGROUP to the group number and +# TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign +# TTYPERM to either 622 or 600. +# +# In Debian /usr/bin/bsd-write or similar programs are setgid tty +# However, the default and recommended value for TTYPERM is still 0600 +# to not allow anyone to write to anyone else console or terminal + +# Users can still allow other people to write them by issuing +# the "mesg y" command. + +TTYGROUP tty +TTYPERM 0600 + +# +# Login configuration initializations: +# +# ERASECHAR Terminal ERASE character ('\010' = backspace). +# KILLCHAR Terminal KILL character ('\025' = CTRL/U). +# UMASK Default "umask" value. +# +# The ERASECHAR and KILLCHAR are used only on System V machines. +# +# UMASK is the default umask value for pam_umask and is used by +# useradd and newusers to set the mode of the new home directories. +# 022 is the "historical" value in Debian for UMASK +# 027, or even 077, could be considered better for privacy +# There is no One True Answer here : each sysadmin must make up his/her +# mind. +# +# If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value +# for private user groups, i. e. the uid is the same as gid, and username is +# the same as the primary group name: for these, the user permissions will be +# used as group permissions, e. g. 022 will become 002. +# +# Prefix these values with "0" to get octal, "0x" to get hexadecimal. +# +ERASECHAR 0177 +KILLCHAR 025 +UMASK 022 + +# +# Password aging controls: +# +# PASS_MAX_DAYS Maximum number of days a password may be used. +# PASS_MIN_DAYS Minimum number of days allowed between password changes. +# PASS_WARN_AGE Number of days warning given before a password expires. +# +PASS_MAX_DAYS 99999 +PASS_MIN_DAYS 0 +PASS_WARN_AGE 7 + +# +# Min/max values for automatic uid selection in useradd +# +UID_MIN 1000 +UID_MAX 60000 +# System accounts +#SYS_UID_MIN 100 +#SYS_UID_MAX 999 + +# +# Min/max values for automatic gid selection in groupadd +# +GID_MIN 1000 +GID_MAX 60000 +# System accounts +#SYS_GID_MIN 100 +#SYS_GID_MAX 999 + +# +# Max number of login retries if password is bad. This will most likely be +# overriden by PAM, since the default pam_unix module has it's own built +# in of 3 retries. However, this is a safe fallback in case you are using +# an authentication module that does not enforce PAM_MAXTRIES. +# +LOGIN_RETRIES 5 + +# +# Max time in seconds for login +# +LOGIN_TIMEOUT 60 + +# +# Which fields may be changed by regular users using chfn - use +# any combination of letters "frwh" (full name, room number, work +# phone, home phone). If not defined, no changes are allowed. +# For backward compatibility, "yes" = "rwh" and "no" = "frwh". +# +CHFN_RESTRICT rwh + +# +# Should login be allowed if we can't cd to the home directory? +# Default in no. +# +DEFAULT_HOME yes + +# +# If defined, this command is run when removing a user. +# It should remove any at/cron/print jobs etc. owned by +# the user to be removed (passed as the first argument). +# +#USERDEL_CMD /usr/sbin/userdel_local + +# +# If set to yes, userdel will remove the user's group if it contains no +# more members, and useradd will create by default a group with the name +# of the user. +# +# Other former uses of this variable such as setting the umask when +# user==primary group are not used in PAM environments, such as Debian +# +USERGROUPS_ENAB yes + +# +# Instead of the real user shell, the program specified by this parameter +# will be launched, although its visible name (argv[0]) will be the shell's. +# The program may do whatever it wants (logging, additional authentification, +# banner, ...) before running the actual shell. +# +# FAKE_SHELL /bin/fakeshell + +# +# If defined, either full pathname of a file containing device names or +# a ":" delimited list of device names. Root logins will be allowed only +# upon these devices. +# +# This variable is used by login and su. +# +#CONSOLE /etc/consoles +#CONSOLE console:tty01:tty02:tty03:tty04 + +# +# List of groups to add to the user's supplementary group set +# when logging in on the console (as determined by the CONSOLE +# setting). Default is none. +# +# Use with caution - it is possible for users to gain permanent +# access to these groups, even when not logged in on the console. +# How to do it is left as an exercise for the reader... +# +# This variable is used by login and su. +# +#CONSOLE_GROUPS floppy:audio:cdrom + +# +# If set to "yes", new passwords will be encrypted using the MD5-based +# algorithm compatible with the one used by recent releases of FreeBSD. +# It supports passwords of unlimited length and longer salt strings. +# Set to "no" if you need to copy encrypted passwords to other systems +# which don't understand the new algorithm. Default is "no". +# +# This variable is deprecated. You should use ENCRYPT_METHOD. +# +#MD5_CRYPT_ENAB no + +# +# If set to MD5 , MD5-based algorithm will be used for encrypting password +# If set to SHA256, SHA256-based algorithm will be used for encrypting password +# If set to SHA512, SHA512-based algorithm will be used for encrypting password +# If set to DES, DES-based algorithm will be used for encrypting password (default) +# Overrides the MD5_CRYPT_ENAB option +# +# Note: It is recommended to use a value consistent with +# the PAM modules configuration. +# +ENCRYPT_METHOD SHA512 + +# +# Only used if ENCRYPT_METHOD is set to SHA256 or SHA512. +# +# Define the number of SHA rounds. +# With a lot of rounds, it is more difficult to brute forcing the password. +# But note also that it more CPU resources will be needed to authenticate +# users. +# +# If not specified, the libc will choose the default number of rounds (5000). +# The values must be inside the 1000-999999999 range. +# If only one of the MIN or MAX values is set, then this value will be used. +# If MIN > MAX, the highest value will be used. +# +# SHA_CRYPT_MIN_ROUNDS 5000 +# SHA_CRYPT_MAX_ROUNDS 5000 + +################# OBSOLETED BY PAM ############## +# # +# These options are now handled by PAM. Please # +# edit the appropriate file in /etc/pam.d/ to # +# enable the equivelants of them. +# +############### + +#MOTD_FILE +#DIALUPS_CHECK_ENAB +#LASTLOG_ENAB +#MAIL_CHECK_ENAB +#OBSCURE_CHECKS_ENAB +#PORTTIME_CHECKS_ENAB +#SU_WHEEL_ONLY +#CRACKLIB_DICTPATH +#PASS_CHANGE_TRIES +#PASS_ALWAYS_WARN +#ENVIRON_FILE +#NOLOGINS_FILE +#ISSUE_FILE +#PASS_MIN_LEN +#PASS_MAX_LEN +#ULIMIT +#ENV_HZ +#CHFN_AUTH +#CHSH_AUTH +#FAIL_DELAY + +################# OBSOLETED ####################### +# # +# These options are no more handled by shadow. # +# # +# Shadow utilities will display a warning if they # +# still appear. # +# # +################################################### + +# CLOSE_SESSIONS +# LOGIN_STRING +# NO_PASSWORD_CONSOLE +# QMAIL_DIR + + + diff --git a/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_default_values/common-password b/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_default_values/common-password new file mode 100644 index 000000000000..0da639249c94 --- /dev/null +++ b/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_default_values/common-password @@ -0,0 +1,36 @@ +#THIS IS AN AUTO-GENERATED FILE +# +# /etc/pam.d/common-password - password-related modules common to all services +# +# This file is included from other service-specific PAM config files, +# and should contain a list of modules that define the services to be +# used to change user passwords. The default is pam_unix. + +# Explanation of pam_unix options: +# The "yescrypt" option enables +#hashed passwords using the yescrypt algorithm, introduced in Debian +#11. Without this option, the default is Unix crypt. Prior releases +#used the option "sha512"; if a shadow password hash will be shared +#between Debian 11 and older releases replace "yescrypt" with "sha512" +#for compatibility . The "obscure" option replaces the old +#`OBSCURE_CHECKS_ENAB' option in login.defs. See the pam_unix manpage +#for other options. + +# As of pam 1.0.1-6, this file is managed by pam-auth-update by default. +# To take advantage of this, it is recommended that you configure any +# local modules either before or after the default block, and use +# pam-auth-update to manage selection of other modules. See +# pam-auth-update(8) for details. + +# here are the per-package modules (the "Primary" block) + + +password [success=1 default=ignore] pam_unix.so obscure yescrypt +# here's the fallback if no module succeeds +password requisite pam_deny.so +# prime the stack with a positive return value if there isn't one already; +# this avoids us returning an error just because nothing sets a success code +# since the modules above will each just jump around +password required pam_permit.so +# and here are more per-package modules (the "Additional" block) +# end of pam-auth-update config \ No newline at end of file diff --git a/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_default_values/login.defs b/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_default_values/login.defs new file mode 100644 index 000000000000..db8baa4d2bf8 --- /dev/null +++ b/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_default_values/login.defs @@ -0,0 +1,340 @@ +# +# /etc/login.defs - Configuration control definitions for the login package. +# +# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH. +# If unspecified, some arbitrary (and possibly incorrect) value will +# be assumed. All other items are optional - if not specified then +# the described action or option will be inhibited. +# +# Comment lines (lines beginning with "#") and blank lines are ignored. +# +# Modified for Linux. --marekm + +# REQUIRED for useradd/userdel/usermod +# Directory where mailboxes reside, _or_ name of file, relative to the +# home directory. If you _do_ define MAIL_DIR and MAIL_FILE, +# MAIL_DIR takes precedence. +# +# Essentially: +# - MAIL_DIR defines the location of users mail spool files +# (for mbox use) by appending the username to MAIL_DIR as defined +# below. +# - MAIL_FILE defines the location of the users mail spool files as the +# fully-qualified filename obtained by prepending the user home +# directory before $MAIL_FILE +# +# NOTE: This is no more used for setting up users MAIL environment variable +# which is, starting from shadow 4.0.12-1 in Debian, entirely the +# job of the pam_mail PAM modules +# See default PAM configuration files provided for +# login, su, etc. +# +# This is a temporary situation: setting these variables will soon +# move to /etc/default/useradd and the variables will then be +# no more supported +MAIL_DIR /var/mail +#MAIL_FILE .mail + +# +# Enable logging and display of /var/log/faillog login failure info. +# This option conflicts with the pam_tally PAM module. +# +FAILLOG_ENAB yes + +# +# Enable display of unknown usernames when login failures are recorded. +# +# WARNING: Unknown usernames may become world readable. +# See #290803 and #298773 for details about how this could become a security +# concern +LOG_UNKFAIL_ENAB no + +# +# Enable logging of successful logins +# +LOG_OK_LOGINS no + +# +# Enable "syslog" logging of su activity - in addition to sulog file logging. +# SYSLOG_SG_ENAB does the same for newgrp and sg. +# +SYSLOG_SU_ENAB yes +SYSLOG_SG_ENAB yes + +# +# If defined, all su activity is logged to this file. +# +#SULOG_FILE /var/log/sulog + +# +# If defined, file which maps tty line to TERM environment parameter. +# Each line of the file is in a format something like "vt100 tty01". +# +#TTYTYPE_FILE /etc/ttytype + +# +# If defined, login failures will be logged here in a utmp format +# last, when invoked as lastb, will read /var/log/btmp, so... +# +FTMP_FILE /var/log/btmp + +# +# If defined, the command name to display when running "su -". For +# example, if this is defined as "su" then a "ps" will display the +# command is "-su". If not defined, then "ps" would display the +# name of the shell actually being run, e.g. something like "-sh". +# +SU_NAME su + +# +# If defined, file which inhibits all the usual chatter during the login +# sequence. If a full pathname, then hushed mode will be enabled if the +# user's name or shell are found in the file. If not a full pathname, then +# hushed mode will be enabled if the file exists in the user's home directory. +# +HUSHLOGIN_FILE .hushlogin +#HUSHLOGIN_FILE /etc/hushlogins + +# +# *REQUIRED* The default PATH settings, for superuser and normal users. +# +# (they are minimal, add the rest in the shell startup files) +ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games + +# +# Terminal permissions +# +# TTYGROUP Login tty will be assigned this group ownership. +# TTYPERM Login tty will be set to this permission. +# +# If you have a "write" program which is "setgid" to a special group +# which owns the terminals, define TTYGROUP to the group number and +# TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign +# TTYPERM to either 622 or 600. +# +# In Debian /usr/bin/bsd-write or similar programs are setgid tty +# However, the default and recommended value for TTYPERM is still 0600 +# to not allow anyone to write to anyone else console or terminal + +# Users can still allow other people to write them by issuing +# the "mesg y" command. + +TTYGROUP tty +TTYPERM 0600 + +# +# Login configuration initializations: +# +# ERASECHAR Terminal ERASE character ('\010' = backspace). +# KILLCHAR Terminal KILL character ('\025' = CTRL/U). +# UMASK Default "umask" value. +# +# The ERASECHAR and KILLCHAR are used only on System V machines. +# +# UMASK is the default umask value for pam_umask and is used by +# useradd and newusers to set the mode of the new home directories. +# 022 is the "historical" value in Debian for UMASK +# 027, or even 077, could be considered better for privacy +# There is no One True Answer here : each sysadmin must make up his/her +# mind. +# +# If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value +# for private user groups, i. e. the uid is the same as gid, and username is +# the same as the primary group name: for these, the user permissions will be +# used as group permissions, e. g. 022 will become 002. +# +# Prefix these values with "0" to get octal, "0x" to get hexadecimal. +# +ERASECHAR 0177 +KILLCHAR 025 +UMASK 022 + +# +# Password aging controls: +# +# PASS_MAX_DAYS Maximum number of days a password may be used. +# PASS_MIN_DAYS Minimum number of days allowed between password changes. +# PASS_WARN_AGE Number of days warning given before a password expires. +# +PASS_MAX_DAYS 99999 +PASS_MIN_DAYS 0 +PASS_WARN_AGE 7 + +# +# Min/max values for automatic uid selection in useradd +# +UID_MIN 1000 +UID_MAX 60000 +# System accounts +#SYS_UID_MIN 100 +#SYS_UID_MAX 999 + +# +# Min/max values for automatic gid selection in groupadd +# +GID_MIN 1000 +GID_MAX 60000 +# System accounts +#SYS_GID_MIN 100 +#SYS_GID_MAX 999 + +# +# Max number of login retries if password is bad. This will most likely be +# overriden by PAM, since the default pam_unix module has it's own built +# in of 3 retries. However, this is a safe fallback in case you are using +# an authentication module that does not enforce PAM_MAXTRIES. +# +LOGIN_RETRIES 5 + +# +# Max time in seconds for login +# +LOGIN_TIMEOUT 60 + +# +# Which fields may be changed by regular users using chfn - use +# any combination of letters "frwh" (full name, room number, work +# phone, home phone). If not defined, no changes are allowed. +# For backward compatibility, "yes" = "rwh" and "no" = "frwh". +# +CHFN_RESTRICT rwh + +# +# Should login be allowed if we can't cd to the home directory? +# Default in no. +# +DEFAULT_HOME yes + +# +# If defined, this command is run when removing a user. +# It should remove any at/cron/print jobs etc. owned by +# the user to be removed (passed as the first argument). +# +#USERDEL_CMD /usr/sbin/userdel_local + +# +# If set to yes, userdel will remove the user's group if it contains no +# more members, and useradd will create by default a group with the name +# of the user. +# +# Other former uses of this variable such as setting the umask when +# user==primary group are not used in PAM environments, such as Debian +# +USERGROUPS_ENAB yes + +# +# Instead of the real user shell, the program specified by this parameter +# will be launched, although its visible name (argv[0]) will be the shell's. +# The program may do whatever it wants (logging, additional authentification, +# banner, ...) before running the actual shell. +# +# FAKE_SHELL /bin/fakeshell + +# +# If defined, either full pathname of a file containing device names or +# a ":" delimited list of device names. Root logins will be allowed only +# upon these devices. +# +# This variable is used by login and su. +# +#CONSOLE /etc/consoles +#CONSOLE console:tty01:tty02:tty03:tty04 + +# +# List of groups to add to the user's supplementary group set +# when logging in on the console (as determined by the CONSOLE +# setting). Default is none. +# +# Use with caution - it is possible for users to gain permanent +# access to these groups, even when not logged in on the console. +# How to do it is left as an exercise for the reader... +# +# This variable is used by login and su. +# +#CONSOLE_GROUPS floppy:audio:cdrom + +# +# If set to "yes", new passwords will be encrypted using the MD5-based +# algorithm compatible with the one used by recent releases of FreeBSD. +# It supports passwords of unlimited length and longer salt strings. +# Set to "no" if you need to copy encrypted passwords to other systems +# which don't understand the new algorithm. Default is "no". +# +# This variable is deprecated. You should use ENCRYPT_METHOD. +# +#MD5_CRYPT_ENAB no + +# +# If set to MD5 , MD5-based algorithm will be used for encrypting password +# If set to SHA256, SHA256-based algorithm will be used for encrypting password +# If set to SHA512, SHA512-based algorithm will be used for encrypting password +# If set to DES, DES-based algorithm will be used for encrypting password (default) +# Overrides the MD5_CRYPT_ENAB option +# +# Note: It is recommended to use a value consistent with +# the PAM modules configuration. +# +ENCRYPT_METHOD SHA512 + +# +# Only used if ENCRYPT_METHOD is set to SHA256 or SHA512. +# +# Define the number of SHA rounds. +# With a lot of rounds, it is more difficult to brute forcing the password. +# But note also that it more CPU resources will be needed to authenticate +# users. +# +# If not specified, the libc will choose the default number of rounds (5000). +# The values must be inside the 1000-999999999 range. +# If only one of the MIN or MAX values is set, then this value will be used. +# If MIN > MAX, the highest value will be used. +# +# SHA_CRYPT_MIN_ROUNDS 5000 +# SHA_CRYPT_MAX_ROUNDS 5000 + +################# OBSOLETED BY PAM ############## +# # +# These options are now handled by PAM. Please # +# edit the appropriate file in /etc/pam.d/ to # +# enable the equivelants of them. +# +############### + +#MOTD_FILE +#DIALUPS_CHECK_ENAB +#LASTLOG_ENAB +#MAIL_CHECK_ENAB +#OBSCURE_CHECKS_ENAB +#PORTTIME_CHECKS_ENAB +#SU_WHEEL_ONLY +#CRACKLIB_DICTPATH +#PASS_CHANGE_TRIES +#PASS_ALWAYS_WARN +#ENVIRON_FILE +#NOLOGINS_FILE +#ISSUE_FILE +#PASS_MIN_LEN +#PASS_MAX_LEN +#ULIMIT +#ENV_HZ +#CHFN_AUTH +#CHSH_AUTH +#FAIL_DELAY + +################# OBSOLETED ####################### +# # +# These options are no more handled by shadow. # +# # +# Shadow utilities will display a warning if they # +# still appear. # +# # +################################################### + +# CLOSE_SESSIONS +# LOGIN_STRING +# NO_PASSWORD_CONSOLE +# QMAIL_DIR + + + diff --git a/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_enable_digits_class/common-password b/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_enable_digits_class/common-password new file mode 100644 index 000000000000..841074728a4f --- /dev/null +++ b/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_enable_digits_class/common-password @@ -0,0 +1,39 @@ +#THIS IS AN AUTO-GENERATED FILE +# +# /etc/pam.d/common-password - password-related modules common to all services +# +# This file is included from other service-specific PAM config files, +# and should contain a list of modules that define the services to be +# used to change user passwords. The default is pam_unix. + +# Explanation of pam_unix options: +# The "yescrypt" option enables +#hashed passwords using the yescrypt algorithm, introduced in Debian +#11. Without this option, the default is Unix crypt. Prior releases +#used the option "sha512"; if a shadow password hash will be shared +#between Debian 11 and older releases replace "yescrypt" with "sha512" +#for compatibility . The "obscure" option replaces the old +#`OBSCURE_CHECKS_ENAB' option in login.defs. See the pam_unix manpage +#for other options. + +# As of pam 1.0.1-6, this file is managed by pam-auth-update by default. +# To take advantage of this, it is recommended that you configure any +# local modules either before or after the default block, and use +# pam-auth-update to manage selection of other modules. See +# pam-auth-update(8) for details. + +# here are the per-package modules (the "Primary" block) + +password requisite pam_cracklib.so retry=3 maxrepeat=0 minlen=8 ucredit=0 lcredit=0 dcredit=-1 ocredit=0 enforce_for_root + +password required pam_pwhistory.so remember=0 use_authtok enforce_for_root + +password [success=1 default=ignore] pam_unix.so obscure yescrypt +# here's the fallback if no module succeeds +password requisite pam_deny.so +# prime the stack with a positive return value if there isn't one already; +# this avoids us returning an error just because nothing sets a success code +# since the modules above will each just jump around +password required pam_permit.so +# and here are more per-package modules (the "Additional" block) +# end of pam-auth-update config \ No newline at end of file diff --git a/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_enable_digits_class/login.defs b/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_enable_digits_class/login.defs new file mode 100644 index 000000000000..db8baa4d2bf8 --- /dev/null +++ b/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_enable_digits_class/login.defs @@ -0,0 +1,340 @@ +# +# /etc/login.defs - Configuration control definitions for the login package. +# +# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH. +# If unspecified, some arbitrary (and possibly incorrect) value will +# be assumed. All other items are optional - if not specified then +# the described action or option will be inhibited. +# +# Comment lines (lines beginning with "#") and blank lines are ignored. +# +# Modified for Linux. --marekm + +# REQUIRED for useradd/userdel/usermod +# Directory where mailboxes reside, _or_ name of file, relative to the +# home directory. If you _do_ define MAIL_DIR and MAIL_FILE, +# MAIL_DIR takes precedence. +# +# Essentially: +# - MAIL_DIR defines the location of users mail spool files +# (for mbox use) by appending the username to MAIL_DIR as defined +# below. +# - MAIL_FILE defines the location of the users mail spool files as the +# fully-qualified filename obtained by prepending the user home +# directory before $MAIL_FILE +# +# NOTE: This is no more used for setting up users MAIL environment variable +# which is, starting from shadow 4.0.12-1 in Debian, entirely the +# job of the pam_mail PAM modules +# See default PAM configuration files provided for +# login, su, etc. +# +# This is a temporary situation: setting these variables will soon +# move to /etc/default/useradd and the variables will then be +# no more supported +MAIL_DIR /var/mail +#MAIL_FILE .mail + +# +# Enable logging and display of /var/log/faillog login failure info. +# This option conflicts with the pam_tally PAM module. +# +FAILLOG_ENAB yes + +# +# Enable display of unknown usernames when login failures are recorded. +# +# WARNING: Unknown usernames may become world readable. +# See #290803 and #298773 for details about how this could become a security +# concern +LOG_UNKFAIL_ENAB no + +# +# Enable logging of successful logins +# +LOG_OK_LOGINS no + +# +# Enable "syslog" logging of su activity - in addition to sulog file logging. +# SYSLOG_SG_ENAB does the same for newgrp and sg. +# +SYSLOG_SU_ENAB yes +SYSLOG_SG_ENAB yes + +# +# If defined, all su activity is logged to this file. +# +#SULOG_FILE /var/log/sulog + +# +# If defined, file which maps tty line to TERM environment parameter. +# Each line of the file is in a format something like "vt100 tty01". +# +#TTYTYPE_FILE /etc/ttytype + +# +# If defined, login failures will be logged here in a utmp format +# last, when invoked as lastb, will read /var/log/btmp, so... +# +FTMP_FILE /var/log/btmp + +# +# If defined, the command name to display when running "su -". For +# example, if this is defined as "su" then a "ps" will display the +# command is "-su". If not defined, then "ps" would display the +# name of the shell actually being run, e.g. something like "-sh". +# +SU_NAME su + +# +# If defined, file which inhibits all the usual chatter during the login +# sequence. If a full pathname, then hushed mode will be enabled if the +# user's name or shell are found in the file. If not a full pathname, then +# hushed mode will be enabled if the file exists in the user's home directory. +# +HUSHLOGIN_FILE .hushlogin +#HUSHLOGIN_FILE /etc/hushlogins + +# +# *REQUIRED* The default PATH settings, for superuser and normal users. +# +# (they are minimal, add the rest in the shell startup files) +ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games + +# +# Terminal permissions +# +# TTYGROUP Login tty will be assigned this group ownership. +# TTYPERM Login tty will be set to this permission. +# +# If you have a "write" program which is "setgid" to a special group +# which owns the terminals, define TTYGROUP to the group number and +# TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign +# TTYPERM to either 622 or 600. +# +# In Debian /usr/bin/bsd-write or similar programs are setgid tty +# However, the default and recommended value for TTYPERM is still 0600 +# to not allow anyone to write to anyone else console or terminal + +# Users can still allow other people to write them by issuing +# the "mesg y" command. + +TTYGROUP tty +TTYPERM 0600 + +# +# Login configuration initializations: +# +# ERASECHAR Terminal ERASE character ('\010' = backspace). +# KILLCHAR Terminal KILL character ('\025' = CTRL/U). +# UMASK Default "umask" value. +# +# The ERASECHAR and KILLCHAR are used only on System V machines. +# +# UMASK is the default umask value for pam_umask and is used by +# useradd and newusers to set the mode of the new home directories. +# 022 is the "historical" value in Debian for UMASK +# 027, or even 077, could be considered better for privacy +# There is no One True Answer here : each sysadmin must make up his/her +# mind. +# +# If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value +# for private user groups, i. e. the uid is the same as gid, and username is +# the same as the primary group name: for these, the user permissions will be +# used as group permissions, e. g. 022 will become 002. +# +# Prefix these values with "0" to get octal, "0x" to get hexadecimal. +# +ERASECHAR 0177 +KILLCHAR 025 +UMASK 022 + +# +# Password aging controls: +# +# PASS_MAX_DAYS Maximum number of days a password may be used. +# PASS_MIN_DAYS Minimum number of days allowed between password changes. +# PASS_WARN_AGE Number of days warning given before a password expires. +# +PASS_MAX_DAYS 99999 +PASS_MIN_DAYS 0 +PASS_WARN_AGE 7 + +# +# Min/max values for automatic uid selection in useradd +# +UID_MIN 1000 +UID_MAX 60000 +# System accounts +#SYS_UID_MIN 100 +#SYS_UID_MAX 999 + +# +# Min/max values for automatic gid selection in groupadd +# +GID_MIN 1000 +GID_MAX 60000 +# System accounts +#SYS_GID_MIN 100 +#SYS_GID_MAX 999 + +# +# Max number of login retries if password is bad. This will most likely be +# overriden by PAM, since the default pam_unix module has it's own built +# in of 3 retries. However, this is a safe fallback in case you are using +# an authentication module that does not enforce PAM_MAXTRIES. +# +LOGIN_RETRIES 5 + +# +# Max time in seconds for login +# +LOGIN_TIMEOUT 60 + +# +# Which fields may be changed by regular users using chfn - use +# any combination of letters "frwh" (full name, room number, work +# phone, home phone). If not defined, no changes are allowed. +# For backward compatibility, "yes" = "rwh" and "no" = "frwh". +# +CHFN_RESTRICT rwh + +# +# Should login be allowed if we can't cd to the home directory? +# Default in no. +# +DEFAULT_HOME yes + +# +# If defined, this command is run when removing a user. +# It should remove any at/cron/print jobs etc. owned by +# the user to be removed (passed as the first argument). +# +#USERDEL_CMD /usr/sbin/userdel_local + +# +# If set to yes, userdel will remove the user's group if it contains no +# more members, and useradd will create by default a group with the name +# of the user. +# +# Other former uses of this variable such as setting the umask when +# user==primary group are not used in PAM environments, such as Debian +# +USERGROUPS_ENAB yes + +# +# Instead of the real user shell, the program specified by this parameter +# will be launched, although its visible name (argv[0]) will be the shell's. +# The program may do whatever it wants (logging, additional authentification, +# banner, ...) before running the actual shell. +# +# FAKE_SHELL /bin/fakeshell + +# +# If defined, either full pathname of a file containing device names or +# a ":" delimited list of device names. Root logins will be allowed only +# upon these devices. +# +# This variable is used by login and su. +# +#CONSOLE /etc/consoles +#CONSOLE console:tty01:tty02:tty03:tty04 + +# +# List of groups to add to the user's supplementary group set +# when logging in on the console (as determined by the CONSOLE +# setting). Default is none. +# +# Use with caution - it is possible for users to gain permanent +# access to these groups, even when not logged in on the console. +# How to do it is left as an exercise for the reader... +# +# This variable is used by login and su. +# +#CONSOLE_GROUPS floppy:audio:cdrom + +# +# If set to "yes", new passwords will be encrypted using the MD5-based +# algorithm compatible with the one used by recent releases of FreeBSD. +# It supports passwords of unlimited length and longer salt strings. +# Set to "no" if you need to copy encrypted passwords to other systems +# which don't understand the new algorithm. Default is "no". +# +# This variable is deprecated. You should use ENCRYPT_METHOD. +# +#MD5_CRYPT_ENAB no + +# +# If set to MD5 , MD5-based algorithm will be used for encrypting password +# If set to SHA256, SHA256-based algorithm will be used for encrypting password +# If set to SHA512, SHA512-based algorithm will be used for encrypting password +# If set to DES, DES-based algorithm will be used for encrypting password (default) +# Overrides the MD5_CRYPT_ENAB option +# +# Note: It is recommended to use a value consistent with +# the PAM modules configuration. +# +ENCRYPT_METHOD SHA512 + +# +# Only used if ENCRYPT_METHOD is set to SHA256 or SHA512. +# +# Define the number of SHA rounds. +# With a lot of rounds, it is more difficult to brute forcing the password. +# But note also that it more CPU resources will be needed to authenticate +# users. +# +# If not specified, the libc will choose the default number of rounds (5000). +# The values must be inside the 1000-999999999 range. +# If only one of the MIN or MAX values is set, then this value will be used. +# If MIN > MAX, the highest value will be used. +# +# SHA_CRYPT_MIN_ROUNDS 5000 +# SHA_CRYPT_MAX_ROUNDS 5000 + +################# OBSOLETED BY PAM ############## +# # +# These options are now handled by PAM. Please # +# edit the appropriate file in /etc/pam.d/ to # +# enable the equivelants of them. +# +############### + +#MOTD_FILE +#DIALUPS_CHECK_ENAB +#LASTLOG_ENAB +#MAIL_CHECK_ENAB +#OBSCURE_CHECKS_ENAB +#PORTTIME_CHECKS_ENAB +#SU_WHEEL_ONLY +#CRACKLIB_DICTPATH +#PASS_CHANGE_TRIES +#PASS_ALWAYS_WARN +#ENVIRON_FILE +#NOLOGINS_FILE +#ISSUE_FILE +#PASS_MIN_LEN +#PASS_MAX_LEN +#ULIMIT +#ENV_HZ +#CHFN_AUTH +#CHSH_AUTH +#FAIL_DELAY + +################# OBSOLETED ####################### +# # +# These options are no more handled by shadow. # +# # +# Shadow utilities will display a warning if they # +# still appear. # +# # +################################################### + +# CLOSE_SESSIONS +# LOGIN_STRING +# NO_PASSWORD_CONSOLE +# QMAIL_DIR + + + diff --git a/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_enable_feature/common-password b/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_enable_feature/common-password new file mode 100644 index 000000000000..a66c1b1ade0c --- /dev/null +++ b/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_enable_feature/common-password @@ -0,0 +1,39 @@ +#THIS IS AN AUTO-GENERATED FILE +# +# /etc/pam.d/common-password - password-related modules common to all services +# +# This file is included from other service-specific PAM config files, +# and should contain a list of modules that define the services to be +# used to change user passwords. The default is pam_unix. + +# Explanation of pam_unix options: +# The "yescrypt" option enables +#hashed passwords using the yescrypt algorithm, introduced in Debian +#11. Without this option, the default is Unix crypt. Prior releases +#used the option "sha512"; if a shadow password hash will be shared +#between Debian 11 and older releases replace "yescrypt" with "sha512" +#for compatibility . The "obscure" option replaces the old +#`OBSCURE_CHECKS_ENAB' option in login.defs. See the pam_unix manpage +#for other options. + +# As of pam 1.0.1-6, this file is managed by pam-auth-update by default. +# To take advantage of this, it is recommended that you configure any +# local modules either before or after the default block, and use +# pam-auth-update to manage selection of other modules. See +# pam-auth-update(8) for details. + +# here are the per-package modules (the "Primary" block) + +password requisite pam_cracklib.so retry=3 maxrepeat=0 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 reject_username enforce_for_root + +password required pam_pwhistory.so remember=10 use_authtok enforce_for_root + +password [success=1 default=ignore] pam_unix.so obscure yescrypt +# here's the fallback if no module succeeds +password requisite pam_deny.so +# prime the stack with a positive return value if there isn't one already; +# this avoids us returning an error just because nothing sets a success code +# since the modules above will each just jump around +password required pam_permit.so +# and here are more per-package modules (the "Additional" block) +# end of pam-auth-update config \ No newline at end of file diff --git a/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_enable_feature/login.defs b/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_enable_feature/login.defs new file mode 100644 index 000000000000..1c8b360a14aa --- /dev/null +++ b/src/sonic-host-services/tests/hostcfgd/sample_output/PASSWORD_HARDENING_enable_feature/login.defs @@ -0,0 +1,340 @@ +# +# /etc/login.defs - Configuration control definitions for the login package. +# +# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH. +# If unspecified, some arbitrary (and possibly incorrect) value will +# be assumed. All other items are optional - if not specified then +# the described action or option will be inhibited. +# +# Comment lines (lines beginning with "#") and blank lines are ignored. +# +# Modified for Linux. --marekm + +# REQUIRED for useradd/userdel/usermod +# Directory where mailboxes reside, _or_ name of file, relative to the +# home directory. If you _do_ define MAIL_DIR and MAIL_FILE, +# MAIL_DIR takes precedence. +# +# Essentially: +# - MAIL_DIR defines the location of users mail spool files +# (for mbox use) by appending the username to MAIL_DIR as defined +# below. +# - MAIL_FILE defines the location of the users mail spool files as the +# fully-qualified filename obtained by prepending the user home +# directory before $MAIL_FILE +# +# NOTE: This is no more used for setting up users MAIL environment variable +# which is, starting from shadow 4.0.12-1 in Debian, entirely the +# job of the pam_mail PAM modules +# See default PAM configuration files provided for +# login, su, etc. +# +# This is a temporary situation: setting these variables will soon +# move to /etc/default/useradd and the variables will then be +# no more supported +MAIL_DIR /var/mail +#MAIL_FILE .mail + +# +# Enable logging and display of /var/log/faillog login failure info. +# This option conflicts with the pam_tally PAM module. +# +FAILLOG_ENAB yes + +# +# Enable display of unknown usernames when login failures are recorded. +# +# WARNING: Unknown usernames may become world readable. +# See #290803 and #298773 for details about how this could become a security +# concern +LOG_UNKFAIL_ENAB no + +# +# Enable logging of successful logins +# +LOG_OK_LOGINS no + +# +# Enable "syslog" logging of su activity - in addition to sulog file logging. +# SYSLOG_SG_ENAB does the same for newgrp and sg. +# +SYSLOG_SU_ENAB yes +SYSLOG_SG_ENAB yes + +# +# If defined, all su activity is logged to this file. +# +#SULOG_FILE /var/log/sulog + +# +# If defined, file which maps tty line to TERM environment parameter. +# Each line of the file is in a format something like "vt100 tty01". +# +#TTYTYPE_FILE /etc/ttytype + +# +# If defined, login failures will be logged here in a utmp format +# last, when invoked as lastb, will read /var/log/btmp, so... +# +FTMP_FILE /var/log/btmp + +# +# If defined, the command name to display when running "su -". For +# example, if this is defined as "su" then a "ps" will display the +# command is "-su". If not defined, then "ps" would display the +# name of the shell actually being run, e.g. something like "-sh". +# +SU_NAME su + +# +# If defined, file which inhibits all the usual chatter during the login +# sequence. If a full pathname, then hushed mode will be enabled if the +# user's name or shell are found in the file. If not a full pathname, then +# hushed mode will be enabled if the file exists in the user's home directory. +# +HUSHLOGIN_FILE .hushlogin +#HUSHLOGIN_FILE /etc/hushlogins + +# +# *REQUIRED* The default PATH settings, for superuser and normal users. +# +# (they are minimal, add the rest in the shell startup files) +ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games + +# +# Terminal permissions +# +# TTYGROUP Login tty will be assigned this group ownership. +# TTYPERM Login tty will be set to this permission. +# +# If you have a "write" program which is "setgid" to a special group +# which owns the terminals, define TTYGROUP to the group number and +# TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign +# TTYPERM to either 622 or 600. +# +# In Debian /usr/bin/bsd-write or similar programs are setgid tty +# However, the default and recommended value for TTYPERM is still 0600 +# to not allow anyone to write to anyone else console or terminal + +# Users can still allow other people to write them by issuing +# the "mesg y" command. + +TTYGROUP tty +TTYPERM 0600 + +# +# Login configuration initializations: +# +# ERASECHAR Terminal ERASE character ('\010' = backspace). +# KILLCHAR Terminal KILL character ('\025' = CTRL/U). +# UMASK Default "umask" value. +# +# The ERASECHAR and KILLCHAR are used only on System V machines. +# +# UMASK is the default umask value for pam_umask and is used by +# useradd and newusers to set the mode of the new home directories. +# 022 is the "historical" value in Debian for UMASK +# 027, or even 077, could be considered better for privacy +# There is no One True Answer here : each sysadmin must make up his/her +# mind. +# +# If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value +# for private user groups, i. e. the uid is the same as gid, and username is +# the same as the primary group name: for these, the user permissions will be +# used as group permissions, e. g. 022 will become 002. +# +# Prefix these values with "0" to get octal, "0x" to get hexadecimal. +# +ERASECHAR 0177 +KILLCHAR 025 +UMASK 022 + +# +# Password aging controls: +# +# PASS_MAX_DAYS Maximum number of days a password may be used. +# PASS_MIN_DAYS Minimum number of days allowed between password changes. +# PASS_WARN_AGE Number of days warning given before a password expires. +# +PASS_MAX_DAYS 180 +PASS_MIN_DAYS 0 +PASS_WARN_AGE 15 + +# +# Min/max values for automatic uid selection in useradd +# +UID_MIN 1000 +UID_MAX 60000 +# System accounts +#SYS_UID_MIN 100 +#SYS_UID_MAX 999 + +# +# Min/max values for automatic gid selection in groupadd +# +GID_MIN 1000 +GID_MAX 60000 +# System accounts +#SYS_GID_MIN 100 +#SYS_GID_MAX 999 + +# +# Max number of login retries if password is bad. This will most likely be +# overriden by PAM, since the default pam_unix module has it's own built +# in of 3 retries. However, this is a safe fallback in case you are using +# an authentication module that does not enforce PAM_MAXTRIES. +# +LOGIN_RETRIES 5 + +# +# Max time in seconds for login +# +LOGIN_TIMEOUT 60 + +# +# Which fields may be changed by regular users using chfn - use +# any combination of letters "frwh" (full name, room number, work +# phone, home phone). If not defined, no changes are allowed. +# For backward compatibility, "yes" = "rwh" and "no" = "frwh". +# +CHFN_RESTRICT rwh + +# +# Should login be allowed if we can't cd to the home directory? +# Default in no. +# +DEFAULT_HOME yes + +# +# If defined, this command is run when removing a user. +# It should remove any at/cron/print jobs etc. owned by +# the user to be removed (passed as the first argument). +# +#USERDEL_CMD /usr/sbin/userdel_local + +# +# If set to yes, userdel will remove the user's group if it contains no +# more members, and useradd will create by default a group with the name +# of the user. +# +# Other former uses of this variable such as setting the umask when +# user==primary group are not used in PAM environments, such as Debian +# +USERGROUPS_ENAB yes + +# +# Instead of the real user shell, the program specified by this parameter +# will be launched, although its visible name (argv[0]) will be the shell's. +# The program may do whatever it wants (logging, additional authentification, +# banner, ...) before running the actual shell. +# +# FAKE_SHELL /bin/fakeshell + +# +# If defined, either full pathname of a file containing device names or +# a ":" delimited list of device names. Root logins will be allowed only +# upon these devices. +# +# This variable is used by login and su. +# +#CONSOLE /etc/consoles +#CONSOLE console:tty01:tty02:tty03:tty04 + +# +# List of groups to add to the user's supplementary group set +# when logging in on the console (as determined by the CONSOLE +# setting). Default is none. +# +# Use with caution - it is possible for users to gain permanent +# access to these groups, even when not logged in on the console. +# How to do it is left as an exercise for the reader... +# +# This variable is used by login and su. +# +#CONSOLE_GROUPS floppy:audio:cdrom + +# +# If set to "yes", new passwords will be encrypted using the MD5-based +# algorithm compatible with the one used by recent releases of FreeBSD. +# It supports passwords of unlimited length and longer salt strings. +# Set to "no" if you need to copy encrypted passwords to other systems +# which don't understand the new algorithm. Default is "no". +# +# This variable is deprecated. You should use ENCRYPT_METHOD. +# +#MD5_CRYPT_ENAB no + +# +# If set to MD5 , MD5-based algorithm will be used for encrypting password +# If set to SHA256, SHA256-based algorithm will be used for encrypting password +# If set to SHA512, SHA512-based algorithm will be used for encrypting password +# If set to DES, DES-based algorithm will be used for encrypting password (default) +# Overrides the MD5_CRYPT_ENAB option +# +# Note: It is recommended to use a value consistent with +# the PAM modules configuration. +# +ENCRYPT_METHOD SHA512 + +# +# Only used if ENCRYPT_METHOD is set to SHA256 or SHA512. +# +# Define the number of SHA rounds. +# With a lot of rounds, it is more difficult to brute forcing the password. +# But note also that it more CPU resources will be needed to authenticate +# users. +# +# If not specified, the libc will choose the default number of rounds (5000). +# The values must be inside the 1000-999999999 range. +# If only one of the MIN or MAX values is set, then this value will be used. +# If MIN > MAX, the highest value will be used. +# +# SHA_CRYPT_MIN_ROUNDS 5000 +# SHA_CRYPT_MAX_ROUNDS 5000 + +################# OBSOLETED BY PAM ############## +# # +# These options are now handled by PAM. Please # +# edit the appropriate file in /etc/pam.d/ to # +# enable the equivelants of them. +# +############### + +#MOTD_FILE +#DIALUPS_CHECK_ENAB +#LASTLOG_ENAB +#MAIL_CHECK_ENAB +#OBSCURE_CHECKS_ENAB +#PORTTIME_CHECKS_ENAB +#SU_WHEEL_ONLY +#CRACKLIB_DICTPATH +#PASS_CHANGE_TRIES +#PASS_ALWAYS_WARN +#ENVIRON_FILE +#NOLOGINS_FILE +#ISSUE_FILE +#PASS_MIN_LEN +#PASS_MAX_LEN +#ULIMIT +#ENV_HZ +#CHFN_AUTH +#CHSH_AUTH +#FAIL_DELAY + +################# OBSOLETED ####################### +# # +# These options are no more handled by shadow. # +# # +# Shadow utilities will display a warning if they # +# still appear. # +# # +################################################### + +# CLOSE_SESSIONS +# LOGIN_STRING +# NO_PASSWORD_CONSOLE +# QMAIL_DIR + + + diff --git a/src/sonic-host-services/tests/hostcfgd/test_passwh_vectors.py b/src/sonic-host-services/tests/hostcfgd/test_passwh_vectors.py new file mode 100644 index 000000000000..acf1c7671125 --- /dev/null +++ b/src/sonic-host-services/tests/hostcfgd/test_passwh_vectors.py @@ -0,0 +1,244 @@ +""" + hostcfgd test password hardening vector +""" +HOSTCFGD_TEST_PASSWH_VECTOR = [ + [ + "PASSWORD_HARDENING", + { + "default_values":{ + "PASSW_HARDENING": { + "POLICIES":{ + "state": "disabled", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "reject_user_passw_match": "True", + "lower_class": "True", + "upper_class": "True", + "digits_class": "True", + "special_class": "True" + } + }, + "DEVICE_METADATA": { + "localhost": { + "hostname": "radius", + } + }, + "FEATURE": { + "dhcp_relay": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "set_owner": "kube", + "state": "enabled" + }, + }, + "KDUMP": { + "config": { + "enabled": "false", + "num_dumps": "3", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M" + } + } + }, + "enable_feature":{ + "PASSW_HARDENING": { + "POLICIES":{ + "state": "enabled", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "reject_user_passw_match": "True", + "lower_class": "True", + "upper_class": "True", + "digits_class": "True", + "special_class": "True" + } + }, + "DEVICE_METADATA": { + "localhost": { + "hostname": "radius", + } + }, + "FEATURE": { + "dhcp_relay": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "set_owner": "kube", + "state": "enabled" + }, + }, + "KDUMP": { + "config": { + "enabled": "false", + "num_dumps": "3", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M" + } + } + }, + "enable_digits_class":{ + "PASSW_HARDENING": { + "POLICIES":{ + "state": "enabled", + "expiration": "0", + "expiration_warning": "0", + "history_cnt": "0", + "len_min": "8", + "reject_user_passw_match": "False", + "lower_class": "False", + "upper_class": "False", + "digits_class": "True", + "special_class": "False" + } + }, + "DEVICE_METADATA": { + "localhost": { + "hostname": "radius", + } + }, + "FEATURE": { + "dhcp_relay": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "set_owner": "kube", + "state": "enabled" + }, + }, + "KDUMP": { + "config": { + "enabled": "false", + "num_dumps": "3", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M" + } + } + }, + "enable_lower_class":{ + "PASSW_HARDENING": { + "POLICIES":{ + "state": "enabled", + "expiration": "0", + "expiration_warning": "0", + "history_cnt": "0", + "len_min": "8", + "reject_user_passw_match": "False", + "lower_class": "True", + "upper_class": "False", + "digits_class": "False", + "special_class": "False" + } + }, + "DEVICE_METADATA": { + "localhost": { + "hostname": "radius", + } + }, + "FEATURE": { + "dhcp_relay": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "set_owner": "kube", + "state": "enabled" + }, + }, + "KDUMP": { + "config": { + "enabled": "false", + "num_dumps": "3", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M" + } + }, + }, + "enable_upper_class":{ + "PASSW_HARDENING": { + "POLICIES":{ + "state": "enabled", + "expiration": "0", + "expiration_warning": "0", + "history_cnt": "0", + "len_min": "8", + "reject_user_passw_match": "False", + "lower_class": "False", + "upper_class": "True", + "digits_class": "False", + "special_class": "False" + } + }, + "DEVICE_METADATA": { + "localhost": { + "hostname": "radius", + } + }, + "FEATURE": { + "dhcp_relay": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "set_owner": "kube", + "state": "enabled" + }, + }, + "KDUMP": { + "config": { + "enabled": "false", + "num_dumps": "3", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M" + } + } + }, + "enable_special_class":{ + "PASSW_HARDENING": { + "POLICIES":{ + "state": "enabled", + "expiration": "0", + "expiration_warning": "0", + "history_cnt": "0", + "len_min": "8", + "reject_user_passw_match": "False", + "lower_class": "False", + "upper_class": "False", + "digits_class": "False", + "special_class": "True" + } + }, + "DEVICE_METADATA": { + "localhost": { + "hostname": "radius", + } + }, + "FEATURE": { + "dhcp_relay": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "set_owner": "kube", + "state": "enabled" + }, + }, + "KDUMP": { + "config": { + "enabled": "false", + "num_dumps": "3", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M" + } + } + } + } + ] +] From 37c9b27ce2ec6db1fbd7a8f03b1feac73a2c0c65 Mon Sep 17 00:00:00 2001 From: judyjoseph <53951155+judyjoseph@users.noreply.github.com> Date: Wed, 29 Jun 2022 09:58:35 -0700 Subject: [PATCH 073/259] [macsec] Parse masec_enabled and macsec_profile from minigraph (#10917) * Updates needed to parse the macsec config from minigraph * Add unit tests in tests/test_cfggen.py::TestCfgGen, and updates --- src/sonic-config-engine/minigraph.py | 41 ++++++++++++++++--- src/sonic-config-engine/tests/common_utils.py | 3 ++ .../tests/macsec_profile.json | 22 ++++++++++ .../tests/sample-voq-graph.xml | 41 ++++++++++++++----- src/sonic-config-engine/tests/test_cfggen.py | 22 ++++++---- 5 files changed, 105 insertions(+), 24 deletions(-) create mode 100644 src/sonic-config-engine/tests/macsec_profile.json diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index 15d6682359f3..2bcef2232aef 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -890,6 +890,7 @@ def parse_meta(meta, hname): switch_type = None max_cores = None kube_data = {} + macsec_profile = {} device_metas = meta.find(str(QName(ns, "Devices"))) for device in device_metas.findall(str(QName(ns1, "DeviceMetadata"))): if device.find(str(QName(ns1, "Name"))).text.lower() == hname.lower(): @@ -930,7 +931,9 @@ def parse_meta(meta, hname): kube_data["enable"] = value elif name == "KubernetesServerIp": kube_data["ip"] = value - return syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data + elif name == 'MacSecProfile': + macsec_profile = parse_macsec_profile(value) + return syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile def parse_system_defaults(meta): @@ -979,6 +982,7 @@ def parse_linkmeta(meta, hname): upper_tor_hostname = '' lower_tor_hostname = '' auto_negotiation = None + macsec_enabled = False properties = linkmeta.find(str(QName(ns1, "Properties"))) for device_property in properties.findall(str(QName(ns1, "DeviceProperty"))): @@ -994,6 +998,8 @@ def parse_linkmeta(meta, hname): lower_tor_hostname = value elif name == "AutoNegotiation": auto_negotiation = value + elif name == "MacSecEnabled": + macsec_enabled = value linkmetas[port] = {} if fec_disabled: @@ -1005,14 +1011,28 @@ def parse_linkmeta(meta, hname): linkmetas[port]["PeerSwitch"] = upper_tor_hostname if auto_negotiation: linkmetas[port]["AutoNegotiation"] = auto_negotiation + if macsec_enabled: + linkmetas[port]["MacSecEnabled"] = macsec_enabled return linkmetas +def parse_macsec_profile(val_string): + macsec_profile = {} + values = val_string.strip().split() + for val in values: + keys = val.strip().split('=') + if keys[0] == 'PrimaryKey': + macsec_profile['PrimaryKey'] = keys[1].strip('\"') + elif keys[0] == 'FallbackKey': + macsec_profile['FallbackKey'] = keys[1].strip('\"') + + return macsec_profile def parse_asic_meta(meta, hname): sub_role = None switch_id = None switch_type = None max_cores = None + macsec_profile = {} device_metas = meta.find(str(QName(ns, "Devices"))) for device in device_metas.findall(str(QName(ns1, "DeviceMetadata"))): if device.find(str(QName(ns1, "Name"))).text.lower() == hname.lower(): @@ -1028,7 +1048,10 @@ def parse_asic_meta(meta, hname): switch_type = value elif name == "MaxCores": max_cores = value - return sub_role, switch_id, switch_type, max_cores + elif name == 'MacSecProfile': + macsec_profile = parse_macsec_profile(value) + + return sub_role, switch_id, switch_type, max_cores, macsec_profile def parse_deviceinfo(meta, hwsku): port_speeds = {} @@ -1289,6 +1312,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw kube_data = {} static_routes = {} system_defaults = {} + macsec_profile = {} hwsku_qn = QName(ns, "HwSku") hostname_qn = QName(ns, "Hostname") @@ -1319,7 +1343,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw elif child.tag == str(QName(ns, "UngDec")): (u_neighbors, u_devices, _, _, _, _, _, _) = parse_png(child, hostname, None) elif child.tag == str(QName(ns, "MetadataDeclaration")): - (syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data) = parse_meta(child, hostname) + (syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile) = parse_meta(child, hostname) elif child.tag == str(QName(ns, "LinkMetadataDeclaration")): linkmetas = parse_linkmeta(child, hostname) elif child.tag == str(QName(ns, "DeviceInfos")): @@ -1335,7 +1359,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw elif child.tag == str(QName(ns, "PngDec")): (neighbors, devices, port_speed_png) = parse_asic_png(child, asic_name, hostname) elif child.tag == str(QName(ns, "MetadataDeclaration")): - (sub_role, switch_id, switch_type, max_cores ) = parse_asic_meta(child, asic_name) + (sub_role, switch_id, switch_type, max_cores, macsec_profile) = parse_asic_meta(child, asic_name) elif child.tag == str(QName(ns, "LinkMetadataDeclaration")): linkmetas = parse_linkmeta(child, hostname) elif child.tag == str(QName(ns, "DeviceInfos")): @@ -1538,6 +1562,11 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw if autoneg: port['autoneg'] = 'on' if autoneg.lower() == 'true' else 'off' + # If macsec is enabled on interface, and profile is valid, add the profile to port + macsec_enabled = linkmetas.get(alias, {}).get('MacSecEnabled') + if macsec_enabled and 'PrimaryKey' in macsec_profile: + port['macsec'] = macsec_profile['PrimaryKey'] + # If connected to a smart cable, get the connection position for port_name, port in ports.items(): if port_name in mux_cable_ports: @@ -1872,7 +1901,7 @@ def parse_asic_sub_role(filename, asic_name): root = ET.parse(filename).getroot() for child in root: if child.tag == str(QName(ns, "MetadataDeclaration")): - sub_role, _, _, _ = parse_asic_meta(child, asic_name) + sub_role, _, _, _, _= parse_asic_meta(child, asic_name) return sub_role def parse_asic_switch_type(filename, asic_name): @@ -1880,7 +1909,7 @@ def parse_asic_switch_type(filename, asic_name): root = ET.parse(filename).getroot() for child in root: if child.tag == str(QName(ns, "MetadataDeclaration")): - _, _, switch_type, _ = parse_asic_meta(child, asic_name) + _, _, switch_type, _, _ = parse_asic_meta(child, asic_name) return switch_type return None diff --git a/src/sonic-config-engine/tests/common_utils.py b/src/sonic-config-engine/tests/common_utils.py index 7b8d2b4e27a4..72325ecbc1e0 100644 --- a/src/sonic-config-engine/tests/common_utils.py +++ b/src/sonic-config-engine/tests/common_utils.py @@ -61,6 +61,7 @@ def validate(self, argument): parser.add_argument("-n", "--namespace", help="namespace name", nargs='?', const=None, default=None) parser.add_argument("-p", "--port-config", help="port config file, used with -m or -k", nargs='?', const=None) parser.add_argument("-S", "--hwsku-config", help="hwsku config file, used with -p and -m or -k", nargs='?', const=None) + parser.add_argument("-j", "--json", help="additional json file input, used with -p, -S and -m or -k", nargs='?', const=None) args, unknown = parser.parse_known_args(shlex.split(argument)) print('\n Validating yang schema') @@ -73,6 +74,8 @@ def validate(self, argument): cmd += ' -p ' + args.port_config if args.namespace is not None: cmd += ' -n ' + args.namespace + if args.json is not None: + cmd += ' -j ' + args.json cmd += ' --print-data' output = subprocess.check_output(cmd, shell=True).decode() try: diff --git a/src/sonic-config-engine/tests/macsec_profile.json b/src/sonic-config-engine/tests/macsec_profile.json new file mode 100644 index 000000000000..b70f1a052128 --- /dev/null +++ b/src/sonic-config-engine/tests/macsec_profile.json @@ -0,0 +1,22 @@ +{ + "MACSEC_PROFILE":{ + "macsec-profile": { + "cipher_suite": "GCM-AES-XPN-256", + "primary_cak": "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF", + "primary_ckn": "6162636465666768696A6B6C6D6E6F707172737475767778797A303132333435", + "fallback_cak": "0000000000000000000000000000000000000000000000000000000000000000", + "fallback_ckn": "1111111111111111111111111111111111111111111111111111111111111111", + "priority": "0", + "rekey_period": "60" + }, + "macsec-profile2": { + "cipher_suite": "GCM-AES-XPN-256", + "primary_cak": "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF", + "primary_ckn": "6162636465666768696A6B6C6D6E6F707172737475767778797A303132333435", + "fallback_cak": "0000000000000000000000000000000000000000000000000000000000000000", + "fallback_ckn": "1111111111111111111111111111111111111111111111111111111111111111", + "priority": "0", + "rekey_period": "60" + } + } +} diff --git a/src/sonic-config-engine/tests/sample-voq-graph.xml b/src/sonic-config-engine/tests/sample-voq-graph.xml index 5205265ee384..f1fa43620345 100644 --- a/src/sonic-config-engine/tests/sample-voq-graph.xml +++ b/src/sonic-config-engine/tests/sample-voq-graph.xml @@ -67,6 +67,21 @@ + + + + + + + MacSecEnabled + True + + + linecard-1:Ethernet1/1;ARISTA01-RH:Ethernet1/1 + + + + @@ -144,6 +159,10 @@ 16 + + MacSecProfile + PrimaryKey="macsec-profile" FallbackKey="macsec-profile2" MacsecPolicy="" + @@ -157,36 +176,36 @@ true 1 - fortyGigE0/0 + Ethernet1/1 false 0 0 - 10000 + 100000 DeviceInterface true 1 - fortyGigE0/4 + Ethernet2/1 false 0 0 - 25000 + 100000 DeviceInterface true 1 - fortyGigE0/8 + Ethernet3/1 false 0 0 - 40000 + 100000 Interface description @@ -194,7 +213,7 @@ true 1 - fortyGigE0/12 + Ethernet4/1 false 0 @@ -207,7 +226,7 @@ true 1 - fortyGigE0/16 + Ethernet5/1 false 0 @@ -219,7 +238,7 @@ true 1 - fortyGigE0/20 + Ethernet6/1 false 0 @@ -231,7 +250,7 @@ true 1 - fortyGigE0/24 + Ethernet7/1 false 0 @@ -243,7 +262,7 @@ true 1 - fortyGigE0/28 + Ethernetr8/1 false 0 diff --git a/src/sonic-config-engine/tests/test_cfggen.py b/src/sonic-config-engine/tests/test_cfggen.py index 175aefff8da4..0c3519068e90 100644 --- a/src/sonic-config-engine/tests/test_cfggen.py +++ b/src/sonic-config-engine/tests/test_cfggen.py @@ -38,6 +38,7 @@ def setUp(self): self.voq_port_config = os.path.join(self.test_dir, 'voq-sample-port-config.ini') self.packet_chassis_graph = os.path.join(self.test_dir, 'sample-chassis-packet-lc-graph.xml') self.packet_chassis_port_ini = os.path.join(self.test_dir, 'sample-chassis-packet-lc-port-config.ini') + self.macsec_profile = os.path.join(self.test_dir, 'macsec_profile.json') # To ensure that mock config_db data is used for unit-test cases os.environ["CFGGEN_UNIT_TESTING"] = "2" @@ -839,7 +840,7 @@ def test_show_run_interfaces(self): self.assertEqual(output, '') def test_minigraph_voq_metadata(self): - argument = "-m {} -p {} --var-json DEVICE_METADATA".format(self.sample_graph_voq, self.voq_port_config) + argument = "-j {} -m {} -p {} --var-json DEVICE_METADATA".format(self.macsec_profile, self.sample_graph_voq, self.voq_port_config) output = json.loads(self.run_script(argument)) self.assertEqual(output['localhost']['asic_name'], 'Asic0') self.assertEqual(output['localhost']['switch_id'], '0') @@ -847,7 +848,7 @@ def test_minigraph_voq_metadata(self): self.assertEqual(output['localhost']['max_cores'], '16') def test_minigraph_voq_system_ports(self): - argument = "-m {} -p {} --var-json SYSTEM_PORT".format(self.sample_graph_voq, self.voq_port_config) + argument = "-j {} -m {} -p {} --var-json SYSTEM_PORT".format(self.macsec_profile, self.sample_graph_voq, self.voq_port_config) self.assertDictEqual( json.loads(self.run_script(argument)), { @@ -865,8 +866,16 @@ def test_minigraph_voq_system_ports(self): } ) + def test_minigraph_voq_port_macsec_enabled(self): + argument = '-j "' + self.macsec_profile + '" -m "' + self.sample_graph_voq + '" -p "' + self.voq_port_config + '" -v "PORT[\'Ethernet0\']"' + output = self.run_script(argument) + self.assertEqual( + utils.to_dict(output.strip()), + utils.to_dict("{'lanes': '6,7', 'fec': 'rs', 'alias': 'Ethernet1/1', 'index': '1', 'role': 'Ext', 'speed': '100000', 'macsec': 'macsec-profile', 'description': 'Ethernet1/1', 'mtu': '9100', 'tpid': '0x8100', 'pfc_asym': 'off'}") + ) + def test_minigraph_voq_inband_interface_vlan(self): - argument = "-m {} -p {} --var-json VOQ_INBAND_INTERFACE".format(self.sample_graph_voq, self.voq_port_config) + argument = "-j {} -m {} -p {} --var-json VOQ_INBAND_INTERFACE".format(self.macsec_profile, self.sample_graph_voq, self.voq_port_config) output = self.run_script(argument) output_dict = utils.to_dict(output.strip()) self.assertDictEqual( @@ -879,7 +888,7 @@ def test_minigraph_voq_inband_interface_vlan(self): ) def test_minigraph_voq_inband_interface_port(self): - argument = "-m {} -p {} --var-json VOQ_INBAND_INTERFACE".format(self.sample_graph_voq, self.voq_port_config) + argument = "-j {} -m {} -p {} --var-json VOQ_INBAND_INTERFACE".format(self.macsec_profile, self.sample_graph_voq, self.voq_port_config) output = self.run_script(argument) output_dict = utils.to_dict(output.strip()) self.assertDictEqual( @@ -892,7 +901,7 @@ def test_minigraph_voq_inband_interface_port(self): ) def test_minigraph_voq_inband_port(self): - argument = "-m {} -p {} --var-json PORT".format(self.sample_graph_voq, self.voq_port_config) + argument = "-j {} -m {} -p {} --var-json PORT".format(self.macsec_profile, self.sample_graph_voq, self.voq_port_config) output = self.run_script(argument) output_dict = utils.to_dict(output.strip()) self.assertDictEqual( @@ -910,7 +919,7 @@ def test_minigraph_voq_inband_port(self): }) def test_minigraph_voq_recirc_ports(self): - argument = "-m {} -p {} --var-json PORT".format(self.sample_graph_voq, self.voq_port_config) + argument = "-j {} -m {} -p {} --var-json PORT".format(self.macsec_profile, self.sample_graph_voq, self.voq_port_config) output = self.run_script(argument) output_dict = utils.to_dict(output.strip()) self.assertDictEqual( @@ -968,4 +977,3 @@ def test_minigraph_bgp_packet_chassis_vlan_subintf(self): utils.to_dict(output.strip()), utils.to_dict("{('PortChannel32.2', '192.168.1.4/24'): {}, 'PortChannel32.2': {'admin_status': 'up'}, ('PortChannel33.2', '192.168.2.4/24'): {}, 'PortChannel33.2': {'admin_status': 'up'}}") ) - From ded05adb3ef45c552bfcfa08e75134e78ebed947 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Thu, 30 Jun 2022 10:35:51 -0700 Subject: [PATCH 074/259] [202205][swss][utilities] advance submodule head (#11294) swss: * 6bafea4 2022-06-29 | [vnetorch] [vxlanorch] fix a set of memory usage issues (#2352) (HEAD -> 202205, github/202205) [Yakiv Huryk] utilities: * c64454c 2022-06-28 | [GCU] Moving UniqueLanes from only validating moves, to be a supplemental YANG validator (#2234) (HEAD -> 202205, github/202205) [Mohamed Ghoneim] * fbd79d4 2022-06-29 | Add check to not allow deleting PO if its member of vlan (#2237) [anilkpan] Signed-off-by: Ying Xie --- src/sonic-swss | 2 +- src/sonic-utilities | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sonic-swss b/src/sonic-swss index 665bbbb8b217..6bafea4af444 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 665bbbb8b217d2f49dfaea89ff7c83eeeb10edb6 +Subproject commit 6bafea4af4448206dfcbcefbc1f7f54d2e83e450 diff --git a/src/sonic-utilities b/src/sonic-utilities index 430cd65ec6fe..c64454c904c1 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 430cd65ec6fe4ffc0a57857609cff2bc01019b69 +Subproject commit c64454c904c15397706beee0bb8bdcca39edb20c From 0acc47ecc9d6e4bb3aae10998a508495d1a382c1 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Mon, 4 Jul 2022 20:19:43 +0800 Subject: [PATCH 075/259] [ci/build]: Upgrade SONiC package versions (#11189) Upgrade SONiC Versions --- .../build-sonic-slave-bullseye/versions-git | 8 ++--- .../build-sonic-slave-bullseye/versions-py3 | 2 +- .../build-sonic-slave-bullseye/versions-web | 6 ++-- .../versions-deb-buster | 4 +-- .../build-sonic-slave-buster/versions-git | 4 +-- .../build-sonic-slave-buster/versions-py3 | 4 +-- .../build-sonic-slave-buster/versions-web | 6 ++-- .../build-sonic-slave-stretch/versions-web | 4 +-- files/build/versions/default/versions-docker | 30 ++++++++-------- files/build/versions/default/versions-git | 14 ++++---- files/build/versions/default/versions-web | 6 ++-- .../versions-deb-bullseye | 2 +- .../docker-base-buster/versions-deb-buster | 4 +-- .../versions-deb-bullseye | 1 + .../dockers/docker-ptf/versions-deb-buster | 6 ++-- .../versions/dockers/docker-ptf/versions-py2 | 2 +- .../docker-sonic-mgmt-framework/versions-py3 | 16 ++++----- .../docker-sonic-vs/versions-deb-buster | 2 +- .../dockers/docker-sonic-vs/versions-py3 | 8 ++--- .../docker-syncd-bfn-rpc/versions-deb-buster | 2 +- .../versions-deb-buster | 2 +- .../docker-syncd-brcm-rpc/versions-deb-buster | 2 +- .../docker-syncd-brcm/versions-deb-buster | 2 +- .../versions-deb-buster | 2 +- .../versions-deb-bullseye | 4 +-- .../versions-deb-bullseye | 5 +-- .../versions-deb-bullseye-arm64 | 3 +- .../versions-deb-bullseye-armhf | 1 - .../dockers/sonic-slave-bullseye/versions-git | 2 +- .../dockers/sonic-slave-bullseye/versions-py3 | 2 +- .../dockers/sonic-slave-bullseye/versions-web | 2 +- .../sonic-slave-buster/versions-deb-buster | 6 ++-- .../dockers/sonic-slave-buster/versions-git | 2 +- .../dockers/sonic-slave-buster/versions-py3 | 6 ++-- .../dockers/sonic-slave-buster/versions-web | 2 +- .../sonic-slave-stretch/versions-deb-stretch | 34 ++++++++++--------- .../versions-deb-stretch-armhf | 2 +- .../dockers/sonic-slave-stretch/versions-git | 2 +- .../dockers/sonic-slave-stretch/versions-web | 2 +- .../versions/host-image/versions-deb-bullseye | 8 +++-- .../host-image/versions-deb-bullseye-armhf | 2 +- files/build/versions/host-image/versions-py3 | 10 +++--- 42 files changed, 120 insertions(+), 114 deletions(-) diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-git b/files/build/versions/build/build-sonic-slave-bullseye/versions-git index 9f7f33d8f702..52b2f24b51b7 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-git +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-git @@ -1,14 +1,14 @@ https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b -https://github.com/flashrom/flashrom.git==cba5de5e24bc2d9b9250263060999d081d18db4a -https://github.com/FreeRADIUS/freeradius-server.git==c39ce28ec64a4b9c285329da643e8628994b4a63 +https://github.com/flashrom/flashrom.git==1bb5ddde6048b9819d18082f71640c007c911f2a +https://github.com/FreeRADIUS/freeradius-server.git==7e9ebe1b64e42b4c3cbedda9c3640af341f6bee9 https://github.com/FreeRADIUS/pam_radius.git==5e67868520e90a489626928f28c0befa531bf7d2 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 https://github.com/thom311/libnl==44988e648cd5c9f912148e8b138776064797f49d https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b61368d4c5 -https://salsa.debian.org/kernel-team/ethtool/==3ad654942c84bb0f461c2e86d326c1d2adb4ac4c -https://salsa.debian.org/kernel-team/initramfs-tools.git==6b632f95213043634b947f156c3c736a46186090 +https://salsa.debian.org/kernel-team/ethtool/==5ead2b58847600ea0ccd0aa76b5bedce678f17ee +https://salsa.debian.org/kernel-team/initramfs-tools.git==9a4d579050b7221e8a5e4be7160e8cab25c3065b https://salsa.debian.org/sk-guest/monit.git==c9da7ebb1f35dfba17b50b5969a6e75e29cbec0d https://salsa.debian.org/ssh-team/openssh.git==de790f931452a2dcb4490d074d5a16ab8456a523 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 index 4e5d63644670..80d6298be071 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 @@ -24,6 +24,6 @@ systemd-python==234 tabulate==0.8.2 toposort==1.6 wcwidth==0.2.5 -websocket-client==1.3.2 +websocket-client==1.3.3 www-authenticate==0.9.2 xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-web b/files/build/versions/build/build-sonic-slave-bullseye/versions-web index eca347438a84..529de49dbe36 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-web +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-web @@ -9,7 +9,7 @@ http://deb.debian.org/debian/pool/main/n/ntp/ntp_4.2.8p15+dfsg.orig.tar.xz==c1c5 http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0-3~bpo9+1.debian.tar.xz==ef340aedc6fd42c549cd503bffb498b2 http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0-3~bpo9+1.dsc==be4ce11ef67268e59e4b6be587327c40 http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0.orig.tar.gz==6d565680a4af0d2e261abbc3e3431b2b -https://chrome-infra-packages.appspot.com/client?platform=linux-amd64&version=git_revision:673f5ee1931bc72a2b3d4ac712a7f7bc541f089b==e813a6e475d01264a4b855c13ff52805 +https://chrome-infra-packages.appspot.com/client?platform=linux-amd64&version=git_revision:2fe24264d5b4585ecd16ba8e9bb582d8f4b20875==e1557fb4a093dec95a2251d01f0d4cd3 https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.dsc==de6e9967da7c4992ffd1a72b815994f7 https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.tar.gz==b959c7ac01839e9b96a733d27b19e59e https://deb.debian.org/debian/pool/main/k/kdump-tools/kdump-tools_1.6.8.4.dsc==f96a03bb090ab03d484e5d232161fafe @@ -49,5 +49,5 @@ https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openss https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/python3.9-minimal_3.9.2-1+fips_amd64.deb==22b10a1f10cdcf1ad5e80e60803e2023 https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/python3.9_3.9.2-1+fips_amd64.deb==a0caf3616afdf36c3480b94d496c58df https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/symcrypt-openssl_0.1_amd64.deb==94f118009a4426cc5de4d6a0f7d6974d -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm-dev_7.1.0.0-1_amd64.deb==b0bf737bc08246b65b9c4cad2b4eb007 -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm_7.1.0.0-1_amd64.deb==1715d2c785b4db83a51a02bc126bab0b \ No newline at end of file +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-5/libsaibcm-dev_7.1.0.0-5_amd64.deb==e3712a4071becf90f5c7d4d1bf930b7b +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-5/libsaibcm_7.1.0.0-5_amd64.deb==8830dc77ffc8e65f0b14ca9397932518 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster index 20db24042380..f8b518f61fd7 100644 --- a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster +++ b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster @@ -21,7 +21,7 @@ libteam-utils==1.30-1 libteam5==1.30-1 libteamdctl0==1.30-1 libthrift-0.11.0==0.11.0-4 -libthrift-dev==0.11.0-4 +libthrift-dev==0.14.1 libthrift0==0.14.1 libyang==1.0.73 libyang-cpp==1.0.73 @@ -38,4 +38,4 @@ sonic-mgmt-framework==1.0-01 swss==1.0.0 syncd==1.0.0 syncd-vs==1.0.0 -thrift-compiler==0.11.0-4 \ No newline at end of file +thrift-compiler==0.14.1 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-git b/files/build/versions/build/build-sonic-slave-buster/versions-git index 6181d22eb459..329b8bc824a9 100644 --- a/files/build/versions/build/build-sonic-slave-buster/versions-git +++ b/files/build/versions/build/build-sonic-slave-buster/versions-git @@ -1,7 +1,7 @@ https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 https://github.com/Mellanox/libpsample.git==62bb27d9a49424e45191eee81df7ce0d8c74e774 -https://github.com/sflow/host-sflow==2b8771aa7284d3b34cfc43fccba67649d30d0c64 -https://github.com/sflow/sflowtool==4be2a17b36a3b9796c280b117b8b786323a84ae8 +https://github.com/sflow/host-sflow==4ff2a940848fa9244a289f9c96fd9681d31a0264 +https://github.com/sflow/sflowtool==5307b19399ffb0a1a873c9d09e78cb5011deaf6f https://github.com/thom311/libnl==44988e648cd5c9f912148e8b138776064797f49d https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b61368d4c5 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-py3 b/files/build/versions/build/build-sonic-slave-buster/versions-py3 index da1b2e67601c..ac211ffcb682 100644 --- a/files/build/versions/build/build-sonic-slave-buster/versions-py3 +++ b/files/build/versions/build/build-sonic-slave-buster/versions-py3 @@ -1,5 +1,5 @@ blessed==1.19.1 -charset-normalizer==2.0.12 +charset-normalizer==2.1.0 click==7.0 click-log==0.4.0 colorful==0.5.4 @@ -28,6 +28,6 @@ tabulate==0.8.2 thrift==0.14.1 toposort==1.6 wcwidth==0.2.5 -websocket-client==1.3.2 +websocket-client==1.3.3 www-authenticate==0.9.2 xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-web b/files/build/versions/build/build-sonic-slave-buster/versions-web index e034057e7289..efffd6a3bf92 100644 --- a/files/build/versions/build/build-sonic-slave-buster/versions-web +++ b/files/build/versions/build/build-sonic-slave-buster/versions-web @@ -24,6 +24,6 @@ https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1.orig.ta https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0-4.debian.tar.xz?sv=2015-04-05&sr=b&sig=dj9uJ5YjUNupcmuxSX6%2F5IS9NqaGAyM9iF2h%2F2rROZA%3D&se=2156-02-02T17%3A19%3A34Z&sp=r==52ad383b97ad051f4d1d25b54aaad569 https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0-4.dsc?sv=2015-04-05&sr=b&sig=pWfg55owvQ2jZtZ6ylHp0OP8uZyfc9sxO6H%2BP4Ez7w4%3D&se=2156-02-02T17%3A20%3A05Z&sp=r==6917fe7b3ada9313be94713dd50fee7b https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0.orig.tar.gz?sv=2015-04-05&sr=b&sig=%2BrAjWESiSNRCMN7NGqEqVGceLefpwwS%2FWPKEfJpPLSQ%3D&se=2156-02-02T17%3A17%3A20Z&sp=r==0be59730ebce071eceaf6bfdb8d3a20e -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm-dev_7.1.0.0-1_amd64.deb==b0bf737bc08246b65b9c4cad2b4eb007 -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm_7.1.0.0-1_amd64.deb==1715d2c785b4db83a51a02bc126bab0b -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm_dnx_7.1.0.0-1_amd64.deb==e84a66a741f04aebe7085b0ae970f4e3 \ No newline at end of file +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm_dnx_7.1.0.0-1_amd64.deb==e84a66a741f04aebe7085b0ae970f4e3 +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-5/libsaibcm-dev_7.1.0.0-5_amd64.deb==e3712a4071becf90f5c7d4d1bf930b7b +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-5/libsaibcm_7.1.0.0-5_amd64.deb==8830dc77ffc8e65f0b14ca9397932518 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-stretch/versions-web b/files/build/versions/build/build-sonic-slave-stretch/versions-web index 978ff990bf87..36216b15c306 100644 --- a/files/build/versions/build/build-sonic-slave-stretch/versions-web +++ b/files/build/versions/build/build-sonic-slave-stretch/versions-web @@ -1,2 +1,2 @@ -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm-dev_7.1.0.0-1_amd64.deb==b0bf737bc08246b65b9c4cad2b4eb007 -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm_7.1.0.0-1_amd64.deb==1715d2c785b4db83a51a02bc126bab0b \ No newline at end of file +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-5/libsaibcm-dev_7.1.0.0-5_amd64.deb==e3712a4071becf90f5c7d4d1bf930b7b +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-5/libsaibcm_7.1.0.0-5_amd64.deb==8830dc77ffc8e65f0b14ca9397932518 \ No newline at end of file diff --git a/files/build/versions/default/versions-docker b/files/build/versions/default/versions-docker index 90bba2e9b189..d37a1aec3714 100644 --- a/files/build/versions/default/versions-docker +++ b/files/build/versions/default/versions-docker @@ -1,15 +1,15 @@ -amd64:amd64/debian:bullseye==sha256:f0203caaadfa5e8191aa8d75ad0b36c95c72543c33f76e48f0a4d9dec22d5a63 -amd64:amd64/debian:buster==sha256:ff2b512c66a78380275b217fd68e81623fc899a7bf9be9bfe16d98188183fcd3 -amd64:debian:bullseye==sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510 -amd64:debian:buster==sha256:e5b41ae2b4cf0d04b80cd2f89724e9cfc09e334ac64f188b9808929c748af526 -amd64:debian:stretch==sha256:22cb208880101b9a665332a9360ba4c5c021e3ed2f791638369e9a9418dac981 -arm64:arm64v8/debian:bullseye==sha256:1623b714f66926243b9b946d59d200082a1b86043169f4d6602b6e64bc20a38a -arm64:arm64v8/debian:buster==sha256:68f1188b21bf0b7fe9c92f3a91262d3093aafe2de76adc7c52012a16960048fc -arm64:debian:bullseye==sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510 -arm64:debian:buster==sha256:e5b41ae2b4cf0d04b80cd2f89724e9cfc09e334ac64f188b9808929c748af526 -arm64:debian:stretch==sha256:22cb208880101b9a665332a9360ba4c5c021e3ed2f791638369e9a9418dac981 -armhf:arm32v7/debian:bullseye==sha256:49ac40f7de436345dae5f19abaf263bc38429d6262703d3af7ae9c00042e41a7 -armhf:arm32v7/debian:buster==sha256:426a61780c005de09eb9c3a08e9bcf292c95bd84514cf2fd1a63e2494bfea194 -armhf:debian:bullseye==sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510 -armhf:debian:buster==sha256:e5b41ae2b4cf0d04b80cd2f89724e9cfc09e334ac64f188b9808929c748af526 -armhf:debian:stretch==sha256:22cb208880101b9a665332a9360ba4c5c021e3ed2f791638369e9a9418dac981 \ No newline at end of file +amd64:amd64/debian:bullseye==sha256:9a67b70d0ba1d7c7690f917eedd8d24974dd8fd493205368b1e555a90c954208 +amd64:amd64/debian:buster==sha256:0e328f15f5cb0f93bff52a37d98f0bbfc40f97fcaf250096fd2b2c6871a497eb +amd64:debian:bullseye==sha256:859ea45db307402ee024b153c7a63ad4888eb4751921abbef68679fc73c4c739 +amd64:debian:buster==sha256:9740683722a2a8aa497a5b23e4bc229fcf8b8991e26d3935540c7704ff24012e +amd64:debian:stretch==sha256:c5c5200ff1e9c73ffbf188b4a67eb1c91531b644856b4aefe86a58d2f0cb05be +arm64:arm64v8/debian:bullseye==sha256:bd276cb1059f6502e342d3052a4c2767f2b3a0196508f5c2c34ce6da4a15b104 +arm64:arm64v8/debian:buster==sha256:e774922f3043b6564c6719a7ec32f25d4b70304eff9dbd725161d4033cf38038 +arm64:debian:bullseye==sha256:859ea45db307402ee024b153c7a63ad4888eb4751921abbef68679fc73c4c739 +arm64:debian:buster==sha256:9740683722a2a8aa497a5b23e4bc229fcf8b8991e26d3935540c7704ff24012e +arm64:debian:stretch==sha256:c5c5200ff1e9c73ffbf188b4a67eb1c91531b644856b4aefe86a58d2f0cb05be +armhf:arm32v7/debian:bullseye==sha256:c34498c16d591fe7f5a4c955a2e7c960e3066fa8a1d9fde6b9230b9adfbf8b20 +armhf:arm32v7/debian:buster==sha256:27ab779c4d59ead815ff584f2e41b34a6b261db358b4cdfe664b8bfa1f494ae8 +armhf:debian:bullseye==sha256:859ea45db307402ee024b153c7a63ad4888eb4751921abbef68679fc73c4c739 +armhf:debian:buster==sha256:9740683722a2a8aa497a5b23e4bc229fcf8b8991e26d3935540c7704ff24012e +armhf:debian:stretch==sha256:c5c5200ff1e9c73ffbf188b4a67eb1c91531b644856b4aefe86a58d2f0cb05be \ No newline at end of file diff --git a/files/build/versions/default/versions-git b/files/build/versions/default/versions-git index 0a01d8056359..d7ac13cef504 100644 --- a/files/build/versions/default/versions-git +++ b/files/build/versions/default/versions-git @@ -1,11 +1,11 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==407333d42436270d60043ca49241cedc0ebc6eb1 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==78c53d11a01f8439b37010289e8bbdb139942d57 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b https://github.com/dyninc/OpenBFDD.git==e35f43ad8d2b3f084e96a84c392528a90d05a287 -https://github.com/flashrom/flashrom.git==5b78c08156ddc5b4391157f7d7a0456060eed2c2 -https://github.com/FreeRADIUS/freeradius-server.git==c39ce28ec64a4b9c285329da643e8628994b4a63 +https://github.com/flashrom/flashrom.git==1bb5ddde6048b9819d18082f71640c007c911f2a +https://github.com/FreeRADIUS/freeradius-server.git==7e9ebe1b64e42b4c3cbedda9c3640af341f6bee9 https://github.com/FreeRADIUS/pam_radius.git==5e67868520e90a489626928f28c0befa531bf7d2 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 @@ -13,11 +13,11 @@ https://github.com/lguohan/gnxi.git==53901aba9ead82be21f1408a601b6266dcf1e3e4 https://github.com/Marvell-switching/mrvl-prestera.git==9dbae444204a2c27b33be698ce497d55926b8893 https://github.com/Mellanox/libpsample.git==62bb27d9a49424e45191eee81df7ce0d8c74e774 https://github.com/p4lang/scapy-vxlan.git==85ffe83da156568ee47a0750f638227e6e1d7479 -https://github.com/sflow/host-sflow==2b8771aa7284d3b34cfc43fccba67649d30d0c64 -https://github.com/sflow/sflowtool==4be2a17b36a3b9796c280b117b8b786323a84ae8 +https://github.com/sflow/host-sflow==4ff2a940848fa9244a289f9c96fd9681d31a0264 +https://github.com/sflow/sflowtool==5307b19399ffb0a1a873c9d09e78cb5011deaf6f https://github.com/thom311/libnl==44988e648cd5c9f912148e8b138776064797f49d https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b61368d4c5 -https://salsa.debian.org/kernel-team/ethtool/==6ee7deceebaa9013a0d29936248cdde7236489b1 -https://salsa.debian.org/kernel-team/initramfs-tools.git==6b632f95213043634b947f156c3c736a46186090 +https://salsa.debian.org/kernel-team/ethtool/==5ead2b58847600ea0ccd0aa76b5bedce678f17ee +https://salsa.debian.org/kernel-team/initramfs-tools.git==9a4d579050b7221e8a5e4be7160e8cab25c3065b https://salsa.debian.org/sk-guest/monit.git==c9da7ebb1f35dfba17b50b5969a6e75e29cbec0d https://salsa.debian.org/ssh-team/openssh.git==de790f931452a2dcb4490d074d5a16ab8456a523 \ No newline at end of file diff --git a/files/build/versions/default/versions-web b/files/build/versions/default/versions-web index 34b541ff4012..4d9bdd8e4e25 100644 --- a/files/build/versions/default/versions-web +++ b/files/build/versions/default/versions-web @@ -25,7 +25,7 @@ http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0.orig.tar.gz==6d http://www.mellanox.com/downloads/MFT/mft-4.20.0-34-x86_64-deb.tgz==87ad9025d4fc0c3abb9272c3e93af496 https://archive.apache.org/dist/thrift/0.14.1/thrift-0.14.1.tar.gz==c64434548438df2cb1e53fb27c600e85 https://bootstrap.pypa.io/pip/2.7/get-pip.py==60e8267eb1b7bc71dc4843eb7bd294d3 -https://chrome-infra-packages.appspot.com/client?platform=linux-amd64&version=git_revision:673f5ee1931bc72a2b3d4ac712a7f7bc541f089b==e813a6e475d01264a4b855c13ff52805 +https://chrome-infra-packages.appspot.com/client?platform=linux-amd64&version=git_revision:2fe24264d5b4585ecd16ba8e9bb582d8f4b20875==e1557fb4a093dec95a2251d01f0d4cd3 https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.dsc==de6e9967da7c4992ffd1a72b815994f7 https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.tar.gz==b959c7ac01839e9b96a733d27b19e59e https://deb.debian.org/debian/pool/main/k/kdump-tools/kdump-tools_1.6.8.4.dsc==f96a03bb090ab03d484e5d232161fafe @@ -39,8 +39,8 @@ https://deb.nodesource.com/setup_14.x==3fb63a2bd38414a2b249fa9b3dbbbc3e https://download.docker.com/linux/debian/gpg==1afae06b34a13c1b3d9cb61a26285a15 https://github.com/barefootnetworks/sonic-release-pkgs/raw/dev/bfnplatform_20220408_sai_1.9.1_deb10.deb==890a53ca1374dfcf8c12091d74fd2ef8 https://github.com/barefootnetworks/sonic-release-pkgs/raw/dev/bfnsdk_20220408_sai_1.9.1_deb10.deb==a54c351ee84ddb63837085272a1c4eae -https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==4ea37edbea9fc2b88bdb5bbc2855be04 -https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-arm64==913165e7536ebd338a3614b27e480d87 +https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==bfd21cd7274888c066d39fe95b88a442 +https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-arm64==fd883cc3e0900a7137c49722e29576bf https://github.com/CentecNetworks/sonic-binaries/raw/master/amd64/sai/libsai_1.9.1-0_amd64.deb==08e1a82bd42ca1cba08fd6deec43c02a https://github.com/CentecNetworks/sonic-binaries/raw/master/amd64/third_party/advantech/_Susi4.so==5e1b8daef522c9da00af400abe25810b https://github.com/CentecNetworks/sonic-binaries/raw/master/amd64/third_party/advantech/libSUSI-4.00.so.1==393a94b0abba146777e276e1febe0cb0 diff --git a/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye b/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye index 59765e67b0b9..950389e1ed40 100644 --- a/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye @@ -56,7 +56,7 @@ lua-bitop==1.0.2-5 lua-cjson==2.1.0+dfsg-2.1 media-types==4.0.0 net-tools==1.60+git20181103.0eebece-1 -openssl==1.1.1n-0+deb11u2 +openssl==1.1.1n-0+deb11u3 perl==5.32.1-4+deb11u2 perl-modules-5.32==5.32.1-4+deb11u2 procps==2:3.3.17-5 diff --git a/files/build/versions/dockers/docker-base-buster/versions-deb-buster b/files/build/versions/dockers/docker-base-buster/versions-deb-buster index 93562f2b6be5..708fa8c5c08c 100644 --- a/files/build/versions/dockers/docker-base-buster/versions-deb-buster +++ b/files/build/versions/dockers/docker-base-buster/versions-deb-buster @@ -42,7 +42,7 @@ libsasl2-modules-db==2.1.27+dfsg-1+deb10u2 libsodium23==1.0.17-1 libsqlite3-0==3.27.2-3+deb10u1 libssh2-1==1.8.0-2.1 -libssl1.1==1.1.1n-0+deb10u2 +libssl1.1==1.1.1n-0+deb10u3 libwrap0==7.6.q-28 libzmq5==4.3.1-4+deb10u2 lsb-base==10.2019051400 @@ -50,7 +50,7 @@ lua-bitop==1.0.2-5 lua-cjson==2.1.0+dfsg-2.1 mime-support==3.62 net-tools==1.60+git20180626.aebd88e-1 -openssl==1.1.1n-0+deb10u2 +openssl==1.1.1n-0+deb10u3 perl==5.28.1-6+deb10u1 perl-modules-5.28==5.28.1-6+deb10u1 procps==2:3.3.15-2 diff --git a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye index 65345aa7b682..0ea377e477ee 100644 --- a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye @@ -104,6 +104,7 @@ linux-libc-dev==5.10.120-1 lm-sensors==1:3.6.0-7 lm-sensors-dbgsym==1:3.6.0-7 make==4.3-4.1 +mft==4.20.0-34 openssh-client==1:8.4p1-5 patch==2.7.6-7 pci.ids==0.0~2021.02.08-1 diff --git a/files/build/versions/dockers/docker-ptf/versions-deb-buster b/files/build/versions/dockers/docker-ptf/versions-deb-buster index c8ad68f9690d..1d0f3cf493ab 100644 --- a/files/build/versions/dockers/docker-ptf/versions-deb-buster +++ b/files/build/versions/dockers/docker-ptf/versions-deb-buster @@ -279,8 +279,8 @@ libsigsegv2==2.12-2 libsm6==2:1.2.3-1 libsqlite3-0==3.27.2-3+deb10u1 libssh2-1==1.8.0-2.1 -libssl-dev==1.1.1n-0+deb10u2 -libssl1.1==1.1.1n-0+deb10u2 +libssl-dev==1.1.1n-0+deb10u3 +libssl1.1==1.1.1n-0+deb10u3 libstdc++-8-dev==8.3.0-6 libsynctex2==2018.20181218.49446-1 libtacacs+1==4.0.4.27a-3 @@ -376,7 +376,7 @@ ntpstat==0.0.0.1-2 openssh-client==1:7.9p1-10+deb10u2 openssh-server==1:7.9p1-10+deb10u2 openssh-sftp-server==1:7.9p1-10+deb10u2 -openssl==1.1.1n-0+deb10u2 +openssl==1.1.1n-0+deb10u3 patch==2.7.6-3+deb10u1 perl==5.28.1-6+deb10u1 perl-modules-5.28==5.28.1-6+deb10u1 diff --git a/files/build/versions/dockers/docker-ptf/versions-py2 b/files/build/versions/dockers/docker-ptf/versions-py2 index 1f04aee01357..5b8ef0199582 100644 --- a/files/build/versions/dockers/docker-ptf/versions-py2 +++ b/files/build/versions/dockers/docker-ptf/versions-py2 @@ -1,7 +1,7 @@ backports.functools-lru-cache==1.6.4 backports.shutil-get-terminal-size==1.0.0 bcrypt==3.1.7 -cffi==1.15.0 +cffi==1.15.1 click==7.1.2 contextlib2==0.6.0.post1 cryptography==3.3.2 diff --git a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 index bc529f84381c..c07300965a59 100644 --- a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 +++ b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 @@ -1,26 +1,26 @@ attrs==21.4.0 certifi==2017.4.17 -charset-normalizer==2.0.12 +charset-normalizer==2.1.0 click==8.1.3 clickclick==20.10.2 connexion==2.7.0 flask==2.1.2 -grpcio==1.46.3 +grpcio==1.47.0 grpcio-tools==1.20.0 idna==3.3 -importlib-metadata==4.11.4 -importlib-resources==5.7.1 +importlib-metadata==4.12.0 +importlib-resources==5.8.0 inflection==0.5.1 itsdangerous==2.1.2 -jsonschema==4.6.0 +jsonschema==4.6.1 openapi-schema-validator==0.2.3 openapi-spec-validator==0.4.0 -protobuf==4.21.1 +protobuf==4.21.2 pyrsistent==0.18.1 python-dateutil==2.6.0 -requests==2.28.0 +requests==2.28.1 six==1.11.0 -typing_extensions==4.2.0 +typing_extensions==4.3.0 urllib3==1.26.5 werkzeug==2.1.2 zipp==3.8.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-vs/versions-deb-buster b/files/build/versions/dockers/docker-sonic-vs/versions-deb-buster index 1c6e788d3d60..4430d3bcf182 100644 --- a/files/build/versions/dockers/docker-sonic-vs/versions-deb-buster +++ b/files/build/versions/dockers/docker-sonic-vs/versions-deb-buster @@ -135,7 +135,7 @@ libselinux1-dev==2.8-1+b1 libsepol1-dev==2.8-1 libsm-dev==2:1.2.3-1 libsm6==2:1.2.3-1 -libssl-dev==1.1.1n-0+deb10u2 +libssl-dev==1.1.1n-0+deb10u3 libstdc++-8-dev==8.3.0-6 libsystemd-dev==241-7~deb10u8 libteam-utils==1.30-1 diff --git a/files/build/versions/dockers/docker-sonic-vs/versions-py3 b/files/build/versions/dockers/docker-sonic-vs/versions-py3 index 6a36185b4f3c..6202703cca85 100644 --- a/files/build/versions/dockers/docker-sonic-vs/versions-py3 +++ b/files/build/versions/dockers/docker-sonic-vs/versions-py3 @@ -1,6 +1,6 @@ blessed==1.19.1 -certifi==2022.5.18.1 -charset-normalizer==2.0.12 +certifi==2022.6.15 +charset-normalizer==2.1.0 click==7.0 click-log==0.4.0 colorful==0.5.4 @@ -22,7 +22,7 @@ pycairo==1.21.0 pygments==2.12.0 pygobject==3.42.1 pyroute2==0.5.14 -requests==2.28.0 +requests==2.28.1 scapy==2.4.4 semantic-version==2.10.0 systemd-python==234 @@ -30,5 +30,5 @@ tabulate==0.8.2 toposort==1.6 urllib3==1.26.9 wcwidth==0.2.5 -websocket-client==1.3.2 +websocket-client==1.3.3 www-authenticate==0.9.2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-bfn-rpc/versions-deb-buster b/files/build/versions/dockers/docker-syncd-bfn-rpc/versions-deb-buster index aaa13c3b66f1..350ef00c18ea 100644 --- a/files/build/versions/dockers/docker-syncd-bfn-rpc/versions-deb-buster +++ b/files/build/versions/dockers/docker-syncd-bfn-rpc/versions-deb-buster @@ -44,7 +44,7 @@ libqt5dbus5==5.11.3+dfsg1-1+deb10u4 libqt5network5==5.11.3+dfsg1-1+deb10u4 libquadmath0==8.3.0-6 librhash0==1.3.8-1 -libssl-dev==1.1.1n-0+deb10u2 +libssl-dev==1.1.1n-0+deb10u3 libstdc++-8-dev==8.3.0-6 libthrift0==0.14.1 libtsan0==8.3.0-6 diff --git a/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-deb-buster index 62a05ece6439..8604a779a04b 100644 --- a/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-deb-buster +++ b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-deb-buster @@ -47,7 +47,7 @@ libqt5dbus5==5.11.3+dfsg1-1+deb10u4 libqt5network5==5.11.3+dfsg1-1+deb10u4 libquadmath0==8.3.0-6 librhash0==1.3.8-1 -libssl-dev==1.1.1n-0+deb10u2 +libssl-dev==1.1.1n-0+deb10u3 libstdc++-8-dev==8.3.0-6 libthrift-0.11.0==0.11.0-4 libtsan0==8.3.0-6 diff --git a/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-deb-buster index 62a05ece6439..8604a779a04b 100644 --- a/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-deb-buster +++ b/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-deb-buster @@ -47,7 +47,7 @@ libqt5dbus5==5.11.3+dfsg1-1+deb10u4 libqt5network5==5.11.3+dfsg1-1+deb10u4 libquadmath0==8.3.0-6 librhash0==1.3.8-1 -libssl-dev==1.1.1n-0+deb10u2 +libssl-dev==1.1.1n-0+deb10u3 libstdc++-8-dev==8.3.0-6 libthrift-0.11.0==0.11.0-4 libtsan0==8.3.0-6 diff --git a/files/build/versions/dockers/docker-syncd-brcm/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm/versions-deb-buster index 0790ae1804f0..4bec997d7613 100644 --- a/files/build/versions/dockers/docker-syncd-brcm/versions-deb-buster +++ b/files/build/versions/dockers/docker-syncd-brcm/versions-deb-buster @@ -12,7 +12,7 @@ libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 libipt2==2.0-2 libkmod2==26-1 libpopt0==1.16-12 -libsaibcm==7.1.0.0-1 +libsaibcm==7.1.0.0-5 libsaimetadata==1.0.0 libsaimetadata-dbg==1.0.0 libsairedis==1.0.0 diff --git a/files/build/versions/dockers/docker-syncd-centec-rpc/versions-deb-buster b/files/build/versions/dockers/docker-syncd-centec-rpc/versions-deb-buster index 655bb8fff570..0da3944f8a17 100644 --- a/files/build/versions/dockers/docker-syncd-centec-rpc/versions-deb-buster +++ b/files/build/versions/dockers/docker-syncd-centec-rpc/versions-deb-buster @@ -49,7 +49,7 @@ libqt5dbus5==5.11.3+dfsg1-1+deb10u4 libqt5network5==5.11.3+dfsg1-1+deb10u4 libquadmath0==8.3.0-6 librhash0==1.3.8-1 -libssl-dev==1.1.1n-0+deb10u2 +libssl-dev==1.1.1n-0+deb10u3 libstdc++-8-dev==8.3.0-6 libthrift-0.11.0==0.11.0-4 libtsan0==8.3.0-6 diff --git a/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-deb-bullseye index 1a806b02efa8..3d7dbfd048ea 100644 --- a/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-deb-bullseye @@ -42,8 +42,8 @@ libqt5dbus5==5.15.2+dfsg-9 libqt5network5==5.15.2+dfsg-9 libquadmath0==10.2.1-6 librhash0==1.4.1-2 -libssl-dev==1.1.1n-0+deb11u2 -libssl1.1==1.1.1n-0+deb11u2 +libssl-dev==1.1.1n-0+deb11u3 +libssl1.1==1.1.1n-0+deb11u3 libstdc++-10-dev==10.2.1-6 libthrift-0.11.0==0.11.0-4 libtsan0==10.2.1-6 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye index ca8666d6fb45..2d611ae372b4 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye @@ -1081,7 +1081,8 @@ libsratom-0-0==0.6.8-1 libsrt1.4-gnutls==1.4.2-1.3 libssh-gcrypt-4==0.9.5-1+deb11u1 libssh2-1==1.9.0-2 -libssl-dev==1.1.1n-0+deb11u2 +libssl-dev==1.1.1n-0+deb11u3 +libssl1.1==1.1.1n-0+deb11u3 libstdc++-10-dev==10.2.1-6 libstemmer0d==2.1.0-1 libstrictures-perl==2.000006-1 @@ -1401,7 +1402,7 @@ opensp==1.5.2-13+b2 openssh-client==1:8.4p1-5 openssh-server==1:8.4p1-5 openssh-sftp-server==1:8.4p1-5 -openssl==1.1.1n-0+deb11u2 +openssl==1.1.1n-0+deb11u3 ovmf==2020.11-2+deb11u1 packagekit==1.2.2-2 packagekit-tools==1.2.2-2 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 index a94d939e59a6..8c9505207b4a 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 @@ -19,5 +19,4 @@ libubsan1-armhf-cross==10.2.1-6cross1 libxslt1-dev==1.1.34-4 linux-headers-5.10.0-15-arm64==5.10.120-1 linux-headers-arm64==5.10.120-1 -nodejs==14.19.3-deb-1nodesource1 -tzdata==2021a-1+deb11u4 \ No newline at end of file +nodejs==14.19.3-deb-1nodesource1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf index be660d720617..02b7b82e17a1 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf @@ -58,5 +58,4 @@ sassc==3.6.1+20201027-1 texlive-extra-utils==2020.20210202-3 texlive-font-utils==2020.20210202-3 texlive-luatex==2020.20210202-3 -tzdata==2021a-1+deb11u4 yui-compressor==2.4.8-2.1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-git b/files/build/versions/dockers/sonic-slave-bullseye/versions-git index 14afff859581..c37b4e348e98 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-git +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==3133f98f3f1e3b46b10a284ff8280d79d7450698 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==78c53d11a01f8439b37010289e8bbdb139942d57 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 index 6a7c0cb33445..ae4fbe75dca4 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 @@ -84,7 +84,7 @@ python-magic==0.4.20 pytz==2021.1 pyxdg==0.27 pyyaml==5.4.1 -redis==4.3.3 +redis==4.3.4 regex==2022.6.2 requests==2.25.1 roman==2.0.0 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-web b/files/build/versions/dockers/sonic-slave-bullseye/versions-web index 73b89834ca10..cc5c809a69a6 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-web +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-web @@ -1,4 +1,4 @@ https://download.docker.com/linux/debian/gpg==1afae06b34a13c1b3d9cb61a26285a15 -https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==4ea37edbea9fc2b88bdb5bbc2855be04 +https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==bfd21cd7274888c066d39fe95b88a442 https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-go_1.15.15-1~deb11u4%2Bfips_amd64.deb==b60f6db62805696b47ab422ab798fe56 https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-src_1.15.15-1~deb11u4%2Bfips_amd64.deb==1c920937aa49b602a1bfec3c49747131 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster index 84518cce9a7d..ddc1985a505b 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster +++ b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster @@ -1086,8 +1086,8 @@ libsqlite3-0==3.27.2-3+deb10u1 libsratom-0-0==0.6.0~dfsg0-1 libssh-gcrypt-4==0.8.7-1+deb10u1 libssh2-1==1.8.0-2.1 -libssl-dev==1.1.1n-0+deb10u2 -libssl1.1==1.1.1n-0+deb10u2 +libssl-dev==1.1.1n-0+deb10u3 +libssl1.1==1.1.1n-0+deb10u3 libstdc++-8-dev==8.3.0-6 libstemmer0d==0+svn585-1+b2 libstrictures-perl==2.000005-1 @@ -1402,7 +1402,7 @@ opensp==1.5.2-13+b1 openssh-client==1:7.9p1-10+deb10u2 openssh-server==1:7.9p1-10+deb10u2 openssh-sftp-server==1:7.9p1-10+deb10u2 -openssl==1.1.1n-0+deb10u2 +openssl==1.1.1n-0+deb10u3 ovmf==0~20181115.85588389-3+deb10u3 packagekit==1.1.12-5 packagekit-tools==1.1.12-5 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-git b/files/build/versions/dockers/sonic-slave-buster/versions-git index 66776c8d73ec..c37b4e348e98 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-git +++ b/files/build/versions/dockers/sonic-slave-buster/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==407333d42436270d60043ca49241cedc0ebc6eb1 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==78c53d11a01f8439b37010289e8bbdb139942d57 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-py3 b/files/build/versions/dockers/sonic-slave-buster/versions-py3 index ad49b5ebe21e..129b7d8572d8 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-py3 +++ b/files/build/versions/dockers/sonic-slave-buster/versions-py3 @@ -21,7 +21,7 @@ gcovr==4.1 gpg==1.12.0 idna==2.6 imagesize==1.0.0 -importlib-metadata==4.11.4 +importlib-metadata==4.12.0 jinja2==3.0.3 keyring==17.1.1 keyrings.alt==3.1.1 @@ -64,7 +64,7 @@ python-magic==0.4.16 pytz==2019.1 pyxdg==0.25 pyyaml==5.4.1 -redis==4.3.3 +redis==4.3.4 regex==2022.6.2 requests==2.21.0 roman==2.0.0 @@ -72,7 +72,7 @@ secretstorage==2.3.1 six==1.12.0 sphinx==1.8.4 sphinx-rtd-theme==0.4.3 -typing_extensions==4.2.0 +typing_extensions==4.3.0 unattended-upgrades==0.1 unidiff==0.5.4 urllib3==1.24.1 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-web b/files/build/versions/dockers/sonic-slave-buster/versions-web index 8a09fba8aa78..dc09b65272c9 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-web +++ b/files/build/versions/dockers/sonic-slave-buster/versions-web @@ -1,3 +1,3 @@ https://download.docker.com/linux/debian/gpg==1afae06b34a13c1b3d9cb61a26285a15 -https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==4ea37edbea9fc2b88bdb5bbc2855be04 +https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==bfd21cd7274888c066d39fe95b88a442 https://storage.googleapis.com/golang/go1.14.2.linux-amd64.tar.gz==856d248e3ea8a287d13e5f6afd086282 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch b/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch index 66d9472c6fef..110a22492181 100644 --- a/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch @@ -685,7 +685,7 @@ libmaven-plugin-tools-java==3.3-5 libmaven-reporting-impl-java==2.3-1 libmaven-resources-plugin-java==2.6-1 libmaven-shared-incremental-java==1.1-1 -libmaven-shared-utils-java==3.0.0-1 +libmaven-shared-utils-java==3.0.0-1+deb9u1 libmaven-site-plugin-java==2.1-4 libmaven2-core-java==2.2.1-26 libmaven3-core-java==3.3.9-4 @@ -754,7 +754,7 @@ libpackage-stash-perl==0.37-1 libpackage-stash-xs-perl==0.28-3+b1 libpackagekit-glib2-18==1.1.5-2+deb9u2 libpam-cap==1:2.25-1 -libpam-systemd==232-25+deb9u13 +libpam-systemd==232-25+deb9u14 libpam0g-dev==1.1.8-3.6 libpango-1.0-0==1.40.5-1 libpangocairo-1.0-0==1.40.5-1 @@ -919,7 +919,7 @@ libslang2-dev==2.3.1-5 libslf4j-java==1.7.22-1 libsm-dev==2:1.2.2-1+b3 libsm6==2:1.2.2-1+b3 -libsndfile1==1.0.27-3+deb9u2 +libsndfile1==1.0.27-3+deb9u3 libsnmp-base==5.7.3+dfsg-1.7+deb9u3 libsnmp-dev==5.7.3+dfsg-1.7+deb9u3 libsnmp30==5.7.3+dfsg-1.7+deb9u3 @@ -952,7 +952,8 @@ libsurefire-java==2.17-3 libswitch-perl==2.17-2 libsynctex1==2016.20160513.41080.dfsg-2+deb9u1 libsys-hostname-long-perl==1.5-1 -libsystemd-dev==232-25+deb9u13 +libsystemd-dev==232-25+deb9u14 +libsystemd0==232-25+deb9u14 libtask-weaken-perl==1.04-1 libtasn1-6==4.10-1.1+deb9u1 libtcl8.6==8.6.6+dfsg-1+b1 @@ -980,7 +981,8 @@ libtry-tiny-perl==0.28-1 libtsan0==6.3.0-18+deb9u1 libtxc-dxtn-s2tc==1.0+git20151227-2 libubsan0==6.3.0-18+deb9u1 -libudev-dev==232-25+deb9u13 +libudev-dev==232-25+deb9u14 +libudev1==232-25+deb9u14 libunicode-utf8-perl==0.60-1+b3 libunistring0==0.9.6+really0.9.3-0.1 libunwind-dev==1.1-4.1 @@ -1136,12 +1138,12 @@ libzmq5==4.2.1-4+deb9u4 libzzip-0-13==0.13.62-3.2~deb9u2 licensecheck==3.0.29-1 lintian==2.5.50.4 -linux-compiler-gcc-6-x86==4.9.303-1 -linux-headers-4.9.0-18-amd64==4.9.303-1 -linux-headers-4.9.0-18-common==4.9.303-1 -linux-headers-amd64==4.9+80+deb9u16 -linux-kbuild-4.9==4.9.303-1 -linux-libc-dev==4.9.303-1 +linux-compiler-gcc-6-x86==4.9.320-2 +linux-headers-4.9.0-19-amd64==4.9.320-2 +linux-headers-4.9.0-19-common==4.9.320-2 +linux-headers-amd64==4.9+80+deb9u17 +linux-kbuild-4.9==4.9.320-2 +linux-libc-dev==4.9.320-2 linuxdoc-tools==0.9.72-4 llvm-3.8==1:3.8.1-24 llvm-3.8-dev==1:3.8.1-24 @@ -1424,7 +1426,7 @@ strace==4.15-2 sudo==1.8.19p1-2.1+deb9u3 swig==3.0.10-1.1 swig3.0==3.0.10-1.1 -systemd==232-25+deb9u13 +systemd==232-25+deb9u14 systemd-shim==10-3 t1utils==1.39-2 tcl==8.6.0+9 @@ -1462,9 +1464,9 @@ ucf==3.0036 unattended-upgrades==0.93.1+nmu1 unzip==6.0-21+deb9u2 velocity==1.7-5+deb9u1 -vim==2:8.0.0197-4+deb9u6 -vim-common==2:8.0.0197-4+deb9u6 -vim-runtime==2:8.0.0197-4+deb9u6 +vim==2:8.0.0197-4+deb9u7 +vim-common==2:8.0.0197-4+deb9u7 +vim-runtime==2:8.0.0197-4+deb9u7 wdiff==1.2.2-2 wget==1.18-5+deb9u3 x11-common==1:7.7+19 @@ -1492,7 +1494,7 @@ xorg-sgml-doctools==1:1.11-1 xsltproc==1.1.29-2.1+deb9u2 xterm==327-2+deb9u3 xtrans-dev==1.3.5-1 -xxd==2:8.0.0197-4+deb9u6 +xxd==2:8.0.0197-4+deb9u7 xz-utils==5.2.2-1.2+deb9u1 zip==3.0-11+b1 zlib1g-dev==1:1.2.8.dfsg-5+deb9u1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch-armhf b/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch-armhf index fb64a5239dd9..598d015aab3d 100644 --- a/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch-armhf +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-deb-stretch-armhf @@ -10,5 +10,5 @@ libtext-charwidth-perl==0.04-7+b6 libwayland-bin==1.12.0-1+deb9u1 libwayland-dev==1.12.0-1+deb9u1 libxslt1-dev==1.1.29-2.1+deb9u2 -linux-compiler-gcc-6-arm==4.9.303-1 +linux-compiler-gcc-6-arm==4.9.320-2 nodejs==10.24.1-1nodesource1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-git b/files/build/versions/dockers/sonic-slave-stretch/versions-git index 66776c8d73ec..c37b4e348e98 100644 --- a/files/build/versions/dockers/sonic-slave-stretch/versions-git +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==407333d42436270d60043ca49241cedc0ebc6eb1 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==78c53d11a01f8439b37010289e8bbdb139942d57 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-web b/files/build/versions/dockers/sonic-slave-stretch/versions-web index 46b2a530550a..6736362ed739 100644 --- a/files/build/versions/dockers/sonic-slave-stretch/versions-web +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-web @@ -1,5 +1,5 @@ https://download.docker.com/linux/debian/gpg==1afae06b34a13c1b3d9cb61a26285a15 -https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==4ea37edbea9fc2b88bdb5bbc2855be04 +https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==bfd21cd7274888c066d39fe95b88a442 https://sonicstorage.blob.core.windows.net/packages/cmake/cmake-data_3.13.2-1_bpo9%2B1_all.deb?st=2020-03-27T02%3A22%3A24Z&se=2100-03-26T19%3A00%3A00Z&sp=rl&sv=2018-03-28&sr=b&sig=Xby%2Bm3OZOjPB%2FSlDbHD65yDcPzAgoys%2FA3vK8RB4BzA%3D==147cf42f3a68f6d6f1e53d95a599a1af https://sonicstorage.blob.core.windows.net/packages/cmake/cmake_3.13.2-1_bpo9%2B1_amd64.deb?st=2020-03-27T02%3A27%3A21Z&se=2100-03-26T19%3A00%3A00Z&sp=rl&sv=2018-03-28&sr=b&sig=4MvmmDBQuicFEJYakLm7xCNU19yJ8GIP4ankFSnITKY%3D==e75c741e8b6918b8f03625e456fa0275 https://storage.googleapis.com/golang/go1.14.2.linux-amd64.tar.gz==856d248e3ea8a287d13e5f6afd086282 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-deb-bullseye b/files/build/versions/host-image/versions-deb-bullseye index a0c1393eaa61..a1ff139b51ff 100644 --- a/files/build/versions/host-image/versions-deb-bullseye +++ b/files/build/versions/host-image/versions-deb-bullseye @@ -22,6 +22,7 @@ containerd.io==1.5.11-1 cpio==2.13+dfsg-4 cpp==4:10.2.1-1 cpp-10==10.2.1-6 +cracklib-runtime==2.9.6-3.4 cron==3.0pl1-137 curl==7.74.0-1.3+deb11u1 dbus==1.12.20-2 @@ -117,6 +118,7 @@ libcap2-bin==1:2.44-1 libcbor0==0.5.0+dfsg-2 libcc1-0==10.2.1-6 libcgroup1==0.41-11 +libcrack2==2.9.6-3.4 libcrypt-dev==1:4.4.18-4 libcryptsetup12==2:2.3.7-1+deb11u1 libctf-nobfd0==2.35.2-2 @@ -219,6 +221,7 @@ libnss-tacplus==1.0.4-1 libonig5==6.9.6-1.1 libopts25==1:5.18.16-4 libpackagekit-glib2-18==1.2.2-2 +libpam-cracklib==1.4.0-9+deb11u1 libpam-radius-auth==1.4.1-1 libpam-tacplus==1.4.1-1 libpcap0.8==1.10.0-2 @@ -259,7 +262,7 @@ libsm6==2:1.2.3-1 libsqlite3-0==3.34.1-3 libssh2-1==1.9.0-2 libssl-dev==1.1.1k-1+deb11u1+fips -libssl1.1==1.1.1n-0+deb11u2 +libssl1.1==1.1.1n-0+deb11u3 libstdc++-10-dev==10.2.1-6 libswsscommon==1.0.0 libsysfs2==2.1.0+repack-7 @@ -321,7 +324,7 @@ opennsl-modules==7.1.0.0 openssh-client==1:8.4p1-5+fips openssh-server==1:8.4p1-5+fips openssh-sftp-server==1:8.4p1-5+fips -openssl==1.1.1n-0+deb11u2 +openssl==1.1.1n-0+deb11u3 patch==2.7.6-7 pci.ids==0.0~2021.02.08-1 pciutils==1:3.7.0-5 @@ -391,6 +394,7 @@ uuid-dev==2.36.1-8+deb11u1 vim==2:8.2.2434-3+deb11u1 vim-common==2:8.2.2434-3+deb11u1 vim-runtime==2:8.2.2434-3+deb11u1 +wamerican==2019.10.06-1 x11-common==1:7.7+22 x11proto-dev==2020.1-1 x11proto-xext-dev==2020.1-1 diff --git a/files/build/versions/host-image/versions-deb-bullseye-armhf b/files/build/versions/host-image/versions-deb-bullseye-armhf index 940a770eb151..9bac399f3e56 100644 --- a/files/build/versions/host-image/versions-deb-bullseye-armhf +++ b/files/build/versions/host-image/versions-deb-bullseye-armhf @@ -3,7 +3,7 @@ ebtables==2.0.11-4 icu-devtools==67.1-7 libicu-dev==67.1-7 libicu67==67.1-7 -libssl-dev==1.1.1n-0+deb11u2 +libssl-dev==1.1.1n-0+deb11u3 libxml2==2.9.10+dfsg-6.7+deb11u2 libxml2-dev==2.9.10+dfsg-6.7+deb11u2 libxslt1-dev==1.1.34-4 diff --git a/files/build/versions/host-image/versions-py3 b/files/build/versions/host-image/versions-py3 index 1d015243afbd..20e0e348cbd2 100644 --- a/files/build/versions/host-image/versions-py3 +++ b/files/build/versions/host-image/versions-py3 @@ -3,9 +3,9 @@ azure-nspkg==3.0.2 azure-storage==0.36.0 bitarray==1.5.3 blessed==1.19.1 -certifi==2022.5.18.1 -cffi==1.15.0 -charset-normalizer==2.0.12 +certifi==2022.6.15 +cffi==1.15.1 +charset-normalizer==2.1.0 click==7.0 click-log==0.4.0 colorful==0.5.4 @@ -54,7 +54,7 @@ python-dateutil==2.8.2 pyyaml==5.4.1 redis==3.5.3 regex==2022.6.2 -requests==2.28.0 +requests==2.28.1 scapy==2.4.4 semantic-version==2.10.0 six==1.16.0 @@ -65,6 +65,6 @@ toposort==1.6 urllib3==1.26.9 watchdog==0.10.3 wcwidth==0.2.5 -websocket-client==1.3.2 +websocket-client==1.3.3 www-authenticate==0.9.2 xmltodict==0.12.0 \ No newline at end of file From b3672c1f57bc0f99a4c05c3fcebc3958f9b3c0a4 Mon Sep 17 00:00:00 2001 From: arista-nwolfe <94405414+arista-nwolfe@users.noreply.github.com> Date: Tue, 5 Jul 2022 12:06:24 -0400 Subject: [PATCH 076/259] Setting the soc property for num_sa_per_sc on macsec encrypt/decrypt (cherry-pick of PR 11166) (#11279) --- .../0/j2p-a7800r3a-36d-36x400G.config.bcm | 3 +++ .../1/j2p-a7800r3a-36d-36x400G.config.bcm | 3 +++ src/sonic-device-data/tests/permitted_list | 2 ++ 3 files changed, 8 insertions(+) diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/j2p-a7800r3a-36d-36x400G.config.bcm b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/j2p-a7800r3a-36d-36x400G.config.bcm index 8d13e2ca43f3..66b740d161a8 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/j2p-a7800r3a-36d-36x400G.config.bcm +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/j2p-a7800r3a-36d-36x400G.config.bcm @@ -994,3 +994,6 @@ serdes_tx_taps_33=nrz:-5:83:-22:0:0:0 serdes_tx_taps_34=nrz:-5:83:-22:0:0:0 serdes_tx_taps_35=nrz:-4:75:-21:0:0:0 serdes_tx_taps_36=nrz:-8:89:-29:0:0:0 + +xflow_macsec_secure_chan_to_num_secure_assoc_encrypt=2 +xflow_macsec_secure_chan_to_num_secure_assoc_decrypt=4 diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/j2p-a7800r3a-36d-36x400G.config.bcm b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/j2p-a7800r3a-36d-36x400G.config.bcm index 84b62055b92b..fe67582df2f5 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/j2p-a7800r3a-36d-36x400G.config.bcm +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/j2p-a7800r3a-36d-36x400G.config.bcm @@ -994,3 +994,6 @@ serdes_tx_taps_33=nrz:-5:75:-20:0:0:0 serdes_tx_taps_34=nrz:-5:75:-20:0:0:0 serdes_tx_taps_35=nrz:-5:80:-23:0:0:0 serdes_tx_taps_36=nrz:-7:85:-25:0:0:0 + +xflow_macsec_secure_chan_to_num_secure_assoc_encrypt=2 +xflow_macsec_secure_chan_to_num_secure_assoc_decrypt=4 diff --git a/src/sonic-device-data/tests/permitted_list b/src/sonic-device-data/tests/permitted_list index 74f24bc537e0..d237ce1948c6 100644 --- a/src/sonic-device-data/tests/permitted_list +++ b/src/sonic-device-data/tests/permitted_list @@ -314,3 +314,5 @@ phy_force_firmware_load phy_pcs_repeater l3_alpm_hit_skip phy_an_lt_msft +xflow_macsec_secure_chan_to_num_secure_assoc_encrypt +xflow_macsec_secure_chan_to_num_secure_assoc_decrypt From 421b65916137a3dcd259bafe172198626a661121 Mon Sep 17 00:00:00 2001 From: Volodymyr Samotiy Date: Tue, 7 Jun 2022 15:11:25 +0300 Subject: [PATCH 077/259] [Mellanox] Update SDK/FW to 4.5.2262/xx.2010.2262 (#10882) - Why I did it To include latest fixes: 1. Warmboot | When trying to reconfigure the Flex Parser header and Flex transition parameters after ISSU, the switch will returned an error even if the configuration was identical to that done before performing the ISSU. 2. Link Up | When toggling many ports of the Spectrum devices while raising 10GbE link up and link maintenance is enabled, the switch may get stuck and may need to be rebooted. 3. Shared buffer | While moving from lossless to lossy while shared headroom was used, reduction of the shared headroom can only be done prior to pool type change and when shared headroom is not utilized. - How I did it Updated SDK submodule along with the relevant Makefiles - How to verify it Build an image and run tests from "sonic-mgmt". Signed-off-by: Volodymyr Samotiy --- platform/mellanox/fw.mk | 6 +++--- platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers | 2 +- platform/mellanox/sdk.mk | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/platform/mellanox/fw.mk b/platform/mellanox/fw.mk index e2ccc2ad7dc8..0dc3800155ea 100644 --- a/platform/mellanox/fw.mk +++ b/platform/mellanox/fw.mk @@ -27,17 +27,17 @@ else FW_FROM_URL = n endif -MLNX_SPC_FW_VERSION = 13.2010.1500 +MLNX_SPC_FW_VERSION = 13.2010.2262 MLNX_SPC_FW_FILE = fw-SPC-rel-$(subst .,_,$(MLNX_SPC_FW_VERSION))-EVB.mfa $(MLNX_SPC_FW_FILE)_PATH = $(MLNX_FW_BASE_PATH) $(MLNX_SPC_FW_FILE)_URL = $(MLNX_FW_BASE_URL)/$(MLNX_SPC_FW_FILE) -MLNX_SPC2_FW_VERSION = 29.2010.1500 +MLNX_SPC2_FW_VERSION = 29.2010.2262 MLNX_SPC2_FW_FILE = fw-SPC2-rel-$(subst .,_,$(MLNX_SPC2_FW_VERSION))-EVB.mfa $(MLNX_SPC2_FW_FILE)_PATH = $(MLNX_FW_BASE_PATH) $(MLNX_SPC2_FW_FILE)_URL = $(MLNX_FW_BASE_URL)/$(MLNX_SPC2_FW_FILE) -MLNX_SPC3_FW_VERSION = 30.2010.1500 +MLNX_SPC3_FW_VERSION = 30.2010.2262 MLNX_SPC3_FW_FILE = fw-SPC3-rel-$(subst .,_,$(MLNX_SPC3_FW_VERSION))-EVB.mfa $(MLNX_SPC3_FW_FILE)_PATH = $(MLNX_FW_BASE_PATH) $(MLNX_SPC3_FW_FILE)_URL = $(MLNX_FW_BASE_URL)/$(MLNX_SPC3_FW_FILE) diff --git a/platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers b/platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers index a0416e20a2b9..9f94bdfc2c7e 160000 --- a/platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers +++ b/platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers @@ -1 +1 @@ -Subproject commit a0416e20a2b9b304cb2c9b629c071f76db0ca2aa +Subproject commit 9f94bdfc2c7e3670b5b959138f9d61d40e7cc1ea diff --git a/platform/mellanox/sdk.mk b/platform/mellanox/sdk.mk index ba152c953808..0ecc6d6bf041 100644 --- a/platform/mellanox/sdk.mk +++ b/platform/mellanox/sdk.mk @@ -16,7 +16,7 @@ # MLNX_SDK_BASE_PATH = $(PLATFORM_PATH)/sdk-src/sx-kernel/Switch-SDK-drivers/bin/ MLNX_SDK_PKG_BASE_PATH = $(MLNX_SDK_BASE_PATH)/$(BLDENV)/ -MLNX_SDK_VERSION = 4.5.1500 +MLNX_SDK_VERSION = 4.5.2262 MLNX_SDK_ISSU_VERSION = 101 MLNX_SDK_DEB_VERSION = $(subst -,.,$(subst _,.,$(MLNX_SDK_VERSION))) From 8035e3d9a740c3a03f94856240b0d1c1fe1fe167 Mon Sep 17 00:00:00 2001 From: vmittal-msft <46945843+vmittal-msft@users.noreply.github.com> Date: Thu, 23 Jun 2022 10:03:59 -0700 Subject: [PATCH 078/259] Updated Chassis MMU settings for 40G/100G/400G line cards (#11108) * Updated Chassis MMU settings for 40G/100G/400G line cards --- .../buffers_defaults_t2.j2 | 102 ++- .../pg_profile_lookup.ini | 40 +- .../Arista-7800R3-48CQ2-C48/qos.json.j2 | 20 - .../buffers_defaults_t2.j2 | 102 ++- .../pg_profile_lookup.ini | 40 +- .../Arista-7800R3-48CQM2-C48/qos.json.j2 | 20 - .../Arista-7800R3A-36D2-C72/0/buffers.json.j2 | 2 + .../0/buffers_defaults_t2.j2 | 37 ++ .../0/pg_profile_lookup.ini | 17 + .../Arista-7800R3A-36D2-C72/0/qos.json.j2 | 1 + .../Arista-7800R3A-36D2-C72/1/buffers.json.j2 | 2 + .../1/buffers_defaults_t2.j2 | 37 ++ .../1/pg_profile_lookup.ini | 17 + .../Arista-7800R3A-36D2-C72/1/qos.json.j2 | 1 + .../Nokia-IXR7250E-36x400G/0/buffers.json.j2 | 2 + .../0/buffers_defaults_t2.j2 | 37 ++ .../0/pg_profile_lookup.ini | 17 + .../Nokia-IXR7250E-36x400G/0/qos.json.j2 | 1 + .../Nokia-IXR7250E-36x400G/1/buffers.json.j2 | 2 + .../1/buffers_defaults_t2.j2 | 37 ++ .../1/pg_profile_lookup.ini | 17 + .../Nokia-IXR7250E-36x400G/1/qos.json.j2 | 1 + .../py2/buffer-arista7800r3-48cq2-lc.json | 334 +++++----- .../py2/qos-arista7800r3-48cq2-lc.json | 2 +- .../py3/buffer-arista7800r3-48cq2-lc.json | 594 ++++++++++-------- .../py3/qos-arista7800r3-48cq2-lc.json | 2 +- 26 files changed, 838 insertions(+), 646 deletions(-) create mode 100644 device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/buffers.json.j2 create mode 100644 device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/buffers_defaults_t2.j2 create mode 100644 device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/pg_profile_lookup.ini create mode 100644 device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/qos.json.j2 create mode 100644 device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/buffers.json.j2 create mode 100644 device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/buffers_defaults_t2.j2 create mode 100644 device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/pg_profile_lookup.ini create mode 100644 device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/qos.json.j2 create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/buffers.json.j2 create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/buffers_defaults_t2.j2 create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/pg_profile_lookup.ini create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/qos.json.j2 create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/buffers.json.j2 create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/buffers_defaults_t2.j2 create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/pg_profile_lookup.ini create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/qos.json.j2 diff --git a/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/buffers_defaults_t2.j2 b/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/buffers_defaults_t2.j2 index b292a354b55a..278315fb3ee7 100644 --- a/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/buffers_defaults_t2.j2 +++ b/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/buffers_defaults_t2.j2 @@ -1,65 +1,37 @@ -{%- set default_cable = '5m' %} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,192,4) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "3220805000", - "type": "both", - "mode": "dynamic", - "xoff": "2102272" - } - }, - "BUFFER_PROFILE": { - "ingress_lossless_profile": { - "pool":"ingress_lossless_pool", - "size":"1280", - "dynamic_th":"-2", - "xon_offset":"2560", - "xon":"0", - "xoff":"66048" - }, - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "xon_offset":"0", - "static_th":"30535680" - }, - "egress_lossless_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "static_th":"33030144" - }, - "egress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "dynamic_th":"-1" - } - }, -{%- endmacro %} - -{%- macro generate_queue_buffers(port_names) %} - "BUFFER_QUEUE": { -{% for port in port_names.split(',') %} - "{{ port }}|3-4": { - "profile" : "ingress_lossless_profile" - }, -{% endfor %} -{% for port in port_names.split(',') %} - "{{ port }}|0-2": { - "profile" : "egress_lossy_profile" - }, -{% endfor %} -{% for port in port_names.split(',') %} - "{{ port }}|5-6": { - "profile" : "egress_lossy_profile" - }{% if not loop.last %},{% endif %} -{% endfor %} - } -{%- endmacro %} +{%- set default_cable = '300m' %} + +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,192,4) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "6441610000", + "type": "both", + "mode": "dynamic", + "xoff": "11678515" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"1280", + "xon_offset": "2560", + "dynamic_th":"0" + }, + "egress_lossless_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "static_th":"33030144" + }, + "egress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"-1" + } + }, +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/pg_profile_lookup.ini b/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/pg_profile_lookup.ini index 887b6a493291..e8289ab03112 100644 --- a/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/pg_profile_lookup.ini +++ b/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/pg_profile_lookup.ini @@ -1,23 +1,17 @@ -# PG lossless profiles. -# speed cable size xon xoff threshold xon_offset - 10000 5m 1280 2560 45506 0 1280 - 25000 5m 1280 2560 49152 0 1280 - 40000 5m 1280 2560 49152 0 1280 - 50000 5m 1280 2560 53248 0 1280 - 100000 5m 1280 2560 65536 0 1280 - 200000 5m 1280 2560 90112 0 1280 - 400000 5m 1280 2560 135168 0 1280 - 10000 40m 1280 2560 45506 0 1280 - 25000 40m 1280 2560 49152 0 1280 - 40000 40m 1280 2560 53248 0 1280 - 50000 40m 1280 2560 57344 0 1280 - 100000 40m 1280 2560 69632 0 1280 - 200000 40m 1280 2560 102400 0 1280 - 400000 40m 1280 2560 159744 0 1280 - 10000 300m 1280 2560 49152 0 1280 - 25000 300m 1280 2560 61440 0 1280 - 40000 300m 1280 2560 69632 0 1280 - 50000 300m 1280 2560 77824 0 1280 - 100000 300m 1280 2560 114688 0 1280 - 200000 300m 1280 2560 188416 0 1280 - 400000 300m 1280 2560 331776 0 1280 +# PG lossless profiles. +# speed cable size xon xoff threshold xon_offset + 40000 300m 1280 2560 69632 0 1280 + 100000 300m 1280 2560 110592 0 1280 + 400000 300m 1280 2560 315392 0 1280 + 40000 1000m 1280 2560 114688 0 1280 + 100000 1000m 1280 2560 225280 0 1280 + 400000 1000m 1280 2560 778240 0 1280 + 40000 2000m 1280 2560 184320 0 1280 + 100000 2000m 1280 2560 393216 0 1280 + 400000 2000m 1280 2560 1445888 0 1280 + 40000 80000m 1280 2560 5369856 0 1280 + 100000 80000m 1280 2560 13357056 0 1280 + 400000 80000m 1280 2560 53305344 0 1280 + 40000 120000m 1280 2560 8028160 0 1280 + 100000 120000m 1280 2560 20004864 0 1280 + 400000 120000m 1280 2560 79900672 0 1280 diff --git a/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/qos.json.j2 b/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/qos.json.j2 index 34002048afdb..3e548325ea30 100644 --- a/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/qos.json.j2 +++ b/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/qos.json.j2 @@ -1,21 +1 @@ -{%- macro generate_wred_profiles() %} - "WRED_PROFILE": { - "AZURE_LOSSLESS" : { - "wred_green_enable" : "true", - "wred_yellow_enable" : "true", - "wred_red_enable" : "true", - "ecn" : "ecn_all", - "green_max_threshold" : "2097152", - "green_min_threshold" : "250000", - "yellow_max_threshold" : "2097152", - "yellow_min_threshold" : "1048576", - "red_max_threshold" : "2097152", - "red_min_threshold" : "1048576", - "green_drop_probability" : "5", - "yellow_drop_probability": "5", - "red_drop_probability" : "5" - } - }, -{%- endmacro %} - {%- include 'qos_config.j2' %} diff --git a/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/buffers_defaults_t2.j2 b/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/buffers_defaults_t2.j2 index b292a354b55a..278315fb3ee7 100644 --- a/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/buffers_defaults_t2.j2 +++ b/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/buffers_defaults_t2.j2 @@ -1,65 +1,37 @@ -{%- set default_cable = '5m' %} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,192,4) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "3220805000", - "type": "both", - "mode": "dynamic", - "xoff": "2102272" - } - }, - "BUFFER_PROFILE": { - "ingress_lossless_profile": { - "pool":"ingress_lossless_pool", - "size":"1280", - "dynamic_th":"-2", - "xon_offset":"2560", - "xon":"0", - "xoff":"66048" - }, - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "xon_offset":"0", - "static_th":"30535680" - }, - "egress_lossless_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "static_th":"33030144" - }, - "egress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "dynamic_th":"-1" - } - }, -{%- endmacro %} - -{%- macro generate_queue_buffers(port_names) %} - "BUFFER_QUEUE": { -{% for port in port_names.split(',') %} - "{{ port }}|3-4": { - "profile" : "ingress_lossless_profile" - }, -{% endfor %} -{% for port in port_names.split(',') %} - "{{ port }}|0-2": { - "profile" : "egress_lossy_profile" - }, -{% endfor %} -{% for port in port_names.split(',') %} - "{{ port }}|5-6": { - "profile" : "egress_lossy_profile" - }{% if not loop.last %},{% endif %} -{% endfor %} - } -{%- endmacro %} +{%- set default_cable = '300m' %} + +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,192,4) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "6441610000", + "type": "both", + "mode": "dynamic", + "xoff": "11678515" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"1280", + "xon_offset": "2560", + "dynamic_th":"0" + }, + "egress_lossless_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "static_th":"33030144" + }, + "egress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"-1" + } + }, +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/pg_profile_lookup.ini b/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/pg_profile_lookup.ini index 887b6a493291..e8289ab03112 100644 --- a/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/pg_profile_lookup.ini +++ b/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/pg_profile_lookup.ini @@ -1,23 +1,17 @@ -# PG lossless profiles. -# speed cable size xon xoff threshold xon_offset - 10000 5m 1280 2560 45506 0 1280 - 25000 5m 1280 2560 49152 0 1280 - 40000 5m 1280 2560 49152 0 1280 - 50000 5m 1280 2560 53248 0 1280 - 100000 5m 1280 2560 65536 0 1280 - 200000 5m 1280 2560 90112 0 1280 - 400000 5m 1280 2560 135168 0 1280 - 10000 40m 1280 2560 45506 0 1280 - 25000 40m 1280 2560 49152 0 1280 - 40000 40m 1280 2560 53248 0 1280 - 50000 40m 1280 2560 57344 0 1280 - 100000 40m 1280 2560 69632 0 1280 - 200000 40m 1280 2560 102400 0 1280 - 400000 40m 1280 2560 159744 0 1280 - 10000 300m 1280 2560 49152 0 1280 - 25000 300m 1280 2560 61440 0 1280 - 40000 300m 1280 2560 69632 0 1280 - 50000 300m 1280 2560 77824 0 1280 - 100000 300m 1280 2560 114688 0 1280 - 200000 300m 1280 2560 188416 0 1280 - 400000 300m 1280 2560 331776 0 1280 +# PG lossless profiles. +# speed cable size xon xoff threshold xon_offset + 40000 300m 1280 2560 69632 0 1280 + 100000 300m 1280 2560 110592 0 1280 + 400000 300m 1280 2560 315392 0 1280 + 40000 1000m 1280 2560 114688 0 1280 + 100000 1000m 1280 2560 225280 0 1280 + 400000 1000m 1280 2560 778240 0 1280 + 40000 2000m 1280 2560 184320 0 1280 + 100000 2000m 1280 2560 393216 0 1280 + 400000 2000m 1280 2560 1445888 0 1280 + 40000 80000m 1280 2560 5369856 0 1280 + 100000 80000m 1280 2560 13357056 0 1280 + 400000 80000m 1280 2560 53305344 0 1280 + 40000 120000m 1280 2560 8028160 0 1280 + 100000 120000m 1280 2560 20004864 0 1280 + 400000 120000m 1280 2560 79900672 0 1280 diff --git a/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/qos.json.j2 b/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/qos.json.j2 index 34002048afdb..3e548325ea30 100644 --- a/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/qos.json.j2 +++ b/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/qos.json.j2 @@ -1,21 +1 @@ -{%- macro generate_wred_profiles() %} - "WRED_PROFILE": { - "AZURE_LOSSLESS" : { - "wred_green_enable" : "true", - "wred_yellow_enable" : "true", - "wred_red_enable" : "true", - "ecn" : "ecn_all", - "green_max_threshold" : "2097152", - "green_min_threshold" : "250000", - "yellow_max_threshold" : "2097152", - "yellow_min_threshold" : "1048576", - "red_max_threshold" : "2097152", - "red_min_threshold" : "1048576", - "green_drop_probability" : "5", - "yellow_drop_probability": "5", - "red_drop_probability" : "5" - } - }, -{%- endmacro %} - {%- include 'qos_config.j2' %} diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/buffers.json.j2 b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/buffers.json.j2 new file mode 100644 index 000000000000..f34a844f4a87 --- /dev/null +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/buffers.json.j2 @@ -0,0 +1,2 @@ +{%- set default_topo = 't2' %} +{%- include 'buffers_config.j2' %} diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/buffers_defaults_t2.j2 b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/buffers_defaults_t2.j2 new file mode 100644 index 000000000000..b64d225389d0 --- /dev/null +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/buffers_defaults_t2.j2 @@ -0,0 +1,37 @@ +{%- set default_cable = '300m' %} + +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,144,4) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "6441610000", + "type": "both", + "mode": "dynamic", + "xoff": "11354112" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"1280", + "xon_offset": "2560", + "dynamic_th":"0" + }, + "egress_lossless_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "static_th":"33030144" + }, + "egress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"-1" + } + }, +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/pg_profile_lookup.ini b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/pg_profile_lookup.ini new file mode 100644 index 000000000000..e8289ab03112 --- /dev/null +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/pg_profile_lookup.ini @@ -0,0 +1,17 @@ +# PG lossless profiles. +# speed cable size xon xoff threshold xon_offset + 40000 300m 1280 2560 69632 0 1280 + 100000 300m 1280 2560 110592 0 1280 + 400000 300m 1280 2560 315392 0 1280 + 40000 1000m 1280 2560 114688 0 1280 + 100000 1000m 1280 2560 225280 0 1280 + 400000 1000m 1280 2560 778240 0 1280 + 40000 2000m 1280 2560 184320 0 1280 + 100000 2000m 1280 2560 393216 0 1280 + 400000 2000m 1280 2560 1445888 0 1280 + 40000 80000m 1280 2560 5369856 0 1280 + 100000 80000m 1280 2560 13357056 0 1280 + 400000 80000m 1280 2560 53305344 0 1280 + 40000 120000m 1280 2560 8028160 0 1280 + 100000 120000m 1280 2560 20004864 0 1280 + 400000 120000m 1280 2560 79900672 0 1280 diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/qos.json.j2 b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/qos.json.j2 new file mode 100644 index 000000000000..3e548325ea30 --- /dev/null +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/qos.json.j2 @@ -0,0 +1 @@ +{%- include 'qos_config.j2' %} diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/buffers.json.j2 b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/buffers.json.j2 new file mode 100644 index 000000000000..f34a844f4a87 --- /dev/null +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/buffers.json.j2 @@ -0,0 +1,2 @@ +{%- set default_topo = 't2' %} +{%- include 'buffers_config.j2' %} diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/buffers_defaults_t2.j2 b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/buffers_defaults_t2.j2 new file mode 100644 index 000000000000..b64d225389d0 --- /dev/null +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/buffers_defaults_t2.j2 @@ -0,0 +1,37 @@ +{%- set default_cable = '300m' %} + +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,144,4) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "6441610000", + "type": "both", + "mode": "dynamic", + "xoff": "11354112" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"1280", + "xon_offset": "2560", + "dynamic_th":"0" + }, + "egress_lossless_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "static_th":"33030144" + }, + "egress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"-1" + } + }, +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/pg_profile_lookup.ini b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/pg_profile_lookup.ini new file mode 100644 index 000000000000..e8289ab03112 --- /dev/null +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/pg_profile_lookup.ini @@ -0,0 +1,17 @@ +# PG lossless profiles. +# speed cable size xon xoff threshold xon_offset + 40000 300m 1280 2560 69632 0 1280 + 100000 300m 1280 2560 110592 0 1280 + 400000 300m 1280 2560 315392 0 1280 + 40000 1000m 1280 2560 114688 0 1280 + 100000 1000m 1280 2560 225280 0 1280 + 400000 1000m 1280 2560 778240 0 1280 + 40000 2000m 1280 2560 184320 0 1280 + 100000 2000m 1280 2560 393216 0 1280 + 400000 2000m 1280 2560 1445888 0 1280 + 40000 80000m 1280 2560 5369856 0 1280 + 100000 80000m 1280 2560 13357056 0 1280 + 400000 80000m 1280 2560 53305344 0 1280 + 40000 120000m 1280 2560 8028160 0 1280 + 100000 120000m 1280 2560 20004864 0 1280 + 400000 120000m 1280 2560 79900672 0 1280 diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/qos.json.j2 b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/qos.json.j2 new file mode 100644 index 000000000000..3e548325ea30 --- /dev/null +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/qos.json.j2 @@ -0,0 +1 @@ +{%- include 'qos_config.j2' %} diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/buffers.json.j2 b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/buffers.json.j2 new file mode 100644 index 000000000000..f34a844f4a87 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/buffers.json.j2 @@ -0,0 +1,2 @@ +{%- set default_topo = 't2' %} +{%- include 'buffers_config.j2' %} diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/buffers_defaults_t2.j2 b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/buffers_defaults_t2.j2 new file mode 100644 index 000000000000..7eb92f11ca7f --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/buffers_defaults_t2.j2 @@ -0,0 +1,37 @@ +{%- set default_cable = '300m' %} + +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,36) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "6441610000", + "type": "both", + "mode": "dynamic", + "xoff": "11354112" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"1280", + "xon_offset": "2560", + "dynamic_th":"0" + }, + "egress_lossless_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "static_th":"33030144" + }, + "egress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"-1" + } + }, +{%- endmacro %} diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/pg_profile_lookup.ini b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/pg_profile_lookup.ini new file mode 100644 index 000000000000..e8289ab03112 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/pg_profile_lookup.ini @@ -0,0 +1,17 @@ +# PG lossless profiles. +# speed cable size xon xoff threshold xon_offset + 40000 300m 1280 2560 69632 0 1280 + 100000 300m 1280 2560 110592 0 1280 + 400000 300m 1280 2560 315392 0 1280 + 40000 1000m 1280 2560 114688 0 1280 + 100000 1000m 1280 2560 225280 0 1280 + 400000 1000m 1280 2560 778240 0 1280 + 40000 2000m 1280 2560 184320 0 1280 + 100000 2000m 1280 2560 393216 0 1280 + 400000 2000m 1280 2560 1445888 0 1280 + 40000 80000m 1280 2560 5369856 0 1280 + 100000 80000m 1280 2560 13357056 0 1280 + 400000 80000m 1280 2560 53305344 0 1280 + 40000 120000m 1280 2560 8028160 0 1280 + 100000 120000m 1280 2560 20004864 0 1280 + 400000 120000m 1280 2560 79900672 0 1280 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/qos.json.j2 b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/qos.json.j2 new file mode 100644 index 000000000000..3e548325ea30 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/qos.json.j2 @@ -0,0 +1 @@ +{%- include 'qos_config.j2' %} diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/buffers.json.j2 b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/buffers.json.j2 new file mode 100644 index 000000000000..f34a844f4a87 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/buffers.json.j2 @@ -0,0 +1,2 @@ +{%- set default_topo = 't2' %} +{%- include 'buffers_config.j2' %} diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/buffers_defaults_t2.j2 b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/buffers_defaults_t2.j2 new file mode 100644 index 000000000000..7eb92f11ca7f --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/buffers_defaults_t2.j2 @@ -0,0 +1,37 @@ +{%- set default_cable = '300m' %} + +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,36) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "6441610000", + "type": "both", + "mode": "dynamic", + "xoff": "11354112" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"1280", + "xon_offset": "2560", + "dynamic_th":"0" + }, + "egress_lossless_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "static_th":"33030144" + }, + "egress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"-1" + } + }, +{%- endmacro %} diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/pg_profile_lookup.ini b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/pg_profile_lookup.ini new file mode 100644 index 000000000000..e8289ab03112 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/pg_profile_lookup.ini @@ -0,0 +1,17 @@ +# PG lossless profiles. +# speed cable size xon xoff threshold xon_offset + 40000 300m 1280 2560 69632 0 1280 + 100000 300m 1280 2560 110592 0 1280 + 400000 300m 1280 2560 315392 0 1280 + 40000 1000m 1280 2560 114688 0 1280 + 100000 1000m 1280 2560 225280 0 1280 + 400000 1000m 1280 2560 778240 0 1280 + 40000 2000m 1280 2560 184320 0 1280 + 100000 2000m 1280 2560 393216 0 1280 + 400000 2000m 1280 2560 1445888 0 1280 + 40000 80000m 1280 2560 5369856 0 1280 + 100000 80000m 1280 2560 13357056 0 1280 + 400000 80000m 1280 2560 53305344 0 1280 + 40000 120000m 1280 2560 8028160 0 1280 + 100000 120000m 1280 2560 20004864 0 1280 + 400000 120000m 1280 2560 79900672 0 1280 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/qos.json.j2 b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/qos.json.j2 new file mode 100644 index 000000000000..3e548325ea30 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/qos.json.j2 @@ -0,0 +1 @@ +{%- include 'qos_config.j2' %} diff --git a/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cq2-lc.json b/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cq2-lc.json index 8ec9e0747110..fd9984e42083 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cq2-lc.json +++ b/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cq2-lc.json @@ -1,79 +1,71 @@ { "CABLE_LENGTH": { "AZURE": { - "Ethernet180": "5m", - "Ethernet8": "5m", - "Ethernet184": "5m", - "Ethernet188": "5m", - "Ethernet0": "5m", - "Ethernet4": "5m", - "Ethernet108": "5m", - "Ethernet100": "5m", - "Ethernet128": "5m", - "Ethernet104": "5m", - "Ethernet68": "5m", - "Ethernet96": "5m", - "Ethernet124": "5m", - "Ethernet148": "5m", - "Ethernet92": "5m", - "Ethernet120": "5m", - "Ethernet144": "5m", - "Ethernet52": "5m", - "Ethernet160": "5m", - "Ethernet140": "5m", - "Ethernet56": "5m", - "Ethernet164": "5m", - "Ethernet76": "5m", - "Ethernet72": "5m", - "Ethernet64": "5m", - "Ethernet32": "5m", - "Ethernet16": "5m", - "Ethernet36": "5m", - "Ethernet12": "5m", - "Ethernet168": "5m", - "Ethernet116": "5m", - "Ethernet80": "5m", - "Ethernet112": "5m", - "Ethernet84": "5m", - "Ethernet152": "5m", - "Ethernet136": "5m", - "Ethernet156": "5m", - "Ethernet132": "5m", - "Ethernet48": "5m", - "Ethernet172": "5m", - "Ethernet44": "5m", - "Ethernet176": "5m", - "Ethernet40": "5m", - "Ethernet28": "5m", - "Ethernet88": "5m", - "Ethernet60": "5m", - "Ethernet20": "5m", - "Ethernet24": "5m" + "Ethernet180": "300m", + "Ethernet8": "300m", + "Ethernet184": "300m", + "Ethernet188": "300m", + "Ethernet0": "300m", + "Ethernet4": "300m", + "Ethernet108": "300m", + "Ethernet100": "300m", + "Ethernet128": "300m", + "Ethernet104": "300m", + "Ethernet68": "300m", + "Ethernet96": "300m", + "Ethernet124": "300m", + "Ethernet148": "300m", + "Ethernet92": "300m", + "Ethernet120": "300m", + "Ethernet144": "300m", + "Ethernet52": "300m", + "Ethernet160": "300m", + "Ethernet140": "300m", + "Ethernet56": "300m", + "Ethernet164": "300m", + "Ethernet76": "300m", + "Ethernet72": "300m", + "Ethernet64": "300m", + "Ethernet32": "300m", + "Ethernet16": "300m", + "Ethernet36": "300m", + "Ethernet12": "300m", + "Ethernet168": "300m", + "Ethernet116": "300m", + "Ethernet80": "300m", + "Ethernet112": "300m", + "Ethernet84": "300m", + "Ethernet152": "300m", + "Ethernet136": "300m", + "Ethernet156": "300m", + "Ethernet132": "300m", + "Ethernet48": "300m", + "Ethernet172": "300m", + "Ethernet44": "300m", + "Ethernet176": "300m", + "Ethernet40": "300m", + "Ethernet28": "300m", + "Ethernet88": "300m", + "Ethernet60": "300m", + "Ethernet20": "300m", + "Ethernet24": "300m" } }, "BUFFER_POOL": { "ingress_lossless_pool": { - "size": "3220805000", + "size": "6441610000", "type": "both", "mode": "dynamic", - "xoff": "2102272" + "xoff": "11678515" } }, "BUFFER_PROFILE": { - "ingress_lossless_profile": { + "ingress_lossy_profile": { "pool":"ingress_lossless_pool", "size":"1280", - "dynamic_th":"-2", "xon_offset":"2560", - "xon":"0", - "xoff":"66048" - }, - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "xon_offset":"0", - "static_th":"30535680" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", @@ -226,139 +218,139 @@ "BUFFER_QUEUE": { "Ethernet180|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet8|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet184|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet188|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet0|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet4|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet108|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet100|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet128|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet104|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet68|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet96|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet124|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet148|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet92|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet120|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet144|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet52|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet140|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet56|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet164|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet76|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet72|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet64|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet32|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet16|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet36|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet12|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet88|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet116|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet80|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet112|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet84|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet152|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet136|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet156|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet132|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet48|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet44|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet176|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet40|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet28|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet60|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet20|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet24|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet180|0-2": { "profile" : "egress_lossy_profile" @@ -497,93 +489,137 @@ }, "Ethernet180|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet8|5-6": { + }, + "Ethernet8|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet184|5-6": { + }, + "Ethernet184|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet188|5-6": { + }, + "Ethernet188|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet0|5-6": { + }, + "Ethernet0|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet4|5-6": { + }, + "Ethernet4|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet108|5-6": { + }, + "Ethernet108|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet100|5-6": { + }, + "Ethernet100|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet128|5-6": { + }, + "Ethernet128|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet104|5-6": { + }, + "Ethernet104|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet68|5-6": { + }, + "Ethernet68|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet96|5-6": { + }, + "Ethernet96|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet124|5-6": { + }, + "Ethernet124|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet148|5-6": { + }, + "Ethernet148|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet92|5-6": { + }, + "Ethernet92|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet120|5-6": { + }, + "Ethernet120|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet144|5-6": { + }, + "Ethernet144|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet52|5-6": { + }, + "Ethernet52|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet140|5-6": { + }, + "Ethernet140|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet56|5-6": { + }, + "Ethernet56|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet164|5-6": { + }, + "Ethernet164|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet76|5-6": { + }, + "Ethernet76|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet72|5-6": { + }, + "Ethernet72|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet64|5-6": { + }, + "Ethernet64|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet32|5-6": { + }, + "Ethernet32|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet16|5-6": { + }, + "Ethernet16|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet36|5-6": { + }, + "Ethernet36|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet12|5-6": { + }, + "Ethernet12|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet88|5-6": { + }, + "Ethernet88|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet116|5-6": { + }, + "Ethernet116|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet80|5-6": { + }, + "Ethernet80|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet112|5-6": { + }, + "Ethernet112|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet84|5-6": { + }, + "Ethernet84|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet152|5-6": { + }, + "Ethernet152|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet136|5-6": { + }, + "Ethernet136|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet156|5-6": { + }, + "Ethernet156|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet132|5-6": { + }, + "Ethernet132|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet48|5-6": { + }, + "Ethernet48|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet44|5-6": { + }, + "Ethernet44|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet176|5-6": { + }, + "Ethernet176|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet40|5-6": { + }, + "Ethernet40|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet28|5-6": { + }, + "Ethernet28|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet60|5-6": { + }, + "Ethernet60|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet20|5-6": { + }, + "Ethernet20|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet24|5-6": { + }, + "Ethernet24|5-6": { "profile" : "egress_lossy_profile" } } diff --git a/src/sonic-config-engine/tests/sample_output/py2/qos-arista7800r3-48cq2-lc.json b/src/sonic-config-engine/tests/sample_output/py2/qos-arista7800r3-48cq2-lc.json index 48b3a293e02b..bd8f5a22a9f5 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/qos-arista7800r3-48cq2-lc.json +++ b/src/sonic-config-engine/tests/sample_output/py2/qos-arista7800r3-48cq2-lc.json @@ -485,7 +485,7 @@ "wred_red_enable" : "true", "ecn" : "ecn_all", "green_max_threshold" : "2097152", - "green_min_threshold" : "250000", + "green_min_threshold" : "1048576", "yellow_max_threshold" : "2097152", "yellow_min_threshold" : "1048576", "red_max_threshold" : "2097152", diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cq2-lc.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cq2-lc.json index 5301516178b2..fd9984e42083 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cq2-lc.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cq2-lc.json @@ -1,79 +1,71 @@ { "CABLE_LENGTH": { "AZURE": { - "Ethernet0": "5m", - "Ethernet4": "5m", - "Ethernet8": "5m", - "Ethernet12": "5m", - "Ethernet16": "5m", - "Ethernet20": "5m", - "Ethernet24": "5m", - "Ethernet28": "5m", - "Ethernet32": "5m", - "Ethernet36": "5m", - "Ethernet40": "5m", - "Ethernet44": "5m", - "Ethernet48": "5m", - "Ethernet52": "5m", - "Ethernet56": "5m", - "Ethernet60": "5m", - "Ethernet64": "5m", - "Ethernet68": "5m", - "Ethernet72": "5m", - "Ethernet76": "5m", - "Ethernet80": "5m", - "Ethernet84": "5m", - "Ethernet88": "5m", - "Ethernet92": "5m", - "Ethernet96": "5m", - "Ethernet100": "5m", - "Ethernet104": "5m", - "Ethernet108": "5m", - "Ethernet112": "5m", - "Ethernet116": "5m", - "Ethernet120": "5m", - "Ethernet124": "5m", - "Ethernet128": "5m", - "Ethernet132": "5m", - "Ethernet136": "5m", - "Ethernet140": "5m", - "Ethernet144": "5m", - "Ethernet148": "5m", - "Ethernet152": "5m", - "Ethernet156": "5m", - "Ethernet160": "5m", - "Ethernet164": "5m", - "Ethernet168": "5m", - "Ethernet172": "5m", - "Ethernet176": "5m", - "Ethernet180": "5m", - "Ethernet184": "5m", - "Ethernet188": "5m" + "Ethernet180": "300m", + "Ethernet8": "300m", + "Ethernet184": "300m", + "Ethernet188": "300m", + "Ethernet0": "300m", + "Ethernet4": "300m", + "Ethernet108": "300m", + "Ethernet100": "300m", + "Ethernet128": "300m", + "Ethernet104": "300m", + "Ethernet68": "300m", + "Ethernet96": "300m", + "Ethernet124": "300m", + "Ethernet148": "300m", + "Ethernet92": "300m", + "Ethernet120": "300m", + "Ethernet144": "300m", + "Ethernet52": "300m", + "Ethernet160": "300m", + "Ethernet140": "300m", + "Ethernet56": "300m", + "Ethernet164": "300m", + "Ethernet76": "300m", + "Ethernet72": "300m", + "Ethernet64": "300m", + "Ethernet32": "300m", + "Ethernet16": "300m", + "Ethernet36": "300m", + "Ethernet12": "300m", + "Ethernet168": "300m", + "Ethernet116": "300m", + "Ethernet80": "300m", + "Ethernet112": "300m", + "Ethernet84": "300m", + "Ethernet152": "300m", + "Ethernet136": "300m", + "Ethernet156": "300m", + "Ethernet132": "300m", + "Ethernet48": "300m", + "Ethernet172": "300m", + "Ethernet44": "300m", + "Ethernet176": "300m", + "Ethernet40": "300m", + "Ethernet28": "300m", + "Ethernet88": "300m", + "Ethernet60": "300m", + "Ethernet20": "300m", + "Ethernet24": "300m" } }, "BUFFER_POOL": { "ingress_lossless_pool": { - "size": "3220805000", + "size": "6441610000", "type": "both", "mode": "dynamic", - "xoff": "2102272" + "xoff": "11678515" } }, "BUFFER_PROFILE": { - "ingress_lossless_profile": { + "ingress_lossy_profile": { "pool":"ingress_lossless_pool", "size":"1280", - "dynamic_th":"-2", "xon_offset":"2560", - "xon":"0", - "xoff":"66048" - }, - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "xon_offset":"0", - "static_th":"30535680" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", @@ -87,503 +79,547 @@ } }, "BUFFER_PG": { - "Ethernet0|0": { + "Ethernet180|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet36|0": { + "Ethernet8|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet40|0": { + "Ethernet184|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet44|0": { + "Ethernet188|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet48|0": { + "Ethernet0|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet52|0": { + "Ethernet4|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet56|0": { + "Ethernet108|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet60|0": { + "Ethernet100|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet64|0": { + "Ethernet128|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet104|0": { "profile" : "ingress_lossy_profile" }, "Ethernet68|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet72|0": { + "Ethernet96|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet4|0": { + "Ethernet124|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet76|0": { + "Ethernet148|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet80|0": { + "Ethernet92|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet84|0": { + "Ethernet120|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet88|0": { + "Ethernet144|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet92|0": { + "Ethernet52|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet96|0": { + "Ethernet140|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet100|0": { + "Ethernet56|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet104|0": { + "Ethernet164|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet108|0": { + "Ethernet76|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet112|0": { + "Ethernet72|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet8|0": { + "Ethernet64|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet116|0": { + "Ethernet32|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet120|0": { + "Ethernet16|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet124|0": { + "Ethernet36|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet128|0": { + "Ethernet12|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet132|0": { + "Ethernet88|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet136|0": { + "Ethernet116|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet140|0": { + "Ethernet80|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet144|0": { + "Ethernet112|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet148|0": { + "Ethernet84|0": { "profile" : "ingress_lossy_profile" }, "Ethernet152|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet12|0": { + "Ethernet136|0": { "profile" : "ingress_lossy_profile" }, "Ethernet156|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet164|0": { - "profile" : "ingress_lossy_profile" - }, - "Ethernet176|0": { + "Ethernet132|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet180|0": { + "Ethernet48|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet184|0": { + "Ethernet44|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet188|0": { + "Ethernet176|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet16|0": { + "Ethernet40|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet20|0": { + "Ethernet28|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet24|0": { + "Ethernet60|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet28|0": { + "Ethernet20|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet32|0": { + "Ethernet24|0": { "profile" : "ingress_lossy_profile" } }, "BUFFER_QUEUE": { - "Ethernet0|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet180|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet36|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet8|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet40|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet184|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet44|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet188|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet48|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet0|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet52|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet4|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet56|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet108|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet60|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet100|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet64|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet128|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet104|3-4": { + "profile" : "egress_lossless_profile" }, "Ethernet68|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, - "Ethernet72|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet96|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet4|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet124|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet76|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet148|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet80|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet92|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet84|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet120|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet88|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet144|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet92|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet52|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet96|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet140|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet100|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet56|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet104|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet164|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet108|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet76|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet112|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet72|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet8|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet64|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet116|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet32|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet120|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet16|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet124|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet36|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet128|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet12|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet132|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet88|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet136|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet116|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet140|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet80|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet144|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet112|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet148|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet84|3-4": { + "profile" : "egress_lossless_profile" }, "Ethernet152|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, - "Ethernet12|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet136|3-4": { + "profile" : "egress_lossless_profile" }, "Ethernet156|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, - "Ethernet164|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet132|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet176|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet48|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet180|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet44|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet184|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet176|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet188|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet40|3-4": { + "profile" : "egress_lossless_profile" }, - "Ethernet16|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet28|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet60|3-4": { + "profile" : "egress_lossless_profile" }, "Ethernet20|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, "Ethernet24|3-4": { - "profile" : "ingress_lossless_profile" - }, - "Ethernet28|3-4": { - "profile" : "ingress_lossless_profile" + "profile" : "egress_lossless_profile" }, - "Ethernet32|3-4": { - "profile" : "ingress_lossless_profile" + "Ethernet180|0-2": { + "profile" : "egress_lossy_profile" }, - "Ethernet0|0-2": { + "Ethernet8|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet36|0-2": { + "Ethernet184|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet40|0-2": { + "Ethernet188|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet44|0-2": { + "Ethernet0|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet48|0-2": { + "Ethernet4|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet52|0-2": { + "Ethernet108|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet56|0-2": { + "Ethernet100|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet60|0-2": { + "Ethernet128|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet64|0-2": { + "Ethernet104|0-2": { "profile" : "egress_lossy_profile" }, "Ethernet68|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet72|0-2": { + "Ethernet96|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet4|0-2": { + "Ethernet124|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet76|0-2": { + "Ethernet148|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet80|0-2": { + "Ethernet92|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet84|0-2": { + "Ethernet120|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet88|0-2": { + "Ethernet144|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet92|0-2": { + "Ethernet52|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet96|0-2": { + "Ethernet140|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet100|0-2": { + "Ethernet56|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet104|0-2": { + "Ethernet164|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet108|0-2": { + "Ethernet76|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet112|0-2": { + "Ethernet72|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet8|0-2": { + "Ethernet64|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet116|0-2": { + "Ethernet32|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet120|0-2": { + "Ethernet16|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet124|0-2": { + "Ethernet36|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet128|0-2": { + "Ethernet12|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet132|0-2": { + "Ethernet88|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet136|0-2": { + "Ethernet116|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet140|0-2": { + "Ethernet80|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet144|0-2": { + "Ethernet112|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet148|0-2": { + "Ethernet84|0-2": { "profile" : "egress_lossy_profile" }, "Ethernet152|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet12|0-2": { + "Ethernet136|0-2": { "profile" : "egress_lossy_profile" }, "Ethernet156|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet164|0-2": { - "profile" : "egress_lossy_profile" - }, - "Ethernet176|0-2": { + "Ethernet132|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet180|0-2": { + "Ethernet48|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet184|0-2": { + "Ethernet44|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet188|0-2": { + "Ethernet176|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet16|0-2": { + "Ethernet40|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet20|0-2": { + "Ethernet28|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet24|0-2": { + "Ethernet60|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet28|0-2": { + "Ethernet20|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet32|0-2": { + "Ethernet24|0-2": { "profile" : "egress_lossy_profile" }, - "Ethernet0|5-6": { + "Ethernet180|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet36|5-6": { + }, + "Ethernet8|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet40|5-6": { + }, + "Ethernet184|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet44|5-6": { + }, + "Ethernet188|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet48|5-6": { + }, + "Ethernet0|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet52|5-6": { + }, + "Ethernet4|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet56|5-6": { + }, + "Ethernet108|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet60|5-6": { + }, + "Ethernet100|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet64|5-6": { + }, + "Ethernet128|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet68|5-6": { + }, + "Ethernet104|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet72|5-6": { + }, + "Ethernet68|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet4|5-6": { + }, + "Ethernet96|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet76|5-6": { + }, + "Ethernet124|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet80|5-6": { + }, + "Ethernet148|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet84|5-6": { + }, + "Ethernet92|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet88|5-6": { + }, + "Ethernet120|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet92|5-6": { + }, + "Ethernet144|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet96|5-6": { + }, + "Ethernet52|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet100|5-6": { + }, + "Ethernet140|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet104|5-6": { + }, + "Ethernet56|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet108|5-6": { + }, + "Ethernet164|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet112|5-6": { + }, + "Ethernet76|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet8|5-6": { + }, + "Ethernet72|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet116|5-6": { + }, + "Ethernet64|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet120|5-6": { + }, + "Ethernet32|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet124|5-6": { + }, + "Ethernet16|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet128|5-6": { + }, + "Ethernet36|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet132|5-6": { + }, + "Ethernet12|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet136|5-6": { + }, + "Ethernet88|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet140|5-6": { + }, + "Ethernet116|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet144|5-6": { + }, + "Ethernet80|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet148|5-6": { + }, + "Ethernet112|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet152|5-6": { + }, + "Ethernet84|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet12|5-6": { + }, + "Ethernet152|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet156|5-6": { + }, + "Ethernet136|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet164|5-6": { + }, + "Ethernet156|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet176|5-6": { + }, + "Ethernet132|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet180|5-6": { + }, + "Ethernet48|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet184|5-6": { + }, + "Ethernet44|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet188|5-6": { + }, + "Ethernet176|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet16|5-6": { + }, + "Ethernet40|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet20|5-6": { + }, + "Ethernet28|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet24|5-6": { + }, + "Ethernet60|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet28|5-6": { + }, + "Ethernet20|5-6": { "profile" : "egress_lossy_profile" - }, "Ethernet32|5-6": { + }, + "Ethernet24|5-6": { "profile" : "egress_lossy_profile" } } diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7800r3-48cq2-lc.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7800r3-48cq2-lc.json index 48b3a293e02b..bd8f5a22a9f5 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7800r3-48cq2-lc.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7800r3-48cq2-lc.json @@ -485,7 +485,7 @@ "wred_red_enable" : "true", "ecn" : "ecn_all", "green_max_threshold" : "2097152", - "green_min_threshold" : "250000", + "green_min_threshold" : "1048576", "yellow_max_threshold" : "2097152", "yellow_min_threshold" : "1048576", "red_max_threshold" : "2097152", From 477ed2c34486c9eeb2012e50912e96cc971d302f Mon Sep 17 00:00:00 2001 From: Junhua Zhai Date: Sat, 18 Jun 2022 19:17:05 +0800 Subject: [PATCH 079/259] [macsec] CLI Supports display of gearbox macsec counter (#11113) Why I did it To support gearbox macsec counter display, following Azure/sonic-swss-common#622. How I did it Use swsscommon CounterTable API --- .../cli-plugin-tests/mock_tables.py | 15 +++++++++++++++ .../cli/show/plugins/show_macsec.py | 18 ++++-------------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/dockers/docker-macsec/cli-plugin-tests/mock_tables.py b/dockers/docker-macsec/cli-plugin-tests/mock_tables.py index 2e88297597b3..3708644bfba2 100644 --- a/dockers/docker-macsec/cli-plugin-tests/mock_tables.py +++ b/dockers/docker-macsec/cli-plugin-tests/mock_tables.py @@ -115,6 +115,19 @@ def keys(self, pattern='*'): return [key for key in self.redis if regex.match(key)] +class MacsecCounter: + pass + + +class CounterTable: + def __init__(self, db): + self.db = db + + def get(self, macsec, name): + key = self.db.hget("COUNTERS_MACSEC_NAME_MAP", name) + return self.db.get("COUNTERS:" + key) + + swsssdk.interface.DBInterface._subscribe_keyspace_notification = _subscribe_keyspace_notification mockredis.MockRedis.config_set = config_set redis.StrictRedis = SwssSyncClient @@ -122,3 +135,5 @@ def keys(self, pattern='*'): swsscommon.SonicV2Connector = SonicV2Connector swsscommon.ConfigDBConnector = ConfigDBConnector swsscommon.ConfigDBPipeConnector = ConfigDBPipeConnector +swsscommon.CounterTable = CounterTable +swsscommon.MacsecCounter = MacsecCounter diff --git a/dockers/docker-macsec/cli/show/plugins/show_macsec.py b/dockers/docker-macsec/cli/show/plugins/show_macsec.py index 538b8947f91d..0d32f7e96249 100644 --- a/dockers/docker-macsec/cli/show/plugins/show_macsec.py +++ b/dockers/docker-macsec/cli/show/plugins/show_macsec.py @@ -5,11 +5,13 @@ from tabulate import tabulate from swsscommon.swsscommon import SonicV2Connector +from swsscommon.swsscommon import CounterTable, MacsecCounter DB_CONNECTOR = SonicV2Connector(use_unix_socket_path=False) DB_CONNECTOR.connect(DB_CONNECTOR.APPL_DB) DB_CONNECTOR.connect(DB_CONNECTOR.COUNTERS_DB) +COUNTER_TABLE = CounterTable(DB_CONNECTOR.get_redis_client(DB_CONNECTOR.COUNTERS_DB)) class MACsecAppMeta(object): @@ -28,12 +30,8 @@ def __init__(self, *args) -> None: class MACsecCounters(object): def __init__(self, *args) -> None: - key = ":".join(args) - counters_id = DB_CONNECTOR.get( - DB_CONNECTOR.COUNTERS_DB, self.__class__.get_counter_table_name(), key) - counter_key = "COUNTERS:" + counters_id - self.counters = DB_CONNECTOR.get_all( - DB_CONNECTOR.COUNTERS_DB, counter_key) + _, fvs = COUNTER_TABLE.get(MacsecCounter(), ":".join(args)) + self.counters = dict(fvs) class MACsecSA(MACsecAppMeta, MACsecCounters): @@ -61,10 +59,6 @@ def __init__(self, port_name: str, sci: str, an: str) -> None: def get_appl_table_name(cls) -> str: return "MACSEC_INGRESS_SA_TABLE" - @classmethod - def get_counter_table_name(cls) -> str: - return "COUNTERS_MACSEC_SA_RX_NAME_MAP" - def get_header(self): return "MACsec Ingress SA ({})\n".format(self.an) @@ -77,10 +71,6 @@ def __init__(self, port_name: str, sci: str, an: str) -> None: def get_appl_table_name(cls) -> str: return "MACSEC_EGRESS_SA_TABLE" - @classmethod - def get_counter_table_name(cls) -> str: - return "COUNTERS_MACSEC_SA_TX_NAME_MAP" - def get_header(self): return "MACsec Egress SA ({})\n".format(self.an) From f16eaf538219585feb764925f1ea581a22fdc06d Mon Sep 17 00:00:00 2001 From: Liu Shilong Date: Thu, 30 Jun 2022 17:51:25 +0800 Subject: [PATCH 080/259] [build] Fix libssl version issue. (#11287) The following packages have unmet dependencies: libssl-dev : Depends: libssl1.1 (= 1.1.1n-0+deb11u3) but 1.1.1n-0+deb11u2 is to be installed E: Unable to correct problems, you have held broken packages. --- sonic-slave-bullseye/Dockerfile.j2 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sonic-slave-bullseye/Dockerfile.j2 b/sonic-slave-bullseye/Dockerfile.j2 index f190f0b35e3d..edac99af113e 100644 --- a/sonic-slave-bullseye/Dockerfile.j2 +++ b/sonic-slave-bullseye/Dockerfile.j2 @@ -21,6 +21,7 @@ RUN echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian/ bull echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian-security/ bullseye-security main contrib non-free" >> /etc/apt/sources.list && \ echo "deb-src [arch=amd64] http://debian-archive.trafficmanager.net/debian-security/ bullseye-security main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian bullseye-backports main" >> /etc/apt/sources.list && \ + echo "deb [arch=amd64] http://packages.trafficmanager.net/debian/debian-security bullseye-security main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=amd64] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=amd64] http://packages.trafficmanager.net/debian/debian bullseye-updates main contrib non-free" >> /etc/apt/sources.list @@ -32,6 +33,7 @@ RUN echo "deb [arch=armhf] http://deb.debian.org/debian bullseye main contrib no echo "deb [arch=armhf] http://security.debian.org bullseye-security main contrib non-free" >> /etc/apt/sources.list && \ echo "deb-src [arch=armhf] http://security.debian.org bullseye-security main contrib non-free" >> /etc/apt/sources.list && \ echo 'deb [arch=armhf] http://ftp.debian.org/debian bullseye-backports main' >> /etc/apt/sources.list && \ + echo "deb [arch=armhf] http://packages.trafficmanager.net/debian/debian-security bullseye-security main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=armhf] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=armhf] http://packages.trafficmanager.net/debian/debian bullseye-updates main contrib non-free" >> /etc/apt/sources.list {%- elif CONFIGURED_ARCH == "arm64" %} @@ -41,6 +43,7 @@ RUN echo "deb [arch=arm64] http://deb.debian.org/debian bullseye main contrib no echo "deb-src [arch=arm64] http://deb.debian.org/debian bullseye-updates main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=arm64] http://security.debian.org bullseye-security main contrib non-free" >> /etc/apt/sources.list && \ echo "deb-src [arch=arm64] http://security.debian.org bullseye-security main contrib non-free" >> /etc/apt/sources.list && \ + echo "deb [arch=arm64] http://packages.trafficmanager.net/debian/debian-security bullseye-security main contrib non-free" >> /etc/apt/sources.list && \ echo 'deb [arch=arm64] http://ftp.debian.org/debian bullseye-backports main' >> /etc/apt/sources.list && \ echo "deb [arch=arm64] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=arm64] http://packages.trafficmanager.net/debian/debian bullseye-updates main contrib non-free" >> /etc/apt/sources.list From 0bc054e3080aad27f8bdccf6089f3ebdd11f65f9 Mon Sep 17 00:00:00 2001 From: Rajkumar-Marvell <54936542+rajkumar38@users.noreply.github.com> Date: Fri, 1 Jul 2022 01:51:30 +0530 Subject: [PATCH 081/259] [Marvell] Update armhf sai deb (#11296) 1) Migrate SAI to 1.10.2 2) MRVL-SAI fixes from 202012 branch Signed-off-by: rajkumar38 --- platform/marvell-armhf/sai.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/marvell-armhf/sai.mk b/platform/marvell-armhf/sai.mk index 4ecfdce244a1..5fc14f988aee 100644 --- a/platform/marvell-armhf/sai.mk +++ b/platform/marvell-armhf/sai.mk @@ -1,6 +1,6 @@ # Marvell SAI -export MRVL_SAI_VERSION = 1.9.1-2 +export MRVL_SAI_VERSION = 1.10.2-1 export MRVL_SAI = mrvllibsai_$(MRVL_SAI_VERSION)_$(PLATFORM_ARCH).deb $(MRVL_SAI)_SRC_PATH = $(PLATFORM_PATH)/sai From fd287b7d24a2113fe189751450d1e0ea808cdd19 Mon Sep 17 00:00:00 2001 From: Yakiv Huryk <62013282+Yakiv-Huryk@users.noreply.github.com> Date: Mon, 4 Jul 2022 03:40:04 +0300 Subject: [PATCH 082/259] [ci] add docker-sonic-vs with ASAN build (#11297) The asan-enabled docker image will be used in other CIs that run DVS tests. Why I did it To add a possibility to run DVS tests with ASAN for other CIs (e.g. swss). How I did it Added the 'asan_image' flag to the vs job group. How to verify it Run the CI and check the docker-sonic-vs-asan.gz artifact. --- .azure-pipelines/azure-pipelines-build.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.azure-pipelines/azure-pipelines-build.yml b/.azure-pipelines/azure-pipelines-build.yml index f7eeb8c95d9b..73cf108df668 100644 --- a/.azure-pipelines/azure-pipelines-build.yml +++ b/.azure-pipelines/azure-pipelines-build.yml @@ -30,6 +30,7 @@ jobs: BUILD_OPTIONS: ${{ parameters.buildOptions }} DOCKER_DATA_ROOT_FOR_MULTIARCH: /data/march/docker dbg_image: no + asan_image: no swi_image: no raw_image: no docker_syncd_rpc_image: no @@ -42,6 +43,7 @@ jobs: - name: vs variables: dbg_image: yes + asan_image: yes - name: barefoot variables: @@ -106,6 +108,10 @@ jobs: make $BUILD_OPTIONS INSTALL_DEBUG_TOOLS=y target/sonic-vs.img.gz mv target/sonic-vs.img.gz target/sonic-vs-dbg.img.gz fi + if [ $(asan_image) == yes ]; then + make $BUILD_OPTIONS ENABLE_ASAN=y target/docker-sonic-vs.gz + mv target/docker-sonic-vs.gz target/docker-sonic-vs-asan.gz + fi make $BUILD_OPTIONS target/docker-sonic-vs.gz target/sonic-vs.img.gz target/docker-ptf.gz if [ $(Build.Reason) != 'PullRequest' ];then gzip -kd target/sonic-vs.img.gz From a96a07ec5d5b66cfc3a9d4fadef3310be383c4e8 Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Fri, 1 Jul 2022 21:12:16 +0800 Subject: [PATCH 083/259] [Build] Add the missing debian security mirrors in slave images (#11305) Why I did it The build below was broken, it was caused by one of the required debian mirror missing. https://dev.azure.com/mssonic/build/_build/results?buildId=116719&view=logs&j=88ce9a53-729c-5fa9-7b6e-3d98f2488e3f&t=88f376cf-c35d-5783-0a48-9ad83a873284 libpci-dev : Depends: libudev-dev (>= 196) but it is not going to be installed libsystemd-dev : Depends: libsystemd0 (= 232-25+deb9u14) but 232-25+deb9u13 is to be installed How I did it Add the missing mirrors for buster and stretch. --- sonic-slave-buster/Dockerfile.j2 | 9 ++++++--- sonic-slave-stretch/Dockerfile.j2 | 7 +++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/sonic-slave-buster/Dockerfile.j2 b/sonic-slave-buster/Dockerfile.j2 index 2a9b49b82811..2f3cadf0a4b4 100644 --- a/sonic-slave-buster/Dockerfile.j2 +++ b/sonic-slave-buster/Dockerfile.j2 @@ -19,7 +19,8 @@ RUN echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian/ bust echo "deb-src [arch=amd64] http://debian-archive.trafficmanager.net/debian-security/ buster/updates main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian buster-backports main" >> /etc/apt/sources.list && \ echo "deb [arch=amd64] http://packages.trafficmanager.net/debian/debian buster main contrib non-free" >> /etc/apt/sources.list && \ - echo "deb [arch=amd64] http://packages.trafficmanager.net/debian/debian buster-updates main contrib non-free" >> /etc/apt/sources.list + echo "deb [arch=amd64] http://packages.trafficmanager.net/debian/debian buster-updates main contrib non-free" >> /etc/apt/sources.list && \ + echo "deb [arch=amd64] http://packages.trafficmanager.net/debian/debian-security buster_updates main contrib non-free" >> /etc/apt/sources.list {%- if CONFIGURED_ARCH == "armhf" %} RUN echo "deb [arch=armhf] http://deb.debian.org/debian buster main contrib non-free" > /etc/apt/sources.list && \ @@ -30,7 +31,8 @@ RUN echo "deb [arch=armhf] http://deb.debian.org/debian buster main contrib non- echo "deb-src [arch=armhf] http://security.debian.org buster/updates main contrib non-free" >> /etc/apt/sources.list && \ echo 'deb [arch=armhf] http://ftp.debian.org/debian buster-backports main' >> /etc/apt/sources.list && \ echo "deb [arch=armhf] http://packages.trafficmanager.net/debian/debian buster main contrib non-free" >> /etc/apt/sources.list && \ - echo "deb [arch=armhf] http://packages.trafficmanager.net/debian/debian buster-updates main contrib non-free" >> /etc/apt/sources.list + echo "deb [arch=armhf] http://packages.trafficmanager.net/debian/debian buster-updates main contrib non-free" >> /etc/apt/sources.list && \ + echo "deb [arch=arm64] http://packages.trafficmanager.net/debian/debian-security buster_updates main contrib non-free" >> /etc/apt/sources.list {%- elif CONFIGURED_ARCH == "arm64" %} RUN echo "deb [arch=arm64] http://deb.debian.org/debian buster main contrib non-free" > /etc/apt/sources.list && \ echo "deb-src [arch=arm64] http://deb.debian.org/debian buster main contrib non-free" >> /etc/apt/sources.list && \ @@ -40,7 +42,8 @@ RUN echo "deb [arch=arm64] http://deb.debian.org/debian buster main contrib non- echo "deb-src [arch=arm64] http://security.debian.org buster/updates main contrib non-free" >> /etc/apt/sources.list && \ echo 'deb [arch=arm64] http://ftp.debian.org/debian buster-backports main' >> /etc/apt/sources.list && \ echo "deb [arch=arm64] http://packages.trafficmanager.net/debian/debian buster main contrib non-free" >> /etc/apt/sources.list && \ - echo "deb [arch=arm64] http://packages.trafficmanager.net/debian/debian buster-updates main contrib non-free" >> /etc/apt/sources.list + echo "deb [arch=arm64] http://packages.trafficmanager.net/debian/debian buster-updates main contrib non-free" >> /etc/apt/sources.list && \ + echo "deb [arch=arm64] http://packages.trafficmanager.net/debian/debian-security buster_updates main contrib non-free" >> /etc/apt/sources.list {%- endif %} ## Make apt-get non-interactive diff --git a/sonic-slave-stretch/Dockerfile.j2 b/sonic-slave-stretch/Dockerfile.j2 index ad13ed0c124a..e3815eab2d36 100644 --- a/sonic-slave-stretch/Dockerfile.j2 +++ b/sonic-slave-stretch/Dockerfile.j2 @@ -18,6 +18,7 @@ RUN echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian/ stre echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian stretch-backports main" >> /etc/apt/sources.list && \ echo "deb [arch=amd64] http://packages.trafficmanager.net/debian/debian stretch main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=amd64] http://packages.trafficmanager.net/debian/debian stretch-updates main contrib non-free" >> /etc/apt/sources.list && \ + echo "deb [arch=amd64] http://packages.trafficmanager.net/debian/debian-security stretch_updates main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=amd64] http://packages.microsoft.com/debian/9/prod stretch main" >> /etc/apt/sources.list {%- if CONFIGURED_ARCH == "armhf" %} @@ -29,7 +30,8 @@ RUN echo "deb [arch=armhf] http://deb.debian.org/debian stretch main contrib non echo "deb-src [arch=armhf] http://security.debian.org stretch/updates main contrib non-free" >> /etc/apt/sources.list && \ echo 'deb [arch=armhf] http://ftp.debian.org/debian stretch-backports main' >> /etc/apt/sources.list && \ echo "deb [arch=armhf] http://packages.trafficmanager.net/debian/debian stretch main contrib non-free" >> /etc/apt/sources.list && \ - echo "deb [arch=armhf] http://packages.trafficmanager.net/debian/debian stretch-updates main contrib non-free" >> /etc/apt/sources.list + echo "deb [arch=armhf] http://packages.trafficmanager.net/debian/debian stretch-updates main contrib non-free" >> /etc/apt/sources.list && \ + echo "deb [arch=armhf] http://packages.trafficmanager.net/debian/debian-security stretch_updates main contrib non-free" >> /etc/apt/sources.list {%- elif CONFIGURED_ARCH == "arm64" %} RUN echo "deb [arch=arm64] http://deb.debian.org/debian stretch main contrib non-free" > /etc/apt/sources.list && \ echo "deb-src [arch=arm64] http://deb.debian.org/debian stretch main contrib non-free" >> /etc/apt/sources.list && \ @@ -39,7 +41,8 @@ RUN echo "deb [arch=arm64] http://deb.debian.org/debian stretch main contrib non echo "deb-src [arch=arm64] http://security.debian.org stretch/updates main contrib non-free" >> /etc/apt/sources.list && \ echo 'deb [arch=arm64] http://ftp.debian.org/debian stretch-backports main' >> /etc/apt/sources.list && \ echo "deb [arch=arm64] http://packages.trafficmanager.net/debian/debian stretch main contrib non-free" >> /etc/apt/sources.list && \ - echo "deb [arch=arm64] http://packages.trafficmanager.net/debian/debian stretch-updates main contrib non-free" >> /etc/apt/sources.list + echo "deb [arch=arm64] http://packages.trafficmanager.net/debian/debian stretch-updates main contrib non-free" >> /etc/apt/sources.list && \ + echo "deb [arch=arm64] http://packages.trafficmanager.net/debian/debian-security stretch_updates main contrib non-free" >> /etc/apt/sources.list {%- endif %} ## Make apt-get non-interactive From 4657d8138e39b6677752778ed9dd3e10e53ed374 Mon Sep 17 00:00:00 2001 From: judyjoseph <53951155+judyjoseph@users.noreply.github.com> Date: Fri, 1 Jul 2022 11:00:30 -0700 Subject: [PATCH 084/259] Revert "Update include_macsec flag if type is SpineRouter (#11141)" (#11306) This reverts commit c9f36957db687d231e0ccd2b648fa3a4c4ed457b. --- files/build_templates/init_cfg.json.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/build_templates/init_cfg.json.j2 b/files/build_templates/init_cfg.json.j2 index 0ea859e6b6c3..a197c22a9020 100644 --- a/files/build_templates/init_cfg.json.j2 +++ b/files/build_templates/init_cfg.json.j2 @@ -46,7 +46,7 @@ {%- if include_p4rt == "y" %}{% do features.append(("p4rt", "enabled", false, "enabled")) %}{% endif %} {%- if include_restapi == "y" %}{% do features.append(("restapi", "enabled", false, "enabled")) %}{% endif %} {%- if include_sflow == "y" %}{% do features.append(("sflow", "disabled", false, "enabled")) %}{% endif %} -{%- if include_macsec == "y" %}{% do features.append(("macsec", "{% if 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'SpineRouter' %}enabled{% else %}disabled{% endif %}", false, "enabled")) %}{% endif %} +{%- if include_macsec == "y" %}{% do features.append(("macsec", "disabled", false, "enabled")) %}{% endif %} {%- if include_system_telemetry == "y" %}{% do features.append(("telemetry", "enabled", true, "enabled")) %}{% endif %} "FEATURE": { {# has_timer field if set, will start the feature systemd .timer unit instead of .service unit #} From 187f351b23e79959f4c3e64a2ff219b4668eac58 Mon Sep 17 00:00:00 2001 From: Sudharsan Dhamal Gopalarathnam Date: Fri, 1 Jul 2022 17:29:07 -0700 Subject: [PATCH 085/259] [Mellanox]Check dmi file permission before access (#11309) Signed-off-by: Sudharsan Dhamal Gopalarathnam sudharsand@nvidia.com Why I did it During the system boot up when 'show platform status' or 'show version' command is executed before STATE_DB CHASSIS_INFO table is populated, the show will try to fallback to use the platform API. The DMI file in mellanox platforms require root permission for access. So if the show commands are executed as admin or any other user, the following error log will appear in the syslog Jun 28 17:21:25.612123 sonic ERR show: Fail to decode DMI /sys/firmware/dmi/entries/2-0/raw due to PermissionError(13, 'Permission denied') How I did it Check the file permission before accessing it. How to verify it Added UT to verify. Manually verified if the error log is not thrown. --- .../mlnx-platform-api/sonic_platform/chassis.py | 3 +++ .../mlnx-platform-api/tests/test_chassis.py | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py index f68d1033f019..43539751c1d7 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py @@ -632,6 +632,9 @@ def _parse_dmi(self, filename): """ result = {} try: + if not os.access(filename, os.R_OK): + return result + with open(filename, "rb") as fileobj: data = fileobj.read() diff --git a/platform/mellanox/mlnx-platform-api/tests/test_chassis.py b/platform/mellanox/mlnx-platform-api/tests/test_chassis.py index a7eff5b08625..4a0f5ed85ee2 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_chassis.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_chassis.py @@ -267,3 +267,16 @@ def test_module(self): module_list = chassis.get_all_modules() assert len(module_list) == 3 assert chassis.module_initialized_count == 3 + + def test_revision_permission(self): + old_dmi_file = sonic_platform.chassis.DMI_FILE + #Override the dmi file + sonic_platform.chassis.DMI_FILE = "/tmp/dmi_file" + new_dmi_file = sonic_platform.chassis.DMI_FILE + os.system("touch " + new_dmi_file) + os.system("chmod -r " + new_dmi_file) + chassis = Chassis() + rev = chassis.get_revision() + sonic_platform.chassis.DMI_FILE = old_dmi_file + os.system("rm -f " + new_dmi_file) + assert rev == "N/A" From 7d06c7f62197b3e19fc879913a242fc606084a57 Mon Sep 17 00:00:00 2001 From: Longxiang Lyu <35479537+lolyu@users.noreply.github.com> Date: Wed, 6 Jul 2022 06:50:05 +0800 Subject: [PATCH 086/259] [minigraph][dualtor] Support parsing `soc_ip` out of dpg (#11207) Why I did it To further support parse out soc_ipv4 and soc_ipv6 out of Dpg: LoopbackInterface HostIP Loopback0 10.10.10.2/32 10.10.10.2/32 LoopbackInterface HostIP1 Loopback0 fe80::0002/128 fe80::0002/128 LoopbackInterface SoCHostIP0 server2SOC 10.10.10.3/32 10.10.10.3/32 LoopbackInterface SoCHostIP1 server2SOC fe80::0003/128 fe80::0003/128 Signed-off-by: Longxiang Lyu lolv@microsoft.com How I did it For servers loopback definitions in Dpg, if they contain LoopbackIPInterface with tags AttachTo, which has value of format like SOC, the address will be regarded as a SoC IP, and sonic-cfggen now will treat the port connected to the server as active-active if the redundancy_type is either Libra or Mixed. How to verify it Pass the unittest. Signed-off-by: Longxiang Lyu --- src/sonic-config-engine/minigraph.py | 125 ++++++++++++------ .../tests/simple-sample-graph-case.xml | 91 ++++++++----- .../tests/test_minigraph_case.py | 9 +- 3 files changed, 143 insertions(+), 82 deletions(-) diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index 2bcef2232aef..b79ffff039c6 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -185,6 +185,7 @@ def formulate_fine_grained_ecmp(version, dpg_ecmp_content, port_device_map, port fine_grained_content = {"FG_NHG_MEMBER": FG_NHG_MEMBER, "FG_NHG": FG_NHG, "NEIGH": NEIGH} return fine_grained_content + def parse_png(png, hname, dpg_ecmp_content = None): neighbors = {} devices = {} @@ -400,9 +401,9 @@ def parse_asic_png(png, asic_name, hostname): device_data['lo_addr_v6']= lo_prefix_v6 devices[name] = device_data - return (neighbors, devices, port_speeds) + def parse_loopback_intf(child): lointfs = child.find(str(QName(ns, "LoopbackIPInterfaces"))) lo_intfs = {} @@ -412,6 +413,7 @@ def parse_loopback_intf(child): lo_intfs[(intfname, ipprefix)] = {} return lo_intfs + def parse_dpg(dpg, hname): aclintfs = None mgmtintfs = None @@ -455,7 +457,7 @@ def parse_dpg(dpg, hname): ipprefix = ipintf.find(str(QName(ns, "Prefix"))).text intfs[(intfname, ipprefix)] = {} ip_intfs_map[ipprefix] = intfalias - lo_intfs = parse_loopback_intf(child) + lo_intfs = parse_loopback_intf(child) subintfs = child.find(str(QName(ns, "SubInterfaces"))) if subintfs is not None: @@ -757,7 +759,6 @@ def parse_dpg(dpg, hname): return None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None - def parse_host_loopback(dpg, hname): for child in dpg: hostname = child.find(str(QName(ns, "Hostname"))) @@ -766,6 +767,7 @@ def parse_host_loopback(dpg, hname): lo_intfs = parse_loopback_intf(child) return lo_intfs + def parse_cpg(cpg, hname, local_devices=[]): bgp_sessions = {} bgp_internal_sessions = {} @@ -891,6 +893,7 @@ def parse_meta(meta, hname): max_cores = None kube_data = {} macsec_profile = {} + redundancy_type = None device_metas = meta.find(str(QName(ns, "Devices"))) for device in device_metas.findall(str(QName(ns1, "DeviceMetadata"))): if device.find(str(QName(ns1, "Name"))).text.lower() == hname.lower(): @@ -933,7 +936,9 @@ def parse_meta(meta, hname): kube_data["ip"] = value elif name == 'MacSecProfile': macsec_profile = parse_macsec_profile(value) - return syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile + elif name == "RedundancyType": + redundancy_type = value + return syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile, redundancy_type def parse_system_defaults(meta): @@ -1313,6 +1318,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw static_routes = {} system_defaults = {} macsec_profile = {} + redundancy_type = None hwsku_qn = QName(ns, "HwSku") hostname_qn = QName(ns, "Hostname") @@ -1343,7 +1349,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw elif child.tag == str(QName(ns, "UngDec")): (u_neighbors, u_devices, _, _, _, _, _, _) = parse_png(child, hostname, None) elif child.tag == str(QName(ns, "MetadataDeclaration")): - (syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile) = parse_meta(child, hostname) + (syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile, redundancy_type) = parse_meta(child, hostname) elif child.tag == str(QName(ns, "LinkMetadataDeclaration")): linkmetas = parse_linkmeta(child, hostname) elif child.tag == str(QName(ns, "DeviceInfos")): @@ -1567,11 +1573,6 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw if macsec_enabled and 'PrimaryKey' in macsec_profile: port['macsec'] = macsec_profile['PrimaryKey'] - # If connected to a smart cable, get the connection position - for port_name, port in ports.items(): - if port_name in mux_cable_ports: - port['mux_cable'] = "true" - # set port description if parsed from deviceinfo for port_name in port_descriptions: # ignore port not in port_config.ini @@ -1713,7 +1714,13 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw # Add src_ip and qos remapping config into TUNNEL table if tunnel_qos_remap is enabled results['TUNNEL'] = get_tunnel_entries(tunnel_intfs, tunnel_intfs_qos_remap_config, lo_intfs, system_defaults.get('tunnel_qos_remap', {}), mux_tunnel_name, peer_switch_ip) - results['MUX_CABLE'] = get_mux_cable_entries(mux_cable_ports, neighbors, devices) + active_active_ports = get_ports_in_active_active(root, devices, neighbors) + results['MUX_CABLE'] = get_mux_cable_entries(ports, mux_cable_ports, active_active_ports, neighbors, devices, redundancy_type) + + # If connected to a smart cable, get the connection position + for port_name, port in results['PORT'].items(): + if port_name in results['MUX_CABLE']: + port['mux_cable'] = "true" if static_routes: results['STATIC_ROUTE'] = static_routes @@ -1826,46 +1833,76 @@ def get_tunnel_entries(tunnel_intfs, tunnel_intfs_qos_remap_config, lo_intfs, tu return tunnels -def get_mux_cable_entries(mux_cable_ports, neighbors, devices): + +def get_ports_in_active_active(root, devices, neighbors): + """Parse out ports in active-active cable type.""" + servers = {hostname.lower(): device_data for hostname, device_data in devices.items() if device_data["type"] == "Server"} + ports_in_active_active = {} + dpg_section = root.find(str(QName(ns, "DpgDec"))) + neighbor_to_port_mapping = {neighbor["name"].lower(): port for port, neighbor in neighbors.items()} + if dpg_section is not None: + for child in dpg_section: + hostname = child.find(str(QName(ns, "Hostname"))) + if hostname is None: + continue + hostname = hostname.text.lower() + if hostname not in servers: + continue + lo_intfs = parse_loopback_intf(child) + soc_intfs = {} + for intfname, ipprefix in lo_intfs.keys(): + intfname_lower = intfname.lower() + if hostname + "soc" == intfname_lower: + ipprefix = str(ipaddress.ip_network(UNICODE_TYPE(ipprefix.split("/")[0]))) + if "." in ipprefix: + soc_intfs["soc_ipv4"] = ipprefix + elif ":" in ipprefix: + soc_intfs["soc_ipv6"] = ipprefix + if hostname in neighbor_to_port_mapping and soc_intfs: + ports_in_active_active[neighbor_to_port_mapping[hostname]] = soc_intfs + return ports_in_active_active + + +def get_mux_cable_entries(ports, mux_cable_ports, active_active_ports, neighbors, devices, redundancy_type): mux_cable_table = {} + if redundancy_type: + redundancy_type = redundancy_type.lower() + + for port in ports: + is_active_active = redundancy_type in ("libra", "mixed") and port in active_active_ports + is_active_standby = port in mux_cable_ports + if is_active_active and is_active_standby: + print("Warning: skip %s as it is defined as active-standby and actie-active" % port, file=sys.stderr) + continue + if not (is_active_active or is_active_standby): + continue - for intf, cable_name in mux_cable_ports.items(): - if intf in neighbors: - entry = {} - neighbor = neighbors[intf]['name'] - entry['state'] = 'auto' - - if devices[neighbor]['lo_addr'] is not None: - # Always force a /32 prefix for server IPv4 loopbacks - server_ipv4_lo_addr = devices[neighbor]['lo_addr'].split("/")[0] - server_ipv4_lo_prefix = ipaddress.ip_network(UNICODE_TYPE(server_ipv4_lo_addr)) - entry['server_ipv4'] = str(server_ipv4_lo_prefix) - - if 'lo_addr_v6' in devices[neighbor] and devices[neighbor]['lo_addr_v6'] is not None: - server_ipv6_lo_addr = devices[neighbor]['lo_addr_v6'].split('/')[0] - server_ipv6_lo_prefix = ipaddress.ip_network(UNICODE_TYPE(server_ipv6_lo_addr)) - entry['server_ipv6'] = str(server_ipv6_lo_prefix) - mux_cable_table[intf] = entry - else: - print("Warning: no server IPv4 loopback found for {}, skipping mux cable table entry".format(neighbor), file=sys.stderr) + entry = {} + neighbor = neighbors[port]['name'] + entry['state'] = 'auto' - if cable_name in devices: - cable_type = devices[cable_name].get('subtype') - if cable_type is None: - continue - if cable_type in dualtor_cable_types: - mux_cable_table[intf]['cable_type'] = cable_type - if cable_type == 'active-active': - soc_ipv4 = devices[cable_name]['lo_addr'].split('/')[0] - soc_ipv4_prefix = ipaddress.ip_network(UNICODE_TYPE(soc_ipv4)) - mux_cable_table[intf]['soc_ipv4'] = str(soc_ipv4_prefix) - else: - print("Warning: skip parsing device %s for mux cable entry, cable type %s not supported" % (cable_name, cable_type), file=sys.stderr) + if devices[neighbor]['lo_addr'] is not None: + # Always force a /32 prefix for server IPv4 loopbacks + server_ipv4_lo_addr = devices[neighbor]['lo_addr'].split("/")[0] + server_ipv4_lo_prefix = ipaddress.ip_network(UNICODE_TYPE(server_ipv4_lo_addr)) + entry['server_ipv4'] = str(server_ipv4_lo_prefix) + + if 'lo_addr_v6' in devices[neighbor] and devices[neighbor]['lo_addr_v6'] is not None: + server_ipv6_lo_addr = devices[neighbor]['lo_addr_v6'].split('/')[0] + server_ipv6_lo_prefix = ipaddress.ip_network(UNICODE_TYPE(server_ipv6_lo_addr)) + entry['server_ipv6'] = str(server_ipv6_lo_prefix) + + if is_active_active: + entry['cable_type'] = 'active-active' + entry.update(active_active_ports[port]) + + mux_cable_table[port] = entry else: - print("Warning: skip parsing device %s for mux cable entry, device definition not found" % cable_name, file=sys.stderr) + print("Warning: no server IPv4 loopback found for {}, skipping mux cable table entry".format(neighbor), file=sys.stderr) return mux_cable_table + def parse_device_desc_xml(filename): root = ET.parse(filename).getroot() (lo_prefix, lo_prefix_v6, mgmt_prefix, mgmt_prefix_v6, hostname, hwsku, d_type, _, _, _) = parse_device(root) 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 7bbef28aaa38..4165647a9aa3 100644 --- a/src/sonic-config-engine/tests/simple-sample-graph-case.xml +++ b/src/sonic-config-engine/tests/simple-sample-graph-case.xml @@ -198,6 +198,62 @@ + + + + + LoopbackInterface + HostIP + Loopback0 + + 10.10.10.2/32 + + 10.10.10.2/32 + + + LoopbackInterface + HostIP1 + Loopback0 + + fe80::0002/128 + + fe80::0002/128 + + + LoopbackInterface + SoCHostIP0 + server2SOC + + 10.10.10.3/32 + + 10.10.10.3/32 + + + LoopbackInterface + SoCHostIP1 + server2SOC + + fe80::0003/128 + + fe80::0003/128 + + + + + + + + server2 + + + + + + + + + + @@ -262,17 +318,6 @@ L true - - LogicalLink - 10000 - false - switch-t0 - fortyGigE0/8 - true - server2-SC - U - true - LogicalLink 0 @@ -349,25 +394,6 @@ server1 server-sku - - SmartCable - active-active -
- 10.10.10.3/32 -
- - ::/0 - - - 0.0.0.0/0 - - - ::/0 - - - server2-SC - smartcable-sku -
Server
@@ -506,6 +532,11 @@ Storage + + RedundancyType + + Mixed + diff --git a/src/sonic-config-engine/tests/test_minigraph_case.py b/src/sonic-config-engine/tests/test_minigraph_case.py index 16ad019032f2..bfee76c7546e 100644 --- a/src/sonic-config-engine/tests/test_minigraph_case.py +++ b/src/sonic-config-engine/tests/test_minigraph_case.py @@ -236,14 +236,6 @@ def test_minigraph_neighbor_metadata(self): 'lo_addr_v6': '::/0', 'mgmt_addr': '0.0.0.0/0', 'type': 'SmartCable' - }, - 'server2-SC': { - 'hwsku': 'smartcable-sku', - 'lo_addr': '10.10.10.3/32', - 'lo_addr_v6': '::/0', - 'mgmt_addr': '0.0.0.0/0', - 'type': 'SmartCable', - 'subtype': 'active-active' } } output = self.run_script(argument) @@ -421,6 +413,7 @@ def test_minigraph_mux_cable_table(self): 'server_ipv4': '10.10.10.2/32', 'server_ipv6': 'fe80::2/128', 'soc_ipv4': '10.10.10.3/32', + 'soc_ipv6': 'fe80::3/128', 'cable_type': 'active-active' } } From 296b21ec402207fadcbd73fc90c953096f068bd5 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Wed, 6 Jul 2022 00:06:45 +0000 Subject: [PATCH 087/259] Revert "[Mellanox]Check dmi file permission before access (#11309)" This reverts commit 187f351b23e79959f4c3e64a2ff219b4668eac58. --- .../mlnx-platform-api/sonic_platform/chassis.py | 3 --- .../mlnx-platform-api/tests/test_chassis.py | 13 ------------- 2 files changed, 16 deletions(-) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py index 43539751c1d7..f68d1033f019 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py @@ -632,9 +632,6 @@ def _parse_dmi(self, filename): """ result = {} try: - if not os.access(filename, os.R_OK): - return result - with open(filename, "rb") as fileobj: data = fileobj.read() diff --git a/platform/mellanox/mlnx-platform-api/tests/test_chassis.py b/platform/mellanox/mlnx-platform-api/tests/test_chassis.py index 4a0f5ed85ee2..a7eff5b08625 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_chassis.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_chassis.py @@ -267,16 +267,3 @@ def test_module(self): module_list = chassis.get_all_modules() assert len(module_list) == 3 assert chassis.module_initialized_count == 3 - - def test_revision_permission(self): - old_dmi_file = sonic_platform.chassis.DMI_FILE - #Override the dmi file - sonic_platform.chassis.DMI_FILE = "/tmp/dmi_file" - new_dmi_file = sonic_platform.chassis.DMI_FILE - os.system("touch " + new_dmi_file) - os.system("chmod -r " + new_dmi_file) - chassis = Chassis() - rev = chassis.get_revision() - sonic_platform.chassis.DMI_FILE = old_dmi_file - os.system("rm -f " + new_dmi_file) - assert rev == "N/A" From f99d27266943eecdfa2611b06c2f14b4df84e462 Mon Sep 17 00:00:00 2001 From: Alexander Allen Date: Wed, 29 Jun 2022 00:15:05 -0400 Subject: [PATCH 088/259] [Mellanox] Add arch folder to SDK binary location (#11278) - Why I did it This is for the eventual support of multiple architectures for the mellanox platform. - How I did it Change the location of the binaries in Switch-SDK-drivers so that the path specifies the target architecture in addition to the target distribution that the debians are built for. This is the most straightforward way to separate binaries built against different architectures and selectively target them for installation in the mellanox SONiC image. - How to verify it Build SONiC for mellanox and verify it compiles successfully. --- platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers | 2 +- platform/mellanox/sdk.mk | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers b/platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers index 9f94bdfc2c7e..e9fa9a843702 160000 --- a/platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers +++ b/platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers @@ -1 +1 @@ -Subproject commit 9f94bdfc2c7e3670b5b959138f9d61d40e7cc1ea +Subproject commit e9fa9a843702aa55b13c8eb01c7a1f188e4a16a9 diff --git a/platform/mellanox/sdk.mk b/platform/mellanox/sdk.mk index 0ecc6d6bf041..2412cf0ca705 100644 --- a/platform/mellanox/sdk.mk +++ b/platform/mellanox/sdk.mk @@ -15,7 +15,7 @@ # limitations under the License. # MLNX_SDK_BASE_PATH = $(PLATFORM_PATH)/sdk-src/sx-kernel/Switch-SDK-drivers/bin/ -MLNX_SDK_PKG_BASE_PATH = $(MLNX_SDK_BASE_PATH)/$(BLDENV)/ +MLNX_SDK_PKG_BASE_PATH = $(MLNX_SDK_BASE_PATH)/$(BLDENV)/$(CONFIGURED_ARCH)/ MLNX_SDK_VERSION = 4.5.2262 MLNX_SDK_ISSU_VERSION = 101 From 1d4cba69a4aa03354fb8015bf7545fc44ad5e969 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Wed, 6 Jul 2022 10:59:08 +0800 Subject: [PATCH 089/259] [ci/build]: Upgrade SONiC package versions (#11334) Upgrade SONiC Versions --- .../build-sonic-slave-bullseye/versions-git | 4 +-- files/build/versions/default/versions-git | 4 +-- .../versions-deb-buster | 2 +- .../dockers/docker-ptf/versions-deb-buster | 23 ++++++------ .../dockers/docker-snmp/versions-deb-buster | 2 +- .../docker-sonic-vs/versions-deb-buster | 23 ++++++------ .../docker-syncd-bfn/versions-deb-buster | 2 +- .../versions-deb-buster | 2 +- .../docker-syncd-brcm-rpc/versions-deb-buster | 2 +- .../versions-deb-buster | 2 +- .../versions-deb-bullseye | 23 ++++++------ .../sonic-slave-buster/versions-deb-buster | 35 ++++++++++--------- .../versions-deb-buster-armhf | 2 +- .../versions/host-image/versions-deb-bullseye | 21 +++++------ 14 files changed, 76 insertions(+), 71 deletions(-) diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-git b/files/build/versions/build/build-sonic-slave-bullseye/versions-git index 52b2f24b51b7..e9894c1803a3 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-git +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-git @@ -1,8 +1,8 @@ https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b -https://github.com/flashrom/flashrom.git==1bb5ddde6048b9819d18082f71640c007c911f2a -https://github.com/FreeRADIUS/freeradius-server.git==7e9ebe1b64e42b4c3cbedda9c3640af341f6bee9 +https://github.com/flashrom/flashrom.git==1cea47eac2f1225a42467a91b239ea09fe3dd3e7 +https://github.com/FreeRADIUS/freeradius-server.git==a6cbdd1003b3253bf22dde6cbefb6dd00d5ce105 https://github.com/FreeRADIUS/pam_radius.git==5e67868520e90a489626928f28c0befa531bf7d2 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 diff --git a/files/build/versions/default/versions-git b/files/build/versions/default/versions-git index d7ac13cef504..c803b5c15fc7 100644 --- a/files/build/versions/default/versions-git +++ b/files/build/versions/default/versions-git @@ -4,8 +4,8 @@ https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b https://github.com/dyninc/OpenBFDD.git==e35f43ad8d2b3f084e96a84c392528a90d05a287 -https://github.com/flashrom/flashrom.git==1bb5ddde6048b9819d18082f71640c007c911f2a -https://github.com/FreeRADIUS/freeradius-server.git==7e9ebe1b64e42b4c3cbedda9c3640af341f6bee9 +https://github.com/flashrom/flashrom.git==1cea47eac2f1225a42467a91b239ea09fe3dd3e7 +https://github.com/FreeRADIUS/freeradius-server.git==a6cbdd1003b3253bf22dde6cbefb6dd00d5ce105 https://github.com/FreeRADIUS/pam_radius.git==5e67868520e90a489626928f28c0befa531bf7d2 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 diff --git a/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster b/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster index 506f92bc40fc..f4ec90a97161 100644 --- a/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster +++ b/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster @@ -44,7 +44,7 @@ libtsan0==8.3.0-6 libubsan1==8.3.0-6 libyang==1.0.73 libyang-cpp==1.0.73 -linux-libc-dev==4.19.235-1 +linux-libc-dev==4.19.249-2 make==4.2.1-1.2 patch==2.7.6-3+deb10u1 python3-dev==3.7.3-1 diff --git a/files/build/versions/dockers/docker-ptf/versions-deb-buster b/files/build/versions/dockers/docker-ptf/versions-deb-buster index 1d0f3cf493ab..0253aa163587 100644 --- a/files/build/versions/dockers/docker-ptf/versions-deb-buster +++ b/files/build/versions/dockers/docker-ptf/versions-deb-buster @@ -19,7 +19,7 @@ cron==3.0pl1-134+deb10u1 curl==7.64.0-4+deb10u2 dbus==1.12.20-0+deb10u1 dh-python==3.20190308 -dirmngr==2.2.12-1+deb10u1 +dirmngr==2.2.12-1+deb10u2 dmsetup==2:1.02.155-3 dpkg-dev==1.19.8 ethtool==1:4.19-1 @@ -43,15 +43,16 @@ gdb==8.2.1-2+b3 gir1.2-glib-2.0==1.58.3-2 git==1:2.20.1-2+deb10u3 git-man==1:2.20.1-2+deb10u3 -gnupg==2.2.12-1+deb10u1 -gnupg-l10n==2.2.12-1+deb10u1 -gnupg-utils==2.2.12-1+deb10u1 -gpg==2.2.12-1+deb10u1 -gpg-agent==2.2.12-1+deb10u1 -gpg-wks-client==2.2.12-1+deb10u1 -gpg-wks-server==2.2.12-1+deb10u1 -gpgconf==2.2.12-1+deb10u1 -gpgsm==2.2.12-1+deb10u1 +gnupg==2.2.12-1+deb10u2 +gnupg-l10n==2.2.12-1+deb10u2 +gnupg-utils==2.2.12-1+deb10u2 +gpg==2.2.12-1+deb10u2 +gpg-agent==2.2.12-1+deb10u2 +gpg-wks-client==2.2.12-1+deb10u2 +gpg-wks-server==2.2.12-1+deb10u2 +gpgconf==2.2.12-1+deb10u2 +gpgsm==2.2.12-1+deb10u2 +gpgv==2.2.12-1+deb10u2 graphviz==2.40.1-6+deb10u1 hping3==3.a2.ds2-7 ipython3==5.8.0-1+deb10u1 @@ -357,7 +358,7 @@ libxxf86dga1==2:1.1.4-1+b3 libxxf86vm1==1:1.1.4-1+b2 libxxhash0==0.6.5-2 libzzip-0-13==0.13.62-3.2+deb10u1 -linux-libc-dev==4.19.235-1 +linux-libc-dev==4.19.249-2 lmodern==2.004.5-6 logrotate==3.14.0-4 lsb-base==10.2019051400 diff --git a/files/build/versions/dockers/docker-snmp/versions-deb-buster b/files/build/versions/dockers/docker-snmp/versions-deb-buster index 38f6e3e081ed..8c8c76bd61e9 100644 --- a/files/build/versions/dockers/docker-snmp/versions-deb-buster +++ b/files/build/versions/dockers/docker-snmp/versions-deb-buster @@ -49,7 +49,7 @@ libswsscommon-dbg==1.0.0 libtsan0==8.3.0-6 libubsan1==8.3.0-6 libunwind8==1.2.1-10~deb10u1 -linux-libc-dev==4.19.235-1 +linux-libc-dev==4.19.249-2 locales==2.28-10+deb10u1 make==4.2.1-1.2 mariadb-common==1:10.3.34-0+deb10u1 diff --git a/files/build/versions/dockers/docker-sonic-vs/versions-deb-buster b/files/build/versions/dockers/docker-sonic-vs/versions-deb-buster index 4430d3bcf182..5d070af02fd1 100644 --- a/files/build/versions/dockers/docker-sonic-vs/versions-deb-buster +++ b/files/build/versions/dockers/docker-sonic-vs/versions-deb-buster @@ -10,7 +10,7 @@ cpp==4:8.3.0-1 cpp-8==8.3.0-6 cron==3.0pl1-134+deb10u1 dh-python==3.20190308 -dirmngr==2.2.12-1+deb10u1 +dirmngr==2.2.12-1+deb10u2 dmsetup==2:1.02.155-3 ethtool==1:4.19-1 fontconfig-config==2.13.1-2 @@ -23,16 +23,17 @@ gcc-8==8.3.0-6 gettext-base==0.19.8.1-9 gir1.2-freedesktop==1.58.3-2 gir1.2-glib-2.0==1.58.3-2 -gnupg==2.2.12-1+deb10u1 -gnupg-l10n==2.2.12-1+deb10u1 -gnupg-utils==2.2.12-1+deb10u1 +gnupg==2.2.12-1+deb10u2 +gnupg-l10n==2.2.12-1+deb10u2 +gnupg-utils==2.2.12-1+deb10u2 gobject-introspection==1.58.3-2 -gpg==2.2.12-1+deb10u1 -gpg-agent==2.2.12-1+deb10u1 -gpg-wks-client==2.2.12-1+deb10u1 -gpg-wks-server==2.2.12-1+deb10u1 -gpgconf==2.2.12-1+deb10u1 -gpgsm==2.2.12-1+deb10u1 +gpg==2.2.12-1+deb10u2 +gpg-agent==2.2.12-1+deb10u2 +gpg-wks-client==2.2.12-1+deb10u2 +gpg-wks-server==2.2.12-1+deb10u2 +gpgconf==2.2.12-1+deb10u2 +gpgsm==2.2.12-1+deb10u2 +gpgv==2.2.12-1+deb10u2 grub-common==2.02+dfsg1-20+deb10u4 grub2-common==2.02+dfsg1-20+deb10u4 ifupdown==0.8.35 @@ -162,7 +163,7 @@ libxext6==2:1.3.3-1+b2 libxrender-dev==1:0.9.10-1 libxrender1==1:0.9.10-1 libyang2==2.0.112-6 -linux-libc-dev==4.19.235-1 +linux-libc-dev==4.19.249-2 logrotate==3.14.0-4 lsof==4.91+dfsg-1 make==4.2.1-1.2 diff --git a/files/build/versions/dockers/docker-syncd-bfn/versions-deb-buster b/files/build/versions/dockers/docker-syncd-bfn/versions-deb-buster index 43e096cc1b8d..74ac71fc7eda 100644 --- a/files/build/versions/dockers/docker-syncd-bfn/versions-deb-buster +++ b/files/build/versions/dockers/docker-syncd-bfn/versions-deb-buster @@ -21,5 +21,5 @@ libunwind8==1.2.1-10~deb10u1 libusb-1.0-0==2:1.0.22-2 libusb-1.0-0-dev==2:1.0.22-2 libxml2==2.9.4+dfsg1-7+deb10u4 -linux-libc-dev==4.19.235-1 +linux-libc-dev==4.19.249-2 syncd==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-deb-buster index 8604a779a04b..099d8c888783 100644 --- a/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-deb-buster +++ b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-deb-buster @@ -54,7 +54,7 @@ libtsan0==8.3.0-6 libubsan1==8.3.0-6 libuv1==1.24.1-1+deb10u1 libxml2==2.9.4+dfsg1-7+deb10u4 -linux-libc-dev==4.19.235-1 +linux-libc-dev==4.19.249-2 make==4.2.1-1.2 patch==2.7.6-3+deb10u1 python==2.7.16-1 diff --git a/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-deb-buster index 8604a779a04b..099d8c888783 100644 --- a/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-deb-buster +++ b/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-deb-buster @@ -54,7 +54,7 @@ libtsan0==8.3.0-6 libubsan1==8.3.0-6 libuv1==1.24.1-1+deb10u1 libxml2==2.9.4+dfsg1-7+deb10u4 -linux-libc-dev==4.19.235-1 +linux-libc-dev==4.19.249-2 make==4.2.1-1.2 patch==2.7.6-3+deb10u1 python==2.7.16-1 diff --git a/files/build/versions/dockers/docker-syncd-centec-rpc/versions-deb-buster b/files/build/versions/dockers/docker-syncd-centec-rpc/versions-deb-buster index 0da3944f8a17..c5558d4fae97 100644 --- a/files/build/versions/dockers/docker-syncd-centec-rpc/versions-deb-buster +++ b/files/build/versions/dockers/docker-syncd-centec-rpc/versions-deb-buster @@ -56,7 +56,7 @@ libtsan0==8.3.0-6 libubsan1==8.3.0-6 libuv1==1.24.1-1+deb10u1 libxml2==2.9.4+dfsg1-7+deb10u4 -linux-libc-dev==4.19.235-1 +linux-libc-dev==4.19.249-2 make==4.2.1-1.2 patch==2.7.6-3+deb10u1 python==2.7.16-1 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye index 2d611ae372b4..a99a72c9c5c9 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye @@ -82,7 +82,7 @@ dh-runit==2.10.3 dh-strip-nondeterminism==1.12.0-1 dictionaries-common==1.28.4 diffstat==1.64-1 -dirmngr==2.2.27-2+deb11u1 +dirmngr==2.2.27-2+deb11u2 distro-info-data==0.51+deb11u1 dkms==2.8.4-3 dmeventd==2:1.02.175-2.1 @@ -159,22 +159,23 @@ git-man==1:2.30.2-1 glib-networking==2.66.0-2 glib-networking-common==2.66.0-2 glib-networking-services==2.66.0-2 -gnupg==2.2.27-2+deb11u1 -gnupg-l10n==2.2.27-2+deb11u1 -gnupg-utils==2.2.27-2+deb11u1 -gnupg2==2.2.27-2+deb11u1 +gnupg==2.2.27-2+deb11u2 +gnupg-l10n==2.2.27-2+deb11u2 +gnupg-utils==2.2.27-2+deb11u2 +gnupg2==2.2.27-2+deb11u2 gobject-introspection==1.66.1-1+b1 golang-1.15==1.15.15-1~deb11u4 golang-1.15-doc==1.15.15-1~deb11u4 golang-1.15-go==1.15.15-1~deb11u4+fips golang-1.15-src==1.15.15-1~deb11u4+fips googletest==1.10.0.20201025-1.1 -gpg==2.2.27-2+deb11u1 -gpg-agent==2.2.27-2+deb11u1 -gpg-wks-client==2.2.27-2+deb11u1 -gpg-wks-server==2.2.27-2+deb11u1 -gpgconf==2.2.27-2+deb11u1 -gpgsm==2.2.27-2+deb11u1 +gpg==2.2.27-2+deb11u2 +gpg-agent==2.2.27-2+deb11u2 +gpg-wks-client==2.2.27-2+deb11u2 +gpg-wks-server==2.2.27-2+deb11u2 +gpgconf==2.2.27-2+deb11u2 +gpgsm==2.2.27-2+deb11u2 +gpgv==2.2.27-2+deb11u2 graphviz==2.42.2-5 groff==1.22.4-6 groff-base==1.22.4-6 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster index ddc1985a505b..8dc213a838ae 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster +++ b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster @@ -82,7 +82,7 @@ dh-strip-nondeterminism==1.1.2-1 dh-systemd==12.1.1 dictionaries-common==1.28.1 diffstat==1.62-1 -dirmngr==2.2.12-1+deb10u1 +dirmngr==2.2.12-1+deb10u2 distro-info-data==0.41+deb10u4 dkms==2.6.1-4 dmeventd==2:1.02.155-3 @@ -160,18 +160,19 @@ git-man==1:2.20.1-2+deb10u3 glib-networking==2.58.0-2+deb10u2 glib-networking-common==2.58.0-2+deb10u2 glib-networking-services==2.58.0-2+deb10u2 -gnupg==2.2.12-1+deb10u1 -gnupg-l10n==2.2.12-1+deb10u1 -gnupg-utils==2.2.12-1+deb10u1 -gnupg2==2.2.12-1+deb10u1 +gnupg==2.2.12-1+deb10u2 +gnupg-l10n==2.2.12-1+deb10u2 +gnupg-utils==2.2.12-1+deb10u2 +gnupg2==2.2.12-1+deb10u2 gobject-introspection==1.58.3-2 googletest==1.8.1-3 -gpg==2.2.12-1+deb10u1 -gpg-agent==2.2.12-1+deb10u1 -gpg-wks-client==2.2.12-1+deb10u1 -gpg-wks-server==2.2.12-1+deb10u1 -gpgconf==2.2.12-1+deb10u1 -gpgsm==2.2.12-1+deb10u1 +gpg==2.2.12-1+deb10u2 +gpg-agent==2.2.12-1+deb10u2 +gpg-wks-client==2.2.12-1+deb10u2 +gpg-wks-server==2.2.12-1+deb10u2 +gpgconf==2.2.12-1+deb10u2 +gpgsm==2.2.12-1+deb10u2 +gpgv==2.2.12-1+deb10u2 graphviz==2.40.1-6+deb10u1 groff==1.22.4-3+deb10u1 groff-base==1.22.4-3+deb10u1 @@ -1346,12 +1347,12 @@ libzvbi0==0.2.35-16 libzzip-0-13==0.13.62-3.2+deb10u1 licensecheck==3.0.31-3 lintian==2.15.0 -linux-compiler-gcc-8-x86==4.19.235-1 -linux-headers-4.19.0-20-amd64==4.19.235-1 -linux-headers-4.19.0-20-common==4.19.235-1 -linux-headers-amd64==4.19+105+deb10u15 -linux-kbuild-4.19==4.19.235-1 -linux-libc-dev==4.19.235-1 +linux-compiler-gcc-8-x86==4.19.249-2 +linux-headers-4.19.0-21-amd64==4.19.249-2 +linux-headers-4.19.0-21-common==4.19.249-2 +linux-headers-amd64==4.19+105+deb10u16 +linux-kbuild-4.19==4.19.249-2 +linux-libc-dev==4.19.249-2 linuxdoc-tools==0.9.73-2 llvm-7==1:7.0.1-8+deb10u2 llvm-7-dev==1:7.0.1-8+deb10u2 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-armhf b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-armhf index 0dbab5ad344e..648627cb4e1a 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-armhf +++ b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-armhf @@ -99,7 +99,7 @@ libunicode-linebreak-perl==0.0.20190101-1 libxapian-dev==1.4.11-1 libxslt1-dev==1.1.32-2.2~deb10u1 libyaml-tiny-perl==1.73-1 -linux-compiler-gcc-8-arm==4.19.235-1 +linux-compiler-gcc-8-arm==4.19.249-2 llvm-6.0==1:6.0.1-10 llvm-6.0-dev==1:6.0.1-10 llvm-6.0-runtime==1:6.0.1-10 diff --git a/files/build/versions/host-image/versions-deb-bullseye b/files/build/versions/host-image/versions-deb-bullseye index a1ff139b51ff..344dfcaf6e41 100644 --- a/files/build/versions/host-image/versions-deb-bullseye +++ b/files/build/versions/host-image/versions-deb-bullseye @@ -27,7 +27,7 @@ cron==3.0pl1-137 curl==7.74.0-1.3+deb11u1 dbus==1.12.20-2 device-tree-compiler==1.6.0-1 -dirmngr==2.2.27-2+deb11u1 +dirmngr==2.2.27-2+deb11u2 distro-info-data==0.51+deb11u1 dmidecode==3.3-2 dmsetup==2:1.02.175-2.1 @@ -56,16 +56,17 @@ gettext-base==0.21-4 gir1.2-freedesktop==1.66.1-1+b1 gir1.2-glib-2.0==1.66.1-1+b1 gir1.2-packagekitglib-1.0==1.2.2-2 -gnupg==2.2.27-2+deb11u1 -gnupg-l10n==2.2.27-2+deb11u1 -gnupg-utils==2.2.27-2+deb11u1 +gnupg==2.2.27-2+deb11u2 +gnupg-l10n==2.2.27-2+deb11u2 +gnupg-utils==2.2.27-2+deb11u2 gobject-introspection==1.66.1-1+b1 -gpg==2.2.27-2+deb11u1 -gpg-agent==2.2.27-2+deb11u1 -gpg-wks-client==2.2.27-2+deb11u1 -gpg-wks-server==2.2.27-2+deb11u1 -gpgconf==2.2.27-2+deb11u1 -gpgsm==2.2.27-2+deb11u1 +gpg==2.2.27-2+deb11u2 +gpg-agent==2.2.27-2+deb11u2 +gpg-wks-client==2.2.27-2+deb11u2 +gpg-wks-server==2.2.27-2+deb11u2 +gpgconf==2.2.27-2+deb11u2 +gpgsm==2.2.27-2+deb11u2 +gpgv==2.2.27-2+deb11u2 grub-common==2.04-20 grub2-common==2.04-20 gzip==1.10-4+deb11u1 From 530a0ca90872f4a4c5d1df39564e6b31e24e50df Mon Sep 17 00:00:00 2001 From: Stepan Blyshchak <38952541+stepanblyschak@users.noreply.github.com> Date: Wed, 6 Jul 2022 12:47:45 +0300 Subject: [PATCH 090/259] [202205][sonic-sairedis] don't try to build python-pysairedis (python2) on bullseye (#11308) This PR is a backport of #10950 and a fix for it #11227 - Why I did it To not build python2 pysairedis on bullseye - How I did it Cherry-picked above PRs from master - How to verify it Build Signed-off-by: Stepan Blyschak --- rules/sairedis.mk | 4 ++++ rules/syncd.mk | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/rules/sairedis.mk b/rules/sairedis.mk index 1d38a74b1433..baa32493b330 100644 --- a/rules/sairedis.mk +++ b/rules/sairedis.mk @@ -45,6 +45,10 @@ $(LIBSAIMETADATA_DBG)_DEPENDS += $(LIBSAIMETADATA) $(LIBSAIMETADATA_DBG)_RDEPENDS += $(LIBSAIMETADATA) $(eval $(call add_derived_package,$(LIBSAIREDIS),$(LIBSAIMETADATA_DBG))) +ifeq ($(ENABLE_PY2_MODULES), n) + $(LIBSAIREDIS)_BUILD_ENV += DEB_BUILD_PROFILES=nopython2 +endif + # The .c, .cpp, .h & .hpp files under src/{$DBG_SRC_ARCHIVE list} # are archived into debug one image to facilitate debugging. # diff --git a/rules/syncd.mk b/rules/syncd.mk index 2b7007d84d5b..225f7ec0574c 100644 --- a/rules/syncd.mk +++ b/rules/syncd.mk @@ -33,4 +33,8 @@ $(SYNCD_RPC_DBG)_RDEPENDS += $(SYNCD_RPC) $(eval $(call add_derived_package,$(SYNCD),$(SYNCD_RPC_DBG))) endif +ifeq ($(ENABLE_PY2_MODULES), n) + $(SYNCD)_BUILD_ENV += DEB_BUILD_PROFILES=nopython2 +endif + endif From 4abead049a1052f0af90c1951424393b9178dd65 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Wed, 6 Jul 2022 06:55:25 -0700 Subject: [PATCH 091/259] [202205][utilities] advance submodule head (#11340) utilities; * 7dae152 2022-07-05 | show linkmgrd status in `show mux status` (#2254) (HEAD -> 202205) [Jing Zhang] * 6ebba53 2022-07-01 | [config/load_mgmt_config] Support load IPv6 mgmt IP (#2206) (HEAD -> 202205, github/202205) [Jing Kan] Signed-off-by: Ying Xie --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index c64454c904c1..7dae15271733 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit c64454c904c15397706beee0bb8bdcca39edb20c +Subproject commit 7dae1527173327295d2d484cf4de675bc71e49d2 From 2d9714de47f19c40c9738c8442d555029abe6d03 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Wed, 6 Jul 2022 06:55:41 -0700 Subject: [PATCH 092/259] [202205][platform-common] advance submodule head (#11345) platform-common: * 4fe38c7 2022-06-09 | [multiasic][sfputil]Fix the sftpuitlhelper on mutilasic platform issue (#286) (HEAD -> 202205, github/202205) [Marty Y. Lok] Signed-off-by: Ying Xie --- src/sonic-platform-common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-platform-common b/src/sonic-platform-common index f575a401b83b..4fe38c704692 160000 --- a/src/sonic-platform-common +++ b/src/sonic-platform-common @@ -1 +1 @@ -Subproject commit f575a401b83bbd5d6b6d68824ff22eae8647be16 +Subproject commit 4fe38c70469245fb3cec4d74567b088290754585 From 119789719d14ebe58a52d1405c4f9fbe43f7ec4f Mon Sep 17 00:00:00 2001 From: Sudharsan Dhamal Gopalarathnam Date: Wed, 6 Jul 2022 16:13:07 -0700 Subject: [PATCH 093/259] [202205][Mellanox]Check dmi file permission before access (#11346) * [Mellanox]Check dmi file permission before access (#11309) Signed-off-by: Sudharsan Dhamal Gopalarathnam sudharsand@nvidia.com Why I did it During the system boot up when 'show platform status' or 'show version' command is executed before STATE_DB CHASSIS_INFO table is populated, the show will try to fallback to use the platform API. The DMI file in mellanox platforms require root permission for access. So if the show commands are executed as admin or any other user, the following error log will appear in the syslog Jun 28 17:21:25.612123 sonic ERR show: Fail to decode DMI /sys/firmware/dmi/entries/2-0/raw due to PermissionError(13, 'Permission denied') How I did it Check the file permission before accessing it. How to verify it Added UT to verify. Manually verified if the error log is not thrown. --- .../mlnx-platform-api/sonic_platform/chassis.py | 3 +++ .../mlnx-platform-api/tests/test_chassis.py | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py index f68d1033f019..43539751c1d7 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py @@ -632,6 +632,9 @@ def _parse_dmi(self, filename): """ result = {} try: + if not os.access(filename, os.R_OK): + return result + with open(filename, "rb") as fileobj: data = fileobj.read() diff --git a/platform/mellanox/mlnx-platform-api/tests/test_chassis.py b/platform/mellanox/mlnx-platform-api/tests/test_chassis.py index a7eff5b08625..477c4d1a8ef2 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_chassis.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_chassis.py @@ -28,6 +28,7 @@ modules_path = os.path.dirname(test_path) sys.path.insert(0, modules_path) +import sonic_platform.chassis from sonic_platform.chassis import Chassis from sonic_platform.device_data import DeviceDataManager @@ -267,3 +268,16 @@ def test_module(self): module_list = chassis.get_all_modules() assert len(module_list) == 3 assert chassis.module_initialized_count == 3 + + def test_revision_permission(self): + old_dmi_file = sonic_platform.chassis.DMI_FILE + #Override the dmi file + sonic_platform.chassis.DMI_FILE = "/tmp/dmi_file" + new_dmi_file = sonic_platform.chassis.DMI_FILE + os.system("touch " + new_dmi_file) + os.system("chmod -r " + new_dmi_file) + chassis = Chassis() + rev = chassis.get_revision() + sonic_platform.chassis.DMI_FILE = old_dmi_file + os.system("rm -f " + new_dmi_file) + assert rev == "N/A" From a4da090e5a652283ba99a90b20c0a349689de368 Mon Sep 17 00:00:00 2001 From: Nazarii Hnydyn Date: Thu, 7 Jul 2022 09:15:41 +0300 Subject: [PATCH 094/259] [Mellanox] Update SAI to 1.21.2.0 (#11360) - Why I did it Advance to new SAI version for bugs fixes as well as new features/enhacements: New: 1. ARM64 support 2. FG ECMP performance optimization 3. Support setting empty list for port ingress/egress buffer profile list 4. Add service port for SN5600 5. Add CR8/SR8/LR8/KR8 interface type 6. Disable mlxtrace during debug dump Fixes: 1. Fix SAI_ACL_ENTRY_ATTR_FIELD_TC 2. Fix Packets loop back if no member in portchannel 3. Fix optimize descriptors apply time (and fast boot time) 4. Add flush fdb entries for vxlan tunnel bridge port 5. Don't disable used tunnel underlay interfaces - How I did it Advanced SAI submodule - How to verify it make configure PLATFORM=mellanox make target/sonic-mellanox.bin Signed-off-by: Nazarii Hnydyn --- platform/mellanox/mlnx-sai.mk | 2 +- platform/mellanox/mlnx-sai/SAI-Implementation | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/mellanox/mlnx-sai.mk b/platform/mellanox/mlnx-sai.mk index 69279d0844d5..3202b9564051 100644 --- a/platform/mellanox/mlnx-sai.mk +++ b/platform/mellanox/mlnx-sai.mk @@ -1,6 +1,6 @@ # Mellanox SAI -MLNX_SAI_VERSION = SAIRel1.21.1.0 +MLNX_SAI_VERSION = SAIRel1.21.2.0 export MLNX_SAI_VERSION diff --git a/platform/mellanox/mlnx-sai/SAI-Implementation b/platform/mellanox/mlnx-sai/SAI-Implementation index d6eb22a12cc0..f9a21df71363 160000 --- a/platform/mellanox/mlnx-sai/SAI-Implementation +++ b/platform/mellanox/mlnx-sai/SAI-Implementation @@ -1 +1 @@ -Subproject commit d6eb22a12cc0f01e84a71d367f7c4ebe19f58a40 +Subproject commit f9a21df713636fe648b8bb190698e4494a0f5239 From 12ed51d85f2447f2dd0e6269f002fc297c417751 Mon Sep 17 00:00:00 2001 From: Vadym Hlushko <62022266+vadymhlushko-mlnx@users.noreply.github.com> Date: Tue, 21 Jun 2022 03:07:02 +0300 Subject: [PATCH 095/259] [sflow + dropmon] added the ENABLE_SFLOW_DROPMON build flag. Added patches for sflow repo. (#10370) * [sflow + dropmon] added INCLUDE_SFLOW_DROPMON flag, added patches for hsflowd *Added a capability of monitoring dropped packets for the sFlow daemon in order to improve network - monitoring, diagnostic, and troubleshooting. The drop monitor service allows the sFlow daemon to export another type of sample - dropped packets as Discard samples alongside Counter samples and Packet Flow samples. Signed-off-by: Vadym Hlushko --- rules/config | 3 + rules/sflow.mk | 4 +- slave.mk | 1 + src/sflow/hsflowd/Makefile | 5 + ...ated-local-copy-of-linux-net_dropmon.patch | 172 ++++++++++++++++++ ...abled-drop-monitor-support-for-SONiC.patch | 60 ++++++ src/sflow/hsflowd/patch/dropmon/series | 2 + 7 files changed, 246 insertions(+), 1 deletion(-) create mode 100644 src/sflow/hsflowd/patch/dropmon/0001-dropmon-workaround-created-local-copy-of-linux-net_dropmon.patch create mode 100644 src/sflow/hsflowd/patch/dropmon/0001-sflow-enabled-drop-monitor-support-for-SONiC.patch create mode 100644 src/sflow/hsflowd/patch/dropmon/series diff --git a/rules/config b/rules/config index 0fdbc2b59e9b..dc973cbd12da 100644 --- a/rules/config +++ b/rules/config @@ -131,6 +131,9 @@ INCLUDE_ICCPD = n # INCLUDE_SFLOW - build docker-sflow for sFlow support INCLUDE_SFLOW = y +# ENABLE_SFLOW_DROPMON - support of drop packets monitoring feature for sFlow deamon +ENABLE_SFLOW_DROPMON = n + # INCLUDE_MGMT_FRAMEWORK - build docker-sonic-mgmt-framework for CLI and REST server support INCLUDE_MGMT_FRAMEWORK = y diff --git a/rules/sflow.mk b/rules/sflow.mk index 1942a9106598..78b917535bb6 100644 --- a/rules/sflow.mk +++ b/rules/sflow.mk @@ -1,7 +1,9 @@ # host-sflow package -HSFLOWD_VERSION = 2.0.34 +HSFLOWD_VERSION = 2.0.35 HSFLOWD_SUBVERSION = 1 + +export ENABLE_SFLOW_DROPMON export HSFLOWD_VERSION HSFLOWD_SUBVERSION HSFLOWD = hsflowd_$(HSFLOWD_VERSION)-$(HSFLOWD_SUBVERSION)_$(CONFIGURED_ARCH).deb diff --git a/slave.mk b/slave.mk index 092c515475e3..79e8fa7eb234 100644 --- a/slave.mk +++ b/slave.mk @@ -328,6 +328,7 @@ $(info "INCLUDE_SYSTEM_TELEMETRY" : "$(INCLUDE_SYSTEM_TELEMETRY)") $(info "ENABLE_HOST_SERVICE_ON_START" : "$(ENABLE_HOST_SERVICE_ON_START)") $(info "INCLUDE_RESTAPI" : "$(INCLUDE_RESTAPI)") $(info "INCLUDE_SFLOW" : "$(INCLUDE_SFLOW)") +$(info "ENABLE_SFLOW_DROPMON" : "$(ENABLE_SFLOW_DROPMON)") $(info "INCLUDE_NAT" : "$(INCLUDE_NAT)") $(info "INCLUDE_DHCP_RELAY" : "$(INCLUDE_DHCP_RELAY)") $(info "INCLUDE_P4RT" : "$(INCLUDE_P4RT)") diff --git a/src/sflow/hsflowd/Makefile b/src/sflow/hsflowd/Makefile index e29dbcc199bb..d4312b30c267 100644 --- a/src/sflow/hsflowd/Makefile +++ b/src/sflow/hsflowd/Makefile @@ -16,6 +16,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg init stg import -s ../patch/series + if [[ $(ENABLE_SFLOW_DROPMON) == y ]]; then + stg repair + stg import -s ../patch/dropmon/series + fi + mkdir -p debian cp -r DEBIAN_build/* debian chmod u+x debian/rules diff --git a/src/sflow/hsflowd/patch/dropmon/0001-dropmon-workaround-created-local-copy-of-linux-net_dropmon.patch b/src/sflow/hsflowd/patch/dropmon/0001-dropmon-workaround-created-local-copy-of-linux-net_dropmon.patch new file mode 100644 index 000000000000..80a2a20aa8eb --- /dev/null +++ b/src/sflow/hsflowd/patch/dropmon/0001-dropmon-workaround-created-local-copy-of-linux-net_dropmon.patch @@ -0,0 +1,172 @@ +From 6ad3a8ef0339041a800a41dac96370c11b72d814 Mon Sep 17 00:00:00 2001 +From: Vadym Hlushko +Date: Fri, 4 Feb 2022 15:11:48 +0000 +Subject: [PATCH] [dropmon] workaround - created local copy of +TDB: this patch will be removed when we update docker-sflow to bullseye kernel. + +Signed-off-by: Vadym Hlushko +--- + src/Linux/mod_dropmon.c | 2 +- + src/Linux/my_dropmon.h | 132 ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 133 insertions(+), 1 deletion(-) + create mode 100644 src/Linux/my_dropmon.h + +diff --git a/src/Linux/mod_dropmon.c b/src/Linux/mod_dropmon.c +index 6b8ec6d..a37b157 100644 +--- a/src/Linux/mod_dropmon.c ++++ b/src/Linux/mod_dropmon.c +@@ -7,12 +7,12 @@ extern "C" { + #endif + + #include "hsflowd.h" ++#include "my_dropmon.h" + #include + #include + #include + #include + #include +-#include + #include + #include + +diff --git a/src/Linux/my_dropmon.h b/src/Linux/my_dropmon.h +new file mode 100644 +index 0000000..66048cc +--- /dev/null ++++ b/src/Linux/my_dropmon.h +@@ -0,0 +1,132 @@ ++/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ ++#ifndef __NET_DROPMON_H ++#define __NET_DROPMON_H ++ ++#include ++#include ++ ++struct net_dm_drop_point { ++ __u8 pc[8]; ++ __u32 count; ++}; ++ ++#define is_drop_point_hw(x) do {\ ++ int ____i, ____j;\ ++ for (____i = 0; ____i < 8; i ____i++)\ ++ ____j |= x[____i];\ ++ ____j;\ ++} while (0) ++ ++#define NET_DM_CFG_VERSION 0 ++#define NET_DM_CFG_ALERT_COUNT 1 ++#define NET_DM_CFG_ALERT_DELAY 2 ++#define NET_DM_CFG_MAX 3 ++ ++struct net_dm_config_entry { ++ __u32 type; ++ __u64 data __attribute__((aligned(8))); ++}; ++ ++struct net_dm_config_msg { ++ __u32 entries; ++ struct net_dm_config_entry options[0]; ++}; ++ ++struct net_dm_alert_msg { ++ __u32 entries; ++ struct net_dm_drop_point points[0]; ++}; ++ ++struct net_dm_user_msg { ++ union { ++ struct net_dm_config_msg user; ++ struct net_dm_alert_msg alert; ++ } u; ++}; ++ ++ ++/* These are the netlink message types for this protocol */ ++ ++enum { ++ NET_DM_CMD_UNSPEC = 0, ++ NET_DM_CMD_ALERT, ++ NET_DM_CMD_CONFIG, ++ NET_DM_CMD_START, ++ NET_DM_CMD_STOP, ++ NET_DM_CMD_PACKET_ALERT, ++ NET_DM_CMD_CONFIG_GET, ++ NET_DM_CMD_CONFIG_NEW, ++ NET_DM_CMD_STATS_GET, ++ NET_DM_CMD_STATS_NEW, ++ _NET_DM_CMD_MAX, ++}; ++ ++#define NET_DM_CMD_MAX (_NET_DM_CMD_MAX - 1) ++ ++/* ++ * Our group identifiers ++ */ ++#define NET_DM_GRP_ALERT 1 ++ ++enum net_dm_attr { ++ NET_DM_ATTR_UNSPEC, ++ ++ NET_DM_ATTR_ALERT_MODE, /* u8 */ ++ NET_DM_ATTR_PC, /* u64 */ ++ NET_DM_ATTR_SYMBOL, /* string */ ++ NET_DM_ATTR_IN_PORT, /* nested */ ++ NET_DM_ATTR_TIMESTAMP, /* u64 */ ++ NET_DM_ATTR_PROTO, /* u16 */ ++ NET_DM_ATTR_PAYLOAD, /* binary */ ++ NET_DM_ATTR_PAD, ++ NET_DM_ATTR_TRUNC_LEN, /* u32 */ ++ NET_DM_ATTR_ORIG_LEN, /* u32 */ ++ NET_DM_ATTR_QUEUE_LEN, /* u32 */ ++ NET_DM_ATTR_STATS, /* nested */ ++ NET_DM_ATTR_HW_STATS, /* nested */ ++ NET_DM_ATTR_ORIGIN, /* u16 */ ++ NET_DM_ATTR_HW_TRAP_GROUP_NAME, /* string */ ++ NET_DM_ATTR_HW_TRAP_NAME, /* string */ ++ NET_DM_ATTR_HW_ENTRIES, /* nested */ ++ NET_DM_ATTR_HW_ENTRY, /* nested */ ++ NET_DM_ATTR_HW_TRAP_COUNT, /* u32 */ ++ NET_DM_ATTR_SW_DROPS, /* flag */ ++ NET_DM_ATTR_HW_DROPS, /* flag */ ++ NET_DM_ATTR_FLOW_ACTION_COOKIE, /* binary */ ++ ++ __NET_DM_ATTR_MAX, ++ NET_DM_ATTR_MAX = __NET_DM_ATTR_MAX - 1 ++}; ++ ++/** ++ * enum net_dm_alert_mode - Alert mode. ++ * @NET_DM_ALERT_MODE_SUMMARY: A summary of recent drops is sent to user space. ++ * @NET_DM_ALERT_MODE_PACKET: Each dropped packet is sent to user space along ++ * with metadata. ++ */ ++enum net_dm_alert_mode { ++ NET_DM_ALERT_MODE_SUMMARY, ++ NET_DM_ALERT_MODE_PACKET, ++}; ++ ++enum { ++ NET_DM_ATTR_PORT_NETDEV_IFINDEX, /* u32 */ ++ NET_DM_ATTR_PORT_NETDEV_NAME, /* string */ ++ ++ __NET_DM_ATTR_PORT_MAX, ++ NET_DM_ATTR_PORT_MAX = __NET_DM_ATTR_PORT_MAX - 1 ++}; ++ ++enum { ++ NET_DM_ATTR_STATS_DROPPED, /* u64 */ ++ ++ __NET_DM_ATTR_STATS_MAX, ++ NET_DM_ATTR_STATS_MAX = __NET_DM_ATTR_STATS_MAX - 1 ++}; ++ ++enum net_dm_origin { ++ NET_DM_ORIGIN_SW, ++ NET_DM_ORIGIN_HW, ++}; ++ ++#endif +-- +2.17.1 + diff --git a/src/sflow/hsflowd/patch/dropmon/0001-sflow-enabled-drop-monitor-support-for-SONiC.patch b/src/sflow/hsflowd/patch/dropmon/0001-sflow-enabled-drop-monitor-support-for-SONiC.patch new file mode 100644 index 000000000000..7a3561fd7d4c --- /dev/null +++ b/src/sflow/hsflowd/patch/dropmon/0001-sflow-enabled-drop-monitor-support-for-SONiC.patch @@ -0,0 +1,60 @@ +From 4bdd892662c08a396066ba6a1c55eac3f8aa0a5f Mon Sep 17 00:00:00 2001 +From: Vadym Hlushko +Date: Tue, 25 Jan 2022 12:59:40 +0000 +Subject: [PATCH] [sflow] enabled drop monitor support for SONiC + +Signed-off-by: Vadym Hlushko +--- + src/Linux/Makefile | 2 +- + src/Linux/hsflowd.c | 8 ++++++++ + src/Linux/scripts/hsflowd.conf.sonic | 2 ++ + 3 files changed, 11 insertions(+), 1 deletion(-) + +diff --git a/src/Linux/Makefile b/src/Linux/Makefile +index 8128cf2..cf538e7 100644 +--- a/src/Linux/Makefile ++++ b/src/Linux/Makefile +@@ -34,7 +34,7 @@ FEATURES_DENT= DENT PSAMPLE SYSTEMD DROPMON + FEATURES_EOS= EAPI + FEATURES_OS10= OS10 DBUS SYSTEMD + FEATURES_OPX= OPX DBUS SYSTEMD +-FEATURES_SONIC= SONIC PSAMPLE DOCKER ++FEATURES_SONIC= SONIC PSAMPLE DOCKER DROPMON + FEATURES_XEN= XEN OVS + FEATURES_HOST= NFLOG PCAP TCP DOCKER KVM OVS DBUS SYSTEMD + +diff --git a/src/Linux/hsflowd.c b/src/Linux/hsflowd.c +index 5d94e79..25031d1 100644 +--- a/src/Linux/hsflowd.c ++++ b/src/Linux/hsflowd.c +@@ -1877,6 +1877,14 @@ extern "C" { + sp->psample.ingress = YES; + sp->psample.egress = NO; + sp->psample.group = 1; ++ // drop-monitor support ++ myLog(LOG_INFO, "drop-monitor support for SONiC"); ++ sp->dropmon.dropmon = YES; ++ sp->dropmon.group = 1; ++ sp->dropmon.start = NO; ++ sp->dropmon.limit = 1000; ++ sp->dropmon.sw = NO; ++ sp->dropmon.hw = YES; + #endif /* HSP_LOAD_SONIC */ + + #ifdef HSP_LOAD_XEN +diff --git a/src/Linux/scripts/hsflowd.conf.sonic b/src/Linux/scripts/hsflowd.conf.sonic +index e675730..fb52a54 100644 +--- a/src/Linux/scripts/hsflowd.conf.sonic ++++ b/src/Linux/scripts/hsflowd.conf.sonic +@@ -4,6 +4,8 @@ + sflow { + # sonic {} loaded automatically + # psample {} loaded automatically ++ # packet drop monitoring: ++ dropmon { group=1 start=on limit=1000 sw=off hw=on } + # ====== detect new interfaces ====== + refreshAdaptors=60 + # ====== Agent IP selection ====== +-- +2.17.1 + diff --git a/src/sflow/hsflowd/patch/dropmon/series b/src/sflow/hsflowd/patch/dropmon/series new file mode 100644 index 000000000000..1a4bb1772ac3 --- /dev/null +++ b/src/sflow/hsflowd/patch/dropmon/series @@ -0,0 +1,2 @@ +0001-dropmon-workaround-created-local-copy-of-linux-net_dropmon.patch +0001-sflow-enabled-drop-monitor-support-for-SONiC.patch \ No newline at end of file From 73abb5c58a0ae21729576fdcba16945f2eebca3b Mon Sep 17 00:00:00 2001 From: Neetha John Date: Wed, 6 Jul 2022 10:24:16 -0700 Subject: [PATCH 096/259] Add backend acl template (#11220) Why I did it Storage backend has all vlan members tagged. If untagged packets are received on those links, they are accounted as RX_DROPS which can lead to false alarms in monitoring tools. Using this acl to hide these drops. How I did it Created a acl template which will be loaded during minigraph load for backend. This template will allow tagged vlan packets and dropped untagged How to verify it Unit tests Signed-off-by: Neetha John --- files/build_templates/backend_acl.j2 | 51 ++++++++++++++ .../build_templates/sonic_debian_extension.j2 | 3 + .../data/backend_acl/acl_multi_vlan.json | 59 ++++++++++++++++ .../data/backend_acl/acl_single_vlan.json | 38 ++++++++++ .../tests/data/backend_acl/multi_vlan.json | 69 +++++++++++++++++++ .../tests/data/backend_acl/single_vlan.json | 66 ++++++++++++++++++ src/sonic-config-engine/tests/test_j2files.py | 28 ++++++++ 7 files changed, 314 insertions(+) create mode 100644 files/build_templates/backend_acl.j2 create mode 100644 src/sonic-config-engine/tests/data/backend_acl/acl_multi_vlan.json create mode 100644 src/sonic-config-engine/tests/data/backend_acl/acl_single_vlan.json create mode 100644 src/sonic-config-engine/tests/data/backend_acl/multi_vlan.json create mode 100644 src/sonic-config-engine/tests/data/backend_acl/single_vlan.json diff --git a/files/build_templates/backend_acl.j2 b/files/build_templates/backend_acl.j2 new file mode 100644 index 000000000000..f5468e6c12cb --- /dev/null +++ b/files/build_templates/backend_acl.j2 @@ -0,0 +1,51 @@ +{%- set vlan2ports = {} %} +{%- for vlan in VLAN %} + {% set portlist = [] %} + {%- for vlan_name, port in VLAN_MEMBER %} + {%- if vlan_name == vlan %} + {%- if portlist.append(port) %}{%- endif %} + {%- endif %} + {%- endfor %} + {%- set _ = vlan2ports.update({vlan: portlist| sort | join(',')}) %} +{%- endfor %} + + +{ + "acl": { + "acl-sets": { + "acl-set": { + "DATAACL": { + "acl-entries": { + "acl-entry": { + {% for vlan, vlan_entries in VLAN.items() %} + "{{ loop.index }}": { + "config": { + "sequence-id": {{ loop.index }} + }, + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "l2": { + "config": { + "vlan_id": "{{ vlan_entries['vlanid'] }}" + } + }, + "input_interface": { + "interface_ref": { + "config": { + "interface": "{{ vlan2ports[vlan] }}" + } + } + } + + }{% if not loop.last %},{% endif %} + {% endfor -%} + } + } + } + } + } + } +} diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 357c0df6656c..223240c329f3 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -520,6 +520,9 @@ then fi {% endif %} +# Copy backend acl template +sudo cp $BUILD_TEMPLATES/backend_acl.j2 $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/ + # Copy hostname configuration scripts sudo cp $IMAGE_CONFIGS/hostname/hostname-config.service $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_SYSTEM echo "hostname-config.service" | sudo tee -a $GENERATED_SERVICE_FILE diff --git a/src/sonic-config-engine/tests/data/backend_acl/acl_multi_vlan.json b/src/sonic-config-engine/tests/data/backend_acl/acl_multi_vlan.json new file mode 100644 index 000000000000..53cd50d0f2d1 --- /dev/null +++ b/src/sonic-config-engine/tests/data/backend_acl/acl_multi_vlan.json @@ -0,0 +1,59 @@ + +{ + "acl": { + "acl-sets": { + "acl-set": { + "DATAACL": { + "acl-entries": { + "acl-entry": { + "1": { + "config": { + "sequence-id": 1 + }, + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "l2": { + "config": { + "vlan_id": "1000" + } + }, + "input_interface": { + "interface_ref": { + "config": { + "interface": "Ethernet12,Ethernet16,Ethernet20,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet44,Ethernet48,Ethernet52,Ethernet56,Ethernet60,Ethernet64,Ethernet68,Ethernet72,Ethernet76" + } + } + } + + }, "2": { + "config": { + "sequence-id": 2 + }, + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "l2": { + "config": { + "vlan_id": "2000" + } + }, + "input_interface": { + "interface_ref": { + "config": { + "interface": "Ethernet4,Ethernet8" + } + } + } + + } } + } + } + } + } + } +} diff --git a/src/sonic-config-engine/tests/data/backend_acl/acl_single_vlan.json b/src/sonic-config-engine/tests/data/backend_acl/acl_single_vlan.json new file mode 100644 index 000000000000..86dcc80d08d1 --- /dev/null +++ b/src/sonic-config-engine/tests/data/backend_acl/acl_single_vlan.json @@ -0,0 +1,38 @@ + +{ + "acl": { + "acl-sets": { + "acl-set": { + "DATAACL": { + "acl-entries": { + "acl-entry": { + "1": { + "config": { + "sequence-id": 1 + }, + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "l2": { + "config": { + "vlan_id": "1000" + } + }, + "input_interface": { + "interface_ref": { + "config": { + "interface": "Ethernet12,Ethernet16,Ethernet20,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet4,Ethernet40,Ethernet44,Ethernet48,Ethernet52,Ethernet56,Ethernet60,Ethernet64,Ethernet68,Ethernet72,Ethernet76,Ethernet8" + } + } + } + + } + } + } + } + } + } + } +} diff --git a/src/sonic-config-engine/tests/data/backend_acl/multi_vlan.json b/src/sonic-config-engine/tests/data/backend_acl/multi_vlan.json new file mode 100644 index 000000000000..13acff414a1f --- /dev/null +++ b/src/sonic-config-engine/tests/data/backend_acl/multi_vlan.json @@ -0,0 +1,69 @@ +{ + "VLAN": { + "Vlan1000": { + "vlanid": "1000" + }, + "Vlan2000": { + "vlanid": "2000" + } + }, + "VLAN_MEMBER": { + "Vlan1000|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet20": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet28": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet36": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet40": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet44": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet48": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet52": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet56": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet60": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet64": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet68": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet72": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet76": { + "tagging_mode": "tagged" + }, + "Vlan2000|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2000|Ethernet8": { + "tagging_mode": "tagged" + } + } +} diff --git a/src/sonic-config-engine/tests/data/backend_acl/single_vlan.json b/src/sonic-config-engine/tests/data/backend_acl/single_vlan.json new file mode 100644 index 000000000000..1023e990a72f --- /dev/null +++ b/src/sonic-config-engine/tests/data/backend_acl/single_vlan.json @@ -0,0 +1,66 @@ +{ + "VLAN": { + "Vlan1000": { + "vlanid": "1000" + } + }, + "VLAN_MEMBER": { + "Vlan1000|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet8": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet20": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet28": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet36": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet40": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet44": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet48": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet52": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet56": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet60": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet64": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet68": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet72": { + "tagging_mode": "tagged" + }, + "Vlan1000|Ethernet76": { + "tagging_mode": "tagged" + } + } +} diff --git a/src/sonic-config-engine/tests/test_j2files.py b/src/sonic-config-engine/tests/test_j2files.py index 5237ddd85067..14db19357954 100644 --- a/src/sonic-config-engine/tests/test_j2files.py +++ b/src/sonic-config-engine/tests/test_j2files.py @@ -562,6 +562,34 @@ def test_ntp_conf(self): self.run_script(argument) assert utils.cmp(expected, self.output_file), self.run_diff(expected, self.output_file) + def test_backend_acl_template_render(self): + acl_template = os.path.join( + self.test_dir, '..', '..', '..', 'files', 'build_templates', + 'backend_acl.j2' + ) + test_list = { + 'single_vlan': { + 'input': 'single_vlan.json', + 'output': 'acl_single_vlan.json' + }, + 'multi_vlan': { + 'input': 'multi_vlan.json', + 'output': 'acl_multi_vlan.json' + }, + } + for _, v in test_list.items(): + input_file = os.path.join( + self.test_dir, 'data', 'backend_acl', v['input'] + ) + argument = " -j {} -t {} > {}".format( + input_file, acl_template, self.output_file + ) + sample_output_file = os.path.join( + self.test_dir, 'data', 'backend_acl', v['output'] + ) + self.run_script(argument) + assert utils.cmp(sample_output_file, self.output_file), self.run_diff(sample_output_file, self.output_file) + def tearDown(self): os.environ["CFGGEN_UNIT_TESTING"] = "" try: From 37c2370165c9343ceed36f78bac56a3bcf909bed Mon Sep 17 00:00:00 2001 From: Neetha John Date: Wed, 6 Jul 2022 10:27:05 -0700 Subject: [PATCH 097/259] Minigraph parser changes for storage backend acl (#11221) Signed-off-by: Neetha John nejo@microsoft.com Why I did it For storage backend, certain rules will be applied to the DATAACL table to allow only vlan tagged packets and drop untagged packets. How I did it Create DATAACL table if the device is a storage backend device To avoid ACL resource issues, remove EVERFLOW related tables if the device is a storage backend device How to verify it Added the following unit tests - verify that EVERFLOW acl tables is removed and DATAACL table is added for storage backend tor - verify that no DATAACL tables are created and EVERFLOW tables exist for storage backend leaf --- src/sonic-config-engine/minigraph.py | 23 +- .../tests/sample-graph-storage-backend.xml | 781 ++++++++++++++++++ .../tests/sample-graph-subintf.xml | 44 - src/sonic-config-engine/tests/test_cfggen.py | 41 +- 4 files changed, 838 insertions(+), 51 deletions(-) create mode 100644 src/sonic-config-engine/tests/sample-graph-storage-backend.xml diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index b79ffff039c6..bee0d89af989 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -1172,7 +1172,26 @@ def parse_spine_chassis_fe(results, vni, lo_intfs, phyport_intfs, pc_intfs, pc_m # ############################################################################### -def filter_acl_table_bindings(acls, neighbors, port_channels, sub_role): +def filter_acl_table_for_backend(acls, vlan_members): + filter_acls = {} + for acl_name, value in acls.items(): + if 'everflow' not in acl_name.lower(): + filter_acls[acl_name] = value + + ports = set() + for vlan, member in vlan_members: + ports.add(member) + filter_acls['DATAACL'] = { 'policy_desc': 'DATAACL', + 'stage': 'ingress', + 'type': 'L3', + 'ports': list(ports) + } + return filter_acls + +def filter_acl_table_bindings(acls, neighbors, port_channels, sub_role, device_type, is_storage_device, vlan_members): + if device_type == 'BackEndToRRouter' and is_storage_device: + return filter_acl_table_for_backend(acls, vlan_members) + filter_acls = {} # If the asic role is BackEnd no ACL Table (Ctrl/Data/Everflow) is binded. @@ -1741,7 +1760,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw results['DHCP_RELAY'] = dhcp_relay_table results['NTP_SERVER'] = dict((item, {}) for item in ntp_servers) results['TACPLUS_SERVER'] = dict((item, {'priority': '1', 'tcp_port': '49'}) for item in tacacs_servers) - results['ACL_TABLE'] = filter_acl_table_bindings(acls, neighbors, pcs, sub_role) + results['ACL_TABLE'] = filter_acl_table_bindings(acls, neighbors, pcs, sub_role, current_device['type'], is_storage_device, vlan_members) results['FEATURE'] = { 'telemetry': { 'state': 'enabled' diff --git a/src/sonic-config-engine/tests/sample-graph-storage-backend.xml b/src/sonic-config-engine/tests/sample-graph-storage-backend.xml new file mode 100644 index 000000000000..837400b2d5e4 --- /dev/null +++ b/src/sonic-config-engine/tests/sample-graph-storage-backend.xml @@ -0,0 +1,781 @@ + + + + + + switch-t0 + 10.1.0.32 + BGPMonitor + 10.20.30.40 + 30 + 10 + 3 + + + false + switch-t0 + 10.0.0.58 + ARISTA02T1 + 10.0.0.59 + 1 + 180 + 60 + + + switch-t0 + FC00::75 + ARISTA02T1 + FC00::76 + 1 + 180 + 60 + + + switch-t0 + FC00::75 + ARISTA02T1 + FC00::76 + 1 + 180 + 60 + + + false + switch-t0 + 10.2.0.20 + CHASSIS_PEER + 10.2.0.21 + 1 + 180 + 60 + voq + + + + + 1 + + BGPMonitor + + + BGPPeer +
10.1.0.32
+ + + +
+
+ +
+ + 65100 + switch-t0 + + +
10.0.0.59
+ + + +
+ +
10.2.0.21
+ + + +
+
+ +
+ + 64600 + ARISTA01T1 + + + + 64600 + ARISTA02T1 + + + + 64600 + ARISTA03T1 + + + + 64600 + ARISTA04T1 + + + + 65100 + CHASSIS_PEER + + +
+
+ + + + + + HostIP + Loopback0 + + 10.1.0.32/32 + + 10.1.0.32/32 + + + HostIP1 + Loopback0 + + FC00:1::32/128 + + FC00:1::32/128 + + + + + HostIP + eth0 + + 10.0.0.100/24 + + 10.0.0.100/24 + + + + + + + switch-t0 + + + PortChannel1 + fortyGigE0/4 + + + + + + ab1 + fortyGigE0/8 + 192.0.0.1;192.0.0.2 + 1000 + 1000 + 192.168.0.0/27 + + + ab4 + fortyGigE0/8 + 192.0.0.1;192.0.0.2 + 1001 + 1001 + 192.168.0.32/27 + + + kk1 + fortyGigE0/12 + 192.0.0.1;192.0.0.2 + 2020 + 2020 + Tagged + 192.168.0.0/28 + + + ab2 + fortyGigE0/12 + 192.0.0.1;192.0.0.2 + 2000 + 2000 + Tagged + 192.168.0.240/27 + + + ab3 + fortyGigE0/12 + 192.0.0.1;192.0.0.2 + 2001 + 2001 + 192.168.0.240/27 + + + + + + PortChannel1 + 10.0.0.56/31 + + + + PortChannel1 + FC00::71/126 + + + + fortyGigE0/0 + 10.0.0.58/31 + + + + fortyGigE0/0 + FC00::75/126 + + + + ab1 + 192.168.0.1/27 + + + + + + DataAcl + + ERSPAN + everflow + Everflow + 0 + everflow.xml + + + DataAcl + + ERSPANv6 + everflowV6 + Everflow + 0 + everflow.xml + + + DataAcl + + Loopback0 + ipv6-mgmt-only + Management + 0 + + + + DataAcl + + Loopback0 + mgmt-only + Management + 0 + + + + DataAcl + + StaticERSPAN + everflowStatic + Everflow + 0 + everflow.xml + + + + + + + + + + DeviceInterfaceLink + 1000 + ARISTA01T1 + et1 + true + switch-t0 + fortyGigE0/8 + true + + + DeviceMgmtLink + 1000 + switch-t0 + fortyGigE0/16 + true + ChassisMTS1 + mgmt0 + true + + + + + switch-t0 + Arista-7050-QX-32S + AAA00PrdStr00 + + + ARISTA01T1 + Arista + + + ARISTA02T1 + Arista + + + ARISTA03T1 + Arista + + + ARISTA04T1 + Arista + + + + + + + + DeviceInterface + + true + 1 + fortyGigE0/0 + + false + 0 + 0 + 10000 + + + DeviceInterface + + true + 1 + Ethernet1 + + false + 0 + 0 + 10000 + + + DeviceInterface + + true + 1 + Ethernet2 + + false + 0 + 0 + 10000 + + + DeviceInterface + + true + 1 + fortyGigE0/4 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + 1 + fortyGigE0/8 + + false + 0 + 0 + 40000 + Interface description + + + DeviceInterface + + true + 1 + fortyGigE0/12 + + false + 0 + 0 + 100000 + Interface description + + + DeviceInterface + + true + 1 + fortyGigE0/16 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/20 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/24 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/28 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/32 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/36 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/40 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/44 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/48 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/52 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/56 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/60 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/64 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/68 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/72 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/76 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/80 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/84 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/88 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/92 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/96 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/100 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/104 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/108 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/112 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/116 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/120 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/124 + + false + 0 + 0 + 100000 + + + true + 0 + Arista-7050-QX-32S + + + DeviceInterface + + 1 + Management1 + false + mgmt1 + 1000 + + + + + + + + switch-t0 + + + DeploymentId + + 1 + + + ResourceType + + Storage + + + + + + + switch-t0 + Arista-7050-QX-32S +
diff --git a/src/sonic-config-engine/tests/sample-graph-subintf.xml b/src/sonic-config-engine/tests/sample-graph-subintf.xml index 7fa35c44cbe4..6dab0ecd4e14 100644 --- a/src/sonic-config-engine/tests/sample-graph-subintf.xml +++ b/src/sonic-config-engine/tests/sample-graph-subintf.xml @@ -11,25 +11,6 @@ 10 3 - - false - switch-t0 - 10.0.0.56 - ARISTA01T1 - 10.0.0.57 - 1 - 180 - 60 - - - switch-t0 - FC00::71 - ARISTA01T1 - FC00::72 - 1 - 180 - 60 - false switch-t0 @@ -90,12 +71,6 @@ 65100 switch-t0 - -
10.0.0.57
- - - -
10.0.0.59
@@ -253,16 +228,6 @@ PortChannel1 FC00::71/126 - - - PortChannel1001 - 10.0.0.57/31 - - - - PortChannel1001 - FC00::72/126 - ab1 @@ -308,15 +273,6 @@ mgmt0 true - - DeviceMgmtLink - 1000 - switch-t0 - Management1 - switch-m0 - Management1 - true - diff --git a/src/sonic-config-engine/tests/test_cfggen.py b/src/sonic-config-engine/tests/test_cfggen.py index 0c3519068e90..232fded47eb5 100644 --- a/src/sonic-config-engine/tests/test_cfggen.py +++ b/src/sonic-config-engine/tests/test_cfggen.py @@ -39,6 +39,7 @@ def setUp(self): self.packet_chassis_graph = os.path.join(self.test_dir, 'sample-chassis-packet-lc-graph.xml') self.packet_chassis_port_ini = os.path.join(self.test_dir, 'sample-chassis-packet-lc-port-config.ini') self.macsec_profile = os.path.join(self.test_dir, 'macsec_profile.json') + self.sample_backend_graph = os.path.join(self.test_dir, 'sample-graph-storage-backend.xml') # To ensure that mock config_db data is used for unit-test cases os.environ["CFGGEN_UNIT_TESTING"] = "2" @@ -710,14 +711,11 @@ def test_minigraph_bgp_voq_chassis_peer(self): output = self.run_script(argument) self.assertEqual(output.strip(), "") - def test_minigraph_sub_port_interfaces(self, check_stderr=True): - self.verify_sub_intf(check_stderr=check_stderr) - def test_minigraph_sub_port_intf_resource_type_non_backend_tor(self, check_stderr=True): self.verify_sub_intf_non_backend_tor(graph_file=self.sample_resource_graph, check_stderr=check_stderr) - def test_minigraph_sub_port_intf_resource_type(self, check_stderr=True): - self.verify_sub_intf(graph_file=self.sample_resource_graph, check_stderr=check_stderr) + def test_minigraph_sub_port_intf_hwsku(self, check_stderr=True): + self.verify_sub_intf(graph_file=self.sample_backend_graph, check_stderr=check_stderr) def test_minigraph_sub_port_intf_sub(self, check_stderr=True): self.verify_sub_intf(graph_file=self.sample_subintf_graph, check_stderr=check_stderr) @@ -725,6 +723,32 @@ def test_minigraph_sub_port_intf_sub(self, check_stderr=True): def test_minigraph_no_vlan_member(self, check_stderr=True): self.verify_no_vlan_member() + def test_minigraph_backend_acl_leaf(self, check_stderr=True): + try: + print('\n Change device type to %s' % (BACKEND_LEAF_ROUTER)) + if check_stderr: + output = subprocess.check_output("sed -i \'s/%s/%s/g\' %s" % (TOR_ROUTER, BACKEND_LEAF_ROUTER, self.sample_backend_graph), stderr=subprocess.STDOUT, shell=True) + else: + output = subprocess.check_output("sed -i \'s/%s/%s/g\' %s" % (TOR_ROUTER, BACKEND_LEAF_ROUTER, self.sample_backend_graph), shell=True) + + self.test_jinja_expression(self.sample_backend_graph, self.port_config, BACKEND_LEAF_ROUTER) + + # ACL_TABLE should contain EVERFLOW related entries + argument = '-m "' + self.sample_backend_graph + '" -p "' + self.port_config + '" -v "ACL_TABLE"' + output = self.run_script(argument) + sample_output = utils.to_dict(output.strip()).keys() + assert 'DATAACL' not in sample_output, sample_output + assert 'EVERFLOW' in sample_output, sample_output + + finally: + print('\n Change device type back to %s' % (TOR_ROUTER)) + if check_stderr: + output = subprocess.check_output("sed -i \'s/%s/%s/g\' %s" % (BACKEND_LEAF_ROUTER, TOR_ROUTER, self.sample_backend_graph), stderr=subprocess.STDOUT, shell=True) + else: + output = subprocess.check_output("sed -i \'s/%s/%s/g\' %s" % (BACKEND_LEAF_ROUTER, TOR_ROUTER, self.sample_backend_graph), shell=True) + + self.test_jinja_expression(self.sample_backend_graph, self.port_config, TOR_ROUTER) + def test_minigraph_sub_port_no_vlan_member(self, check_stderr=True): try: print('\n Change device type to %s' % (BACKEND_LEAF_ROUTER)) @@ -780,6 +804,13 @@ def verify_sub_intf(self, **kwargs): output = self.run_script(argument) self.assertEqual(output.strip(), "") + # ACL_TABLE should not contain EVERFLOW related entries + argument = '-m "' + graph_file + '" -p "' + self.port_config + '" -v "ACL_TABLE"' + output = self.run_script(argument) + sample_output = utils.to_dict(output.strip()).keys() + assert 'DATAACL' in sample_output, sample_output + assert 'EVERFLOW' not in sample_output, sample_output + # All the other tables stay unchanged self.test_minigraph_vlans(graph_file=graph_file) self.test_minigraph_vlan_interfaces(graph_file=graph_file) From fea173d54e50afca931db6f252a28f450fc4191e Mon Sep 17 00:00:00 2001 From: pavannaregundi <92989231+pavannaregundi@users.noreply.github.com> Date: Thu, 7 Jul 2022 23:34:46 +0530 Subject: [PATCH 098/259] [Marvell-armhf] Fix kernel hang due to kernel upgrade to 5.10.103 (#11298) Give more room for the kernel image in memory Change-Id: I015856d173d50d94e30d8c555590efb70eb712ae Signed-off-by: Pavan Naregundi --- platform/marvell-armhf/platform.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/marvell-armhf/platform.conf b/platform/marvell-armhf/platform.conf index 2f2a22cd8640..bab1b62f745e 100644 --- a/platform/marvell-armhf/platform.conf +++ b/platform/marvell-armhf/platform.conf @@ -6,9 +6,9 @@ echo "Preparing for installation ... " # global defines kernel_addr=0x1100000 -fdt_addr=0x1000000 -fdt_high=0x10fffff -initrd_addr=0x2000000 +fdt_addr=0x2800000 +fdt_high=0x28fffff +initrd_addr=0x2900000 kernel_fname="/boot/vmlinuz-5.10.0-12-2-armmp" initrd_fname="/boot/initrd.img-5.10.0-12-2-armmp" From 9c6b9c95633f7f6b6350a2c77e010e9137e4fb78 Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Thu, 7 Jul 2022 12:37:57 +0800 Subject: [PATCH 099/259] [Build] Fix the missing debian package for reproducible build issue (#11333) Why I did it Fix the missing debian package for reproducible build issue. The gnupg2 should be added into the version file. https://dev.azure.com/mssonic/build/_build/results?buildId=118139&view=logs&j=88ce9a53-729c-5fa9-7b6e-3d98f2488e3f&t=8d99be27-49d0-54d0-99b1-cfc0d47f0318 The following packages have unmet dependencies: gnupg2 : Depends: gnupg (>= 2.2.27-2+deb11u2) but 2.2.27-2+deb11u1 is to be installed E: Unable to correct problems, you have held broken packages. The issue was caused by the gnupg2 removed, and not detected. sonic-buildimage/build_debian.sh Line 250 in 4fb6cf0 sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y remove software-properties-common gnupg2 python3-gi How I did it Export the debian packages when any debian package being removed. --- src/sonic-build-hooks/hooks/apt-get | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-build-hooks/hooks/apt-get b/src/sonic-build-hooks/hooks/apt-get index bdff703d01d7..068293a3e352 100755 --- a/src/sonic-build-hooks/hooks/apt-get +++ b/src/sonic-build-hooks/hooks/apt-get @@ -20,7 +20,7 @@ if [ "$INSTALL" == y ]; then [ "$lock_result" == y ] && release_apt_installation_lock exit $command_result else - if [[ "$1" == "purge" || "$@" == *" purge "* ]]; then + if [[ "$1" == "purge" || "$@" == *" purge "* || "$@" == *" remove "* ]]; then # When running the purge command, collect the debian versions dpkg-query -W -f '${Package}==${Version}\n' >> $POST_VERSION_PATH/purge-versions-deb chmod a+wr $POST_VERSION_PATH/purge-versions-deb From be4501493e5e83d262f82c3f96986d16a46163ae Mon Sep 17 00:00:00 2001 From: Liu Shilong Date: Fri, 8 Jul 2022 14:27:29 +0800 Subject: [PATCH 100/259] [ci] Fix test stage dependency issue. (#11386) (#11390) Why I did it When any of the test job failed in the test stage, the rerun will not work, the test stage will be skipped automaticall, so we do not have chance to rerun the test stage again, and the checks of the test will be always in failed status, block the PR to merge forever. It should be caused by the condition in the Test stage, we should specify the status of the BuildVS stage. How I did it Fix stage dependency logic. --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 4cf0e71db56d..7c171da9f279 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -77,7 +77,7 @@ stages: - stage: Test dependsOn: BuildVS - condition: and(ne(stageDependencies.BuildVS.outputs['vs.SetVar.SKIP_VSTEST'], 'YES'), succeeded()) + condition: and(ne(stageDependencies.BuildVS.outputs['vs.SetVar.SKIP_VSTEST'], 'YES'), in(dependencies.BuildVS.result, 'Succeeded', 'SucceededWithIssues')) variables: - name: inventory value: veos_vtb From 0fb00ff90cb362de4c0ca34d5c689b9085557466 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Fri, 8 Jul 2022 22:27:03 +0800 Subject: [PATCH 101/259] [ci/build]: Upgrade SONiC package versions (#11396) --- .../versions-deb-bullseye | 34 ++++++++--------- .../build-sonic-slave-bullseye/versions-git | 6 +-- .../build-sonic-slave-buster/versions-git | 2 +- files/build/versions/default/versions-git | 8 ++-- files/build/versions/default/versions-web | 8 ++-- .../versions-deb-bullseye | 18 ++++----- .../docker-platform-monitor/versions-py3 | 2 +- .../dockers/docker-sflow/versions-deb-buster | 2 +- .../docker-sonic-mgmt-framework/versions-py3 | 2 +- .../dockers/docker-sonic-vs/versions-py2 | 2 +- .../dockers/docker-sonic-vs/versions-py3 | 2 +- .../docker-syncd-mlnx-rpc/versions-py2 | 2 +- .../docker-syncd-mlnx/versions-deb-bullseye | 38 +++++++++---------- .../dockers/docker-syncd-mlnx/versions-py3 | 2 +- .../versions-deb-buster-armhf | 2 +- .../versions-deb-bullseye-arm64 | 2 +- .../versions-deb-bullseye-armhf | 2 +- .../dockers/sonic-slave-bullseye/versions-git | 2 +- .../versions-deb-buster-arm64 | 2 +- .../versions-deb-buster-armhf | 2 +- .../dockers/sonic-slave-buster/versions-git | 2 +- .../dockers/sonic-slave-stretch/versions-git | 2 +- .../versions/host-image/versions-deb-bullseye | 4 +- files/build/versions/host-image/versions-py3 | 4 +- 24 files changed, 77 insertions(+), 75 deletions(-) diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye index be1f76de9fc3..62b2ca30f3c9 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye @@ -1,6 +1,6 @@ -applibs==1.mlnx.4.5.1500 -applibs-dev==1.mlnx.4.5.1500 -iproute2-dev==1.mlnx.4.5.1500 +applibs==1.mlnx.4.5.2262 +applibs-dev==1.mlnx.4.5.2262 +iproute2-dev==1.mlnx.4.5.2262 isc-dhcp-relay==4.4.1-2.3 kernel-mft-dkms==4.20.0-34 libhiredis-dev==0.14.0-3~bpo9+1 @@ -48,20 +48,20 @@ sonic-mgmt-common-codegen==1.0.0 sonic-platform-pddf==1.1 sonic-platform-pddf-sym==1.1 swss==1.0.0 -sx-acl-helper==1.mlnx.4.5.1500 -sx-acl-helper-dev==1.mlnx.4.5.1500 -sx-complib==1.mlnx.4.5.1500 -sx-complib-dev==1.mlnx.4.5.1500 -sx-examples==1.mlnx.4.5.1500 -sx-examples-dev==1.mlnx.4.5.1500 -sx-gen-utils==1.mlnx.4.5.1500 -sx-gen-utils-dev==1.mlnx.4.5.1500 -sx-scew==1.mlnx.4.5.1500 -sx-scew-dev==1.mlnx.4.5.1500 -sxd-libs==1.mlnx.4.5.1500 -sxd-libs-dev==1.mlnx.4.5.1500 +sx-acl-helper==1.mlnx.4.5.2262 +sx-acl-helper-dev==1.mlnx.4.5.2262 +sx-complib==1.mlnx.4.5.2262 +sx-complib-dev==1.mlnx.4.5.2262 +sx-examples==1.mlnx.4.5.2262 +sx-examples-dev==1.mlnx.4.5.2262 +sx-gen-utils==1.mlnx.4.5.2262 +sx-gen-utils-dev==1.mlnx.4.5.2262 +sx-scew==1.mlnx.4.5.2262 +sx-scew-dev==1.mlnx.4.5.2262 +sxd-libs==1.mlnx.4.5.2262 +sxd-libs-dev==1.mlnx.4.5.2262 syncd==1.0.0 thrift-compiler==0.11.0-4 -wjh-libs==1.mlnx.4.5.1500 -wjh-libs-dev==1.mlnx.4.5.1500 +wjh-libs==1.mlnx.4.5.2262 +wjh-libs-dev==1.mlnx.4.5.2262 wpasupplicant==2:2.9.0-14 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-git b/files/build/versions/build/build-sonic-slave-bullseye/versions-git index e9894c1803a3..a3ff0704340b 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-git +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-git @@ -1,12 +1,12 @@ https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b -https://github.com/flashrom/flashrom.git==1cea47eac2f1225a42467a91b239ea09fe3dd3e7 -https://github.com/FreeRADIUS/freeradius-server.git==a6cbdd1003b3253bf22dde6cbefb6dd00d5ce105 +https://github.com/flashrom/flashrom.git==65159ea93997da065b2f8867532a6a54bf7f58f1 +https://github.com/FreeRADIUS/freeradius-server.git==d7c252885394603f45a569725eca2128e04a46b4 https://github.com/FreeRADIUS/pam_radius.git==5e67868520e90a489626928f28c0befa531bf7d2 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 -https://github.com/thom311/libnl==44988e648cd5c9f912148e8b138776064797f49d +https://github.com/thom311/libnl==3399f520bae2231c5b6a6c2adce52b383292c520 https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b61368d4c5 https://salsa.debian.org/kernel-team/ethtool/==5ead2b58847600ea0ccd0aa76b5bedce678f17ee https://salsa.debian.org/kernel-team/initramfs-tools.git==9a4d579050b7221e8a5e4be7160e8cab25c3065b diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-git b/files/build/versions/build/build-sonic-slave-buster/versions-git index 329b8bc824a9..f61a89afba4a 100644 --- a/files/build/versions/build/build-sonic-slave-buster/versions-git +++ b/files/build/versions/build/build-sonic-slave-buster/versions-git @@ -3,5 +3,5 @@ https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 https://github.com/Mellanox/libpsample.git==62bb27d9a49424e45191eee81df7ce0d8c74e774 https://github.com/sflow/host-sflow==4ff2a940848fa9244a289f9c96fd9681d31a0264 https://github.com/sflow/sflowtool==5307b19399ffb0a1a873c9d09e78cb5011deaf6f -https://github.com/thom311/libnl==44988e648cd5c9f912148e8b138776064797f49d +https://github.com/thom311/libnl==3399f520bae2231c5b6a6c2adce52b383292c520 https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b61368d4c5 \ No newline at end of file diff --git a/files/build/versions/default/versions-git b/files/build/versions/default/versions-git index c803b5c15fc7..36d4e0f347f9 100644 --- a/files/build/versions/default/versions-git +++ b/files/build/versions/default/versions-git @@ -1,11 +1,11 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==78c53d11a01f8439b37010289e8bbdb139942d57 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==bb07d9eb0bf63e49b0f7f78b262fdf46927ed002 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b https://github.com/dyninc/OpenBFDD.git==e35f43ad8d2b3f084e96a84c392528a90d05a287 -https://github.com/flashrom/flashrom.git==1cea47eac2f1225a42467a91b239ea09fe3dd3e7 -https://github.com/FreeRADIUS/freeradius-server.git==a6cbdd1003b3253bf22dde6cbefb6dd00d5ce105 +https://github.com/flashrom/flashrom.git==65159ea93997da065b2f8867532a6a54bf7f58f1 +https://github.com/FreeRADIUS/freeradius-server.git==d7c252885394603f45a569725eca2128e04a46b4 https://github.com/FreeRADIUS/pam_radius.git==5e67868520e90a489626928f28c0befa531bf7d2 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 @@ -15,7 +15,7 @@ https://github.com/Mellanox/libpsample.git==62bb27d9a49424e45191eee81df7ce0d8c74 https://github.com/p4lang/scapy-vxlan.git==85ffe83da156568ee47a0750f638227e6e1d7479 https://github.com/sflow/host-sflow==4ff2a940848fa9244a289f9c96fd9681d31a0264 https://github.com/sflow/sflowtool==5307b19399ffb0a1a873c9d09e78cb5011deaf6f -https://github.com/thom311/libnl==44988e648cd5c9f912148e8b138776064797f49d +https://github.com/thom311/libnl==3399f520bae2231c5b6a6c2adce52b383292c520 https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b61368d4c5 https://salsa.debian.org/kernel-team/ethtool/==5ead2b58847600ea0ccd0aa76b5bedce678f17ee https://salsa.debian.org/kernel-team/initramfs-tools.git==9a4d579050b7221e8a5e4be7160e8cab25c3065b diff --git a/files/build/versions/default/versions-web b/files/build/versions/default/versions-web index 4d9bdd8e4e25..098b884ecc8e 100644 --- a/files/build/versions/default/versions-web +++ b/files/build/versions/default/versions-web @@ -32,10 +32,10 @@ https://deb.debian.org/debian/pool/main/k/kdump-tools/kdump-tools_1.6.8.4.dsc==f https://deb.debian.org/debian/pool/main/k/kdump-tools/kdump-tools_1.6.8.4.tar.xz==26bcae7c27b729d614a4a85e2a01cb64 https://deb.nodesource.com/gpgkey/nodesource.gpg.key==003b51a89a133b5db4cca98b2dea3117 https://deb.nodesource.com/node_10.x/dists/stretch/Release==22738118af583db3bfad39d6fcb4fa5a -https://deb.nodesource.com/node_14.x/dists/bullseye/Release==42c7518e62764ce594c0dc7dc593d20a -https://deb.nodesource.com/node_14.x/dists/buster/Release==6b181b4ad151ab26c7c7738ec8534ed3 +https://deb.nodesource.com/node_14.x/dists/bullseye/Release==e5d99d3f369b50a7b0290811926de82a +https://deb.nodesource.com/node_14.x/dists/buster/Release==2c6b9d29a3e20816e0ed35475d52e0d3 https://deb.nodesource.com/setup_10.x==6742c0148159980e8f6e886df1f8bbe1 -https://deb.nodesource.com/setup_14.x==3fb63a2bd38414a2b249fa9b3dbbbc3e +https://deb.nodesource.com/setup_14.x==badb28cf0604d9ff24c5fc3396b594d4 https://download.docker.com/linux/debian/gpg==1afae06b34a13c1b3d9cb61a26285a15 https://github.com/barefootnetworks/sonic-release-pkgs/raw/dev/bfnplatform_20220408_sai_1.9.1_deb10.deb==890a53ca1374dfcf8c12091d74fd2ef8 https://github.com/barefootnetworks/sonic-release-pkgs/raw/dev/bfnsdk_20220408_sai_1.9.1_deb10.deb==a54c351ee84ddb63837085272a1c4eae @@ -46,7 +46,7 @@ https://github.com/CentecNetworks/sonic-binaries/raw/master/amd64/third_party/ad https://github.com/CentecNetworks/sonic-binaries/raw/master/amd64/third_party/advantech/libSUSI-4.00.so.1==393a94b0abba146777e276e1febe0cb0 https://github.com/CentecNetworks/sonic-binaries/raw/master/arm64/sai/libsai_1.9.1-0_arm64.deb==c354c766cc763a5af621a88637b9e126 https://github.com/CumulusNetworks/ifupdown2/archive/3.0.0-1.tar.gz==755459b3a58fbc11625336846cea7420 -https://github.com/Marvell-switching/sonic-marvell-binaries/raw/master/armhf/sai-plugin/mrvllibsai_1.9.1-2_armhf.deb==41989b6336eaca539d81981ce82df2d4 +https://github.com/Marvell-switching/sonic-marvell-binaries/raw/master/armhf/sai-plugin/mrvllibsai_1.10.2-1_armhf.deb==6d75ab5ec102247fd42aed43b4bf5da6 https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz==6f56ef28c93cee644e8c4aaaef7cfb55 https://launchpad.net/debian/+archive/primary/+sourcefiles/bash/5.1-2/bash_5.1-2.debian.tar.xz==9d0cbd5f463f461c840c95f62a64d61b https://launchpad.net/debian/+archive/primary/+sourcefiles/bash/5.1-2/bash_5.1-2.dsc==be44c5a9fc12fb567a486f54b842dd9e diff --git a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye index 0ea377e477ee..25acf7e601e0 100644 --- a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye @@ -1,5 +1,5 @@ -applibs==1.mlnx.4.5.1500 -applibs-dev==1.mlnx.4.5.1500 +applibs==1.mlnx.4.5.2262 +applibs-dev==1.mlnx.4.5.2262 binutils==2.35.2-2 binutils-common==2.35.2-2 binutils-x86-64-linux-gnu==2.35.2-2 @@ -109,7 +109,7 @@ openssh-client==1:8.4p1-5 patch==2.7.6-7 pci.ids==0.0~2021.02.08-1 psmisc==23.4-2 -python-sdk-api==1.mlnx.4.5.1500 +python-sdk-api==1.mlnx.4.5.2262 python3-attr==20.3.0-1 python3-dev==3.9.2-3 python3-importlib-metadata==1.6.0-2 @@ -128,12 +128,12 @@ sensord==1:3.6.0-7 sensord-dbgsym==1:3.6.0-7 sshpass==1.09-1+b1 strace==5.10-1 -sx-complib==1.mlnx.4.5.1500 -sx-complib-dev==1.mlnx.4.5.1500 -sx-gen-utils==1.mlnx.4.5.1500 -sx-gen-utils-dev==1.mlnx.4.5.1500 -sxd-libs==1.mlnx.4.5.1500 -sxd-libs-dev==1.mlnx.4.5.1500 +sx-complib==1.mlnx.4.5.2262 +sx-complib-dev==1.mlnx.4.5.2262 +sx-gen-utils==1.mlnx.4.5.2262 +sx-gen-utils-dev==1.mlnx.4.5.2262 +sxd-libs==1.mlnx.4.5.2262 +sxd-libs-dev==1.mlnx.4.5.2262 ucf==3.0043 udev==247.3-7 vim==2:8.2.2434-3+deb11u1 diff --git a/files/build/versions/dockers/docker-platform-monitor/versions-py3 b/files/build/versions/dockers/docker-platform-monitor/versions-py3 index dd2f1421b9c2..0a94d51f227f 100644 --- a/files/build/versions/dockers/docker-platform-monitor/versions-py3 +++ b/files/build/versions/dockers/docker-platform-monitor/versions-py3 @@ -6,6 +6,6 @@ jsonschema==2.6.0 more-itertools==4.2.0 protobuf==3.20.1 pyrsistent==0.15.5 -python_sdk_api==4.5.1500 +python_sdk_api==4.5.2262 thrift==0.13.0 zipp==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sflow/versions-deb-buster b/files/build/versions/dockers/docker-sflow/versions-deb-buster index 422ff6f697f2..1e34d8c7a353 100644 --- a/files/build/versions/dockers/docker-sflow/versions-deb-buster +++ b/files/build/versions/dockers/docker-sflow/versions-deb-buster @@ -1,7 +1,7 @@ dmidecode==3.2-1 gdb==8.2.1-2+b3 gdbserver==8.2.1-2+b3 -hsflowd==2.0.34-1 +hsflowd==2.0.35-1 libbabeltrace1==1.5.6-2+deb10u1 libbsd0==0.9.1-2+deb10u1 libdw1==0.176-1.1 diff --git a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 index c07300965a59..2bd6203dbd5b 100644 --- a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 +++ b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 @@ -12,7 +12,7 @@ importlib-metadata==4.12.0 importlib-resources==5.8.0 inflection==0.5.1 itsdangerous==2.1.2 -jsonschema==4.6.1 +jsonschema==4.6.2 openapi-schema-validator==0.2.3 openapi-spec-validator==0.4.0 protobuf==4.21.2 diff --git a/files/build/versions/dockers/docker-sonic-vs/versions-py2 b/files/build/versions/dockers/docker-sonic-vs/versions-py2 index d6a13c7bdda0..1db34fe35214 100644 --- a/files/build/versions/dockers/docker-sonic-vs/versions-py2 +++ b/files/build/versions/dockers/docker-sonic-vs/versions-py2 @@ -10,4 +10,4 @@ pyroute2==0.5.3 requests==2.27.1 scapy==2.4.0 six==1.16.0 -urllib3==1.26.9 \ No newline at end of file +urllib3==1.26.10 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-vs/versions-py3 b/files/build/versions/dockers/docker-sonic-vs/versions-py3 index 6202703cca85..8f38fca76681 100644 --- a/files/build/versions/dockers/docker-sonic-vs/versions-py3 +++ b/files/build/versions/dockers/docker-sonic-vs/versions-py3 @@ -28,7 +28,7 @@ semantic-version==2.10.0 systemd-python==234 tabulate==0.8.2 toposort==1.6 -urllib3==1.26.9 +urllib3==1.26.10 wcwidth==0.2.5 websocket-client==1.3.3 www-authenticate==0.9.2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-py2 b/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-py2 index 7201952ab7cd..a5b2ed3215dd 100644 --- a/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-py2 +++ b/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-py2 @@ -2,5 +2,5 @@ cffi==1.7.0 nnpy==1.4.2 ptf==0.9.1 pycparser==2.21 -python-sdk-api==4.5.1500 +python-sdk-api==4.5.2262 scapy==2.4.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye index 7cc5d44a5e97..2b85184c8461 100644 --- a/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye @@ -1,8 +1,8 @@ -applibs==1.mlnx.4.5.1500 -applibs-dev==1.mlnx.4.5.1500 +applibs==1.mlnx.4.5.2262 +applibs-dev==1.mlnx.4.5.2262 gdb==10.1-1.7 gdbserver==10.1-1.7 -iproute2-dev==1.mlnx.4.5.1500 +iproute2-dev==1.mlnx.4.5.2262 libbabeltrace1==1.5.8-1+b3 libboost-regex1.74.0==1.74.0-9 libc-dev-bin==2.31-13+deb11u3 @@ -39,11 +39,11 @@ libunwind8==1.3.2-2 libxml2==2.9.10+dfsg-6.7+deb11u2 linux-libc-dev==5.10.120-1 mft==4.20.0-34 -mlnx-sai==1.mlnx.SAIRel1.21.1.0 +mlnx-sai==1.mlnx.SAIRel1.21.2.0 openssh-client==1:8.4p1-5 python-is-python3==3.9.2-1 python-pip-whl==20.3.4-4+deb11u1 -python-sdk-api==1.mlnx.4.5.1500 +python-sdk-api==1.mlnx.4.5.2262 python3-dev==3.9.2-3 python3-pip==20.3.4-4+deb11u1 python3-pkg-resources==52.0.0-4 @@ -52,22 +52,22 @@ python3-wheel==0.34.2-1 python3.9-dev==3.9.2-1 sshpass==1.09-1+b1 strace==5.10-1 -sx-acl-helper==1.mlnx.4.5.1500 -sx-acl-helper-dev==1.mlnx.4.5.1500 -sx-complib==1.mlnx.4.5.1500 -sx-complib-dev==1.mlnx.4.5.1500 -sx-examples==1.mlnx.4.5.1500 -sx-examples-dev==1.mlnx.4.5.1500 -sx-gen-utils==1.mlnx.4.5.1500 -sx-gen-utils-dev==1.mlnx.4.5.1500 -sx-scew==1.mlnx.4.5.1500 -sx-scew-dev==1.mlnx.4.5.1500 -sxd-libs==1.mlnx.4.5.1500 -sxd-libs-dev==1.mlnx.4.5.1500 +sx-acl-helper==1.mlnx.4.5.2262 +sx-acl-helper-dev==1.mlnx.4.5.2262 +sx-complib==1.mlnx.4.5.2262 +sx-complib-dev==1.mlnx.4.5.2262 +sx-examples==1.mlnx.4.5.2262 +sx-examples-dev==1.mlnx.4.5.2262 +sx-gen-utils==1.mlnx.4.5.2262 +sx-gen-utils-dev==1.mlnx.4.5.2262 +sx-scew==1.mlnx.4.5.2262 +sx-scew-dev==1.mlnx.4.5.2262 +sxd-libs==1.mlnx.4.5.2262 +sxd-libs-dev==1.mlnx.4.5.2262 syncd==1.0.0 syncd-dbg==1.0.0 vim==2:8.2.2434-3+deb11u1 vim-runtime==2:8.2.2434-3+deb11u1 -wjh-libs==1.mlnx.4.5.1500 -wjh-libs-dev==1.mlnx.4.5.1500 +wjh-libs==1.mlnx.4.5.2262 +wjh-libs-dev==1.mlnx.4.5.2262 zlib1g-dev==1:1.2.11.dfsg-2+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mlnx/versions-py3 b/files/build/versions/dockers/docker-syncd-mlnx/versions-py3 index c46d8d44f0cf..585326d2ef8c 100644 --- a/files/build/versions/dockers/docker-syncd-mlnx/versions-py3 +++ b/files/build/versions/dockers/docker-syncd-mlnx/versions-py3 @@ -1 +1 @@ -python_sdk_api==4.5.1500 \ No newline at end of file +python_sdk_api==4.5.2262 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-buster-armhf b/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-buster-armhf index 17631314c5d7..0e5655940cd3 100644 --- a/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-buster-armhf +++ b/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-buster-armhf @@ -22,7 +22,7 @@ libsensors4-dev==1:3.5.0-3 libsensors5==1:3.5.0-3 libtirpc-common==1.1.4-0.4 libtirpc3==1.1.4-0.4 -mrvllibsai==1.9.1-2 +mrvllibsai==1.10.2-1 nfs-common==1:1.3.4-2.5+deb10u1 python==2.7.16-1 python-dev==2.7.16-1 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 index 8c9505207b4a..0413fb3629b2 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 @@ -19,4 +19,4 @@ libubsan1-armhf-cross==10.2.1-6cross1 libxslt1-dev==1.1.34-4 linux-headers-5.10.0-15-arm64==5.10.120-1 linux-headers-arm64==5.10.120-1 -nodejs==14.19.3-deb-1nodesource1 \ No newline at end of file +nodejs==14.20.0-deb-1nodesource1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf index 02b7b82e17a1..6d5c16f1bcf5 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf @@ -47,7 +47,7 @@ linux-compiler-gcc-10-arm==5.10.120-1 linux-headers-5.10.0-15-armmp==5.10.120-1 linux-headers-armmp==5.10.120-1 mat2==0.12.1-2 -nodejs==14.19.3-deb-1nodesource1 +nodejs==14.20.0-deb-1nodesource1 ps2eps==1.68+binaryfree-3 python3-cairo==1.16.2-4+b2 python3-gi-cairo==3.38.0-2 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-git b/files/build/versions/dockers/sonic-slave-bullseye/versions-git index c37b4e348e98..2e5476eb866b 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-git +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==78c53d11a01f8439b37010289e8bbdb139942d57 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==bb07d9eb0bf63e49b0f7f78b262fdf46927ed002 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-arm64 b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-arm64 index c04653adb0f4..ae8f49c2dc58 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-arm64 +++ b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-arm64 @@ -4,4 +4,4 @@ libdrm-freedreno1==2.4.97-1 libdrm-tegra0==2.4.97-1 libtext-iconv-perl==1.7-5+b6 libxslt1-dev==1.1.32-2.2~deb10u1 -nodejs==14.19.3-deb-1nodesource1 \ No newline at end of file +nodejs==14.20.0-deb-1nodesource1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-armhf b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-armhf index 648627cb4e1a..a994f5f0fe27 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-armhf +++ b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-armhf @@ -103,7 +103,7 @@ linux-compiler-gcc-8-arm==4.19.249-2 llvm-6.0==1:6.0.1-10 llvm-6.0-dev==1:6.0.1-10 llvm-6.0-runtime==1:6.0.1-10 -nodejs==14.19.3-deb-1nodesource1 +nodejs==14.20.0-deb-1nodesource1 ps2eps==1.68+binaryfree-2 rdfind==1.4.1-1 sassc==3.5.0-1 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-git b/files/build/versions/dockers/sonic-slave-buster/versions-git index c37b4e348e98..2e5476eb866b 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-git +++ b/files/build/versions/dockers/sonic-slave-buster/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==78c53d11a01f8439b37010289e8bbdb139942d57 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==bb07d9eb0bf63e49b0f7f78b262fdf46927ed002 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-git b/files/build/versions/dockers/sonic-slave-stretch/versions-git index c37b4e348e98..2e5476eb866b 100644 --- a/files/build/versions/dockers/sonic-slave-stretch/versions-git +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==78c53d11a01f8439b37010289e8bbdb139942d57 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==bb07d9eb0bf63e49b0f7f78b262fdf46927ed002 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/host-image/versions-deb-bullseye b/files/build/versions/host-image/versions-deb-bullseye index 344dfcaf6e41..f004beea9460 100644 --- a/files/build/versions/host-image/versions-deb-bullseye +++ b/files/build/versions/host-image/versions-deb-bullseye @@ -59,6 +59,7 @@ gir1.2-packagekitglib-1.0==1.2.2-2 gnupg==2.2.27-2+deb11u2 gnupg-l10n==2.2.27-2+deb11u2 gnupg-utils==2.2.27-2+deb11u2 +gnupg2==2.2.27-2+deb11u2 gobject-introspection==1.66.1-1+b1 gpg==2.2.27-2+deb11u2 gpg-agent==2.2.27-2+deb11u2 @@ -344,6 +345,7 @@ python3-apt==2.2.1 python3-dbus==1.2.16-5 python3-dev==3.9.2-3 python3-distutils==3.9.2-1 +python3-gi==3.38.0-2 python3-lib2to3==3.9.2-1 python3-mako==1.1.3+ds1-2 python3-markdown==3.3.4-1 @@ -377,7 +379,7 @@ squashfs-tools==1:4.4-2+deb11u2 sudo==1.9.5p2-3 swig==4.0.2-1 swig4.0==4.0.2-1 -sx-kernel==1.mlnx.4.5.1500 +sx-kernel==1.mlnx.4.5.2262 symcrypt-openssl==0.1 sysfsutils==2.1.0+repack-7 systemd==247.3-7 diff --git a/files/build/versions/host-image/versions-py3 b/files/build/versions/host-image/versions-py3 index 20e0e348cbd2..9e9ede3b48fb 100644 --- a/files/build/versions/host-image/versions-py3 +++ b/files/build/versions/host-image/versions-py3 @@ -9,7 +9,7 @@ charset-normalizer==2.1.0 click==7.0 click-log==0.4.0 colorful==0.5.4 -cryptography==37.0.2 +cryptography==37.0.4 dbus-python==1.2.16 docker==5.0.3 docker-image-py==0.1.12 @@ -62,7 +62,7 @@ systemd-python==234 tabulate==0.8.2 thrift==0.13.0 toposort==1.6 -urllib3==1.26.9 +urllib3==1.26.10 watchdog==0.10.3 wcwidth==0.2.5 websocket-client==1.3.3 From f98814db30f54ee3c4f574589ed0bbf0ecd0fce0 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Sat, 9 Jul 2022 07:57:03 -0700 Subject: [PATCH 102/259] [202205][utilities][platform-daemon] advance submodule head (#11384) utilities: * 9f496a0 2022-07-06 | Update load minigraph to load backend acl (#2236) (HEAD -> 202205, github/202205) [Neetha John] * ea938e3 2022-07-07 | Add support for IP interface loopback action (#2192) [Lior Avramov] * a0b04de 2022-07-07 | [show] add new CLI to show tunnel route objects (#2255) [Jing Zhang] platform-daemon: * e03d6a9 2022-07-06 | [ycabled][grpc] Fix some time interval,options for grpc keep alive to work (#271) (HEAD -> 202205, github/202205) [vdahiya12] Signed-off-by: Ying Xie --- src/sonic-platform-daemons | 2 +- src/sonic-utilities | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index 547acc062409..e03d6a931db8 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit 547acc062409f8da32b93a8f162b18d73b0ce52b +Subproject commit e03d6a931db8eab375a67a6377753c8cdf21ee2f diff --git a/src/sonic-utilities b/src/sonic-utilities index 7dae15271733..9f496a033b20 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 7dae1527173327295d2d484cf4de675bc71e49d2 +Subproject commit 9f496a033b2051e56f54af7ad3a79be1966d50f9 From 2b086eb4294731e64faa89774d06eb0a96693c42 Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Mon, 11 Jul 2022 19:22:46 +0800 Subject: [PATCH 103/259] [Bug]: fix the version file name issue (#11072) (#11415) Why I did it Cherry pick PR: #11072 [Bug]: fix the version file name issue Why I did it [Bug]: fix the version file name issue Fix the build failure: https://dev.azure.com/mssonic/build/_build/results?buildId=107211&view=results + scripts/build_debian_base_system.sh amd64 bullseye ./fsroot-centec sed: can't read /tmp/tmp.glTzJefV24/version-deb: No such file or directory Not found host-base-image packages, please check the version files in files/build/versions/host-base-image How I did it Change the version-deb, to versions-deb And add an improvement for host base image build, if the version path not exist, skipped the version control for base image. How to verify it https://dev.azure.com/mssonic/build/_build/results?buildId=107587&view=results --- scripts/build_debian_base_system.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build_debian_base_system.sh b/scripts/build_debian_base_system.sh index 0e00eeeac532..a403791e5242 100755 --- a/scripts/build_debian_base_system.sh +++ b/scripts/build_debian_base_system.sh @@ -21,7 +21,7 @@ generate_version_file() sudo LANG=C chroot $FILESYSTEM_ROOT /bin/bash -c "dpkg-query -W -f '\${Package}==\${Version}\n'" > $TARGET_BASEIMAGE_PATH/versions-deb-${IMAGE_DISTRO}-${CONFIGURED_ARCH} } -if [ "$ENABLE_VERSION_CONTROL_DEB" != "y" ]; then +if [ "$ENABLE_VERSION_CONTROL_DEB" != "y" ] || [ ! -d files/build/versions/host-base-image ]; then if [[ $CONFIGURED_ARCH == armhf || $CONFIGURED_ARCH == arm64 ]]; then if [ $MULTIARCH_QEMU_ENVIRON == "y" ]; then # qemu arm bin executable for cross-building @@ -55,7 +55,7 @@ fi # Generate the version files for the host base image TEMP_DIR=$(mktemp -d) ./scripts/versions_manager.py generate -t $TEMP_DIR -n host-base-image -d $IMAGE_DISTRO -a $CONFIGURED_ARCH -PACKAGES=$(sed -E 's/=(=[^=]*)$/\1/' $TEMP_DIR/version-deb) +PACKAGES=$(sed -E 's/=(=[^=]*)$/\1/' $TEMP_DIR/versions-deb) if [ -z "$PACKAGES" ]; then echo "Not found host-base-image packages, please check the version files in files/build/versions/host-base-image" 2>&1 exit 1 From 4000453af34ce7e51234091ac3037832a12ff554 Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Mon, 11 Jul 2022 22:30:00 +0800 Subject: [PATCH 104/259] Upgrade openssh to 8.4p1-5+deb11u1 (#11408) Why I did it Cherry-pick: #11405 Fix the openssh build issue, upgrade from 8.4p1-5 to 8.4p1-5+deb11u1. https://dev.azure.com/mssonic/build/_build/results?buildId=120209&view=logs&j=88ce9a53-729c-5fa9-7b6e-3d98f2488e3f&t=8d99be27-49d0-54d0-99b1-cfc0d47f0318 + sudo dpkg --root=./fsroot-broadcom -i target/debs/bullseye/openssh-server_8.4p1-5_amd64.deb dpkg: warning: downgrading openssh-server from 1:8.4p1-5+deb11u1 to 1:8.4p1-5 (Reading database ... 44818 files and directories currently installed.) Preparing to unpack .../openssh-server_8.4p1-5_amd64.deb ... Unpacking openssh-server (1:8.4p1-5) over (1:8.4p1-5+deb11u1) ... dpkg: dependency problems prevent configuration of openssh-server: openssh-server depends on openssh-client (= 1:8.4p1-5); however: Version of openssh-client on system is 1:8.4p1-5+deb11u1. dpkg: error processing package openssh-server (--install): dependency problems - leaving unconfigured Errors were encountered while processing: openssh-server + clean_sys How I did it Upgrade openssh from 8.4p1-5 to 8.4p1-5+deb11u1. --- rules/openssh.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/openssh.mk b/rules/openssh.mk index 0e4696ed9d27..53438b76ab73 100644 --- a/rules/openssh.mk +++ b/rules/openssh.mk @@ -1,6 +1,6 @@ # openssh package -OPENSSH_VERSION = 8.4p1-5 +OPENSSH_VERSION = 8.4p1-5+deb11u1 export OPENSSH_VERSION From 9494b724e39e57f021f520a23b09632333bec48b Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Tue, 26 Apr 2022 21:26:52 +0000 Subject: [PATCH 105/259] [buffer] create infrastructure to enable buffer/QoS profiles Signed-off-by: Ying Xie --- .../Celestica-DX010-C32/BALANCED | 1 + .../Celestica-DX010-C32/RDMA-CENTRIC | 1 + .../Celestica-DX010-C32/TCP-CENTRIC | 1 + .../Celestica-DX010-C32/buffer_ports_t0.j2 | 13 +++++ .../Celestica-DX010-C32/buffer_ports_t1.j2 | 13 +++++ .../buffers_defaults_t0.j2 | 55 +------------------ .../buffers_defaults_t1.j2 | 55 +------------------ .../Celestica-DX010-C32/pg_profile_lookup.ini | 18 +----- .../Celestica-DX010-C32/qos.json.j2 | 22 +------- .../th/gen/BALANCED/buffers_defaults_t0.j2 | 41 ++++++++++++++ .../th/gen/BALANCED/buffers_defaults_t1.j2 | 41 ++++++++++++++ .../th/gen/BALANCED/pg_profile_lookup.ini | 17 ++++++ .../profiles/th/gen/BALANCED/qos.json.j2 | 21 +++++++ .../gen/RDMA-CENTRIC/buffers_defaults_t0.j2 | 41 ++++++++++++++ .../gen/RDMA-CENTRIC/buffers_defaults_t1.j2 | 41 ++++++++++++++ .../th/gen/RDMA-CENTRIC/pg_profile_lookup.ini | 17 ++++++ .../profiles/th/gen/RDMA-CENTRIC/qos.json.j2 | 21 +++++++ device/common/profiles/th/gen/TCP-CENTRIC | 1 + 18 files changed, 274 insertions(+), 146 deletions(-) create mode 120000 device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/BALANCED create mode 120000 device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/RDMA-CENTRIC create mode 120000 device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/TCP-CENTRIC create mode 100644 device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffer_ports_t0.j2 create mode 100644 device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffer_ports_t1.j2 mode change 100644 => 120000 device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffers_defaults_t0.j2 mode change 100644 => 120000 device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffers_defaults_t1.j2 mode change 100644 => 120000 device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/pg_profile_lookup.ini mode change 100644 => 120000 device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/qos.json.j2 create mode 100644 device/common/profiles/th/gen/BALANCED/buffers_defaults_t0.j2 create mode 100644 device/common/profiles/th/gen/BALANCED/buffers_defaults_t1.j2 create mode 100644 device/common/profiles/th/gen/BALANCED/pg_profile_lookup.ini create mode 100644 device/common/profiles/th/gen/BALANCED/qos.json.j2 create mode 100644 device/common/profiles/th/gen/RDMA-CENTRIC/buffers_defaults_t0.j2 create mode 100644 device/common/profiles/th/gen/RDMA-CENTRIC/buffers_defaults_t1.j2 create mode 100644 device/common/profiles/th/gen/RDMA-CENTRIC/pg_profile_lookup.ini create mode 100644 device/common/profiles/th/gen/RDMA-CENTRIC/qos.json.j2 create mode 120000 device/common/profiles/th/gen/TCP-CENTRIC diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/BALANCED b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/BALANCED new file mode 120000 index 000000000000..87afd08ffcd8 --- /dev/null +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/BALANCED @@ -0,0 +1 @@ +../../../common/profiles/th/gen/BALANCED \ No newline at end of file diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/RDMA-CENTRIC b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/RDMA-CENTRIC new file mode 120000 index 000000000000..a05581efb9ff --- /dev/null +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/RDMA-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th/gen/RDMA-CENTRIC \ No newline at end of file diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/TCP-CENTRIC b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/TCP-CENTRIC new file mode 120000 index 000000000000..dd9cf046c0f9 --- /dev/null +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/TCP-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th/gen/TCP-CENTRIC \ No newline at end of file diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffer_ports_t0.j2 b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffer_ports_t0.j2 new file mode 100644 index 000000000000..c33d873068a4 --- /dev/null +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffer_ports_t0.j2 @@ -0,0 +1,13 @@ +{%- set ports2cable = { + 'torrouter_server' : '300m', + 'leafrouter_torrouter' : '300m', + 'spinerouter_leafrouter' : '300m' + } +-%} + +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,32) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffer_ports_t1.j2 b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffer_ports_t1.j2 new file mode 100644 index 000000000000..c33d873068a4 --- /dev/null +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffer_ports_t1.j2 @@ -0,0 +1,13 @@ +{%- set ports2cable = { + 'torrouter_server' : '300m', + 'leafrouter_torrouter' : '300m', + 'spinerouter_leafrouter' : '300m' + } +-%} + +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,32) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffers_defaults_t0.j2 b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffers_defaults_t0.j2 deleted file mode 100644 index c90327229bbe..000000000000 --- a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffers_defaults_t0.j2 +++ /dev/null @@ -1,54 +0,0 @@ - -{%- set default_cable = '5m' %} - -{%- set ports2cable = { - 'torrouter_server' : '300m', - 'leafrouter_torrouter' : '300m', - 'spinerouter_leafrouter' : '300m' - } --%} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,32) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "10875072", - "type": "ingress", - "mode": "dynamic", - "xoff": "4194112" - }, - "egress_lossy_pool": { - "size": "9243812", - "type": "egress", - "mode": "dynamic" - }, - "egress_lossless_pool": { - "size": "15982720", - "type": "egress", - "mode": "static" - } - }, - "BUFFER_PROFILE": { - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "dynamic_th":"3" - }, - "egress_lossless_profile": { - "pool":"egress_lossless_pool", - "size":"1518", - "static_th":"15982720" - }, - "egress_lossy_profile": { - "pool":"egress_lossy_pool", - "size":"1518", - "dynamic_th":"3" - } - }, -{%- endmacro %} diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffers_defaults_t0.j2 b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffers_defaults_t0.j2 new file mode 120000 index 000000000000..9524e6a476ac --- /dev/null +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffers_defaults_t0.j2 @@ -0,0 +1 @@ +BALANCED/buffers_defaults_t0.j2 \ No newline at end of file diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffers_defaults_t1.j2 b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffers_defaults_t1.j2 deleted file mode 100644 index c79f848645cc..000000000000 --- a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffers_defaults_t1.j2 +++ /dev/null @@ -1,54 +0,0 @@ - -{%- set default_cable = '40m' %} - -{%- set ports2cable = { - 'torrouter_server' : '300m', - 'leafrouter_torrouter' : '300m', - 'spinerouter_leafrouter' : '300m' - } --%} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,32) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "10875072", - "type": "ingress", - "mode": "dynamic", - "xoff": "4194112" - }, - "egress_lossy_pool": { - "size": "9243812", - "type": "egress", - "mode": "dynamic" - }, - "egress_lossless_pool": { - "size": "15982720", - "type": "egress", - "mode": "static" - } - }, - "BUFFER_PROFILE": { - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "dynamic_th":"3" - }, - "egress_lossless_profile": { - "pool":"egress_lossless_pool", - "size":"1518", - "static_th":"15982720" - }, - "egress_lossy_profile": { - "pool":"egress_lossy_pool", - "size":"1518", - "dynamic_th":"3" - } - }, -{%- endmacro %} diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffers_defaults_t1.j2 b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffers_defaults_t1.j2 new file mode 120000 index 000000000000..c25cc95d6d57 --- /dev/null +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/buffers_defaults_t1.j2 @@ -0,0 +1 @@ +BALANCED/buffers_defaults_t1.j2 \ No newline at end of file diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/pg_profile_lookup.ini b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/pg_profile_lookup.ini deleted file mode 100644 index 673df369a9bb..000000000000 --- a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/pg_profile_lookup.ini +++ /dev/null @@ -1,17 +0,0 @@ -# PG lossless profiles. -# speed cable size xon xoff threshold xon_offset - 10000 5m 1248 2288 35776 0 2288 - 25000 5m 1248 2288 53248 0 2288 - 40000 5m 1248 2288 66560 0 2288 - 50000 5m 1248 2288 90272 0 2288 - 100000 5m 1248 2288 165568 0 2288 - 10000 40m 1248 2288 37024 0 2288 - 25000 40m 1248 2288 53248 0 2288 - 40000 40m 1248 2288 71552 0 2288 - 50000 40m 1248 2288 96096 0 2288 - 100000 40m 1248 2288 177632 0 2288 - 10000 300m 1248 2288 46176 0 2288 - 25000 300m 1248 2288 79040 0 2288 - 40000 300m 1248 2288 108160 0 2288 - 50000 300m 1248 2288 141856 0 2288 - 100000 300m 1248 2288 268736 0 2288 diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/pg_profile_lookup.ini b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/pg_profile_lookup.ini new file mode 120000 index 000000000000..297cddb2d223 --- /dev/null +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/pg_profile_lookup.ini @@ -0,0 +1 @@ +BALANCED/pg_profile_lookup.ini \ No newline at end of file diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/qos.json.j2 b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/qos.json.j2 deleted file mode 100644 index 34002048afdb..000000000000 --- a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/qos.json.j2 +++ /dev/null @@ -1,21 +0,0 @@ -{%- macro generate_wred_profiles() %} - "WRED_PROFILE": { - "AZURE_LOSSLESS" : { - "wred_green_enable" : "true", - "wred_yellow_enable" : "true", - "wred_red_enable" : "true", - "ecn" : "ecn_all", - "green_max_threshold" : "2097152", - "green_min_threshold" : "250000", - "yellow_max_threshold" : "2097152", - "yellow_min_threshold" : "1048576", - "red_max_threshold" : "2097152", - "red_min_threshold" : "1048576", - "green_drop_probability" : "5", - "yellow_drop_probability": "5", - "red_drop_probability" : "5" - } - }, -{%- endmacro %} - -{%- include 'qos_config.j2' %} diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/qos.json.j2 b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/qos.json.j2 new file mode 120000 index 000000000000..aef6b6765cf2 --- /dev/null +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-C32/qos.json.j2 @@ -0,0 +1 @@ +BALANCED/qos.json.j2 \ No newline at end of file diff --git a/device/common/profiles/th/gen/BALANCED/buffers_defaults_t0.j2 b/device/common/profiles/th/gen/BALANCED/buffers_defaults_t0.j2 new file mode 100644 index 000000000000..b96563b0a796 --- /dev/null +++ b/device/common/profiles/th/gen/BALANCED/buffers_defaults_t0.j2 @@ -0,0 +1,41 @@ +{%- set default_cable = '5m' %} + +{%- include 'buffer_ports_t0.j2' %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "10875072", + "type": "ingress", + "mode": "dynamic", + "xoff": "4194112" + }, + "egress_lossy_pool": { + "size": "9243812", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "15982720", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"1518", + "static_th":"15982720" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1518", + "dynamic_th":"3" + } + }, +{%- endmacro %} diff --git a/device/common/profiles/th/gen/BALANCED/buffers_defaults_t1.j2 b/device/common/profiles/th/gen/BALANCED/buffers_defaults_t1.j2 new file mode 100644 index 000000000000..56df5787c56a --- /dev/null +++ b/device/common/profiles/th/gen/BALANCED/buffers_defaults_t1.j2 @@ -0,0 +1,41 @@ +{%- set default_cable = '40m' %} + +{%- include 'buffer_ports_t1.j2' %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "10875072", + "type": "ingress", + "mode": "dynamic", + "xoff": "4194112" + }, + "egress_lossy_pool": { + "size": "9243812", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "15982720", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"1518", + "static_th":"15982720" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1518", + "dynamic_th":"3" + } + }, +{%- endmacro %} diff --git a/device/common/profiles/th/gen/BALANCED/pg_profile_lookup.ini b/device/common/profiles/th/gen/BALANCED/pg_profile_lookup.ini new file mode 100644 index 000000000000..673df369a9bb --- /dev/null +++ b/device/common/profiles/th/gen/BALANCED/pg_profile_lookup.ini @@ -0,0 +1,17 @@ +# PG lossless profiles. +# speed cable size xon xoff threshold xon_offset + 10000 5m 1248 2288 35776 0 2288 + 25000 5m 1248 2288 53248 0 2288 + 40000 5m 1248 2288 66560 0 2288 + 50000 5m 1248 2288 90272 0 2288 + 100000 5m 1248 2288 165568 0 2288 + 10000 40m 1248 2288 37024 0 2288 + 25000 40m 1248 2288 53248 0 2288 + 40000 40m 1248 2288 71552 0 2288 + 50000 40m 1248 2288 96096 0 2288 + 100000 40m 1248 2288 177632 0 2288 + 10000 300m 1248 2288 46176 0 2288 + 25000 300m 1248 2288 79040 0 2288 + 40000 300m 1248 2288 108160 0 2288 + 50000 300m 1248 2288 141856 0 2288 + 100000 300m 1248 2288 268736 0 2288 diff --git a/device/common/profiles/th/gen/BALANCED/qos.json.j2 b/device/common/profiles/th/gen/BALANCED/qos.json.j2 new file mode 100644 index 000000000000..34002048afdb --- /dev/null +++ b/device/common/profiles/th/gen/BALANCED/qos.json.j2 @@ -0,0 +1,21 @@ +{%- macro generate_wred_profiles() %} + "WRED_PROFILE": { + "AZURE_LOSSLESS" : { + "wred_green_enable" : "true", + "wred_yellow_enable" : "true", + "wred_red_enable" : "true", + "ecn" : "ecn_all", + "green_max_threshold" : "2097152", + "green_min_threshold" : "250000", + "yellow_max_threshold" : "2097152", + "yellow_min_threshold" : "1048576", + "red_max_threshold" : "2097152", + "red_min_threshold" : "1048576", + "green_drop_probability" : "5", + "yellow_drop_probability": "5", + "red_drop_probability" : "5" + } + }, +{%- endmacro %} + +{%- include 'qos_config.j2' %} diff --git a/device/common/profiles/th/gen/RDMA-CENTRIC/buffers_defaults_t0.j2 b/device/common/profiles/th/gen/RDMA-CENTRIC/buffers_defaults_t0.j2 new file mode 100644 index 000000000000..b96563b0a796 --- /dev/null +++ b/device/common/profiles/th/gen/RDMA-CENTRIC/buffers_defaults_t0.j2 @@ -0,0 +1,41 @@ +{%- set default_cable = '5m' %} + +{%- include 'buffer_ports_t0.j2' %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "10875072", + "type": "ingress", + "mode": "dynamic", + "xoff": "4194112" + }, + "egress_lossy_pool": { + "size": "9243812", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "15982720", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"1518", + "static_th":"15982720" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1518", + "dynamic_th":"3" + } + }, +{%- endmacro %} diff --git a/device/common/profiles/th/gen/RDMA-CENTRIC/buffers_defaults_t1.j2 b/device/common/profiles/th/gen/RDMA-CENTRIC/buffers_defaults_t1.j2 new file mode 100644 index 000000000000..56df5787c56a --- /dev/null +++ b/device/common/profiles/th/gen/RDMA-CENTRIC/buffers_defaults_t1.j2 @@ -0,0 +1,41 @@ +{%- set default_cable = '40m' %} + +{%- include 'buffer_ports_t1.j2' %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "10875072", + "type": "ingress", + "mode": "dynamic", + "xoff": "4194112" + }, + "egress_lossy_pool": { + "size": "9243812", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "15982720", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"1518", + "static_th":"15982720" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1518", + "dynamic_th":"3" + } + }, +{%- endmacro %} diff --git a/device/common/profiles/th/gen/RDMA-CENTRIC/pg_profile_lookup.ini b/device/common/profiles/th/gen/RDMA-CENTRIC/pg_profile_lookup.ini new file mode 100644 index 000000000000..673df369a9bb --- /dev/null +++ b/device/common/profiles/th/gen/RDMA-CENTRIC/pg_profile_lookup.ini @@ -0,0 +1,17 @@ +# PG lossless profiles. +# speed cable size xon xoff threshold xon_offset + 10000 5m 1248 2288 35776 0 2288 + 25000 5m 1248 2288 53248 0 2288 + 40000 5m 1248 2288 66560 0 2288 + 50000 5m 1248 2288 90272 0 2288 + 100000 5m 1248 2288 165568 0 2288 + 10000 40m 1248 2288 37024 0 2288 + 25000 40m 1248 2288 53248 0 2288 + 40000 40m 1248 2288 71552 0 2288 + 50000 40m 1248 2288 96096 0 2288 + 100000 40m 1248 2288 177632 0 2288 + 10000 300m 1248 2288 46176 0 2288 + 25000 300m 1248 2288 79040 0 2288 + 40000 300m 1248 2288 108160 0 2288 + 50000 300m 1248 2288 141856 0 2288 + 100000 300m 1248 2288 268736 0 2288 diff --git a/device/common/profiles/th/gen/RDMA-CENTRIC/qos.json.j2 b/device/common/profiles/th/gen/RDMA-CENTRIC/qos.json.j2 new file mode 100644 index 000000000000..34002048afdb --- /dev/null +++ b/device/common/profiles/th/gen/RDMA-CENTRIC/qos.json.j2 @@ -0,0 +1,21 @@ +{%- macro generate_wred_profiles() %} + "WRED_PROFILE": { + "AZURE_LOSSLESS" : { + "wred_green_enable" : "true", + "wred_yellow_enable" : "true", + "wred_red_enable" : "true", + "ecn" : "ecn_all", + "green_max_threshold" : "2097152", + "green_min_threshold" : "250000", + "yellow_max_threshold" : "2097152", + "yellow_min_threshold" : "1048576", + "red_max_threshold" : "2097152", + "red_min_threshold" : "1048576", + "green_drop_probability" : "5", + "yellow_drop_probability": "5", + "red_drop_probability" : "5" + } + }, +{%- endmacro %} + +{%- include 'qos_config.j2' %} diff --git a/device/common/profiles/th/gen/TCP-CENTRIC b/device/common/profiles/th/gen/TCP-CENTRIC new file mode 120000 index 000000000000..d6f7127aa748 --- /dev/null +++ b/device/common/profiles/th/gen/TCP-CENTRIC @@ -0,0 +1 @@ +BALANCED \ No newline at end of file From 0c94b72c2a7f80b3ef14cd4216da00a4859535ae Mon Sep 17 00:00:00 2001 From: Kevin Wang Date: Wed, 27 Apr 2022 20:35:41 +0800 Subject: [PATCH 106/259] [Buffer] Separate buffer profile for Force10-S6100 Signed-off-by: Kevin Wang --- .../th/6100/BALANCED/buffers_defaults_t0.j2 | 42 ++++++++++++++++ .../th/6100/BALANCED/buffers_defaults_t1.j2 | 42 ++++++++++++++++ .../th/6100/BALANCED/pg_profile_lookup.ini | 17 +++++++ .../profiles/th/6100/BALANCED/qos.json.j2 | 21 ++++++++ .../6100/RDMA-CENTRIC/buffers_defaults_t0.j2 | 42 ++++++++++++++++ .../6100/RDMA-CENTRIC/buffers_defaults_t1.j2 | 42 ++++++++++++++++ .../6100/RDMA-CENTRIC/pg_profile_lookup.ini | 17 +++++++ .../profiles/th/6100/RDMA-CENTRIC/qos.json.j2 | 21 ++++++++ device/common/profiles/th/6100/TCP-CENTRIC | 1 + .../Force10-S6100/BALANCED | 1 + .../Force10-S6100/RDMA-CENTRIC | 1 + .../Force10-S6100/TCP-CENTRIC | 1 + .../Force10-S6100/buffer_ports_t0.j2 | 6 +++ .../Force10-S6100/buffer_ports_t1.j2 | 6 +++ .../Force10-S6100/buffers_defaults_t0.j2 | 48 +------------------ .../Force10-S6100/buffers_defaults_t1.j2 | 48 +------------------ .../Force10-S6100/pg_profile_lookup.ini | 18 +------ .../Force10-S6100/qos.json.j2 | 22 +-------- 18 files changed, 264 insertions(+), 132 deletions(-) create mode 100644 device/common/profiles/th/6100/BALANCED/buffers_defaults_t0.j2 create mode 100644 device/common/profiles/th/6100/BALANCED/buffers_defaults_t1.j2 create mode 100644 device/common/profiles/th/6100/BALANCED/pg_profile_lookup.ini create mode 100644 device/common/profiles/th/6100/BALANCED/qos.json.j2 create mode 100644 device/common/profiles/th/6100/RDMA-CENTRIC/buffers_defaults_t0.j2 create mode 100644 device/common/profiles/th/6100/RDMA-CENTRIC/buffers_defaults_t1.j2 create mode 100644 device/common/profiles/th/6100/RDMA-CENTRIC/pg_profile_lookup.ini create mode 100644 device/common/profiles/th/6100/RDMA-CENTRIC/qos.json.j2 create mode 120000 device/common/profiles/th/6100/TCP-CENTRIC create mode 120000 device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/BALANCED create mode 120000 device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/RDMA-CENTRIC create mode 120000 device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/TCP-CENTRIC create mode 100644 device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffer_ports_t0.j2 create mode 100644 device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffer_ports_t1.j2 mode change 100644 => 120000 device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffers_defaults_t0.j2 mode change 100644 => 120000 device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffers_defaults_t1.j2 mode change 100644 => 120000 device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/pg_profile_lookup.ini mode change 100644 => 120000 device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/qos.json.j2 diff --git a/device/common/profiles/th/6100/BALANCED/buffers_defaults_t0.j2 b/device/common/profiles/th/6100/BALANCED/buffers_defaults_t0.j2 new file mode 100644 index 000000000000..ec7e2a23b566 --- /dev/null +++ b/device/common/profiles/th/6100/BALANCED/buffers_defaults_t0.j2 @@ -0,0 +1,42 @@ + +{%- set default_cable = '5m' %} + +{%- include 'buffer_ports_t0.j2' %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "10875072", + "type": "ingress", + "mode": "dynamic", + "xoff": "4194112" + }, + "egress_lossy_pool": { + "size": "9243812", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "15982720", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"1518", + "static_th":"15982720" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1518", + "dynamic_th":"3" + } + }, +{%- endmacro %} diff --git a/device/common/profiles/th/6100/BALANCED/buffers_defaults_t1.j2 b/device/common/profiles/th/6100/BALANCED/buffers_defaults_t1.j2 new file mode 100644 index 000000000000..e408a5c92cf6 --- /dev/null +++ b/device/common/profiles/th/6100/BALANCED/buffers_defaults_t1.j2 @@ -0,0 +1,42 @@ + +{%- set default_cable = '40m' %} + +{%- include 'buffer_ports_t1.j2' %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "10875072", + "type": "ingress", + "mode": "dynamic", + "xoff": "4194112" + }, + "egress_lossy_pool": { + "size": "9243812", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "15982720", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"1518", + "static_th":"15982720" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1518", + "dynamic_th":"3" + } + }, +{%- endmacro %} diff --git a/device/common/profiles/th/6100/BALANCED/pg_profile_lookup.ini b/device/common/profiles/th/6100/BALANCED/pg_profile_lookup.ini new file mode 100644 index 000000000000..0b5d680edda7 --- /dev/null +++ b/device/common/profiles/th/6100/BALANCED/pg_profile_lookup.ini @@ -0,0 +1,17 @@ +# PG lossless profiles. +# speed cable size xon xoff threshold xon_offset + 10000 5m 1248 2288 35776 0 2288 + 25000 5m 1248 2288 53248 0 2288 + 40000 5m 1248 2288 66560 0 2288 + 50000 5m 1248 2288 79872 0 2288 + 100000 5m 1248 2288 165568 0 2288 + 10000 40m 1248 2288 37024 0 2288 + 25000 40m 1248 2288 56160 0 2288 + 40000 40m 1248 2288 71552 0 2288 + 50000 40m 1248 2288 85696 0 2288 + 100000 40m 1248 2288 177632 0 2288 + 10000 300m 1248 2288 46176 0 2288 + 25000 300m 1248 2288 79040 0 2288 + 40000 300m 1248 2288 108160 0 2288 + 50000 300m 1248 2288 141856 0 2288 + 100000 300m 1248 2288 268736 0 2288 diff --git a/device/common/profiles/th/6100/BALANCED/qos.json.j2 b/device/common/profiles/th/6100/BALANCED/qos.json.j2 new file mode 100644 index 000000000000..34002048afdb --- /dev/null +++ b/device/common/profiles/th/6100/BALANCED/qos.json.j2 @@ -0,0 +1,21 @@ +{%- macro generate_wred_profiles() %} + "WRED_PROFILE": { + "AZURE_LOSSLESS" : { + "wred_green_enable" : "true", + "wred_yellow_enable" : "true", + "wred_red_enable" : "true", + "ecn" : "ecn_all", + "green_max_threshold" : "2097152", + "green_min_threshold" : "250000", + "yellow_max_threshold" : "2097152", + "yellow_min_threshold" : "1048576", + "red_max_threshold" : "2097152", + "red_min_threshold" : "1048576", + "green_drop_probability" : "5", + "yellow_drop_probability": "5", + "red_drop_probability" : "5" + } + }, +{%- endmacro %} + +{%- include 'qos_config.j2' %} diff --git a/device/common/profiles/th/6100/RDMA-CENTRIC/buffers_defaults_t0.j2 b/device/common/profiles/th/6100/RDMA-CENTRIC/buffers_defaults_t0.j2 new file mode 100644 index 000000000000..ec7e2a23b566 --- /dev/null +++ b/device/common/profiles/th/6100/RDMA-CENTRIC/buffers_defaults_t0.j2 @@ -0,0 +1,42 @@ + +{%- set default_cable = '5m' %} + +{%- include 'buffer_ports_t0.j2' %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "10875072", + "type": "ingress", + "mode": "dynamic", + "xoff": "4194112" + }, + "egress_lossy_pool": { + "size": "9243812", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "15982720", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"1518", + "static_th":"15982720" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1518", + "dynamic_th":"3" + } + }, +{%- endmacro %} diff --git a/device/common/profiles/th/6100/RDMA-CENTRIC/buffers_defaults_t1.j2 b/device/common/profiles/th/6100/RDMA-CENTRIC/buffers_defaults_t1.j2 new file mode 100644 index 000000000000..e408a5c92cf6 --- /dev/null +++ b/device/common/profiles/th/6100/RDMA-CENTRIC/buffers_defaults_t1.j2 @@ -0,0 +1,42 @@ + +{%- set default_cable = '40m' %} + +{%- include 'buffer_ports_t1.j2' %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "10875072", + "type": "ingress", + "mode": "dynamic", + "xoff": "4194112" + }, + "egress_lossy_pool": { + "size": "9243812", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "15982720", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"1518", + "static_th":"15982720" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1518", + "dynamic_th":"3" + } + }, +{%- endmacro %} diff --git a/device/common/profiles/th/6100/RDMA-CENTRIC/pg_profile_lookup.ini b/device/common/profiles/th/6100/RDMA-CENTRIC/pg_profile_lookup.ini new file mode 100644 index 000000000000..0b5d680edda7 --- /dev/null +++ b/device/common/profiles/th/6100/RDMA-CENTRIC/pg_profile_lookup.ini @@ -0,0 +1,17 @@ +# PG lossless profiles. +# speed cable size xon xoff threshold xon_offset + 10000 5m 1248 2288 35776 0 2288 + 25000 5m 1248 2288 53248 0 2288 + 40000 5m 1248 2288 66560 0 2288 + 50000 5m 1248 2288 79872 0 2288 + 100000 5m 1248 2288 165568 0 2288 + 10000 40m 1248 2288 37024 0 2288 + 25000 40m 1248 2288 56160 0 2288 + 40000 40m 1248 2288 71552 0 2288 + 50000 40m 1248 2288 85696 0 2288 + 100000 40m 1248 2288 177632 0 2288 + 10000 300m 1248 2288 46176 0 2288 + 25000 300m 1248 2288 79040 0 2288 + 40000 300m 1248 2288 108160 0 2288 + 50000 300m 1248 2288 141856 0 2288 + 100000 300m 1248 2288 268736 0 2288 diff --git a/device/common/profiles/th/6100/RDMA-CENTRIC/qos.json.j2 b/device/common/profiles/th/6100/RDMA-CENTRIC/qos.json.j2 new file mode 100644 index 000000000000..34002048afdb --- /dev/null +++ b/device/common/profiles/th/6100/RDMA-CENTRIC/qos.json.j2 @@ -0,0 +1,21 @@ +{%- macro generate_wred_profiles() %} + "WRED_PROFILE": { + "AZURE_LOSSLESS" : { + "wred_green_enable" : "true", + "wred_yellow_enable" : "true", + "wred_red_enable" : "true", + "ecn" : "ecn_all", + "green_max_threshold" : "2097152", + "green_min_threshold" : "250000", + "yellow_max_threshold" : "2097152", + "yellow_min_threshold" : "1048576", + "red_max_threshold" : "2097152", + "red_min_threshold" : "1048576", + "green_drop_probability" : "5", + "yellow_drop_probability": "5", + "red_drop_probability" : "5" + } + }, +{%- endmacro %} + +{%- include 'qos_config.j2' %} diff --git a/device/common/profiles/th/6100/TCP-CENTRIC b/device/common/profiles/th/6100/TCP-CENTRIC new file mode 120000 index 000000000000..d6f7127aa748 --- /dev/null +++ b/device/common/profiles/th/6100/TCP-CENTRIC @@ -0,0 +1 @@ +BALANCED \ No newline at end of file diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/BALANCED b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/BALANCED new file mode 120000 index 000000000000..6f064064664a --- /dev/null +++ b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/BALANCED @@ -0,0 +1 @@ +../../../common/profiles/th/6100/BALANCED \ No newline at end of file diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/RDMA-CENTRIC b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/RDMA-CENTRIC new file mode 120000 index 000000000000..4ab30f5ff42f --- /dev/null +++ b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/RDMA-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th/6100/RDMA-CENTRIC \ No newline at end of file diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/TCP-CENTRIC b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/TCP-CENTRIC new file mode 120000 index 000000000000..d5d3a5b671b5 --- /dev/null +++ b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/TCP-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th/6100/TCP-CENTRIC \ No newline at end of file diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffer_ports_t0.j2 b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffer_ports_t0.j2 new file mode 100644 index 000000000000..ae201eb2593a --- /dev/null +++ b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffer_ports_t0.j2 @@ -0,0 +1,6 @@ +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,64) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} \ No newline at end of file diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffer_ports_t1.j2 b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffer_ports_t1.j2 new file mode 100644 index 000000000000..ae201eb2593a --- /dev/null +++ b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffer_ports_t1.j2 @@ -0,0 +1,6 @@ +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,64) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} \ No newline at end of file diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffers_defaults_t0.j2 b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffers_defaults_t0.j2 deleted file mode 100644 index 048188a39e95..000000000000 --- a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffers_defaults_t0.j2 +++ /dev/null @@ -1,47 +0,0 @@ - -{%- set default_cable = '5m' %} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,64) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "10875072", - "type": "ingress", - "mode": "dynamic", - "xoff": "4194112" - }, - "egress_lossy_pool": { - "size": "9243812", - "type": "egress", - "mode": "dynamic" - }, - "egress_lossless_pool": { - "size": "15982720", - "type": "egress", - "mode": "static" - } - }, - "BUFFER_PROFILE": { - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "dynamic_th":"3" - }, - "egress_lossless_profile": { - "pool":"egress_lossless_pool", - "size":"1518", - "static_th":"15982720" - }, - "egress_lossy_profile": { - "pool":"egress_lossy_pool", - "size":"1518", - "dynamic_th":"3" - } - }, -{%- endmacro %} diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffers_defaults_t0.j2 b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffers_defaults_t0.j2 new file mode 120000 index 000000000000..9524e6a476ac --- /dev/null +++ b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffers_defaults_t0.j2 @@ -0,0 +1 @@ +BALANCED/buffers_defaults_t0.j2 \ No newline at end of file diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffers_defaults_t1.j2 b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffers_defaults_t1.j2 deleted file mode 100644 index 1c825b21640c..000000000000 --- a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffers_defaults_t1.j2 +++ /dev/null @@ -1,47 +0,0 @@ - -{%- set default_cable = '40m' %} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,64) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "10875072", - "type": "ingress", - "mode": "dynamic", - "xoff": "4194112" - }, - "egress_lossy_pool": { - "size": "9243812", - "type": "egress", - "mode": "dynamic" - }, - "egress_lossless_pool": { - "size": "15982720", - "type": "egress", - "mode": "static" - } - }, - "BUFFER_PROFILE": { - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "dynamic_th":"3" - }, - "egress_lossless_profile": { - "pool":"egress_lossless_pool", - "size":"1518", - "static_th":"15982720" - }, - "egress_lossy_profile": { - "pool":"egress_lossy_pool", - "size":"1518", - "dynamic_th":"3" - } - }, -{%- endmacro %} diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffers_defaults_t1.j2 b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffers_defaults_t1.j2 new file mode 120000 index 000000000000..c25cc95d6d57 --- /dev/null +++ b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/buffers_defaults_t1.j2 @@ -0,0 +1 @@ +BALANCED/buffers_defaults_t1.j2 \ No newline at end of file diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/pg_profile_lookup.ini b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/pg_profile_lookup.ini deleted file mode 100644 index 0b5d680edda7..000000000000 --- a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/pg_profile_lookup.ini +++ /dev/null @@ -1,17 +0,0 @@ -# PG lossless profiles. -# speed cable size xon xoff threshold xon_offset - 10000 5m 1248 2288 35776 0 2288 - 25000 5m 1248 2288 53248 0 2288 - 40000 5m 1248 2288 66560 0 2288 - 50000 5m 1248 2288 79872 0 2288 - 100000 5m 1248 2288 165568 0 2288 - 10000 40m 1248 2288 37024 0 2288 - 25000 40m 1248 2288 56160 0 2288 - 40000 40m 1248 2288 71552 0 2288 - 50000 40m 1248 2288 85696 0 2288 - 100000 40m 1248 2288 177632 0 2288 - 10000 300m 1248 2288 46176 0 2288 - 25000 300m 1248 2288 79040 0 2288 - 40000 300m 1248 2288 108160 0 2288 - 50000 300m 1248 2288 141856 0 2288 - 100000 300m 1248 2288 268736 0 2288 diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/pg_profile_lookup.ini b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/pg_profile_lookup.ini new file mode 120000 index 000000000000..297cddb2d223 --- /dev/null +++ b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/pg_profile_lookup.ini @@ -0,0 +1 @@ +BALANCED/pg_profile_lookup.ini \ No newline at end of file diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/qos.json.j2 b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/qos.json.j2 deleted file mode 100644 index 34002048afdb..000000000000 --- a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/qos.json.j2 +++ /dev/null @@ -1,21 +0,0 @@ -{%- macro generate_wred_profiles() %} - "WRED_PROFILE": { - "AZURE_LOSSLESS" : { - "wred_green_enable" : "true", - "wred_yellow_enable" : "true", - "wred_red_enable" : "true", - "ecn" : "ecn_all", - "green_max_threshold" : "2097152", - "green_min_threshold" : "250000", - "yellow_max_threshold" : "2097152", - "yellow_min_threshold" : "1048576", - "red_max_threshold" : "2097152", - "red_min_threshold" : "1048576", - "green_drop_probability" : "5", - "yellow_drop_probability": "5", - "red_drop_probability" : "5" - } - }, -{%- endmacro %} - -{%- include 'qos_config.j2' %} diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/qos.json.j2 b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/qos.json.j2 new file mode 120000 index 000000000000..aef6b6765cf2 --- /dev/null +++ b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/qos.json.j2 @@ -0,0 +1 @@ +BALANCED/qos.json.j2 \ No newline at end of file From b245ee78608bf089bf937f8b900de63329703a41 Mon Sep 17 00:00:00 2001 From: Kevin Wang Date: Wed, 27 Apr 2022 19:38:44 +0800 Subject: [PATCH 107/259] [Buffer] Separate buffer profile for Celestica-DX010-D48C8 Signed-off-by: Kevin Wang --- .../Celestica-DX010-D48C8/BALANCED | 1 + .../Celestica-DX010-D48C8/RDMA-CENTRIC | 1 + .../Celestica-DX010-D48C8/TCP-CENTRIC | 1 + .../Celestica-DX010-D48C8/buffer_ports_t0.j2 | 28 ++++++++ .../buffers_defaults_t0.j2 | 70 +------------------ .../pg_profile_lookup.ini | 18 +---- .../Celestica-DX010-D48C8/qos.json.j2 | 22 +----- 7 files changed, 34 insertions(+), 107 deletions(-) create mode 120000 device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/BALANCED create mode 120000 device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/RDMA-CENTRIC create mode 120000 device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/TCP-CENTRIC create mode 100644 device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/buffer_ports_t0.j2 mode change 100644 => 120000 device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/buffers_defaults_t0.j2 mode change 100644 => 120000 device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/pg_profile_lookup.ini mode change 100644 => 120000 device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/qos.json.j2 diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/BALANCED b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/BALANCED new file mode 120000 index 000000000000..87afd08ffcd8 --- /dev/null +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/BALANCED @@ -0,0 +1 @@ +../../../common/profiles/th/gen/BALANCED \ No newline at end of file diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/RDMA-CENTRIC b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/RDMA-CENTRIC new file mode 120000 index 000000000000..a05581efb9ff --- /dev/null +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/RDMA-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th/gen/RDMA-CENTRIC \ No newline at end of file diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/TCP-CENTRIC b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/TCP-CENTRIC new file mode 120000 index 000000000000..dd9cf046c0f9 --- /dev/null +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/TCP-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th/gen/TCP-CENTRIC \ No newline at end of file diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/buffer_ports_t0.j2 b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/buffer_ports_t0.j2 new file mode 100644 index 000000000000..b4f4f7bab3f3 --- /dev/null +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/buffer_ports_t0.j2 @@ -0,0 +1,28 @@ +{%- set ports2cable = { + 'torrouter_server' : '300m', + 'leafrouter_torrouter' : '300m', + 'spinerouter_leafrouter' : '300m' + } +-%} + +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,9) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} + {%- endfor %} + {%- for port_idx in range(14,17) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} + {%- endfor %} + {%- for port_idx in range(22,31) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} + {%- endfor %} + {%- for port_idx in range(10,13) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- endfor %} + {%- for port_idx in range(18,21) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} \ No newline at end of file diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/buffers_defaults_t0.j2 b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/buffers_defaults_t0.j2 deleted file mode 100644 index 046ec1e65450..000000000000 --- a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/buffers_defaults_t0.j2 +++ /dev/null @@ -1,69 +0,0 @@ - -{%- set default_cable = '5m' %} - -{%- set ports2cable = { - 'torrouter_server' : '300m', - 'leafrouter_torrouter' : '300m', - 'spinerouter_leafrouter' : '300m' - } --%} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,9) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} - {%- endfor %} - {%- for port_idx in range(14,17) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} - {%- endfor %} - {%- for port_idx in range(22,31) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} - {%- endfor %} - {%- for port_idx in range(10,13) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- endfor %} - {%- for port_idx in range(18,21) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "10875072", - "type": "ingress", - "mode": "dynamic", - "xoff": "4194112" - }, - "egress_lossy_pool": { - "size": "9243812", - "type": "egress", - "mode": "dynamic" - }, - "egress_lossless_pool": { - "size": "15982720", - "type": "egress", - "mode": "static" - } - }, - "BUFFER_PROFILE": { - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "dynamic_th":"3" - }, - "egress_lossless_profile": { - "pool":"egress_lossless_pool", - "size":"1518", - "static_th":"15982720" - }, - "egress_lossy_profile": { - "pool":"egress_lossy_pool", - "size":"1518", - "dynamic_th":"3" - } - }, -{%- endmacro %} diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/buffers_defaults_t0.j2 b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/buffers_defaults_t0.j2 new file mode 120000 index 000000000000..9524e6a476ac --- /dev/null +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/buffers_defaults_t0.j2 @@ -0,0 +1 @@ +BALANCED/buffers_defaults_t0.j2 \ No newline at end of file diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/pg_profile_lookup.ini b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/pg_profile_lookup.ini deleted file mode 100644 index 673df369a9bb..000000000000 --- a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/pg_profile_lookup.ini +++ /dev/null @@ -1,17 +0,0 @@ -# PG lossless profiles. -# speed cable size xon xoff threshold xon_offset - 10000 5m 1248 2288 35776 0 2288 - 25000 5m 1248 2288 53248 0 2288 - 40000 5m 1248 2288 66560 0 2288 - 50000 5m 1248 2288 90272 0 2288 - 100000 5m 1248 2288 165568 0 2288 - 10000 40m 1248 2288 37024 0 2288 - 25000 40m 1248 2288 53248 0 2288 - 40000 40m 1248 2288 71552 0 2288 - 50000 40m 1248 2288 96096 0 2288 - 100000 40m 1248 2288 177632 0 2288 - 10000 300m 1248 2288 46176 0 2288 - 25000 300m 1248 2288 79040 0 2288 - 40000 300m 1248 2288 108160 0 2288 - 50000 300m 1248 2288 141856 0 2288 - 100000 300m 1248 2288 268736 0 2288 diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/pg_profile_lookup.ini b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/pg_profile_lookup.ini new file mode 120000 index 000000000000..297cddb2d223 --- /dev/null +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/pg_profile_lookup.ini @@ -0,0 +1 @@ +BALANCED/pg_profile_lookup.ini \ No newline at end of file diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/qos.json.j2 b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/qos.json.j2 deleted file mode 100644 index 34002048afdb..000000000000 --- a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/qos.json.j2 +++ /dev/null @@ -1,21 +0,0 @@ -{%- macro generate_wred_profiles() %} - "WRED_PROFILE": { - "AZURE_LOSSLESS" : { - "wred_green_enable" : "true", - "wred_yellow_enable" : "true", - "wred_red_enable" : "true", - "ecn" : "ecn_all", - "green_max_threshold" : "2097152", - "green_min_threshold" : "250000", - "yellow_max_threshold" : "2097152", - "yellow_min_threshold" : "1048576", - "red_max_threshold" : "2097152", - "red_min_threshold" : "1048576", - "green_drop_probability" : "5", - "yellow_drop_probability": "5", - "red_drop_probability" : "5" - } - }, -{%- endmacro %} - -{%- include 'qos_config.j2' %} diff --git a/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/qos.json.j2 b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/qos.json.j2 new file mode 120000 index 000000000000..aef6b6765cf2 --- /dev/null +++ b/device/celestica/x86_64-cel_seastone-r0/Celestica-DX010-D48C8/qos.json.j2 @@ -0,0 +1 @@ +BALANCED/qos.json.j2 \ No newline at end of file From 634b4ee1f2dff0da37520d2d3e3a6be65df614b1 Mon Sep 17 00:00:00 2001 From: Kevin Wang Date: Wed, 27 Apr 2022 21:57:50 +0800 Subject: [PATCH 108/259] [Buffer] Separate buffer profile for Arista-7060CX-32S-Q32 Signed-off-by: Kevin Wang --- .../Arista-7060CX-32S-Q32/BALANCED | 1 + .../Arista-7060CX-32S-Q32/RDMA-CENTRIC | 1 + .../Arista-7060CX-32S-Q32/TCP-CENTRIC | 1 + .../Arista-7060CX-32S-Q32/buffer_ports_t0.j2 | 6 +++ .../Arista-7060CX-32S-Q32/buffer_ports_t1.j2 | 6 +++ .../buffers_defaults_t0.j2 | 48 +------------------ .../buffers_defaults_t1.j2 | 48 +------------------ .../pg_profile_lookup.ini | 18 +------ .../Arista-7060CX-32S-Q32/qos.json.j2 | 22 +-------- 9 files changed, 19 insertions(+), 132 deletions(-) create mode 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/BALANCED create mode 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/RDMA-CENTRIC create mode 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/TCP-CENTRIC create mode 100644 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffer_ports_t0.j2 create mode 100644 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffer_ports_t1.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffers_defaults_t0.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffers_defaults_t1.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/pg_profile_lookup.ini mode change 100644 => 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/qos.json.j2 diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/BALANCED b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/BALANCED new file mode 120000 index 000000000000..87afd08ffcd8 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/BALANCED @@ -0,0 +1 @@ +../../../common/profiles/th/gen/BALANCED \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/RDMA-CENTRIC b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/RDMA-CENTRIC new file mode 120000 index 000000000000..a05581efb9ff --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/RDMA-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th/gen/RDMA-CENTRIC \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/TCP-CENTRIC b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/TCP-CENTRIC new file mode 120000 index 000000000000..dd9cf046c0f9 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/TCP-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th/gen/TCP-CENTRIC \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffer_ports_t0.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffer_ports_t0.j2 new file mode 100644 index 000000000000..2f41924b4fcf --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffer_ports_t0.j2 @@ -0,0 +1,6 @@ +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,128,4) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffer_ports_t1.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffer_ports_t1.j2 new file mode 100644 index 000000000000..2f41924b4fcf --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffer_ports_t1.j2 @@ -0,0 +1,6 @@ +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,128,4) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffers_defaults_t0.j2 deleted file mode 100644 index 1876253b33c2..000000000000 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffers_defaults_t0.j2 +++ /dev/null @@ -1,47 +0,0 @@ - -{%- set default_cable = '5m' %} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,128,4) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "10875072", - "type": "ingress", - "mode": "dynamic", - "xoff": "4194112" - }, - "egress_lossy_pool": { - "size": "9243812", - "type": "egress", - "mode": "dynamic" - }, - "egress_lossless_pool": { - "size": "15982720", - "type": "egress", - "mode": "static" - } - }, - "BUFFER_PROFILE": { - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "dynamic_th":"3" - }, - "egress_lossless_profile": { - "pool":"egress_lossless_pool", - "size":"1518", - "static_th":"15982720" - }, - "egress_lossy_profile": { - "pool":"egress_lossy_pool", - "size":"1518", - "dynamic_th":"3" - } - }, -{%- endmacro %} diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffers_defaults_t0.j2 new file mode 120000 index 000000000000..9524e6a476ac --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffers_defaults_t0.j2 @@ -0,0 +1 @@ +BALANCED/buffers_defaults_t0.j2 \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffers_defaults_t1.j2 deleted file mode 100644 index e1a7200cc57f..000000000000 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffers_defaults_t1.j2 +++ /dev/null @@ -1,47 +0,0 @@ - -{%- set default_cable = '40m' %} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,128,4) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "10875072", - "type": "ingress", - "mode": "dynamic", - "xoff": "4194112" - }, - "egress_lossy_pool": { - "size": "9243812", - "type": "egress", - "mode": "dynamic" - }, - "egress_lossless_pool": { - "size": "15982720", - "type": "egress", - "mode": "static" - } - }, - "BUFFER_PROFILE": { - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "dynamic_th":"3" - }, - "egress_lossless_profile": { - "pool":"egress_lossless_pool", - "size":"1518", - "static_th":"15982720" - }, - "egress_lossy_profile": { - "pool":"egress_lossy_pool", - "size":"1518", - "dynamic_th":"3" - } - }, -{%- endmacro %} diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffers_defaults_t1.j2 new file mode 120000 index 000000000000..c25cc95d6d57 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/buffers_defaults_t1.j2 @@ -0,0 +1 @@ +BALANCED/buffers_defaults_t1.j2 \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/pg_profile_lookup.ini b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/pg_profile_lookup.ini deleted file mode 100644 index 673df369a9bb..000000000000 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/pg_profile_lookup.ini +++ /dev/null @@ -1,17 +0,0 @@ -# PG lossless profiles. -# speed cable size xon xoff threshold xon_offset - 10000 5m 1248 2288 35776 0 2288 - 25000 5m 1248 2288 53248 0 2288 - 40000 5m 1248 2288 66560 0 2288 - 50000 5m 1248 2288 90272 0 2288 - 100000 5m 1248 2288 165568 0 2288 - 10000 40m 1248 2288 37024 0 2288 - 25000 40m 1248 2288 53248 0 2288 - 40000 40m 1248 2288 71552 0 2288 - 50000 40m 1248 2288 96096 0 2288 - 100000 40m 1248 2288 177632 0 2288 - 10000 300m 1248 2288 46176 0 2288 - 25000 300m 1248 2288 79040 0 2288 - 40000 300m 1248 2288 108160 0 2288 - 50000 300m 1248 2288 141856 0 2288 - 100000 300m 1248 2288 268736 0 2288 diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/pg_profile_lookup.ini b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/pg_profile_lookup.ini new file mode 120000 index 000000000000..297cddb2d223 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/pg_profile_lookup.ini @@ -0,0 +1 @@ +BALANCED/pg_profile_lookup.ini \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/qos.json.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/qos.json.j2 deleted file mode 100644 index 34002048afdb..000000000000 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/qos.json.j2 +++ /dev/null @@ -1,21 +0,0 @@ -{%- macro generate_wred_profiles() %} - "WRED_PROFILE": { - "AZURE_LOSSLESS" : { - "wred_green_enable" : "true", - "wred_yellow_enable" : "true", - "wred_red_enable" : "true", - "ecn" : "ecn_all", - "green_max_threshold" : "2097152", - "green_min_threshold" : "250000", - "yellow_max_threshold" : "2097152", - "yellow_min_threshold" : "1048576", - "red_max_threshold" : "2097152", - "red_min_threshold" : "1048576", - "green_drop_probability" : "5", - "yellow_drop_probability": "5", - "red_drop_probability" : "5" - } - }, -{%- endmacro %} - -{%- include 'qos_config.j2' %} diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/qos.json.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/qos.json.j2 new file mode 120000 index 000000000000..aef6b6765cf2 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/qos.json.j2 @@ -0,0 +1 @@ +BALANCED/qos.json.j2 \ No newline at end of file From a0c38a9c81efe29734147b9e949f3de26368b564 Mon Sep 17 00:00:00 2001 From: Kevin Wang Date: Wed, 27 Apr 2022 21:53:28 +0800 Subject: [PATCH 109/259] [Buffer] Separate buffer profile for Arista-7060CX-32S-D48C8 Signed-off-by: Kevin Wang --- .../Arista-7060CX-32S-D48C8/BALANCED | 1 + .../Arista-7060CX-32S-D48C8/RDMA-CENTRIC | 1 + .../Arista-7060CX-32S-D48C8/TCP-CENTRIC | 1 + .../buffer_ports_t0.j2 | 21 +++++++ .../buffers_defaults_t0.j2 | 62 +------------------ .../pg_profile_lookup.ini | 18 +----- .../Arista-7060CX-32S-D48C8/qos.json.j2 | 22 +------ 7 files changed, 27 insertions(+), 99 deletions(-) create mode 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/BALANCED create mode 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/RDMA-CENTRIC create mode 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/TCP-CENTRIC create mode 100644 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/buffer_ports_t0.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/buffers_defaults_t0.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/pg_profile_lookup.ini mode change 100644 => 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/qos.json.j2 diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/BALANCED b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/BALANCED new file mode 120000 index 000000000000..87afd08ffcd8 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/BALANCED @@ -0,0 +1 @@ +../../../common/profiles/th/gen/BALANCED \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/RDMA-CENTRIC b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/RDMA-CENTRIC new file mode 120000 index 000000000000..a05581efb9ff --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/RDMA-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th/gen/RDMA-CENTRIC \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/TCP-CENTRIC b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/TCP-CENTRIC new file mode 120000 index 000000000000..dd9cf046c0f9 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/TCP-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th/gen/TCP-CENTRIC \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/buffer_ports_t0.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/buffer_ports_t0.j2 new file mode 100644 index 000000000000..fdbff09c12d4 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/buffer_ports_t0.j2 @@ -0,0 +1,21 @@ +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,6) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} + {%- endfor %} + {%- for port_idx in range(10,22) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} + {%- endfor %} + {%- for port_idx in range(24,32) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} + {%- endfor %} + {%- for port_idx in range(6,10) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- endfor %} + {%- for port_idx in range(22,24) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/buffers_defaults_t0.j2 deleted file mode 100644 index f7d50aa4f35e..000000000000 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/buffers_defaults_t0.j2 +++ /dev/null @@ -1,61 +0,0 @@ -{%- set default_cable = '5m' %} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,6) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} - {%- endfor %} - {%- for port_idx in range(10,22) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} - {%- endfor %} - {%- for port_idx in range(26,32) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} - {%- endfor %} - {%- for port_idx in range(6,10) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- endfor %} - {%- for port_idx in range(22,26) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "10875072", - "type": "ingress", - "mode": "dynamic", - "xoff": "4194112" - }, - "egress_lossy_pool": { - "size": "9243812", - "type": "egress", - "mode": "dynamic" - }, - "egress_lossless_pool": { - "size": "15982720", - "type": "egress", - "mode": "static" - } - }, - "BUFFER_PROFILE": { - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "dynamic_th":"3" - }, - "egress_lossless_profile": { - "pool":"egress_lossless_pool", - "size":"1518", - "static_th":"15982720" - }, - "egress_lossy_profile": { - "pool":"egress_lossy_pool", - "size":"1518", - "dynamic_th":"3" - } - }, -{%- endmacro %} diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/buffers_defaults_t0.j2 new file mode 120000 index 000000000000..9524e6a476ac --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/buffers_defaults_t0.j2 @@ -0,0 +1 @@ +BALANCED/buffers_defaults_t0.j2 \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/pg_profile_lookup.ini b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/pg_profile_lookup.ini deleted file mode 100644 index 0b5d680edda7..000000000000 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/pg_profile_lookup.ini +++ /dev/null @@ -1,17 +0,0 @@ -# PG lossless profiles. -# speed cable size xon xoff threshold xon_offset - 10000 5m 1248 2288 35776 0 2288 - 25000 5m 1248 2288 53248 0 2288 - 40000 5m 1248 2288 66560 0 2288 - 50000 5m 1248 2288 79872 0 2288 - 100000 5m 1248 2288 165568 0 2288 - 10000 40m 1248 2288 37024 0 2288 - 25000 40m 1248 2288 56160 0 2288 - 40000 40m 1248 2288 71552 0 2288 - 50000 40m 1248 2288 85696 0 2288 - 100000 40m 1248 2288 177632 0 2288 - 10000 300m 1248 2288 46176 0 2288 - 25000 300m 1248 2288 79040 0 2288 - 40000 300m 1248 2288 108160 0 2288 - 50000 300m 1248 2288 141856 0 2288 - 100000 300m 1248 2288 268736 0 2288 diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/pg_profile_lookup.ini b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/pg_profile_lookup.ini new file mode 120000 index 000000000000..297cddb2d223 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/pg_profile_lookup.ini @@ -0,0 +1 @@ +BALANCED/pg_profile_lookup.ini \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/qos.json.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/qos.json.j2 deleted file mode 100644 index 34002048afdb..000000000000 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/qos.json.j2 +++ /dev/null @@ -1,21 +0,0 @@ -{%- macro generate_wred_profiles() %} - "WRED_PROFILE": { - "AZURE_LOSSLESS" : { - "wred_green_enable" : "true", - "wred_yellow_enable" : "true", - "wred_red_enable" : "true", - "ecn" : "ecn_all", - "green_max_threshold" : "2097152", - "green_min_threshold" : "250000", - "yellow_max_threshold" : "2097152", - "yellow_min_threshold" : "1048576", - "red_max_threshold" : "2097152", - "red_min_threshold" : "1048576", - "green_drop_probability" : "5", - "yellow_drop_probability": "5", - "red_drop_probability" : "5" - } - }, -{%- endmacro %} - -{%- include 'qos_config.j2' %} diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/qos.json.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/qos.json.j2 new file mode 120000 index 000000000000..aef6b6765cf2 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/qos.json.j2 @@ -0,0 +1 @@ +BALANCED/qos.json.j2 \ No newline at end of file From b929929f0c98960b34603fec68a43b0f4d3079bf Mon Sep 17 00:00:00 2001 From: Kevin Wang Date: Wed, 27 Apr 2022 20:59:30 +0800 Subject: [PATCH 110/259] [Buffer] Separate buffer profile for Arista-7060CX-32S-C32 Signed-off-by: Kevin Wang --- .../Arista-7060CX-32S-C32/BALANCED | 1 + .../Arista-7060CX-32S-C32/RDMA-CENTRIC | 1 + .../Arista-7060CX-32S-C32/TCP-CENTRIC | 1 + .../Arista-7060CX-32S-C32/buffer_ports_t0.j2 | 6 +++ .../Arista-7060CX-32S-C32/buffer_ports_t1.j2 | 6 +++ .../buffers_defaults_t0.j2 | 48 +------------------ .../buffers_defaults_t1.j2 | 48 +------------------ .../pg_profile_lookup.ini | 18 +------ .../Arista-7060CX-32S-C32/qos.json.j2 | 22 +-------- 9 files changed, 19 insertions(+), 132 deletions(-) create mode 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/BALANCED create mode 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/RDMA-CENTRIC create mode 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/TCP-CENTRIC create mode 100644 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffer_ports_t0.j2 create mode 100644 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffer_ports_t1.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffers_defaults_t0.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffers_defaults_t1.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/pg_profile_lookup.ini mode change 100644 => 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/qos.json.j2 diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/BALANCED b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/BALANCED new file mode 120000 index 000000000000..87afd08ffcd8 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/BALANCED @@ -0,0 +1 @@ +../../../common/profiles/th/gen/BALANCED \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/RDMA-CENTRIC b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/RDMA-CENTRIC new file mode 120000 index 000000000000..a05581efb9ff --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/RDMA-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th/gen/RDMA-CENTRIC \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/TCP-CENTRIC b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/TCP-CENTRIC new file mode 120000 index 000000000000..dd9cf046c0f9 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/TCP-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th/gen/TCP-CENTRIC \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffer_ports_t0.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffer_ports_t0.j2 new file mode 100644 index 000000000000..2f41924b4fcf --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffer_ports_t0.j2 @@ -0,0 +1,6 @@ +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,128,4) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffer_ports_t1.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffer_ports_t1.j2 new file mode 100644 index 000000000000..2f41924b4fcf --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffer_ports_t1.j2 @@ -0,0 +1,6 @@ +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,128,4) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffers_defaults_t0.j2 deleted file mode 100644 index 1876253b33c2..000000000000 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffers_defaults_t0.j2 +++ /dev/null @@ -1,47 +0,0 @@ - -{%- set default_cable = '5m' %} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,128,4) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "10875072", - "type": "ingress", - "mode": "dynamic", - "xoff": "4194112" - }, - "egress_lossy_pool": { - "size": "9243812", - "type": "egress", - "mode": "dynamic" - }, - "egress_lossless_pool": { - "size": "15982720", - "type": "egress", - "mode": "static" - } - }, - "BUFFER_PROFILE": { - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "dynamic_th":"3" - }, - "egress_lossless_profile": { - "pool":"egress_lossless_pool", - "size":"1518", - "static_th":"15982720" - }, - "egress_lossy_profile": { - "pool":"egress_lossy_pool", - "size":"1518", - "dynamic_th":"3" - } - }, -{%- endmacro %} diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffers_defaults_t0.j2 new file mode 120000 index 000000000000..9524e6a476ac --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffers_defaults_t0.j2 @@ -0,0 +1 @@ +BALANCED/buffers_defaults_t0.j2 \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffers_defaults_t1.j2 deleted file mode 100644 index e1a7200cc57f..000000000000 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffers_defaults_t1.j2 +++ /dev/null @@ -1,47 +0,0 @@ - -{%- set default_cable = '40m' %} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,128,4) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "10875072", - "type": "ingress", - "mode": "dynamic", - "xoff": "4194112" - }, - "egress_lossy_pool": { - "size": "9243812", - "type": "egress", - "mode": "dynamic" - }, - "egress_lossless_pool": { - "size": "15982720", - "type": "egress", - "mode": "static" - } - }, - "BUFFER_PROFILE": { - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "dynamic_th":"3" - }, - "egress_lossless_profile": { - "pool":"egress_lossless_pool", - "size":"1518", - "static_th":"15982720" - }, - "egress_lossy_profile": { - "pool":"egress_lossy_pool", - "size":"1518", - "dynamic_th":"3" - } - }, -{%- endmacro %} diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffers_defaults_t1.j2 new file mode 120000 index 000000000000..c25cc95d6d57 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/buffers_defaults_t1.j2 @@ -0,0 +1 @@ +BALANCED/buffers_defaults_t1.j2 \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/pg_profile_lookup.ini b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/pg_profile_lookup.ini deleted file mode 100644 index 673df369a9bb..000000000000 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/pg_profile_lookup.ini +++ /dev/null @@ -1,17 +0,0 @@ -# PG lossless profiles. -# speed cable size xon xoff threshold xon_offset - 10000 5m 1248 2288 35776 0 2288 - 25000 5m 1248 2288 53248 0 2288 - 40000 5m 1248 2288 66560 0 2288 - 50000 5m 1248 2288 90272 0 2288 - 100000 5m 1248 2288 165568 0 2288 - 10000 40m 1248 2288 37024 0 2288 - 25000 40m 1248 2288 53248 0 2288 - 40000 40m 1248 2288 71552 0 2288 - 50000 40m 1248 2288 96096 0 2288 - 100000 40m 1248 2288 177632 0 2288 - 10000 300m 1248 2288 46176 0 2288 - 25000 300m 1248 2288 79040 0 2288 - 40000 300m 1248 2288 108160 0 2288 - 50000 300m 1248 2288 141856 0 2288 - 100000 300m 1248 2288 268736 0 2288 diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/pg_profile_lookup.ini b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/pg_profile_lookup.ini new file mode 120000 index 000000000000..297cddb2d223 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/pg_profile_lookup.ini @@ -0,0 +1 @@ +BALANCED/pg_profile_lookup.ini \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/qos.json.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/qos.json.j2 deleted file mode 100644 index 34002048afdb..000000000000 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/qos.json.j2 +++ /dev/null @@ -1,21 +0,0 @@ -{%- macro generate_wred_profiles() %} - "WRED_PROFILE": { - "AZURE_LOSSLESS" : { - "wred_green_enable" : "true", - "wred_yellow_enable" : "true", - "wred_red_enable" : "true", - "ecn" : "ecn_all", - "green_max_threshold" : "2097152", - "green_min_threshold" : "250000", - "yellow_max_threshold" : "2097152", - "yellow_min_threshold" : "1048576", - "red_max_threshold" : "2097152", - "red_min_threshold" : "1048576", - "green_drop_probability" : "5", - "yellow_drop_probability": "5", - "red_drop_probability" : "5" - } - }, -{%- endmacro %} - -{%- include 'qos_config.j2' %} diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/qos.json.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/qos.json.j2 new file mode 120000 index 000000000000..aef6b6765cf2 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/qos.json.j2 @@ -0,0 +1 @@ +BALANCED/qos.json.j2 \ No newline at end of file From 8b9f1fb65dea3ecbf39e6ed53474bae6c93ea177 Mon Sep 17 00:00:00 2001 From: Kevin Wang Date: Thu, 28 Apr 2022 17:13:16 +0800 Subject: [PATCH 111/259] [Buffer] Separate buffer profile for Arista-7260CX3-C64 50G data is not accurate, needs further update. Signed-off-by: Kevin Wang --- .../Arista-7260CX3-C64/BALANCED | 1 + .../Arista-7260CX3-C64/RDMA-CENTRIC | 1 + .../Arista-7260CX3-C64/TCP-CENTRIC | 1 + .../Arista-7260CX3-C64/buffer_ports_t0.j2 | 6 + .../Arista-7260CX3-C64/buffer_ports_t1.j2 | 6 + .../Arista-7260CX3-C64/buffers_defaults_t0.j2 | 57 +--- .../Arista-7260CX3-C64/buffers_defaults_t1.j2 | 67 +--- .../Arista-7260CX3-C64/pg_profile_lookup.ini | 9 +- .../Arista-7260CX3-C64/qos.json.j2 | 293 +----------------- .../th2/7260/BALANCED/buffers_defaults_t0.j2 | 51 +++ .../th2/7260/BALANCED/buffers_defaults_t1.j2 | 61 ++++ .../th2/7260/BALANCED/pg_profile_lookup.ini | 11 + .../profiles/th2/7260/BALANCED/qos.json.j2 | 292 +++++++++++++++++ .../7260/RDMA-CENTRIC/buffers_defaults_t0.j2 | 51 +++ .../7260/RDMA-CENTRIC/buffers_defaults_t1.j2 | 61 ++++ .../7260/RDMA-CENTRIC/pg_profile_lookup.ini | 11 + .../th2/7260/RDMA-CENTRIC/qos.json.j2 | 292 +++++++++++++++++ device/common/profiles/th2/7260/TCP-CENTRIC | 1 + 18 files changed, 850 insertions(+), 422 deletions(-) create mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/BALANCED create mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/RDMA-CENTRIC create mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/TCP-CENTRIC create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffer_ports_t0.j2 create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffer_ports_t1.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t0.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/pg_profile_lookup.ini mode change 100644 => 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 create mode 100644 device/common/profiles/th2/7260/BALANCED/buffers_defaults_t0.j2 create mode 100644 device/common/profiles/th2/7260/BALANCED/buffers_defaults_t1.j2 create mode 100644 device/common/profiles/th2/7260/BALANCED/pg_profile_lookup.ini create mode 100644 device/common/profiles/th2/7260/BALANCED/qos.json.j2 create mode 100644 device/common/profiles/th2/7260/RDMA-CENTRIC/buffers_defaults_t0.j2 create mode 100644 device/common/profiles/th2/7260/RDMA-CENTRIC/buffers_defaults_t1.j2 create mode 100644 device/common/profiles/th2/7260/RDMA-CENTRIC/pg_profile_lookup.ini create mode 100644 device/common/profiles/th2/7260/RDMA-CENTRIC/qos.json.j2 create mode 120000 device/common/profiles/th2/7260/TCP-CENTRIC diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/BALANCED b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/BALANCED new file mode 120000 index 000000000000..a270c70ffc36 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/BALANCED @@ -0,0 +1 @@ +../../../common/profiles/th2/7260/BALANCED \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/RDMA-CENTRIC b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/RDMA-CENTRIC new file mode 120000 index 000000000000..8d1ec6d277a8 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/RDMA-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th2/7260/RDMA-CENTRIC \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/TCP-CENTRIC b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/TCP-CENTRIC new file mode 120000 index 000000000000..7ee783aac6a4 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/TCP-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th2/7260/TCP-CENTRIC \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffer_ports_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffer_ports_t0.j2 new file mode 100644 index 000000000000..2d56c4b38f9e --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffer_ports_t0.j2 @@ -0,0 +1,6 @@ +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,64) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffer_ports_t1.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffer_ports_t1.j2 new file mode 100644 index 000000000000..2d56c4b38f9e --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffer_ports_t1.j2 @@ -0,0 +1,6 @@ +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,64) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t0.j2 deleted file mode 100644 index bee86a9b3a85..000000000000 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t0.j2 +++ /dev/null @@ -1,56 +0,0 @@ -{%- set default_cable = '5m' %} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,64) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- import 'buffers_pool_sizes_t0.j2' as defs with context %} -{%- set ingress_lossless_pool_size = defs.ingress_lossless_pool_size %} -{%- set egress_lossy_pool_size = defs.egress_lossy_pool_size %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "{{ ingress_lossless_pool_size }}", - "type": "ingress", - "mode": "dynamic", - "xoff": "7827456" - }, - "egress_lossy_pool": { - "size": "{{ egress_lossy_pool_size }}", - "type": "egress", - "mode": "dynamic" - }, - "egress_lossless_pool": { - "size": "42349632", - "type": "egress", - "mode": "static" - } - }, - "BUFFER_PROFILE": { - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "static_th":"44302336" - }, - "egress_lossless_profile": { - "pool":"egress_lossless_pool", - "size":"0", - "static_th":"42349632" - }, - "egress_lossy_profile": { - "pool":"egress_lossy_pool", - "size":"1664", - "dynamic_th":"-1" - } - }, -{%- endmacro %} - -{% import 'buffers_extra_queues.j2' as defs with context %} - -{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} -{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} -{%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t0.j2 new file mode 120000 index 000000000000..9524e6a476ac --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t0.j2 @@ -0,0 +1 @@ +BALANCED/buffers_defaults_t0.j2 \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 deleted file mode 100644 index 469f5fc4001a..000000000000 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 +++ /dev/null @@ -1,66 +0,0 @@ -{%- set default_cable = '300m' %} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,64) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- import 'buffers_pool_sizes_t1.j2' as defs with context %} -{%- set ingress_lossless_pool_size = defs.ingress_lossless_pool_size %} -{%- set egress_lossy_pool_size = defs.egress_lossy_pool_size %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - {# SS Tab2 Row 71 #} - "size": "{{ ingress_lossless_pool_size }}", - "type": "ingress", - "mode": "dynamic", - {# SS Tab2 Row 68 #} - "xoff": "8965632" - }, - "egress_lossy_pool": { - {# SS Tab2 Row 60 #} - "size": "{{ egress_lossy_pool_size }}", - "type": "egress", - "mode": "dynamic" - }, - "egress_lossless_pool": { - {# SS Tab2 Row 56 #} - "size": "43481152", - "type": "egress", - "mode": "static" - } - }, - "BUFFER_PROFILE": { - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - {# SS Tab1 Row 9 #} - "static_th":"44302336" - }, - "egress_lossless_profile": { - "pool":"egress_lossless_pool", - "size":"0", - {# SS Tab2 Row 56 #} - "static_th":"43481152" - }, - "egress_lossy_profile": { - "pool":"egress_lossy_pool", - "size":"1664", - "dynamic_th":"-1" - } - }, -{%- endmacro %} - -{% import 'buffers_extra_queues.j2' as defs1 with context %} -{% import 'buffers_extra_pgs.j2' as defs2 with context %} - -{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} -{{ defs1.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} -{%- endmacro %} -{%- macro generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) %} -{{ defs2.generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) }} -{%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 new file mode 120000 index 000000000000..c25cc95d6d57 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_defaults_t1.j2 @@ -0,0 +1 @@ +BALANCED/buffers_defaults_t1.j2 \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/pg_profile_lookup.ini b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/pg_profile_lookup.ini deleted file mode 100644 index 0e71479fc2c2..000000000000 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/pg_profile_lookup.ini +++ /dev/null @@ -1,8 +0,0 @@ -# PG lossless profiles. -# speed cable size xon xoff threshold xon_offset - 100000 5m 1248 1248 54080 -3 2496 - 100000 40m 1248 1248 59696 -3 2496 - 100000 300m 1248 1248 101088 -3 2496 - 40000 5m 1248 1248 29536 -3 2496 - 40000 40m 1248 1248 31616 -3 2496 - 40000 300m 1248 1248 48256 -3 2496 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/pg_profile_lookup.ini b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/pg_profile_lookup.ini new file mode 120000 index 000000000000..297cddb2d223 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/pg_profile_lookup.ini @@ -0,0 +1 @@ +BALANCED/pg_profile_lookup.ini \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 deleted file mode 100644 index cb3ad17faa39..000000000000 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 +++ /dev/null @@ -1,292 +0,0 @@ -{% if ('type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'LeafRouter') %} -{%- macro generate_dscp_to_tc_map() %} - "DSCP_TO_TC_MAP": { - "AZURE": { - "0" : "1", - "1" : "1", - "2" : "2", - "3" : "3", - "4" : "4", - "5" : "1", - "6" : "6", - "7" : "1", - "8" : "0", - "9" : "1", - "10": "1", - "11": "1", - "12": "1", - "13": "1", - "14": "1", - "15": "1", - "16": "1", - "17": "1", - "18": "1", - "19": "1", - "20": "1", - "21": "1", - "22": "1", - "23": "1", - "24": "1", - "25": "1", - "26": "1", - "27": "1", - "28": "1", - "29": "1", - "30": "1", - "31": "1", - "32": "1", - "33": "1", - "34": "1", - "35": "1", - "36": "1", - "37": "1", - "38": "1", - "39": "1", - "40": "1", - "41": "1", - "42": "1", - "43": "1", - "44": "1", - "45": "1", - "46": "5", - "47": "1", - "48": "7", - "49": "1", - "50": "1", - "51": "1", - "52": "1", - "53": "1", - "54": "1", - "55": "1", - "56": "1", - "57": "1", - "58": "1", - "59": "1", - "60": "1", - "61": "1", - "62": "1", - "63": "1" - } - }, -{%- endmacro %} -{%- macro generate_tc_to_pg_map() %} - "TC_TO_PRIORITY_GROUP_MAP": { - "AZURE": { - "0": "0", - "1": "0", - "2": "2", - "3": "3", - "4": "4", - "5": "0", - "6": "6", - "7": "0" - } - }, -{%- endmacro %} -{% elif ('subtype' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['subtype'] == 'DualToR') %} -{%- macro generate_dscp_to_tc_map() %} - "DSCP_TO_TC_MAP": { - "AZURE": { - "0" : "1", - "1" : "1", - "2" : "1", - "3" : "3", - "4" : "4", - "5" : "1", - "6" : "1", - "7" : "1", - "8" : "0", - "9" : "1", - "10": "1", - "11": "1", - "12": "1", - "13": "1", - "14": "1", - "15": "1", - "16": "1", - "17": "1", - "18": "1", - "19": "1", - "20": "1", - "21": "1", - "22": "1", - "23": "1", - "24": "1", - "25": "1", - "26": "1", - "27": "1", - "28": "1", - "29": "1", - "30": "1", - "31": "1", - "32": "1", - "33": "8", - "34": "1", - "35": "1", - "36": "1", - "37": "1", - "38": "1", - "39": "1", - "40": "1", - "41": "1", - "42": "1", - "43": "1", - "44": "1", - "45": "1", - "46": "5", - "47": "1", - "48": "7", - "49": "1", - "50": "1", - "51": "1", - "52": "1", - "53": "1", - "54": "1", - "55": "1", - "56": "1", - "57": "1", - "58": "1", - "59": "1", - "60": "1", - "61": "1", - "62": "1", - "63": "1" - }, - "AZURE_TUNNEL": { - "0" : "1", - "1" : "1", - "2" : "1", - "3" : "3", - "4" : "4", - "5" : "1", - "6" : "1", - "7" : "1", - "8" : "0", - "9" : "1", - "10": "1", - "11": "1", - "12": "1", - "13": "1", - "14": "1", - "15": "1", - "16": "1", - "17": "1", - "18": "1", - "19": "1", - "20": "1", - "21": "1", - "22": "1", - "23": "1", - "24": "1", - "25": "1", - "26": "1", - "27": "1", - "28": "1", - "29": "1", - "30": "1", - "31": "1", - "32": "1", - "33": "8", - "34": "1", - "35": "1", - "36": "1", - "37": "1", - "38": "1", - "39": "1", - "40": "1", - "41": "1", - "42": "1", - "43": "1", - "44": "1", - "45": "1", - "46": "5", - "47": "1", - "48": "7", - "49": "1", - "50": "1", - "51": "1", - "52": "1", - "53": "1", - "54": "1", - "55": "1", - "56": "1", - "57": "1", - "58": "1", - "59": "1", - "60": "1", - "61": "1", - "62": "1", - "63": "1" - } - }, -{%- endmacro %} -{%- macro generate_tc_to_pg_map() %} - "TC_TO_PRIORITY_GROUP_MAP": { - "AZURE": { - "0": "0", - "1": "0", - "2": "2", - "3": "3", - "4": "4", - "5": "0", - "6": "6", - "7": "0", - "8": "0" - }, - "AZURE_TUNNEL": { - "0": "0", - "1": "0", - "2": "0", - "3": "2", - "4": "6", - "5": "0", - "6": "0", - "7": "0", - "8": "0" - } - }, -{%- endmacro %} -{%- macro generate_tc_to_queue_map() %} - "TC_TO_QUEUE_MAP": { - "AZURE": { - "0": "0", - "1": "1", - "2": "1", - "3": "3", - "4": "4", - "5": "5", - "6": "6", - "7": "7", - "8": "1" - }, - "AZURE_TUNNEL": { - "0": "0", - "1": "1", - "2": "1", - "3": "2", - "4": "6", - "5": "5", - "6": "1", - "7": "7", - "8": "1" - } - }, -{%- endmacro %} -{%- macro generate_tc_to_dscp_map() %} - "TC_TO_DSCP_MAP": { - "AZURE_TUNNEL": { - "0": "8", - "1": "0", - "2": "0", - "3": "2", - "4": "6", - "5": "46", - "6": "0", - "7": "48", - "8": "33" - } - }, -{%- endmacro %} -{% endif %} - -{%- include 'qos_config.j2' %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 new file mode 120000 index 000000000000..aef6b6765cf2 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/qos.json.j2 @@ -0,0 +1 @@ +BALANCED/qos.json.j2 \ No newline at end of file diff --git a/device/common/profiles/th2/7260/BALANCED/buffers_defaults_t0.j2 b/device/common/profiles/th2/7260/BALANCED/buffers_defaults_t0.j2 new file mode 100644 index 000000000000..2d8e7cafe17e --- /dev/null +++ b/device/common/profiles/th2/7260/BALANCED/buffers_defaults_t0.j2 @@ -0,0 +1,51 @@ +{%- set default_cable = '5m' %} + +{%- include 'buffer_ports_t0.j2' %} + +{%- import 'buffers_pool_sizes_t0.j2' as defs with context %} +{%- set ingress_lossless_pool_size = defs.ingress_lossless_pool_size %} +{%- set egress_lossy_pool_size = defs.egress_lossy_pool_size %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "{{ ingress_lossless_pool_size }}", + "type": "ingress", + "mode": "dynamic", + "xoff": "7827456" + }, + "egress_lossy_pool": { + "size": "{{ egress_lossy_pool_size }}", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "42349632", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "static_th":"44302336" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"0", + "static_th":"42349632" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1664", + "dynamic_th":"-1" + } + }, +{%- endmacro %} + +{% import 'buffers_extra_queues.j2' as defs with context %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} +{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{%- endmacro %} diff --git a/device/common/profiles/th2/7260/BALANCED/buffers_defaults_t1.j2 b/device/common/profiles/th2/7260/BALANCED/buffers_defaults_t1.j2 new file mode 100644 index 000000000000..118dba43177a --- /dev/null +++ b/device/common/profiles/th2/7260/BALANCED/buffers_defaults_t1.j2 @@ -0,0 +1,61 @@ +{%- set default_cable = '300m' %} + +{%- include 'buffer_ports_t1.j2' %} + +{%- import 'buffers_pool_sizes_t1.j2' as defs with context %} +{%- set ingress_lossless_pool_size = defs.ingress_lossless_pool_size %} +{%- set egress_lossy_pool_size = defs.egress_lossy_pool_size %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + {# SS Tab2 Row 71 #} + "size": "{{ ingress_lossless_pool_size }}", + "type": "ingress", + "mode": "dynamic", + {# SS Tab2 Row 68 #} + "xoff": "8965632" + }, + "egress_lossy_pool": { + {# SS Tab2 Row 60 #} + "size": "{{ egress_lossy_pool_size }}", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + {# SS Tab2 Row 56 #} + "size": "43481152", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + {# SS Tab1 Row 9 #} + "static_th":"44302336" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"0", + {# SS Tab2 Row 56 #} + "static_th":"43481152" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1664", + "dynamic_th":"-1" + } + }, +{%- endmacro %} + +{% import 'buffers_extra_queues.j2' as defs1 with context %} +{% import 'buffers_extra_pgs.j2' as defs2 with context %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} +{{ defs1.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{%- endmacro %} +{%- macro generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) %} +{{ defs2.generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) }} +{%- endmacro %} diff --git a/device/common/profiles/th2/7260/BALANCED/pg_profile_lookup.ini b/device/common/profiles/th2/7260/BALANCED/pg_profile_lookup.ini new file mode 100644 index 000000000000..9d94e3fc1e52 --- /dev/null +++ b/device/common/profiles/th2/7260/BALANCED/pg_profile_lookup.ini @@ -0,0 +1,11 @@ +# PG lossless profiles. +# speed cable size xon xoff threshold xon_offset + 100000 5m 1248 1248 54080 -3 2496 + 100000 40m 1248 1248 59696 -3 2496 + 100000 300m 1248 1248 101088 -3 2496 + 50000 5m 1248 1248 54080 -3 2496 + 50000 40m 1248 1248 59696 -3 2496 + 50000 300m 1248 1248 101088 -3 2496 + 40000 5m 1248 1248 29536 -3 2496 + 40000 40m 1248 1248 31616 -3 2496 + 40000 300m 1248 1248 48256 -3 2496 diff --git a/device/common/profiles/th2/7260/BALANCED/qos.json.j2 b/device/common/profiles/th2/7260/BALANCED/qos.json.j2 new file mode 100644 index 000000000000..cb3ad17faa39 --- /dev/null +++ b/device/common/profiles/th2/7260/BALANCED/qos.json.j2 @@ -0,0 +1,292 @@ +{% if ('type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'LeafRouter') %} +{%- macro generate_dscp_to_tc_map() %} + "DSCP_TO_TC_MAP": { + "AZURE": { + "0" : "1", + "1" : "1", + "2" : "2", + "3" : "3", + "4" : "4", + "5" : "1", + "6" : "6", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "1", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "7", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" + } + }, +{%- endmacro %} +{%- macro generate_tc_to_pg_map() %} + "TC_TO_PRIORITY_GROUP_MAP": { + "AZURE": { + "0": "0", + "1": "0", + "2": "2", + "3": "3", + "4": "4", + "5": "0", + "6": "6", + "7": "0" + } + }, +{%- endmacro %} +{% elif ('subtype' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['subtype'] == 'DualToR') %} +{%- macro generate_dscp_to_tc_map() %} + "DSCP_TO_TC_MAP": { + "AZURE": { + "0" : "1", + "1" : "1", + "2" : "1", + "3" : "3", + "4" : "4", + "5" : "1", + "6" : "1", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "8", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "7", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" + }, + "AZURE_TUNNEL": { + "0" : "1", + "1" : "1", + "2" : "1", + "3" : "3", + "4" : "4", + "5" : "1", + "6" : "1", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "8", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "7", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" + } + }, +{%- endmacro %} +{%- macro generate_tc_to_pg_map() %} + "TC_TO_PRIORITY_GROUP_MAP": { + "AZURE": { + "0": "0", + "1": "0", + "2": "2", + "3": "3", + "4": "4", + "5": "0", + "6": "6", + "7": "0", + "8": "0" + }, + "AZURE_TUNNEL": { + "0": "0", + "1": "0", + "2": "0", + "3": "2", + "4": "6", + "5": "0", + "6": "0", + "7": "0", + "8": "0" + } + }, +{%- endmacro %} +{%- macro generate_tc_to_queue_map() %} + "TC_TO_QUEUE_MAP": { + "AZURE": { + "0": "0", + "1": "1", + "2": "1", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "1" + }, + "AZURE_TUNNEL": { + "0": "0", + "1": "1", + "2": "1", + "3": "2", + "4": "6", + "5": "5", + "6": "1", + "7": "7", + "8": "1" + } + }, +{%- endmacro %} +{%- macro generate_tc_to_dscp_map() %} + "TC_TO_DSCP_MAP": { + "AZURE_TUNNEL": { + "0": "8", + "1": "0", + "2": "0", + "3": "2", + "4": "6", + "5": "46", + "6": "0", + "7": "48", + "8": "33" + } + }, +{%- endmacro %} +{% endif %} + +{%- include 'qos_config.j2' %} diff --git a/device/common/profiles/th2/7260/RDMA-CENTRIC/buffers_defaults_t0.j2 b/device/common/profiles/th2/7260/RDMA-CENTRIC/buffers_defaults_t0.j2 new file mode 100644 index 000000000000..2d8e7cafe17e --- /dev/null +++ b/device/common/profiles/th2/7260/RDMA-CENTRIC/buffers_defaults_t0.j2 @@ -0,0 +1,51 @@ +{%- set default_cable = '5m' %} + +{%- include 'buffer_ports_t0.j2' %} + +{%- import 'buffers_pool_sizes_t0.j2' as defs with context %} +{%- set ingress_lossless_pool_size = defs.ingress_lossless_pool_size %} +{%- set egress_lossy_pool_size = defs.egress_lossy_pool_size %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "{{ ingress_lossless_pool_size }}", + "type": "ingress", + "mode": "dynamic", + "xoff": "7827456" + }, + "egress_lossy_pool": { + "size": "{{ egress_lossy_pool_size }}", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "42349632", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "static_th":"44302336" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"0", + "static_th":"42349632" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1664", + "dynamic_th":"-1" + } + }, +{%- endmacro %} + +{% import 'buffers_extra_queues.j2' as defs with context %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} +{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{%- endmacro %} diff --git a/device/common/profiles/th2/7260/RDMA-CENTRIC/buffers_defaults_t1.j2 b/device/common/profiles/th2/7260/RDMA-CENTRIC/buffers_defaults_t1.j2 new file mode 100644 index 000000000000..118dba43177a --- /dev/null +++ b/device/common/profiles/th2/7260/RDMA-CENTRIC/buffers_defaults_t1.j2 @@ -0,0 +1,61 @@ +{%- set default_cable = '300m' %} + +{%- include 'buffer_ports_t1.j2' %} + +{%- import 'buffers_pool_sizes_t1.j2' as defs with context %} +{%- set ingress_lossless_pool_size = defs.ingress_lossless_pool_size %} +{%- set egress_lossy_pool_size = defs.egress_lossy_pool_size %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + {# SS Tab2 Row 71 #} + "size": "{{ ingress_lossless_pool_size }}", + "type": "ingress", + "mode": "dynamic", + {# SS Tab2 Row 68 #} + "xoff": "8965632" + }, + "egress_lossy_pool": { + {# SS Tab2 Row 60 #} + "size": "{{ egress_lossy_pool_size }}", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + {# SS Tab2 Row 56 #} + "size": "43481152", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + {# SS Tab1 Row 9 #} + "static_th":"44302336" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"0", + {# SS Tab2 Row 56 #} + "static_th":"43481152" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"1664", + "dynamic_th":"-1" + } + }, +{%- endmacro %} + +{% import 'buffers_extra_queues.j2' as defs1 with context %} +{% import 'buffers_extra_pgs.j2' as defs2 with context %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} +{{ defs1.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} +{%- endmacro %} +{%- macro generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) %} +{{ defs2.generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) }} +{%- endmacro %} diff --git a/device/common/profiles/th2/7260/RDMA-CENTRIC/pg_profile_lookup.ini b/device/common/profiles/th2/7260/RDMA-CENTRIC/pg_profile_lookup.ini new file mode 100644 index 000000000000..9d94e3fc1e52 --- /dev/null +++ b/device/common/profiles/th2/7260/RDMA-CENTRIC/pg_profile_lookup.ini @@ -0,0 +1,11 @@ +# PG lossless profiles. +# speed cable size xon xoff threshold xon_offset + 100000 5m 1248 1248 54080 -3 2496 + 100000 40m 1248 1248 59696 -3 2496 + 100000 300m 1248 1248 101088 -3 2496 + 50000 5m 1248 1248 54080 -3 2496 + 50000 40m 1248 1248 59696 -3 2496 + 50000 300m 1248 1248 101088 -3 2496 + 40000 5m 1248 1248 29536 -3 2496 + 40000 40m 1248 1248 31616 -3 2496 + 40000 300m 1248 1248 48256 -3 2496 diff --git a/device/common/profiles/th2/7260/RDMA-CENTRIC/qos.json.j2 b/device/common/profiles/th2/7260/RDMA-CENTRIC/qos.json.j2 new file mode 100644 index 000000000000..cb3ad17faa39 --- /dev/null +++ b/device/common/profiles/th2/7260/RDMA-CENTRIC/qos.json.j2 @@ -0,0 +1,292 @@ +{% if ('type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'LeafRouter') %} +{%- macro generate_dscp_to_tc_map() %} + "DSCP_TO_TC_MAP": { + "AZURE": { + "0" : "1", + "1" : "1", + "2" : "2", + "3" : "3", + "4" : "4", + "5" : "1", + "6" : "6", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "1", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "7", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" + } + }, +{%- endmacro %} +{%- macro generate_tc_to_pg_map() %} + "TC_TO_PRIORITY_GROUP_MAP": { + "AZURE": { + "0": "0", + "1": "0", + "2": "2", + "3": "3", + "4": "4", + "5": "0", + "6": "6", + "7": "0" + } + }, +{%- endmacro %} +{% elif ('subtype' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['subtype'] == 'DualToR') %} +{%- macro generate_dscp_to_tc_map() %} + "DSCP_TO_TC_MAP": { + "AZURE": { + "0" : "1", + "1" : "1", + "2" : "1", + "3" : "3", + "4" : "4", + "5" : "1", + "6" : "1", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "8", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "7", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" + }, + "AZURE_TUNNEL": { + "0" : "1", + "1" : "1", + "2" : "1", + "3" : "3", + "4" : "4", + "5" : "1", + "6" : "1", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "8", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "7", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" + } + }, +{%- endmacro %} +{%- macro generate_tc_to_pg_map() %} + "TC_TO_PRIORITY_GROUP_MAP": { + "AZURE": { + "0": "0", + "1": "0", + "2": "2", + "3": "3", + "4": "4", + "5": "0", + "6": "6", + "7": "0", + "8": "0" + }, + "AZURE_TUNNEL": { + "0": "0", + "1": "0", + "2": "0", + "3": "2", + "4": "6", + "5": "0", + "6": "0", + "7": "0", + "8": "0" + } + }, +{%- endmacro %} +{%- macro generate_tc_to_queue_map() %} + "TC_TO_QUEUE_MAP": { + "AZURE": { + "0": "0", + "1": "1", + "2": "1", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "1" + }, + "AZURE_TUNNEL": { + "0": "0", + "1": "1", + "2": "1", + "3": "2", + "4": "6", + "5": "5", + "6": "1", + "7": "7", + "8": "1" + } + }, +{%- endmacro %} +{%- macro generate_tc_to_dscp_map() %} + "TC_TO_DSCP_MAP": { + "AZURE_TUNNEL": { + "0": "8", + "1": "0", + "2": "0", + "3": "2", + "4": "6", + "5": "46", + "6": "0", + "7": "48", + "8": "33" + } + }, +{%- endmacro %} +{% endif %} + +{%- include 'qos_config.j2' %} diff --git a/device/common/profiles/th2/7260/TCP-CENTRIC b/device/common/profiles/th2/7260/TCP-CENTRIC new file mode 120000 index 000000000000..d6f7127aa748 --- /dev/null +++ b/device/common/profiles/th2/7260/TCP-CENTRIC @@ -0,0 +1 @@ +BALANCED \ No newline at end of file From a62af01e9e19ff22ddf13dba247fcb338e38e114 Mon Sep 17 00:00:00 2001 From: Kevin Wang Date: Thu, 28 Apr 2022 17:19:43 +0800 Subject: [PATCH 112/259] [Buffer] Separate buffer profile for Arista-7260CX3-D108C8 Signed-off-by: Kevin Wang --- .../Arista-7260CX3-D108C8/BALANCED | 1 + .../Arista-7260CX3-D108C8/RDMA-CENTRIC | 1 + .../Arista-7260CX3-D108C8/TCP-CENTRIC | 1 + .../Arista-7260CX3-D108C8/buffer_ports_t0.j2 | 14 ++++ .../buffers_defaults_t0.j2 | 65 +------------------ .../pg_profile_lookup.ini | 9 +-- .../Arista-7260CX3-D108C8/qos.json.j2 | 2 +- 7 files changed, 20 insertions(+), 73 deletions(-) create mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/BALANCED create mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/RDMA-CENTRIC create mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/TCP-CENTRIC create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffer_ports_t0.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_defaults_t0.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/pg_profile_lookup.ini diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/BALANCED b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/BALANCED new file mode 120000 index 000000000000..a270c70ffc36 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/BALANCED @@ -0,0 +1 @@ +../../../common/profiles/th2/7260/BALANCED \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/RDMA-CENTRIC b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/RDMA-CENTRIC new file mode 120000 index 000000000000..8d1ec6d277a8 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/RDMA-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th2/7260/RDMA-CENTRIC \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/TCP-CENTRIC b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/TCP-CENTRIC new file mode 120000 index 000000000000..7ee783aac6a4 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/TCP-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th2/7260/TCP-CENTRIC \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffer_ports_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffer_ports_t0.j2 new file mode 100644 index 000000000000..3e209865c308 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffer_ports_t0.j2 @@ -0,0 +1,14 @@ +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,12) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} + {%- endfor %} + {%- for port_idx in range(20,64) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} + {%- endfor %} + {%- for port_idx in range(12,20) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_defaults_t0.j2 deleted file mode 100644 index 5ac1d2d2aef9..000000000000 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_defaults_t0.j2 +++ /dev/null @@ -1,64 +0,0 @@ -{%- set default_cable = '5m' %} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,12) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} - {%- endfor %} - {%- for port_idx in range(20,64) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} - {%- endfor %} - {%- for port_idx in range(12,20) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- import 'buffers_pool_sizes_t0.j2' as defs with context %} -{%- set ingress_lossless_pool_size = defs.ingress_lossless_pool_size %} -{%- set egress_lossy_pool_size = defs.egress_lossy_pool_size %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "{{ ingress_lossless_pool_size }}", - "type": "ingress", - "mode": "dynamic", - "xoff": "7827456" - }, - "egress_lossy_pool": { - "size": "{{ egress_lossy_pool_size }}", - "type": "egress", - "mode": "dynamic" - }, - "egress_lossless_pool": { - "size": "42349632", - "type": "egress", - "mode": "static" - } - }, - "BUFFER_PROFILE": { - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "static_th":"44302336" - }, - "egress_lossless_profile": { - "pool":"egress_lossless_pool", - "size":"0", - "static_th":"42349632" - }, - "egress_lossy_profile": { - "pool":"egress_lossy_pool", - "size":"1664", - "dynamic_th":"-1" - } - }, -{%- endmacro %} - -{% import 'buffers_extra_queues.j2' as defs with context %} - -{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} -{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} -{%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_defaults_t0.j2 new file mode 120000 index 000000000000..9524e6a476ac --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/buffers_defaults_t0.j2 @@ -0,0 +1 @@ +BALANCED/buffers_defaults_t0.j2 \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/pg_profile_lookup.ini b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/pg_profile_lookup.ini deleted file mode 100644 index ed0005610b71..000000000000 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/pg_profile_lookup.ini +++ /dev/null @@ -1,8 +0,0 @@ -# PG lossless profiles. -# speed cable size xon xoff threshold xon_offset - 50000 5m 1248 1248 56160 -3 2496 - 100000 5m 1248 1248 96928 -3 2496 - 50000 40m 1248 1248 96096 -3 2496 - 100000 40m 1248 1248 177632 -3 2496 - 50000 300m 1248 1248 141856 -3 2496 - 100000 300m 1248 1248 268736 -3 2496 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/pg_profile_lookup.ini b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/pg_profile_lookup.ini new file mode 120000 index 000000000000..297cddb2d223 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/pg_profile_lookup.ini @@ -0,0 +1 @@ +BALANCED/pg_profile_lookup.ini \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/qos.json.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/qos.json.j2 index f0ee02749724..aef6b6765cf2 120000 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/qos.json.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/qos.json.j2 @@ -1 +1 @@ -../Arista-7260CX3-C64/qos.json.j2 \ No newline at end of file +BALANCED/qos.json.j2 \ No newline at end of file From 756603240377cd705484e0de7168c49ae9cae82b Mon Sep 17 00:00:00 2001 From: Kevin Wang Date: Thu, 28 Apr 2022 17:21:46 +0800 Subject: [PATCH 113/259] [Buffer] Separate buffer profile for Arista-7260CX3-Q64 Signed-off-by: Kevin Wang --- .../Arista-7260CX3-Q64/BALANCED | 1 + .../Arista-7260CX3-Q64/RDMA-CENTRIC | 1 + .../Arista-7260CX3-Q64/TCP-CENTRIC | 1 + .../Arista-7260CX3-Q64/buffer_ports_t0.j2 | 6 ++ .../Arista-7260CX3-Q64/buffer_ports_t1.j2 | 6 ++ .../Arista-7260CX3-Q64/buffers_defaults_t0.j2 | 57 +---------------- .../Arista-7260CX3-Q64/buffers_defaults_t1.j2 | 61 +------------------ .../buffers_pool_sizes_t1.j2 | 1 + .../Arista-7260CX3-Q64/pg_profile_lookup.ini | 12 +--- .../Arista-7260CX3-Q64/qos.json.j2 | 2 +- 10 files changed, 20 insertions(+), 128 deletions(-) create mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/BALANCED create mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/RDMA-CENTRIC create mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/TCP-CENTRIC create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffer_ports_t0.j2 create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffer_ports_t1.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t0.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 create mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_pool_sizes_t1.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/pg_profile_lookup.ini diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/BALANCED b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/BALANCED new file mode 120000 index 000000000000..a270c70ffc36 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/BALANCED @@ -0,0 +1 @@ +../../../common/profiles/th2/7260/BALANCED \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/RDMA-CENTRIC b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/RDMA-CENTRIC new file mode 120000 index 000000000000..8d1ec6d277a8 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/RDMA-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th2/7260/RDMA-CENTRIC \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/TCP-CENTRIC b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/TCP-CENTRIC new file mode 120000 index 000000000000..7ee783aac6a4 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/TCP-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th2/7260/TCP-CENTRIC \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffer_ports_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffer_ports_t0.j2 new file mode 100644 index 000000000000..2d56c4b38f9e --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffer_ports_t0.j2 @@ -0,0 +1,6 @@ +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,64) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffer_ports_t1.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffer_ports_t1.j2 new file mode 100644 index 000000000000..2d56c4b38f9e --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffer_ports_t1.j2 @@ -0,0 +1,6 @@ +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,64) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t0.j2 deleted file mode 100644 index bee86a9b3a85..000000000000 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t0.j2 +++ /dev/null @@ -1,56 +0,0 @@ -{%- set default_cable = '5m' %} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,64) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- import 'buffers_pool_sizes_t0.j2' as defs with context %} -{%- set ingress_lossless_pool_size = defs.ingress_lossless_pool_size %} -{%- set egress_lossy_pool_size = defs.egress_lossy_pool_size %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "{{ ingress_lossless_pool_size }}", - "type": "ingress", - "mode": "dynamic", - "xoff": "7827456" - }, - "egress_lossy_pool": { - "size": "{{ egress_lossy_pool_size }}", - "type": "egress", - "mode": "dynamic" - }, - "egress_lossless_pool": { - "size": "42349632", - "type": "egress", - "mode": "static" - } - }, - "BUFFER_PROFILE": { - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "static_th":"44302336" - }, - "egress_lossless_profile": { - "pool":"egress_lossless_pool", - "size":"0", - "static_th":"42349632" - }, - "egress_lossy_profile": { - "pool":"egress_lossy_pool", - "size":"1664", - "dynamic_th":"-1" - } - }, -{%- endmacro %} - -{% import 'buffers_extra_queues.j2' as defs with context %} - -{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} -{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} -{%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t0.j2 new file mode 120000 index 000000000000..9524e6a476ac --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t0.j2 @@ -0,0 +1 @@ +BALANCED/buffers_defaults_t0.j2 \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 deleted file mode 100644 index c73fde73562b..000000000000 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 +++ /dev/null @@ -1,60 +0,0 @@ -{%- set default_cable = '300m' %} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,64) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- import 'buffers_pool_sizes_t0.j2' as defs with context %} -{%- set ingress_lossless_pool_size = defs.ingress_lossless_pool_size %} -{%- set egress_lossy_pool_size = defs.egress_lossy_pool_size %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "{{ ingress_lossless_pool_size }}", - "type": "ingress", - "mode": "dynamic", - "xoff": "7827456" - }, - "egress_lossy_pool": { - "size": "{{ egress_lossy_pool_size }}", - "type": "egress", - "mode": "dynamic" - }, - "egress_lossless_pool": { - "size": "42349632", - "type": "egress", - "mode": "static" - } - }, - "BUFFER_PROFILE": { - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "static_th":"44302336" - }, - "egress_lossless_profile": { - "pool":"egress_lossless_pool", - "size":"0", - "static_th":"42349632" - }, - "egress_lossy_profile": { - "pool":"egress_lossy_pool", - "size":"1664", - "dynamic_th":"-1" - } - }, -{%- endmacro %} - -{% import 'buffers_extra_queues.j2' as defs1 with context %} -{% import 'buffers_extra_pgs.j2' as defs2 with context %} - -{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} -{{ defs1.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} -{%- endmacro %} -{%- macro generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) %} -{{ defs2.generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) }} -{%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 new file mode 120000 index 000000000000..c25cc95d6d57 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_defaults_t1.j2 @@ -0,0 +1 @@ +BALANCED/buffers_defaults_t1.j2 \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_pool_sizes_t1.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_pool_sizes_t1.j2 new file mode 120000 index 000000000000..138e7f373e74 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_pool_sizes_t1.j2 @@ -0,0 +1 @@ +../Arista-7260CX3-C64/buffers_pool_sizes_t1.j2 \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/pg_profile_lookup.ini b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/pg_profile_lookup.ini deleted file mode 100644 index ac33b4f961fb..000000000000 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/pg_profile_lookup.ini +++ /dev/null @@ -1,11 +0,0 @@ -# PG lossless profiles. -# speed cable size xon xoff threshold xon_offset - 40000 5m 1248 1248 56160 -3 2496 - 50000 5m 1248 1248 56160 -3 2496 - 100000 5m 1248 1248 96928 -3 2496 - 40000 40m 1248 1248 71552 -3 2496 - 50000 40m 1248 1248 96096 -3 2496 - 100000 40m 1248 1248 177632 -3 2496 - 40000 300m 1248 1248 108160 -3 2496 - 50000 300m 1248 1248 141856 -3 2496 - 100000 300m 1248 1248 268736 -3 2496 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/pg_profile_lookup.ini b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/pg_profile_lookup.ini new file mode 120000 index 000000000000..297cddb2d223 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/pg_profile_lookup.ini @@ -0,0 +1 @@ +BALANCED/pg_profile_lookup.ini \ No newline at end of file diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/qos.json.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/qos.json.j2 index f0ee02749724..aef6b6765cf2 120000 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/qos.json.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/qos.json.j2 @@ -1 +1 @@ -../Arista-7260CX3-C64/qos.json.j2 \ No newline at end of file +BALANCED/qos.json.j2 \ No newline at end of file From a0265de43097364a1d0336b17f81be4ce9b1a08a Mon Sep 17 00:00:00 2001 From: zzhiyuan Date: Tue, 22 Feb 2022 09:11:05 -0800 Subject: [PATCH 114/259] [Arista] [201811] Add Arista-7260CX3-D96C16 HWSKU (#10034) Why I did it This was an ask by Microsoft to provide: 7260 config.bcm file for hardware sku Arista-7260CX3-D92C16 (Named Arista-7260CX3-D96C16). There are 16 100G uplinks: Ethernet13-20/1 Ethernet45-52/1 All other ports are breakout to 2 50G ports. How I did it Copied existing Arista-7260CX3-D108C8 HWSKU and altered the bcm.config and port_config.ini files. How to verify it The new 100G ports do come up with a 201811 image using this HWSKU. Co-authored-by: Zhi Yuan (Carl) Zhao --- .../Arista-7260CX3-D96C16/buffers.json.j2 | 3 + .../buffers_defaults_t0.j2 | 61 ++ .../pg_profile_lookup.ini | 8 + .../Arista-7260CX3-D96C16/port_config.ini | 115 +++ .../Arista-7260CX3-D96C16/qos.json.j2 | 1 + .../Arista-7260CX3-D96C16/sai.profile | 1 + .../th2-a7260cx3-64-96x50G+16x100G.config.bcm | 922 ++++++++++++++++++ 7 files changed, 1111 insertions(+) create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/buffers.json.j2 create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/buffers_defaults_t0.j2 create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/pg_profile_lookup.ini create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/port_config.ini create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/qos.json.j2 create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/sai.profile create mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/th2-a7260cx3-64-96x50G+16x100G.config.bcm diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/buffers.json.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/buffers.json.j2 new file mode 100644 index 000000000000..e6e9e844469b --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/buffers.json.j2 @@ -0,0 +1,3 @@ +{%- set default_topo = 't0' %} +{%- include 'buffers_config.j2' %} + diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/buffers_defaults_t0.j2 new file mode 100644 index 000000000000..178502e287ae --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/buffers_defaults_t0.j2 @@ -0,0 +1,61 @@ +{%- set default_cable = '5m' %} + +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,12) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} + {%- endfor %} + {%- for port_idx in range(12,20) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- endfor %} + {%- for port_idx in range(20,44) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} + {%- endfor %} + {%- for port_idx in range(44,52) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- endfor %} + {%- for port_idx in range(52,64) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "33329088", + "type": "ingress", + "mode": "dynamic", + "xoff": "7827456" + }, + "egress_lossy_pool": { + "size": "26663272", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "42349632", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"[BUFFER_POOL|ingress_lossless_pool]", + "size":"0", + "static_th":"44302336" + }, + "egress_lossless_profile": { + "pool":"[BUFFER_POOL|egress_lossless_pool]", + "size":"0", + "static_th":"42349632" + }, + "egress_lossy_profile": { + "pool":"[BUFFER_POOL|egress_lossy_pool]", + "size":"1664", + "dynamic_th":"-1" + } + }, +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/pg_profile_lookup.ini b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/pg_profile_lookup.ini new file mode 100644 index 000000000000..ed0005610b71 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/pg_profile_lookup.ini @@ -0,0 +1,8 @@ +# PG lossless profiles. +# speed cable size xon xoff threshold xon_offset + 50000 5m 1248 1248 56160 -3 2496 + 100000 5m 1248 1248 96928 -3 2496 + 50000 40m 1248 1248 96096 -3 2496 + 100000 40m 1248 1248 177632 -3 2496 + 50000 300m 1248 1248 141856 -3 2496 + 100000 300m 1248 1248 268736 -3 2496 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/port_config.ini b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/port_config.ini new file mode 100644 index 000000000000..49bd6fd68856 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/port_config.ini @@ -0,0 +1,115 @@ +# name lanes alias index speed +Ethernet0 77,78 Ethernet1/1 1 50000 +Ethernet2 79,80 Ethernet1/3 1 50000 +Ethernet4 65,66 Ethernet2/1 2 50000 +Ethernet6 67,68 Ethernet2/3 2 50000 +Ethernet8 85,86 Ethernet3/1 3 50000 +Ethernet10 87,88 Ethernet3/3 3 50000 +Ethernet12 89,90 Ethernet4/1 4 50000 +Ethernet14 91,92 Ethernet4/3 4 50000 +Ethernet16 109,110 Ethernet5/1 5 50000 +Ethernet18 111,112 Ethernet5/3 5 50000 +Ethernet20 97,98 Ethernet6/1 6 50000 +Ethernet22 99,100 Ethernet6/3 6 50000 +Ethernet24 5,6 Ethernet7/1 7 50000 +Ethernet26 7,8 Ethernet7/3 7 50000 +Ethernet28 13,14 Ethernet8/1 8 50000 +Ethernet30 15,16 Ethernet8/3 8 50000 +Ethernet32 25,26 Ethernet9/1 9 50000 +Ethernet34 27,28 Ethernet9/3 9 50000 +Ethernet36 21,22 Ethernet10/1 10 50000 +Ethernet38 23,24 Ethernet10/3 10 50000 +Ethernet40 37,38 Ethernet11/1 11 50000 +Ethernet42 39,40 Ethernet11/3 11 50000 +Ethernet44 45,46 Ethernet12/1 12 50000 +Ethernet46 47,48 Ethernet12/3 12 50000 +Ethernet48 57,58,59,60 Ethernet13/1 13 100000 +Ethernet52 53,54,55,56 Ethernet14/1 14 100000 +Ethernet56 117,118,119,120 Ethernet15/1 15 100000 +Ethernet60 121,122,123,124 Ethernet16/1 16 100000 +Ethernet64 141,142,143,144 Ethernet17/1 17 100000 +Ethernet68 133,134,135,136 Ethernet18/1 18 100000 +Ethernet72 197,198,199,200 Ethernet19/1 19 100000 +Ethernet76 205,206,207,208 Ethernet20/1 20 100000 +Ethernet80 217,218 Ethernet21/1 21 50000 +Ethernet82 219,220 Ethernet21/3 21 50000 +Ethernet84 213,214 Ethernet22/1 22 50000 +Ethernet86 215,216 Ethernet22/3 22 50000 +Ethernet88 229,230 Ethernet23/1 23 50000 +Ethernet90 231,232 Ethernet23/3 23 50000 +Ethernet92 237,238 Ethernet24/1 24 50000 +Ethernet94 239,240 Ethernet24/3 24 50000 +Ethernet96 249,250 Ethernet25/1 25 50000 +Ethernet98 251,252 Ethernet25/3 25 50000 +Ethernet100 245,246 Ethernet26/1 26 50000 +Ethernet102 247,248 Ethernet26/3 26 50000 +Ethernet104 149,150 Ethernet27/1 27 50000 +Ethernet106 151,152 Ethernet27/3 27 50000 +Ethernet108 153,154 Ethernet28/1 28 50000 +Ethernet110 155,156 Ethernet28/3 28 50000 +Ethernet112 173,174 Ethernet29/1 29 50000 +Ethernet114 175,176 Ethernet29/3 29 50000 +Ethernet116 161,162 Ethernet30/1 30 50000 +Ethernet118 163,164 Ethernet30/3 30 50000 +Ethernet120 181,182 Ethernet31/1 31 50000 +Ethernet122 183,184 Ethernet31/3 31 50000 +Ethernet124 185,186 Ethernet32/1 32 50000 +Ethernet126 187,188 Ethernet32/3 32 50000 +Ethernet128 69,70 Ethernet33/1 33 50000 +Ethernet130 71,72 Ethernet33/3 33 50000 +Ethernet132 73,74 Ethernet34/1 34 50000 +Ethernet134 75,76 Ethernet34/3 34 50000 +Ethernet136 93,94 Ethernet35/1 35 50000 +Ethernet138 95,96 Ethernet35/3 35 50000 +Ethernet140 81,82 Ethernet36/1 36 50000 +Ethernet142 83,84 Ethernet36/3 36 50000 +Ethernet144 101,102 Ethernet37/1 37 50000 +Ethernet146 103,104 Ethernet37/3 37 50000 +Ethernet148 105,106 Ethernet38/1 38 50000 +Ethernet150 107,108 Ethernet38/3 38 50000 +Ethernet152 9,10 Ethernet39/1 39 50000 +Ethernet154 11,12 Ethernet39/3 39 50000 +Ethernet156 1,2 Ethernet40/1 40 50000 +Ethernet158 3,4 Ethernet40/3 40 50000 +Ethernet160 17,18 Ethernet41/1 41 50000 +Ethernet162 19,20 Ethernet41/3 41 50000 +Ethernet164 29,30 Ethernet42/1 42 50000 +Ethernet166 31,32 Ethernet42/3 42 50000 +Ethernet168 41,42 Ethernet43/1 43 50000 +Ethernet170 43,44 Ethernet43/3 43 50000 +Ethernet172 33,34 Ethernet44/1 44 50000 +Ethernet174 35,36 Ethernet44/3 44 50000 +Ethernet176 49,50,51,52 Ethernet45/1 45 100000 +Ethernet180 61,62,63,64 Ethernet46/1 46 100000 +Ethernet184 125,126,127,128 Ethernet47/1 47 100000 +Ethernet188 113,114,115,116 Ethernet48/1 48 100000 +Ethernet192 129,130,131,132 Ethernet49/1 49 100000 +Ethernet196 137,138,139,140 Ethernet50/1 50 100000 +Ethernet200 201,202,203,204 Ethernet51/1 51 100000 +Ethernet204 193,194,195,196 Ethernet52/1 52 100000 +Ethernet208 209,210 Ethernet53/1 53 50000 +Ethernet210 211,212 Ethernet53/3 53 50000 +Ethernet212 221,222 Ethernet54/1 54 50000 +Ethernet214 223,224 Ethernet54/3 54 50000 +Ethernet216 233,234 Ethernet55/1 55 50000 +Ethernet218 235,236 Ethernet55/3 55 50000 +Ethernet220 225,226 Ethernet56/1 56 50000 +Ethernet222 227,228 Ethernet56/3 56 50000 +Ethernet224 241,242 Ethernet57/1 57 50000 +Ethernet226 243,244 Ethernet57/3 57 50000 +Ethernet228 253,254 Ethernet58/1 58 50000 +Ethernet230 255,256 Ethernet58/3 58 50000 +Ethernet232 157,158 Ethernet59/1 59 50000 +Ethernet234 159,160 Ethernet59/3 59 50000 +Ethernet236 145,146 Ethernet60/1 60 50000 +Ethernet238 147,148 Ethernet60/3 60 50000 +Ethernet240 165,166 Ethernet61/1 61 50000 +Ethernet242 167,168 Ethernet61/3 61 50000 +Ethernet244 169,170 Ethernet62/1 62 50000 +Ethernet246 171,172 Ethernet62/3 62 50000 +Ethernet248 189,190 Ethernet63/1 63 50000 +Ethernet250 191,192 Ethernet63/3 63 50000 +Ethernet252 177,178 Ethernet64/1 64 50000 +Ethernet254 179,180 Ethernet64/3 64 50000 +Ethernet256 257 Ethernet65 65 10000 +Ethernet260 259 Ethernet66 66 10000 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/qos.json.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/qos.json.j2 new file mode 100644 index 000000000000..3e548325ea30 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/qos.json.j2 @@ -0,0 +1 @@ +{%- include 'qos_config.j2' %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/sai.profile b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/sai.profile new file mode 100644 index 000000000000..d18e31d2c2a4 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/sai.profile @@ -0,0 +1 @@ +SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/th2-a7260cx3-64-96x50G+16x100G.config.bcm diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/th2-a7260cx3-64-96x50G+16x100G.config.bcm b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/th2-a7260cx3-64-96x50G+16x100G.config.bcm new file mode 100644 index 000000000000..91f61f4b24d6 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/th2-a7260cx3-64-96x50G+16x100G.config.bcm @@ -0,0 +1,922 @@ +PHY_AN_ALLOW_PLL_CHANGE=1 +arl_clean_timeout_usec=15000000 +asf_mem_profile=2 +bcm_num_cos=8 +bcm_stat_flags=1 +bcm_stat_jumbo=9236 +cdma_timeout_usec=15000000 +core_clock_frequency=1700 +dma_desc_timeout_usec=15000000 +dpp_clock_ratio=2:3 +higig2_hdr_mode=1 +ipv6_lpm_128b_enable=1 +l3_alpm_enable=2 +lpm_scaling_enable=0 +l2xmsg_mode=1 +max_vp_lags=0 +mem_scan_enable=1 +miim_intr_enable=0 +module_64ports=1 +os=unix +oversubscribe_mode=1 +pbmp_xport_xe=0xfffffffd3fffffff4fffffffc7ffffffe +#pbmp_xport_xe=0x47fffffff1fffffffcfffffffe7ffffffe +phy_an_allow_pll_change_hg=0 +phy_an_c73=1 +phy_chain_rx_lane_map_physical{1.0}=0x3210 +phy_chain_rx_lane_map_physical{101.0}=0x0123 +phy_chain_rx_lane_map_physical{105.0}=0x0123 +phy_chain_rx_lane_map_physical{109.0}=0x0123 +phy_chain_rx_lane_map_physical{113.0}=0x2301 +phy_chain_rx_lane_map_physical{117.0}=0x3210 +phy_chain_rx_lane_map_physical{121.0}=0x3210 +phy_chain_rx_lane_map_physical{125.0}=0x1203 +phy_chain_rx_lane_map_physical{129.0}=0x3210 +phy_chain_rx_lane_map_physical{13.0}=0x0321 +phy_chain_rx_lane_map_physical{133.0}=0x1032 +phy_chain_rx_lane_map_physical{137.0}=0x3210 +phy_chain_rx_lane_map_physical{141.0}=0x0123 +phy_chain_rx_lane_map_physical{145.0}=0x3210 +phy_chain_rx_lane_map_physical{149.0}=0x2310 +phy_chain_rx_lane_map_physical{153.0}=0x0132 +phy_chain_rx_lane_map_physical{157.0}=0x1302 +phy_chain_rx_lane_map_physical{161.0}=0x3021 +phy_chain_rx_lane_map_physical{165.0}=0x2031 +phy_chain_rx_lane_map_physical{169.0}=0x2031 +phy_chain_rx_lane_map_physical{17.0}=0x3210 +phy_chain_rx_lane_map_physical{173.0}=0x1302 +phy_chain_rx_lane_map_physical{177.0}=0x2031 +phy_chain_rx_lane_map_physical{181.0}=0x0213 +phy_chain_rx_lane_map_physical{185.0}=0x0213 +phy_chain_rx_lane_map_physical{189.0}=0x1302 +phy_chain_rx_lane_map_physical{193.0}=0x3120 +phy_chain_rx_lane_map_physical{197.0}=0x0231 +phy_chain_rx_lane_map_physical{201.0}=0x2031 +phy_chain_rx_lane_map_physical{205.0}=0x0213 +phy_chain_rx_lane_map_physical{209.0}=0x2013 +phy_chain_rx_lane_map_physical{21.0}=0x3021 +phy_chain_rx_lane_map_physical{213.0}=0x3021 +phy_chain_rx_lane_map_physical{217.0}=0x0231 +phy_chain_rx_lane_map_physical{221.0}=0x2031 +phy_chain_rx_lane_map_physical{225.0}=0x1203 +phy_chain_rx_lane_map_physical{229.0}=0x1230 +phy_chain_rx_lane_map_physical{233.0}=0x3021 +phy_chain_rx_lane_map_physical{237.0}=0x1032 +phy_chain_rx_lane_map_physical{241.0}=0x2301 +phy_chain_rx_lane_map_physical{245.0}=0x0321 +phy_chain_rx_lane_map_physical{249.0}=0x2301 +phy_chain_rx_lane_map_physical{25.0}=0x2301 +phy_chain_rx_lane_map_physical{253.0}=0x2301 +phy_chain_rx_lane_map_physical{257.0}=0x3210 +phy_chain_rx_lane_map_physical{29.0}=0x3021 +phy_chain_rx_lane_map_physical{33.0}=0x1302 +phy_chain_rx_lane_map_physical{37.0}=0x2031 +phy_chain_rx_lane_map_physical{41.0}=0x3021 +phy_chain_rx_lane_map_physical{45.0}=0x1023 +phy_chain_rx_lane_map_physical{49.0}=0x0213 +phy_chain_rx_lane_map_physical{5.0}=0x3201 +phy_chain_rx_lane_map_physical{53.0}=0x3201 +phy_chain_rx_lane_map_physical{57.0}=0x2013 +phy_chain_rx_lane_map_physical{61.0}=0x0213 +phy_chain_rx_lane_map_physical{65.0}=0x1203 +phy_chain_rx_lane_map_physical{69.0}=0x0213 +phy_chain_rx_lane_map_physical{73.0}=0x0213 +phy_chain_rx_lane_map_physical{77.0}=0x3120 +phy_chain_rx_lane_map_physical{81.0}=0x0213 +phy_chain_rx_lane_map_physical{85.0}=0x2031 +phy_chain_rx_lane_map_physical{89.0}=0x2031 +phy_chain_rx_lane_map_physical{9.0}=0x0321 +phy_chain_rx_lane_map_physical{93.0}=0x3120 +phy_chain_rx_lane_map_physical{97.0}=0x1203 +phy_chain_rx_polarity_flip_physical{1.0}=0x1 +phy_chain_rx_polarity_flip_physical{10.0}=0x0 +phy_chain_rx_polarity_flip_physical{100.0}=0x1 +phy_chain_rx_polarity_flip_physical{101.0}=0x1 +phy_chain_rx_polarity_flip_physical{102.0}=0x0 +phy_chain_rx_polarity_flip_physical{103.0}=0x1 +phy_chain_rx_polarity_flip_physical{104.0}=0x0 +phy_chain_rx_polarity_flip_physical{105.0}=0x1 +phy_chain_rx_polarity_flip_physical{106.0}=0x0 +phy_chain_rx_polarity_flip_physical{107.0}=0x1 +phy_chain_rx_polarity_flip_physical{108.0}=0x0 +phy_chain_rx_polarity_flip_physical{109.0}=0x0 +phy_chain_rx_polarity_flip_physical{11.0}=0x1 +phy_chain_rx_polarity_flip_physical{110.0}=0x1 +phy_chain_rx_polarity_flip_physical{111.0}=0x0 +phy_chain_rx_polarity_flip_physical{112.0}=0x1 +phy_chain_rx_polarity_flip_physical{113.0}=0x1 +phy_chain_rx_polarity_flip_physical{114.0}=0x0 +phy_chain_rx_polarity_flip_physical{115.0}=0x1 +phy_chain_rx_polarity_flip_physical{116.0}=0x0 +phy_chain_rx_polarity_flip_physical{117.0}=0x0 +phy_chain_rx_polarity_flip_physical{118.0}=0x0 +phy_chain_rx_polarity_flip_physical{119.0}=0x1 +phy_chain_rx_polarity_flip_physical{12.0}=0x1 +phy_chain_rx_polarity_flip_physical{120.0}=0x0 +phy_chain_rx_polarity_flip_physical{121.0}=0x1 +phy_chain_rx_polarity_flip_physical{122.0}=0x0 +phy_chain_rx_polarity_flip_physical{123.0}=0x1 +phy_chain_rx_polarity_flip_physical{124.0}=0x0 +phy_chain_rx_polarity_flip_physical{125.0}=0x0 +phy_chain_rx_polarity_flip_physical{126.0}=0x1 +phy_chain_rx_polarity_flip_physical{127.0}=0x1 +phy_chain_rx_polarity_flip_physical{128.0}=0x1 +phy_chain_rx_polarity_flip_physical{129.0}=0x0 +phy_chain_rx_polarity_flip_physical{13.0}=0x1 +phy_chain_rx_polarity_flip_physical{130.0}=0x1 +phy_chain_rx_polarity_flip_physical{131.0}=0x1 +phy_chain_rx_polarity_flip_physical{132.0}=0x0 +phy_chain_rx_polarity_flip_physical{133.0}=0x1 +phy_chain_rx_polarity_flip_physical{134.0}=0x1 +phy_chain_rx_polarity_flip_physical{135.0}=0x1 +phy_chain_rx_polarity_flip_physical{136.0}=0x0 +phy_chain_rx_polarity_flip_physical{137.0}=0x0 +phy_chain_rx_polarity_flip_physical{138.0}=0x0 +phy_chain_rx_polarity_flip_physical{139.0}=0x1 +phy_chain_rx_polarity_flip_physical{14.0}=0x0 +phy_chain_rx_polarity_flip_physical{140.0}=0x0 +phy_chain_rx_polarity_flip_physical{141.0}=0x1 +phy_chain_rx_polarity_flip_physical{142.0}=0x0 +phy_chain_rx_polarity_flip_physical{143.0}=0x1 +phy_chain_rx_polarity_flip_physical{144.0}=0x0 +phy_chain_rx_polarity_flip_physical{145.0}=0x1 +phy_chain_rx_polarity_flip_physical{146.0}=0x0 +phy_chain_rx_polarity_flip_physical{147.0}=0x1 +phy_chain_rx_polarity_flip_physical{148.0}=0x0 +phy_chain_rx_polarity_flip_physical{149.0}=0x0 +phy_chain_rx_polarity_flip_physical{15.0}=0x1 +phy_chain_rx_polarity_flip_physical{150.0}=0x1 +phy_chain_rx_polarity_flip_physical{151.0}=0x1 +phy_chain_rx_polarity_flip_physical{152.0}=0x0 +phy_chain_rx_polarity_flip_physical{153.0}=0x0 +phy_chain_rx_polarity_flip_physical{154.0}=0x1 +phy_chain_rx_polarity_flip_physical{155.0}=0x1 +phy_chain_rx_polarity_flip_physical{156.0}=0x0 +phy_chain_rx_polarity_flip_physical{157.0}=0x0 +phy_chain_rx_polarity_flip_physical{158.0}=0x0 +phy_chain_rx_polarity_flip_physical{159.0}=0x1 +phy_chain_rx_polarity_flip_physical{16.0}=0x0 +phy_chain_rx_polarity_flip_physical{160.0}=0x0 +phy_chain_rx_polarity_flip_physical{161.0}=0x1 +phy_chain_rx_polarity_flip_physical{162.0}=0x1 +phy_chain_rx_polarity_flip_physical{163.0}=0x0 +phy_chain_rx_polarity_flip_physical{164.0}=0x1 +phy_chain_rx_polarity_flip_physical{165.0}=0x0 +phy_chain_rx_polarity_flip_physical{166.0}=0x0 +phy_chain_rx_polarity_flip_physical{167.0}=0x1 +phy_chain_rx_polarity_flip_physical{168.0}=0x1 +phy_chain_rx_polarity_flip_physical{169.0}=0x1 +phy_chain_rx_polarity_flip_physical{17.0}=0x1 +phy_chain_rx_polarity_flip_physical{170.0}=0x1 +phy_chain_rx_polarity_flip_physical{171.0}=0x0 +phy_chain_rx_polarity_flip_physical{172.0}=0x0 +phy_chain_rx_polarity_flip_physical{173.0}=0x0 +phy_chain_rx_polarity_flip_physical{174.0}=0x0 +phy_chain_rx_polarity_flip_physical{175.0}=0x1 +phy_chain_rx_polarity_flip_physical{176.0}=0x1 +phy_chain_rx_polarity_flip_physical{177.0}=0x1 +phy_chain_rx_polarity_flip_physical{178.0}=0x1 +phy_chain_rx_polarity_flip_physical{179.0}=0x0 +phy_chain_rx_polarity_flip_physical{18.0}=0x0 +phy_chain_rx_polarity_flip_physical{180.0}=0x0 +phy_chain_rx_polarity_flip_physical{181.0}=0x1 +phy_chain_rx_polarity_flip_physical{182.0}=0x1 +phy_chain_rx_polarity_flip_physical{183.0}=0x0 +phy_chain_rx_polarity_flip_physical{184.0}=0x0 +phy_chain_rx_polarity_flip_physical{185.0}=0x0 +phy_chain_rx_polarity_flip_physical{186.0}=0x0 +phy_chain_rx_polarity_flip_physical{187.0}=0x1 +phy_chain_rx_polarity_flip_physical{188.0}=0x1 +phy_chain_rx_polarity_flip_physical{189.0}=0x0 +phy_chain_rx_polarity_flip_physical{19.0}=0x1 +phy_chain_rx_polarity_flip_physical{190.0}=0x0 +phy_chain_rx_polarity_flip_physical{191.0}=0x1 +phy_chain_rx_polarity_flip_physical{192.0}=0x0 +phy_chain_rx_polarity_flip_physical{193.0}=0x0 +phy_chain_rx_polarity_flip_physical{194.0}=0x0 +phy_chain_rx_polarity_flip_physical{195.0}=0x1 +phy_chain_rx_polarity_flip_physical{196.0}=0x1 +phy_chain_rx_polarity_flip_physical{197.0}=0x1 +phy_chain_rx_polarity_flip_physical{198.0}=0x1 +phy_chain_rx_polarity_flip_physical{199.0}=0x0 +phy_chain_rx_polarity_flip_physical{2.0}=0x0 +phy_chain_rx_polarity_flip_physical{20.0}=0x0 +phy_chain_rx_polarity_flip_physical{200.0}=0x0 +phy_chain_rx_polarity_flip_physical{201.0}=0x0 +phy_chain_rx_polarity_flip_physical{202.0}=0x0 +phy_chain_rx_polarity_flip_physical{203.0}=0x1 +phy_chain_rx_polarity_flip_physical{204.0}=0x0 +phy_chain_rx_polarity_flip_physical{205.0}=0x1 +phy_chain_rx_polarity_flip_physical{206.0}=0x1 +phy_chain_rx_polarity_flip_physical{207.0}=0x0 +phy_chain_rx_polarity_flip_physical{208.0}=0x0 +phy_chain_rx_polarity_flip_physical{209.0}=0x1 +phy_chain_rx_polarity_flip_physical{21.0}=0x0 +phy_chain_rx_polarity_flip_physical{210.0}=0x1 +phy_chain_rx_polarity_flip_physical{211.0}=0x0 +phy_chain_rx_polarity_flip_physical{212.0}=0x0 +phy_chain_rx_polarity_flip_physical{213.0}=0x0 +phy_chain_rx_polarity_flip_physical{214.0}=0x0 +phy_chain_rx_polarity_flip_physical{215.0}=0x1 +phy_chain_rx_polarity_flip_physical{216.0}=0x0 +phy_chain_rx_polarity_flip_physical{217.0}=0x0 +phy_chain_rx_polarity_flip_physical{218.0}=0x0 +phy_chain_rx_polarity_flip_physical{219.0}=0x1 +phy_chain_rx_polarity_flip_physical{22.0}=0x0 +phy_chain_rx_polarity_flip_physical{220.0}=0x1 +phy_chain_rx_polarity_flip_physical{221.0}=0x0 +phy_chain_rx_polarity_flip_physical{222.0}=0x0 +phy_chain_rx_polarity_flip_physical{223.0}=0x1 +phy_chain_rx_polarity_flip_physical{224.0}=0x1 +phy_chain_rx_polarity_flip_physical{225.0}=0x1 +phy_chain_rx_polarity_flip_physical{226.0}=0x0 +phy_chain_rx_polarity_flip_physical{227.0}=0x0 +phy_chain_rx_polarity_flip_physical{228.0}=0x1 +phy_chain_rx_polarity_flip_physical{229.0}=0x0 +phy_chain_rx_polarity_flip_physical{23.0}=0x1 +phy_chain_rx_polarity_flip_physical{230.0}=0x0 +phy_chain_rx_polarity_flip_physical{231.0}=0x1 +phy_chain_rx_polarity_flip_physical{232.0}=0x1 +phy_chain_rx_polarity_flip_physical{233.0}=0x1 +phy_chain_rx_polarity_flip_physical{234.0}=0x0 +phy_chain_rx_polarity_flip_physical{235.0}=0x0 +phy_chain_rx_polarity_flip_physical{236.0}=0x0 +phy_chain_rx_polarity_flip_physical{237.0}=0x1 +phy_chain_rx_polarity_flip_physical{238.0}=0x0 +phy_chain_rx_polarity_flip_physical{239.0}=0x1 +phy_chain_rx_polarity_flip_physical{24.0}=0x0 +phy_chain_rx_polarity_flip_physical{240.0}=0x0 +phy_chain_rx_polarity_flip_physical{241.0}=0x1 +phy_chain_rx_polarity_flip_physical{242.0}=0x0 +phy_chain_rx_polarity_flip_physical{243.0}=0x1 +phy_chain_rx_polarity_flip_physical{244.0}=0x0 +phy_chain_rx_polarity_flip_physical{245.0}=0x1 +phy_chain_rx_polarity_flip_physical{246.0}=0x1 +phy_chain_rx_polarity_flip_physical{247.0}=0x1 +phy_chain_rx_polarity_flip_physical{248.0}=0x0 +phy_chain_rx_polarity_flip_physical{249.0}=0x0 +phy_chain_rx_polarity_flip_physical{25.0}=0x1 +phy_chain_rx_polarity_flip_physical{250.0}=0x1 +phy_chain_rx_polarity_flip_physical{251.0}=0x0 +phy_chain_rx_polarity_flip_physical{252.0}=0x1 +phy_chain_rx_polarity_flip_physical{253.0}=0x1 +phy_chain_rx_polarity_flip_physical{254.0}=0x0 +phy_chain_rx_polarity_flip_physical{255.0}=0x1 +phy_chain_rx_polarity_flip_physical{256.0}=0x0 +phy_chain_rx_polarity_flip_physical{257.0}=0x0 +phy_chain_rx_polarity_flip_physical{259.0}=0x0 +phy_chain_rx_polarity_flip_physical{26.0}=0x0 +phy_chain_rx_polarity_flip_physical{27.0}=0x1 +phy_chain_rx_polarity_flip_physical{28.0}=0x0 +phy_chain_rx_polarity_flip_physical{29.0}=0x0 +phy_chain_rx_polarity_flip_physical{3.0}=0x1 +phy_chain_rx_polarity_flip_physical{30.0}=0x0 +phy_chain_rx_polarity_flip_physical{31.0}=0x0 +phy_chain_rx_polarity_flip_physical{32.0}=0x1 +phy_chain_rx_polarity_flip_physical{33.0}=0x0 +phy_chain_rx_polarity_flip_physical{34.0}=0x0 +phy_chain_rx_polarity_flip_physical{35.0}=0x1 +phy_chain_rx_polarity_flip_physical{36.0}=0x1 +phy_chain_rx_polarity_flip_physical{37.0}=0x1 +phy_chain_rx_polarity_flip_physical{38.0}=0x1 +phy_chain_rx_polarity_flip_physical{39.0}=0x0 +phy_chain_rx_polarity_flip_physical{4.0}=0x0 +phy_chain_rx_polarity_flip_physical{40.0}=0x0 +phy_chain_rx_polarity_flip_physical{41.0}=0x0 +phy_chain_rx_polarity_flip_physical{42.0}=0x1 +phy_chain_rx_polarity_flip_physical{43.0}=0x1 +phy_chain_rx_polarity_flip_physical{44.0}=0x1 +phy_chain_rx_polarity_flip_physical{45.0}=0x1 +phy_chain_rx_polarity_flip_physical{46.0}=0x0 +phy_chain_rx_polarity_flip_physical{47.0}=0x0 +phy_chain_rx_polarity_flip_physical{48.0}=0x1 +phy_chain_rx_polarity_flip_physical{49.0}=0x1 +phy_chain_rx_polarity_flip_physical{5.0}=0x1 +phy_chain_rx_polarity_flip_physical{50.0}=0x1 +phy_chain_rx_polarity_flip_physical{51.0}=0x0 +phy_chain_rx_polarity_flip_physical{52.0}=0x0 +phy_chain_rx_polarity_flip_physical{53.0}=0x0 +phy_chain_rx_polarity_flip_physical{54.0}=0x0 +phy_chain_rx_polarity_flip_physical{55.0}=0x1 +phy_chain_rx_polarity_flip_physical{56.0}=0x0 +phy_chain_rx_polarity_flip_physical{57.0}=0x0 +phy_chain_rx_polarity_flip_physical{58.0}=0x0 +phy_chain_rx_polarity_flip_physical{59.0}=0x1 +phy_chain_rx_polarity_flip_physical{6.0}=0x0 +phy_chain_rx_polarity_flip_physical{60.0}=0x1 +phy_chain_rx_polarity_flip_physical{61.0}=0x0 +phy_chain_rx_polarity_flip_physical{62.0}=0x0 +phy_chain_rx_polarity_flip_physical{63.0}=0x1 +phy_chain_rx_polarity_flip_physical{64.0}=0x1 +phy_chain_rx_polarity_flip_physical{65.0}=0x1 +phy_chain_rx_polarity_flip_physical{66.0}=0x1 +phy_chain_rx_polarity_flip_physical{67.0}=0x0 +phy_chain_rx_polarity_flip_physical{68.0}=0x1 +phy_chain_rx_polarity_flip_physical{69.0}=0x0 +phy_chain_rx_polarity_flip_physical{7.0}=0x0 +phy_chain_rx_polarity_flip_physical{70.0}=0x0 +phy_chain_rx_polarity_flip_physical{71.0}=0x1 +phy_chain_rx_polarity_flip_physical{72.0}=0x1 +phy_chain_rx_polarity_flip_physical{73.0}=0x1 +phy_chain_rx_polarity_flip_physical{74.0}=0x1 +phy_chain_rx_polarity_flip_physical{75.0}=0x0 +phy_chain_rx_polarity_flip_physical{76.0}=0x0 +phy_chain_rx_polarity_flip_physical{77.0}=0x0 +phy_chain_rx_polarity_flip_physical{78.0}=0x0 +phy_chain_rx_polarity_flip_physical{79.0}=0x1 +phy_chain_rx_polarity_flip_physical{8.0}=0x1 +phy_chain_rx_polarity_flip_physical{80.0}=0x1 +phy_chain_rx_polarity_flip_physical{81.0}=0x1 +phy_chain_rx_polarity_flip_physical{82.0}=0x1 +phy_chain_rx_polarity_flip_physical{83.0}=0x0 +phy_chain_rx_polarity_flip_physical{84.0}=0x0 +phy_chain_rx_polarity_flip_physical{85.0}=0x1 +phy_chain_rx_polarity_flip_physical{86.0}=0x1 +phy_chain_rx_polarity_flip_physical{87.0}=0x0 +phy_chain_rx_polarity_flip_physical{88.0}=0x0 +phy_chain_rx_polarity_flip_physical{89.0}=0x0 +phy_chain_rx_polarity_flip_physical{9.0}=0x1 +phy_chain_rx_polarity_flip_physical{90.0}=0x0 +phy_chain_rx_polarity_flip_physical{91.0}=0x1 +phy_chain_rx_polarity_flip_physical{92.0}=0x1 +phy_chain_rx_polarity_flip_physical{93.0}=0x0 +phy_chain_rx_polarity_flip_physical{94.0}=0x0 +phy_chain_rx_polarity_flip_physical{95.0}=0x1 +phy_chain_rx_polarity_flip_physical{96.0}=0x0 +phy_chain_rx_polarity_flip_physical{97.0}=0x1 +phy_chain_rx_polarity_flip_physical{98.0}=0x1 +phy_chain_rx_polarity_flip_physical{99.0}=0x0 +phy_chain_tx_lane_map_physical{1.0}=0x2031 +phy_chain_tx_lane_map_physical{101.0}=0x1023 +phy_chain_tx_lane_map_physical{105.0}=0x1302 +phy_chain_tx_lane_map_physical{109.0}=0x0321 +phy_chain_tx_lane_map_physical{113.0}=0x2301 +phy_chain_tx_lane_map_physical{117.0}=0x3120 +phy_chain_tx_lane_map_physical{121.0}=0x3102 +phy_chain_tx_lane_map_physical{125.0}=0x3210 +phy_chain_tx_lane_map_physical{129.0}=0x1023 +phy_chain_tx_lane_map_physical{13.0}=0x3021 +phy_chain_tx_lane_map_physical{133.0}=0x3210 +phy_chain_tx_lane_map_physical{137.0}=0x2031 +phy_chain_tx_lane_map_physical{141.0}=0x1302 +phy_chain_tx_lane_map_physical{145.0}=0x3210 +phy_chain_tx_lane_map_physical{149.0}=0x0213 +phy_chain_tx_lane_map_physical{153.0}=0x3210 +phy_chain_tx_lane_map_physical{157.0}=0x1320 +phy_chain_tx_lane_map_physical{161.0}=0x3210 +phy_chain_tx_lane_map_physical{165.0}=0x0231 +phy_chain_tx_lane_map_physical{169.0}=0x3120 +phy_chain_tx_lane_map_physical{17.0}=0x1032 +phy_chain_tx_lane_map_physical{173.0}=0x0312 +phy_chain_tx_lane_map_physical{177.0}=0x0231 +phy_chain_tx_lane_map_physical{181.0}=0x3210 +phy_chain_tx_lane_map_physical{185.0}=0x3210 +phy_chain_tx_lane_map_physical{189.0}=0x1320 +phy_chain_tx_lane_map_physical{193.0}=0x0321 +phy_chain_tx_lane_map_physical{197.0}=0x3120 +phy_chain_tx_lane_map_physical{201.0}=0x3120 +phy_chain_tx_lane_map_physical{205.0}=0x0123 +phy_chain_tx_lane_map_physical{209.0}=0x3120 +phy_chain_tx_lane_map_physical{21.0}=0x0213 +phy_chain_tx_lane_map_physical{213.0}=0x3021 +phy_chain_tx_lane_map_physical{217.0}=0x0312 +phy_chain_tx_lane_map_physical{221.0}=0x2301 +phy_chain_tx_lane_map_physical{225.0}=0x0123 +phy_chain_tx_lane_map_physical{229.0}=0x2031 +phy_chain_tx_lane_map_physical{233.0}=0x0231 +phy_chain_tx_lane_map_physical{237.0}=0x0213 +phy_chain_tx_lane_map_physical{241.0}=0x1320 +phy_chain_tx_lane_map_physical{245.0}=0x2031 +phy_chain_tx_lane_map_physical{249.0}=0x3120 +phy_chain_tx_lane_map_physical{25.0}=0x0231 +phy_chain_tx_lane_map_physical{253.0}=0x0321 +phy_chain_tx_lane_map_physical{257.0}=0x3210 +phy_chain_tx_lane_map_physical{29.0}=0x1230 +phy_chain_tx_lane_map_physical{33.0}=0x1032 +phy_chain_tx_lane_map_physical{37.0}=0x0123 +phy_chain_tx_lane_map_physical{41.0}=0x0213 +phy_chain_tx_lane_map_physical{45.0}=0x0132 +phy_chain_tx_lane_map_physical{49.0}=0x2031 +phy_chain_tx_lane_map_physical{5.0}=0x2301 +phy_chain_tx_lane_map_physical{53.0}=0x2301 +phy_chain_tx_lane_map_physical{57.0}=0x2031 +phy_chain_tx_lane_map_physical{61.0}=0x2031 +phy_chain_tx_lane_map_physical{65.0}=0x1230 +phy_chain_tx_lane_map_physical{69.0}=0x2013 +phy_chain_tx_lane_map_physical{73.0}=0x0213 +phy_chain_tx_lane_map_physical{77.0}=0x2310 +phy_chain_tx_lane_map_physical{81.0}=0x0321 +phy_chain_tx_lane_map_physical{85.0}=0x2013 +phy_chain_tx_lane_map_physical{89.0}=0x0213 +phy_chain_tx_lane_map_physical{9.0}=0x3012 +phy_chain_tx_lane_map_physical{93.0}=0x3102 +phy_chain_tx_lane_map_physical{97.0}=0x3210 +phy_chain_tx_polarity_flip_physical{1.0}=0x0 +phy_chain_tx_polarity_flip_physical{10.0}=0x1 +phy_chain_tx_polarity_flip_physical{100.0}=0x0 +phy_chain_tx_polarity_flip_physical{101.0}=0x0 +phy_chain_tx_polarity_flip_physical{102.0}=0x1 +phy_chain_tx_polarity_flip_physical{103.0}=0x0 +phy_chain_tx_polarity_flip_physical{104.0}=0x0 +phy_chain_tx_polarity_flip_physical{105.0}=0x0 +phy_chain_tx_polarity_flip_physical{106.0}=0x1 +phy_chain_tx_polarity_flip_physical{107.0}=0x1 +phy_chain_tx_polarity_flip_physical{108.0}=0x1 +phy_chain_tx_polarity_flip_physical{109.0}=0x0 +phy_chain_tx_polarity_flip_physical{11.0}=0x1 +phy_chain_tx_polarity_flip_physical{110.0}=0x0 +phy_chain_tx_polarity_flip_physical{111.0}=0x0 +phy_chain_tx_polarity_flip_physical{112.0}=0x1 +phy_chain_tx_polarity_flip_physical{113.0}=0x1 +phy_chain_tx_polarity_flip_physical{114.0}=0x1 +phy_chain_tx_polarity_flip_physical{115.0}=0x1 +phy_chain_tx_polarity_flip_physical{116.0}=0x0 +phy_chain_tx_polarity_flip_physical{117.0}=0x1 +phy_chain_tx_polarity_flip_physical{118.0}=0x0 +phy_chain_tx_polarity_flip_physical{119.0}=0x0 +phy_chain_tx_polarity_flip_physical{12.0}=0x0 +phy_chain_tx_polarity_flip_physical{120.0}=0x0 +phy_chain_tx_polarity_flip_physical{121.0}=0x0 +phy_chain_tx_polarity_flip_physical{122.0}=0x0 +phy_chain_tx_polarity_flip_physical{123.0}=0x0 +phy_chain_tx_polarity_flip_physical{124.0}=0x1 +phy_chain_tx_polarity_flip_physical{125.0}=0x0 +phy_chain_tx_polarity_flip_physical{126.0}=0x1 +phy_chain_tx_polarity_flip_physical{127.0}=0x1 +phy_chain_tx_polarity_flip_physical{128.0}=0x1 +phy_chain_tx_polarity_flip_physical{129.0}=0x1 +phy_chain_tx_polarity_flip_physical{13.0}=0x0 +phy_chain_tx_polarity_flip_physical{130.0}=0x0 +phy_chain_tx_polarity_flip_physical{131.0}=0x1 +phy_chain_tx_polarity_flip_physical{132.0}=0x0 +phy_chain_tx_polarity_flip_physical{133.0}=0x1 +phy_chain_tx_polarity_flip_physical{134.0}=0x1 +phy_chain_tx_polarity_flip_physical{135.0}=0x1 +phy_chain_tx_polarity_flip_physical{136.0}=0x1 +phy_chain_tx_polarity_flip_physical{137.0}=0x1 +phy_chain_tx_polarity_flip_physical{138.0}=0x1 +phy_chain_tx_polarity_flip_physical{139.0}=0x1 +phy_chain_tx_polarity_flip_physical{14.0}=0x1 +phy_chain_tx_polarity_flip_physical{140.0}=0x1 +phy_chain_tx_polarity_flip_physical{141.0}=0x0 +phy_chain_tx_polarity_flip_physical{142.0}=0x1 +phy_chain_tx_polarity_flip_physical{143.0}=0x1 +phy_chain_tx_polarity_flip_physical{144.0}=0x1 +phy_chain_tx_polarity_flip_physical{145.0}=0x1 +phy_chain_tx_polarity_flip_physical{146.0}=0x1 +phy_chain_tx_polarity_flip_physical{147.0}=0x1 +phy_chain_tx_polarity_flip_physical{148.0}=0x0 +phy_chain_tx_polarity_flip_physical{149.0}=0x1 +phy_chain_tx_polarity_flip_physical{15.0}=0x0 +phy_chain_tx_polarity_flip_physical{150.0}=0x0 +phy_chain_tx_polarity_flip_physical{151.0}=0x0 +phy_chain_tx_polarity_flip_physical{152.0}=0x0 +phy_chain_tx_polarity_flip_physical{153.0}=0x1 +phy_chain_tx_polarity_flip_physical{154.0}=0x0 +phy_chain_tx_polarity_flip_physical{155.0}=0x0 +phy_chain_tx_polarity_flip_physical{156.0}=0x0 +phy_chain_tx_polarity_flip_physical{157.0}=0x0 +phy_chain_tx_polarity_flip_physical{158.0}=0x0 +phy_chain_tx_polarity_flip_physical{159.0}=0x0 +phy_chain_tx_polarity_flip_physical{16.0}=0x0 +phy_chain_tx_polarity_flip_physical{160.0}=0x0 +phy_chain_tx_polarity_flip_physical{161.0}=0x0 +phy_chain_tx_polarity_flip_physical{162.0}=0x1 +phy_chain_tx_polarity_flip_physical{163.0}=0x1 +phy_chain_tx_polarity_flip_physical{164.0}=0x0 +phy_chain_tx_polarity_flip_physical{165.0}=0x1 +phy_chain_tx_polarity_flip_physical{166.0}=0x1 +phy_chain_tx_polarity_flip_physical{167.0}=0x1 +phy_chain_tx_polarity_flip_physical{168.0}=0x0 +phy_chain_tx_polarity_flip_physical{169.0}=0x0 +phy_chain_tx_polarity_flip_physical{17.0}=0x0 +phy_chain_tx_polarity_flip_physical{170.0}=0x1 +phy_chain_tx_polarity_flip_physical{171.0}=0x1 +phy_chain_tx_polarity_flip_physical{172.0}=0x1 +phy_chain_tx_polarity_flip_physical{173.0}=0x0 +phy_chain_tx_polarity_flip_physical{174.0}=0x0 +phy_chain_tx_polarity_flip_physical{175.0}=0x1 +phy_chain_tx_polarity_flip_physical{176.0}=0x0 +phy_chain_tx_polarity_flip_physical{177.0}=0x1 +phy_chain_tx_polarity_flip_physical{178.0}=0x0 +phy_chain_tx_polarity_flip_physical{179.0}=0x0 +phy_chain_tx_polarity_flip_physical{18.0}=0x1 +phy_chain_tx_polarity_flip_physical{180.0}=0x0 +phy_chain_tx_polarity_flip_physical{181.0}=0x0 +phy_chain_tx_polarity_flip_physical{182.0}=0x0 +phy_chain_tx_polarity_flip_physical{183.0}=0x0 +phy_chain_tx_polarity_flip_physical{184.0}=0x1 +phy_chain_tx_polarity_flip_physical{185.0}=0x0 +phy_chain_tx_polarity_flip_physical{186.0}=0x1 +phy_chain_tx_polarity_flip_physical{187.0}=0x1 +phy_chain_tx_polarity_flip_physical{188.0}=0x1 +phy_chain_tx_polarity_flip_physical{189.0}=0x0 +phy_chain_tx_polarity_flip_physical{19.0}=0x1 +phy_chain_tx_polarity_flip_physical{190.0}=0x0 +phy_chain_tx_polarity_flip_physical{191.0}=0x0 +phy_chain_tx_polarity_flip_physical{192.0}=0x0 +phy_chain_tx_polarity_flip_physical{193.0}=0x1 +phy_chain_tx_polarity_flip_physical{194.0}=0x1 +phy_chain_tx_polarity_flip_physical{195.0}=0x1 +phy_chain_tx_polarity_flip_physical{196.0}=0x0 +phy_chain_tx_polarity_flip_physical{197.0}=0x0 +phy_chain_tx_polarity_flip_physical{198.0}=0x1 +phy_chain_tx_polarity_flip_physical{199.0}=0x1 +phy_chain_tx_polarity_flip_physical{2.0}=0x1 +phy_chain_tx_polarity_flip_physical{20.0}=0x1 +phy_chain_tx_polarity_flip_physical{200.0}=0x1 +phy_chain_tx_polarity_flip_physical{201.0}=0x1 +phy_chain_tx_polarity_flip_physical{202.0}=0x1 +phy_chain_tx_polarity_flip_physical{203.0}=0x1 +phy_chain_tx_polarity_flip_physical{204.0}=0x1 +phy_chain_tx_polarity_flip_physical{205.0}=0x0 +phy_chain_tx_polarity_flip_physical{206.0}=0x1 +phy_chain_tx_polarity_flip_physical{207.0}=0x1 +phy_chain_tx_polarity_flip_physical{208.0}=0x1 +phy_chain_tx_polarity_flip_physical{209.0}=0x1 +phy_chain_tx_polarity_flip_physical{21.0}=0x0 +phy_chain_tx_polarity_flip_physical{210.0}=0x1 +phy_chain_tx_polarity_flip_physical{211.0}=0x1 +phy_chain_tx_polarity_flip_physical{212.0}=0x0 +phy_chain_tx_polarity_flip_physical{213.0}=0x0 +phy_chain_tx_polarity_flip_physical{214.0}=0x1 +phy_chain_tx_polarity_flip_physical{215.0}=0x0 +phy_chain_tx_polarity_flip_physical{216.0}=0x1 +phy_chain_tx_polarity_flip_physical{217.0}=0x1 +phy_chain_tx_polarity_flip_physical{218.0}=0x1 +phy_chain_tx_polarity_flip_physical{219.0}=0x0 +phy_chain_tx_polarity_flip_physical{22.0}=0x0 +phy_chain_tx_polarity_flip_physical{220.0}=0x1 +phy_chain_tx_polarity_flip_physical{221.0}=0x0 +phy_chain_tx_polarity_flip_physical{222.0}=0x0 +phy_chain_tx_polarity_flip_physical{223.0}=0x0 +phy_chain_tx_polarity_flip_physical{224.0}=0x1 +phy_chain_tx_polarity_flip_physical{225.0}=0x1 +phy_chain_tx_polarity_flip_physical{226.0}=0x1 +phy_chain_tx_polarity_flip_physical{227.0}=0x1 +phy_chain_tx_polarity_flip_physical{228.0}=0x0 +phy_chain_tx_polarity_flip_physical{229.0}=0x0 +phy_chain_tx_polarity_flip_physical{23.0}=0x0 +phy_chain_tx_polarity_flip_physical{230.0}=0x1 +phy_chain_tx_polarity_flip_physical{231.0}=0x1 +phy_chain_tx_polarity_flip_physical{232.0}=0x1 +phy_chain_tx_polarity_flip_physical{233.0}=0x0 +phy_chain_tx_polarity_flip_physical{234.0}=0x0 +phy_chain_tx_polarity_flip_physical{235.0}=0x0 +phy_chain_tx_polarity_flip_physical{236.0}=0x0 +phy_chain_tx_polarity_flip_physical{237.0}=0x1 +phy_chain_tx_polarity_flip_physical{238.0}=0x1 +phy_chain_tx_polarity_flip_physical{239.0}=0x1 +phy_chain_tx_polarity_flip_physical{24.0}=0x0 +phy_chain_tx_polarity_flip_physical{240.0}=0x0 +phy_chain_tx_polarity_flip_physical{241.0}=0x1 +phy_chain_tx_polarity_flip_physical{242.0}=0x1 +phy_chain_tx_polarity_flip_physical{243.0}=0x1 +phy_chain_tx_polarity_flip_physical{244.0}=0x0 +phy_chain_tx_polarity_flip_physical{245.0}=0x1 +phy_chain_tx_polarity_flip_physical{246.0}=0x1 +phy_chain_tx_polarity_flip_physical{247.0}=0x1 +phy_chain_tx_polarity_flip_physical{248.0}=0x1 +phy_chain_tx_polarity_flip_physical{249.0}=0x1 +phy_chain_tx_polarity_flip_physical{25.0}=0x1 +phy_chain_tx_polarity_flip_physical{250.0}=0x0 +phy_chain_tx_polarity_flip_physical{251.0}=0x0 +phy_chain_tx_polarity_flip_physical{252.0}=0x0 +phy_chain_tx_polarity_flip_physical{253.0}=0x1 +phy_chain_tx_polarity_flip_physical{254.0}=0x1 +phy_chain_tx_polarity_flip_physical{255.0}=0x1 +phy_chain_tx_polarity_flip_physical{256.0}=0x0 +phy_chain_tx_polarity_flip_physical{257.0}=0x0 +phy_chain_tx_polarity_flip_physical{259.0}=0x0 +phy_chain_tx_polarity_flip_physical{26.0}=0x0 +phy_chain_tx_polarity_flip_physical{27.0}=0x0 +phy_chain_tx_polarity_flip_physical{28.0}=0x0 +phy_chain_tx_polarity_flip_physical{29.0}=0x1 +phy_chain_tx_polarity_flip_physical{3.0}=0x1 +phy_chain_tx_polarity_flip_physical{30.0}=0x1 +phy_chain_tx_polarity_flip_physical{31.0}=0x1 +phy_chain_tx_polarity_flip_physical{32.0}=0x0 +phy_chain_tx_polarity_flip_physical{33.0}=0x0 +phy_chain_tx_polarity_flip_physical{34.0}=0x0 +phy_chain_tx_polarity_flip_physical{35.0}=0x0 +phy_chain_tx_polarity_flip_physical{36.0}=0x1 +phy_chain_tx_polarity_flip_physical{37.0}=0x1 +phy_chain_tx_polarity_flip_physical{38.0}=0x1 +phy_chain_tx_polarity_flip_physical{39.0}=0x1 +phy_chain_tx_polarity_flip_physical{4.0}=0x1 +phy_chain_tx_polarity_flip_physical{40.0}=0x0 +phy_chain_tx_polarity_flip_physical{41.0}=0x0 +phy_chain_tx_polarity_flip_physical{42.0}=0x0 +phy_chain_tx_polarity_flip_physical{43.0}=0x0 +phy_chain_tx_polarity_flip_physical{44.0}=0x0 +phy_chain_tx_polarity_flip_physical{45.0}=0x1 +phy_chain_tx_polarity_flip_physical{46.0}=0x0 +phy_chain_tx_polarity_flip_physical{47.0}=0x1 +phy_chain_tx_polarity_flip_physical{48.0}=0x1 +phy_chain_tx_polarity_flip_physical{49.0}=0x0 +phy_chain_tx_polarity_flip_physical{5.0}=0x1 +phy_chain_tx_polarity_flip_physical{50.0}=0x0 +phy_chain_tx_polarity_flip_physical{51.0}=0x0 +phy_chain_tx_polarity_flip_physical{52.0}=0x1 +phy_chain_tx_polarity_flip_physical{53.0}=0x0 +phy_chain_tx_polarity_flip_physical{54.0}=0x1 +phy_chain_tx_polarity_flip_physical{55.0}=0x1 +phy_chain_tx_polarity_flip_physical{56.0}=0x0 +phy_chain_tx_polarity_flip_physical{57.0}=0x0 +phy_chain_tx_polarity_flip_physical{58.0}=0x1 +phy_chain_tx_polarity_flip_physical{59.0}=0x1 +phy_chain_tx_polarity_flip_physical{6.0}=0x1 +phy_chain_tx_polarity_flip_physical{60.0}=0x1 +phy_chain_tx_polarity_flip_physical{61.0}=0x0 +phy_chain_tx_polarity_flip_physical{62.0}=0x1 +phy_chain_tx_polarity_flip_physical{63.0}=0x1 +phy_chain_tx_polarity_flip_physical{64.0}=0x1 +phy_chain_tx_polarity_flip_physical{65.0}=0x0 +phy_chain_tx_polarity_flip_physical{66.0}=0x1 +phy_chain_tx_polarity_flip_physical{67.0}=0x1 +phy_chain_tx_polarity_flip_physical{68.0}=0x0 +phy_chain_tx_polarity_flip_physical{69.0}=0x1 +phy_chain_tx_polarity_flip_physical{7.0}=0x1 +phy_chain_tx_polarity_flip_physical{70.0}=0x1 +phy_chain_tx_polarity_flip_physical{71.0}=0x1 +phy_chain_tx_polarity_flip_physical{72.0}=0x0 +phy_chain_tx_polarity_flip_physical{73.0}=0x1 +phy_chain_tx_polarity_flip_physical{74.0}=0x0 +phy_chain_tx_polarity_flip_physical{75.0}=0x0 +phy_chain_tx_polarity_flip_physical{76.0}=0x0 +phy_chain_tx_polarity_flip_physical{77.0}=0x0 +phy_chain_tx_polarity_flip_physical{78.0}=0x0 +phy_chain_tx_polarity_flip_physical{79.0}=0x1 +phy_chain_tx_polarity_flip_physical{8.0}=0x0 +phy_chain_tx_polarity_flip_physical{80.0}=0x0 +phy_chain_tx_polarity_flip_physical{81.0}=0x1 +phy_chain_tx_polarity_flip_physical{82.0}=0x1 +phy_chain_tx_polarity_flip_physical{83.0}=0x1 +phy_chain_tx_polarity_flip_physical{84.0}=0x0 +phy_chain_tx_polarity_flip_physical{85.0}=0x1 +phy_chain_tx_polarity_flip_physical{86.0}=0x0 +phy_chain_tx_polarity_flip_physical{87.0}=0x0 +phy_chain_tx_polarity_flip_physical{88.0}=0x0 +phy_chain_tx_polarity_flip_physical{89.0}=0x1 +phy_chain_tx_polarity_flip_physical{9.0}=0x0 +phy_chain_tx_polarity_flip_physical{90.0}=0x1 +phy_chain_tx_polarity_flip_physical{91.0}=0x1 +phy_chain_tx_polarity_flip_physical{92.0}=0x0 +phy_chain_tx_polarity_flip_physical{93.0}=0x0 +phy_chain_tx_polarity_flip_physical{94.0}=0x0 +phy_chain_tx_polarity_flip_physical{95.0}=0x0 +phy_chain_tx_polarity_flip_physical{96.0}=0x0 +phy_chain_tx_polarity_flip_physical{97.0}=0x0 +phy_chain_tx_polarity_flip_physical{98.0}=0x1 +phy_chain_tx_polarity_flip_physical{99.0}=0x1 + +port_init_cl72_hg=1 + + + + + + + +robust_hash_disable_egress_vlan=1 +robust_hash_disable_mpls=1 +robust_hash_disable_vlan=1 +stable_size=0x5500000 +stable_size=0x5500000 +tdma_timeout_usec=15000000 +tslam_timeout_usec=15000000 +dport_map_direct=1 +portmap_1=5:50 +portmap_2=7:50 +portmap_3=13:50 +portmap_4=15:50 +portmap_5=25:50 +portmap_6=27:50 +portmap_7=21:50 +portmap_8=23:50 +portmap_9=37:50 +portmap_10=39:50 +portmap_11=45:50 +portmap_12=47:50 +portmap_13=57:100 +portmap_14=53:100 +portmap_15=9:50 +portmap_16=11:50 +portmap_17=1:50 +portmap_18=3:50 +portmap_19=17:50 +portmap_20=19:50 +portmap_21=29:50 +portmap_22=31:50 +portmap_23=41:50 +portmap_24=43:50 +portmap_25=33:50 +portmap_26=35:50 +portmap_27=49:100 +portmap_28=61:100 +portmap_34=77:50 +portmap_35=79:50 +portmap_36=65:50 +portmap_37=67:50 +portmap_38=85:50 +portmap_39=87:50 +portmap_40=89:50 +portmap_41=91:50 +portmap_42=109:50 +portmap_43=111:50 +portmap_44=97:50 +portmap_45=99:50 +portmap_46=117:100 +portmap_47=121:100 +portmap_48=69:50 +portmap_49=71:50 +portmap_50=73:50 +portmap_51=75:50 +portmap_52=93:50 +portmap_53=95:50 +portmap_54=81:50 +portmap_55=83:50 +portmap_56=101:50 +portmap_57=103:50 +portmap_58=105:50 +portmap_59=107:50 +portmap_60=125:100 +portmap_61=113:100 +portmap_66=257:10 +portmap_68=141:100 +portmap_69=133:100 +portmap_70=149:50 +portmap_71=151:50 +portmap_72=153:50 +portmap_73=155:50 +portmap_74=173:50 +portmap_75=175:50 +portmap_76=161:50 +portmap_77=163:50 +portmap_78=181:50 +portmap_79=183:50 +portmap_80=185:50 +portmap_81=187:50 +portmap_82=129:100 +portmap_83=137:100 +portmap_84=157:50 +portmap_85=159:50 +portmap_86=145:50 +portmap_87=147:50 +portmap_88=165:50 +portmap_89=167:50 +portmap_90=169:50 +portmap_91=171:50 +portmap_92=189:50 +portmap_93=191:50 +portmap_94=177:50 +portmap_95=179:50 +portmap_100=259:10 +portmap_102=197:100 +portmap_103=205:100 +portmap_104=217:50 +portmap_105=219:50 +portmap_106=213:50 +portmap_107=215:50 +portmap_108=229:50 +portmap_109=231:50 +portmap_110=237:50 +portmap_111=239:50 +portmap_112=249:50 +portmap_113=251:50 +portmap_114=245:50 +portmap_115=247:50 +portmap_116=201:100 +portmap_117=193:100 +portmap_118=209:50 +portmap_119=211:50 +portmap_120=221:50 +portmap_121=223:50 +portmap_122=233:50 +portmap_123=235:50 +portmap_124=225:50 +portmap_125=227:50 +portmap_126=241:50 +portmap_127=243:50 +portmap_128=253:50 +portmap_129=255:50 + +# tuning parameters +serdes_preemphasis_1=0x580c +serdes_preemphasis_2=0x580c +serdes_preemphasis_3=0x580c +serdes_preemphasis_4=0x580c +serdes_preemphasis_5=0x580c +serdes_preemphasis_6=0x580c +serdes_preemphasis_7=0x580c +serdes_preemphasis_8=0x580c +serdes_preemphasis_9=0x580c +serdes_preemphasis_10=0x580c +serdes_preemphasis_11=0x580c +serdes_preemphasis_12=0x580c +serdes_preemphasis_13=0x83404 +serdes_preemphasis_14=0x83404 +serdes_preemphasis_15=0x580c +serdes_preemphasis_16=0x580c +serdes_preemphasis_17=0x580c +serdes_preemphasis_18=0x580c +serdes_preemphasis_19=0x580c +serdes_preemphasis_20=0x580c +serdes_preemphasis_21=0x580c +serdes_preemphasis_22=0x580c +serdes_preemphasis_23=0x580c +serdes_preemphasis_24=0x580c +serdes_preemphasis_25=0x580c +serdes_preemphasis_26=0x580c +serdes_preemphasis_27=0xf3c05 +serdes_preemphasis_28=0xf3d05 +serdes_preemphasis_34=0x580c +serdes_preemphasis_35=0x580c +serdes_preemphasis_36=0x580c +serdes_preemphasis_37=0x580c +serdes_preemphasis_38=0x580c +serdes_preemphasis_39=0x580c +serdes_preemphasis_40=0x580c +serdes_preemphasis_41=0x580c +serdes_preemphasis_42=0x580c +serdes_preemphasis_43=0x580c +serdes_preemphasis_44=0x580c +serdes_preemphasis_45=0x580c +serdes_preemphasis_46=0xb3604 +serdes_preemphasis_47=0x72b03 +serdes_preemphasis_48=0x580c +serdes_preemphasis_49=0x580c +serdes_preemphasis_50=0x580c +serdes_preemphasis_51=0x580c +serdes_preemphasis_52=0x580c +serdes_preemphasis_53=0x580c +serdes_preemphasis_54=0x580c +serdes_preemphasis_55=0x580c +serdes_preemphasis_56=0x580c +serdes_preemphasis_57=0x580c +serdes_preemphasis_58=0x580c +serdes_preemphasis_59=0x580c +serdes_preemphasis_60=0xf3c05 +serdes_preemphasis_61=0x103f06 +serdes_preemphasis_66=0x43004 +serdes_preemphasis_68=0xf4006 +serdes_preemphasis_69=0xf4006 +serdes_preemphasis_70=0x580c +serdes_preemphasis_71=0x580c +serdes_preemphasis_72=0x580c +serdes_preemphasis_73=0x580c +serdes_preemphasis_74=0x580c +serdes_preemphasis_75=0x580c +serdes_preemphasis_76=0x580c +serdes_preemphasis_77=0x580c +serdes_preemphasis_78=0x580c +serdes_preemphasis_79=0x580c +serdes_preemphasis_80=0x580c +serdes_preemphasis_81=0x580c +serdes_preemphasis_82=0x73103 +serdes_preemphasis_83=0x73103 +serdes_preemphasis_84=0x580c +serdes_preemphasis_85=0x580c +serdes_preemphasis_86=0x580c +serdes_preemphasis_87=0x580c +serdes_preemphasis_88=0x580c +serdes_preemphasis_89=0x580c +serdes_preemphasis_90=0x580c +serdes_preemphasis_91=0x580c +serdes_preemphasis_92=0x580c +serdes_preemphasis_93=0x580c +serdes_preemphasis_94=0x580c +serdes_preemphasis_95=0x580c +serdes_preemphasis_100=0x43004 +serdes_preemphasis_102=0xf3c05 +serdes_preemphasis_103=0xf3c05 +serdes_preemphasis_104=0x580c +serdes_preemphasis_105=0x580c +serdes_preemphasis_106=0x580c +serdes_preemphasis_107=0x580c +serdes_preemphasis_108=0x580c +serdes_preemphasis_109=0x580c +serdes_preemphasis_110=0x580c +serdes_preemphasis_111=0x580c +serdes_preemphasis_112=0x580c +serdes_preemphasis_113=0x580c +serdes_preemphasis_114=0x580c +serdes_preemphasis_115=0x580c +serdes_preemphasis_116=0x83404 +serdes_preemphasis_117=0x83404 +serdes_preemphasis_118=0x580c +serdes_preemphasis_119=0x580c +serdes_preemphasis_120=0x580c +serdes_preemphasis_121=0x580c +serdes_preemphasis_122=0x580c +serdes_preemphasis_123=0x580c +serdes_preemphasis_124=0x580c +serdes_preemphasis_125=0x580c +serdes_preemphasis_126=0x580c +serdes_preemphasis_127=0x580c +serdes_preemphasis_128=0x580c +serdes_preemphasis_129=0x580c + +mmu_init_config="MSFT-TH2-Tier0" + +phy_an_lt_msft=1 From 43b2f152868192e47c193187460e0ca247d1dee7 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Thu, 5 May 2022 16:31:45 +0000 Subject: [PATCH 115/259] [7060] fix default port map Signed-off-by: Ying Xie --- .../Arista-7060CX-32S-D48C8/buffer_ports_t0.j2 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/buffer_ports_t0.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/buffer_ports_t0.j2 index fdbff09c12d4..a3c33da63990 100644 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/buffer_ports_t0.j2 +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/buffer_ports_t0.j2 @@ -8,14 +8,14 @@ {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} {%- endfor %} - {%- for port_idx in range(24,32) %} + {%- for port_idx in range(26,32) %} {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4 + 2)) %}{%- endif %} {%- endfor %} {%- for port_idx in range(6,10) %} {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} {%- endfor %} - {%- for port_idx in range(22,24) %} + {%- for port_idx in range(22,26) %} {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} {%- endfor %} -{%- endmacro %} \ No newline at end of file +{%- endmacro %} From cd991bb8e1cae940442e40fbc93c91e574913a8a Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Wed, 6 Jul 2022 21:09:49 +0000 Subject: [PATCH 116/259] [Buffer] Separate buffer profile for Arista-7060CX-32S-Q24C8 Signed-off-by: Ying Xie --- .../Arista-7060CX-32S-Q24C8/BALANCED | 1 + .../Arista-7060CX-32S-Q24C8/RDMA-CENTRIC | 1 + .../Arista-7060CX-32S-Q24C8/TCP-CENTRIC | 1 + .../buffer_ports_t0.j2 | 7 +++ .../buffers_defaults_t0.j2 | 47 +------------------ .../pg_profile_lookup.ini | 18 +------ .../Arista-7060CX-32S-Q24C8/qos.json.j2 | 2 +- 7 files changed, 13 insertions(+), 64 deletions(-) create mode 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/BALANCED create mode 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/RDMA-CENTRIC create mode 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/TCP-CENTRIC create mode 100644 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/buffer_ports_t0.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/buffers_defaults_t0.j2 mode change 100644 => 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/pg_profile_lookup.ini mode change 100644 => 120000 device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/qos.json.j2 diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/BALANCED b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/BALANCED new file mode 120000 index 000000000000..87afd08ffcd8 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/BALANCED @@ -0,0 +1 @@ +../../../common/profiles/th/gen/BALANCED \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/RDMA-CENTRIC b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/RDMA-CENTRIC new file mode 120000 index 000000000000..0c839e1e907b --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/RDMA-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th/gen/RDMA-CENTRIC/ \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/TCP-CENTRIC b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/TCP-CENTRIC new file mode 120000 index 000000000000..dd9cf046c0f9 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/TCP-CENTRIC @@ -0,0 +1 @@ +../../../common/profiles/th/gen/TCP-CENTRIC \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/buffer_ports_t0.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/buffer_ports_t0.j2 new file mode 100644 index 000000000000..599db74c1da5 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/buffer_ports_t0.j2 @@ -0,0 +1,7 @@ +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,32) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} + diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/buffers_defaults_t0.j2 deleted file mode 100644 index 2b6f72b6dc93..000000000000 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/buffers_defaults_t0.j2 +++ /dev/null @@ -1,46 +0,0 @@ -{%- set default_cable = '5m' %} - -{%- macro generate_port_lists(PORT_ALL) %} - {# Generate list of ports #} - {%- for port_idx in range(0,32) %} - {%- if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{%- endif %} - {%- endfor %} -{%- endmacro %} - -{%- macro generate_buffer_pool_and_profiles() %} - "BUFFER_POOL": { - "ingress_lossless_pool": { - "size": "11213696", - "type": "ingress", - "mode": "dynamic", - "xoff": "3855488" - }, - "egress_lossy_pool": { - "size": "9532224", - "type": "egress", - "mode": "dynamic" - }, - "egress_lossless_pool": { - "size": "15982720", - "type": "egress", - "mode": "static" - } - }, - "BUFFER_PROFILE": { - "ingress_lossy_profile": { - "pool":"ingress_lossless_pool", - "size":"0", - "dynamic_th":"3" - }, - "egress_lossless_profile": { - "pool":"egress_lossless_pool", - "size":"1518", - "static_th":"15982720" - }, - "egress_lossy_profile": { - "pool":"egress_lossy_pool", - "size":"1518", - "dynamic_th":"3" - } - }, -{%- endmacro %} diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/buffers_defaults_t0.j2 new file mode 120000 index 000000000000..9524e6a476ac --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/buffers_defaults_t0.j2 @@ -0,0 +1 @@ +BALANCED/buffers_defaults_t0.j2 \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/pg_profile_lookup.ini b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/pg_profile_lookup.ini deleted file mode 100644 index 7222f8014925..000000000000 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/pg_profile_lookup.ini +++ /dev/null @@ -1,17 +0,0 @@ -# PG lossless profiles. -# speed cable size xon xoff threshold xon_offset - 10000 5m 1248 2288 35776 -4 2288 - 25000 5m 1248 2288 53248 -4 2288 - 40000 5m 1248 2288 66560 -4 2288 - 50000 5m 1248 2288 79872 -4 2288 - 100000 5m 1248 2288 165568 -4 2288 - 10000 40m 1248 2288 37024 -4 2288 - 25000 40m 1248 2288 56160 -4 2288 - 40000 40m 1248 2288 71552 -4 2288 - 50000 40m 1248 2288 85696 -4 2288 - 100000 40m 1248 2288 177632 -4 2288 - 10000 300m 1248 2288 46176 -4 2288 - 25000 300m 1248 2288 79040 -4 2288 - 40000 300m 1248 2288 108160 -4 2288 - 50000 300m 1248 2288 131456 -4 2288 - 100000 300m 1248 2288 268736 -4 2288 diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/pg_profile_lookup.ini b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/pg_profile_lookup.ini new file mode 120000 index 000000000000..297cddb2d223 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/pg_profile_lookup.ini @@ -0,0 +1 @@ +BALANCED/pg_profile_lookup.ini \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/qos.json.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/qos.json.j2 deleted file mode 100644 index 3e548325ea30..000000000000 --- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/qos.json.j2 +++ /dev/null @@ -1 +0,0 @@ -{%- include 'qos_config.j2' %} diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/qos.json.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/qos.json.j2 new file mode 120000 index 000000000000..aef6b6765cf2 --- /dev/null +++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q24C8/qos.json.j2 @@ -0,0 +1 @@ +BALANCED/qos.json.j2 \ No newline at end of file From 63a3631d98c119999bcb63eb11fadaae445dc007 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Wed, 13 Jul 2022 07:08:33 +0800 Subject: [PATCH 117/259] [ci/build]: Upgrade SONiC package versions (#11425) Upgrade SONiC Versions --- .../build-sonic-slave-bullseye/versions-git | 4 +- .../versions-deb-buster | 4 +- files/build/versions/default/versions-git | 6 +- .../versions-deb-bullseye | 6 +- .../versions-py3 | 2 +- .../docker-config-engine-buster/versions-py3 | 2 +- .../docker-database/versions-deb-bullseye | 2 +- .../docker-dhcp-relay/versions-deb-bullseye | 2 +- .../docker-macsec/versions-deb-bullseye | 2 +- .../dockers/docker-mux/versions-deb-bullseye | 2 +- .../docker-orchagent/versions-deb-bullseye | 8 +-- .../versions-deb-bullseye | 10 +-- .../versions-deb-bullseye | 2 +- .../docker-sonic-mgmt-framework/versions-py3 | 2 +- .../versions-py3-all-armhf | 1 + .../versions-deb-bullseye | 2 +- .../versions-deb-bullseye | 2 +- .../docker-syncd-mlnx/versions-deb-bullseye | 4 +- .../versions-deb-bullseye | 61 ++++++++++--------- .../versions-deb-bullseye-arm64 | 7 ++- .../versions-deb-bullseye-armhf | 9 ++- .../dockers/sonic-slave-bullseye/versions-git | 2 +- .../dockers/sonic-slave-bullseye/versions-py3 | 2 +- .../dockers/sonic-slave-buster/versions-git | 2 +- .../dockers/sonic-slave-buster/versions-py3 | 2 +- .../dockers/sonic-slave-stretch/versions-git | 2 +- .../host-base-image/versions-deb-bullseye | 20 +++--- .../versions/host-image/versions-deb-bullseye | 32 ++++------ .../host-image/versions-deb-bullseye-arm64 | 4 ++ .../host-image/versions-deb-bullseye-armhf | 4 +- files/build/versions/host-image/versions-py3 | 2 +- 31 files changed, 108 insertions(+), 104 deletions(-) create mode 100644 files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3-all-armhf diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-git b/files/build/versions/build/build-sonic-slave-bullseye/versions-git index a3ff0704340b..2922c0970b74 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-git +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-git @@ -1,8 +1,8 @@ https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b -https://github.com/flashrom/flashrom.git==65159ea93997da065b2f8867532a6a54bf7f58f1 -https://github.com/FreeRADIUS/freeradius-server.git==d7c252885394603f45a569725eca2128e04a46b4 +https://github.com/flashrom/flashrom.git==edcea80d68e0f029b79bc273ba622dc4a3e6cb2b +https://github.com/FreeRADIUS/freeradius-server.git==32cecd3590f9fd51cef222afe8c010c389e613f2 https://github.com/FreeRADIUS/pam_radius.git==5e67868520e90a489626928f28c0befa531bf7d2 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster index f8b518f61fd7..20db24042380 100644 --- a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster +++ b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster @@ -21,7 +21,7 @@ libteam-utils==1.30-1 libteam5==1.30-1 libteamdctl0==1.30-1 libthrift-0.11.0==0.11.0-4 -libthrift-dev==0.14.1 +libthrift-dev==0.11.0-4 libthrift0==0.14.1 libyang==1.0.73 libyang-cpp==1.0.73 @@ -38,4 +38,4 @@ sonic-mgmt-framework==1.0-01 swss==1.0.0 syncd==1.0.0 syncd-vs==1.0.0 -thrift-compiler==0.14.1 \ No newline at end of file +thrift-compiler==0.11.0-4 \ No newline at end of file diff --git a/files/build/versions/default/versions-git b/files/build/versions/default/versions-git index 36d4e0f347f9..3b009fa3f127 100644 --- a/files/build/versions/default/versions-git +++ b/files/build/versions/default/versions-git @@ -1,11 +1,11 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==bb07d9eb0bf63e49b0f7f78b262fdf46927ed002 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==d22bf607218d50bf20444b0610f62b265f829dbc https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b https://github.com/dyninc/OpenBFDD.git==e35f43ad8d2b3f084e96a84c392528a90d05a287 -https://github.com/flashrom/flashrom.git==65159ea93997da065b2f8867532a6a54bf7f58f1 -https://github.com/FreeRADIUS/freeradius-server.git==d7c252885394603f45a569725eca2128e04a46b4 +https://github.com/flashrom/flashrom.git==edcea80d68e0f029b79bc273ba622dc4a3e6cb2b +https://github.com/FreeRADIUS/freeradius-server.git==32cecd3590f9fd51cef222afe8c010c389e613f2 https://github.com/FreeRADIUS/pam_radius.git==5e67868520e90a489626928f28c0befa531bf7d2 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 diff --git a/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye b/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye index 8bc97fb3ffe7..a541786cb02e 100644 --- a/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye @@ -6,7 +6,7 @@ build-essential==12.9 bzip2==1.0.8-4 cpp==4:10.2.1-1 cpp-10==10.2.1-6 -dpkg-dev==1.20.10 +dpkg-dev==1.20.11 g++==4:10.2.1-1 g++-10==10.2.1-6 gcc==4:10.2.1-1 @@ -19,7 +19,7 @@ libcc1-0==10.2.1-6 libcrypt-dev==1:4.4.18-4 libctf-nobfd0==2.35.2-2 libctf0==2.35.2-2 -libdpkg-perl==1.20.10 +libdpkg-perl==1.20.11 libexpat1-dev==2.2.10-2+deb11u3 libgcc-10-dev==10.2.1-6 libgomp1==10.2.1-6 @@ -49,7 +49,7 @@ libtsan0==10.2.1-6 libubsan1==10.2.1-6 libyang==1.0.73 libyang-cpp==1.0.73 -linux-libc-dev==5.10.120-1 +linux-libc-dev==5.10.127-1 make==4.3-4.1 patch==2.7.6-7 python3-dev==3.9.2-3 diff --git a/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 b/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 index b376f6857364..fc989a7fb4e6 100644 --- a/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 +++ b/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 @@ -10,6 +10,6 @@ pyangbind==0.8.1 pyyaml==5.4.1 redis==3.5.3 redis-dump-load==1.1 -regex==2022.6.2 +regex==2022.7.9 six==1.16.0 xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-buster/versions-py3 b/files/build/versions/dockers/docker-config-engine-buster/versions-py3 index b376f6857364..fc989a7fb4e6 100644 --- a/files/build/versions/dockers/docker-config-engine-buster/versions-py3 +++ b/files/build/versions/dockers/docker-config-engine-buster/versions-py3 @@ -10,6 +10,6 @@ pyangbind==0.8.1 pyyaml==5.4.1 redis==3.5.3 redis-dump-load==1.1 -regex==2022.6.2 +regex==2022.7.9 six==1.16.0 xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-database/versions-deb-bullseye b/files/build/versions/dockers/docker-database/versions-deb-bullseye index cf06df5d25ee..53ea345145cb 100644 --- a/files/build/versions/dockers/docker-database/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-database/versions-deb-bullseye @@ -18,7 +18,7 @@ libsource-highlight-common==3.1.9-3 libsource-highlight4v5==3.1.9-3+b1 libswsscommon-dbg==1.0.0 libunwind8==1.3.2-2 -openssh-client==1:8.4p1-5 +openssh-client==1:8.4p1-5+deb11u1 redis-server==5:6.0.16-1+deb11u2 sshpass==1.09-1+b1 strace==5.10-1 diff --git a/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bullseye b/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bullseye index 1505a810ea61..011cc321d68b 100644 --- a/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bullseye @@ -28,7 +28,7 @@ libsource-highlight4v5==3.1.9-3+b1 libswsscommon-dbg==1.0.0 libunwind8==1.3.2-2 lsof==4.93.2+dfsg-1.1 -openssh-client==1:8.4p1-5 +openssh-client==1:8.4p1-5+deb11u1 sonic-dhcp6relay==1.0.0-0 sonic-dhcp6relay-dbgsym==1.0.0-0 sonic-dhcpmon==1.0.0-0 diff --git a/files/build/versions/dockers/docker-macsec/versions-deb-bullseye b/files/build/versions/dockers/docker-macsec/versions-deb-bullseye index bec602f0d36b..3df82080595d 100644 --- a/files/build/versions/dockers/docker-macsec/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-macsec/versions-deb-bullseye @@ -23,7 +23,7 @@ libswsscommon-dbg==1.0.0 libteam5==1.30-1 libteamdctl0==1.30-1 libunwind8==1.3.2-2 -openssh-client==1:8.4p1-5 +openssh-client==1:8.4p1-5+deb11u1 sshpass==1.09-1+b1 strace==5.10-1 swss==1.0.0 diff --git a/files/build/versions/dockers/docker-mux/versions-deb-bullseye b/files/build/versions/dockers/docker-mux/versions-deb-bullseye index 1cc76af6e2a6..65be3dbbb031 100644 --- a/files/build/versions/dockers/docker-mux/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-mux/versions-deb-bullseye @@ -22,7 +22,7 @@ libsource-highlight-common==3.1.9-3 libsource-highlight4v5==3.1.9-3+b1 libswsscommon-dbg==1.0.0 libunwind8==1.3.2-2 -openssh-client==1:8.4p1-5 +openssh-client==1:8.4p1-5+deb11u1 sonic-linkmgrd==1.0.0-1 sonic-linkmgrd-dbgsym==1.0.0-1 sshpass==1.09-1+b1 diff --git a/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye b/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye index b174e46c1080..373ceb8f94f4 100644 --- a/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye @@ -28,7 +28,7 @@ libctf-nobfd0==2.35.2-2 libctf0==2.35.2-2 libcurl3-gnutls==7.74.0-1.3+deb11u1 libdebuginfod1==0.183-1 -libdpkg-perl==1.20.10 +libdpkg-perl==1.20.11 libdw1==0.183-1 libedit2==3.1-20191231-2+b1 libexpat1-dev==2.2.10-2+deb11u3 @@ -66,11 +66,11 @@ libtirpc-dev==1.3.1-1 libtsan0==10.2.1-6 libubsan1==10.2.1-6 libunwind8==1.3.2-2 -linux-libc-dev==5.10.120-1 +linux-libc-dev==5.10.127-1 make==4.3-4.1 ndisc6==1.0.4-2 ndppd==0.2.5-6 -openssh-client==1:8.4p1-5 +openssh-client==1:8.4p1-5+deb11u1 patch==2.7.6-7 pci.ids==0.0~2021.02.08-1 pciutils==1:3.7.0-5 @@ -79,7 +79,7 @@ python3.9-dev==3.9.2-1 sshpass==1.09-1+b1 strace==5.10-1 swss-dbg==1.0.0 -tcpdump==4.99.0-2 +tcpdump==4.99.0-2+deb11u1 vim==2:8.2.2434-3+deb11u1 vim-runtime==2:8.2.2434-3+deb11u1 xz-utils==5.2.5-2.1~deb11u1 diff --git a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye index 25acf7e601e0..789d0b818fb4 100644 --- a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye @@ -38,15 +38,15 @@ libcurl3-gnutls==7.74.0-1.3+deb11u1 libdatrie1==0.2.13-1 libdbi1==0.9.0-6 libdebuginfod1==0.183-1 -libdpkg-perl==1.20.10 +libdpkg-perl==1.20.11 libdw1==0.183-1 libedit2==3.1-20191231-2+b1 libexpat1-dev==2.2.10-2+deb11u3 libfido2-1==1.6.0-2 libfontconfig1==2.13.1-4.2 libfreeipmi17==1.6.6-4+deb11u1 -libfreetype6==2.10.4+dfsg-1 -libfribidi0==1.0.8-2 +libfreetype6==2.10.4+dfsg-1+deb11u1 +libfribidi0==1.0.8-2+deb11u1 libgcc-10-dev==10.2.1-6 libglib2.0-0==2.66.8-1 libgomp1==10.2.1-6 @@ -100,12 +100,12 @@ libxdmcp6==1:1.1.2-3 libxext6==2:1.3.3-1.1 libxml2==2.9.10+dfsg-6.7+deb11u2 libxrender1==1:0.9.10-1 -linux-libc-dev==5.10.120-1 +linux-libc-dev==5.10.127-1 lm-sensors==1:3.6.0-7 lm-sensors-dbgsym==1:3.6.0-7 make==4.3-4.1 mft==4.20.0-34 -openssh-client==1:8.4p1-5 +openssh-client==1:8.4p1-5+deb11u1 patch==2.7.6-7 pci.ids==0.0~2021.02.08-1 psmisc==23.4-2 diff --git a/files/build/versions/dockers/docker-router-advertiser/versions-deb-bullseye b/files/build/versions/dockers/docker-router-advertiser/versions-deb-bullseye index cbb71db18c65..8af2912a05c1 100644 --- a/files/build/versions/dockers/docker-router-advertiser/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-router-advertiser/versions-deb-bullseye @@ -18,7 +18,7 @@ libsource-highlight-common==3.1.9-3 libsource-highlight4v5==3.1.9-3+b1 libswsscommon-dbg==1.0.0 libunwind8==1.3.2-2 -openssh-client==1:8.4p1-5 +openssh-client==1:8.4p1-5+deb11u1 radvd==1:2.18-3 sshpass==1.09-1+b1 strace==5.10-1 diff --git a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 index 2bd6203dbd5b..730b58c9d931 100644 --- a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 +++ b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 @@ -12,7 +12,7 @@ importlib-metadata==4.12.0 importlib-resources==5.8.0 inflection==0.5.1 itsdangerous==2.1.2 -jsonschema==4.6.2 +jsonschema==4.7.1 openapi-schema-validator==0.2.3 openapi-spec-validator==0.4.0 protobuf==4.21.2 diff --git a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3-all-armhf b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3-all-armhf new file mode 100644 index 000000000000..7bf28f48a622 --- /dev/null +++ b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3-all-armhf @@ -0,0 +1 @@ +jsonschema==4.7.2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-telemetry/versions-deb-bullseye b/files/build/versions/dockers/docker-sonic-telemetry/versions-deb-bullseye index 8823d5c6ef45..8bea8bf749b4 100644 --- a/files/build/versions/dockers/docker-sonic-telemetry/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-sonic-telemetry/versions-deb-bullseye @@ -18,7 +18,7 @@ libsource-highlight-common==3.1.9-3 libsource-highlight4v5==3.1.9-3+b1 libswsscommon-dbg==1.0.0 libunwind8==1.3.2-2 -openssh-client==1:8.4p1-5 +openssh-client==1:8.4p1-5+deb11u1 sonic-mgmt-common==1.0.0 sonic-telemetry==0.1 sshpass==1.09-1+b1 diff --git a/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-deb-bullseye index 3d7dbfd048ea..9928bd280f62 100644 --- a/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-deb-bullseye @@ -19,7 +19,7 @@ libcc1-0==10.2.1-6 libctf-nobfd0==2.35.2-2 libctf0==2.35.2-2 libdouble-conversion3==3.1.5-6.1 -libdpkg-perl==1.20.10 +libdpkg-perl==1.20.11 libffi-dev==3.3-6 libgcc-10-dev==10.2.1-6 libglib2.0-0==2.66.8-1 diff --git a/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye index 2b85184c8461..1af86cb382fc 100644 --- a/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye @@ -37,10 +37,10 @@ libswsscommon-dbg==1.0.0 libtirpc-dev==1.3.1-1 libunwind8==1.3.2-2 libxml2==2.9.10+dfsg-6.7+deb11u2 -linux-libc-dev==5.10.120-1 +linux-libc-dev==5.10.127-1 mft==4.20.0-34 mlnx-sai==1.mlnx.SAIRel1.21.2.0 -openssh-client==1:8.4p1-5 +openssh-client==1:8.4p1-5+deb11u1 python-is-python3==3.9.2-1 python-pip-whl==20.3.4-4+deb11u1 python-sdk-api==1.mlnx.4.5.2262 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye index a99a72c9c5c9..3630e96c0cbf 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye @@ -83,7 +83,7 @@ dh-strip-nondeterminism==1.12.0-1 dictionaries-common==1.28.4 diffstat==1.64-1 dirmngr==2.2.27-2+deb11u2 -distro-info-data==0.51+deb11u1 +distro-info-data==0.51+deb11u2 dkms==2.8.4-3 dmeventd==2:1.02.175-2.1 dmsetup==2:1.02.175-2.1 @@ -101,7 +101,7 @@ docutils-common==0.16+dfsg-4 dosfstools==4.2-1 doxygen==1.9.1-1 dpatch==2.0.41 -dpkg-dev==1.20.10 +dpkg-dev==1.20.11 dput==1.1.0 dvipng==1.15-1.1+b1 dvisvgm==2.11.1-1 @@ -466,7 +466,7 @@ libdouble-conversion3==3.1.5-6.1 libdoxia-core-java==1.7-2 libdoxia-java==1.7-2 libdoxia-sitetools-java==1.7.5-2 -libdpkg-perl==1.20.10 +libdpkg-perl==1.20.11 libdrm-amdgpu1==2.4.104-1 libdrm-common==2.4.104-1 libdrm-intel1==2.4.104-1 @@ -545,11 +545,11 @@ libfontconfig1==2.13.1-4.2 libfontconfig1-dev==2.13.1-4.2 libfontenc1==1:1.1.4-1 libfop-java==1:2.5-3 -libfreetype-dev==2.10.4+dfsg-1 -libfreetype6==2.10.4+dfsg-1 -libfreetype6-dev==2.10.4+dfsg-1 -libfribidi-dev==1.0.8-2 -libfribidi0==1.0.8-2 +libfreetype-dev==2.10.4+dfsg-1+deb11u1 +libfreetype6==2.10.4+dfsg-1+deb11u1 +libfreetype6-dev==2.10.4+dfsg-1+deb11u1 +libfribidi-dev==1.0.8-2+deb11u1 +libfribidi0==1.0.8-2+deb11u1 libfstrm0==0.6.0-1+b1 libgbm1==20.3.5-1 libgc1==1:8.0.4-3 @@ -594,7 +594,8 @@ libgme0==0.6.3-2 libgmock-dev==1.10.0.20201025-1.1 libgmp-dev==2:6.2.1+dfsg-1+deb11u1 libgmpxx4ldbl==2:6.2.1+dfsg-1+deb11u1 -libgnutls-dane0==3.7.1-5 +libgnutls-dane0==3.7.1-5+deb11u1 +libgnutls30==3.7.1-5+deb11u1 libgomp1==10.2.1-6 libgoogle-perftools4==2.8.1-1 libgpgme11==1.14.0-1+b2 @@ -1309,7 +1310,7 @@ libxmlgraphics-commons-java==2.4-2~deb11u1 libxmlrpc-lite-perl==0.717-4 libxmu6==2:1.1.2-2+b3 libxmuu1==2:1.1.2-2+b3 -libxnvctrl0==460.91.03-1 +libxnvctrl0==470.103.01-1~deb11u1 libxpm4==1:3.5.12-1 libxrandr-dev==2:1.5.1-1 libxrandr2==2:1.5.1-1 @@ -1342,12 +1343,12 @@ libzvbi0==0.2.35-18 libzzip-0-13==0.13.62-3.3+deb11u1 licensecheck==3.1.1-2 lintian==2.104.0 -linux-compiler-gcc-10-x86==5.10.120-1 -linux-headers-5.10.0-15-amd64==5.10.120-1 -linux-headers-5.10.0-15-common==5.10.120-1 -linux-headers-amd64==5.10.120-1 -linux-kbuild-5.10==5.10.120-1 -linux-libc-dev==5.10.120-1 +linux-compiler-gcc-10-x86==5.10.127-1 +linux-headers-5.10.0-16-amd64==5.10.127-1 +linux-headers-5.10.0-16-common==5.10.127-1 +linux-headers-amd64==5.10.127-1 +linux-kbuild-5.10==5.10.127-1 +linux-libc-dev==5.10.127-1 linuxdoc-tools==0.9.82-1 llvm-11==1:11.0.1-2 llvm-11-dev==1:11.0.1-2 @@ -1355,7 +1356,7 @@ llvm-11-runtime==1:11.0.1-2 llvm-11-tools==1:11.0.1-2 lmodern==2.004.5-6.1 locales==2.31-13+deb11u3 -logrotate==3.18.0-2 +logrotate==3.18.0-2+deb11u1 lsb-release==11.1.0 lsof==4.93.2+dfsg-1.1 lua-bitop==1.0.2-5 @@ -1400,9 +1401,9 @@ openjdk-11-jdk-headless==11.0.15+10-1~deb11u1 openjdk-11-jre==11.0.15+10-1~deb11u1 openjdk-11-jre-headless==11.0.15+10-1~deb11u1 opensp==1.5.2-13+b2 -openssh-client==1:8.4p1-5 -openssh-server==1:8.4p1-5 -openssh-sftp-server==1:8.4p1-5 +openssh-client==1:8.4p1-5+deb11u1 +openssh-server==1:8.4p1-5+deb11u1 +openssh-sftp-server==1:8.4p1-5+deb11u1 openssl==1.1.1n-0+deb11u3 ovmf==2020.11-2+deb11u1 packagekit==1.2.2-2 @@ -1437,13 +1438,13 @@ php-timer==5.0.3-2 php-tokenizer==1.2.0-1 php-webmozart-assert==1.9.1-2 php-xml==2:7.4+76 -php7.4-cli==7.4.28-1+deb11u1 -php7.4-common==7.4.28-1+deb11u1 -php7.4-json==7.4.28-1+deb11u1 -php7.4-mbstring==7.4.28-1+deb11u1 -php7.4-opcache==7.4.28-1+deb11u1 -php7.4-readline==7.4.28-1+deb11u1 -php7.4-xml==7.4.28-1+deb11u1 +php7.4-cli==7.4.30-1+deb11u1 +php7.4-common==7.4.30-1+deb11u1 +php7.4-json==7.4.30-1+deb11u1 +php7.4-mbstring==7.4.30-1+deb11u1 +php7.4-opcache==7.4.30-1+deb11u1 +php7.4-readline==7.4.30-1+deb11u1 +php7.4-xml==7.4.30-1+deb11u1 phpunit==9.5.2-1 phpunit-cli-parser==1.0.1-1 phpunit-code-unit==1.0.8-1 @@ -1473,7 +1474,7 @@ poppler-data==0.4.10-1 pps-tools==1.0.2-2 preview-latex-style==12.2-1 pristine-tar==1.49 -procmail==3.22-26 +procmail==3.22-26+deb11u1 procps==2:3.3.17-5 protobuf-compiler==3.12.4-1 psmisc==23.4-2 @@ -1577,8 +1578,8 @@ python3-sphinx-rtd-theme==0.5.1+dfsg-1 python3-stdeb==0.10.0-1 python3-tk==3.9.2-1 python3-toml==0.10.1-1 -python3-twisted==20.3.0-7 -python3-twisted-bin==20.3.0-7 +python3-twisted==20.3.0-7+deb11u1 +python3-twisted-bin==20.3.0-7+deb11u1 python3-typing-extensions==3.7.4.3-1 python3-tz==2021.1-1 python3-unidiff==0.5.5-2 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 index 0413fb3629b2..9a2e2a6ab39d 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 @@ -1,8 +1,11 @@ +base-files==11.1+deb11u4 +bash==5.1-2+deb11u1 binutils-aarch64-linux-gnu==2.35.2-2 binutils-arm-linux-gnueabihf==2.35.2-2 cpp-10-arm-linux-gnueabihf==10.2.1-6cross1 cpp-arm-linux-gnueabihf==4:10.2.1-1 dctrl-tools==2.24-3 +dpkg==1.20.11 dvipng==1.15-1.1 gcc-10-arm-linux-gnueabihf==10.2.1-6cross1 gcc-10-arm-linux-gnueabihf-base==10.2.1-6cross1 @@ -17,6 +20,6 @@ libgomp1-armhf-cross==10.2.1-6cross1 libstdc++6-armhf-cross==10.2.1-6cross1 libubsan1-armhf-cross==10.2.1-6cross1 libxslt1-dev==1.1.34-4 -linux-headers-5.10.0-15-arm64==5.10.120-1 -linux-headers-arm64==5.10.120-1 +linux-headers-5.10.0-16-arm64==5.10.127-1 +linux-headers-arm64==5.10.127-1 nodejs==14.20.0-deb-1nodesource1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf index 6d5c16f1bcf5..8c6430609f8d 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf @@ -1,7 +1,10 @@ +base-files==11.1+deb11u4 +bash==5.1-2+deb11u1 binutils-arm-linux-gnueabihf==2.35.2-2 bubblewrap==0.4.1-3 dctrl-tools==2.24-3 doxygen==1.9.1-2 +dpkg==1.20.11 dvipng==1.15-1.1 faketime==0.9.8-9 gir1.2-nautilus-3.0==3.38.2-1+deb11u1 @@ -43,9 +46,9 @@ libxapian-dev==1.4.18-3 libxslt1-dev==1.1.34-4 libxstring-perl==0.005-1+b1 libyaml-tiny-perl==1.73-1 -linux-compiler-gcc-10-arm==5.10.120-1 -linux-headers-5.10.0-15-armmp==5.10.120-1 -linux-headers-armmp==5.10.120-1 +linux-compiler-gcc-10-arm==5.10.127-1 +linux-headers-5.10.0-16-armmp==5.10.127-1 +linux-headers-armmp==5.10.127-1 mat2==0.12.1-2 nodejs==14.20.0-deb-1nodesource1 ps2eps==1.68+binaryfree-3 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-git b/files/build/versions/dockers/sonic-slave-bullseye/versions-git index 2e5476eb866b..d7cbfb3e3c61 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-git +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==bb07d9eb0bf63e49b0f7f78b262fdf46927ed002 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==d22bf607218d50bf20444b0610f62b265f829dbc https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 index ae4fbe75dca4..8435906eca68 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 @@ -85,7 +85,7 @@ pytz==2021.1 pyxdg==0.27 pyyaml==5.4.1 redis==4.3.4 -regex==2022.6.2 +regex==2022.7.9 requests==2.25.1 roman==2.0.0 service-identity==18.1.0 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-git b/files/build/versions/dockers/sonic-slave-buster/versions-git index 2e5476eb866b..d7cbfb3e3c61 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-git +++ b/files/build/versions/dockers/sonic-slave-buster/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==bb07d9eb0bf63e49b0f7f78b262fdf46927ed002 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==d22bf607218d50bf20444b0610f62b265f829dbc https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-py3 b/files/build/versions/dockers/sonic-slave-buster/versions-py3 index 129b7d8572d8..f0a45aa4b4ce 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-py3 +++ b/files/build/versions/dockers/sonic-slave-buster/versions-py3 @@ -65,7 +65,7 @@ pytz==2019.1 pyxdg==0.25 pyyaml==5.4.1 redis==4.3.4 -regex==2022.6.2 +regex==2022.7.9 requests==2.21.0 roman==2.0.0 secretstorage==2.3.1 diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-git b/files/build/versions/dockers/sonic-slave-stretch/versions-git index 2e5476eb866b..d7cbfb3e3c61 100644 --- a/files/build/versions/dockers/sonic-slave-stretch/versions-git +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==bb07d9eb0bf63e49b0f7f78b262fdf46927ed002 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==d22bf607218d50bf20444b0610f62b265f829dbc https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/host-base-image/versions-deb-bullseye b/files/build/versions/host-base-image/versions-deb-bullseye index 9149d88a7764..15c9d7f2f896 100644 --- a/files/build/versions/host-base-image/versions-deb-bullseye +++ b/files/build/versions/host-base-image/versions-deb-bullseye @@ -1,8 +1,8 @@ adduser==3.118 apt==2.2.4 -base-files==11.1+deb11u3 +base-files==11.1+deb11u4 base-passwd==3.5.51 -bash==5.1-2+b3 +bash==5.1-2+deb11u1 bsdutils==1:2.36.1-8+deb11u1 coreutils==8.32-4+b1 dash==0.5.11+git20200708+dd9ef66-5 @@ -10,14 +10,14 @@ debconf==1.5.77 debian-archive-keyring==2021.1.1 debianutils==4.11.2 diffutils==1:3.7-5 -dpkg==1.20.9 +dpkg==1.20.11 e2fsprogs==1.46.2-2 findutils==4.8.0-1 gcc-10-base==10.2.1-6 gcc-9-base==9.3.0-22 -gpgv==2.2.27-2+deb11u1 +gpgv==2.2.27-2+deb11u2 grep==3.6-1 -gzip==1.10-4 +gzip==1.10-4+deb11u1 hostname==3.23 init-system-helpers==1.60 libacl1==2.2.53-10 @@ -39,7 +39,7 @@ libffi7==3.3-6 libgcc-s1==10.2.1-6 libgcrypt20==1.8.7-6 libgmp10==2:6.2.1+dfsg-1+deb11u1 -libgnutls30==3.7.1-5 +libgnutls30==3.7.1-5+deb11u1 libgpg-error0==1.38-2 libgssapi-krb5-2==1.18.3-6+deb11u1 libhogweed6==3.7.3-1 @@ -49,7 +49,7 @@ libkeyutils1==1.6.1-2 libkrb5-3==1.18.3-6+deb11u1 libkrb5support0==1.18.3-6+deb11u1 liblz4-1==1.9.3-2 -liblzma5==5.2.5-2 +liblzma5==5.2.5-2.1~deb11u1 libmount1==2.36.1-8+deb11u1 libnettle8==3.7.3-1 libnsl2==1.3.0-2 @@ -67,7 +67,7 @@ libsemanage1==3.1-1+b2 libsepol1==3.1-1 libsmartcols1==2.36.1-8+deb11u1 libss2==1.46.2-2 -libssl1.1==1.1.1n-0+deb11u1 +libssl1.1==1.1.1n-0+deb11u3 libstdc++6==10.2.1-6 libsystemd0==247.3-7 libtasn1-6==4.16.0-2 @@ -91,6 +91,6 @@ perl-base==5.32.1-4+deb11u2 sed==4.7-1 sysvinit-utils==2.96-7+deb11u1 tar==1.34+dfsg-1 -tzdata==2021a-1+deb11u2 +tzdata==2021a-1+deb11u4 util-linux==2.36.1-8+deb11u1 -zlib1g==1:1.2.11.dfsg-2 \ No newline at end of file +zlib1g==1:1.2.11.dfsg-2+deb11u1 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-deb-bullseye b/files/build/versions/host-image/versions-deb-bullseye index f004beea9460..dd4b509c55d1 100644 --- a/files/build/versions/host-image/versions-deb-bullseye +++ b/files/build/versions/host-image/versions-deb-bullseye @@ -28,13 +28,12 @@ curl==7.74.0-1.3+deb11u1 dbus==1.12.20-2 device-tree-compiler==1.6.0-1 dirmngr==2.2.27-2+deb11u2 -distro-info-data==0.51+deb11u1 +distro-info-data==0.51+deb11u2 dmidecode==3.3-2 dmsetup==2:1.02.175-2.1 docker-ce==5:20.10.14~3-0~debian-bullseye docker-ce-cli==5:20.10.14~3-0~debian-bullseye -dpkg==1.20.10 -dpkg-dev==1.20.10 +dpkg-dev==1.20.11 eatmydata==105-9 ebtables==2.0.11-4+b1 efibootmgr==17-1 @@ -67,10 +66,8 @@ gpg-wks-client==2.2.27-2+deb11u2 gpg-wks-server==2.2.27-2+deb11u2 gpgconf==2.2.27-2+deb11u2 gpgsm==2.2.27-2+deb11u2 -gpgv==2.2.27-2+deb11u2 grub-common==2.04-20 grub2-common==2.04-20 -gzip==1.10-4+deb11u1 haveged==1.9.14-1 hdparm==9.60+ds-1 hping3==3.a2.ds2-10 @@ -133,7 +130,7 @@ libdbus-1-3==1.12.20-2 libdbus-1-dev==1.12.20-2 libdevmapper1.02.1==2:1.02.175-2.1 libdns-export1110==1:9.11.19+dfsg-2.1 -libdpkg-perl==1.20.10 +libdpkg-perl==1.20.11 libdw1==0.183-1 libeatmydata1==105-9 libedit2==3.1-20191231-2+b1 @@ -152,9 +149,9 @@ libfontconfig-dev==2.13.1-4.2 libfontconfig1==2.13.1-4.2 libfontconfig1-dev==2.13.1-4.2 libfreeipmi17==1.6.6-4+deb11u1 -libfreetype-dev==2.10.4+dfsg-1 -libfreetype6==2.10.4+dfsg-1 -libfreetype6-dev==2.10.4+dfsg-1 +libfreetype-dev==2.10.4+dfsg-1+deb11u1 +libfreetype6==2.10.4+dfsg-1+deb11u1 +libfreetype6-dev==2.10.4+dfsg-1+deb11u1 libfuse2==2.9.9-5 libgcc-10-dev==10.2.1-6 libgdbm-compat4==1.19-2 @@ -194,7 +191,6 @@ libksba8==1.5.0-3 libldap-2.4-2==2.4.57+dfsg-3+deb11u1 liblognorm5==2.0.5-1.1 liblsan0==10.2.1-6 -liblzma5==5.2.5-2.1~deb11u1 liblzo2-2==2.10-2 libmagic-mgc==1:5.39-3 libmagic1==1:5.39-3 @@ -264,7 +260,6 @@ libsm6==2:1.2.3-1 libsqlite3-0==3.34.1-3 libssh2-1==1.9.0-2 libssl-dev==1.1.1k-1+deb11u1+fips -libssl1.1==1.1.1n-0+deb11u3 libstdc++-10-dev==10.2.1-6 libswsscommon==1.0.0 libsysfs2==2.1.0+repack-7 @@ -302,9 +297,9 @@ libyang==1.0.73 libyang-cpp==1.0.73 linux-base==4.6 linux-image-5.10.0-12-2-amd64-unsigned==5.10.103-1 -linux-libc-dev==5.10.120-1 +linux-libc-dev==5.10.127-1 locales==2.31-13+deb11u3 -logrotate==3.18.0-2 +logrotate==3.18.0-2+deb11u1 lsb-release==11.1.0 make==4.3-4.1 makedev==2.3.1-94.1 @@ -320,12 +315,12 @@ ndisc6==1.0.4-2 net-tools==1.60+git20181103.0eebece-1 netbase==6.3 netfilter-persistent==1.0.15 -ntp==1:4.2.8p15+dfsg-1+deb10u2 +ntp==1:4.2.8p15+dfsg-1 ntpstat==0.0.0.1-2+b1 opennsl-modules==7.1.0.0 -openssh-client==1:8.4p1-5+fips -openssh-server==1:8.4p1-5+fips -openssh-sftp-server==1:8.4p1-5+fips +openssh-client==1:8.4p1-5+deb11u1 +openssh-server==1:8.4p1-5+deb11u1 +openssh-sftp-server==1:8.4p1-5+deb11u1 openssl==1.1.1n-0+deb11u3 patch==2.7.6-7 pci.ids==0.0~2021.02.08-1 @@ -385,7 +380,7 @@ sysfsutils==2.1.0+repack-7 systemd==247.3-7 systemd-sonic-generator==1.0.0 systemd-sysv==247.3-7 -tcpdump==4.99.0-2 +tcpdump==4.99.0-2+deb11u1 tcptraceroute==1.5beta7+debian-4.1+b1 traceroute==1:2.1.0-2+b1 u-boot-tools==2021.01+dfsg-5 @@ -405,5 +400,4 @@ xorg-sgml-doctools==1:1.11-1.1 xtrans-dev==1.4.0-1 xxd==2:8.2.2434-3+deb11u1 xz-utils==5.2.5-2.1~deb11u1 -zlib1g==1:1.2.11.dfsg-2+deb11u1 zlib1g-dev==1:1.2.11.dfsg-2+deb11u1 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-deb-bullseye-arm64 b/files/build/versions/host-image/versions-deb-bullseye-arm64 index 9692e5b5aaf1..7629b9110636 100644 --- a/files/build/versions/host-image/versions-deb-bullseye-arm64 +++ b/files/build/versions/host-image/versions-deb-bullseye-arm64 @@ -8,7 +8,11 @@ libxml2-dev==2.9.10+dfsg-6.7+deb11u2 libxslt1-dev==1.1.34-4 libxslt1.1==1.1.34-4 linux-image-5.10.0-12-2-arm64-unsigned==5.10.103-1 +ntp==1:4.2.8p15+dfsg-1+deb10u2 ntpstat==0.0.0.1-2 +openssh-client==1:8.4p1-5+fips +openssh-server==1:8.4p1-5+fips +openssh-sftp-server==1:8.4p1-5+fips picocom==3.1-2 traceroute==1:2.1.0-2 tsingma-bsp==1.0 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-deb-bullseye-armhf b/files/build/versions/host-image/versions-deb-bullseye-armhf index 9bac399f3e56..bac8233e5d2e 100644 --- a/files/build/versions/host-image/versions-deb-bullseye-armhf +++ b/files/build/versions/host-image/versions-deb-bullseye-armhf @@ -10,9 +10,7 @@ libxslt1-dev==1.1.34-4 libxslt1.1==1.1.34-4 linux-image-5.10.0-12-2-armmp==5.10.103-1 mrvlprestera==1.0 +ntp==1:4.2.8p15+dfsg-1+deb10u2 ntpstat==0.0.0.1-2 -openssh-client==1:8.4p1-5 -openssh-server==1:8.4p1-5 -openssh-sftp-server==1:8.4p1-5 picocom==3.1-2 traceroute==1:2.1.0-2 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-py3 b/files/build/versions/host-image/versions-py3 index 9e9ede3b48fb..28b92f13378e 100644 --- a/files/build/versions/host-image/versions-py3 +++ b/files/build/versions/host-image/versions-py3 @@ -53,7 +53,7 @@ python-apt==2.2.1 python-dateutil==2.8.2 pyyaml==5.4.1 redis==3.5.3 -regex==2022.6.2 +regex==2022.7.9 requests==2.28.1 scapy==2.4.4 semantic-version==2.10.0 From d3ae762db59c93e9ce31a14a9f7f9cb07b899556 Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Wed, 13 Jul 2022 11:08:11 +0800 Subject: [PATCH 118/259] [Build] Add the missing debian security mirrors in slave images (#11305) (#11314) Why I did it Cherry-pick from #11305 The build below was broken, it was caused by one of the required debian mirror missing. https://dev.azure.com/mssonic/build/_build/results?buildId=116719&view=logs&j=88ce9a53-729c-5fa9-7b6e-3d98f2488e3f&t=88f376cf-c35d-5783-0a48-9ad83a873284 libpci-dev : Depends: libudev-dev (>= 196) but it is not going to be installed libsystemd-dev : Depends: libsystemd0 (= 232-25+deb9u14) but 232-25+deb9u13 is to be installed How I did it Add the missing mirrors for buster and stretch. From 80ae988be412ad31fcc296a9bcc7a4c085d2d574 Mon Sep 17 00:00:00 2001 From: Liu Shilong Date: Wed, 13 Jul 2022 16:58:37 +0800 Subject: [PATCH 119/259] [ci] Enable reproducible build in PR checks. (#11411) * [ci] Enable reproducible build in PR checks. --- .azure-pipelines/azure-pipelines-repd-build-variables.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.azure-pipelines/azure-pipelines-repd-build-variables.yml b/.azure-pipelines/azure-pipelines-repd-build-variables.yml index 971722ce576c..d86ef1eaf8a0 100644 --- a/.azure-pipelines/azure-pipelines-repd-build-variables.yml +++ b/.azure-pipelines/azure-pipelines-repd-build-variables.yml @@ -1,5 +1,7 @@ variables: - ${{ if and(ge(variables['Build.SourceBranchName'], '202012'), le(variables['Build.SourceBranchName'], '299999')) }}: - VERSION_CONTROL_OPTIONS: '' - ${{ if or(lt(variables['Build.SourceBranchName'], '202012'), gt(variables['Build.SourceBranchName'], '299999')) }}: + ${{ if eq(variables['Build.Reason'],'PullRequest') }}: + VERSION_CONTROL_OPTIONS: 'SONIC_VERSION_CONTROL_COMPONENTS=$([ "$(System.PullRequest.TargetBranch)" != "master" ] && echo deb,py2,py3,web,git,docker)' + ${{ elseif ne(variables['Build.SourceBranch'],'master') }}: + VERSION_CONTROL_OPTIONS: 'SONIC_VERSION_CONTROL_COMPONENTS=deb,py2,py3,web,git,docker' + ${{ else }}: VERSION_CONTROL_OPTIONS: '' From 669687385bf5a969e3d6decd1118f34f69fcda66 Mon Sep 17 00:00:00 2001 From: Lawrence Lee Date: Thu, 7 Jul 2022 22:31:21 -0700 Subject: [PATCH 120/259] [device]: Add SAI checksum verify to TD3 config (#8857) * [device]: Add SAI checksum verify to TD3 config * A new config option was added to control the value of IPV4_INCR_CHECKSUM_ORIGINAL_VALUE_VERIFY in the EGR_FLEX_CONFIG control register (this prevents checksums of 0xffff from being propagated to other devices) --- .../Arista-7050CX3-32S-C32/config.bcm.j2 | 1 + .../Arista-7050CX3-32S-D48C8/config.bcm.j2 | 1 + src/sonic-device-data/tests/permitted_list | 1 + 3 files changed, 3 insertions(+) diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/config.bcm.j2 b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/config.bcm.j2 index 3f81bfcc9951..6cc4540921e4 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/config.bcm.j2 +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/config.bcm.j2 @@ -9,6 +9,7 @@ sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ l3_alpm_hit_skip=1 sai_adjust_acl_drop_in_rx_drop=1 +sai_verify_incoming_chksum=0 {{ map_prio }} host_as_route_disable=1 use_all_splithorizon_groups=1 diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/config.bcm.j2 b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/config.bcm.j2 index da09c09b167e..a68ff78bab3c 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/config.bcm.j2 +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/config.bcm.j2 @@ -9,6 +9,7 @@ sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ l3_alpm_hit_skip=1 sai_adjust_acl_drop_in_rx_drop=1 +sai_verify_incoming_chksum=0 {{ map_prio }} host_as_route_disable=1 use_all_splithorizon_groups=1 diff --git a/src/sonic-device-data/tests/permitted_list b/src/sonic-device-data/tests/permitted_list index d237ce1948c6..c9543521c00e 100644 --- a/src/sonic-device-data/tests/permitted_list +++ b/src/sonic-device-data/tests/permitted_list @@ -313,6 +313,7 @@ port_gmii_mode phy_force_firmware_load phy_pcs_repeater l3_alpm_hit_skip +sai_verify_incoming_chksum phy_an_lt_msft xflow_macsec_secure_chan_to_num_secure_assoc_encrypt xflow_macsec_secure_chan_to_num_secure_assoc_decrypt From 3607686fd1e7884adfbb69404bd17f9fe0c23c78 Mon Sep 17 00:00:00 2001 From: Stepan Blyshchak <38952541+stepanblyschak@users.noreply.github.com> Date: Thu, 14 Jul 2022 09:30:00 +0300 Subject: [PATCH 121/259] [teamd] Stop teamd after stopping swss in fast-reboot (#11210) - Why I did it To optimize fast-reboot. Teamd can be stopped after bgp is stopped and after swss is stopped because the last LACP packet can be sent still since syncd is still running. Saves 15 sec on shutdown. - How I did it Defined in the manifest for teamd to be stopped after swss - How to verify it Run it on the switch. Signed-off-by: Stepan Blyschak --- rules/docker-teamd.mk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rules/docker-teamd.mk b/rules/docker-teamd.mk index 8d978ae66515..d376daa2100f 100644 --- a/rules/docker-teamd.mk +++ b/rules/docker-teamd.mk @@ -19,7 +19,8 @@ $(DOCKER_TEAMD)_VERSION = 1.0.0 $(DOCKER_TEAMD)_PACKAGE_NAME = teamd $(DOCKER_TEAMD)_WARM_SHUTDOWN_BEFORE = syncd $(DOCKER_TEAMD)_WARM_SHUTDOWN_AFTER = swss -$(DOCKER_TEAMD)_FAST_SHUTDOWN_BEFORE = swss +$(DOCKER_TEAMD)_FAST_SHUTDOWN_BEFORE = syncd +$(DOCKER_TEAMD)_FAST_SHUTDOWN_AFTER = swss SONIC_DOCKER_IMAGES += $(DOCKER_TEAMD) SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_TEAMD) From 40b47e96ce1ce48b14adb7cf994d3bffbbc11ee9 Mon Sep 17 00:00:00 2001 From: SuvarnaMeenakshi <50386592+SuvarnaMeenakshi@users.noreply.github.com> Date: Wed, 13 Jul 2022 10:22:23 -0700 Subject: [PATCH 122/259] [caclmgrd]: Add infrastructure to support adding feature specific acls (#11367) Why I did it Add infrastructure to support adding feature specific acls. If feature specific ACLs has to be added: if feature_name in self.feature_present and self.feature_present.get('feature_name'): add_feature_specific_acls() How I did it Add function to get features present in feature table. How to verify it unit-test passes. --- src/sonic-host-services/scripts/caclmgrd | 11 ++++ .../tests/caclmgrd/caclmgrd_feature_test.py | 50 +++++++++++++++++++ .../tests/caclmgrd/test_bfd_vectors.py | 6 +++ .../tests/caclmgrd/test_dhcp_vectors.py | 24 +++++++++ 4 files changed, 91 insertions(+) create mode 100644 src/sonic-host-services/tests/caclmgrd/caclmgrd_feature_test.py diff --git a/src/sonic-host-services/scripts/caclmgrd b/src/sonic-host-services/scripts/caclmgrd index 914547ad53b2..4af588e28de6 100755 --- a/src/sonic-host-services/scripts/caclmgrd +++ b/src/sonic-host-services/scripts/caclmgrd @@ -52,6 +52,7 @@ class ControlPlaneAclManager(daemon_base.DaemonBase): Attributes: config_db: Handle to Config Redis database via SwSS SDK """ + FEATURE_TABLE = "FEATURE" ACL_TABLE = "ACL_TABLE" ACL_RULE = "ACL_RULE" DEVICE_METADATA_TABLE = "DEVICE_METADATA" @@ -117,6 +118,10 @@ class ControlPlaneAclManager(daemon_base.DaemonBase): self.namespace_docker_mgmt_ip = {} self.namespace_docker_mgmt_ipv6 = {} + # Get all features that are present {feature_name : True/False} + self.feature_present = {} + self.update_feature_present() + metadata = self.config_db_map[DEFAULT_NAMESPACE].get_table(self.DEVICE_METADATA_TABLE) if 'subtype' in metadata['localhost'] and metadata['localhost']['subtype'] == 'DualToR': self.DualToR = True @@ -201,6 +206,12 @@ class ControlPlaneAclManager(daemon_base.DaemonBase): tcp_flags_str = tcp_flags_str[:-1] return tcp_flags_str + def update_feature_present(self): + feature_tb_info = self.config_db_map[DEFAULT_NAMESPACE].get_table(self.FEATURE_TABLE) + if feature_tb_info: + for k, v in feature_tb_info.items(): + self.feature_present[k] = True + def generate_block_ip2me_traffic_iptables_commands(self, namespace): INTERFACE_TABLE_NAME_LIST = [ "LOOPBACK_INTERFACE", diff --git a/src/sonic-host-services/tests/caclmgrd/caclmgrd_feature_test.py b/src/sonic-host-services/tests/caclmgrd/caclmgrd_feature_test.py new file mode 100644 index 000000000000..b162ed01b586 --- /dev/null +++ b/src/sonic-host-services/tests/caclmgrd/caclmgrd_feature_test.py @@ -0,0 +1,50 @@ +import os +import sys +import swsscommon + +from parameterized import parameterized +from sonic_py_common.general import load_module_from_source +from unittest import TestCase, mock +from pyfakefs.fake_filesystem_unittest import patchfs + +from .test_bfd_vectors import CACLMGRD_BFD_TEST_VECTOR +from tests.common.mock_configdb import MockConfigDb +from unittest.mock import MagicMock, patch + +DBCONFIG_PATH = '/var/run/redis/sonic-db/database_config.json' + +class TestFeature(TestCase): + """ + Test caclmgrd feature present + """ + def setUp(self): + swsscommon.swsscommon.ConfigDBConnector = MockConfigDb + test_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + modules_path = os.path.dirname(test_path) + scripts_path = os.path.join(modules_path, "scripts") + sys.path.insert(0, modules_path) + caclmgrd_path = os.path.join(scripts_path, 'caclmgrd') + self.caclmgrd = load_module_from_source('caclmgrd', caclmgrd_path) + + @parameterized.expand(CACLMGRD_BFD_TEST_VECTOR) + @patchfs + def test_feature_present(self, test_name, test_data, fs): + if not os.path.exists(DBCONFIG_PATH): + fs.create_file(DBCONFIG_PATH) # fake database_config.json + + MockConfigDb.set_config_db(test_data["config_db"]) + + with mock.patch("caclmgrd.subprocess") as mocked_subprocess: + popen_mock = mock.Mock() + popen_attrs = test_data["popen_attributes"] + popen_mock.configure_mock(**popen_attrs) + mocked_subprocess.Popen.return_value = popen_mock + mocked_subprocess.PIPE = -1 + + call_rc = test_data["call_rc"] + mocked_subprocess.call.return_value = call_rc + + caclmgrd_daemon = self.caclmgrd.ControlPlaneAclManager("caclmgrd") + caclmgrd_daemon.update_feature_present() + self.assertTrue("bgp" in caclmgrd_daemon.feature_present) + self.assertEqual(caclmgrd_daemon.feature_present["bgp"], True) diff --git a/src/sonic-host-services/tests/caclmgrd/test_bfd_vectors.py b/src/sonic-host-services/tests/caclmgrd/test_bfd_vectors.py index 35340849bd4c..f7469376331d 100644 --- a/src/sonic-host-services/tests/caclmgrd/test_bfd_vectors.py +++ b/src/sonic-host-services/tests/caclmgrd/test_bfd_vectors.py @@ -15,6 +15,12 @@ "type": "ToRRouter", } }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "state": "enabled", + } + }, }, "expected_subprocess_calls": [ call("iptables -I INPUT 2 -p udp -m multiport --dports 3784,4784 -j ACCEPT", shell=True, universal_newlines=True, stdout=subprocess.PIPE), diff --git a/src/sonic-host-services/tests/caclmgrd/test_dhcp_vectors.py b/src/sonic-host-services/tests/caclmgrd/test_dhcp_vectors.py index 7ebfca22a64b..242faae34d09 100644 --- a/src/sonic-host-services/tests/caclmgrd/test_dhcp_vectors.py +++ b/src/sonic-host-services/tests/caclmgrd/test_dhcp_vectors.py @@ -14,6 +14,8 @@ "type": "ToRRouter", } }, + "FEATURE": { + }, }, "mux_update": [ ("Ethernet4", {"state": "active"}), @@ -42,6 +44,8 @@ "type": "ToRRouter", } }, + "FEATURE": { + }, }, "mux_update": [ ("Ethernet4", {"state": "active"}), @@ -67,6 +71,8 @@ "type": "ToRRouter", } }, + "FEATURE": { + }, }, "mux_update": [ ("Ethernet4", {"state": "active"}), @@ -93,6 +99,8 @@ "type": "ToRRouter", } }, + "FEATURE": { + }, }, "mux_update": [ ("Ethernet4", {"state": "active"}), @@ -117,6 +125,8 @@ "type": "ToRRouter", } }, + "FEATURE": { + }, }, "mux_update": [ ("Ethernet4", {"state": "standby"}), @@ -143,6 +153,8 @@ "type": "ToRRouter", } }, + "FEATURE": { + }, }, "mux_update": [ ("Ethernet4", {"state": "standby"}), @@ -167,6 +179,8 @@ "type": "ToRRouter", } }, + "FEATURE": { + }, }, "mux_update": [ ("Ethernet4", {"state": "standby"}), @@ -195,6 +209,8 @@ "type": "ToRRouter", } }, + "FEATURE": { + }, }, "mux_update": [ ("Ethernet4", {"state": "standby"}), @@ -220,6 +236,8 @@ "type": "ToRRouter", } }, + "FEATURE": { + }, }, "mux_update": [ ("Ethernet4", {"state": "unknown"}), @@ -248,6 +266,8 @@ "type": "ToRRouter", } }, + "FEATURE": { + }, }, "mux_update": [ ("Ethernet4", {"state": "unknown"}), @@ -273,6 +293,8 @@ "type": "ToRRouter", } }, + "FEATURE": { + }, }, "mux_update": [ ("Ethernet4", {"state": "unknown"}), @@ -299,6 +321,8 @@ "type": "ToRRouter", } }, + "FEATURE": { + }, }, "mux_update": [ ("Ethernet4", {"state": "unknown"}), From 3f0c82c831f807ee51cf9fa319d73a31dd24f3c8 Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Tue, 12 Jul 2022 17:57:16 +0800 Subject: [PATCH 123/259] [Build] Cleanup the version deb preference file after build (#11414) Why I did it Cleanup the version deb preference file after build. The version file is no use after build. How I did it Remove the no use version file. --- src/sonic-build-hooks/scripts/post_run_buildinfo | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/sonic-build-hooks/scripts/post_run_buildinfo b/src/sonic-build-hooks/scripts/post_run_buildinfo index e0d84d35bb08..97f47f7efcf1 100755 --- a/src/sonic-build-hooks/scripts/post_run_buildinfo +++ b/src/sonic-build-hooks/scripts/post_run_buildinfo @@ -11,3 +11,6 @@ rm -rf $BUILD_VERSION_PATH/* # Disable the build hooks symlink_build_hooks -d set_reproducible_mirrors -d + +# Remove the version deb preference +rm -f $VERSION_DEB_PREFERENCE From aa63d3101d547a402f8318420ba310b4f17f2fc2 Mon Sep 17 00:00:00 2001 From: Neetha John Date: Wed, 13 Jul 2022 15:25:28 -0700 Subject: [PATCH 124/259] Minigraph parser changes to select mmu profiles based on SonicQosProfile attribute (#11429) Signed-off-by: Neetha John Why I did it There is a need to select different mmu profiles based on deployment type How I did it There will be separate subfolders (RDMA-CENTRIC, TCP-CENTRIC, BALANCED) in each hwsku folder which contains deployment specific mmu and qos settings. SonicQosProfile attribute in the minigraph will be used to determine which settings to use. If that attribute is not present, the default settings that exist in the hwsku folder will be used --- src/sonic-config-engine/minigraph.py | 36 ++++++++++- .../tests/sample-dell-6100-t0-minigraph.xml | 5 ++ src/sonic-config-engine/tests/test_j2files.py | 59 ++++++------------- 3 files changed, 55 insertions(+), 45 deletions(-) diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index bee0d89af989..edc26c2c6e34 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -894,6 +894,8 @@ def parse_meta(meta, hname): kube_data = {} macsec_profile = {} redundancy_type = None + qos_profile = None + device_metas = meta.find(str(QName(ns, "Devices"))) for device in device_metas.findall(str(QName(ns1, "DeviceMetadata"))): if device.find(str(QName(ns1, "Name"))).text.lower() == hname.lower(): @@ -938,7 +940,9 @@ def parse_meta(meta, hname): macsec_profile = parse_macsec_profile(value) elif name == "RedundancyType": redundancy_type = value - return syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile, redundancy_type + elif name == "SonicQosProfile": + qos_profile = value + return syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile, redundancy_type, qos_profile def parse_system_defaults(meta): @@ -963,7 +967,6 @@ def parse_system_defaults(meta): return system_default_values - def parse_linkmeta(meta, hname): link = meta.find(str(QName(ns, "Link"))) linkmetas = {} @@ -1264,6 +1267,31 @@ def enable_internal_bgp_session(bgp_sessions, filename, asic_name): (local_sub_role == BACKEND_ASIC_SUB_ROLE and peer_sub_role == FRONTEND_ASIC_SUB_ROLE)): bgp_sessions[peer_ip].update({'admin_status': 'up'}) +def select_mmu_profiles(profile, platform, hwsku): + """ + Select MMU files based on the device metadata attribute - SonicQosProfile + if no QosProfile exists in the minigraph, then no action is needed. + if a profile exists in the minigraph, + - create a dir path to search 1 level down from the base path. + - if no such dir path exists, no action is needed. + - if a dir path exists, check for the presence of each file from + the copy list in the dir path and copy it over to the base path. + """ + if not profile: + return + + files_to_copy = ['pg_profile_lookup.ini', 'qos.json.j2', 'buffers_defaults_t0.j2', 'buffers_defaults_t1.j2'] + + path = os.path.join('/usr/share/sonic/device', platform, hwsku) + + dir_path = os.path.join(path, profile) + if os.path.exists(dir_path): + for file_item in files_to_copy: + file_in_dir = os.path.join(dir_path, file_item) + if os.path.isfile(file_in_dir): + base_file = os.path.join(path, file_item) + exec_cmd("sudo cp {} {}".format(file_in_dir, base_file)) + ############################################################################### # # Main functions @@ -1338,6 +1366,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw system_defaults = {} macsec_profile = {} redundancy_type = None + qos_profile = None hwsku_qn = QName(ns, "HwSku") hostname_qn = QName(ns, "Hostname") @@ -1368,7 +1397,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw elif child.tag == str(QName(ns, "UngDec")): (u_neighbors, u_devices, _, _, _, _, _, _) = parse_png(child, hostname, None) elif child.tag == str(QName(ns, "MetadataDeclaration")): - (syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile, redundancy_type) = parse_meta(child, hostname) + (syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile, redundancy_type, qos_profile) = parse_meta(child, hostname) elif child.tag == str(QName(ns, "LinkMetadataDeclaration")): linkmetas = parse_linkmeta(child, hostname) elif child.tag == str(QName(ns, "DeviceInfos")): @@ -1392,6 +1421,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw elif child.tag == str(QName(ns, "SystemDefaultsDeclaration")): system_defaults = parse_system_defaults(child) + select_mmu_profiles(qos_profile, platform, hwsku) # set the host device type in asic metadata also device_type = [devices[key]['type'] for key in devices if key.lower() == hostname.lower()][0] if asic_name is None: diff --git a/src/sonic-config-engine/tests/sample-dell-6100-t0-minigraph.xml b/src/sonic-config-engine/tests/sample-dell-6100-t0-minigraph.xml index 7cea7decfcc0..cb84ce744ed1 100644 --- a/src/sonic-config-engine/tests/sample-dell-6100-t0-minigraph.xml +++ b/src/sonic-config-engine/tests/sample-dell-6100-t0-minigraph.xml @@ -731,6 +731,11 @@ True + + SonicQosProfile + + RDMA-CENTRIC + ARISTA01T1:Ethernet1;s6100-dev-1:fortyGigE1/1/1 diff --git a/src/sonic-config-engine/tests/test_j2files.py b/src/sonic-config-engine/tests/test_j2files.py index 14db19357954..f82c0f6499ef 100644 --- a/src/sonic-config-engine/tests/test_j2files.py +++ b/src/sonic-config-engine/tests/test_j2files.py @@ -233,23 +233,7 @@ def test_l2switch_template_dualtor(self): self.assertEqual(sample_output_json, output_json) def test_qos_arista7050_render_template(self): - arista_dir_path = os.path.join(self.test_dir, '..', '..', '..', 'device', 'arista', 'x86_64-arista_7050_qx32s', 'Arista-7050-QX-32S') - qos_file = os.path.join(arista_dir_path, 'qos.json.j2') - port_config_ini_file = os.path.join(arista_dir_path, 'port_config.ini') - - # copy qos_config.j2 to the Arista 7050 directory to have all templates in one directory - qos_config_file = os.path.join(self.test_dir, '..', '..', '..', 'files', 'build_templates', 'qos_config.j2') - shutil.copy2(qos_config_file, arista_dir_path) - - argument = '-m ' + self.arista7050_t0_minigraph + ' -p ' + port_config_ini_file + ' -t ' + qos_file + ' > ' + self.output_file - self.run_script(argument) - - # cleanup - qos_config_file_new = os.path.join(arista_dir_path, 'qos_config.j2') - os.remove(qos_config_file_new) - - sample_output_file = os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'qos-arista7050.json') - assert utils.cmp(sample_output_file, self.output_file), self.run_diff(sample_output_file, self.output_file) + self._test_qos_render_template('arista', 'x86_64-arista_7050_qx32s', 'Arista-7050-QX-32S', 'sample-arista-7050-t0-minigraph.xml', 'qos-arista7050.json') def do_test_qos_and_buffer_arista7800r3_48cq2_lc_render_template(self, platform, hwsku): arista_dir_path = os.path.join(self.test_dir, '..', '..', '..', 'device', 'arista', platform, hwsku) @@ -282,41 +266,32 @@ def test_qos_and_buffer_arista7800r3_48cqm2_lc_render_template(self): self.do_test_qos_and_buffer_arista7800r3_48cq2_lc_render_template('x86_64-arista_7800r3_48cqm2_lc', 'Arista-7800R3-48CQM2-C48') def test_qos_dell9332_render_template(self): - dell_dir_path = os.path.join(self.test_dir, '..', '..', '..', 'device', 'dell', 'x86_64-dellemc_z9332f_d1508-r0', 'DellEMC-Z9332f-O32') - qos_file = os.path.join(dell_dir_path, 'qos.json.j2') - port_config_ini_file = os.path.join(dell_dir_path, 'port_config.ini') - - # copy qos_config.j2 to the Dell Z9332 directory to have all templates in one directory - qos_config_file = os.path.join(self.test_dir, '..', '..', '..', 'files', 'build_templates', 'qos_config.j2') - shutil.copy2(qos_config_file, dell_dir_path) - - argument = '-m ' + self.dell9332_t1_minigraph + ' -p ' + port_config_ini_file + ' -t ' + qos_file + ' > ' + self.output_file - self.run_script(argument) + self._test_qos_render_template('dell', 'x86_64-dellemc_z9332f_d1508-r0', 'DellEMC-Z9332f-O32', 'sample-dell-9332-t1-minigraph.xml', 'qos-dell9332.json') - # cleanup - qos_config_file_new = os.path.join(dell_dir_path, 'qos_config.j2') - os.remove(qos_config_file_new) - - sample_output_file = os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'qos-dell9332.json') - assert utils.cmp(sample_output_file, self.output_file), self.run_diff(sample_output_file, self.output_file) - def test_qos_dell6100_render_template(self): - dell_dir_path = os.path.join(self.test_dir, '..', '..', '..', 'device', 'dell', 'x86_64-dell_s6100_c2538-r0', 'Force10-S6100') - qos_file = os.path.join(dell_dir_path, 'qos.json.j2') - port_config_ini_file = os.path.join(dell_dir_path, 'port_config.ini') + self._test_qos_render_template('dell', 'x86_64-dell_s6100_c2538-r0', 'Force10-S6100', 'sample-dell-6100-t0-minigraph.xml', 'qos-dell6100.json') - # copy qos_config.j2 to the Dell S6100 directory to have all templates in one directory + def _test_qos_render_template(self, vendor, platform, sku, minigraph, expected): + file_exist, dir_exist = self.create_machine_conf(platform, vendor) + dir_path = os.path.join(self.test_dir, '..', '..', '..', 'device', vendor, platform, sku) + qos_file = os.path.join(dir_path, 'qos.json.j2') + port_config_ini_file = os.path.join(dir_path, 'port_config.ini') + + # copy qos_config.j2 to the SKU directory to have all templates in one directory qos_config_file = os.path.join(self.test_dir, '..', '..', '..', 'files', 'build_templates', 'qos_config.j2') - shutil.copy2(qos_config_file, dell_dir_path) + shutil.copy2(qos_config_file, dir_path) - argument = '-m ' + self.dell6100_t0_minigraph + ' -p ' + port_config_ini_file + ' -t ' + qos_file + ' > ' + self.output_file + minigraph = os.path.join(self.test_dir, minigraph) + argument = '-m ' + minigraph + ' -p ' + port_config_ini_file + ' -t ' + qos_file + ' > ' + self.output_file self.run_script(argument) # cleanup - qos_config_file_new = os.path.join(dell_dir_path, 'qos_config.j2') + qos_config_file_new = os.path.join(dir_path, 'qos_config.j2') os.remove(qos_config_file_new) + + self.remove_machine_conf(file_exist, dir_exist) - sample_output_file = os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'qos-dell6100.json') + sample_output_file = os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, expected) assert utils.cmp(sample_output_file, self.output_file), self.run_diff(sample_output_file, self.output_file) def test_qos_dscp_remapping_render_template(self): From f7cc66ad4c6d7cfac3a0ad5a7a408e06e84fa665 Mon Sep 17 00:00:00 2001 From: bingwang-ms <66248323+bingwang-ms@users.noreply.github.com> Date: Fri, 15 Jul 2022 01:19:00 +0800 Subject: [PATCH 125/259] Add flag to control the generation of `PORT_QOS_MAP|global` entry (#11448) Why I did it This PR is to add a flag to control whether to generate PORT_QOS_MAP|global entry or not. It's because for some HWSKU, such as BackEndToRRouter and BackEndLeafRouter, there is no DSCP_TO_TC_MAP defined. Hence, if the PORT_QOS_MAP|global entry is generated, OA will report some error because the DSCP_TO_TC_MAP map AZURE can not be found. Jul 14 00:24:40.286767 str2-7050qx-32s-acs-03 ERR swss#orchagent: :- saiObjectTypeQuery: invalid object id oid:0x7fddb43605d0 Jul 14 00:24:40.286767 str2-7050qx-32s-acs-03 ERR swss#orchagent: :- meta_generic_validation_objlist: SAI_SWITCH_ATTR_QOS_DSCP_TO_TC_MAP:SAI_ATTR_VALUE_TYPE_OBJECT_ID object on list [0] oid 0x7fddb43605d0 is not valid, returned null object id Jul 14 00:24:40.286767 str2-7050qx-32s-acs-03 ERR swss#orchagent: :- applyDscpToTcMapToSwitch: Failed to apply DSCP_TO_TC QoS map to switch rv:-5 Jul 14 00:24:40.286767 str2-7050qx-32s-acs-03 ERR swss#orchagent: :- doTask: Failed to process QOS task, drop it This PR is to address the issue. How I did it Add a flag require_global_dscp_to_tc_map to control whether to generate the PORT_QOS_MAP|global entry. The default value for require_global_dscp_to_tc_map is true. If the device type is storage backend, the value is changed to false. Then the PORT_QOS_MAP|global entry is not generated. How to verify it Update the current test_qos_dscp_remapping_render_template to cover storage backend. --- files/build_templates/qos_config.j2 | 4 +- ...ista-7050-t0-storage-backend-minigraph.xml | 781 ++++++++++++++++++ .../qos-arista7050-t0-storage-backend.json | 81 ++ src/sonic-config-engine/tests/test_j2files.py | 9 +- 4 files changed, 871 insertions(+), 4 deletions(-) create mode 100644 src/sonic-config-engine/tests/sample-arista-7050-t0-storage-backend-minigraph.xml create mode 100644 src/sonic-config-engine/tests/sample_output/py3/qos-arista7050-t0-storage-backend.json diff --git a/files/build_templates/qos_config.j2 b/files/build_templates/qos_config.j2 index 46cebb6e32d1..b2a7b9c63f51 100644 --- a/files/build_templates/qos_config.j2 +++ b/files/build_templates/qos_config.j2 @@ -47,6 +47,7 @@ {%- set backend_device_types = ['BackEndToRRouter', 'BackEndLeafRouter'] -%} {%- set apollo_resource_types = ['DL-NPU-Apollo'] -%} +{%- set require_global_dscp_to_tc_map = true -%} { {% if (generate_tc_to_pg_map is defined) and tunnel_qos_remap_enable %} @@ -94,6 +95,7 @@ }, {% endif %} {% if 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] in backend_device_types and 'storage_device' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['storage_device'] == 'true' %} +{%- set require_global_dscp_to_tc_map = false %} "DOT1P_TO_TC_MAP": { "AZURE": { "0": "1", @@ -219,7 +221,7 @@ "PORT_QOS_MAP": { {% if generate_global_dscp_to_tc_map is defined %} {{- generate_global_dscp_to_tc_map() }} -{% else %} +{% elif require_global_dscp_to_tc_map %} "global": { "dscp_to_tc_map" : "AZURE" }{% if PORT_ACTIVE %},{% endif %} diff --git a/src/sonic-config-engine/tests/sample-arista-7050-t0-storage-backend-minigraph.xml b/src/sonic-config-engine/tests/sample-arista-7050-t0-storage-backend-minigraph.xml new file mode 100644 index 000000000000..cadd47217a71 --- /dev/null +++ b/src/sonic-config-engine/tests/sample-arista-7050-t0-storage-backend-minigraph.xml @@ -0,0 +1,781 @@ + + + + + + switch-t0 + 10.1.0.32 + BGPMonitor + 10.20.30.40 + 30 + 10 + 3 + + + false + switch-t0 + 10.0.0.58 + ARISTA02T1 + 10.0.0.59 + 1 + 180 + 60 + + + switch-t0 + FC00::75 + ARISTA02T1 + FC00::76 + 1 + 180 + 60 + + + switch-t0 + FC00::75 + ARISTA02T1 + FC00::76 + 1 + 180 + 60 + + + false + switch-t0 + 10.2.0.20 + CHASSIS_PEER + 10.2.0.21 + 1 + 180 + 60 + voq + + + + + 1 + + BGPMonitor + + + BGPPeer +
10.1.0.32
+ + + +
+
+ +
+ + 65100 + switch-t0 + + +
10.0.0.59
+ + + +
+ +
10.2.0.21
+ + + +
+
+ +
+ + 64600 + ARISTA01T1 + + + + 64600 + ARISTA02T1 + + + + 64600 + ARISTA03T1 + + + + 64600 + ARISTA04T1 + + + + 65100 + CHASSIS_PEER + + +
+
+ + + + + + HostIP + Loopback0 + + 10.1.0.32/32 + + 10.1.0.32/32 + + + HostIP1 + Loopback0 + + FC00:1::32/128 + + FC00:1::32/128 + + + + + HostIP + eth0 + + 10.0.0.100/24 + + 10.0.0.100/24 + + + + + + + switch-t0 + + + PortChannel1 + fortyGigE0/4 + + + + + + ab1 + fortyGigE0/8 + 192.0.0.1;192.0.0.2 + 1000 + 1000 + 192.168.0.0/27 + + + ab4 + fortyGigE0/8 + 192.0.0.1;192.0.0.2 + 1001 + 1001 + 192.168.0.32/27 + + + kk1 + fortyGigE0/12 + 192.0.0.1;192.0.0.2 + 2020 + 2020 + Tagged + 192.168.0.0/28 + + + ab2 + fortyGigE0/12 + 192.0.0.1;192.0.0.2 + 2000 + 2000 + Tagged + 192.168.0.240/27 + + + ab3 + fortyGigE0/12 + 192.0.0.1;192.0.0.2 + 2001 + 2001 + 192.168.0.240/27 + + + + + + PortChannel1 + 10.0.0.56/31 + + + + PortChannel1 + FC00::71/126 + + + + fortyGigE0/0 + 10.0.0.58/31 + + + + fortyGigE0/0 + FC00::75/126 + + + + ab1 + 192.168.0.1/27 + + + + + + DataAcl + + ERSPAN + everflow + Everflow + 0 + everflow.xml + + + DataAcl + + ERSPANv6 + everflowV6 + Everflow + 0 + everflow.xml + + + DataAcl + + Loopback0 + ipv6-mgmt-only + Management + 0 + + + + DataAcl + + Loopback0 + mgmt-only + Management + 0 + + + + DataAcl + + StaticERSPAN + everflowStatic + Everflow + 0 + everflow.xml + + + + + + + + + + DeviceInterfaceLink + 1000 + ARISTA01T1 + et1 + true + switch-t0 + fortyGigE0/8 + true + + + DeviceMgmtLink + 1000 + switch-t0 + fortyGigE0/16 + true + ChassisMTS1 + mgmt0 + true + + + + + switch-t0 + Arista-7050-QX-32S + AAA00PrdStr00 + + + ARISTA01T1 + Arista + + + ARISTA02T1 + Arista + + + ARISTA03T1 + Arista + + + ARISTA04T1 + Arista + + + + + + + + DeviceInterface + + true + 1 + fortyGigE0/0 + + false + 0 + 0 + 10000 + + + DeviceInterface + + true + 1 + Ethernet1 + + false + 0 + 0 + 10000 + + + DeviceInterface + + true + 1 + Ethernet2 + + false + 0 + 0 + 10000 + + + DeviceInterface + + true + 1 + fortyGigE0/4 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + 1 + fortyGigE0/8 + + false + 0 + 0 + 40000 + Interface description + + + DeviceInterface + + true + 1 + fortyGigE0/12 + + false + 0 + 0 + 100000 + Interface description + + + DeviceInterface + + true + 1 + fortyGigE0/16 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/20 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/24 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/28 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/32 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/36 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/40 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/44 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/48 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/52 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/56 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/60 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/64 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/68 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/72 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/76 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/80 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/84 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/88 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/92 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/96 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/100 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/104 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/108 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/112 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/116 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/120 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/124 + + false + 0 + 0 + 100000 + + + true + 0 + Arista-7050-QX-32S + + + DeviceInterface + + 1 + Management1 + false + mgmt1 + 1000 + + + + + + + + switch-t0 + + + DeploymentId + + 1 + + + ResourceType + + Storage + + + + + + + switch-t0 + Arista-7050-QX-32S +
diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050-t0-storage-backend.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050-t0-storage-backend.json new file mode 100644 index 000000000000..94aa8d8a7d1d --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050-t0-storage-backend.json @@ -0,0 +1,81 @@ +{ + "TC_TO_PRIORITY_GROUP_MAP": { + "AZURE": { + "0": "0", + "1": "0", + "2": "0", + "3": "3", + "4": "4", + "5": "0", + "6": "0", + "7": "7" + } + }, + "MAP_PFC_PRIORITY_TO_QUEUE": { + "AZURE": { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7" + } + }, + "TC_TO_QUEUE_MAP": { + "AZURE": { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7" + } + }, + "DOT1P_TO_TC_MAP": { + "AZURE": { + "0": "1", + "1": "0", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7" + } + }, + "SCHEDULER": { + "scheduler.0": { + "type" : "DWRR", + "weight": "14" + }, + "scheduler.1": { + "type" : "DWRR", + "weight": "15" + } + }, + "PORT_QOS_MAP": { + }, + "WRED_PROFILE": { + "AZURE_LOSSLESS" : { + "wred_green_enable" : "true", + "wred_yellow_enable" : "true", + "wred_red_enable" : "true", + "ecn" : "ecn_all", + "green_max_threshold" : "2097152", + "green_min_threshold" : "1048576", + "yellow_max_threshold" : "2097152", + "yellow_min_threshold" : "1048576", + "red_max_threshold" : "2097152", + "red_min_threshold" : "1048576", + "green_drop_probability" : "5", + "yellow_drop_probability": "5", + "red_drop_probability" : "5" + } + }, + "QUEUE": { + } +} diff --git a/src/sonic-config-engine/tests/test_j2files.py b/src/sonic-config-engine/tests/test_j2files.py index f82c0f6499ef..7e7082b9b4d7 100644 --- a/src/sonic-config-engine/tests/test_j2files.py +++ b/src/sonic-config-engine/tests/test_j2files.py @@ -305,7 +305,8 @@ def test_qos_dscp_remapping_render_template(self): '../../../device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64', '../../../device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8', '../../../device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8', - '../../../device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64' + '../../../device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64', + '../../../device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S' ] sample_outputs = [ 'qos-arista7050cx3-dualtor.json', @@ -313,7 +314,8 @@ def test_qos_dscp_remapping_render_template(self): 'qos-arista7260-t1.json', 'qos-arista7050cx3-dualtor-remap-disabled.json', 'qos-arista7260-dualtor-remap-disabled.json', - 'qos-arista7260-t1-remap-disabled.json' + 'qos-arista7260-t1-remap-disabled.json', + 'qos-arista7050-t0-storage-backend.json' ] sample_minigraph_files = [ 'sample-arista-7050cx3-dualtor-minigraph.xml', @@ -321,7 +323,8 @@ def test_qos_dscp_remapping_render_template(self): 'sample-arista-7260-t1-minigraph.xml', 'sample-arista-7050cx3-dualtor-minigraph-remap-disabled.xml', 'sample-arista-7260-dualtor-minigraph-remap-disabled.xml', - 'sample-arista-7260-t1-minigraph-remap-disabled.xml' + 'sample-arista-7260-t1-minigraph-remap-disabled.xml', + 'sample-arista-7050-t0-storage-backend-minigraph.xml' ] for i, path in enumerate(dir_paths): device_template_path = os.path.join(self.test_dir, path) From 10cafd549084046c0de52b4c2a54308a195f8c98 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Mon, 18 Jul 2022 10:44:20 -0700 Subject: [PATCH 126/259] [202205][swss][sairedis] advance submodule head (#11463) swss: * 7841930 2022-07-15 | [vxlan]Fixing L2MC vlan member caching issue (#2378) (HEAD -> 202205) [Sudharsan Dhamal Gopalarathnam] * b8cd435 2022-07-14 | [muxorch] Always use direct link for SoC IPs (#2369) [Longxiang Lyu] * 6158d5c 2022-07-08 | Add BGP profile to Vnet routes (#2337) [Prince Sunny] * bdb7ffd 2022-07-06 | [teammgr]: Waiting MACsec ready before doLagMemberTask (#2286) [Ze Gan] sairedis: * 58359d4 2022-06-30 | [sairedis] Perform log rotate on request (#1058) (HEAD -> 202205, github/202205) [Kamil Cudnik] * cad0268 2022-07-13 | Enable cisco debug shell by default (#1078) [VenkatCisco] Signed-off-by: Ying Xie --- src/sonic-sairedis | 2 +- src/sonic-swss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sonic-sairedis b/src/sonic-sairedis index 14fba4582e30..58359d410c97 160000 --- a/src/sonic-sairedis +++ b/src/sonic-sairedis @@ -1 +1 @@ -Subproject commit 14fba4582e3057c3ab031851b79ce172493daabb +Subproject commit 58359d410c97209d592bd86610d1ad32695a78d3 diff --git a/src/sonic-swss b/src/sonic-swss index 6bafea4af444..7841930b8b51 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 6bafea4af4448206dfcbcefbc1f7f54d2e83e450 +Subproject commit 7841930b8b5175928429c64ac710f3957bd2b834 From 3e9c1d16c18c7c5f4841a400f3ac966f2e342f87 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Mon, 18 Jul 2022 17:58:32 -0700 Subject: [PATCH 127/259] [202205][platform-daemon] move submodule head (#11475) platform-daemon: * 17f886d 2022-07-18 | [ycabled] remove some redundant logging for active-active cable type (#274) (HEAD -> 202205, github/202205) [vdahiya12] Signed-off-by: Ying Xie --- src/sonic-platform-daemons | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index e03d6a931db8..17f886d0283a 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit e03d6a931db8eab375a67a6377753c8cdf21ee2f +Subproject commit 17f886d0283a5bd049be77051542f11f16c8ee48 From 3829faf2c9ed77573461c7fd889283a1e218aa3c Mon Sep 17 00:00:00 2001 From: vdahiya12 <67608553+vdahiya12@users.noreply.github.com> Date: Wed, 20 Jul 2022 09:00:28 -0700 Subject: [PATCH 128/259] [caclmgrd][dualtor] add iptables rule for dualtor gRPC to allow packets getting forwarded from loopback IP (#11458) This PR is a required for changing the L3 IP forwarding Behavior to SoC in active-active toplogy. Basically, for getting a packet to be forwarded to the SoC IP in active-active topology, the requirement is to use the the LoopBack 3 IP inside SONiC device as the SRC IP. This is required because in active-active topology by default if the ToR wants to send packet to the SoC, it would pick the Vlan IP since that's the IP in the subnet, but since there are firewalls inside the SoC , the IP packets with Vlan IP as src IP in the IP header will be dropped. Hence to overcome this limitation, there is an iptable nat rule that is installed inside the kernel, with which all the packets which have SoC IP as destination IP, use Loopnack 3 IP as src in IP header How I did it check the config DB if the ToR is a DualToR and has an SoC IP assigned. put an iptable rule iptables -t nat -A POSTROUTING --destination -j SNAT --to-source " Signed-off-by: vaibhav-dahiya vdahiya@microsoft.com --- src/sonic-host-services/scripts/caclmgrd | 47 +++++++++++++++++ .../tests/caclmgrd/caclmgrd_soc_rules_test.py | 51 +++++++++++++++++++ .../tests/caclmgrd/test_soc_rules_vectors.py | 41 +++++++++++++++ 3 files changed, 139 insertions(+) create mode 100644 src/sonic-host-services/tests/caclmgrd/caclmgrd_soc_rules_test.py create mode 100644 src/sonic-host-services/tests/caclmgrd/test_soc_rules_vectors.py diff --git a/src/sonic-host-services/scripts/caclmgrd b/src/sonic-host-services/scripts/caclmgrd index 4af588e28de6..bd26563580f2 100755 --- a/src/sonic-host-services/scripts/caclmgrd +++ b/src/sonic-host-services/scripts/caclmgrd @@ -41,6 +41,22 @@ def _ip_prefix_in_key(key): """ return (isinstance(key, tuple)) +def get_ip_from_interface_table(table, intf_name): + + if table: + for key, _ in table.items(): + if not _ip_prefix_in_key(key): + continue + + iface_name, iface_cidr = key + if iface_name.startswith(intf_name): + ip_ntwrk = ipaddress.ip_network(iface_cidr, strict=False) + if isinstance(ip_ntwrk, ipaddress.IPv4Network): + ip_addr = ip_ntwrk.network_address + return ip_addr + + return None + # ============================== Classes ============================== @@ -57,6 +73,8 @@ class ControlPlaneAclManager(daemon_base.DaemonBase): ACL_RULE = "ACL_RULE" DEVICE_METADATA_TABLE = "DEVICE_METADATA" MUX_CABLE_TABLE = "MUX_CABLE_TABLE" + CONFIG_MUX_CABLE = "MUX_CABLE" + LOOPBACK_TABLE = "LOOPBACK_INTERFACE" ACL_TABLE_TYPE_CTRLPLANE = "CTRLPLANE" @@ -284,6 +302,28 @@ class ControlPlaneAclManager(daemon_base.DaemonBase): return allow_internal_docker_ip_cmds + + def generate_fwd_traffic_from_host_to_soc(self, namespace): + + fwd_dualtor_grpc_traffic_from_host_to_soc_cmds = [] + if self.DualToR: + loopback_table = self.config_db_map[DEFAULT_NAMESPACE].get_table(self.LOOPBACK_TABLE) + loopback_name = 'Loopback3' + loopback_address = get_ip_from_interface_table(loopback_table, loopback_name) + fwd_dualtor_grpc_traffic_from_host_to_soc_cmds.append(self.iptables_cmd_ns_prefix[namespace] + + "iptables -t nat --flush POSTROUTING") + + if loopback_address is not None: + mux_table = self.config_db_map[DEFAULT_NAMESPACE].get_table(self.CONFIG_MUX_CABLE) + mux_table_keys = mux_table.keys() + for key in mux_table_keys: + kvp = mux_table.get(key) + if 'cable_type' in kvp and kvp['cable_type'] == 'active-active': + fwd_dualtor_grpc_traffic_from_host_to_soc_cmds.append(self.iptables_cmd_ns_prefix[namespace] + + "iptables -t nat -A POSTROUTING --destination {} -j SNAT --to-source {}".format(kvp['soc_ipv4'], loopback_address)) + + return fwd_dualtor_grpc_traffic_from_host_to_soc_cmds + def generate_fwd_traffic_from_namespace_to_host_commands(self, namespace, acl_source_ip_map): """ The below SNAT and DNAT rules are added in asic namespace in multi-ASIC platforms. It helps to forward request coming @@ -685,6 +725,13 @@ class ControlPlaneAclManager(daemon_base.DaemonBase): self.run_commands(iptables_cmds) + if self.DualToR: + dualtor_iptables_cmds = self.generate_fwd_traffic_from_host_to_soc(namespace) + for cmd in dualtor_iptables_cmds: + self.log_info(" " + cmd) + self.run_commands(dualtor_iptables_cmds) + + def check_and_update_control_plane_acls(self, namespace, num_changes): """ This function is intended to be spawned in a separate thread. diff --git a/src/sonic-host-services/tests/caclmgrd/caclmgrd_soc_rules_test.py b/src/sonic-host-services/tests/caclmgrd/caclmgrd_soc_rules_test.py new file mode 100644 index 000000000000..9e6aa1b88039 --- /dev/null +++ b/src/sonic-host-services/tests/caclmgrd/caclmgrd_soc_rules_test.py @@ -0,0 +1,51 @@ +import os +import sys +import swsscommon + +from parameterized import parameterized +from sonic_py_common.general import load_module_from_source +from unittest import TestCase, mock +from pyfakefs.fake_filesystem_unittest import patchfs + +from .test_soc_rules_vectors import CACLMGRD_SOC_TEST_VECTOR +from tests.common.mock_configdb import MockConfigDb +from unittest.mock import MagicMock, patch + +DBCONFIG_PATH = '/var/run/redis/sonic-db/database_config.json' + +class TestCaclmgrdSoc(TestCase): + """ + Test caclmgrd soc + """ + def setUp(self): + swsscommon.swsscommon.ConfigDBConnector = MockConfigDb + test_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + modules_path = os.path.dirname(test_path) + scripts_path = os.path.join(modules_path, "scripts") + sys.path.insert(0, modules_path) + caclmgrd_path = os.path.join(scripts_path, 'caclmgrd') + self.caclmgrd = load_module_from_source('caclmgrd', caclmgrd_path) + + @parameterized.expand(CACLMGRD_SOC_TEST_VECTOR) + @patchfs + @patch('caclmgrd.get_ip_from_interface_table', MagicMock(return_value="10.10.10.10")) + def test_caclmgrd_soc(self, test_name, test_data, fs): + if not os.path.exists(DBCONFIG_PATH): + fs.create_file(DBCONFIG_PATH) # fake database_config.json + + MockConfigDb.set_config_db(test_data["config_db"]) + + with mock.patch("caclmgrd.subprocess") as mocked_subprocess: + popen_mock = mock.Mock() + popen_attrs = test_data["popen_attributes"] + popen_mock.configure_mock(**popen_attrs) + mocked_subprocess.Popen.return_value = popen_mock + mocked_subprocess.PIPE = -1 + + call_rc = test_data["call_rc"] + mocked_subprocess.call.return_value = call_rc + + caclmgrd_daemon = self.caclmgrd.ControlPlaneAclManager("caclmgrd") + caclmgrd_daemon.update_control_plane_nat_acls('', {}) + mocked_subprocess.Popen.assert_has_calls(test_data["expected_subprocess_calls"], any_order=True) + diff --git a/src/sonic-host-services/tests/caclmgrd/test_soc_rules_vectors.py b/src/sonic-host-services/tests/caclmgrd/test_soc_rules_vectors.py new file mode 100644 index 000000000000..60625c75c4e8 --- /dev/null +++ b/src/sonic-host-services/tests/caclmgrd/test_soc_rules_vectors.py @@ -0,0 +1,41 @@ +from unittest.mock import call +import subprocess + +""" + caclmgrd soc test vector +""" +CACLMGRD_SOC_TEST_VECTOR = [ + [ + "SOC_SESSION_TEST", + { + "config_db": { + "DEVICE_METADATA": { + "localhost": { + "subtype": "DualToR", + "type": "ToRRouter", + } + }, + "MUX_CABLE": { + "Ethernet4": { + "cable_type": "active-active", + "soc_ipv4": "192.168.1.0/32", + } + }, + "LOOPBACK_INTERFACE": { + "Loopback3|10.10.10.10/32": { + "NULL": "NULL", + } + }, + "FEATURE": { + }, + }, + "expected_subprocess_calls": [ + call("iptables -t nat -A POSTROUTING --destination 192.168.1.0/32 -j SNAT --to-source 10.10.10.10",shell=True, universal_newlines=True, stdout=-1) + ], + "popen_attributes": { + 'communicate.return_value': ('output', 'error'), + }, + "call_rc": 0, + } + ] +] From aee974269f0eaa80ec8c150264c1d2293fa35b61 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Thu, 21 Jul 2022 08:24:39 -0700 Subject: [PATCH 129/259] [minigraph] allow LibraPeeringLink to be dualtor indication as well (#11492) Signed-off-by: Ying Xie --- 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 edc26c2c6e34..51c48ea8c262 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -998,7 +998,7 @@ def parse_linkmeta(meta, hname): value = device_property.find(str(QName(ns1, "Value"))).text if name == "FECDisabled": fec_disabled = value - elif name == "GeminiPeeringLink": + elif name in [ "GeminiPeeringLink", "LibraPeeringLink" ]: has_peer_switch = True elif name == "UpperTOR": upper_tor_hostname = value From e13df585ee531593f6abf7efde5933c326b89150 Mon Sep 17 00:00:00 2001 From: zitingguo-ms Date: Tue, 19 Jul 2022 12:39:14 +0800 Subject: [PATCH 130/259] [bcm sai]upgrade Broadcom SAI to 7.1.0.0-6 (#11410) - Default Not to report Single bit ECC correctable events to avoid the need to set SOC porperties. Signed-off-by: zitingguo --- platform/broadcom/sai.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/broadcom/sai.mk b/platform/broadcom/sai.mk index f3f6448d2e46..ad43e8ddbe5d 100644 --- a/platform/broadcom/sai.mk +++ b/platform/broadcom/sai.mk @@ -1,4 +1,4 @@ -LIBSAIBCM_XGS_VERSION = 7.1.0.0-5 +LIBSAIBCM_XGS_VERSION = 7.1.0.0-6 LIBSAIBCM_DNX_VERSION = 7.1.0.0-1 LIBSAIBCM_BRANCH_NAME = REL_7.0 LIBSAIBCM_XGS_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/$(LIBSAIBCM_BRANCH_NAME)/$(LIBSAIBCM_XGS_VERSION)" From f92e3e82629be58fcb900defa1c3805125d7c100 Mon Sep 17 00:00:00 2001 From: Neetha John Date: Mon, 18 Jul 2022 17:08:20 -0700 Subject: [PATCH 131/259] Update 7260 MMU and ECN settings (#11449) Signed-off-by: Neetha John Why I did it Improve throughput and latency for 7260 deployments How I did it Update the dynamic threshold to 0 and ECN settings as 2mb/10mb/5% How to verify it Updated unit tests to use the modified values for 7260 ecn settings. --- .../pg_profile_lookup.ini | 12 +++++------ .../Arista-7260CX3-D96C16/qos.json.j2 | 20 +++++++++++++++++++ .../th2/7260/BALANCED/pg_profile_lookup.ini | 18 ++++++++--------- .../profiles/th2/7260/BALANCED/qos.json.j2 | 20 +++++++++++++++++++ .../7260/RDMA-CENTRIC/pg_profile_lookup.ini | 18 ++++++++--------- .../th2/7260/RDMA-CENTRIC/qos.json.j2 | 20 +++++++++++++++++++ .../sample_output/py2/qos-arista7260.json | 1 + ...qos-arista7260-dualtor-remap-disabled.json | 4 ++-- .../py3/qos-arista7260-dualtor.json | 4 ++-- .../py3/qos-arista7260-t1-remap-disabled.json | 4 ++-- .../sample_output/py3/qos-arista7260-t1.json | 4 ++-- .../sample_output/py3/qos-arista7260.json | 1 + src/sonic-config-engine/tests/test_j2files.py | 3 +++ 13 files changed, 97 insertions(+), 32 deletions(-) create mode 120000 src/sonic-config-engine/tests/sample_output/py2/qos-arista7260.json create mode 120000 src/sonic-config-engine/tests/sample_output/py3/qos-arista7260.json diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/pg_profile_lookup.ini b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/pg_profile_lookup.ini index ed0005610b71..a12e306278cc 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/pg_profile_lookup.ini +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/pg_profile_lookup.ini @@ -1,8 +1,8 @@ # PG lossless profiles. # speed cable size xon xoff threshold xon_offset - 50000 5m 1248 1248 56160 -3 2496 - 100000 5m 1248 1248 96928 -3 2496 - 50000 40m 1248 1248 96096 -3 2496 - 100000 40m 1248 1248 177632 -3 2496 - 50000 300m 1248 1248 141856 -3 2496 - 100000 300m 1248 1248 268736 -3 2496 + 50000 5m 1248 1248 56160 0 2496 + 100000 5m 1248 1248 96928 0 2496 + 50000 40m 1248 1248 96096 0 2496 + 100000 40m 1248 1248 177632 0 2496 + 50000 300m 1248 1248 141856 0 2496 + 100000 300m 1248 1248 268736 0 2496 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/qos.json.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/qos.json.j2 index 3e548325ea30..3e1d8df928c9 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/qos.json.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D96C16/qos.json.j2 @@ -1 +1,21 @@ +{%- macro generate_wred_profiles() %} + "WRED_PROFILE": { + "AZURE_LOSSLESS" : { + "wred_green_enable" : "true", + "wred_yellow_enable" : "true", + "wred_red_enable" : "true", + "ecn" : "ecn_all", + "green_max_threshold" : "10000000", + "green_min_threshold" : "2000000", + "yellow_max_threshold" : "2097152", + "yellow_min_threshold" : "1048576", + "red_max_threshold" : "2097152", + "red_min_threshold" : "1048576", + "green_drop_probability" : "5", + "yellow_drop_probability": "5", + "red_drop_probability" : "5" + } + }, +{%- endmacro %} + {%- include 'qos_config.j2' %} diff --git a/device/common/profiles/th2/7260/BALANCED/pg_profile_lookup.ini b/device/common/profiles/th2/7260/BALANCED/pg_profile_lookup.ini index 9d94e3fc1e52..0ff01d9aa52a 100644 --- a/device/common/profiles/th2/7260/BALANCED/pg_profile_lookup.ini +++ b/device/common/profiles/th2/7260/BALANCED/pg_profile_lookup.ini @@ -1,11 +1,11 @@ # PG lossless profiles. # speed cable size xon xoff threshold xon_offset - 100000 5m 1248 1248 54080 -3 2496 - 100000 40m 1248 1248 59696 -3 2496 - 100000 300m 1248 1248 101088 -3 2496 - 50000 5m 1248 1248 54080 -3 2496 - 50000 40m 1248 1248 59696 -3 2496 - 50000 300m 1248 1248 101088 -3 2496 - 40000 5m 1248 1248 29536 -3 2496 - 40000 40m 1248 1248 31616 -3 2496 - 40000 300m 1248 1248 48256 -3 2496 + 100000 5m 1248 1248 54080 0 2496 + 100000 40m 1248 1248 59696 0 2496 + 100000 300m 1248 1248 101088 0 2496 + 50000 5m 1248 1248 54080 0 2496 + 50000 40m 1248 1248 59696 0 2496 + 50000 300m 1248 1248 101088 0 2496 + 40000 5m 1248 1248 29536 0 2496 + 40000 40m 1248 1248 31616 0 2496 + 40000 300m 1248 1248 48256 0 2496 diff --git a/device/common/profiles/th2/7260/BALANCED/qos.json.j2 b/device/common/profiles/th2/7260/BALANCED/qos.json.j2 index cb3ad17faa39..d760038736a6 100644 --- a/device/common/profiles/th2/7260/BALANCED/qos.json.j2 +++ b/device/common/profiles/th2/7260/BALANCED/qos.json.j2 @@ -289,4 +289,24 @@ {%- endmacro %} {% endif %} +{%- macro generate_wred_profiles() %} + "WRED_PROFILE": { + "AZURE_LOSSLESS" : { + "wred_green_enable" : "true", + "wred_yellow_enable" : "true", + "wred_red_enable" : "true", + "ecn" : "ecn_all", + "green_max_threshold" : "10000000", + "green_min_threshold" : "2000000", + "yellow_max_threshold" : "2097152", + "yellow_min_threshold" : "1048576", + "red_max_threshold" : "2097152", + "red_min_threshold" : "1048576", + "green_drop_probability" : "5", + "yellow_drop_probability": "5", + "red_drop_probability" : "5" + } + }, +{%- endmacro %} + {%- include 'qos_config.j2' %} diff --git a/device/common/profiles/th2/7260/RDMA-CENTRIC/pg_profile_lookup.ini b/device/common/profiles/th2/7260/RDMA-CENTRIC/pg_profile_lookup.ini index 9d94e3fc1e52..0ff01d9aa52a 100644 --- a/device/common/profiles/th2/7260/RDMA-CENTRIC/pg_profile_lookup.ini +++ b/device/common/profiles/th2/7260/RDMA-CENTRIC/pg_profile_lookup.ini @@ -1,11 +1,11 @@ # PG lossless profiles. # speed cable size xon xoff threshold xon_offset - 100000 5m 1248 1248 54080 -3 2496 - 100000 40m 1248 1248 59696 -3 2496 - 100000 300m 1248 1248 101088 -3 2496 - 50000 5m 1248 1248 54080 -3 2496 - 50000 40m 1248 1248 59696 -3 2496 - 50000 300m 1248 1248 101088 -3 2496 - 40000 5m 1248 1248 29536 -3 2496 - 40000 40m 1248 1248 31616 -3 2496 - 40000 300m 1248 1248 48256 -3 2496 + 100000 5m 1248 1248 54080 0 2496 + 100000 40m 1248 1248 59696 0 2496 + 100000 300m 1248 1248 101088 0 2496 + 50000 5m 1248 1248 54080 0 2496 + 50000 40m 1248 1248 59696 0 2496 + 50000 300m 1248 1248 101088 0 2496 + 40000 5m 1248 1248 29536 0 2496 + 40000 40m 1248 1248 31616 0 2496 + 40000 300m 1248 1248 48256 0 2496 diff --git a/device/common/profiles/th2/7260/RDMA-CENTRIC/qos.json.j2 b/device/common/profiles/th2/7260/RDMA-CENTRIC/qos.json.j2 index cb3ad17faa39..d760038736a6 100644 --- a/device/common/profiles/th2/7260/RDMA-CENTRIC/qos.json.j2 +++ b/device/common/profiles/th2/7260/RDMA-CENTRIC/qos.json.j2 @@ -289,4 +289,24 @@ {%- endmacro %} {% endif %} +{%- macro generate_wred_profiles() %} + "WRED_PROFILE": { + "AZURE_LOSSLESS" : { + "wred_green_enable" : "true", + "wred_yellow_enable" : "true", + "wred_red_enable" : "true", + "ecn" : "ecn_all", + "green_max_threshold" : "10000000", + "green_min_threshold" : "2000000", + "yellow_max_threshold" : "2097152", + "yellow_min_threshold" : "1048576", + "red_max_threshold" : "2097152", + "red_min_threshold" : "1048576", + "green_drop_probability" : "5", + "yellow_drop_probability": "5", + "red_drop_probability" : "5" + } + }, +{%- endmacro %} + {%- include 'qos_config.j2' %} diff --git a/src/sonic-config-engine/tests/sample_output/py2/qos-arista7260.json b/src/sonic-config-engine/tests/sample_output/py2/qos-arista7260.json new file mode 120000 index 000000000000..9362bae62029 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py2/qos-arista7260.json @@ -0,0 +1 @@ +../py3/qos-arista7260-t1-remap-disabled.json \ No newline at end of file diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor-remap-disabled.json index 49ed2038e71b..50adbf672a27 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor-remap-disabled.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor-remap-disabled.json @@ -636,8 +636,8 @@ "wred_yellow_enable" : "true", "wred_red_enable" : "true", "ecn" : "ecn_all", - "green_max_threshold" : "2097152", - "green_min_threshold" : "1048576", + "green_max_threshold" : "10000000", + "green_min_threshold" : "2000000", "yellow_max_threshold" : "2097152", "yellow_min_threshold" : "1048576", "red_max_threshold" : "2097152", diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json index 85339be6d10d..cdb6e8fe842e 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json @@ -739,8 +739,8 @@ "wred_yellow_enable" : "true", "wred_red_enable" : "true", "ecn" : "ecn_all", - "green_max_threshold" : "2097152", - "green_min_threshold" : "1048576", + "green_max_threshold" : "10000000", + "green_min_threshold" : "2000000", "yellow_max_threshold" : "2097152", "yellow_min_threshold" : "1048576", "red_max_threshold" : "2097152", diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1-remap-disabled.json index f4e639b3ddfe..5c0860d25133 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1-remap-disabled.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1-remap-disabled.json @@ -348,8 +348,8 @@ "wred_yellow_enable" : "true", "wred_red_enable" : "true", "ecn" : "ecn_all", - "green_max_threshold" : "2097152", - "green_min_threshold" : "1048576", + "green_max_threshold" : "10000000", + "green_min_threshold" : "2000000", "yellow_max_threshold" : "2097152", "yellow_min_threshold" : "1048576", "red_max_threshold" : "2097152", diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json index eff232ab179d..a479523fc1f1 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json @@ -348,8 +348,8 @@ "wred_yellow_enable" : "true", "wred_red_enable" : "true", "ecn" : "ecn_all", - "green_max_threshold" : "2097152", - "green_min_threshold" : "1048576", + "green_max_threshold" : "10000000", + "green_min_threshold" : "2000000", "yellow_max_threshold" : "2097152", "yellow_min_threshold" : "1048576", "red_max_threshold" : "2097152", diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260.json new file mode 120000 index 000000000000..bb3adcf3a9a9 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260.json @@ -0,0 +1 @@ +qos-arista7260-t1-remap-disabled.json \ No newline at end of file diff --git a/src/sonic-config-engine/tests/test_j2files.py b/src/sonic-config-engine/tests/test_j2files.py index 7e7082b9b4d7..12e855c66898 100644 --- a/src/sonic-config-engine/tests/test_j2files.py +++ b/src/sonic-config-engine/tests/test_j2files.py @@ -271,6 +271,9 @@ def test_qos_dell9332_render_template(self): def test_qos_dell6100_render_template(self): self._test_qos_render_template('dell', 'x86_64-dell_s6100_c2538-r0', 'Force10-S6100', 'sample-dell-6100-t0-minigraph.xml', 'qos-dell6100.json') + def test_qos_arista7260_render_template(self): + self._test_qos_render_template('arista', 'x86_64-arista_7260cx3_64', 'Arista-7260CX3-D96C16', 'sample-arista-7260-t1-minigraph-remap-disabled.xml', 'qos-arista7260.json') + def _test_qos_render_template(self, vendor, platform, sku, minigraph, expected): file_exist, dir_exist = self.create_machine_conf(platform, vendor) dir_path = os.path.join(self.test_dir, '..', '..', '..', 'device', vendor, platform, sku) From 8ae03c994d7efc2626c7c4fa1f2b8e9e18bbcee5 Mon Sep 17 00:00:00 2001 From: Samuel Angebault Date: Tue, 31 May 2022 13:59:35 -0700 Subject: [PATCH 132/259] [Arista] Update platform library (#10922) - Implement Pcie plugin for chassis - Implement set_admin_status for chassis modules - Fix phy declaration for phy-credo --- platform/barefoot/sonic-platform-modules-arista | 2 +- platform/broadcom/sonic-platform-modules-arista | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/barefoot/sonic-platform-modules-arista b/platform/barefoot/sonic-platform-modules-arista index 6e6f1f904f28..e4940f0937c1 160000 --- a/platform/barefoot/sonic-platform-modules-arista +++ b/platform/barefoot/sonic-platform-modules-arista @@ -1 +1 @@ -Subproject commit 6e6f1f904f28df7fa06c169a71a1d77e739f431a +Subproject commit e4940f0937c1425c5ba8248e524a5d753c223aca diff --git a/platform/broadcom/sonic-platform-modules-arista b/platform/broadcom/sonic-platform-modules-arista index 6e6f1f904f28..e4940f0937c1 160000 --- a/platform/broadcom/sonic-platform-modules-arista +++ b/platform/broadcom/sonic-platform-modules-arista @@ -1 +1 @@ -Subproject commit 6e6f1f904f28df7fa06c169a71a1d77e739f431a +Subproject commit e4940f0937c1425c5ba8248e524a5d753c223aca From f96f0e464f28eaa4f0bc1d7c9e74319717f2793d Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Sat, 23 Jul 2022 00:22:15 -0700 Subject: [PATCH 133/259] [202205][sairedis][platform-daemon][linkmgrd][utilities][swss-common] advance submodule head (#11518) sairedis: * 38c0bb1 2022-07-21 | [sairedis] Fix reopen recoding file (#1087) (HEAD -> 202205, github/202205) [Kamil Cudnik] platform-daemon: * 17587b6 2022-07-22 | [ycabled] add secure channel support for grpc dualtor active-active connectivity (#275) (HEAD -> 202205, github/202205) [vdahiya12] linkmgrd: * c911ec7 2022-07-21 | Avoid unnecessary error logs from `handleGetServerMacAddressNotification` (#96) (HEAD -> 202205) [Jing Zhang] * bbae81d 2022-07-18 | Add support for reconciliation after warm restart (#76) [Jing Zhang] utilities: * bcc1206 2022-07-20 | Change db_migrator major version on master branch from version 2 to 3 (#2272) (HEAD -> 202205) [Vaibhav Hemant Dixit] * ad40697 2022-07-21 | Fix test for pfcwd_sw_enable in db_migrator_test (#2253) [bingwang-ms] * 886f612 2022-07-22 | Revert "show commands for SYSTEM READY (#1851) (#2261)" (#2274) (github/202205) [Ying Xie] * a6404b7 2022-07-17 | show commands for SYSTEM READY (#1851) (#2261) [Senthil Kumar Guruswamy] swss-common: * 509b265 2022-07-06 | Add device global table definition (#645) (HEAD -> 202205) [tjchadaga] Signed-off-by: Ying Xie --- src/linkmgrd | 2 +- src/sonic-platform-daemons | 2 +- src/sonic-sairedis | 2 +- src/sonic-swss-common | 2 +- src/sonic-utilities | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/linkmgrd b/src/linkmgrd index a836ef754940..c911ec7bee78 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit a836ef754940cda251a8d5f0f71f68f41f92fac0 +Subproject commit c911ec7bee78d5b1d0438c5a4ddd581d0a35177c diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index 17f886d0283a..17587b68cfaf 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit 17f886d0283a5bd049be77051542f11f16c8ee48 +Subproject commit 17587b68cfaface8f785abd6346915e9c255995b diff --git a/src/sonic-sairedis b/src/sonic-sairedis index 58359d410c97..38c0bb1fee95 160000 --- a/src/sonic-sairedis +++ b/src/sonic-sairedis @@ -1 +1 @@ -Subproject commit 58359d410c97209d592bd86610d1ad32695a78d3 +Subproject commit 38c0bb1fee954291c3b483bc61a63999c1714ca9 diff --git a/src/sonic-swss-common b/src/sonic-swss-common index 0213d558c293..509b265b8732 160000 --- a/src/sonic-swss-common +++ b/src/sonic-swss-common @@ -1 +1 @@ -Subproject commit 0213d558c293766a4dc6677292402f7c96f5f508 +Subproject commit 509b265b8732ba058b5e599c06ce887e5ba97f5e diff --git a/src/sonic-utilities b/src/sonic-utilities index 9f496a033b20..bcc12063a54a 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 9f496a033b2051e56f54af7ad3a79be1966d50f9 +Subproject commit bcc12063a54abdad9ba1ad2d6c15139bf34d4c77 From 71f47ed15bbe8446bfa173af1de7f488121d1d7a Mon Sep 17 00:00:00 2001 From: Liu Shilong Date: Thu, 28 Jul 2022 15:31:02 +0800 Subject: [PATCH 134/259] [ci] Transfer organization from Azure to sonic-net for sonic-mgmt (#11559) (#11560) Why I did it Transfer organization from Azure to sonic-net for sonic-mgmt --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7c171da9f279..138add70a24e 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -28,8 +28,8 @@ resources: repositories: - repository: sonic-mgmt type: github - name: Azure/sonic-mgmt - endpoint: build + name: sonic-net/sonic-mgmt + endpoint: sonic-net - repository: buildimage type: github name: Azure/sonic-buildimage From 2f59460fc40b2fed1959fd093f0e1b9eebcffdac Mon Sep 17 00:00:00 2001 From: Kebo Liu Date: Tue, 21 Jun 2022 10:12:20 +0800 Subject: [PATCH 135/259] [Mellanox] Enhance Platform API to support SN2201 - RJ45 ports and new components mgmt. (#10377) * Support new platform SN2201 and RJ45 port Signed-off-by: Kebo Liu * remove unused import and redundant function Signed-off-by: Kebo Liu * fix error introduced by rebase Signed-off-by: Kebo Liu * Revert the special handling of RJ45 ports (#56) * Revert the special handling of RJ45 ports sfp.py sfp_event.py chassis.py Signed-off-by: Stephen Sun * Remove deadcode Signed-off-by: Stephen Sun * Support CPLD update for SN2201 A new class is introduced, deriving from ComponentCPLD and overloading _install_firmware Change _install_firmware from private (starting with __) to protected, making it overloadable Signed-off-by: Stephen Sun * Initialize component BIOS/CPLD Signed-off-by: Stephen Sun * Remove swb_amb which doesn't on DVT board any more Signed-off-by: Stephen Sun * Remove the unexisted sensor - switch board ambient - from platform.json Signed-off-by: Stephen Sun * Do not report error on receiving unknown status on RJ45 ports Translate it to disconnect for RJ45 ports Report error for xSFP ports Signed-off-by: Stephen Sun * Add reinit for RJ45 to avoid exception Signed-off-by: Stephen Sun Co-authored-by: Stephen Sun <5379172+stephenxs@users.noreply.github.com> Co-authored-by: Stephen Sun --- .../x86_64-nvidia_sn2201-r0/platform.json | 3 - .../platform_components.json | 1 + .../sonic_platform/chassis.py | 33 +- .../sonic_platform/component.py | 71 +++- .../sonic_platform/device_data.py | 21 +- .../mlnx-platform-api/sonic_platform/sfp.py | 355 ++++++++++++++++-- .../sonic_platform/sfp_event.py | 19 +- .../mlnx-platform-api/sonic_platform/utils.py | 59 ++- .../mlnx-platform-api/tests/test_chassis.py | 1 + .../mlnx-platform-api/tests/test_eeprom.py | 6 +- .../mlnx-platform-api/tests/test_led.py | 1 + .../mlnx-platform-api/tests/test_module.py | 2 + .../mlnx-platform-api/tests/test_sfp.py | 4 +- .../mlnx-platform-api/tests/test_thermal.py | 4 +- platform/mellanox/mlnx-ssd-fw-update.sh | 54 ++- 15 files changed, 569 insertions(+), 65 deletions(-) diff --git a/device/mellanox/x86_64-nvidia_sn2201-r0/platform.json b/device/mellanox/x86_64-nvidia_sn2201-r0/platform.json index f600f26293ce..83250c75f74e 100644 --- a/device/mellanox/x86_64-nvidia_sn2201-r0/platform.json +++ b/device/mellanox/x86_64-nvidia_sn2201-r0/platform.json @@ -90,9 +90,6 @@ { "name": "Ambient CPU Board Temp" }, - { - "name": "Ambient Switch Board Temp" - }, { "name": "CPU Pack Temp" }, diff --git a/device/mellanox/x86_64-nvidia_sn2201-r0/platform_components.json b/device/mellanox/x86_64-nvidia_sn2201-r0/platform_components.json index e28c19087875..88d4851f7176 100644 --- a/device/mellanox/x86_64-nvidia_sn2201-r0/platform_components.json +++ b/device/mellanox/x86_64-nvidia_sn2201-r0/platform_components.json @@ -4,6 +4,7 @@ "component": { "ONIE": { }, "SSD": { }, + "BIOS": { }, "CPLD1": { }, "CPLD2": { } } diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py index 43539751c1d7..ea4d7df30f9a 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py @@ -27,14 +27,17 @@ from sonic_py_common.logger import Logger import os from functools import reduce - + from .utils import extract_RJ45_ports_index from . import utils from .device_data import DeviceDataManager + from .sfp import SFP, RJ45Port, deinitialize_sdk_handle except ImportError as e: raise ImportError (str(e) + "- required module not found") MAX_SELECT_DELAY = 3600 +RJ45_TYPE = "RJ45" + DMI_FILE = '/sys/firmware/dmi/entries/2-0/raw' DMI_HEADER_LEN = 15 DMI_PRODUCT_NAME = "Product Name" @@ -106,6 +109,10 @@ def __init__(self): self.sfp_initialized_count = 0 self.sfp_event = None self.reboot_cause_initialized = False + + # Build the RJ45 port list from platform.json and hwsku.json + self.RJ45_port_list = extract_RJ45_ports_index() + logger.log_info("Chassis loaded successfully") def __del__(self): @@ -242,7 +249,10 @@ def initialize_single_sfp(self, index): if not self._sfp_list[index]: from .sfp import SFP - self._sfp_list[index] = SFP(index) + if self.RJ45_port_list and index in self.RJ45_port_list: + self._sfp_list[index] = RJ45Port(index) + else: + self._sfp_list[index] = SFP(index) self.sfp_initialized_count += 1 def initialize_sfp(self): @@ -250,14 +260,20 @@ def initialize_sfp(self): from .sfp import SFP sfp_count = self.get_num_sfps() for index in range(sfp_count): - sfp_module = SFP(index) + if self.RJ45_port_list and index in self.RJ45_port_list: + sfp_module = RJ45Port(index) + else: + sfp_module = SFP(index) self._sfp_list.append(sfp_module) self.sfp_initialized_count = sfp_count elif self.sfp_initialized_count != len(self._sfp_list): from .sfp import SFP for index in range(len(self._sfp_list)): if self._sfp_list[index] is None: - self._sfp_list[index] = SFP(index) + if self.RJ45_port_list and index in self.RJ45_port_list: + self._sfp_list[index] = RJ45Port(index) + else: + self._sfp_list[index] = SFP(index) self.sfp_initialized_count = len(self._sfp_list) def get_num_sfps(self): @@ -324,7 +340,7 @@ def get_change_event(self, timeout=0): # Initialize SFP event first if not self.sfp_event: from .sfp_event import sfp_event - self.sfp_event = sfp_event() + self.sfp_event = sfp_event(self.RJ45_port_list) self.sfp_event.initialize() wait_for_ever = (timeout == 0) @@ -340,7 +356,8 @@ def get_change_event(self, timeout=0): status = self.sfp_event.check_sfp_status(port_dict, error_dict, timeout) if status: - self.reinit_sfps(port_dict) + if port_dict: + self.reinit_sfps(port_dict) result_dict = {'sfp':port_dict} if error_dict: result_dict['sfp_error'] = error_dict @@ -515,8 +532,8 @@ def initialize_components(self): from .component import ComponentONIE, ComponentSSD, ComponentBIOS, ComponentCPLD self._component_list.append(ComponentONIE()) self._component_list.append(ComponentSSD()) - self._component_list.append(ComponentBIOS()) - self._component_list.extend(ComponentCPLD.get_component_list()) + self._component_list.append(DeviceDataManager.get_bios_component()) + self._component_list.extend(DeviceDataManager.get_cpld_component_list()) def get_num_components(self): """ diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/component.py b/platform/mellanox/mlnx-platform-api/sonic_platform/component.py index d2820090798b..6f482f497194 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/component.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/component.py @@ -29,6 +29,7 @@ import glob import tempfile import subprocess + from sonic_py_common import device_info if sys.version_info[0] > 2: import configparser else: @@ -136,7 +137,17 @@ class ONIEUpdater(object): ONIE_IMAGE_INFO_COMMAND = '/bin/bash {} -q -i' + # Upgrading fireware from ONIE is not supported from the beginning on some platforms, like SN2700. + # There is a logic to check the ONIE version in order to know whether it is supported. + # If it is not supported, we will not proceed and print some error message. + # For SN2201, upgrading fireware from ONIE is supported from day one so we do not need to check it. + PLATFORM_ALWAYS_SUPPORT_UPGRADE = ['x86_64-nvidia_sn2201-r0'] + BIOS_UPDATE_FILE_EXT = '.rom' + + + def __init__(self): + self.platform = device_info.get_platform() def __add_prefix(self, image_path): if self.BIOS_UPDATE_FILE_EXT not in image_path: @@ -336,6 +347,9 @@ def update_firmware(self, image_path, allow_reboot=True): raise def is_non_onie_firmware_update_supported(self): + if self.platform in self.PLATFORM_ALWAYS_SUPPORT_UPGRADE: + return True + current_version = self.get_onie_version() _, _, major1, minor1, release1, _ = self.parse_onie_version(current_version) version1 = int("{}{}{}".format(major1, minor1, release1)) @@ -698,6 +712,37 @@ def update_firmware(self, image_path): self.__install_firmware(image_path) +class ComponentBIOSSN2201(Component): + COMPONENT_NAME = 'BIOS' + COMPONENT_DESCRIPTION = 'BIOS - Basic Input/Output System' + + BIOS_VERSION_COMMAND = 'dmidecode -t0' + + def __init__(self): + super(ComponentBIOSSN2201, self).__init__() + + self.name = self.COMPONENT_NAME + self.description = self.COMPONENT_DESCRIPTION + + def get_firmware_version(self): + cmd = self.BIOS_VERSION_COMMAND + + try: + output = subprocess.check_output(cmd.split(), + stderr=subprocess.STDOUT, + universal_newlines=True).rstrip('\n') + except subprocess.CalledProcessError as e: + raise RuntimeError("Failed to get {} version: {}".format(self.name, str(e))) + + match = re.search('Version: (.*)', output) + if match: + version = match.group(1) + else: + version = 'Unknown version' + + return version + + class ComponentCPLD(Component): COMPONENT_NAME = 'CPLD{}' COMPONENT_DESCRIPTION = 'CPLD - Complex Programmable Logic Device' @@ -744,7 +789,7 @@ def __get_mst_device(self): return mst_dev_list[0] - def __install_firmware(self, image_path): + def _install_firmware(self, image_path): if not self._check_file_validity(image_path): return False @@ -830,9 +875,9 @@ def install_firmware(self, image_path): burn_firmware = mpfa.get_metadata().get('firmware', 'burn') print("INFO: Processing {} burn file: firmware install".format(self.name)) - return self.__install_firmware(os.path.join(mpfa.get_path(), burn_firmware)) + return self._install_firmware(os.path.join(mpfa.get_path(), burn_firmware)) else: - return self.__install_firmware(image_path) + return self._install_firmware(image_path) def update_firmware(self, image_path): with MPFAManager(image_path) as mpfa: @@ -845,11 +890,11 @@ def update_firmware(self, image_path): refresh_firmware = mpfa.get_metadata().get('firmware', 'refresh') print("INFO: Processing {} burn file: firmware install".format(self.name)) - if not self.__install_firmware(os.path.join(mpfa.get_path(), burn_firmware)): + if not self._install_firmware(os.path.join(mpfa.get_path(), burn_firmware)): return print("INFO: Processing {} refresh file: firmware update".format(self.name)) - self.__install_firmware(os.path.join(mpfa.get_path(), refresh_firmware)) + self._install_firmware(os.path.join(mpfa.get_path(), refresh_firmware)) @classmethod def get_component_list(cls): @@ -862,3 +907,19 @@ def get_component_list(cls): component_list.append(cls(cpld_idx)) return component_list + + +class ComponentCPLDSN2201(ComponentCPLD): + CPLD_FIRMWARE_UPDATE_COMMAND = 'cpldupdate --gpio {} --uncustomized --print-progress' + + def _install_firmware(self, image_path): + cmd = self.CPLD_FIRMWARE_UPDATE_COMMAND.format(image_path) + + try: + print("INFO: Installing {} firmware update: path={}".format(self.name, image_path)) + subprocess.check_call(cmd.split(), universal_newlines=True) + except subprocess.CalledProcessError as e: + print("ERROR: Failed to update {} firmware: {}".format(self.name, str(e))) + return False + + return True diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py b/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py index 17fe88037e06..94ed64d7d380 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py @@ -158,8 +158,7 @@ 'thermal': { "capability": { "comex_amb": False, - "cpu_amb": True, - "swb_amb": True + "cpu_amb": True } } }, @@ -281,3 +280,21 @@ def get_cpu_thermal_threshold(cls): return None, None return thermal_data.get('cpu_threshold', (None, None)) + + @classmethod + def get_bios_component(cls): + from .component import ComponentBIOS, ComponentBIOSSN2201 + if cls.get_platform_name() in ['x86_64-nvidia_sn2201-r0']: + # For SN2201, special chass is required for handle BIOS + # Currently, only fetching BIOS version is supported + return ComponentBIOSSN2201() + return ComponentBIOS() + + @classmethod + def get_cpld_component_list(cls): + from .component import ComponentCPLD, ComponentCPLDSN2201 + if cls.get_platform_name() in ['x86_64-nvidia_sn2201-r0']: + # For SN2201, special chass is required for handle BIOS + # Currently, only fetching BIOS version is supported + return ComponentCPLDSN2201.get_component_list() + return ComponentCPLD.get_component_list() diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py index efaf3479b6ed..3ee8b348ce00 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py @@ -80,6 +80,8 @@ '18' # QSFP-DD Double Density 8X Pluggable Transceiver ] +RJ45_TYPE = "RJ45" + #variables for sdk REGISTER_NUM = 1 DEVICE_ID = 1 @@ -235,7 +237,44 @@ def __exit__(self, exc_type, exc_val, exc_tb): deinitialize_sdk_handle(self.sdk_handle) -class SFP(SfpOptoeBase): +class NvidiaSFPCommon(SfpOptoeBase): + def __init__(self, sfp_index): + super(NvidiaSFPCommon, self).__init__() + self.index = sfp_index + 1 + self.sdk_index = sfp_index + + @property + def sdk_handle(self): + if not SFP.shared_sdk_handle: + SFP.shared_sdk_handle = initialize_sdk_handle() + if not SFP.shared_sdk_handle: + logger.log_error('Failed to open SDK handle') + return SFP.shared_sdk_handle + + @classmethod + def _get_module_info(self, sdk_handle, sdk_index): + """ + Get error code of the SFP module + + Returns: + The error code fetch from SDK API + """ + module_id_info_list = new_sx_mgmt_module_id_info_t_arr(1) + module_info_list = new_sx_mgmt_phy_module_info_t_arr(1) + + module_id_info = sx_mgmt_module_id_info_t() + module_id_info.slot_id = 0 + module_id_info.module_id = sdk_index + sx_mgmt_module_id_info_t_arr_setitem(module_id_info_list, 0, module_id_info) + + rc = sx_mgmt_phy_module_info_get(sdk_handle, module_id_info_list, 1, module_info_list) + assert SX_STATUS_SUCCESS == rc, "sx_mgmt_phy_module_info_get failed, error code {}".format(rc) + + mod_info = sx_mgmt_phy_module_info_t_arr_getitem(module_info_list, 0) + return mod_info.module_state.oper_state, mod_info.module_state.error_type + + +class SFP(NvidiaSFPCommon): """Platform-specific SFP class""" shared_sdk_handle = None SFP_MLNX_ERROR_DESCRIPTION_LONGRANGE_NON_MLNX_CABLE = 'Long range for non-Mellanox cable or module' @@ -250,13 +289,11 @@ class SFP(SfpOptoeBase): SFP_MLNX_ERROR_BIT_PCIE_POWER_SLOT_EXCEEDED = 0x00080000 SFP_MLNX_ERROR_BIT_RESERVED = 0x80000000 - def __init__(self, sfp_index, slot_id=0, linecard_port_count=0, lc_name=None): - super(SFP, self).__init__() + def __init__(self, sfp_index, sfp_type=None, slot_id=0, linecard_port_count=0, lc_name=None): + super(SFP, self).__init__(sfp_index) + self._sfp_type = sfp_type if slot_id == 0: # For non-modular chassis - self.index = sfp_index + 1 - self.sdk_index = sfp_index - from .thermal import initialize_sfp_thermal self._thermal_list = initialize_sfp_thermal(sfp_index) else: # For modular chassis @@ -281,6 +318,7 @@ def get_mst_pci_device(self): logger.log_error("Failed to find mst PCI device rc={} err.msg={}".format(e.returncode, e.output)) return device_name + ''' @property def sdk_handle(self): if not SFP.shared_sdk_handle: @@ -288,6 +326,7 @@ def sdk_handle(self): if not SFP.shared_sdk_handle: logger.log_error('Failed to open SDK handle') return SFP.shared_sdk_handle + ''' def reinit(self): """ @@ -512,7 +551,7 @@ def is_cpu(cls, port): @classmethod - def is_port_admin_status_up(cls, sdk_handle, log_port): + def _fetch_port_status(cls, sdk_handle, log_port): oper_state_p = new_sx_port_oper_state_t_p() admin_state_p = new_sx_port_admin_state_t_p() module_state_p = new_sx_port_module_state_t_p() @@ -520,12 +559,19 @@ def is_port_admin_status_up(cls, sdk_handle, log_port): assert rc == SXD_STATUS_SUCCESS, "sx_api_port_state_get failed, rc = %d" % rc admin_state = sx_port_admin_state_t_p_value(admin_state_p) + oper_state = sx_port_oper_state_t_p_value(oper_state_p) delete_sx_port_oper_state_t_p(oper_state_p) delete_sx_port_admin_state_t_p(admin_state_p) delete_sx_port_module_state_t_p(module_state_p) - return admin_state == SX_PORT_ADMIN_STATUS_UP + return oper_state, admin_state + + + @classmethod + def is_port_admin_status_up(cls, sdk_handle, log_port): + _, admin_state = cls._fetch_port_status(sdk_handle, log_port); + admin_state == SX_PORT_ADMIN_STATUS_UP @classmethod @@ -663,27 +709,6 @@ def is_replaceable(self): """ return True - def _get_error_code(self): - """ - Get error code of the SFP module - - Returns: - The error code fetch from SDK API - """ - module_id_info_list = new_sx_mgmt_module_id_info_t_arr(1) - module_info_list = new_sx_mgmt_phy_module_info_t_arr(1) - - module_id_info = sx_mgmt_module_id_info_t() - module_id_info.slot_id = 0 - module_id_info.module_id = self.sdk_index - sx_mgmt_module_id_info_t_arr_setitem(module_id_info_list, 0, module_id_info) - - rc = sx_mgmt_phy_module_info_get(self.sdk_handle, module_id_info_list, 1, module_info_list) - assert SX_STATUS_SUCCESS == rc, "sx_mgmt_phy_module_info_get failed, error code {}".format(rc) - - mod_info = sx_mgmt_phy_module_info_t_arr_getitem(module_info_list, 0) - return mod_info.module_state.oper_state, mod_info.module_state.error_type - @classmethod def _get_error_description_dict(cls): return {0: cls.SFP_ERROR_DESCRIPTION_POWER_BUDGET_EXCEEDED, @@ -704,12 +729,12 @@ def get_error_description(self): Get error description Args: - error_code: The error code returned by _get_error_code + error_code: The error code returned by _get_module_info Returns: The error description """ - oper_status, error_code = self._get_error_code() + oper_status, error_code = self._get_module_info(self.sdk_handle, self.sdk_index) if oper_status == SX_PORT_MODULE_STATUS_INITIALIZING: error_description = self.SFP_STATUS_INITIALIZING elif oper_status == SX_PORT_MODULE_STATUS_PLUGGED: @@ -727,3 +752,271 @@ def get_error_description(self): else: error_description = "Unknow SFP module status ({})".format(oper_status) return error_description + + +class RJ45Port(NvidiaSFPCommon): + """class derived from SFP, representing RJ45 ports""" + + def __init__(self, sfp_index): + super(RJ45Port, self).__init__(sfp_index) + self.sfp_type = RJ45_TYPE + + @classmethod + def _get_presence(cls, sdk_handle, sdk_index): + """Class level method to get low power mode. + + Args: + sdk_handle: SDK handle + sdk_index (integer): SDK port index + slot_id (integer): Slot ID + + Returns: + [boolean]: True if low power mode is on else off + """ + oper_status, _ = cls._get_module_info(sdk_handle, sdk_index) + return print(oper_status == SX_PORT_MODULE_STATUS_PLUGGED) + + def get_presence(self): + """ + Retrieves the presence of the device + For RJ45 ports, it always return True + + Returns: + bool: True if device is present, False if not + """ + if utils.is_host(): + # To avoid performance issue, + # call class level method to avoid initialize the whole sonic platform API + get_presence_code = 'from sonic_platform import sfp;\n' \ + 'with sfp.SdkHandleContext() as sdk_handle:' \ + 'print(sfp.RJ45Port._get_presence(sdk_handle, {}))'.format(self.sdk_index) + presence_cmd = "docker exec pmon python3 -c \"{}\"".format(get_presence_code) + try: + output = subprocess.check_output(presence_cmd, shell=True, universal_newlines=True) + return 'True' in output + except subprocess.CalledProcessError as e: + print("Error! Unable to get presence for {}, rc = {}, err msg: {}".format(self.sdk_index, e.returncode, e.output)) + return False + else: + oper_status, _ = self._get_module_info(self.sdk_handle, self.sdk_index); + return (oper_status == SX_PORT_MODULE_STATUS_PLUGGED) + + def get_transceiver_info(self): + """ + Retrieves transceiver info of this port. + For RJ45, all fields are N/A + + Returns: + A dict which contains following keys/values : + ================================================================================ + keys |Value Format |Information + ---------------------------|---------------|---------------------------- + type |1*255VCHAR |type of SFP + vendor_rev |1*255VCHAR |vendor revision of SFP + serial |1*255VCHAR |serial number of the SFP + manufacturer |1*255VCHAR |SFP vendor name + model |1*255VCHAR |SFP model name + connector |1*255VCHAR |connector information + encoding |1*255VCHAR |encoding information + ext_identifier |1*255VCHAR |extend identifier + ext_rateselect_compliance |1*255VCHAR |extended rateSelect compliance + cable_length |INT |cable length in m + mominal_bit_rate |INT |nominal bit rate by 100Mbs + specification_compliance |1*255VCHAR |specification compliance + vendor_date |1*255VCHAR |vendor date + vendor_oui |1*255VCHAR |vendor OUI + application_advertisement |1*255VCHAR |supported applications advertisement + ================================================================================ + """ + transceiver_info_keys = ['manufacturer', + 'model', + 'vendor_rev', + 'serial', + 'vendor_oui', + 'vendor_date', + 'connector', + 'encoding', + 'ext_identifier', + 'ext_rateselect_compliance', + 'cable_type', + 'cable_length', + 'specification_compliance', + 'nominal_bit_rate', + 'application_advertisement'] + transceiver_info_dict = dict.fromkeys(transceiver_info_keys, 'N/A') + transceiver_info_dict['type'] = self.sfp_type + + return transceiver_info_dict + + def get_lpmode(self): + """ + Retrieves the lpmode (low power mode) status of this SFP + + Returns: + A Boolean, True if lpmode is enabled, False if disabled + """ + return False + + def reset(self): + """ + Reset SFP and return all user module settings to their default state. + + Returns: + A boolean, True if successful, False if not + + refer plugins/sfpreset.py + """ + return False + + def set_lpmode(self, lpmode): + """ + Sets the lpmode (low power mode) of SFP + + Args: + lpmode: A Boolean, True to enable lpmode, False to disable it + Note : lpmode can be overridden by set_power_override + + Returns: + A boolean, True if lpmode is set successfully, False if not + """ + return False + + def get_error_description(self): + """ + Get error description + + Args: + error_code: Always false on SN2201 + + Returns: + The error description + """ + return False + + def get_transceiver_bulk_status(self): + """ + Retrieves transceiver bulk status of this SFP + + Returns: + A dict which contains following keys/values : + ======================================================================== + keys |Value Format |Information + ---------------------------|---------------|---------------------------- + RX LOS |BOOLEAN |RX lost-of-signal status, + | |True if has RX los, False if not. + TX FAULT |BOOLEAN |TX fault status, + | |True if has TX fault, False if not. + Reset status |BOOLEAN |reset status, + | |True if SFP in reset, False if not. + LP mode |BOOLEAN |low power mode status, + | |True in lp mode, False if not. + TX disable |BOOLEAN |TX disable status, + | |True TX disabled, False if not. + TX disabled channel |HEX |disabled TX channles in hex, + | |bits 0 to 3 represent channel 0 + | |to channel 3. + Temperature |INT |module temperature in Celsius + Voltage |INT |supply voltage in mV + TX bias |INT |TX Bias Current in mA + RX power |INT |received optical power in mW + TX power |INT |TX output power in mW + ======================================================================== + """ + transceiver_dom_info_dict = {} + + dom_info_dict_keys = ['temperature', 'voltage', + 'rx1power', 'rx2power', + 'rx3power', 'rx4power', + 'rx5power', 'rx6power', + 'rx7power', 'rx8power', + 'tx1bias', 'tx2bias', + 'tx3bias', 'tx4bias', + 'tx5bias', 'tx6bias', + 'tx7bias', 'tx8bias', + 'tx1power', 'tx2power', + 'tx3power', 'tx4power', + 'tx5power', 'tx6power', + 'tx7power', 'tx8power' + ] + transceiver_dom_info_dict = dict.fromkeys(dom_info_dict_keys, 'N/A') + + return transceiver_dom_info_dict + + + def get_transceiver_threshold_info(self): + """ + Retrieves transceiver threshold info of this SFP + + Returns: + A dict which contains following keys/values : + ======================================================================== + keys |Value Format |Information + ---------------------------|---------------|---------------------------- + temphighalarm |FLOAT |High Alarm Threshold value of temperature in Celsius. + templowalarm |FLOAT |Low Alarm Threshold value of temperature in Celsius. + temphighwarning |FLOAT |High Warning Threshold value of temperature in Celsius. + templowwarning |FLOAT |Low Warning Threshold value of temperature in Celsius. + vcchighalarm |FLOAT |High Alarm Threshold value of supply voltage in mV. + vcclowalarm |FLOAT |Low Alarm Threshold value of supply voltage in mV. + vcchighwarning |FLOAT |High Warning Threshold value of supply voltage in mV. + vcclowwarning |FLOAT |Low Warning Threshold value of supply voltage in mV. + rxpowerhighalarm |FLOAT |High Alarm Threshold value of received power in dBm. + rxpowerlowalarm |FLOAT |Low Alarm Threshold value of received power in dBm. + rxpowerhighwarning |FLOAT |High Warning Threshold value of received power in dBm. + rxpowerlowwarning |FLOAT |Low Warning Threshold value of received power in dBm. + txpowerhighalarm |FLOAT |High Alarm Threshold value of transmit power in dBm. + txpowerlowalarm |FLOAT |Low Alarm Threshold value of transmit power in dBm. + txpowerhighwarning |FLOAT |High Warning Threshold value of transmit power in dBm. + txpowerlowwarning |FLOAT |Low Warning Threshold value of transmit power in dBm. + txbiashighalarm |FLOAT |High Alarm Threshold value of tx Bias Current in mA. + txbiaslowalarm |FLOAT |Low Alarm Threshold value of tx Bias Current in mA. + txbiashighwarning |FLOAT |High Warning Threshold value of tx Bias Current in mA. + txbiaslowwarning |FLOAT |Low Warning Threshold value of tx Bias Current in mA. + ======================================================================== + """ + transceiver_dom_threshold_info_dict = {} + + dom_info_dict_keys = ['temphighalarm', 'temphighwarning', + 'templowalarm', 'templowwarning', + 'vcchighalarm', 'vcchighwarning', + 'vcclowalarm', 'vcclowwarning', + 'rxpowerhighalarm', 'rxpowerhighwarning', + 'rxpowerlowalarm', 'rxpowerlowwarning', + 'txpowerhighalarm', 'txpowerhighwarning', + 'txpowerlowalarm', 'txpowerlowwarning', + 'txbiashighalarm', 'txbiashighwarning', + 'txbiaslowalarm', 'txbiaslowwarning' + ] + transceiver_dom_threshold_info_dict = dict.fromkeys(dom_info_dict_keys, 'N/A') + + return transceiver_dom_threshold_info_dict + + def get_reset_status(self): + """ + Retrieves the reset status of SFP + + Returns: + A Boolean, True if reset enabled, False if disabled + + for QSFP, originally I would like to make use of Initialization complete flag bit + which is at Page a0 offset 6 bit 0 to test whether reset is complete. + However as unit testing was carried out I find this approach may fail because: + 1. we make use of ethtool to read data on I2C bus rather than to read directly + 2. ethtool is unable to access I2C during QSFP module being reset + In other words, whenever the flag is able to be retrived, the value is always be 1 + As a result, it doesn't make sense to retrieve that flag. Just treat successfully + retrieving data as "data ready". + for SFP it seems that there is not flag indicating whether reset succeed. However, + we can also do it in the way for QSFP. + """ + return False + + def read_eeprom(self, offset, num_bytes): + return None + + def reinit(self): + """ + Nothing to do for RJ45. Just provide it to avoid exception + :return: + """ + return diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp_event.py b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp_event.py index 4749a6fbe710..eec88e1786df 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp_event.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp_event.py @@ -50,6 +50,7 @@ class MockSxFd(object): SDK_SFP_STATE_OUT = 0x2 SDK_SFP_STATE_ERR = 0x3 SDK_SFP_STATE_DIS = 0x4 +SDK_SFP_STATE_UNKNOWN = 0x5 # SFP status used in this file only, will not expose to XCVRD # STATUS_ERROR will be mapped to different status according to the error code @@ -134,13 +135,17 @@ class sfp_event: SX_OPEN_TIMEOUT = 5 SELECT_TIMEOUT = 1 - def __init__(self): + def __init__(self, rj45_port_list=None): self.swid = 0 self.handle = None # Allocate SDK fd and user channel structures self.rx_fd_p = new_sx_fd_t_p() self.user_channel_p = new_sx_user_channel_t_p() + if rj45_port_list: + self.RJ45_port_set = set(rj45_port_list) + else: + self.RJ45_port_set = set() def initialize(self): swid_cnt_p = None @@ -340,6 +345,7 @@ def on_pmpe(self, fd_p): status = False else: status = True + unknown = False pmpe_t = recv_info_p.event_info.pmpe port_list_size = pmpe_t.list_size logical_port_list = pmpe_t.log_port_list @@ -354,8 +360,11 @@ def on_pmpe(self, fd_p): logger.log_info("Receive PMPE disable event on module {}: status {}".format(module_id, module_state)) elif module_state == SDK_SFP_STATE_IN or module_state == SDK_SFP_STATE_OUT: logger.log_info("Receive PMPE plug in/out event on module {}: status {}".format(module_id, module_state)) + elif module_state == SDK_SFP_STATE_UNKNOWN: + unknown = True else: logger.log_error("Receive PMPE unknown event on module {}: status {}".format(module_id, module_state)) + for i in range(port_list_size): logical_port = sx_port_log_id_t_arr_getitem(logical_port_list, i) rc = sx_api_port_device_get(self.handle, 1 , 0, port_attributes_list, port_cnt_p) @@ -369,6 +378,14 @@ def on_pmpe(self, fd_p): if label_port is not None: label_port_list.append(label_port) + if unknown: + SFP_ports_with_unknown_event = set(label_port_list) - self.RJ45_port_set + if SFP_ports_with_unknown_event: + logger.log_error("Receive PMPE unknown event on module {}: status {}".format(module_id, module_state)) + else: + # For RJ45 ports, we treat unknown as disconnect + module_state = SDK_SFP_STATE_DIS + delete_uint32_t_p(pkt_size_p) delete_uint8_t_arr(pkt) delete_sx_receive_info_t_p(recv_info_p) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py b/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py index 22ef4bb1f27d..b35ef313dfcd 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py @@ -16,8 +16,18 @@ # import functools import subprocess +import json +import sys +import os +from sonic_py_common import device_info from sonic_py_common.logger import Logger +HWSKU_JSON = 'hwsku.json' + +PORT_INDEX_KEY = "index" +PORT_TYPE_KEY = "port_type" +RJ45_PORT_TYPE = "RJ45" + logger = Logger() @@ -206,4 +216,51 @@ def run_command(command): process = subprocess.Popen(command, shell=True, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) return process.communicate()[0].strip() except Exception: - return None \ No newline at end of file + return None + + +def load_json_file(filename, log_func=logger.log_error): + # load 'platform.json' or 'hwsku.json' file + data = None + try: + with open(filename) as fp: + try: + data = json.load(fp) + except json.JSONDecodeError: + if log_func: + log_func("failed to decode Json file.") + return data + except Exception as e: + if log_func: + log_func("error occurred while parsing json file: {}".format(sys.exc_info()[1])) + return None + + +def extract_RJ45_ports_index(): + # Cross check 'platform.json' and 'hwsku.json' to extract the RJ45 port index if exists. + hwsku_path = device_info.get_path_to_hwsku_dir() + platform_file = device_info.get_path_to_port_config_file() + platform_dict = load_json_file(platform_file)['interfaces'] + hwsku_file = os.path.join(hwsku_path, HWSKU_JSON) + hwsku_dict = load_json_file(hwsku_file)['interfaces'] + port_name_to_index_map_dict = {} + RJ45_port_index_list = [] + + # Compose a interface name to index mapping from 'platform.json' + for i, (key, value) in enumerate(platform_dict.items()): + if PORT_INDEX_KEY in value: + index_raw = value[PORT_INDEX_KEY] + # The index could be "1" or "1, 1, 1, 1" + index = index_raw.split(',')[0] + port_name_to_index_map_dict[key] = index + + if not bool(port_name_to_index_map_dict): + return None + + # Check if "port_type" specified as "RJ45", if yes, add the port index to the list. + for i, (key, value) in enumerate(hwsku_dict.items()): + if key in port_name_to_index_map_dict and PORT_TYPE_KEY in value and value[PORT_TYPE_KEY] == RJ45_PORT_TYPE: + RJ45_port_index_list.append(int(port_name_to_index_map_dict[key])-1) + + return RJ45_port_index_list if bool(RJ45_port_index_list) else None + diff --git a/platform/mellanox/mlnx-platform-api/tests/test_chassis.py b/platform/mellanox/mlnx-platform-api/tests/test_chassis.py index 477c4d1a8ef2..c6235b195a02 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_chassis.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_chassis.py @@ -32,6 +32,7 @@ from sonic_platform.chassis import Chassis from sonic_platform.device_data import DeviceDataManager +sonic_platform.chassis.extract_RJ45_ports_index = mock.MagicMock(return_value=[]) class TestChassis: """Test class to test chassis.py. The test cases covers: diff --git a/platform/mellanox/mlnx-platform-api/tests/test_eeprom.py b/platform/mellanox/mlnx-platform-api/tests/test_eeprom.py index 2797d62a70f3..5f0a30dbf519 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_eeprom.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_eeprom.py @@ -30,11 +30,11 @@ from sonic_platform.chassis import Chassis from sonic_platform.eeprom import Eeprom, EepromContentVisitor - class TestEeprom: @patch('os.path.exists', MagicMock(return_value=True)) @patch('os.path.islink', MagicMock(return_value=True)) @patch('sonic_platform.eeprom.Eeprom.get_system_eeprom_info') + @patch('sonic_platform.chassis.extract_RJ45_ports_index', MagicMock(return_value=[])) def test_chassis_eeprom(self, mock_eeprom_info): mock_eeprom_info.return_value = { hex(Eeprom._TLV_CODE_PRODUCT_NAME): 'MSN3420', @@ -102,7 +102,3 @@ def test_eeprom_content_visitor(self): v.visit_tlv('tlv3', Eeprom._TLV_CODE_VENDOR_EXT, 4, 'ext2') assert content[hex(Eeprom._TLV_CODE_PRODUCT_NAME)] == 'MSN3420' assert content[hex(Eeprom._TLV_CODE_VENDOR_EXT)] == ['ext1', 'ext2'] - - - - diff --git a/platform/mellanox/mlnx-platform-api/tests/test_led.py b/platform/mellanox/mlnx-platform-api/tests/test_led.py index 7a9ebaf056a5..1544ae35fb70 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_led.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_led.py @@ -35,6 +35,7 @@ class TestLed: @mock.patch('sonic_platform.led.Led._wait_files_ready', mock.MagicMock(return_value=True)) + @mock.patch('sonic_platform.chassis.extract_RJ45_ports_index', mock.MagicMock(return_value=True)) def test_chassis_led(self): chassis = Chassis() assert chassis._led is None diff --git a/platform/mellanox/mlnx-platform-api/tests/test_module.py b/platform/mellanox/mlnx-platform-api/tests/test_module.py index 8213aa5a986a..4cba90ac95f4 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_module.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_module.py @@ -26,6 +26,7 @@ modules_path = os.path.dirname(test_path) sys.path.insert(0, modules_path) +import sonic_platform.chassis from sonic_platform import utils from sonic_platform.chassis import ModularChassis from sonic_platform.device_data import DeviceDataManager @@ -37,6 +38,7 @@ class TestModule: def setup_class(cls): DeviceDataManager.get_linecard_sfp_count = mock.MagicMock(return_value=2) DeviceDataManager.get_linecard_count = mock.MagicMock(return_value=2) + sonic_platform.chassis.extract_RJ45_ports_index = mock.MagicMock(return_value=[]) def test_chassis_get_num_sfp(self): chassis = ModularChassis() diff --git a/platform/mellanox/mlnx-platform-api/tests/test_sfp.py b/platform/mellanox/mlnx-platform-api/tests/test_sfp.py index dcb3953ded88..b932856fa38c 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_sfp.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_sfp.py @@ -53,8 +53,10 @@ def test_sfp_index(self, mock_max_port): assert sfp.index == 5 @mock.patch('sonic_platform.sfp.SFP.read_eeprom', mock.MagicMock(return_value=None)) - @mock.patch('sonic_platform.sfp.SFP._get_error_code') + @mock.patch('sonic_platform.sfp.SFP.shared_sdk_handle', mock.MagicMock(return_value=2)) + @mock.patch('sonic_platform.sfp.SFP._get_module_info') @mock.patch('sonic_platform.chassis.Chassis.get_num_sfps', mock.MagicMock(return_value=2)) + @mock.patch('sonic_platform.chassis.extract_RJ45_ports_index', mock.MagicMock(return_value=[])) def test_sfp_get_error_status(self, mock_get_error_code): chassis = Chassis() diff --git a/platform/mellanox/mlnx-platform-api/tests/test_thermal.py b/platform/mellanox/mlnx-platform-api/tests/test_thermal.py index 9c1526479a9b..a7fdc4d0bafe 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_thermal.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_thermal.py @@ -28,9 +28,11 @@ modules_path = os.path.dirname(test_path) sys.path.insert(0, modules_path) +import sonic_platform.chassis from sonic_platform.chassis import Chassis from sonic_platform.device_data import DeviceDataManager +sonic_platform.chassis.extract_RJ45_ports_index = mock.MagicMock(return_value=[]) class TestThermal: @mock.patch('os.path.exists', mock.MagicMock(return_value=True)) @@ -334,4 +336,4 @@ def test_get_cooling_level(self, mock_read_file): mock_read_file.side_effect = ValueError('') with pytest.raises(RuntimeError): - Thermal.get_cooling_level() \ No newline at end of file + Thermal.get_cooling_level() diff --git a/platform/mellanox/mlnx-ssd-fw-update.sh b/platform/mellanox/mlnx-ssd-fw-update.sh index 07ec9ce103ea..819f02ddd3a8 100755 --- a/platform/mellanox/mlnx-ssd-fw-update.sh +++ b/platform/mellanox/mlnx-ssd-fw-update.sh @@ -21,9 +21,8 @@ #= Global variable # #= #===== -VERSION="1.5" +VERSION="1.6" #===== -SWITCH_SSD_DEV="/dev/sda" UTIL_TITLE="This is MLNX SSD firmware update utility to read and write SSD FW. Version ${VERSION}" DEPENDECIES=("smartctl" "sha256sum" "tar" "/bin/bash" "gpg" "sed" "realpath" "dirname") TRUE="0" @@ -37,6 +36,7 @@ DEBUG_MSG="DEBUG" # remove all instance after script is ready. #===== PKG_EXTRACTED=$FALSE LOGGER_UTIL=$FALSE +SSD_DEV_NAME="" SSD_FW_VER="" SSD_DEVICE_MODEL="" SSD_SERIAL="" @@ -230,7 +230,7 @@ function get_ssd_fw_version() { [ $1 ] || { LOG_MSG_AND_EXIT "Wrong usage - ${FUNCNAME[0]}()"; } local device_fw_version - device_fw_version=$(smartctl -i $SWITCH_SSD_DEV | grep -Po "Firmware Version: +\K[^,]+") + device_fw_version=$(smartctl -i $SSD_DEV_NAME | grep -Po "Firmware Version: +\K[^,]+") LOG_MSG "device_fw_version: $device_fw_version" ${DEBUG_MSG} eval $1='$device_fw_version' } @@ -242,7 +242,7 @@ function get_ssd_device_model() { [ $1 ] || { LOG_MSG_AND_EXIT "Wrong usage - ${FUNCNAME[0]}()"; } local device_model_name - device_model_name=$(smartctl -i $SWITCH_SSD_DEV | grep -Po "Device Model: +\K[^,]+") + device_model_name=$(smartctl -i $SSD_DEV_NAME | grep -E "Device Model:|Model Number:" | awk '{$1=$2="";print $0}'| sed 's/^ *//g') LOG_MSG "device_model_name: $device_model_name" ${DEBUG_MSG} eval $1='$device_model_name' } @@ -254,7 +254,7 @@ function get_ssd_size() { [ $1 ] || { LOG_MSG_AND_EXIT "Wrong usage - ${FUNCNAME[0]}()"; } local device_size - device_size=$(smartctl -i $SWITCH_SSD_DEV | grep -Po "User Capacity:.+bytes \[\K[^ ]+") + device_size=$(smartctl -i $SSD_DEV_NAME | grep -E "User Capacity:|Size/Capacity" | awk -F '\[|\]' '{print $2}' | awk '{print $1}') LOG_MSG "device_size: $device_size" ${DEBUG_MSG} eval $1='$device_size' } @@ -266,16 +266,56 @@ function get_ssd_serial() { [ $1 ] || { LOG_MSG_AND_EXIT "Wrong usage - ${FUNCNAME[0]}()"; } local device_serial - device_serial=$(smartctl -i $SWITCH_SSD_DEV | grep -Po "Serial Number: +\K[^,]+") + device_serial=$(smartctl -i $SSD_DEV_NAME | grep -Po "Serial Number: +\K[^,]+") LOG_MSG "device_serial: $device_serial" ${DEBUG_MSG} eval $1='$device_serial' } #==============================================================================# -#= This function check if given argument is valid and return boolean result. # +# This function check SSD device name # +# +function get_ssd_device_name() { + [ $1 ] || { LOG_MSG_AND_EXIT "Wrong usage - ${FUNCNAME[0]}()"; } + + non_rem_mount_disks="" + non_rem_mount_disks_count=0 + mount_parts=$(cat /proc/partitions | grep -v "^major" | grep -v ram | awk '{{print $4}}') + for blk_dev_name in ${mount_parts} + do + blk_dev_link=$(find /sys/bus /sys/class /sys/block/ -name ${blk_dev_name}) + for first_blk_dev_link in ${blk_dev_link} + do + if ls -l ${first_blk_dev_link} | grep -q virtual; then + continue + fi + if [ -e ${first_blk_dev_link}/removable ] ; then + if [ "0" = $(cat ${first_blk_dev_link}/removable) ] ; then + let non_rem_mount_disks_count=${non_rem_mount_disks_count}+1 + if [ "1" == "${non_rem_mount_disks_count}" ] ; then + non_rem_mount_disks="${blk_dev_name}" + else + non_rem_mount_disks="${non_rem_mount_disks} ${blk_dev_name}" + fi + fi + fi + break + done + done + if [ "1" == "${non_rem_mount_disks_count}" ] ; then + device_name="/dev/${non_rem_mount_disks}" + else + $1="/dev/sda" + fi + LOG_MSG "device_name: $device_name" ${DEBUG_MSG} + eval $1='$device_name' +} + +#==============================================================================# +#= This function check if given argument. # #= function get_ssd_info() { LOG_MSG "func: ${FUNCNAME[0]}()" ${DEBUG_MSG} + get_ssd_device_name SSD_DEV_NAME get_ssd_fw_version SSD_FW_VER get_ssd_device_model SSD_DEVICE_MODEL get_ssd_serial SSD_SERIAL From 60c00195d429e8ae348081aa2d198e7becdfea0f Mon Sep 17 00:00:00 2001 From: Prince George <45705344+prgeor@users.noreply.github.com> Date: Wed, 22 Jun 2022 10:14:06 -0700 Subject: [PATCH 136/259] Skip CMIS manager (#10907) * Removed unwanted changes * Fix j2 compilation error * Address review comment * Add newline --- .../docker-platform-monitor/docker-pmon.supervisord.conf.j2 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dockers/docker-platform-monitor/docker-pmon.supervisord.conf.j2 b/dockers/docker-platform-monitor/docker-pmon.supervisord.conf.j2 index 4a13d76edb0a..d8769097f091 100644 --- a/dockers/docker-platform-monitor/docker-pmon.supervisord.conf.j2 +++ b/dockers/docker-platform-monitor/docker-pmon.supervisord.conf.j2 @@ -96,9 +96,11 @@ dependent_startup_wait_for=rsyslogd:running {% if not skip_xcvrd %} [program:xcvrd] {% if delay_xcvrd %} -command=bash -c "sleep 30 && {% if API_VERSION == 3 and 'xcvrd' not in python2_daemons %}python3 {% else %} python2 {% endif %}/usr/local/bin/xcvrd" +command={% if skip_xcvrd_cmis_mgr %} bash -c "sleep 30 && python3 /usr/local/bin/xcvrd --skip_cmis_mgr" {% else %} bash -c "sleep 30 && python3 /usr/local/bin/xcvrd" {% endif %} + {% else %} -command={% if API_VERSION == 3 and 'xcvrd' not in python2_daemons %}python3 {% else %} python2 {% endif %}/usr/local/bin/xcvrd +command={% if skip_xcvrd_cmis_mgr %} python3 /usr/local/bin/xcvrd --skip_cmis_mgr {% else %} python3 /usr/local/bin/xcvrd {% endif %} + {% endif %} priority=6 autostart=false From 67e46e1004b9a4f10dfbc2e0465beb841992925e Mon Sep 17 00:00:00 2001 From: Kebo Liu Date: Thu, 16 Jun 2022 07:33:08 +0800 Subject: [PATCH 137/259] add flag skip_xcvrd_cmis_mgr to skip cmis task on Nvidia platform (#11120) Signed-off-by: Kebo Liu --- .../mellanox/x86_64-mlnx_msn2700-r0/pmon_daemon_control.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/pmon_daemon_control.json b/device/mellanox/x86_64-mlnx_msn2700-r0/pmon_daemon_control.json index 86910af29e89..dbc19c9baabf 100644 --- a/device/mellanox/x86_64-mlnx_msn2700-r0/pmon_daemon_control.json +++ b/device/mellanox/x86_64-mlnx_msn2700-r0/pmon_daemon_control.json @@ -1,6 +1,7 @@ { "skip_ledd": true, "skip_fancontrol": true, - "delay_xcvrd": true + "delay_xcvrd": true, + "skip_xcvrd_cmis_mgr": true } From f377636747bbc4e7a9168e745f5651aceac1396d Mon Sep 17 00:00:00 2001 From: andywongarista <78833093+andywongarista@users.noreply.github.com> Date: Sun, 17 Jul 2022 19:57:27 -0700 Subject: [PATCH 138/259] Add gbsyncd container for broncos (#11154) * Add docker-gbsyncd-broncos support * Address review comments * Add socket to gbsyncd * Upgrade gbsyncd-broncos to bullseye --- files/build_templates/docker_image_ctl.j2 | 25 +++++++++-- platform/broadcom/rules.dep | 3 ++ platform/broadcom/rules.mk | 3 ++ .../components/docker-gbsyncd-broncos.dep | 12 ++++++ platform/components/docker-gbsyncd-broncos.mk | 37 ++++++++++++++++ .../docker-gbsyncd-broncos/Dockerfile.j2 | 40 +++++++++++++++++ .../critical_processes.j2 | 1 + .../docker-gbsyncd-broncos/docker-init.sh | 16 +++++++ .../docker-gbsyncd-broncos/start.sh | 14 ++++++ .../supervisord.conf.j2 | 43 +++++++++++++++++++ 10 files changed, 190 insertions(+), 4 deletions(-) create mode 100644 platform/components/docker-gbsyncd-broncos.dep create mode 100644 platform/components/docker-gbsyncd-broncos.mk create mode 100644 platform/components/docker-gbsyncd-broncos/Dockerfile.j2 create mode 100644 platform/components/docker-gbsyncd-broncos/critical_processes.j2 create mode 100755 platform/components/docker-gbsyncd-broncos/docker-init.sh create mode 100755 platform/components/docker-gbsyncd-broncos/start.sh create mode 100644 platform/components/docker-gbsyncd-broncos/supervisord.conf.j2 diff --git a/files/build_templates/docker_image_ctl.j2 b/files/build_templates/docker_image_ctl.j2 index f0a1dcccbaae..19ca92a8e98c 100644 --- a/files/build_templates/docker_image_ctl.j2 +++ b/files/build_templates/docker_image_ctl.j2 @@ -36,7 +36,7 @@ function updateSyslogConf() TARGET_IP=$(docker network inspect bridge --format={{ "'{{(index .IPAM.Config 0).Gateway}}'" }}) CONTAINER_NAME="$DOCKERNAME" TMP_FILE="/tmp/rsyslog.$CONTAINER_NAME.conf" - {%- if docker_container_name == "database" %} + {%- if docker_container_name == "database" %} python -c "import jinja2, os; paths=['/usr/share/sonic/templates']; loader = jinja2.FileSystemLoader(paths); env = jinja2.Environment(loader=loader, trim_blocks=True); template_file='/usr/share/sonic/templates/rsyslog-container.conf.j2'; template = env.get_template(os.path.basename(template_file)); data=template.render({\"target_ip\":\"$TARGET_IP\",\"container_name\":\"$CONTAINER_NAME\"}); print(data)" > $TMP_FILE {%- else %} sonic-cfggen -t /usr/share/sonic/templates/rsyslog-container.conf.j2 -a "{\"target_ip\": \"$TARGET_IP\", \"container_name\": \"$CONTAINER_NAME\" }" > $TMP_FILE @@ -105,7 +105,7 @@ function preStartAction() if [[ $(/bin/systemctl status watchdog-control.service | grep -c running) -gt 0 ]]; then echo "Stopping watchdog-control.service before starting PDE" systemctl stop watchdog-control.service - fi + fi {%- elif docker_container_name == "snmp" %} $SONIC_DB_CLI STATE_DB HSET 'DEVICE_METADATA|localhost' chassis_serial_number $(decode-syseeprom -s) {%- else %} @@ -127,7 +127,7 @@ function waitForAllInstanceDatabaseConfigJsonFilesReady() cnt=0 SONIC_DB_GLOBAL_JSON="/var/run/redis/sonic-db/database_global.json" if [ -f "$SONIC_DB_GLOBAL_JSON" ]; then - # Create a separate python script to get a list of location of all instance database_config.json file + # Create a separate python script to get a list of location of all instance database_config.json file redis_database_cfg_list=`/usr/bin/python -c "import sys; import os; import json; f=open(sys.argv[1]); \ global_db_dir = os.path.dirname(sys.argv[1]); data=json.load(f); \ print(\" \".join([os.path.normpath(global_db_dir+'/'+elem['include']) \ @@ -297,6 +297,20 @@ start() { source $PLATFORM_ENV_CONF fi + {%- if docker_container_name == "gbsyncd" %} + GBSYNCD_CONF=/usr/share/sonic/device/$PLATFORM/gbsyncd.ini + GBSYNCD_PLATFORM=gbsyncd-vs + if [ -f "$GBSYNCD_CONF" ]; then + while IFS="=" read -r key value; do + case "$key" in + platform) + GBSYNCD_PLATFORM="$value" + ;; + esac + done < "$GBSYNCD_CONF" + fi + {%- endif %} + {%- if docker_container_name == "database" %} # Don't mount HWSKU in {{docker_container_name}} container. HWSKU="" @@ -522,7 +536,10 @@ start() { --env "NAMESPACE_PREFIX"="$NAMESPACE_PREFIX" \ --env "NAMESPACE_COUNT"=$NUM_ASIC \ --name=$DOCKERNAME \ -{%- if docker_image_name is defined %} +{%- if docker_container_name == "gbsyncd" %} + -v /var/run/docker-syncd$DEV:/var/run/sswsyncd \ + "docker-$GBSYNCD_PLATFORM":latest \ +{%- elif docker_image_name is defined %} {{docker_image_name}}:latest \ {%- else %} {{docker_image_id}} \ diff --git a/platform/broadcom/rules.dep b/platform/broadcom/rules.dep index 36b727570e68..220ee8019943 100644 --- a/platform/broadcom/rules.dep +++ b/platform/broadcom/rules.dep @@ -30,3 +30,6 @@ include $(PLATFORM_PATH)/libsaithrift-dev.dep include $(PLATFORM_PATH)/docker-syncd-brcm-dnx.dep include $(PLATFORM_PATH)/docker-syncd-brcm-dnx-rpc.dep include $(PLATFORM_PATH)/../components/docker-gbsyncd-credo.dep +ifeq ($(INCLUDE_GBSYNCD_BRONCOS), y) +include $(PLATFORM_PATH)/../components/docker-gbsyncd-broncos.dep +endif diff --git a/platform/broadcom/rules.mk b/platform/broadcom/rules.mk index b13a145b2b0f..0b46bb1c8ec4 100644 --- a/platform/broadcom/rules.mk +++ b/platform/broadcom/rules.mk @@ -29,6 +29,9 @@ include $(PLATFORM_PATH)/libsaithrift-dev.mk include $(PLATFORM_PATH)/docker-syncd-brcm-dnx.mk include $(PLATFORM_PATH)/docker-syncd-brcm-dnx-rpc.mk include $(PLATFORM_PATH)/../components/docker-gbsyncd-credo.mk +ifeq ($(INCLUDE_GBSYNCD_BRONCOS), y) +include $(PLATFORM_PATH)/../components/docker-gbsyncd-broncos.mk +endif BCMCMD = bcmcmd $(BCMCMD)_URL = "https://sonicstorage.blob.core.windows.net/packages/20190307/bcmcmd?sv=2015-04-05&sr=b&sig=sUdbU7oVbh5exbXXHVL5TDFBTWDDBASHeJ8Cp0B0TIc%3D&se=2038-05-06T22%3A34%3A19Z&sp=r" diff --git a/platform/components/docker-gbsyncd-broncos.dep b/platform/components/docker-gbsyncd-broncos.dep new file mode 100644 index 000000000000..0b9d88c292a9 --- /dev/null +++ b/platform/components/docker-gbsyncd-broncos.dep @@ -0,0 +1,12 @@ +DPATH := $($(DOCKER_GBSYNCD_BRONCOS)_PATH) +DEP_FILES := $(SONIC_COMMON_FILES_LIST) +DEP_FILES += platform/components/docker-gbsyncd-broncos.mk +DEP_FILES += platform/components/docker-gbsyncd-broncos.dep +DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) +DEP_FILES += $(shell git ls-files $(DPATH)) + +$(DOCKER_GBSYNCD_BRONCOS)_CACHE_MODE := GIT_CONTENT_SHA +$(DOCKER_GBSYNCD_BRONCOS)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) +$(DOCKER_GBSYNCD_BRONCOS)_DEP_FILES := $(DEP_FILES) + +$(eval $(call add_dbg_docker,$(DOCKER_GBSYNCD_BRONCOS),$(DOCKER_GBSYNCD_BRONCOS_DBG))) diff --git a/platform/components/docker-gbsyncd-broncos.mk b/platform/components/docker-gbsyncd-broncos.mk new file mode 100644 index 000000000000..6e280ee5a655 --- /dev/null +++ b/platform/components/docker-gbsyncd-broncos.mk @@ -0,0 +1,37 @@ +LIBSAI_BRONCOS = libsaibroncos_0.0.1_amd64.deb +$(LIBSAI_BRONCOS)_URL = + +ifneq ($($(LIBSAI_BRONCOS)_URL),) + +DOCKER_GBSYNCD_BRONCOS_STEM = docker-gbsyncd-broncos +DOCKER_GBSYNCD_BRONCOS = $(DOCKER_GBSYNCD_BRONCOS_STEM).gz +DOCKER_GBSYNCD_BRONCOS_DBG = $(DOCKER_GBSYNCD_BRONCOS_STEM)-$(DBG_IMAGE_MARK).gz + +$(DOCKER_GBSYNCD_BRONCOS)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) + +$(DOCKER_GBSYNCD_BRONCOS)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BULLSEYE) + +$(DOCKER_GBSYNCD_BRONCOS)_DBG_DEPENDS += $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_DEPENDS) + +$(DOCKER_GBSYNCD_BRONCOS)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_IMAGE_PACKAGES) + +SONIC_DOCKER_IMAGES += $(DOCKER_GBSYNCD_BRONCOS) +SONIC_BULLSEYE_DOCKERS += $(DOCKER_GBSYNCD_BRONCOS) +SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_GBSYNCD_BRONCOS) + +SONIC_DOCKER_DBG_IMAGES += $(DOCKER_GBSYNCD_BRONCOS_DBG) +SONIC_BULLSEYE_DBG_DOCKERS += $(DOCKER_GBSYNCD_BRONCOS_DBG) +SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_GBSYNCD_BRONCOS_DBG) + +$(DOCKER_GBSYNCD_BRONCOS)_CONTAINER_NAME = gbsyncd +$(DOCKER_GBSYNCD_BRONCOS)_RUN_OPT += --privileged -t +$(DOCKER_GBSYNCD_BRONCOS)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf +$(DOCKER_GBSYNCD_BRONCOS)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro + +SONIC_ONLINE_DEBS += $(LIBSAI_BRONCOS) + +$(DOCKER_GBSYNCD_BRONCOS)_VERSION = 1.0.0 +$(DOCKER_GBSYNCD_BRONCOS)_PACKAGE_NAME = gbsyncd-broncos +$(DOCKER_GBSYNCD_BRONCOS)_PATH = $(PLATFORM_PATH)/../components/docker-gbsyncd-broncos +$(DOCKER_GBSYNCD_BRONCOS)_DEPENDS += $(SYNCD) $(LIBSAI_BRONCOS) +endif diff --git a/platform/components/docker-gbsyncd-broncos/Dockerfile.j2 b/platform/components/docker-gbsyncd-broncos/Dockerfile.j2 new file mode 100644 index 000000000000..f114679c6888 --- /dev/null +++ b/platform/components/docker-gbsyncd-broncos/Dockerfile.j2 @@ -0,0 +1,40 @@ +FROM docker-config-engine-bullseye + +ARG docker_container_name +RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%syslogtag%/;" /etc/rsyslog.conf + +## Make apt-get non-interactive +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update + +RUN apt-get install -f -y iproute2 libcap2-bin libprotobuf-dev + +COPY \ +{% for deb in docker_gbsyncd_broncos_debs.split(' ') -%} +{% if 'libsaibcm' not in deb -%} +debs/{{ deb }}{{' '}} +{%- endif %} +{%- endfor -%} +debs/ + +RUN dpkg -i \ +{% for deb in docker_gbsyncd_broncos_debs.split(' ') -%} +{% if 'libsaibcm' not in deb -%} +debs/{{ deb }}{{' '}} +{%- endif %} +{%- endfor %} + +COPY ["docker-init.sh", "/usr/bin/"] +COPY ["start.sh", "/usr/bin/"] + +COPY ["critical_processes.j2", "/usr/share/sonic/templates"] +COPY ["supervisord.conf.j2", "/usr/share/sonic/templates"] + +COPY ["files/supervisor-proc-exit-listener", "/usr/bin"] + +## Clean up +RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y +RUN rm -rf /debs + +ENTRYPOINT ["/usr/bin/docker-init.sh"] diff --git a/platform/components/docker-gbsyncd-broncos/critical_processes.j2 b/platform/components/docker-gbsyncd-broncos/critical_processes.j2 new file mode 100644 index 000000000000..bdd6903c5690 --- /dev/null +++ b/platform/components/docker-gbsyncd-broncos/critical_processes.j2 @@ -0,0 +1 @@ +program:syncd diff --git a/platform/components/docker-gbsyncd-broncos/docker-init.sh b/platform/components/docker-gbsyncd-broncos/docker-init.sh new file mode 100755 index 000000000000..93a1b931dfad --- /dev/null +++ b/platform/components/docker-gbsyncd-broncos/docker-init.sh @@ -0,0 +1,16 @@ +#! /bin/sh + +GB_CONFIG=/usr/share/sonic/hwsku/gearbox_config.json + +if [ ! -f $GB_CONFIG ]; then + exit 0 +fi + +CFGGEN_ARG="-j $GB_CONFIG" + +mkdir -p /etc/supervisor/conf.d/ + +sonic-cfggen $CFGGEN_ARG -t /usr/share/sonic/templates/supervisord.conf.j2 > /etc/supervisor/conf.d/supervisord.conf +sonic-cfggen $CFGGEN_ARG -t /usr/share/sonic/templates/critical_processes.j2 > /etc/supervisor/critical_processes + +exec /usr/local/bin/supervisord diff --git a/platform/components/docker-gbsyncd-broncos/start.sh b/platform/components/docker-gbsyncd-broncos/start.sh new file mode 100755 index 000000000000..ac7de02dcdca --- /dev/null +++ b/platform/components/docker-gbsyncd-broncos/start.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +HWSKU_DIR=/usr/share/sonic/hwsku + +mkdir -p /etc/sai.d/ + +# Create/Copy the psai.profile to /etc/sai.d/psai.profile +if [ -f $HWSKU_DIR/psai.profile.j2 ]; then + sonic-cfggen -d -t $HWSKU_DIR/psai.profile.j2 > /etc/sai.d/psai.profile +else + if [ -f $HWSKU_DIR/psai.profile ]; then + cp $HWSKU_DIR/psai.profile /etc/sai.d/psai.profile + fi +fi diff --git a/platform/components/docker-gbsyncd-broncos/supervisord.conf.j2 b/platform/components/docker-gbsyncd-broncos/supervisord.conf.j2 new file mode 100644 index 000000000000..c274315ef67e --- /dev/null +++ b/platform/components/docker-gbsyncd-broncos/supervisord.conf.j2 @@ -0,0 +1,43 @@ +[supervisord] +logfile_maxbytes=1MB +logfile_backups=2 +nodaemon=true + +[eventlistener:dependent-startup] +command=python3 -m supervisord_dependent_startup +autostart=true +autorestart=unexpected +startretries=0 +exitcodes=0,3 +events=PROCESS_STATE + +[program:rsyslogd] +command=/usr/sbin/rsyslogd -n -iNONE +priority=1 +autostart=false +autorestart=unexpected +stdout_logfile=syslog +stderr_logfile=syslog +dependent_startup=true + +[program:start] +command=/usr/bin/start.sh +priority=2 +autostart=false +autorestart=false +startsecs=0 +stdout_logfile=syslog +stderr_logfile=syslog +dependent_startup=true +dependent_startup_wait_for=rsyslogd:running + +[program:syncd] +environment=BRONCOS_DEVICE_PATH=/usr/lib +command=/usr/bin/syncd -s -p /etc/sai.d/psai.profile -x /usr/share/sonic/hwsku/context_config.json -g 1 +priority=3 +autostart=false +autorestart=false +stdout_logfile=syslog +stderr_logfile=syslog +dependent_startup=true +dependent_startup_wait_for=start:exited From 4abfd37a8db3e39866af35beb8044b8c35749db3 Mon Sep 17 00:00:00 2001 From: kellyyeh <42761586+kellyyeh@users.noreply.github.com> Date: Mon, 25 Jul 2022 14:43:06 -0700 Subject: [PATCH 139/259] [dhcpmon] Open different socket for dual tor to enable interface filtering (#11201) --- rules/dhcpmon.mk | 1 + src/dhcpmon/Makefile | 5 +- src/dhcpmon/objects.mk | 2 +- .../src/{dhcp_device.c => dhcp_device.cpp} | 150 ++++++++++++++---- src/dhcpmon/src/dhcp_device.h | 1 + .../src/{dhcp_devman.c => dhcp_devman.cpp} | 2 +- src/dhcpmon/src/{dhcp_mon.c => dhcp_mon.cpp} | 0 src/dhcpmon/src/{main.c => main.cpp} | 6 + src/dhcpmon/src/subdir.mk | 14 +- 9 files changed, 143 insertions(+), 38 deletions(-) rename src/dhcpmon/src/{dhcp_device.c => dhcp_device.cpp} (80%) rename src/dhcpmon/src/{dhcp_devman.c => dhcp_devman.cpp} (99%) rename src/dhcpmon/src/{dhcp_mon.c => dhcp_mon.cpp} (100%) rename src/dhcpmon/src/{main.c => main.cpp} (97%) diff --git a/rules/dhcpmon.mk b/rules/dhcpmon.mk index 3f8f5e139bce..8f9d6403a677 100644 --- a/rules/dhcpmon.mk +++ b/rules/dhcpmon.mk @@ -4,6 +4,7 @@ SONIC_DHCPMON_VERSION = 1.0.0-0 SONIC_DHCPMON_PKG_NAME = dhcpmon SONIC_DHCPMON = sonic-$(SONIC_DHCPMON_PKG_NAME)_$(SONIC_DHCPMON_VERSION)_$(CONFIGURED_ARCH).deb +$(SONIC_DHCPMON)_DEPENDS = $(LIBSWSSCOMMON) $(LIBHIREDIS) $(LIBSWSSCOMMON_DEV) $(LIBHIREDIS_DEV) $(SONIC_DHCPMON)_SRC_PATH = $(SRC_PATH)/$(SONIC_DHCPMON_PKG_NAME) SONIC_DPKG_DEBS += $(SONIC_DHCPMON) diff --git a/src/dhcpmon/Makefile b/src/dhcpmon/Makefile index 61cde376730b..4d21f57199f2 100644 --- a/src/dhcpmon/Makefile +++ b/src/dhcpmon/Makefile @@ -2,8 +2,9 @@ RM := rm -rf DHCPMON_TARGET := dhcpmon CP := cp MKDIR := mkdir -CC := gcc +CC := g++ MV := mv +PWD := $(shell pwd) # All of the sources participating in the build are defined here -include src/subdir.mk @@ -23,7 +24,7 @@ all: sonic-dhcpmon # Tool invocations sonic-dhcpmon: $(OBJS) $(USER_OBJS) @echo 'Building target: $@' - @echo 'Invoking: GCC C Linker' + @echo 'Invoking: G++ C Linker' $(CC) -o "$(DHCPMON_TARGET)" $(OBJS) $(USER_OBJS) $(LIBS) @echo 'Finished building target: $@' @echo ' ' diff --git a/src/dhcpmon/objects.mk b/src/dhcpmon/objects.mk index c9b774a53921..dc0d09e5021f 100644 --- a/src/dhcpmon/objects.mk +++ b/src/dhcpmon/objects.mk @@ -1,4 +1,4 @@ USER_OBJS := -LIBS := -levent -lexplain +LIBS := -levent -lexplain -lswsscommon -pthread -lboost_thread -lboost_system -lhiredis diff --git a/src/dhcpmon/src/dhcp_device.c b/src/dhcpmon/src/dhcp_device.cpp similarity index 80% rename from src/dhcpmon/src/dhcp_device.c rename to src/dhcpmon/src/dhcp_device.cpp index f45483f8504c..8ec91b057b64 100644 --- a/src/dhcpmon/src/dhcp_device.c +++ b/src/dhcpmon/src/dhcp_device.cpp @@ -21,6 +21,8 @@ #include #include #include +#include "subscriberstatetable.h" +#include "select.h" #include "dhcp_device.h" @@ -49,34 +51,42 @@ #define OP_JSET (BPF_JMP | BPF_JSET | BPF_K) /** bpf jset */ #define OP_LDXB (BPF_LDX | BPF_B | BPF_MSH) /** bpf ldxb */ +std::shared_ptr mStateDbPtr = std::make_shared ("STATE_DB", 0); +std::shared_ptr mStateDbMuxTablePtr = std::make_shared ( + mStateDbPtr.get(), "HW_MUX_CABLE_TABLE" + ); +swss::DBConnector configDb("CONFIG_DB", 0); + /** Berkeley Packet Filter program for "udp and (port 67 or port 68)". * This program is obtained using the following command tcpdump: - * `tcpdump -dd "udp and (port 67 or port 68)"` + * `tcpdump -dd "inbound and udp and (port 67 or port 68)"` */ static struct sock_filter dhcp_bpf_code[] = { - {.code = OP_LDHA, .jt = 0, .jf = 0, .k = 0x0000000c}, // (000) ldh [12] - {.code = OP_JEQ, .jt = 0, .jf = 7, .k = 0x000086dd}, // (001) jeq #0x86dd jt 2 jf 9 - {.code = OP_LDB, .jt = 0, .jf = 0, .k = 0x00000014}, // (002) ldb [20] - {.code = OP_JEQ, .jt = 0, .jf = 18, .k = 0x00000011}, // (003) jeq #0x11 jt 4 jf 22 - {.code = OP_LDHA, .jt = 0, .jf = 0, .k = 0x00000036}, // (004) ldh [54] - {.code = OP_JEQ, .jt = 15, .jf = 0, .k = 0x00000043}, // (005) jeq #0x43 jt 21 jf 6 - {.code = OP_JEQ, .jt = 14, .jf = 0, .k = 0x00000044}, // (006) jeq #0x44 jt 21 jf 7 - {.code = OP_LDHA, .jt = 0, .jf = 0, .k = 0x00000038}, // (007) ldh [56] - {.code = OP_JEQ, .jt = 12, .jf = 11, .k = 0x00000043}, // (008) jeq #0x43 jt 21 jf 20 - {.code = OP_JEQ, .jt = 0, .jf = 12, .k = 0x00000800}, // (009) jeq #0x800 jt 10 jf 22 - {.code = OP_LDB, .jt = 0, .jf = 0, .k = 0x00000017}, // (010) ldb [23] - {.code = OP_JEQ, .jt = 0, .jf = 10, .k = 0x00000011}, // (011) jeq #0x11 jt 12 jf 22 - {.code = OP_LDHA, .jt = 0, .jf = 0, .k = 0x00000014}, // (012) ldh [20] - {.code = OP_JSET, .jt = 8, .jf = 0, .k = 0x00001fff}, // (013) jset #0x1fff jt 22 jf 14 - {.code = OP_LDXB, .jt = 0, .jf = 0, .k = 0x0000000e}, // (014) ldxb 4*([14]&0xf) - {.code = OP_LDHI, .jt = 0, .jf = 0, .k = 0x0000000e}, // (015) ldh [x + 14] - {.code = OP_JEQ, .jt = 4, .jf = 0, .k = 0x00000043}, // (016) jeq #0x43 jt 21 jf 17 - {.code = OP_JEQ, .jt = 3, .jf = 0, .k = 0x00000044}, // (017) jeq #0x44 jt 21 jf 18 - {.code = OP_LDHI, .jt = 0, .jf = 0, .k = 0x00000010}, // (018) ldh [x + 16] - {.code = OP_JEQ, .jt = 1, .jf = 0, .k = 0x00000043}, // (019) jeq #0x43 jt 21 jf 20 - {.code = OP_JEQ, .jt = 0, .jf = 1, .k = 0x00000044}, // (020) jeq #0x44 jt 21 jf 22 - {.code = OP_RET, .jt = 0, .jf = 0, .k = 0x00040000}, // (021) ret #262144 - {.code = OP_RET, .jt = 0, .jf = 0, .k = 0x00000000}, // (022) ret #0 + {.code = OP_LDHA, .jt = 0, .jf = 0, .k = 0xfffff004}, // (000) ldh #fffff004 + {.code = OP_JEQ, .jt = 22, .jf = 0, .k = 0x00000004}, // (001) jeq #0x04 jt 22 jf 0 + {.code = OP_LDHA, .jt = 0, .jf = 0, .k = 0x0000000c}, // (002) ldh [12] + {.code = OP_JEQ, .jt = 0, .jf = 7, .k = 0x000086dd}, // (003) jeq #0x86dd jt 2 jf 9 + {.code = OP_LDB, .jt = 0, .jf = 0, .k = 0x00000014}, // (004) ldb [20] + {.code = OP_JEQ, .jt = 0, .jf = 18, .k = 0x00000011}, // (005) jeq #0x11 jt 4 jf 22 + {.code = OP_LDHA, .jt = 0, .jf = 0, .k = 0x00000036}, // (006) ldh [54] + {.code = OP_JEQ, .jt = 15, .jf = 0, .k = 0x00000043}, // (007) jeq #0x43 jt 21 jf 6 + {.code = OP_JEQ, .jt = 14, .jf = 0, .k = 0x00000044}, // (008) jeq #0x44 jt 21 jf 7 + {.code = OP_LDHA, .jt = 0, .jf = 0, .k = 0x00000038}, // (009) ldh [56] + {.code = OP_JEQ, .jt = 12, .jf = 11, .k = 0x00000043}, // (010) jeq #0x43 jt 21 jf 20 + {.code = OP_JEQ, .jt = 0, .jf = 12, .k = 0x00000800}, // (011) jeq #0x800 jt 10 jf 22 + {.code = OP_LDB, .jt = 0, .jf = 0, .k = 0x00000017}, // (012) ldb [23] + {.code = OP_JEQ, .jt = 0, .jf = 10, .k = 0x00000011}, // (013) jeq #0x11 jt 12 jf 22 + {.code = OP_LDHA, .jt = 0, .jf = 0, .k = 0x00000014}, // (014) ldh [20] + {.code = OP_JSET, .jt = 8, .jf = 0, .k = 0x00001fff}, // (015) jset #0x1fff jt 22 jf 14 + {.code = OP_LDXB, .jt = 0, .jf = 0, .k = 0x0000000e}, // (016) ldxb 4*([14]&0xf) + {.code = OP_LDHI, .jt = 0, .jf = 0, .k = 0x0000000e}, // (017) ldh [x + 14] + {.code = OP_JEQ, .jt = 4, .jf = 0, .k = 0x00000043}, // (018) jeq #0x43 jt 21 jf 17 + {.code = OP_JEQ, .jt = 3, .jf = 0, .k = 0x00000044}, // (019) jeq #0x44 jt 21 jf 18 + {.code = OP_LDHI, .jt = 0, .jf = 0, .k = 0x00000010}, // (020) ldh [x + 16] + {.code = OP_JEQ, .jt = 1, .jf = 0, .k = 0x00000043}, // (021) jeq #0x43 jt 21 jf 20 + {.code = OP_JEQ, .jt = 0, .jf = 1, .k = 0x00000044}, // (022) jeq #0x44 jt 21 jf 22 + {.code = OP_RET, .jt = 0, .jf = 0, .k = 0x00040000}, // (023) ret #262144 + {.code = OP_RET, .jt = 0, .jf = 0, .k = 0x00000000}, // (024) ret #0 }; /** Filter program socket struct */ @@ -176,7 +186,7 @@ static void read_callback(int fd, short event, void *arg) uint8_t *dhcphdr = context->buffer + DHCP_START_OFFSET; int dhcp_option_offset = DHCP_START_OFFSET + DHCP_OPTIONS_HEADER_SIZE; - if ((buffer_sz > UDP_START_OFFSET + sizeof(struct udphdr) + DHCP_OPTIONS_HEADER_SIZE) && + if (((unsigned)buffer_sz > UDP_START_OFFSET + sizeof(struct udphdr) + DHCP_OPTIONS_HEADER_SIZE) && (ntohs(udp->len) > DHCP_OPTIONS_HEADER_SIZE)) { int dhcp_sz = ntohs(udp->len) < buffer_sz - UDP_START_OFFSET - sizeof(struct udphdr) ? ntohs(udp->len) : buffer_sz - UDP_START_OFFSET - sizeof(struct udphdr); @@ -221,6 +231,87 @@ static void read_callback(int fd, short event, void *arg) } } +/** + * @code read_callback_dual_tor(fd, event, arg); + * + * @brief callback for libevent which is called every time out in order to read queued packet capture when dual tor mode is enabled + * + * @param fd socket to read from + * @param event libevent triggered event + * @param arg user provided argument for callback (interface context) + * + * @return none + */ +static void read_callback_dual_tor(int fd, short event, void *arg) +{ + dhcp_device_context_t *context = (dhcp_device_context_t*) arg; + ssize_t buffer_sz; + struct sockaddr_ll sll; + socklen_t slen = sizeof sll; + + while ((event == EV_READ) && + ((buffer_sz = recvfrom(fd, context->buffer, context->snaplen, MSG_DONTWAIT, (struct sockaddr *)&sll, &slen)) > 0)) + { + std::string member_table = std::string("VLAN_MEMBER|") + context->intf + "|"; + char interfaceName[IF_NAMESIZE]; + char *interface = if_indextoname(sll.sll_ifindex, interfaceName); + std::string state; + std::string intf(interface); + mStateDbMuxTablePtr->hget(intf, "state", state); + if (state != "standby" && configDb.exists(member_table.append(interface))) { + struct ether_header *ethhdr = (struct ether_header*) context->buffer; + struct ip *iphdr = (struct ip*) (context->buffer + IP_START_OFFSET); + struct udphdr *udp = (struct udphdr*) (context->buffer + UDP_START_OFFSET); + uint8_t *dhcphdr = context->buffer + DHCP_START_OFFSET; + int dhcp_option_offset = DHCP_START_OFFSET + DHCP_OPTIONS_HEADER_SIZE; + + if (((unsigned)buffer_sz > UDP_START_OFFSET + sizeof(struct udphdr) + DHCP_OPTIONS_HEADER_SIZE) && + (ntohs(udp->len) > DHCP_OPTIONS_HEADER_SIZE)) + { + int dhcp_sz = ntohs(udp->len) < buffer_sz - UDP_START_OFFSET - sizeof(struct udphdr) ? + ntohs(udp->len) : buffer_sz - UDP_START_OFFSET - sizeof(struct udphdr); + int dhcp_option_sz = dhcp_sz - DHCP_OPTIONS_HEADER_SIZE; + const u_char *dhcp_option = context->buffer + dhcp_option_offset; + dhcp_packet_direction_t dir = (ethhdr->ether_shost[0] == context->mac[0] && + ethhdr->ether_shost[1] == context->mac[1] && + ethhdr->ether_shost[2] == context->mac[2] && + ethhdr->ether_shost[3] == context->mac[3] && + ethhdr->ether_shost[4] == context->mac[4] && + ethhdr->ether_shost[5] == context->mac[5]) ? + DHCP_TX : DHCP_RX; + int offset = 0; + int stop_dhcp_processing = 0; + while ((offset < (dhcp_option_sz + 1)) && dhcp_option[offset] != 255) { + switch (dhcp_option[offset]) + { + case 53: + if (offset < (dhcp_option_sz + 2)) { + handle_dhcp_option_53(context, &dhcp_option[offset], dir, iphdr, dhcphdr); + } + stop_dhcp_processing = 1; // break while loop since we are only interested in Option 53 + break; + default: + break; + } + + if (stop_dhcp_processing == 1) { + break; + } + + if (dhcp_option[offset] == 0) { // DHCP Option Padding + offset++; + } else { + offset += dhcp_option[offset + 1] + 2; + } + } + } else { + syslog(LOG_WARNING, "read_callback(%s): read length (%ld) is too small to capture DHCP options", + context->intf, buffer_sz); + } + } + } +} + /** * @code dhcp_device_is_dhcp_inactive(counters); * @@ -412,7 +503,7 @@ static int init_socket(dhcp_device_context_t *context, const char *intf) struct sockaddr_ll addr; memset(&addr, 0, sizeof(addr)); - addr.sll_ifindex = if_nametoindex(intf); + addr.sll_ifindex = 0; // any interface addr.sll_family = AF_PACKET; addr.sll_protocol = htons(ETH_P_ALL); if (bind(context->sock, (struct sockaddr *) &addr, sizeof(addr))) { @@ -553,6 +644,7 @@ int dhcp_device_start_capture(dhcp_device_context_t *context, in_addr_t giaddr_ip) { int rv = -1; + struct event *ev; do { if (context == NULL) { @@ -579,7 +671,11 @@ int dhcp_device_start_capture(dhcp_device_context_t *context, break; } - struct event *ev = event_new(base, context->sock, EV_READ | EV_PERSIST, read_callback, context); + if (dual_tor_sock) + ev = event_new(base, context->sock, EV_READ | EV_PERSIST, read_callback_dual_tor, context); + else + ev = event_new(base, context->sock, EV_READ | EV_PERSIST, read_callback, context); + if (ev == NULL) { syslog(LOG_ALERT, "event_new: failed to allocate memory for libevent event '%s'\n", strerror(errno)); break; diff --git a/src/dhcpmon/src/dhcp_device.h b/src/dhcpmon/src/dhcp_device.h index aa686f4e2718..a2b2a789fca6 100644 --- a/src/dhcpmon/src/dhcp_device.h +++ b/src/dhcpmon/src/dhcp_device.h @@ -16,6 +16,7 @@ #include #include +extern bool dual_tor_sock; /** * DHCP message types diff --git a/src/dhcpmon/src/dhcp_devman.c b/src/dhcpmon/src/dhcp_devman.cpp similarity index 99% rename from src/dhcpmon/src/dhcp_devman.c rename to src/dhcpmon/src/dhcp_devman.cpp index 65484798dbd6..b215f978a7c4 100644 --- a/src/dhcpmon/src/dhcp_devman.c +++ b/src/dhcpmon/src/dhcp_devman.cpp @@ -110,7 +110,7 @@ void dhcp_devman_shutdown() int dhcp_devman_add_intf(const char *name, char intf_type) { int rv = -1; - struct intf *dev = malloc(sizeof(struct intf)); + struct intf *dev = (struct intf*) malloc(sizeof(struct intf)); if (dev != NULL) { dev->name = name; diff --git a/src/dhcpmon/src/dhcp_mon.c b/src/dhcpmon/src/dhcp_mon.cpp similarity index 100% rename from src/dhcpmon/src/dhcp_mon.c rename to src/dhcpmon/src/dhcp_mon.cpp diff --git a/src/dhcpmon/src/main.c b/src/dhcpmon/src/main.cpp similarity index 97% rename from src/dhcpmon/src/main.c rename to src/dhcpmon/src/main.cpp index 29bc534accf0..aefaea2d01dd 100644 --- a/src/dhcpmon/src/main.c +++ b/src/dhcpmon/src/main.cpp @@ -16,9 +16,12 @@ #include #include #include +#include "subscriberstatetable.h" +#include "select.h" #include "dhcp_mon.h" #include "dhcp_devman.h" +#include "dhcp_device.h" /** dhcpmon_default_snaplen: default snap length of packet being captured */ static const size_t dhcpmon_default_snaplen = 65535; @@ -29,6 +32,8 @@ static const uint32_t dhcpmon_default_health_check_window = 18; * with DHCP relay */ static const uint32_t dhcpmon_default_unhealthy_max_count = 10; +bool dual_tor_sock = false; + /** * @code usage(prog); * @@ -134,6 +139,7 @@ int main(int argc, char **argv) i += 2; break; case 'u': + dual_tor_sock = true; if (dhcp_devman_setup_dual_tor_mode(argv[i + 1]) != 0) { usage(basename(argv[0])); } diff --git a/src/dhcpmon/src/subdir.mk b/src/dhcpmon/src/subdir.mk index 324977aa39f7..dd808aeb7202 100644 --- a/src/dhcpmon/src/subdir.mk +++ b/src/dhcpmon/src/subdir.mk @@ -1,11 +1,11 @@ # Add inputs and outputs from these tool invocations to the build variables -CC := gcc +CC := g++ C_SRCS += \ -../src/dhcp_device.c \ -../src/dhcp_devman.c \ -../src/dhcp_mon.c \ -../src/main.c +../src/dhcp_device.cpp \ +../src/dhcp_devman.cpp \ +../src/dhcp_mon.cpp \ +../src/main.cpp OBJS += \ ./src/dhcp_device.o \ @@ -21,9 +21,9 @@ C_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -src/%.o: ../src/%.c +src/%.o: src/%.cpp @echo 'Building file: $<' @echo 'Invoking: GCC C Compiler' - $(CC) -O3 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<" + $(CC) -O3 -g3 -Wall -I$(PWD)/../sonic-swss-common/common -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<" @echo 'Finished building: $<' @echo ' ' From fc9387188165128d26cf0760a3e85722d625070e Mon Sep 17 00:00:00 2001 From: tjchadaga <85581939+tjchadaga@users.noreply.github.com> Date: Tue, 12 Jul 2022 00:22:48 -0700 Subject: [PATCH 140/259] Changes to persist TSA/B state across reloads (#11257) --- dockers/docker-fpm-frr/base_image_files/TS | 25 +++- dockers/docker-fpm-frr/base_image_files/TSA | 24 ++-- dockers/docker-fpm-frr/base_image_files/TSB | 19 +++- files/build_templates/init_cfg.json.j2 | 5 + src/sonic-bgpcfgd/bgpcfgd/main.py | 4 + src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py | 7 +- .../bgpcfgd/managers_device_global.py | 101 +++++++++++++++++ .../peer-group.conf/result_all_isolate.conf | 33 ++++++ .../peer-group.conf/result_all_unisolate.conf | 29 +++++ .../peer-group.conf/result_isolate.conf | 11 ++ .../peer-group.conf/result_unisolate.conf | 7 ++ src/sonic-bgpcfgd/tests/test_device_global.py | 107 ++++++++++++++++++ 12 files changed, 354 insertions(+), 18 deletions(-) create mode 100644 src/sonic-bgpcfgd/bgpcfgd/managers_device_global.py create mode 100644 src/sonic-bgpcfgd/tests/data/general/peer-group.conf/result_all_isolate.conf create mode 100644 src/sonic-bgpcfgd/tests/data/general/peer-group.conf/result_all_unisolate.conf create mode 100644 src/sonic-bgpcfgd/tests/data/general/peer-group.conf/result_isolate.conf create mode 100644 src/sonic-bgpcfgd/tests/data/general/peer-group.conf/result_unisolate.conf create mode 100644 src/sonic-bgpcfgd/tests/test_device_global.py diff --git a/dockers/docker-fpm-frr/base_image_files/TS b/dockers/docker-fpm-frr/base_image_files/TS index de1e50b7a306..4ee085282be8 100755 --- a/dockers/docker-fpm-frr/base_image_files/TS +++ b/dockers/docker-fpm-frr/base_image_files/TS @@ -5,6 +5,12 @@ PLATFORM=${PLATFORM:-`sonic-cfggen -H -v DEVICE_METADATA.localhost.platform`} +if [[ $1 == "TSA" ]]; then + TSA_STATE_UPDATE='{"BGP_DEVICE_GLOBAL":{"STATE":{"tsa_enabled": "true"}}}' +elif [[ $1 == "TSB" ]]; then + TSA_STATE_UPDATE='{"BGP_DEVICE_GLOBAL":{"STATE":{"tsa_enabled": "false"}}}' +fi + # Parse the device specific asic conf file, if it exists ASIC_CONF=/usr/share/sonic/device/$PLATFORM/asic.conf [ -f $ASIC_CONF ] && . $ASIC_CONF @@ -20,10 +26,25 @@ if [[ ($NUM_ASIC -gt 1) ]]; then if [ $sub_role == 'FrontEnd' ] then echo -e "BGP"$asic" : \c" - docker exec -i bgp$asic /usr/bin/$1 + if [[ -n "$TSA_STATE_UPDATE" ]]; then + sonic-cfggen -a "$TSA_STATE_UPDATE" -w -n $NAMESPACE_PREFIX$asic + logger -t $1 -p user.info "BGP$asic: System Mode: Normal -> Maintenance" + echo "BGP$asic: System Mode: Normal -> Maintenance" + else + # If TSC is executed, invoke FRR script to check installed route-maps + docker exec -i bgp$asic /usr/bin/$1 + fi fi asic=$[$asic+1] done else - docker exec -i bgp /usr/bin/$1 + if [[ -n "$TSA_STATE_UPDATE" ]]; then + sonic-cfggen -a "$TSA_STATE_UPDATE" -w + logger -t $1 -p user.info "System Mode: Normal -> Maintenance" + echo "System Mode: Normal -> Maintenance" + else + # If TSC is executed, invoke FRR script to check installed route-maps + docker exec -i bgp /usr/bin/$1 + fi fi + diff --git a/dockers/docker-fpm-frr/base_image_files/TSA b/dockers/docker-fpm-frr/base_image_files/TSA index 6b2ddb264834..8c37525ef0a9 100755 --- a/dockers/docker-fpm-frr/base_image_files/TSA +++ b/dockers/docker-fpm-frr/base_image_files/TSA @@ -1,12 +1,20 @@ #!/bin/bash -# toggle the mux to standby if dualtor and any mux active -if -[[ "$(sonic-cfggen -d -v DEVICE_METADATA.localhost.subtype | tr [:upper:] [:lower:])" == *"dualtor"* ]] && -[[ $(show mux status | grep active | wc -l) > 0 ]]; -then - logger -t TSA -p user.info "Toggle all mux mode to standby" - sudo config mux mode standby all + +if [[ "$(sonic-cfggen -d -v BGP_DEVICE_GLOBAL.STATE.tsa_enabled)" == "true" ]]; then + echo "System is already in Maintenance" + logger -t TSA -p user.info "System is already in Maintenance" +else + # toggle the mux to standby if dualtor and any mux active + if + [[ "$(sonic-cfggen -d -v DEVICE_METADATA.localhost.subtype | tr [:upper:] [:lower:])" == *"dualtor"* ]] && + [[ $(show mux status | grep active | wc -l) > 0 ]]; + then + logger -t TSA -p user.info "Toggle all mux mode to standby" + sudo config mux mode standby all + fi + + /usr/bin/TS TSA + echo "Please execute 'config save' to preserve System mode in Maintenance after reboot or config reload" fi -/usr/bin/TS TSA diff --git a/dockers/docker-fpm-frr/base_image_files/TSB b/dockers/docker-fpm-frr/base_image_files/TSB index 3fed7bb644f5..5f8d90160fcb 100755 --- a/dockers/docker-fpm-frr/base_image_files/TSB +++ b/dockers/docker-fpm-frr/base_image_files/TSB @@ -1,10 +1,17 @@ #!/bin/bash -# toggle the mux to auto if dualtor -if [[ "$(sonic-cfggen -d -v DEVICE_METADATA.localhost.subtype | tr [:upper:] [:lower:])" == *"dualtor"* ]]; -then - logger -t TSB -p user.info "Toggle all mux mode to auto" - sudo config mux mode auto all +if [[ "$(sonic-cfggen -d -v BGP_DEVICE_GLOBAL.STATE.tsa_enabled)" == "false" ]]; then + echo "System is already in Normal mode" + logger -t TSB -p user.info "System is already in Normal mode" +else + # toggle the mux to auto if dualtor + if [[ "$(sonic-cfggen -d -v DEVICE_METADATA.localhost.subtype | tr [:upper:] [:lower:])" == *"dualtor"* ]]; + then + logger -t TSB -p user.info "Toggle all mux mode to auto" + sudo config mux mode auto all + fi + + /usr/bin/TS TSB + echo "Please execute 'config save' to preserve System mode in Normal state after reboot or config reload" fi -/usr/bin/TS TSB diff --git a/files/build_templates/init_cfg.json.j2 b/files/build_templates/init_cfg.json.j2 index a197c22a9020..31683753ed95 100644 --- a/files/build_templates/init_cfg.json.j2 +++ b/files/build_templates/init_cfg.json.j2 @@ -27,6 +27,11 @@ "POLL_INTERVAL": "10000" } }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "tsa_enabled": "false" + } + }, {%- set features = [("bgp", "enabled", false, "enabled"), ("database", "always_enabled", false, "always_enabled"), ("lldp", "enabled", true, "enabled"), diff --git a/src/sonic-bgpcfgd/bgpcfgd/main.py b/src/sonic-bgpcfgd/bgpcfgd/main.py index 7b4291b4d4a3..f777867eaacc 100644 --- a/src/sonic-bgpcfgd/bgpcfgd/main.py +++ b/src/sonic-bgpcfgd/bgpcfgd/main.py @@ -18,6 +18,7 @@ from .managers_setsrc import ZebraSetSrc from .managers_static_rt import StaticRouteMgr from .managers_rm import RouteMapMgr +from .managers_device_global import DeviceGlobalCfgMgr from .runner import Runner, signal_handler from .template import TemplateFabric from .utils import read_constants @@ -64,6 +65,8 @@ def do_work(): # Route Advertisement Managers AdvertiseRouteMgr(common_objs, "STATE_DB", swsscommon.STATE_ADVERTISE_NETWORK_TABLE_NAME), RouteMapMgr(common_objs, "APPL_DB", swsscommon.APP_BGP_PROFILE_TABLE_NAME), + # Device Global Manager + DeviceGlobalCfgMgr(common_objs, "CONFIG_DB", swsscommon.CFG_BGP_DEVICE_GLOBAL_TABLE_NAME), ] runner = Runner(common_objs['cfg_mgr']) for mgr in managers: @@ -96,3 +99,4 @@ def main(): sys.exit(rc) except SystemExit: os._exit(rc) + diff --git a/src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py b/src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py index c787ae2abe69..55a16a273993 100644 --- a/src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py +++ b/src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py @@ -8,6 +8,7 @@ from .manager import Manager from .template import TemplateFabric from .utils import run_command +from .managers_device_global import DeviceGlobalCfgMgr class BGPPeerGroupMgr(object): @@ -23,6 +24,7 @@ def __init__(self, common_objs, base_template): tf = common_objs['tf'] self.policy_template = tf.from_file(base_template + "policies.conf.j2") self.peergroup_template = tf.from_file(base_template + "peer-group.conf.j2") + self.device_global_cfgmgr = DeviceGlobalCfgMgr(common_objs, "CONFIG_DB", swsscommon.CFG_BGP_DEVICE_GLOBAL_TABLE_NAME) def update(self, name, **kwargs): """ @@ -56,14 +58,15 @@ def update_pg(self, name, **kwargs): """ try: pg = self.peergroup_template.render(**kwargs) + tsa_rm = self.device_global_cfgmgr.check_state_and_get_tsa_routemaps(pg) except jinja2.TemplateError as e: log_err("Can't render peer-group template: '%s': %s" % (name, str(e))) return False if kwargs['vrf'] == 'default': - cmd = ('router bgp %s\n' % kwargs['bgp_asn']) + pg + cmd = ('router bgp %s\n' % kwargs['bgp_asn']) + pg + tsa_rm else: - cmd = ('router bgp %s vrf %s\n' % (kwargs['bgp_asn'], kwargs['vrf'])) + pg + cmd = ('router bgp %s vrf %s\n' % (kwargs['bgp_asn'], kwargs['vrf'])) + pg + tsa_rm self.update_entity(cmd, "Peer-group for peer '%s'" % name) return True diff --git a/src/sonic-bgpcfgd/bgpcfgd/managers_device_global.py b/src/sonic-bgpcfgd/bgpcfgd/managers_device_global.py new file mode 100644 index 000000000000..1d30a5b94a64 --- /dev/null +++ b/src/sonic-bgpcfgd/bgpcfgd/managers_device_global.py @@ -0,0 +1,101 @@ +from .manager import Manager +from .log import log_err, log_debug, log_notice +import re +from swsscommon import swsscommon + +class DeviceGlobalCfgMgr(Manager): + """This class responds to change in device-specific state""" + + def __init__(self, common_objs, db, table): + """ + Initialize the object + :param common_objs: common object dictionary + :param db: name of the db + :param table: name of the table in the db + """ + self.directory = common_objs['directory'] + self.cfg_mgr = common_objs['cfg_mgr'] + self.constants = common_objs['constants'] + self.tsa_template = common_objs['tf'].from_file("bgpd/tsa/bgpd.tsa.isolate.conf.j2") + self.tsb_template = common_objs['tf'].from_file("bgpd/tsa/bgpd.tsa.unisolate.conf.j2") + super(DeviceGlobalCfgMgr, self).__init__( + common_objs, + [], + db, + table, + ) + + def set_handler(self, key, data): + log_debug("DeviceGlobalCfgMgr:: set handler") + """ Handle device tsa_enabled state change """ + if not data: + log_err("DeviceGlobalCfgMgr:: data is None") + return False + + if "tsa_enabled" in data: + self.cfg_mgr.commit() + self.cfg_mgr.update() + self.isolate_unisolate_device(data["tsa_enabled"]) + self.directory.put(self.db_name, self.table_name, "tsa_enabled", data["tsa_enabled"]) + return True + return False + + def del_handler(self, key): + log_debug("DeviceGlobalCfgMgr:: del handler") + return True + + def check_state_and_get_tsa_routemaps(self, cfg): + """ API to get TSA route-maps if device is isolated""" + cmd = "" + if self.directory.path_exist("CONFIG_DB", swsscommon.CFG_BGP_DEVICE_GLOBAL_TABLE_NAME, "tsa_enabled"): + tsa_status = self.directory.get_slot("CONFIG_DB", swsscommon.CFG_BGP_DEVICE_GLOBAL_TABLE_NAME)["tsa_enabled"] + if tsa_status == "true": + cmds = cfg.replace("#012", "\n").split("\n") + log_notice("DeviceGlobalCfgMgr:: Device is isolated. Applying TSA route-maps") + cmd = self.get_ts_routemaps(cmds, self.tsa_template) + return cmd + + def isolate_unisolate_device(self, tsa_status): + """ API to get TSA/TSB route-maps and apply configuration""" + cmd = "\n" + if tsa_status == "true": + log_notice("DeviceGlobalCfgMgr:: Device isolated. Executing TSA") + cmd += self.get_ts_routemaps(self.cfg_mgr.get_text(), self.tsa_template) + else: + log_notice("DeviceGlobalCfgMgr:: Device un-isolated. Executing TSB") + cmd += self.get_ts_routemaps(self.cfg_mgr.get_text(), self.tsb_template) + + self.cfg_mgr.push(cmd) + log_debug("DeviceGlobalCfgMgr::Done") + + def get_ts_routemaps(self, cmds, ts_template): + if not cmds: + return "" + + route_map_names = self.__extract_out_route_map_names(cmds) + return self.__generate_routemaps_from_template(route_map_names, ts_template) + + def __generate_routemaps_from_template(self, route_map_names, template): + cmd = "\n" + for rm in sorted(route_map_names): + if "_INTERNAL_" in rm: + continue + if "V4" in rm: + ipv="V4" ; ipp="ip" + elif "V6" in rm: + ipv="V6" ; ipp="ipv6" + else: + continue + cmd += template.render(route_map_name=rm,ip_version=ipv,ip_protocol=ipp, constants=self.constants) + cmd += "\n" + return cmd + + def __extract_out_route_map_names(self, cmds): + route_map_names = set() + out_route_map = re.compile(r'^\s*neighbor \S+ route-map (\S+) out$') + for line in cmds: + result = out_route_map.match(line) + if result: + route_map_names.add(result.group(1)) + return route_map_names + diff --git a/src/sonic-bgpcfgd/tests/data/general/peer-group.conf/result_all_isolate.conf b/src/sonic-bgpcfgd/tests/data/general/peer-group.conf/result_all_isolate.conf new file mode 100644 index 000000000000..a078dadd6f04 --- /dev/null +++ b/src/sonic-bgpcfgd/tests/data/general/peer-group.conf/result_all_isolate.conf @@ -0,0 +1,33 @@ +! +! template: bgpd/templates/general/peer-group.conf.j2 +! + neighbor PEER_V4 peer-group + neighbor PEER_V6 peer-group + address-family ipv4 + neighbor PEER_V4 allowas-in 1 + neighbor PEER_V4 soft-reconfiguration inbound + neighbor PEER_V4 route-map FROM_BGP_PEER_V4 in + neighbor PEER_V4 route-map TO_BGP_PEER_V4 out + exit-address-family + address-family ipv6 + neighbor PEER_V6 allowas-in 1 + neighbor PEER_V6 soft-reconfiguration inbound + neighbor PEER_V6 route-map FROM_BGP_PEER_V6 in + neighbor PEER_V6 route-map TO_BGP_PEER_V6 out + exit-address-family +! +! end of template: bgpd/templates/general/peer-group.conf.j2 +! + + +route-map TO_BGP_PEER_V4 permit 20 + match ip address prefix-list PL_LoopbackV4 + set community 12345:12345 +route-map TO_BGP_PEER_V4 deny 30 +! +route-map TO_BGP_PEER_V6 permit 20 + match ipv6 address prefix-list PL_LoopbackV6 + set community 12345:12345 +route-map TO_BGP_PEER_V6 deny 30 +! + diff --git a/src/sonic-bgpcfgd/tests/data/general/peer-group.conf/result_all_unisolate.conf b/src/sonic-bgpcfgd/tests/data/general/peer-group.conf/result_all_unisolate.conf new file mode 100644 index 000000000000..1cd4442f4f3d --- /dev/null +++ b/src/sonic-bgpcfgd/tests/data/general/peer-group.conf/result_all_unisolate.conf @@ -0,0 +1,29 @@ +! +! template: bgpd/templates/general/peer-group.conf.j2 +! + neighbor PEER_V4 peer-group + neighbor PEER_V6 peer-group + address-family ipv4 + neighbor PEER_V4 allowas-in 1 + neighbor PEER_V4 soft-reconfiguration inbound + neighbor PEER_V4 route-map FROM_BGP_PEER_V4 in + neighbor PEER_V4 route-map TO_BGP_PEER_V4 out + exit-address-family + address-family ipv6 + neighbor PEER_V6 allowas-in 1 + neighbor PEER_V6 soft-reconfiguration inbound + neighbor PEER_V6 route-map FROM_BGP_PEER_V6 in + neighbor PEER_V6 route-map TO_BGP_PEER_V6 out + exit-address-family +! +! end of template: bgpd/templates/general/peer-group.conf.j2 +! + + +no route-map TO_BGP_PEER_V4 permit 20 +no route-map TO_BGP_PEER_V4 deny 30 +! +no route-map TO_BGP_PEER_V6 permit 20 +no route-map TO_BGP_PEER_V6 deny 30 +! + diff --git a/src/sonic-bgpcfgd/tests/data/general/peer-group.conf/result_isolate.conf b/src/sonic-bgpcfgd/tests/data/general/peer-group.conf/result_isolate.conf new file mode 100644 index 000000000000..902b8cfcdab9 --- /dev/null +++ b/src/sonic-bgpcfgd/tests/data/general/peer-group.conf/result_isolate.conf @@ -0,0 +1,11 @@ + +route-map TO_BGP_PEER_V4 permit 20 + match ip address prefix-list PL_LoopbackV4 + set community 12345:12345 +route-map TO_BGP_PEER_V4 deny 30 +! +route-map TO_BGP_PEER_V6 permit 20 + match ipv6 address prefix-list PL_LoopbackV6 + set community 12345:12345 +route-map TO_BGP_PEER_V6 deny 30 +! diff --git a/src/sonic-bgpcfgd/tests/data/general/peer-group.conf/result_unisolate.conf b/src/sonic-bgpcfgd/tests/data/general/peer-group.conf/result_unisolate.conf new file mode 100644 index 000000000000..8fd9fde7f759 --- /dev/null +++ b/src/sonic-bgpcfgd/tests/data/general/peer-group.conf/result_unisolate.conf @@ -0,0 +1,7 @@ + +no route-map TO_BGP_PEER_V4 permit 20 +no route-map TO_BGP_PEER_V4 deny 30 +! +no route-map TO_BGP_PEER_V6 permit 20 +no route-map TO_BGP_PEER_V6 deny 30 +! diff --git a/src/sonic-bgpcfgd/tests/test_device_global.py b/src/sonic-bgpcfgd/tests/test_device_global.py new file mode 100644 index 000000000000..eae1ff424e1f --- /dev/null +++ b/src/sonic-bgpcfgd/tests/test_device_global.py @@ -0,0 +1,107 @@ +from unittest.mock import MagicMock, patch + +import os +from bgpcfgd.directory import Directory +from bgpcfgd.template import TemplateFabric +from . import swsscommon_test +from .util import load_constants +import bgpcfgd.managers_device_global +from swsscommon import swsscommon + +TEMPLATE_PATH = os.path.abspath('../../dockers/docker-fpm-frr/frr') +BASE_PATH = os.path.abspath('../sonic-bgpcfgd/tests/data/general/peer-group.conf/') + +def constructor(): + cfg_mgr = MagicMock() + def get_text(): + text = [] + for line in cfg_mgr.changes.split('\n'): + if line.lstrip().startswith('!'): + continue + text.append(line) + text += [" "] + return text + def update(): + cfg_mgr.changes = get_string_from_file("/result_all.conf") + def push(cfg): + cfg_mgr.changes += cfg + "\n" + def get_config(): + return cfg_mgr.changes + cfg_mgr.get_text = get_text + cfg_mgr.update = update + cfg_mgr.push = push + cfg_mgr.get_config = get_config + + constants = load_constants()['constants'] + common_objs = { + 'directory': Directory(), + 'cfg_mgr': cfg_mgr, + 'tf': TemplateFabric(TEMPLATE_PATH), + 'constants': constants + } + mgr = bgpcfgd.managers_device_global.DeviceGlobalCfgMgr(common_objs, "CONFIG_DB", swsscommon.CFG_BGP_DEVICE_GLOBAL_TABLE_NAME) + cfg_mgr.update() + return mgr + + +@patch('bgpcfgd.managers_device_global.log_debug') +def test_isolate_device(mocked_log_info): + m = constructor() + res = m.set_handler("STATE", {"tsa_enabled": "true"}) + assert res, "Expect True return value for set_handler" + mocked_log_info.assert_called_with("DeviceGlobalCfgMgr::Done") + assert m.cfg_mgr.get_config() == get_string_from_file("/result_all_isolate.conf") + +@patch('bgpcfgd.managers_device_global.log_debug') +def test_unisolate_device(mocked_log_info): + m = constructor() + res = m.set_handler("STATE", {"tsa_enabled": "false"}) + assert res, "Expect True return value for set_handler" + mocked_log_info.assert_called_with("DeviceGlobalCfgMgr::Done") + assert m.cfg_mgr.get_config() == get_string_from_file("/result_all_unisolate.conf") + +def test_check_state_and_get_tsa_routemaps(): + m = constructor() + m.set_handler("STATE", {"tsa_enabled": "true"}) + res = m.check_state_and_get_tsa_routemaps(m.cfg_mgr.get_config()) + assert res == get_string_from_file("/result_isolate.conf") + + m.set_handler("STATE", {"tsa_enabled": "false"}) + res = m.check_state_and_get_tsa_routemaps(m.cfg_mgr.get_config()) + assert res == "" + +def test_get_tsa_routemaps(): + m = constructor() + assert m.get_ts_routemaps([], m.tsa_template) == "" + + res = m.get_ts_routemaps(m.cfg_mgr.get_text(), m.tsa_template) + expected_res = get_string_from_file("/result_isolate.conf") + assert res == expected_res + +def test_get_tsb_routemaps(): + m = constructor() + assert m.get_ts_routemaps([], m.tsb_template) == "" + + res = m.get_ts_routemaps(m.cfg_mgr.get_text(), m.tsb_template) + expected_res = get_string_from_file("/result_unisolate.conf") + assert res == expected_res + +def get_string_from_file(filename): + fp = open(BASE_PATH + filename, "r") + cfg = fp.read() + fp.close() + + return cfg + +@patch('bgpcfgd.managers_device_global.log_err') +def test_set_handler_failure_case(mocked_log_info): + m = constructor() + res = m.set_handler("STATE", {}) + assert res == False, "Expect False return value for invalid data passed to set_handler" + mocked_log_info.assert_called_with("DeviceGlobalCfgMgr:: data is None") + +def test_del_handler(): + m = constructor() + res = m.del_handler("STATE") + assert res, "Expect True return value for del_handler" + From b4d8ee3fec74b91db3ebb301b4dea641ea5e6656 Mon Sep 17 00:00:00 2001 From: Stephen Sun <5379172+stephenxs@users.noreply.github.com> Date: Wed, 20 Jul 2022 14:48:15 +0800 Subject: [PATCH 141/259] [Mellanox] Support Mellanox-SN4600C-C64 as T1 switch in dual-ToR scenario (#11261) - Why I did it Support Mellanox-SN4600C-C64 as T1 switch in dual-ToR scenario This is to port #11032 and #11299 from 202012 to master. Support additional queue and PG in buffer templates, including both traditional and dynamic model Support mapping DSCP 2/6 to lossless traffic in the QoS template. Add macros to generate additional lossless PG in the dynamic model Adjust the order in which the generic/dedicated (with additional lossless queues) macros are checked and called to generate buffer tables in common template buffers_config.j2 Buffer tables are rendered via using macros. Both generic and dedicated macros are defined on our platform. Currently, the generic one is called as long as it is defined, which causes the generic one always being called on our platform. To avoid it, the dedicated macrio is checked and called first and then the generic ones. Support MAP_PFC_PRIORITY_TO_PRIORITY_GROUP on ports with additional lossless queues. On Mellanox-SN4600C-C64, buffer configuration for t1 is calculated as: 40 * 100G downlink ports with 4 lossless PGs/queues, 1 lossy PG, and 3 lossy queues 16 * 100G uplink ports with 2 lossless PGs/queues, 1 lossy PG, and 5 lossy queues Signed-off-by: Stephen Sun --- .../buffers_defaults_objects.j2 | 66 +- .../buffers_defaults_t1.j2 | 15 + .../Mellanox-SN4600C-C64/qos.json.j2 | 176 +- files/build_templates/buffers_config.j2 | 16 +- files/build_templates/qos_config.j2 | 16 + ...anox-4600c-t1-minigraph-remap-disabled.xml | 2460 ++++++++++++++++ .../sample-mellanox-4600c-t1-minigraph.xml | 2468 +++++++++++++++++ ...llanox4600c-t1-dynamic-remap-disabled.json | 1481 ++++++++++ .../py3/buffers-mellanox4600c-t1-dynamic.json | 1660 +++++++++++ ...ffers-mellanox4600c-t1-remap-disabled.json | 1306 +++++++++ .../py3/buffers-mellanox4600c-t1.json | 1425 ++++++++++ .../qos-mellanox4600c-c64-remap-disabled.json | 1005 +++++++ .../py3/qos-mellanox4600c-c64.json | 1111 ++++++++ src/sonic-config-engine/tests/test_j2files.py | 17 +- 14 files changed, 13209 insertions(+), 13 deletions(-) mode change 120000 => 100644 device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/qos.json.j2 create mode 100644 src/sonic-config-engine/tests/sample-mellanox-4600c-t1-minigraph-remap-disabled.xml create mode 100644 src/sonic-config-engine/tests/sample-mellanox-4600c-t1-minigraph.xml create mode 100644 src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic-remap-disabled.json create mode 100644 src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic.json create mode 100644 src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-remap-disabled.json create mode 100644 src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1.json create mode 100644 src/sonic-config-engine/tests/sample_output/py3/qos-mellanox4600c-c64-remap-disabled.json create mode 100644 src/sonic-config-engine/tests/sample_output/py3/qos-mellanox4600c-c64.json diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/buffers_defaults_objects.j2 b/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/buffers_defaults_objects.j2 index 92014175581c..e960447574c5 100644 --- a/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/buffers_defaults_objects.j2 +++ b/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/buffers_defaults_objects.j2 @@ -124,24 +124,55 @@ } {%- endmacro %} -{%- macro generate_queue_buffers(port_names_active, port_names_inactive) %} +{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names_active, port_names_extra_queues, port_names_inactive) %} "BUFFER_QUEUE": { +{% set q_loop = namespace(last_valid=false) %} {% for port in port_names_active.split(',') %} +{% if port not in port_names_extra_queues.split(',') %} "{{ port }}|3-4": { "profile" : "egress_lossless_profile" }, +{% endif %} {% endfor %} {% for port in port_names_active.split(',') %} +{% if port not in port_names_extra_queues.split(',') %} "{{ port }}|0-2": { "profile" : "q_lossy_profile" }, +{% endif %} {% endfor %} {% for port in port_names_active.split(',') %} +{% if port not in port_names_extra_queues.split(',') %} "{{ port }}|5-6": { "profile" : "q_lossy_profile" }{% if not loop.last %},{% endif %} +{% set q_loop.last_valid = true %} +{% else %} +{% set q_loop.last_valid = false %} +{% endif %} +{% endfor %} +{% if port_names_extra_queues|length > 0 %} +{% if q_loop.last_valid %},{% endif %} +{% for port in port_names_extra_queues.split(',') %} + "{{ port }}|0-1": { + "profile" : "q_lossy_profile" + }, + "{{ port }}|2-4": { + "profile" : "egress_lossless_profile" + }, + "{{ port }}|5": { + "profile" : "q_lossy_profile" + }, + "{{ port }}|6": { + "profile" : "egress_lossless_profile" + }, + "{{ port }}|7": { + "profile" : "q_lossy_profile" + }{% if not loop.last %},{% endif %} + {% endfor %} +{% endif %} {% if port_names_inactive|length > 0 %} , {% if dynamic_mode is defined %} @@ -183,9 +214,15 @@ } {%- endmacro %} -{%- macro generate_pg_profiles(port_names_active, port_names_inactive) %} +{%- macro generate_queue_buffers(port_names_active, port_names_inactive) %} +{{ generate_queue_buffers_with_extra_lossless_queues(port_names_active, "", port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_extra_lossless_pgs(port_names_active, port_names_extra_pgs, port_names_inactive) %} "BUFFER_PG": { +{% set pg_loop = namespace(last_valid=false) %} {% for port in port_names_active.split(',') %} +{% if port not in port_names_extra_pgs.split(',') %} {% if dynamic_mode is defined %} "{{ port }}|3-4": { "profile" : "NULL" @@ -195,7 +232,28 @@ "profile" : "ingress_lossy_profile" }{% if not loop.last %},{% endif %} +{% set pg_loop.last_valid = true %} +{% else %} +{% set pg_loop.last_valid = false %} +{% endif %} {% endfor %} +{% if port_names_extra_pgs|length > 0 %} +{% if pg_loop.last_valid %},{% endif %} +{% for port in port_names_extra_pgs.split(',') %} +{% if dynamic_mode is defined %} + "{{ port }}|2-4": { + "profile" : "NULL" + }, + "{{ port }}|6": { + "profile" : "NULL" + }, +{% endif %} + "{{ port }}|0": { + "profile" : "ingress_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% endif %} {% if port_names_inactive|length > 0 %} {%- for port in port_names_inactive.split(',') %} {%- if loop.first -%},{%- endif -%} @@ -216,3 +274,7 @@ {% endif %} } {%- endmacro %} + +{%- macro generate_pg_profiles(port_names_active, port_names_inactive) %} +{{ generate_pg_profiles_with_extra_lossless_pgs(port_names_active, "", port_names_inactive) }} +{%- endmacro %} diff --git a/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/buffers_defaults_t1.j2 b/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/buffers_defaults_t1.j2 index d77d5cc1f136..12891e954859 100644 --- a/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/buffers_defaults_t1.j2 +++ b/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/buffers_defaults_t1.j2 @@ -15,10 +15,17 @@ limitations under the License. #} {% set default_cable = '5m' %} +{%- if ((SYSTEM_DEFAULTS is defined) and ('tunnel_qos_remap' in SYSTEM_DEFAULTS) and (SYSTEM_DEFAULTS['tunnel_qos_remap']['status'] == 'enabled')) -%} +{% set ingress_lossless_pool_size = '44130304' %} +{% set ingress_lossless_pool_xoff = '8790016' %} +{% set egress_lossless_pool_size = '60817392' %} +{% set egress_lossy_pool_size = '44130304' %} +{%- else -%} {% set ingress_lossless_pool_size = '48332800' %} {% set ingress_lossless_pool_xoff = '5275648' %} {% set egress_lossless_pool_size = '60817392' %} {% set egress_lossy_pool_size = '48332800' %} +{%- endif -%} {% import 'buffers_defaults_objects.j2' as defs with context %} @@ -30,10 +37,18 @@ {{ defs.generate_profile_lists(port_names_active, port_names_inactive) }} {%- endmacro %} +{%- macro generate_queue_buffers_with_extra_lossless_queues_with_inactive_ports(port_names_active, port_names_extra_queues, port_names_inactive) %} +{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names_active, port_names_extra_queues, port_names_inactive) }} +{%- endmacro %} + {%- macro generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) %} {{ defs.generate_queue_buffers(port_names_active, port_names_inactive) }} {%- endmacro %} +{%- macro generate_pg_profiles_with_extra_lossless_pgs_with_inactive_ports(port_names_active, port_names_extra_pgs, port_names_inactive) %} +{{ defs.generate_pg_profiles_with_extra_lossless_pgs(port_names_active, port_names_extra_pgs, port_names_inactive) }} +{%- endmacro %} + {%- macro generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) %} {{ defs.generate_pg_profiles(port_names_active, port_names_inactive) }} {%- endmacro %} diff --git a/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/qos.json.j2 b/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/qos.json.j2 deleted file mode 120000 index eccf286dc879..000000000000 --- a/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/qos.json.j2 +++ /dev/null @@ -1 +0,0 @@ -../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/qos.json.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/qos.json.j2 b/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/qos.json.j2 new file mode 100644 index 000000000000..6134402aad53 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/qos.json.j2 @@ -0,0 +1,175 @@ +{# + Copyright (c) 2020-2021 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{% if ('type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'LeafRouter') %} +{% set different_dscp_to_tc_map = true %} +{%- macro generate_dscp_to_tc_map() %} + "DSCP_TO_TC_MAP": { + "AZURE": { + "0" : "1", + "1" : "1", + "2" : "2", + "3" : "3", + "4" : "4", + "5" : "1", + "6" : "6", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "1", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "7", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" + }, + "AZURE_UPLINK": { + "0" : "1", + "1" : "1", + "2" : "1", + "3" : "3", + "4" : "4", + "5" : "1", + "6" : "1", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "1", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "7", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" + } + }, +{%- endmacro %} +{%- macro generate_tc_to_pg_map() %} + "TC_TO_PRIORITY_GROUP_MAP": { + "AZURE": { + "0": "0", + "1": "0", + "2": "2", + "3": "3", + "4": "4", + "5": "0", + "6": "6", + "7": "0" + } + }, +{%- endmacro %} +{%- macro generate_global_dscp_to_tc_map() %} +{# This is an empty macro since the global DSCP_TO_TC map is not required #} +{%- endmacro %} + +{% endif %} + +{%- include 'qos_config.j2' %} diff --git a/files/build_templates/buffers_config.j2 b/files/build_templates/buffers_config.j2 index f03a7f9f63e3..0a72e325824a 100644 --- a/files/build_templates/buffers_config.j2 +++ b/files/build_templates/buffers_config.j2 @@ -168,14 +168,16 @@ def {{ defs.generate_profile_lists_with_inactive_ports(port_names_active, port_names_inactive) }}, {% endif %} -{%- if defs.generate_pg_profils is defined %} -{{ defs.generate_pg_profils(port_names_active) }} +{% if (defs.generate_pg_profiles_with_extra_lossless_pgs_with_inactive_ports is defined) and (port_names_extra_queues != '') %} +{{ defs.generate_pg_profiles_with_extra_lossless_pgs_with_inactive_ports(port_names_active, port_names_extra_queues, port_names_inactive) }}, {% elif defs.generate_pg_profiles_with_inactive_ports is defined %} {{ defs.generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) }}, {% elif (defs.generate_pg_buffers_with_extra_lossy_pgs is defined) and (port_names_extra_queues != '') %} {{ defs.generate_pg_buffers_with_extra_lossy_pgs(port_names_active, port_names_extra_queues) }} {% elif (defs.generate_pg_buffers_with_extra_lossy_pgs_with_inactive_ports is defined) and (port_names_extra_queues != '') %} {{ defs.generate_pg_buffers_with_extra_lossy_pgs_with_inactive_ports(port_names_active, port_names_extra_queues, port_names_inactive) }} +{% elif defs.generate_pg_profils is defined %} +{{ defs.generate_pg_profils(port_names_active) }} {% else %} "BUFFER_PG": { {% for port in PORT_ACTIVE %} @@ -192,14 +194,14 @@ def }, {% endif %} -{% if defs.generate_queue_buffers is defined %} -{{ defs.generate_queue_buffers(port_names_active) }} -{% elif defs.generate_queue_buffers_with_inactive_ports is defined %} -{{ defs.generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) }} -{% elif (defs.generate_queue_buffers_with_extra_lossless_queues_with_inactive_ports is defined) and (port_names_extra_queues != '') %} +{% if (defs.generate_queue_buffers_with_extra_lossless_queues_with_inactive_ports is defined) and (port_names_extra_queues != '') %} {{ defs.generate_queue_buffers_with_extra_lossless_queues_with_inactive_ports(port_names_active, port_names_extra_queues, port_names_inactive) }} {% elif (defs.generate_queue_buffers_with_extra_lossless_queues is defined) and (port_names_extra_queues != '') %} {{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names_active, port_names_extra_queues) }} +{% elif defs.generate_queue_buffers is defined %} +{{ defs.generate_queue_buffers(port_names_active) }} +{% elif defs.generate_queue_buffers_with_inactive_ports is defined %} +{{ defs.generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) }} {% else %} "BUFFER_QUEUE": { {% for port in PORT_ACTIVE %} diff --git a/files/build_templates/qos_config.j2 b/files/build_templates/qos_config.j2 index b2a7b9c63f51..358a114c11fb 100644 --- a/files/build_templates/qos_config.j2 +++ b/files/build_templates/qos_config.j2 @@ -212,6 +212,14 @@ {% endif %} {% if asic_type in pfc_to_pg_map_supported_asics %} "PFC_PRIORITY_TO_PRIORITY_GROUP_MAP": { +{% if port_names_list_extra_queues|length > 0 %} + "AZURE_DUALTOR": { + "2": "2", + "3": "3", + "4": "4", + "6": "6" + }, +{% endif %} "AZURE": { "3": "3", "4": "4" @@ -230,15 +238,23 @@ "{{ port }}": { {% if 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] in backend_device_types and 'storage_device' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['storage_device'] == 'true' %} "dot1p_to_tc_map" : "AZURE", +{% else %} +{% if different_dscp_to_tc_map and port not in port_names_list_extra_queues and tunnel_qos_remap_enable %} + "dscp_to_tc_map" : "AZURE_UPLINK", {% else %} "dscp_to_tc_map" : "AZURE", +{% endif %} {% endif %} "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", {% if asic_type in pfc_to_pg_map_supported_asics %} +{% if port in port_names_list_extra_queues %} + "pfc_to_pg_map" : "AZURE_DUALTOR", +{% else %} "pfc_to_pg_map" : "AZURE", {% endif %} +{% endif %} {% if port in port_names_list_extra_queues %} "pfc_enable" : "2,3,4,6", {% else %} diff --git a/src/sonic-config-engine/tests/sample-mellanox-4600c-t1-minigraph-remap-disabled.xml b/src/sonic-config-engine/tests/sample-mellanox-4600c-t1-minigraph-remap-disabled.xml new file mode 100644 index 000000000000..3d08387d71a0 --- /dev/null +++ b/src/sonic-config-engine/tests/sample-mellanox-4600c-t1-minigraph-remap-disabled.xml @@ -0,0 +1,2460 @@ + + + + + + false + r-tigon-11 + 10.0.0.32 + ARISTA01T0 + 10.0.0.33 + 1 + 10 + 3 + + + r-tigon-11 + FC00::41 + ARISTA01T0 + FC00::42 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.0 + ARISTA01T2 + 10.0.0.1 + 1 + 10 + 3 + + + r-tigon-11 + FC00::1 + ARISTA01T2 + FC00::2 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.34 + ARISTA02T0 + 10.0.0.35 + 1 + 10 + 3 + + + r-tigon-11 + FC00::45 + ARISTA02T0 + FC00::46 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.36 + ARISTA03T0 + 10.0.0.37 + 1 + 10 + 3 + + + r-tigon-11 + FC00::49 + ARISTA03T0 + FC00::4A + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.4 + ARISTA03T2 + 10.0.0.5 + 1 + 10 + 3 + + + r-tigon-11 + FC00::5 + ARISTA03T2 + FC00::6 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.38 + ARISTA04T0 + 10.0.0.39 + 1 + 10 + 3 + + + r-tigon-11 + FC00::4D + ARISTA04T0 + FC00::4E + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.40 + ARISTA05T0 + 10.0.0.41 + 1 + 10 + 3 + + + r-tigon-11 + FC00::51 + ARISTA05T0 + FC00::52 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.8 + ARISTA05T2 + 10.0.0.9 + 1 + 10 + 3 + + + r-tigon-11 + FC00::9 + ARISTA05T2 + FC00::A + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.42 + ARISTA06T0 + 10.0.0.43 + 1 + 10 + 3 + + + r-tigon-11 + FC00::55 + ARISTA06T0 + FC00::56 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.44 + ARISTA07T0 + 10.0.0.45 + 1 + 10 + 3 + + + r-tigon-11 + FC00::59 + ARISTA07T0 + FC00::5A + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.12 + ARISTA07T2 + 10.0.0.13 + 1 + 10 + 3 + + + r-tigon-11 + FC00::D + ARISTA07T2 + FC00::E + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.46 + ARISTA08T0 + 10.0.0.47 + 1 + 10 + 3 + + + r-tigon-11 + FC00::5D + ARISTA08T0 + FC00::5E + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.48 + ARISTA09T0 + 10.0.0.49 + 1 + 10 + 3 + + + r-tigon-11 + FC00::61 + ARISTA09T0 + FC00::62 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.50 + ARISTA10T0 + 10.0.0.51 + 1 + 10 + 3 + + + r-tigon-11 + FC00::65 + ARISTA10T0 + FC00::66 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.52 + ARISTA11T0 + 10.0.0.53 + 1 + 10 + 3 + + + r-tigon-11 + FC00::69 + ARISTA11T0 + FC00::6A + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.54 + ARISTA12T0 + 10.0.0.55 + 1 + 10 + 3 + + + r-tigon-11 + FC00::6D + ARISTA12T0 + FC00::6E + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.56 + ARISTA13T0 + 10.0.0.57 + 1 + 10 + 3 + + + r-tigon-11 + FC00::71 + ARISTA13T0 + FC00::72 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.58 + ARISTA14T0 + 10.0.0.59 + 1 + 10 + 3 + + + r-tigon-11 + FC00::75 + ARISTA14T0 + FC00::76 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.60 + ARISTA15T0 + 10.0.0.61 + 1 + 10 + 3 + + + r-tigon-11 + FC00::79 + ARISTA15T0 + FC00::7A + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.62 + ARISTA16T0 + 10.0.0.63 + 1 + 10 + 3 + + + r-tigon-11 + FC00::7D + ARISTA16T0 + FC00::7E + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.64 + ARISTA17T0 + 10.0.0.65 + 1 + 10 + 3 + + + r-tigon-11 + FC00::81 + ARISTA17T0 + FC00::82 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.66 + ARISTA18T0 + 10.0.0.67 + 1 + 10 + 3 + + + r-tigon-11 + FC00::85 + ARISTA18T0 + FC00::86 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.68 + ARISTA19T0 + 10.0.0.69 + 1 + 10 + 3 + + + r-tigon-11 + FC00::89 + ARISTA19T0 + FC00::8A + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.70 + ARISTA20T0 + 10.0.0.71 + 1 + 10 + 3 + + + r-tigon-11 + FC00::8D + ARISTA20T0 + FC00::8E + 1 + 10 + 3 + + + + + 65100 + r-tigon-11 + + +
10.0.0.33
+ + + +
+ +
10.0.0.1
+ + + +
+ +
10.0.0.35
+ + + +
+ +
10.0.0.37
+ + + +
+ +
10.0.0.5
+ + + +
+ +
10.0.0.39
+ + + +
+ +
10.0.0.41
+ + + +
+ +
10.0.0.9
+ + + +
+ +
10.0.0.43
+ + + +
+ +
10.0.0.45
+ + + +
+ +
10.0.0.13
+ + + +
+ +
10.0.0.47
+ + + +
+ +
10.0.0.49
+ + + +
+ +
10.0.0.51
+ + + +
+ +
10.0.0.53
+ + + +
+ +
10.0.0.55
+ + + +
+ +
10.0.0.57
+ + + +
+ +
10.0.0.59
+ + + +
+ +
10.0.0.61
+ + + +
+ +
10.0.0.63
+ + + +
+ +
10.0.0.65
+ + + +
+ +
10.0.0.67
+ + + +
+ +
10.0.0.69
+ + + +
+ +
10.0.0.71
+ + + +
+
+ +
+ + 64001 + ARISTA01T0 + + + + 65200 + ARISTA01T2 + + + + 64002 + ARISTA02T0 + + + + 64003 + ARISTA03T0 + + + + 65200 + ARISTA03T2 + + + + 64004 + ARISTA04T0 + + + + 64005 + ARISTA05T0 + + + + 65200 + ARISTA05T2 + + + + 64006 + ARISTA06T0 + + + + 64007 + ARISTA07T0 + + + + 65200 + ARISTA07T2 + + + + 64008 + ARISTA08T0 + + + + 64009 + ARISTA09T0 + + + + 64010 + ARISTA10T0 + + + + 64011 + ARISTA11T0 + + + + 64012 + ARISTA12T0 + + + + 64013 + ARISTA13T0 + + + + 64014 + ARISTA14T0 + + + + 64015 + ARISTA15T0 + + + + 64016 + ARISTA16T0 + + + + 64017 + ARISTA17T0 + + + + 64018 + ARISTA18T0 + + + + 64019 + ARISTA19T0 + + + + 64020 + ARISTA20T0 + + +
+
+ + + + + + HostIP + Loopback0 + + 10.1.0.32/32 + + 10.1.0.32/32 + + + HostIP1 + Loopback0 + + FC00:1::32/128 + + FC00:1::32/128 + + + + + HostIP + eth0 + + 10.100.25.10/22 + + 10.100.25.10/22 + + + V6HostIP + eth0 + + fe80::e42:a1ff:fe60:65d8/64 + + fe80::e42:a1ff:fe60:65d8/64 + + + + + + + r-tigon-11 + + + PortChannel101 + etp35 + + + + PortChannel102 + etp1;etp2 + + + + PortChannel103 + etp37 + + + + PortChannel104 + etp38 + + + + PortChannel105 + etp5;etp6 + + + + PortChannel106 + etp39 + + + + PortChannel107 + etp40 + + + + PortChannel108 + etp17;etp18 + + + + PortChannel109 + etp43 + + + + PortChannel1010 + etp45 + + + + PortChannel1011 + etp21;etp22 + + + + PortChannel1012 + etp46 + + + + PortChannel1013 + etp47 + + + + PortChannel1014 + etp48 + + + + PortChannel1015 + etp51 + + + + PortChannel1016 + etp53 + + + + PortChannel1017 + etp54 + + + + PortChannel1018 + etp55 + + + + PortChannel1019 + etp56 + + + + PortChannel1020 + etp59 + + + + PortChannel1021 + etp61 + + + + PortChannel1022 + etp62 + + + + PortChannel1023 + etp63 + + + + PortChannel1024 + etp64 + + + + + + + + + PortChannel101 + 10.0.0.32/31 + + + + PortChannel101 + FC00::41/126 + + + + PortChannel102 + 10.0.0.0/31 + + + + PortChannel102 + FC00::1/126 + + + + PortChannel103 + 10.0.0.34/31 + + + + PortChannel103 + FC00::45/126 + + + + PortChannel104 + 10.0.0.36/31 + + + + PortChannel104 + FC00::49/126 + + + + PortChannel105 + 10.0.0.4/31 + + + + PortChannel105 + FC00::5/126 + + + + PortChannel106 + 10.0.0.38/31 + + + + PortChannel106 + FC00::4D/126 + + + + PortChannel107 + 10.0.0.40/31 + + + + PortChannel107 + FC00::51/126 + + + + PortChannel108 + 10.0.0.8/31 + + + + PortChannel108 + FC00::9/126 + + + + PortChannel109 + 10.0.0.42/31 + + + + PortChannel109 + FC00::55/126 + + + + PortChannel1010 + 10.0.0.44/31 + + + + PortChannel1010 + FC00::59/126 + + + + PortChannel1011 + 10.0.0.12/31 + + + + PortChannel1011 + FC00::D/126 + + + + PortChannel1012 + 10.0.0.46/31 + + + + PortChannel1012 + FC00::5D/126 + + + + PortChannel1013 + 10.0.0.48/31 + + + + PortChannel1013 + FC00::61/126 + + + + PortChannel1014 + 10.0.0.50/31 + + + + PortChannel1014 + FC00::65/126 + + + + PortChannel1015 + 10.0.0.52/31 + + + + PortChannel1015 + FC00::69/126 + + + + PortChannel1016 + 10.0.0.54/31 + + + + PortChannel1016 + FC00::6D/126 + + + + PortChannel1017 + 10.0.0.56/31 + + + + PortChannel1017 + FC00::71/126 + + + + PortChannel1018 + 10.0.0.58/31 + + + + PortChannel1018 + FC00::75/126 + + + + PortChannel1019 + 10.0.0.60/31 + + + + PortChannel1019 + FC00::79/126 + + + + PortChannel1020 + 10.0.0.62/31 + + + + PortChannel1020 + FC00::7D/126 + + + + PortChannel1021 + 10.0.0.64/31 + + + + PortChannel1021 + FC00::81/126 + + + + PortChannel1022 + 10.0.0.66/31 + + + + PortChannel1022 + FC00::85/126 + + + + PortChannel1023 + 10.0.0.68/31 + + + + PortChannel1023 + FC00::89/126 + + + + PortChannel1024 + 10.0.0.70/31 + + + + PortChannel1024 + FC00::8D/126 + + + + + + NTP_ACL + NTP + NTP + + + SNMP_ACL + SNMP + SNMP + + + ERSPAN + Everflow + Everflow + + + ERSPANV6 + EverflowV6 + EverflowV6 + + + VTY_LINE + ssh-only + SSH + + + PortChannel101;PortChannel102;PortChannel103;PortChannel104;PortChannel105;PortChannel106;PortChannel107;PortChannel108;PortChannel109;PortChannel1010;PortChannel1011;PortChannel1012;PortChannel1013;PortChannel1014;PortChannel1015;PortChannel1016;PortChannel1017;PortChannel1018;PortChannel1019;PortChannel1020;PortChannel1021;PortChannel1022;PortChannel1023;PortChannel1024 + DataAcl + DataPlane + + + + + + + + + + DeviceInterfaceLink + ARISTA01T0 + Ethernet1 + r-tigon-11 + etp35 + + + DeviceInterfaceLink + ARISTA01T2 + Ethernet1 + r-tigon-11 + etp1 + + + DeviceInterfaceLink + ARISTA01T2 + Ethernet2 + r-tigon-11 + etp2 + + + DeviceInterfaceLink + ARISTA02T0 + Ethernet1 + r-tigon-11 + etp37 + + + DeviceInterfaceLink + ARISTA03T0 + Ethernet1 + r-tigon-11 + etp38 + + + DeviceInterfaceLink + ARISTA03T2 + Ethernet1 + r-tigon-11 + etp5 + + + DeviceInterfaceLink + ARISTA03T2 + Ethernet2 + r-tigon-11 + etp6 + + + DeviceInterfaceLink + ARISTA04T0 + Ethernet1 + r-tigon-11 + etp39 + + + DeviceInterfaceLink + ARISTA05T0 + Ethernet1 + r-tigon-11 + etp40 + + + DeviceInterfaceLink + ARISTA05T2 + Ethernet1 + r-tigon-11 + etp17 + + + DeviceInterfaceLink + ARISTA05T2 + Ethernet2 + r-tigon-11 + etp18 + + + DeviceInterfaceLink + ARISTA06T0 + Ethernet1 + r-tigon-11 + etp43 + + + DeviceInterfaceLink + ARISTA07T0 + Ethernet1 + r-tigon-11 + etp45 + + + DeviceInterfaceLink + ARISTA07T2 + Ethernet1 + r-tigon-11 + etp21 + + + DeviceInterfaceLink + ARISTA07T2 + Ethernet2 + r-tigon-11 + etp22 + + + DeviceInterfaceLink + ARISTA08T0 + Ethernet1 + r-tigon-11 + etp46 + + + DeviceInterfaceLink + ARISTA09T0 + Ethernet1 + r-tigon-11 + etp47 + + + DeviceInterfaceLink + ARISTA10T0 + Ethernet1 + r-tigon-11 + etp48 + + + DeviceInterfaceLink + ARISTA11T0 + Ethernet1 + r-tigon-11 + etp51 + + + DeviceInterfaceLink + ARISTA12T0 + Ethernet1 + r-tigon-11 + etp53 + + + DeviceInterfaceLink + ARISTA13T0 + Ethernet1 + r-tigon-11 + etp54 + + + DeviceInterfaceLink + ARISTA14T0 + Ethernet1 + r-tigon-11 + etp55 + + + DeviceInterfaceLink + ARISTA15T0 + Ethernet1 + r-tigon-11 + etp56 + + + DeviceInterfaceLink + ARISTA16T0 + Ethernet1 + r-tigon-11 + etp59 + + + DeviceInterfaceLink + ARISTA17T0 + Ethernet1 + r-tigon-11 + etp61 + + + DeviceInterfaceLink + ARISTA18T0 + Ethernet1 + r-tigon-11 + etp62 + + + DeviceInterfaceLink + ARISTA19T0 + Ethernet1 + r-tigon-11 + etp63 + + + DeviceInterfaceLink + ARISTA20T0 + Ethernet1 + r-tigon-11 + etp64 + + + + + r-tigon-11 + Mellanox-SN4600C-C64 + + 10.100.25.10 + + + + ARISTA16T0 + + 10.101.14.82 + + Arista-VM + + + ARISTA11T0 + + 10.101.14.77 + + Arista-VM + + + ARISTA10T0 + + 10.101.14.76 + + Arista-VM + + + ARISTA17T0 + + 10.101.14.83 + + Arista-VM + + + ARISTA09T0 + + 10.101.14.75 + + Arista-VM + + + ARISTA20T0 + + 10.101.14.86 + + Arista-VM + + + ARISTA08T0 + + 10.101.14.74 + + Arista-VM + + + ARISTA07T0 + + 10.101.14.73 + + Arista-VM + + + ARISTA07T2 + + 10.101.14.66 + + Arista-VM + + + ARISTA01T2 + + 10.101.14.63 + + Arista-VM + + + ARISTA01T0 + + 10.101.14.67 + + Arista-VM + + + ARISTA05T2 + + 10.101.14.65 + + Arista-VM + + + ARISTA05T0 + + 10.101.14.71 + + Arista-VM + + + ARISTA02T0 + + 10.101.14.68 + + Arista-VM + + + ARISTA03T0 + + 10.101.14.69 + + Arista-VM + + + ARISTA03T2 + + 10.101.14.64 + + Arista-VM + + + ARISTA04T0 + + 10.101.14.70 + + Arista-VM + + + ARISTA18T0 + + 10.101.14.84 + + Arista-VM + + + ARISTA15T0 + + 10.101.14.81 + + Arista-VM + + + ARISTA19T0 + + 10.101.14.85 + + Arista-VM + + + ARISTA14T0 + + 10.101.14.80 + + Arista-VM + + + ARISTA12T0 + + 10.101.14.78 + + Arista-VM + + + ARISTA13T0 + + 10.101.14.79 + + Arista-VM + + + ARISTA06T0 + + 10.101.14.72 + + Arista-VM + + + + + + true + + + DeviceInterface + + true + true + 1 + etp1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp2 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp3 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp4 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp5 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp6 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp7 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp8 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp9 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp10 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp11 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp12 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp13 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp14 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp15 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp16 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp17 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp18 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp19 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp20 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp21 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp22 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp23 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp24 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp25 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp26 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp27 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp28 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp29 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp30 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp31 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp32 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp33 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp34 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp35 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp36 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp37 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp38 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp39 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp40 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp41 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp42 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp43 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp44 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp45 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp46 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp47 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp48 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp49 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp50 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp51 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp52 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp53 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp54 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp55 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp56 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp57 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp58 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp59 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp60 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp61 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp62 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp63 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + etp64 + + false + 0 + 0 + 50000 + + + true + 0 + Mellanox-SN4600C-C64 + + + + + + + r-tigon-11 + + + DeploymentId + + 1 + + + QosProfile + + Profile0 + + + DhcpResources + + 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4 + + + NtpResources + + 10.100.25.32;10.102.202.2 + + + SnmpResources + + 10.0.0.9 + + + TacacsGroup + + testlab + + + TacacsServer + + 10.107.34.20 + + + ForcedMgmtRoutes + + 10.102.0.0/16;10.101.0.0/16 + + + ErspanDestinationIpv4 + + 10.0.0.7 + + + + + + + r-tigon-11 + Mellanox-SN4600C-C64 +
diff --git a/src/sonic-config-engine/tests/sample-mellanox-4600c-t1-minigraph.xml b/src/sonic-config-engine/tests/sample-mellanox-4600c-t1-minigraph.xml new file mode 100644 index 000000000000..e7f581178b29 --- /dev/null +++ b/src/sonic-config-engine/tests/sample-mellanox-4600c-t1-minigraph.xml @@ -0,0 +1,2468 @@ + + + + + + false + r-tigon-11 + 10.0.0.32 + ARISTA01T0 + 10.0.0.33 + 1 + 10 + 3 + + + r-tigon-11 + FC00::41 + ARISTA01T0 + FC00::42 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.0 + ARISTA01T2 + 10.0.0.1 + 1 + 10 + 3 + + + r-tigon-11 + FC00::1 + ARISTA01T2 + FC00::2 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.34 + ARISTA02T0 + 10.0.0.35 + 1 + 10 + 3 + + + r-tigon-11 + FC00::45 + ARISTA02T0 + FC00::46 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.36 + ARISTA03T0 + 10.0.0.37 + 1 + 10 + 3 + + + r-tigon-11 + FC00::49 + ARISTA03T0 + FC00::4A + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.4 + ARISTA03T2 + 10.0.0.5 + 1 + 10 + 3 + + + r-tigon-11 + FC00::5 + ARISTA03T2 + FC00::6 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.38 + ARISTA04T0 + 10.0.0.39 + 1 + 10 + 3 + + + r-tigon-11 + FC00::4D + ARISTA04T0 + FC00::4E + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.40 + ARISTA05T0 + 10.0.0.41 + 1 + 10 + 3 + + + r-tigon-11 + FC00::51 + ARISTA05T0 + FC00::52 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.8 + ARISTA05T2 + 10.0.0.9 + 1 + 10 + 3 + + + r-tigon-11 + FC00::9 + ARISTA05T2 + FC00::A + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.42 + ARISTA06T0 + 10.0.0.43 + 1 + 10 + 3 + + + r-tigon-11 + FC00::55 + ARISTA06T0 + FC00::56 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.44 + ARISTA07T0 + 10.0.0.45 + 1 + 10 + 3 + + + r-tigon-11 + FC00::59 + ARISTA07T0 + FC00::5A + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.12 + ARISTA07T2 + 10.0.0.13 + 1 + 10 + 3 + + + r-tigon-11 + FC00::D + ARISTA07T2 + FC00::E + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.46 + ARISTA08T0 + 10.0.0.47 + 1 + 10 + 3 + + + r-tigon-11 + FC00::5D + ARISTA08T0 + FC00::5E + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.48 + ARISTA09T0 + 10.0.0.49 + 1 + 10 + 3 + + + r-tigon-11 + FC00::61 + ARISTA09T0 + FC00::62 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.50 + ARISTA10T0 + 10.0.0.51 + 1 + 10 + 3 + + + r-tigon-11 + FC00::65 + ARISTA10T0 + FC00::66 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.52 + ARISTA11T0 + 10.0.0.53 + 1 + 10 + 3 + + + r-tigon-11 + FC00::69 + ARISTA11T0 + FC00::6A + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.54 + ARISTA12T0 + 10.0.0.55 + 1 + 10 + 3 + + + r-tigon-11 + FC00::6D + ARISTA12T0 + FC00::6E + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.56 + ARISTA13T0 + 10.0.0.57 + 1 + 10 + 3 + + + r-tigon-11 + FC00::71 + ARISTA13T0 + FC00::72 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.58 + ARISTA14T0 + 10.0.0.59 + 1 + 10 + 3 + + + r-tigon-11 + FC00::75 + ARISTA14T0 + FC00::76 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.60 + ARISTA15T0 + 10.0.0.61 + 1 + 10 + 3 + + + r-tigon-11 + FC00::79 + ARISTA15T0 + FC00::7A + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.62 + ARISTA16T0 + 10.0.0.63 + 1 + 10 + 3 + + + r-tigon-11 + FC00::7D + ARISTA16T0 + FC00::7E + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.64 + ARISTA17T0 + 10.0.0.65 + 1 + 10 + 3 + + + r-tigon-11 + FC00::81 + ARISTA17T0 + FC00::82 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.66 + ARISTA18T0 + 10.0.0.67 + 1 + 10 + 3 + + + r-tigon-11 + FC00::85 + ARISTA18T0 + FC00::86 + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.68 + ARISTA19T0 + 10.0.0.69 + 1 + 10 + 3 + + + r-tigon-11 + FC00::89 + ARISTA19T0 + FC00::8A + 1 + 10 + 3 + + + false + r-tigon-11 + 10.0.0.70 + ARISTA20T0 + 10.0.0.71 + 1 + 10 + 3 + + + r-tigon-11 + FC00::8D + ARISTA20T0 + FC00::8E + 1 + 10 + 3 + + + + + 65100 + r-tigon-11 + + +
10.0.0.33
+ + + +
+ +
10.0.0.1
+ + + +
+ +
10.0.0.35
+ + + +
+ +
10.0.0.37
+ + + +
+ +
10.0.0.5
+ + + +
+ +
10.0.0.39
+ + + +
+ +
10.0.0.41
+ + + +
+ +
10.0.0.9
+ + + +
+ +
10.0.0.43
+ + + +
+ +
10.0.0.45
+ + + +
+ +
10.0.0.13
+ + + +
+ +
10.0.0.47
+ + + +
+ +
10.0.0.49
+ + + +
+ +
10.0.0.51
+ + + +
+ +
10.0.0.53
+ + + +
+ +
10.0.0.55
+ + + +
+ +
10.0.0.57
+ + + +
+ +
10.0.0.59
+ + + +
+ +
10.0.0.61
+ + + +
+ +
10.0.0.63
+ + + +
+ +
10.0.0.65
+ + + +
+ +
10.0.0.67
+ + + +
+ +
10.0.0.69
+ + + +
+ +
10.0.0.71
+ + + +
+
+ +
+ + 64001 + ARISTA01T0 + + + + 65200 + ARISTA01T2 + + + + 64002 + ARISTA02T0 + + + + 64003 + ARISTA03T0 + + + + 65200 + ARISTA03T2 + + + + 64004 + ARISTA04T0 + + + + 64005 + ARISTA05T0 + + + + 65200 + ARISTA05T2 + + + + 64006 + ARISTA06T0 + + + + 64007 + ARISTA07T0 + + + + 65200 + ARISTA07T2 + + + + 64008 + ARISTA08T0 + + + + 64009 + ARISTA09T0 + + + + 64010 + ARISTA10T0 + + + + 64011 + ARISTA11T0 + + + + 64012 + ARISTA12T0 + + + + 64013 + ARISTA13T0 + + + + 64014 + ARISTA14T0 + + + + 64015 + ARISTA15T0 + + + + 64016 + ARISTA16T0 + + + + 64017 + ARISTA17T0 + + + + 64018 + ARISTA18T0 + + + + 64019 + ARISTA19T0 + + + + 64020 + ARISTA20T0 + + +
+
+ + + + + + HostIP + Loopback0 + + 10.1.0.32/32 + + 10.1.0.32/32 + + + HostIP1 + Loopback0 + + FC00:1::32/128 + + FC00:1::32/128 + + + + + HostIP + eth0 + + 10.100.25.10/22 + + 10.100.25.10/22 + + + V6HostIP + eth0 + + fe80::e42:a1ff:fe60:65d8/64 + + fe80::e42:a1ff:fe60:65d8/64 + + + + + + + r-tigon-11 + + + PortChannel101 + etp35 + + + + PortChannel102 + etp1;etp2 + + + + PortChannel103 + etp37 + + + + PortChannel104 + etp38 + + + + PortChannel105 + etp5;etp6 + + + + PortChannel106 + etp39 + + + + PortChannel107 + etp40 + + + + PortChannel108 + etp17;etp18 + + + + PortChannel109 + etp43 + + + + PortChannel1010 + etp45 + + + + PortChannel1011 + etp21;etp22 + + + + PortChannel1012 + etp46 + + + + PortChannel1013 + etp47 + + + + PortChannel1014 + etp48 + + + + PortChannel1015 + etp51 + + + + PortChannel1016 + etp53 + + + + PortChannel1017 + etp54 + + + + PortChannel1018 + etp55 + + + + PortChannel1019 + etp56 + + + + PortChannel1020 + etp59 + + + + PortChannel1021 + etp61 + + + + PortChannel1022 + etp62 + + + + PortChannel1023 + etp63 + + + + PortChannel1024 + etp64 + + + + + + + + + PortChannel101 + 10.0.0.32/31 + + + + PortChannel101 + FC00::41/126 + + + + PortChannel102 + 10.0.0.0/31 + + + + PortChannel102 + FC00::1/126 + + + + PortChannel103 + 10.0.0.34/31 + + + + PortChannel103 + FC00::45/126 + + + + PortChannel104 + 10.0.0.36/31 + + + + PortChannel104 + FC00::49/126 + + + + PortChannel105 + 10.0.0.4/31 + + + + PortChannel105 + FC00::5/126 + + + + PortChannel106 + 10.0.0.38/31 + + + + PortChannel106 + FC00::4D/126 + + + + PortChannel107 + 10.0.0.40/31 + + + + PortChannel107 + FC00::51/126 + + + + PortChannel108 + 10.0.0.8/31 + + + + PortChannel108 + FC00::9/126 + + + + PortChannel109 + 10.0.0.42/31 + + + + PortChannel109 + FC00::55/126 + + + + PortChannel1010 + 10.0.0.44/31 + + + + PortChannel1010 + FC00::59/126 + + + + PortChannel1011 + 10.0.0.12/31 + + + + PortChannel1011 + FC00::D/126 + + + + PortChannel1012 + 10.0.0.46/31 + + + + PortChannel1012 + FC00::5D/126 + + + + PortChannel1013 + 10.0.0.48/31 + + + + PortChannel1013 + FC00::61/126 + + + + PortChannel1014 + 10.0.0.50/31 + + + + PortChannel1014 + FC00::65/126 + + + + PortChannel1015 + 10.0.0.52/31 + + + + PortChannel1015 + FC00::69/126 + + + + PortChannel1016 + 10.0.0.54/31 + + + + PortChannel1016 + FC00::6D/126 + + + + PortChannel1017 + 10.0.0.56/31 + + + + PortChannel1017 + FC00::71/126 + + + + PortChannel1018 + 10.0.0.58/31 + + + + PortChannel1018 + FC00::75/126 + + + + PortChannel1019 + 10.0.0.60/31 + + + + PortChannel1019 + FC00::79/126 + + + + PortChannel1020 + 10.0.0.62/31 + + + + PortChannel1020 + FC00::7D/126 + + + + PortChannel1021 + 10.0.0.64/31 + + + + PortChannel1021 + FC00::81/126 + + + + PortChannel1022 + 10.0.0.66/31 + + + + PortChannel1022 + FC00::85/126 + + + + PortChannel1023 + 10.0.0.68/31 + + + + PortChannel1023 + FC00::89/126 + + + + PortChannel1024 + 10.0.0.70/31 + + + + PortChannel1024 + FC00::8D/126 + + + + + + NTP_ACL + NTP + NTP + + + SNMP_ACL + SNMP + SNMP + + + ERSPAN + Everflow + Everflow + + + ERSPANV6 + EverflowV6 + EverflowV6 + + + VTY_LINE + ssh-only + SSH + + + PortChannel101;PortChannel102;PortChannel103;PortChannel104;PortChannel105;PortChannel106;PortChannel107;PortChannel108;PortChannel109;PortChannel1010;PortChannel1011;PortChannel1012;PortChannel1013;PortChannel1014;PortChannel1015;PortChannel1016;PortChannel1017;PortChannel1018;PortChannel1019;PortChannel1020;PortChannel1021;PortChannel1022;PortChannel1023;PortChannel1024 + DataAcl + DataPlane + + + + + + + + + + DeviceInterfaceLink + ARISTA01T0 + Ethernet1 + r-tigon-11 + etp35 + + + DeviceInterfaceLink + ARISTA01T2 + Ethernet1 + r-tigon-11 + etp1 + + + DeviceInterfaceLink + ARISTA01T2 + Ethernet2 + r-tigon-11 + etp2 + + + DeviceInterfaceLink + ARISTA02T0 + Ethernet1 + r-tigon-11 + etp37 + + + DeviceInterfaceLink + ARISTA03T0 + Ethernet1 + r-tigon-11 + etp38 + + + DeviceInterfaceLink + ARISTA03T2 + Ethernet1 + r-tigon-11 + etp5 + + + DeviceInterfaceLink + ARISTA03T2 + Ethernet2 + r-tigon-11 + etp6 + + + DeviceInterfaceLink + ARISTA04T0 + Ethernet1 + r-tigon-11 + etp39 + + + DeviceInterfaceLink + ARISTA05T0 + Ethernet1 + r-tigon-11 + etp40 + + + DeviceInterfaceLink + ARISTA05T2 + Ethernet1 + r-tigon-11 + etp17 + + + DeviceInterfaceLink + ARISTA05T2 + Ethernet2 + r-tigon-11 + etp18 + + + DeviceInterfaceLink + ARISTA06T0 + Ethernet1 + r-tigon-11 + etp43 + + + DeviceInterfaceLink + ARISTA07T0 + Ethernet1 + r-tigon-11 + etp45 + + + DeviceInterfaceLink + ARISTA07T2 + Ethernet1 + r-tigon-11 + etp21 + + + DeviceInterfaceLink + ARISTA07T2 + Ethernet2 + r-tigon-11 + etp22 + + + DeviceInterfaceLink + ARISTA08T0 + Ethernet1 + r-tigon-11 + etp46 + + + DeviceInterfaceLink + ARISTA09T0 + Ethernet1 + r-tigon-11 + etp47 + + + DeviceInterfaceLink + ARISTA10T0 + Ethernet1 + r-tigon-11 + etp48 + + + DeviceInterfaceLink + ARISTA11T0 + Ethernet1 + r-tigon-11 + etp51 + + + DeviceInterfaceLink + ARISTA12T0 + Ethernet1 + r-tigon-11 + etp53 + + + DeviceInterfaceLink + ARISTA13T0 + Ethernet1 + r-tigon-11 + etp54 + + + DeviceInterfaceLink + ARISTA14T0 + Ethernet1 + r-tigon-11 + etp55 + + + DeviceInterfaceLink + ARISTA15T0 + Ethernet1 + r-tigon-11 + etp56 + + + DeviceInterfaceLink + ARISTA16T0 + Ethernet1 + r-tigon-11 + etp59 + + + DeviceInterfaceLink + ARISTA17T0 + Ethernet1 + r-tigon-11 + etp61 + + + DeviceInterfaceLink + ARISTA18T0 + Ethernet1 + r-tigon-11 + etp62 + + + DeviceInterfaceLink + ARISTA19T0 + Ethernet1 + r-tigon-11 + etp63 + + + DeviceInterfaceLink + ARISTA20T0 + Ethernet1 + r-tigon-11 + etp64 + + + + + r-tigon-11 + Mellanox-SN4600C-C64 + + 10.100.25.10 + + + + ARISTA16T0 + + 10.101.14.82 + + Arista-VM + + + ARISTA11T0 + + 10.101.14.77 + + Arista-VM + + + ARISTA10T0 + + 10.101.14.76 + + Arista-VM + + + ARISTA17T0 + + 10.101.14.83 + + Arista-VM + + + ARISTA09T0 + + 10.101.14.75 + + Arista-VM + + + ARISTA20T0 + + 10.101.14.86 + + Arista-VM + + + ARISTA08T0 + + 10.101.14.74 + + Arista-VM + + + ARISTA07T0 + + 10.101.14.73 + + Arista-VM + + + ARISTA07T2 + + 10.101.14.66 + + Arista-VM + + + ARISTA01T2 + + 10.101.14.63 + + Arista-VM + + + ARISTA01T0 + + 10.101.14.67 + + Arista-VM + + + ARISTA05T2 + + 10.101.14.65 + + Arista-VM + + + ARISTA05T0 + + 10.101.14.71 + + Arista-VM + + + ARISTA02T0 + + 10.101.14.68 + + Arista-VM + + + ARISTA03T0 + + 10.101.14.69 + + Arista-VM + + + ARISTA03T2 + + 10.101.14.64 + + Arista-VM + + + ARISTA04T0 + + 10.101.14.70 + + Arista-VM + + + ARISTA18T0 + + 10.101.14.84 + + Arista-VM + + + ARISTA15T0 + + 10.101.14.81 + + Arista-VM + + + ARISTA19T0 + + 10.101.14.85 + + Arista-VM + + + ARISTA14T0 + + 10.101.14.80 + + Arista-VM + + + ARISTA12T0 + + 10.101.14.78 + + Arista-VM + + + ARISTA13T0 + + 10.101.14.79 + + Arista-VM + + + ARISTA06T0 + + 10.101.14.72 + + Arista-VM + + + + + + true + + + DeviceInterface + + true + true + 1 + etp1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp2 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp3 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp4 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp5 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp6 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp7 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp8 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp9 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp10 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp11 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp12 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp13 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp14 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp15 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp16 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp17 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp18 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp19 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp20 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp21 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp22 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp23 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp24 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp25 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp26 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp27 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp28 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp29 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp30 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp31 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp32 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp33 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp34 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp35 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp36 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp37 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp38 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp39 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp40 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp41 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp42 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp43 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp44 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp45 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp46 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp47 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp48 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp49 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp50 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp51 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp52 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp53 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp54 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp55 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp56 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp57 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp58 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp59 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp60 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp61 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp62 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 1 + etp63 + + false + 0 + 0 + 50000 + + + DeviceInterface + + true + true + 1 + etp64 + + false + 0 + 0 + 50000 + + + true + 0 + Mellanox-SN4600C-C64 + + + + + + + r-tigon-11 + + + DeploymentId + + 1 + + + QosProfile + + Profile0 + + + DhcpResources + + 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4 + + + NtpResources + + 10.100.25.32;10.102.202.2 + + + SnmpResources + + 10.0.0.9 + + + TacacsGroup + + testlab + + + TacacsServer + + 10.107.34.20 + + + ForcedMgmtRoutes + + 10.102.0.0/16;10.101.0.0/16 + + + ErspanDestinationIpv4 + + 10.0.0.7 + + + + + + + + + + TunnelQosRemapEnabled + True + + + + r-tigon-11 + Mellanox-SN4600C-C64 +
diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic-remap-disabled.json new file mode 100644 index 000000000000..4adfa363eed7 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic-remap-disabled.json @@ -0,0 +1,1481 @@ + +{ + "CABLE_LENGTH": { + "AZURE": { + "Ethernet0": "300m", + "Ethernet4": "300m", + "Ethernet8": "5m", + "Ethernet12": "5m", + "Ethernet16": "300m", + "Ethernet20": "300m", + "Ethernet24": "5m", + "Ethernet28": "5m", + "Ethernet32": "5m", + "Ethernet36": "5m", + "Ethernet40": "5m", + "Ethernet44": "5m", + "Ethernet48": "5m", + "Ethernet52": "5m", + "Ethernet56": "5m", + "Ethernet60": "5m", + "Ethernet64": "300m", + "Ethernet68": "300m", + "Ethernet72": "5m", + "Ethernet76": "5m", + "Ethernet80": "300m", + "Ethernet84": "300m", + "Ethernet88": "5m", + "Ethernet92": "5m", + "Ethernet96": "5m", + "Ethernet100": "5m", + "Ethernet104": "5m", + "Ethernet108": "5m", + "Ethernet112": "5m", + "Ethernet116": "5m", + "Ethernet120": "5m", + "Ethernet124": "5m", + "Ethernet128": "5m", + "Ethernet132": "5m", + "Ethernet136": "40m", + "Ethernet140": "5m", + "Ethernet144": "40m", + "Ethernet148": "40m", + "Ethernet152": "40m", + "Ethernet156": "40m", + "Ethernet160": "5m", + "Ethernet164": "5m", + "Ethernet168": "40m", + "Ethernet172": "5m", + "Ethernet176": "40m", + "Ethernet180": "40m", + "Ethernet184": "40m", + "Ethernet188": "40m", + "Ethernet192": "5m", + "Ethernet196": "5m", + "Ethernet200": "40m", + "Ethernet204": "5m", + "Ethernet208": "40m", + "Ethernet212": "40m", + "Ethernet216": "40m", + "Ethernet220": "40m", + "Ethernet224": "5m", + "Ethernet228": "5m", + "Ethernet232": "40m", + "Ethernet236": "5m", + "Ethernet240": "40m", + "Ethernet244": "40m", + "Ethernet248": "40m", + "Ethernet252": "40m" + } + }, + + "BUFFER_POOL": { + "ingress_lossless_pool": { + "type": "ingress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "60817392", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossy_pool": { + "type": "egress", + "mode": "dynamic" + } + }, + "BUFFER_PROFILE": { + "ingress_lossless_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"7" + }, + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"0", + "dynamic_th":"7" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"9216", + "dynamic_th":"7" + }, + "q_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"0", + "dynamic_th":"3" + } + }, + "BUFFER_PORT_INGRESS_PROFILE_LIST": { + "Ethernet136": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet0": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet4": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet144": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet148": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet16": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet20": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet152": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet156": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet64": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet68": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet168": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet176": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet80": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet84": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet180": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet184": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet188": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet200": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet208": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet212": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet216": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet220": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet232": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet240": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet244": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet248": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet252": { + "profile_list" : "ingress_lossless_profile" + } +, + "Ethernet8": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet12": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet24": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet28": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet32": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet36": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet40": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet44": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet48": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet52": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet56": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet60": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet72": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet76": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet88": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet92": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet96": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet100": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet104": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet108": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet112": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet116": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet120": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet124": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet128": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet132": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet140": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet160": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet164": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet172": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet192": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet196": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet204": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet224": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet228": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet236": { + "profile_list" : "ingress_lossless_profile" + } + }, + "BUFFER_PORT_EGRESS_PROFILE_LIST": { + "Ethernet136": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet0": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet4": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet144": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet148": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet16": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet20": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet152": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet156": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet64": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet68": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet168": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet176": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet80": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet84": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet180": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet184": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet188": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet200": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet208": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet212": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet216": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet220": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet232": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet240": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet244": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet248": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet252": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + } +, + "Ethernet8": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet12": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet24": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet28": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet32": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet36": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet40": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet44": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet48": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet52": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet56": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet60": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet72": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet76": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet88": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet92": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet96": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet100": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet104": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet108": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet112": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet116": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet120": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet124": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet128": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet132": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet140": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet160": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet164": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet172": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet192": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet196": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet204": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet224": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet228": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet236": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + } + }, + "BUFFER_PG": { + "Ethernet0|3-4": { + "profile" : "NULL" + }, + "Ethernet0|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet4|3-4": { + "profile" : "NULL" + }, + "Ethernet4|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet16|3-4": { + "profile" : "NULL" + }, + "Ethernet16|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet20|3-4": { + "profile" : "NULL" + }, + "Ethernet20|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet64|3-4": { + "profile" : "NULL" + }, + "Ethernet64|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet68|3-4": { + "profile" : "NULL" + }, + "Ethernet68|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet80|3-4": { + "profile" : "NULL" + }, + "Ethernet80|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet84|3-4": { + "profile" : "NULL" + }, + "Ethernet84|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet136|3-4": { + "profile" : "NULL" + }, + "Ethernet136|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet144|3-4": { + "profile" : "NULL" + }, + "Ethernet144|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet148|3-4": { + "profile" : "NULL" + }, + "Ethernet148|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet152|3-4": { + "profile" : "NULL" + }, + "Ethernet152|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet156|3-4": { + "profile" : "NULL" + }, + "Ethernet156|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet168|3-4": { + "profile" : "NULL" + }, + "Ethernet168|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet176|3-4": { + "profile" : "NULL" + }, + "Ethernet176|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet180|3-4": { + "profile" : "NULL" + }, + "Ethernet180|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet184|3-4": { + "profile" : "NULL" + }, + "Ethernet184|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet188|3-4": { + "profile" : "NULL" + }, + "Ethernet188|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet200|3-4": { + "profile" : "NULL" + }, + "Ethernet200|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet208|3-4": { + "profile" : "NULL" + }, + "Ethernet208|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet212|3-4": { + "profile" : "NULL" + }, + "Ethernet212|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet216|3-4": { + "profile" : "NULL" + }, + "Ethernet216|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet220|3-4": { + "profile" : "NULL" + }, + "Ethernet220|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet232|3-4": { + "profile" : "NULL" + }, + "Ethernet232|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet240|3-4": { + "profile" : "NULL" + }, + "Ethernet240|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet244|3-4": { + "profile" : "NULL" + }, + "Ethernet244|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet248|3-4": { + "profile" : "NULL" + }, + "Ethernet248|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet252|3-4": { + "profile" : "NULL" + }, + "Ethernet252|0": { + "profile" : "ingress_lossy_profile" + } +, "Ethernet8|3-4": { + "profile" : "NULL" + }, + "Ethernet8|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet12|3-4": { + "profile" : "NULL" + }, + "Ethernet12|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet24|3-4": { + "profile" : "NULL" + }, + "Ethernet24|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet28|3-4": { + "profile" : "NULL" + }, + "Ethernet28|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet32|3-4": { + "profile" : "NULL" + }, + "Ethernet32|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet36|3-4": { + "profile" : "NULL" + }, + "Ethernet36|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet40|3-4": { + "profile" : "NULL" + }, + "Ethernet40|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet44|3-4": { + "profile" : "NULL" + }, + "Ethernet44|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet48|3-4": { + "profile" : "NULL" + }, + "Ethernet48|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet52|3-4": { + "profile" : "NULL" + }, + "Ethernet52|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet56|3-4": { + "profile" : "NULL" + }, + "Ethernet56|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet60|3-4": { + "profile" : "NULL" + }, + "Ethernet60|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet72|3-4": { + "profile" : "NULL" + }, + "Ethernet72|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet76|3-4": { + "profile" : "NULL" + }, + "Ethernet76|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet88|3-4": { + "profile" : "NULL" + }, + "Ethernet88|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet92|3-4": { + "profile" : "NULL" + }, + "Ethernet92|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet96|3-4": { + "profile" : "NULL" + }, + "Ethernet96|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet100|3-4": { + "profile" : "NULL" + }, + "Ethernet100|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet104|3-4": { + "profile" : "NULL" + }, + "Ethernet104|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet108|3-4": { + "profile" : "NULL" + }, + "Ethernet108|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet112|3-4": { + "profile" : "NULL" + }, + "Ethernet112|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet116|3-4": { + "profile" : "NULL" + }, + "Ethernet116|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet120|3-4": { + "profile" : "NULL" + }, + "Ethernet120|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet124|3-4": { + "profile" : "NULL" + }, + "Ethernet124|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet128|3-4": { + "profile" : "NULL" + }, + "Ethernet128|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet132|3-4": { + "profile" : "NULL" + }, + "Ethernet132|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet140|3-4": { + "profile" : "NULL" + }, + "Ethernet140|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet160|3-4": { + "profile" : "NULL" + }, + "Ethernet160|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet164|3-4": { + "profile" : "NULL" + }, + "Ethernet164|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet172|3-4": { + "profile" : "NULL" + }, + "Ethernet172|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet192|3-4": { + "profile" : "NULL" + }, + "Ethernet192|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet196|3-4": { + "profile" : "NULL" + }, + "Ethernet196|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet204|3-4": { + "profile" : "NULL" + }, + "Ethernet204|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet224|3-4": { + "profile" : "NULL" + }, + "Ethernet224|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet228|3-4": { + "profile" : "NULL" + }, + "Ethernet228|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet236|3-4": { + "profile" : "NULL" + }, + "Ethernet236|0": { + "profile" : "ingress_lossy_profile" + } + }, + + "BUFFER_QUEUE": { + "Ethernet0|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet4|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet16|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet20|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet64|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet68|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet80|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet84|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet0|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet4|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet16|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet20|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet64|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet68|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet80|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet84|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet0|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet4|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet16|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet20|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet64|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet68|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet80|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet84|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet136|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet136|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet136|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet144|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet144|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet144|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet148|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet148|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet148|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet152|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet152|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet152|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet156|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet156|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet156|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet168|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet168|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet168|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet176|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet176|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet176|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet180|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet180|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet180|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet184|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet184|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet184|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet188|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet188|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet188|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet200|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet200|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet200|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet208|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet208|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet208|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet212|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet212|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet212|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet216|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet216|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet216|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet220|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet220|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet220|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet232|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet232|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet232|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet240|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet240|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet240|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet244|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet244|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet244|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet248|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet248|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet248|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet252|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet252|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet252|5-6": { + "profile" : "q_lossy_profile" + } +, + "Ethernet8|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet12|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet24|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet28|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet32|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet36|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet40|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet44|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet48|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet52|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet56|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet60|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet72|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet76|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet88|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet92|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet96|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet100|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet104|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet108|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet112|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet116|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet120|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet124|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet128|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet132|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet140|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet160|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet164|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet172|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet192|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet196|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet204|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet224|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet228|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet236|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet8|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet12|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet24|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet28|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet32|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet36|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet40|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet44|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet48|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet52|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet56|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet60|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet72|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet76|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet88|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet92|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet96|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet100|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet104|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet108|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet112|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet116|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet120|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet124|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet128|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet132|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet140|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet160|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet164|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet172|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet192|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet196|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet204|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet224|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet228|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet236|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet8|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet12|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet24|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet28|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet32|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet36|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet40|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet44|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet48|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet52|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet56|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet60|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet72|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet76|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet88|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet92|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet96|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet100|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet104|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet108|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet112|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet116|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet120|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet124|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet128|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet132|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet140|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet160|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet164|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet172|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet192|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet196|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet204|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet224|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet228|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet236|5-6": { + "profile" : "q_lossy_profile" + } + } +, "DEFAULT_LOSSLESS_BUFFER_PARAMETER": { + "AZURE": { + "default_dynamic_th": "0" + } + }, + "LOSSLESS_TRAFFIC_PATTERN": { + "AZURE": { + "mtu": "1024", + "small_packet_percentage": "100" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic.json b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic.json new file mode 100644 index 000000000000..57be84be1fb1 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic.json @@ -0,0 +1,1660 @@ +{ + "CABLE_LENGTH": { + "AZURE": { + "Ethernet0": "300m", + "Ethernet4": "300m", + "Ethernet8": "5m", + "Ethernet12": "5m", + "Ethernet16": "300m", + "Ethernet20": "300m", + "Ethernet24": "5m", + "Ethernet28": "5m", + "Ethernet32": "5m", + "Ethernet36": "5m", + "Ethernet40": "5m", + "Ethernet44": "5m", + "Ethernet48": "5m", + "Ethernet52": "5m", + "Ethernet56": "5m", + "Ethernet60": "5m", + "Ethernet64": "300m", + "Ethernet68": "300m", + "Ethernet72": "5m", + "Ethernet76": "5m", + "Ethernet80": "300m", + "Ethernet84": "300m", + "Ethernet88": "5m", + "Ethernet92": "5m", + "Ethernet96": "5m", + "Ethernet100": "5m", + "Ethernet104": "5m", + "Ethernet108": "5m", + "Ethernet112": "5m", + "Ethernet116": "5m", + "Ethernet120": "5m", + "Ethernet124": "5m", + "Ethernet128": "5m", + "Ethernet132": "5m", + "Ethernet136": "40m", + "Ethernet140": "5m", + "Ethernet144": "40m", + "Ethernet148": "40m", + "Ethernet152": "40m", + "Ethernet156": "40m", + "Ethernet160": "5m", + "Ethernet164": "5m", + "Ethernet168": "40m", + "Ethernet172": "5m", + "Ethernet176": "40m", + "Ethernet180": "40m", + "Ethernet184": "40m", + "Ethernet188": "40m", + "Ethernet192": "5m", + "Ethernet196": "5m", + "Ethernet200": "40m", + "Ethernet204": "5m", + "Ethernet208": "40m", + "Ethernet212": "40m", + "Ethernet216": "40m", + "Ethernet220": "40m", + "Ethernet224": "5m", + "Ethernet228": "5m", + "Ethernet232": "40m", + "Ethernet236": "5m", + "Ethernet240": "40m", + "Ethernet244": "40m", + "Ethernet248": "40m", + "Ethernet252": "40m" + } + }, + + "BUFFER_POOL": { + "ingress_lossless_pool": { + "type": "ingress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "60817392", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossy_pool": { + "type": "egress", + "mode": "dynamic" + } + }, + "BUFFER_PROFILE": { + "ingress_lossless_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"7" + }, + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"0", + "dynamic_th":"7" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"9216", + "dynamic_th":"7" + }, + "q_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"0", + "dynamic_th":"3" + } + }, + "BUFFER_PORT_INGRESS_PROFILE_LIST": { + "Ethernet136": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet0": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet4": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet144": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet148": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet16": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet20": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet152": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet156": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet64": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet68": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet168": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet176": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet80": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet84": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet180": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet184": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet188": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet200": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet208": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet212": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet216": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet220": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet232": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet240": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet244": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet248": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet252": { + "profile_list" : "ingress_lossless_profile" + } +, + "Ethernet8": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet12": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet24": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet28": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet32": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet36": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet40": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet44": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet48": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet52": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet56": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet60": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet72": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet76": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet88": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet92": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet96": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet100": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet104": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet108": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet112": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet116": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet120": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet124": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet128": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet132": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet140": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet160": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet164": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet172": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet192": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet196": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet204": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet224": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet228": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet236": { + "profile_list" : "ingress_lossless_profile" + } + }, + "BUFFER_PORT_EGRESS_PROFILE_LIST": { + "Ethernet136": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet0": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet4": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet144": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet148": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet16": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet20": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet152": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet156": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet64": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet68": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet168": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet176": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet80": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet84": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet180": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet184": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet188": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet200": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet208": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet212": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet216": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet220": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet232": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet240": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet244": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet248": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet252": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + } +, + "Ethernet8": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet12": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet24": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet28": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet32": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet36": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet40": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet44": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet48": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet52": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet56": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet60": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet72": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet76": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet88": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet92": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet96": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet100": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet104": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet108": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet112": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet116": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet120": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet124": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet128": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet132": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet140": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet160": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet164": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet172": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet192": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet196": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet204": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet224": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet228": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet236": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + } + }, + "BUFFER_PG": { + "Ethernet0|3-4": { + "profile" : "NULL" + }, + "Ethernet0|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet4|3-4": { + "profile" : "NULL" + }, + "Ethernet4|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet16|3-4": { + "profile" : "NULL" + }, + "Ethernet16|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet20|3-4": { + "profile" : "NULL" + }, + "Ethernet20|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet64|3-4": { + "profile" : "NULL" + }, + "Ethernet64|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet68|3-4": { + "profile" : "NULL" + }, + "Ethernet68|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet80|3-4": { + "profile" : "NULL" + }, + "Ethernet80|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet84|3-4": { + "profile" : "NULL" + }, + "Ethernet84|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet136|2-4": { + "profile" : "NULL" + }, + "Ethernet136|6": { + "profile" : "NULL" + }, + "Ethernet136|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet144|2-4": { + "profile" : "NULL" + }, + "Ethernet144|6": { + "profile" : "NULL" + }, + "Ethernet144|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet148|2-4": { + "profile" : "NULL" + }, + "Ethernet148|6": { + "profile" : "NULL" + }, + "Ethernet148|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet152|2-4": { + "profile" : "NULL" + }, + "Ethernet152|6": { + "profile" : "NULL" + }, + "Ethernet152|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet156|2-4": { + "profile" : "NULL" + }, + "Ethernet156|6": { + "profile" : "NULL" + }, + "Ethernet156|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet168|2-4": { + "profile" : "NULL" + }, + "Ethernet168|6": { + "profile" : "NULL" + }, + "Ethernet168|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet176|2-4": { + "profile" : "NULL" + }, + "Ethernet176|6": { + "profile" : "NULL" + }, + "Ethernet176|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet180|2-4": { + "profile" : "NULL" + }, + "Ethernet180|6": { + "profile" : "NULL" + }, + "Ethernet180|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet184|2-4": { + "profile" : "NULL" + }, + "Ethernet184|6": { + "profile" : "NULL" + }, + "Ethernet184|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet188|2-4": { + "profile" : "NULL" + }, + "Ethernet188|6": { + "profile" : "NULL" + }, + "Ethernet188|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet200|2-4": { + "profile" : "NULL" + }, + "Ethernet200|6": { + "profile" : "NULL" + }, + "Ethernet200|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet208|2-4": { + "profile" : "NULL" + }, + "Ethernet208|6": { + "profile" : "NULL" + }, + "Ethernet208|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet212|2-4": { + "profile" : "NULL" + }, + "Ethernet212|6": { + "profile" : "NULL" + }, + "Ethernet212|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet216|2-4": { + "profile" : "NULL" + }, + "Ethernet216|6": { + "profile" : "NULL" + }, + "Ethernet216|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet220|2-4": { + "profile" : "NULL" + }, + "Ethernet220|6": { + "profile" : "NULL" + }, + "Ethernet220|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet232|2-4": { + "profile" : "NULL" + }, + "Ethernet232|6": { + "profile" : "NULL" + }, + "Ethernet232|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet240|2-4": { + "profile" : "NULL" + }, + "Ethernet240|6": { + "profile" : "NULL" + }, + "Ethernet240|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet244|2-4": { + "profile" : "NULL" + }, + "Ethernet244|6": { + "profile" : "NULL" + }, + "Ethernet244|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet248|2-4": { + "profile" : "NULL" + }, + "Ethernet248|6": { + "profile" : "NULL" + }, + "Ethernet248|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet252|2-4": { + "profile" : "NULL" + }, + "Ethernet252|6": { + "profile" : "NULL" + }, + "Ethernet252|0": { + "profile" : "ingress_lossy_profile" + } +, "Ethernet8|3-4": { + "profile" : "NULL" + }, + "Ethernet8|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet12|3-4": { + "profile" : "NULL" + }, + "Ethernet12|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet24|3-4": { + "profile" : "NULL" + }, + "Ethernet24|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet28|3-4": { + "profile" : "NULL" + }, + "Ethernet28|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet32|3-4": { + "profile" : "NULL" + }, + "Ethernet32|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet36|3-4": { + "profile" : "NULL" + }, + "Ethernet36|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet40|3-4": { + "profile" : "NULL" + }, + "Ethernet40|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet44|3-4": { + "profile" : "NULL" + }, + "Ethernet44|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet48|3-4": { + "profile" : "NULL" + }, + "Ethernet48|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet52|3-4": { + "profile" : "NULL" + }, + "Ethernet52|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet56|3-4": { + "profile" : "NULL" + }, + "Ethernet56|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet60|3-4": { + "profile" : "NULL" + }, + "Ethernet60|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet72|3-4": { + "profile" : "NULL" + }, + "Ethernet72|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet76|3-4": { + "profile" : "NULL" + }, + "Ethernet76|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet88|3-4": { + "profile" : "NULL" + }, + "Ethernet88|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet92|3-4": { + "profile" : "NULL" + }, + "Ethernet92|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet96|3-4": { + "profile" : "NULL" + }, + "Ethernet96|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet100|3-4": { + "profile" : "NULL" + }, + "Ethernet100|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet104|3-4": { + "profile" : "NULL" + }, + "Ethernet104|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet108|3-4": { + "profile" : "NULL" + }, + "Ethernet108|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet112|3-4": { + "profile" : "NULL" + }, + "Ethernet112|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet116|3-4": { + "profile" : "NULL" + }, + "Ethernet116|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet120|3-4": { + "profile" : "NULL" + }, + "Ethernet120|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet124|3-4": { + "profile" : "NULL" + }, + "Ethernet124|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet128|3-4": { + "profile" : "NULL" + }, + "Ethernet128|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet132|3-4": { + "profile" : "NULL" + }, + "Ethernet132|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet140|3-4": { + "profile" : "NULL" + }, + "Ethernet140|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet160|3-4": { + "profile" : "NULL" + }, + "Ethernet160|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet164|3-4": { + "profile" : "NULL" + }, + "Ethernet164|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet172|3-4": { + "profile" : "NULL" + }, + "Ethernet172|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet192|3-4": { + "profile" : "NULL" + }, + "Ethernet192|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet196|3-4": { + "profile" : "NULL" + }, + "Ethernet196|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet204|3-4": { + "profile" : "NULL" + }, + "Ethernet204|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet224|3-4": { + "profile" : "NULL" + }, + "Ethernet224|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet228|3-4": { + "profile" : "NULL" + }, + "Ethernet228|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet236|3-4": { + "profile" : "NULL" + }, + "Ethernet236|0": { + "profile" : "ingress_lossy_profile" + } + }, + + "BUFFER_QUEUE": { + "Ethernet0|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet4|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet16|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet20|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet64|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet68|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet80|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet84|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet0|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet4|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet16|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet20|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet64|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet68|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet80|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet84|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet0|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet4|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet16|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet20|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet64|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet68|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet80|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet84|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet136|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet136|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet136|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet136|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet136|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet144|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet144|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet144|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet144|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet144|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet148|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet148|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet148|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet148|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet148|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet152|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet152|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet152|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet152|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet152|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet156|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet156|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet156|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet156|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet156|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet168|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet168|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet168|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet168|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet168|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet176|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet176|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet176|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet176|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet176|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet180|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet180|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet180|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet180|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet180|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet184|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet184|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet184|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet184|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet184|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet188|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet188|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet188|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet188|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet188|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet200|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet200|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet200|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet200|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet200|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet208|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet208|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet208|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet208|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet208|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet212|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet212|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet212|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet212|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet212|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet216|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet216|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet216|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet216|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet216|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet220|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet220|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet220|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet220|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet220|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet232|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet232|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet232|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet232|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet232|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet240|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet240|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet240|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet240|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet240|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet244|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet244|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet244|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet244|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet244|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet248|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet248|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet248|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet248|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet248|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet252|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet252|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet252|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet252|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet252|7": { + "profile" : "q_lossy_profile" + } +, + "Ethernet8|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet12|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet24|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet28|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet32|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet36|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet40|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet44|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet48|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet52|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet56|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet60|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet72|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet76|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet88|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet92|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet96|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet100|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet104|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet108|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet112|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet116|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet120|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet124|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet128|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet132|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet140|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet160|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet164|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet172|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet192|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet196|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet204|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet224|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet228|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet236|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet8|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet12|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet24|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet28|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet32|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet36|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet40|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet44|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet48|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet52|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet56|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet60|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet72|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet76|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet88|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet92|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet96|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet100|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet104|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet108|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet112|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet116|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet120|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet124|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet128|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet132|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet140|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet160|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet164|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet172|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet192|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet196|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet204|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet224|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet228|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet236|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet8|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet12|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet24|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet28|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet32|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet36|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet40|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet44|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet48|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet52|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet56|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet60|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet72|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet76|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet88|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet92|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet96|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet100|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet104|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet108|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet112|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet116|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet120|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet124|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet128|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet132|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet140|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet160|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet164|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet172|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet192|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet196|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet204|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet224|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet228|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet236|5-6": { + "profile" : "q_lossy_profile" + } + } +, "DEFAULT_LOSSLESS_BUFFER_PARAMETER": { + "AZURE": { + "default_dynamic_th": "0" + } + }, + "LOSSLESS_TRAFFIC_PATTERN": { + "AZURE": { + "mtu": "1024", + "small_packet_percentage": "100" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-remap-disabled.json new file mode 100644 index 000000000000..3a423b492587 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-remap-disabled.json @@ -0,0 +1,1306 @@ + +{ + "CABLE_LENGTH": { + "AZURE": { + "Ethernet0": "300m", + "Ethernet4": "300m", + "Ethernet8": "5m", + "Ethernet12": "5m", + "Ethernet16": "300m", + "Ethernet20": "300m", + "Ethernet24": "5m", + "Ethernet28": "5m", + "Ethernet32": "5m", + "Ethernet36": "5m", + "Ethernet40": "5m", + "Ethernet44": "5m", + "Ethernet48": "5m", + "Ethernet52": "5m", + "Ethernet56": "5m", + "Ethernet60": "5m", + "Ethernet64": "300m", + "Ethernet68": "300m", + "Ethernet72": "5m", + "Ethernet76": "5m", + "Ethernet80": "300m", + "Ethernet84": "300m", + "Ethernet88": "5m", + "Ethernet92": "5m", + "Ethernet96": "5m", + "Ethernet100": "5m", + "Ethernet104": "5m", + "Ethernet108": "5m", + "Ethernet112": "5m", + "Ethernet116": "5m", + "Ethernet120": "5m", + "Ethernet124": "5m", + "Ethernet128": "5m", + "Ethernet132": "5m", + "Ethernet136": "40m", + "Ethernet140": "5m", + "Ethernet144": "40m", + "Ethernet148": "40m", + "Ethernet152": "40m", + "Ethernet156": "40m", + "Ethernet160": "5m", + "Ethernet164": "5m", + "Ethernet168": "40m", + "Ethernet172": "5m", + "Ethernet176": "40m", + "Ethernet180": "40m", + "Ethernet184": "40m", + "Ethernet188": "40m", + "Ethernet192": "5m", + "Ethernet196": "5m", + "Ethernet200": "40m", + "Ethernet204": "5m", + "Ethernet208": "40m", + "Ethernet212": "40m", + "Ethernet216": "40m", + "Ethernet220": "40m", + "Ethernet224": "5m", + "Ethernet228": "5m", + "Ethernet232": "40m", + "Ethernet236": "5m", + "Ethernet240": "40m", + "Ethernet244": "40m", + "Ethernet248": "40m", + "Ethernet252": "40m" + } + }, + + "BUFFER_POOL": { + "ingress_zero_pool" : { + "mode": "static", + "type": "ingress", + "size": "0" + }, + "ingress_lossless_pool": { + "size": "48332800", + "xoff": "5275648", + "type": "ingress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "60817392", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossy_pool": { + "size": "48332800", + "type": "egress", + "mode": "dynamic" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_pg_zero_profile" : { + "pool":"ingress_zero_pool", + "size":"0", + "static_th":"0" + }, + "ingress_lossless_zero_profile" : { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"-8" + }, + "egress_lossless_zero_profile" : { + "pool":"egress_lossless_pool", + "size":"0", + "dynamic_th":"-8" + }, + "egress_lossy_zero_profile" : { + "pool":"egress_lossy_pool", + "size":"0", + "dynamic_th":"-8" + }, + "ingress_lossless_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"7" + }, + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"0", + "dynamic_th":"7" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"9216", + "dynamic_th":"7" + }, + "q_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"0", + "dynamic_th":"3" + } + }, + "BUFFER_PORT_INGRESS_PROFILE_LIST": { + "Ethernet136": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet0": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet4": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet144": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet148": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet16": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet20": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet152": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet156": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet64": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet68": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet168": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet176": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet80": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet84": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet180": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet184": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet188": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet200": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet208": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet212": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet216": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet220": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet232": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet240": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet244": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet248": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet252": { + "profile_list" : "ingress_lossless_profile" + } +, + "Ethernet8": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet12": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet24": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet28": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet32": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet36": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet40": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet44": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet48": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet52": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet56": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet60": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet72": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet76": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet88": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet92": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet96": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet100": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet104": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet108": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet112": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet116": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet120": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet124": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet128": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet132": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet140": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet160": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet164": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet172": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet192": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet196": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet204": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet224": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet228": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet236": { + "profile_list" : "ingress_lossless_zero_profile" + } + }, + "BUFFER_PORT_EGRESS_PROFILE_LIST": { + "Ethernet136": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet0": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet4": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet144": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet148": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet16": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet20": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet152": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet156": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet64": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet68": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet168": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet176": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet80": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet84": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet180": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet184": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet188": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet200": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet208": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet212": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet216": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet220": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet232": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet240": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet244": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet248": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet252": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + } +, + "Ethernet8": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet12": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet24": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet28": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet32": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet36": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet40": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet44": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet48": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet52": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet56": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet60": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet72": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet76": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet88": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet92": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet96": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet100": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet104": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet108": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet112": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet116": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet120": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet124": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet128": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet132": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet140": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet160": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet164": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet172": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet192": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet196": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet204": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet224": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet228": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet236": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + } + }, + "BUFFER_PG": { + "Ethernet0|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet4|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet16|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet20|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet64|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet68|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet80|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet84|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet136|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet144|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet148|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet152|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet156|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet168|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet176|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet180|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet184|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet188|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet200|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet208|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet212|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet216|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet220|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet232|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet240|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet244|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet248|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet252|0": { + "profile" : "ingress_lossy_profile" + } +, "Ethernet8|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet12|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet24|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet28|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet32|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet36|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet40|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet44|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet48|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet52|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet56|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet60|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet72|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet76|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet88|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet92|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet96|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet100|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet104|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet108|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet112|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet116|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet120|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet124|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet128|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet132|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet140|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet160|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet164|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet172|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet192|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet196|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet204|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet224|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet228|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet236|0": { + "profile" : "ingress_lossy_pg_zero_profile" + } + }, + + "BUFFER_QUEUE": { + "Ethernet0|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet4|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet16|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet20|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet64|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet68|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet80|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet84|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet0|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet4|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet16|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet20|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet64|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet68|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet80|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet84|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet0|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet4|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet16|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet20|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet64|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet68|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet80|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet84|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet136|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet136|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet136|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet144|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet144|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet144|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet148|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet148|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet148|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet152|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet152|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet152|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet156|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet156|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet156|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet168|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet168|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet168|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet176|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet176|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet176|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet180|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet180|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet180|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet184|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet184|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet184|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet188|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet188|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet188|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet200|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet200|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet200|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet208|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet208|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet208|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet212|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet212|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet212|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet216|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet216|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet216|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet220|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet220|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet220|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet232|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet232|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet232|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet240|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet240|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet240|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet244|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet244|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet244|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet248|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet248|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet248|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet252|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet252|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet252|5-6": { + "profile" : "q_lossy_profile" + } +, + "Ethernet8|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet12|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet24|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet28|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet32|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet36|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet40|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet44|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet48|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet52|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet56|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet60|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet72|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet76|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet88|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet92|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet96|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet100|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet104|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet108|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet112|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet116|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet120|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet124|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet128|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet132|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet140|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet160|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet164|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet172|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet192|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet196|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet204|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet224|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet228|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet236|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet8|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet12|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet24|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet28|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet32|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet36|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet40|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet44|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet48|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet52|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet56|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet60|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet72|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet76|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet88|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet92|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet96|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet100|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet104|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet108|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet112|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet116|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet120|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet124|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet128|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet132|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet140|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet160|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet164|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet172|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet192|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet196|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet204|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet224|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet228|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet236|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet8|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet12|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet24|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet28|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet32|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet36|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet40|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet44|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet48|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet52|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet56|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet60|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet72|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet76|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet88|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet92|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet96|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet100|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet104|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet108|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet112|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet116|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet120|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet124|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet128|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet132|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet140|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet160|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet164|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet172|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet192|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet196|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet204|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet224|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet228|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet236|5-6": { + "profile" : "egress_lossy_zero_profile" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1.json b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1.json new file mode 100644 index 000000000000..a545415612d5 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1.json @@ -0,0 +1,1425 @@ +{ + "CABLE_LENGTH": { + "AZURE": { + "Ethernet0": "300m", + "Ethernet4": "300m", + "Ethernet8": "5m", + "Ethernet12": "5m", + "Ethernet16": "300m", + "Ethernet20": "300m", + "Ethernet24": "5m", + "Ethernet28": "5m", + "Ethernet32": "5m", + "Ethernet36": "5m", + "Ethernet40": "5m", + "Ethernet44": "5m", + "Ethernet48": "5m", + "Ethernet52": "5m", + "Ethernet56": "5m", + "Ethernet60": "5m", + "Ethernet64": "300m", + "Ethernet68": "300m", + "Ethernet72": "5m", + "Ethernet76": "5m", + "Ethernet80": "300m", + "Ethernet84": "300m", + "Ethernet88": "5m", + "Ethernet92": "5m", + "Ethernet96": "5m", + "Ethernet100": "5m", + "Ethernet104": "5m", + "Ethernet108": "5m", + "Ethernet112": "5m", + "Ethernet116": "5m", + "Ethernet120": "5m", + "Ethernet124": "5m", + "Ethernet128": "5m", + "Ethernet132": "5m", + "Ethernet136": "40m", + "Ethernet140": "5m", + "Ethernet144": "40m", + "Ethernet148": "40m", + "Ethernet152": "40m", + "Ethernet156": "40m", + "Ethernet160": "5m", + "Ethernet164": "5m", + "Ethernet168": "40m", + "Ethernet172": "5m", + "Ethernet176": "40m", + "Ethernet180": "40m", + "Ethernet184": "40m", + "Ethernet188": "40m", + "Ethernet192": "5m", + "Ethernet196": "5m", + "Ethernet200": "40m", + "Ethernet204": "5m", + "Ethernet208": "40m", + "Ethernet212": "40m", + "Ethernet216": "40m", + "Ethernet220": "40m", + "Ethernet224": "5m", + "Ethernet228": "5m", + "Ethernet232": "40m", + "Ethernet236": "5m", + "Ethernet240": "40m", + "Ethernet244": "40m", + "Ethernet248": "40m", + "Ethernet252": "40m" + } + }, + + "BUFFER_POOL": { + "ingress_zero_pool" : { + "mode": "static", + "type": "ingress", + "size": "0" + }, + "ingress_lossless_pool": { + "size": "44130304", + "xoff": "8790016", + "type": "ingress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "60817392", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossy_pool": { + "size": "44130304", + "type": "egress", + "mode": "dynamic" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_pg_zero_profile" : { + "pool":"ingress_zero_pool", + "size":"0", + "static_th":"0" + }, + "ingress_lossless_zero_profile" : { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"-8" + }, + "egress_lossless_zero_profile" : { + "pool":"egress_lossless_pool", + "size":"0", + "dynamic_th":"-8" + }, + "egress_lossy_zero_profile" : { + "pool":"egress_lossy_pool", + "size":"0", + "dynamic_th":"-8" + }, + "ingress_lossless_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"7" + }, + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"0", + "dynamic_th":"7" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"9216", + "dynamic_th":"7" + }, + "q_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"0", + "dynamic_th":"3" + } + }, + "BUFFER_PORT_INGRESS_PROFILE_LIST": { + "Ethernet136": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet0": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet4": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet144": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet148": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet16": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet20": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet152": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet156": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet64": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet68": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet168": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet176": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet80": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet84": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet180": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet184": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet188": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet200": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet208": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet212": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet216": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet220": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet232": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet240": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet244": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet248": { + "profile_list" : "ingress_lossless_profile" + }, + "Ethernet252": { + "profile_list" : "ingress_lossless_profile" + } +, + "Ethernet8": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet12": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet24": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet28": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet32": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet36": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet40": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet44": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet48": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet52": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet56": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet60": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet72": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet76": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet88": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet92": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet96": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet100": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet104": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet108": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet112": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet116": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet120": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet124": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet128": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet132": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet140": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet160": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet164": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet172": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet192": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet196": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet204": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet224": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet228": { + "profile_list" : "ingress_lossless_zero_profile" + }, + "Ethernet236": { + "profile_list" : "ingress_lossless_zero_profile" + } + }, + "BUFFER_PORT_EGRESS_PROFILE_LIST": { + "Ethernet136": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet0": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet4": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet144": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet148": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet16": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet20": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet152": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet156": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet64": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet68": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet168": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet176": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet80": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet84": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet180": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet184": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet188": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet200": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet208": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet212": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet216": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet220": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet232": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet240": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet244": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet248": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet252": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + } +, + "Ethernet8": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet12": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet24": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet28": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet32": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet36": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet40": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet44": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet48": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet52": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet56": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet60": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet72": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet76": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet88": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet92": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet96": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet100": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet104": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet108": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet112": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet116": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet120": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet124": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet128": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet132": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet140": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet160": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet164": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet172": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet192": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet196": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet204": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet224": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet228": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet236": { + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" + } + }, + "BUFFER_PG": { + "Ethernet0|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet4|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet16|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet20|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet64|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet68|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet80|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet84|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet136|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet144|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet148|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet152|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet156|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet168|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet176|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet180|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet184|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet188|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet200|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet208|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet212|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet216|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet220|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet232|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet240|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet244|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet248|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet252|0": { + "profile" : "ingress_lossy_profile" + } +, "Ethernet8|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet12|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet24|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet28|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet32|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet36|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet40|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet44|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet48|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet52|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet56|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet60|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet72|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet76|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet88|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet92|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet96|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet100|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet104|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet108|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet112|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet116|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet120|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet124|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet128|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet132|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet140|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet160|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet164|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet172|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet192|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet196|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet204|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet224|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet228|0": { + "profile" : "ingress_lossy_pg_zero_profile" + }, + "Ethernet236|0": { + "profile" : "ingress_lossy_pg_zero_profile" + } + }, + + "BUFFER_QUEUE": { + "Ethernet0|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet4|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet16|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet20|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet64|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet68|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet80|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet84|3-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet0|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet4|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet16|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet20|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet64|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet68|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet80|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet84|0-2": { + "profile" : "q_lossy_profile" + }, + "Ethernet0|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet4|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet16|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet20|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet64|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet68|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet80|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet84|5-6": { + "profile" : "q_lossy_profile" + }, + "Ethernet136|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet136|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet136|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet136|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet136|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet144|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet144|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet144|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet144|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet144|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet148|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet148|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet148|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet148|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet148|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet152|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet152|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet152|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet152|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet152|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet156|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet156|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet156|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet156|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet156|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet168|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet168|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet168|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet168|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet168|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet176|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet176|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet176|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet176|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet176|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet180|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet180|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet180|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet180|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet180|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet184|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet184|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet184|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet184|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet184|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet188|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet188|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet188|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet188|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet188|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet200|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet200|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet200|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet200|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet200|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet208|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet208|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet208|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet208|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet208|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet212|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet212|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet212|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet212|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet212|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet216|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet216|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet216|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet216|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet216|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet220|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet220|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet220|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet220|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet220|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet232|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet232|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet232|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet232|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet232|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet240|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet240|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet240|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet240|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet240|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet244|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet244|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet244|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet244|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet244|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet248|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet248|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet248|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet248|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet248|7": { + "profile" : "q_lossy_profile" + }, + "Ethernet252|0-1": { + "profile" : "q_lossy_profile" + }, + "Ethernet252|2-4": { + "profile" : "egress_lossless_profile" + }, + "Ethernet252|5": { + "profile" : "q_lossy_profile" + }, + "Ethernet252|6": { + "profile" : "egress_lossless_profile" + }, + "Ethernet252|7": { + "profile" : "q_lossy_profile" + } +, + "Ethernet8|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet12|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet24|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet28|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet32|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet36|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet40|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet44|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet48|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet52|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet56|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet60|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet72|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet76|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet88|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet92|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet96|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet100|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet104|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet108|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet112|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet116|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet120|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet124|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet128|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet132|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet140|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet160|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet164|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet172|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet192|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet196|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet204|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet224|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet228|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet236|3-4": { + "profile" : "egress_lossless_zero_profile" + }, + "Ethernet8|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet12|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet24|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet28|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet32|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet36|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet40|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet44|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet48|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet52|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet56|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet60|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet72|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet76|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet88|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet92|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet96|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet100|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet104|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet108|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet112|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet116|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet120|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet124|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet128|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet132|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet140|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet160|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet164|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet172|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet192|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet196|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet204|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet224|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet228|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet236|0-2": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet8|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet12|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet24|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet28|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet32|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet36|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet40|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet44|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet48|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet52|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet56|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet60|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet72|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet76|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet88|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet92|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet96|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet100|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet104|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet108|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet112|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet116|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet120|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet124|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet128|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet132|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet140|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet160|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet164|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet172|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet192|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet196|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet204|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet224|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet228|5-6": { + "profile" : "egress_lossy_zero_profile" + }, + "Ethernet236|5-6": { + "profile" : "egress_lossy_zero_profile" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-mellanox4600c-c64-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/qos-mellanox4600c-c64-remap-disabled.json new file mode 100644 index 000000000000..6e15d72074ff --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-mellanox4600c-c64-remap-disabled.json @@ -0,0 +1,1005 @@ +{ + "TC_TO_PRIORITY_GROUP_MAP": { + "AZURE": { + "0": "0", + "1": "0", + "2": "0", + "3": "3", + "4": "4", + "5": "0", + "6": "0", + "7": "7" + } + }, + "MAP_PFC_PRIORITY_TO_QUEUE": { + "AZURE": { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7" + } + }, + "TC_TO_QUEUE_MAP": { + "AZURE": { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7" + } + }, + "DSCP_TO_TC_MAP": { + "AZURE": { + "0" : "1", + "1" : "1", + "2" : "1", + "3" : "3", + "4" : "4", + "5" : "2", + "6" : "1", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "1", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "6", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" + } + }, + "SCHEDULER": { + "scheduler.0": { + "type" : "DWRR", + "weight": "14" + }, + "scheduler.1": { + "type" : "DWRR", + "weight": "15" + } + }, + "PORT_QOS_MAP": { + "Ethernet0": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet4": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet16": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet20": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet64": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet68": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet80": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet84": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet136": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet144": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet148": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet152": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet156": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet168": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet176": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet180": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet184": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet188": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet200": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet208": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet212": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet216": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet220": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet232": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet240": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet244": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet248": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet252": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + } + }, + "WRED_PROFILE": { + "AZURE_LOSSLESS" : { + "wred_green_enable" : "true", + "wred_yellow_enable" : "true", + "wred_red_enable" : "true", + "ecn" : "ecn_all", + "green_max_threshold" : "2097152", + "green_min_threshold" : "1048576", + "yellow_max_threshold" : "2097152", + "yellow_min_threshold" : "1048576", + "red_max_threshold" : "2097152", + "red_min_threshold" : "1048576", + "green_drop_probability" : "5", + "yellow_drop_probability": "5", + "red_drop_probability" : "5" + } + }, + "QUEUE": { + "Ethernet0|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet4|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet16|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet20|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet64|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet68|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet80|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet84|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet136|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet144|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet148|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet152|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet156|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet168|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet176|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet180|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet184|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet188|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet200|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet208|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet212|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet216|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet220|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet232|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet240|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet244|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet248|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet252|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet0|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet4|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet16|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet20|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet64|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet68|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet80|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet84|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet136|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet144|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet148|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet152|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet156|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet168|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet176|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet180|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet184|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet188|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet200|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet208|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet212|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet216|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet220|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet232|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet240|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet244|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet248|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet252|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet0|0": { + "scheduler": "scheduler.0" + }, + "Ethernet4|0": { + "scheduler": "scheduler.0" + }, + "Ethernet16|0": { + "scheduler": "scheduler.0" + }, + "Ethernet20|0": { + "scheduler": "scheduler.0" + }, + "Ethernet64|0": { + "scheduler": "scheduler.0" + }, + "Ethernet68|0": { + "scheduler": "scheduler.0" + }, + "Ethernet80|0": { + "scheduler": "scheduler.0" + }, + "Ethernet84|0": { + "scheduler": "scheduler.0" + }, + "Ethernet136|0": { + "scheduler": "scheduler.0" + }, + "Ethernet144|0": { + "scheduler": "scheduler.0" + }, + "Ethernet148|0": { + "scheduler": "scheduler.0" + }, + "Ethernet152|0": { + "scheduler": "scheduler.0" + }, + "Ethernet156|0": { + "scheduler": "scheduler.0" + }, + "Ethernet168|0": { + "scheduler": "scheduler.0" + }, + "Ethernet176|0": { + "scheduler": "scheduler.0" + }, + "Ethernet180|0": { + "scheduler": "scheduler.0" + }, + "Ethernet184|0": { + "scheduler": "scheduler.0" + }, + "Ethernet188|0": { + "scheduler": "scheduler.0" + }, + "Ethernet200|0": { + "scheduler": "scheduler.0" + }, + "Ethernet208|0": { + "scheduler": "scheduler.0" + }, + "Ethernet212|0": { + "scheduler": "scheduler.0" + }, + "Ethernet216|0": { + "scheduler": "scheduler.0" + }, + "Ethernet220|0": { + "scheduler": "scheduler.0" + }, + "Ethernet232|0": { + "scheduler": "scheduler.0" + }, + "Ethernet240|0": { + "scheduler": "scheduler.0" + }, + "Ethernet244|0": { + "scheduler": "scheduler.0" + }, + "Ethernet248|0": { + "scheduler": "scheduler.0" + }, + "Ethernet252|0": { + "scheduler": "scheduler.0" + }, + "Ethernet0|1": { + "scheduler": "scheduler.0" + }, + "Ethernet4|1": { + "scheduler": "scheduler.0" + }, + "Ethernet16|1": { + "scheduler": "scheduler.0" + }, + "Ethernet20|1": { + "scheduler": "scheduler.0" + }, + "Ethernet64|1": { + "scheduler": "scheduler.0" + }, + "Ethernet68|1": { + "scheduler": "scheduler.0" + }, + "Ethernet80|1": { + "scheduler": "scheduler.0" + }, + "Ethernet84|1": { + "scheduler": "scheduler.0" + }, + "Ethernet136|1": { + "scheduler": "scheduler.0" + }, + "Ethernet144|1": { + "scheduler": "scheduler.0" + }, + "Ethernet148|1": { + "scheduler": "scheduler.0" + }, + "Ethernet152|1": { + "scheduler": "scheduler.0" + }, + "Ethernet156|1": { + "scheduler": "scheduler.0" + }, + "Ethernet168|1": { + "scheduler": "scheduler.0" + }, + "Ethernet176|1": { + "scheduler": "scheduler.0" + }, + "Ethernet180|1": { + "scheduler": "scheduler.0" + }, + "Ethernet184|1": { + "scheduler": "scheduler.0" + }, + "Ethernet188|1": { + "scheduler": "scheduler.0" + }, + "Ethernet200|1": { + "scheduler": "scheduler.0" + }, + "Ethernet208|1": { + "scheduler": "scheduler.0" + }, + "Ethernet212|1": { + "scheduler": "scheduler.0" + }, + "Ethernet216|1": { + "scheduler": "scheduler.0" + }, + "Ethernet220|1": { + "scheduler": "scheduler.0" + }, + "Ethernet232|1": { + "scheduler": "scheduler.0" + }, + "Ethernet240|1": { + "scheduler": "scheduler.0" + }, + "Ethernet244|1": { + "scheduler": "scheduler.0" + }, + "Ethernet248|1": { + "scheduler": "scheduler.0" + }, + "Ethernet252|1": { + "scheduler": "scheduler.0" + }, + "Ethernet0|2": { + "scheduler": "scheduler.0" + }, + "Ethernet4|2": { + "scheduler": "scheduler.0" + }, + "Ethernet16|2": { + "scheduler": "scheduler.0" + }, + "Ethernet20|2": { + "scheduler": "scheduler.0" + }, + "Ethernet64|2": { + "scheduler": "scheduler.0" + }, + "Ethernet68|2": { + "scheduler": "scheduler.0" + }, + "Ethernet80|2": { + "scheduler": "scheduler.0" + }, + "Ethernet84|2": { + "scheduler": "scheduler.0" + }, + "Ethernet136|2": { + "scheduler": "scheduler.0" + }, + "Ethernet144|2": { + "scheduler": "scheduler.0" + }, + "Ethernet148|2": { + "scheduler": "scheduler.0" + }, + "Ethernet152|2": { + "scheduler": "scheduler.0" + }, + "Ethernet156|2": { + "scheduler": "scheduler.0" + }, + "Ethernet168|2": { + "scheduler": "scheduler.0" + }, + "Ethernet176|2": { + "scheduler": "scheduler.0" + }, + "Ethernet180|2": { + "scheduler": "scheduler.0" + }, + "Ethernet184|2": { + "scheduler": "scheduler.0" + }, + "Ethernet188|2": { + "scheduler": "scheduler.0" + }, + "Ethernet200|2": { + "scheduler": "scheduler.0" + }, + "Ethernet208|2": { + "scheduler": "scheduler.0" + }, + "Ethernet212|2": { + "scheduler": "scheduler.0" + }, + "Ethernet216|2": { + "scheduler": "scheduler.0" + }, + "Ethernet220|2": { + "scheduler": "scheduler.0" + }, + "Ethernet232|2": { + "scheduler": "scheduler.0" + }, + "Ethernet240|2": { + "scheduler": "scheduler.0" + }, + "Ethernet244|2": { + "scheduler": "scheduler.0" + }, + "Ethernet248|2": { + "scheduler": "scheduler.0" + }, + "Ethernet252|2": { + "scheduler": "scheduler.0" + }, + "Ethernet0|5": { + "scheduler": "scheduler.0" + }, + "Ethernet4|5": { + "scheduler": "scheduler.0" + }, + "Ethernet16|5": { + "scheduler": "scheduler.0" + }, + "Ethernet20|5": { + "scheduler": "scheduler.0" + }, + "Ethernet64|5": { + "scheduler": "scheduler.0" + }, + "Ethernet68|5": { + "scheduler": "scheduler.0" + }, + "Ethernet80|5": { + "scheduler": "scheduler.0" + }, + "Ethernet84|5": { + "scheduler": "scheduler.0" + }, + "Ethernet136|5": { + "scheduler": "scheduler.0" + }, + "Ethernet144|5": { + "scheduler": "scheduler.0" + }, + "Ethernet148|5": { + "scheduler": "scheduler.0" + }, + "Ethernet152|5": { + "scheduler": "scheduler.0" + }, + "Ethernet156|5": { + "scheduler": "scheduler.0" + }, + "Ethernet168|5": { + "scheduler": "scheduler.0" + }, + "Ethernet176|5": { + "scheduler": "scheduler.0" + }, + "Ethernet180|5": { + "scheduler": "scheduler.0" + }, + "Ethernet184|5": { + "scheduler": "scheduler.0" + }, + "Ethernet188|5": { + "scheduler": "scheduler.0" + }, + "Ethernet200|5": { + "scheduler": "scheduler.0" + }, + "Ethernet208|5": { + "scheduler": "scheduler.0" + }, + "Ethernet212|5": { + "scheduler": "scheduler.0" + }, + "Ethernet216|5": { + "scheduler": "scheduler.0" + }, + "Ethernet220|5": { + "scheduler": "scheduler.0" + }, + "Ethernet232|5": { + "scheduler": "scheduler.0" + }, + "Ethernet240|5": { + "scheduler": "scheduler.0" + }, + "Ethernet244|5": { + "scheduler": "scheduler.0" + }, + "Ethernet248|5": { + "scheduler": "scheduler.0" + }, + "Ethernet252|5": { + "scheduler": "scheduler.0" + }, + "Ethernet0|6": { + "scheduler": "scheduler.0" + }, + "Ethernet4|6": { + "scheduler": "scheduler.0" + }, + "Ethernet16|6": { + "scheduler": "scheduler.0" + }, + "Ethernet20|6": { + "scheduler": "scheduler.0" + }, + "Ethernet64|6": { + "scheduler": "scheduler.0" + }, + "Ethernet68|6": { + "scheduler": "scheduler.0" + }, + "Ethernet80|6": { + "scheduler": "scheduler.0" + }, + "Ethernet84|6": { + "scheduler": "scheduler.0" + }, + "Ethernet136|6": { + "scheduler": "scheduler.0" + }, + "Ethernet144|6": { + "scheduler": "scheduler.0" + }, + "Ethernet148|6": { + "scheduler": "scheduler.0" + }, + "Ethernet152|6": { + "scheduler": "scheduler.0" + }, + "Ethernet156|6": { + "scheduler": "scheduler.0" + }, + "Ethernet168|6": { + "scheduler": "scheduler.0" + }, + "Ethernet176|6": { + "scheduler": "scheduler.0" + }, + "Ethernet180|6": { + "scheduler": "scheduler.0" + }, + "Ethernet184|6": { + "scheduler": "scheduler.0" + }, + "Ethernet188|6": { + "scheduler": "scheduler.0" + }, + "Ethernet200|6": { + "scheduler": "scheduler.0" + }, + "Ethernet208|6": { + "scheduler": "scheduler.0" + }, + "Ethernet212|6": { + "scheduler": "scheduler.0" + }, + "Ethernet216|6": { + "scheduler": "scheduler.0" + }, + "Ethernet220|6": { + "scheduler": "scheduler.0" + }, + "Ethernet232|6": { + "scheduler": "scheduler.0" + }, + "Ethernet240|6": { + "scheduler": "scheduler.0" + }, + "Ethernet244|6": { + "scheduler": "scheduler.0" + }, + "Ethernet248|6": { + "scheduler": "scheduler.0" + }, + "Ethernet252|6": { + "scheduler": "scheduler.0" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-mellanox4600c-c64.json b/src/sonic-config-engine/tests/sample_output/py3/qos-mellanox4600c-c64.json new file mode 100644 index 000000000000..7da43b0d8f38 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-mellanox4600c-c64.json @@ -0,0 +1,1111 @@ +{ + "TC_TO_PRIORITY_GROUP_MAP": { + "AZURE": { + "0": "0", + "1": "0", + "2": "2", + "3": "3", + "4": "4", + "5": "0", + "6": "6", + "7": "0" + } + }, + "MAP_PFC_PRIORITY_TO_QUEUE": { + "AZURE": { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7" + } + }, + "TC_TO_QUEUE_MAP": { + "AZURE": { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7" + } + }, + "DSCP_TO_TC_MAP": { + "AZURE": { + "0" : "1", + "1" : "1", + "2" : "2", + "3" : "3", + "4" : "4", + "5" : "1", + "6" : "6", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "1", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "7", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" + }, + "AZURE_UPLINK": { + "0" : "1", + "1" : "1", + "2" : "1", + "3" : "3", + "4" : "4", + "5" : "1", + "6" : "1", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "1", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "7", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" + } + }, + "SCHEDULER": { + "scheduler.0": { + "type" : "DWRR", + "weight": "14" + }, + "scheduler.1": { + "type" : "DWRR", + "weight": "15" + } + }, + "PORT_QOS_MAP": { + "Ethernet0": { + "dscp_to_tc_map" : "AZURE_UPLINK", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet4": { + "dscp_to_tc_map" : "AZURE_UPLINK", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet16": { + "dscp_to_tc_map" : "AZURE_UPLINK", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet20": { + "dscp_to_tc_map" : "AZURE_UPLINK", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet64": { + "dscp_to_tc_map" : "AZURE_UPLINK", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet68": { + "dscp_to_tc_map" : "AZURE_UPLINK", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet80": { + "dscp_to_tc_map" : "AZURE_UPLINK", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet84": { + "dscp_to_tc_map" : "AZURE_UPLINK", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet136": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet144": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet148": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet152": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet156": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet168": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet176": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet180": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet184": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet188": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet200": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet208": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet212": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet216": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet220": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet232": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet240": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet244": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet248": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + }, + "Ethernet252": { + "dscp_to_tc_map" : "AZURE", + "tc_to_queue_map" : "AZURE", + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE", + "pfc_enable" : "2,3,4,6", + "pfcwd_sw_enable" : "3,4" + } + }, + "WRED_PROFILE": { + "AZURE_LOSSLESS" : { + "wred_green_enable" : "true", + "wred_yellow_enable" : "true", + "wred_red_enable" : "true", + "ecn" : "ecn_all", + "green_max_threshold" : "2097152", + "green_min_threshold" : "1048576", + "yellow_max_threshold" : "2097152", + "yellow_min_threshold" : "1048576", + "red_max_threshold" : "2097152", + "red_min_threshold" : "1048576", + "green_drop_probability" : "5", + "yellow_drop_probability": "5", + "red_drop_probability" : "5" + } + }, + "QUEUE": { + "Ethernet0|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet4|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet16|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet20|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet64|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet68|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet80|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet84|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet136|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet144|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet148|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet152|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet156|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet168|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet176|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet180|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet184|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet188|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet200|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet208|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet212|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet216|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet220|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet232|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet240|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet244|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet248|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet252|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet0|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet4|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet16|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet20|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet64|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet68|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet80|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet84|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet136|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet144|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet148|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet152|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet156|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet168|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet176|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet180|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet184|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet188|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet200|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet208|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet212|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet216|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet220|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet232|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet240|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet244|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet248|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet252|4": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet0|0": { + "scheduler": "scheduler.0" + }, + "Ethernet4|0": { + "scheduler": "scheduler.0" + }, + "Ethernet16|0": { + "scheduler": "scheduler.0" + }, + "Ethernet20|0": { + "scheduler": "scheduler.0" + }, + "Ethernet64|0": { + "scheduler": "scheduler.0" + }, + "Ethernet68|0": { + "scheduler": "scheduler.0" + }, + "Ethernet80|0": { + "scheduler": "scheduler.0" + }, + "Ethernet84|0": { + "scheduler": "scheduler.0" + }, + "Ethernet136|0": { + "scheduler": "scheduler.0" + }, + "Ethernet144|0": { + "scheduler": "scheduler.0" + }, + "Ethernet148|0": { + "scheduler": "scheduler.0" + }, + "Ethernet152|0": { + "scheduler": "scheduler.0" + }, + "Ethernet156|0": { + "scheduler": "scheduler.0" + }, + "Ethernet168|0": { + "scheduler": "scheduler.0" + }, + "Ethernet176|0": { + "scheduler": "scheduler.0" + }, + "Ethernet180|0": { + "scheduler": "scheduler.0" + }, + "Ethernet184|0": { + "scheduler": "scheduler.0" + }, + "Ethernet188|0": { + "scheduler": "scheduler.0" + }, + "Ethernet200|0": { + "scheduler": "scheduler.0" + }, + "Ethernet208|0": { + "scheduler": "scheduler.0" + }, + "Ethernet212|0": { + "scheduler": "scheduler.0" + }, + "Ethernet216|0": { + "scheduler": "scheduler.0" + }, + "Ethernet220|0": { + "scheduler": "scheduler.0" + }, + "Ethernet232|0": { + "scheduler": "scheduler.0" + }, + "Ethernet240|0": { + "scheduler": "scheduler.0" + }, + "Ethernet244|0": { + "scheduler": "scheduler.0" + }, + "Ethernet248|0": { + "scheduler": "scheduler.0" + }, + "Ethernet252|0": { + "scheduler": "scheduler.0" + }, + "Ethernet0|1": { + "scheduler": "scheduler.0" + }, + "Ethernet4|1": { + "scheduler": "scheduler.0" + }, + "Ethernet16|1": { + "scheduler": "scheduler.0" + }, + "Ethernet20|1": { + "scheduler": "scheduler.0" + }, + "Ethernet64|1": { + "scheduler": "scheduler.0" + }, + "Ethernet68|1": { + "scheduler": "scheduler.0" + }, + "Ethernet80|1": { + "scheduler": "scheduler.0" + }, + "Ethernet84|1": { + "scheduler": "scheduler.0" + }, + "Ethernet136|1": { + "scheduler": "scheduler.0" + }, + "Ethernet144|1": { + "scheduler": "scheduler.0" + }, + "Ethernet148|1": { + "scheduler": "scheduler.0" + }, + "Ethernet152|1": { + "scheduler": "scheduler.0" + }, + "Ethernet156|1": { + "scheduler": "scheduler.0" + }, + "Ethernet168|1": { + "scheduler": "scheduler.0" + }, + "Ethernet176|1": { + "scheduler": "scheduler.0" + }, + "Ethernet180|1": { + "scheduler": "scheduler.0" + }, + "Ethernet184|1": { + "scheduler": "scheduler.0" + }, + "Ethernet188|1": { + "scheduler": "scheduler.0" + }, + "Ethernet200|1": { + "scheduler": "scheduler.0" + }, + "Ethernet208|1": { + "scheduler": "scheduler.0" + }, + "Ethernet212|1": { + "scheduler": "scheduler.0" + }, + "Ethernet216|1": { + "scheduler": "scheduler.0" + }, + "Ethernet220|1": { + "scheduler": "scheduler.0" + }, + "Ethernet232|1": { + "scheduler": "scheduler.0" + }, + "Ethernet240|1": { + "scheduler": "scheduler.0" + }, + "Ethernet244|1": { + "scheduler": "scheduler.0" + }, + "Ethernet248|1": { + "scheduler": "scheduler.0" + }, + "Ethernet252|1": { + "scheduler": "scheduler.0" + }, + "Ethernet0|2": { + "scheduler": "scheduler.0" + }, + "Ethernet4|2": { + "scheduler": "scheduler.0" + }, + "Ethernet16|2": { + "scheduler": "scheduler.0" + }, + "Ethernet20|2": { + "scheduler": "scheduler.0" + }, + "Ethernet64|2": { + "scheduler": "scheduler.0" + }, + "Ethernet68|2": { + "scheduler": "scheduler.0" + }, + "Ethernet80|2": { + "scheduler": "scheduler.0" + }, + "Ethernet84|2": { + "scheduler": "scheduler.0" + }, + "Ethernet136|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet144|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet148|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet152|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet156|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet168|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet176|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet180|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet184|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet188|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet200|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet208|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet212|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet216|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet220|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet232|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet240|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet244|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet248|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet252|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet0|5": { + "scheduler": "scheduler.0" + }, + "Ethernet4|5": { + "scheduler": "scheduler.0" + }, + "Ethernet16|5": { + "scheduler": "scheduler.0" + }, + "Ethernet20|5": { + "scheduler": "scheduler.0" + }, + "Ethernet64|5": { + "scheduler": "scheduler.0" + }, + "Ethernet68|5": { + "scheduler": "scheduler.0" + }, + "Ethernet80|5": { + "scheduler": "scheduler.0" + }, + "Ethernet84|5": { + "scheduler": "scheduler.0" + }, + "Ethernet136|5": { + "scheduler": "scheduler.0" + }, + "Ethernet144|5": { + "scheduler": "scheduler.0" + }, + "Ethernet148|5": { + "scheduler": "scheduler.0" + }, + "Ethernet152|5": { + "scheduler": "scheduler.0" + }, + "Ethernet156|5": { + "scheduler": "scheduler.0" + }, + "Ethernet168|5": { + "scheduler": "scheduler.0" + }, + "Ethernet176|5": { + "scheduler": "scheduler.0" + }, + "Ethernet180|5": { + "scheduler": "scheduler.0" + }, + "Ethernet184|5": { + "scheduler": "scheduler.0" + }, + "Ethernet188|5": { + "scheduler": "scheduler.0" + }, + "Ethernet200|5": { + "scheduler": "scheduler.0" + }, + "Ethernet208|5": { + "scheduler": "scheduler.0" + }, + "Ethernet212|5": { + "scheduler": "scheduler.0" + }, + "Ethernet216|5": { + "scheduler": "scheduler.0" + }, + "Ethernet220|5": { + "scheduler": "scheduler.0" + }, + "Ethernet232|5": { + "scheduler": "scheduler.0" + }, + "Ethernet240|5": { + "scheduler": "scheduler.0" + }, + "Ethernet244|5": { + "scheduler": "scheduler.0" + }, + "Ethernet248|5": { + "scheduler": "scheduler.0" + }, + "Ethernet252|5": { + "scheduler": "scheduler.0" + }, + "Ethernet0|6": { + "scheduler": "scheduler.0" + }, + "Ethernet4|6": { + "scheduler": "scheduler.0" + }, + "Ethernet16|6": { + "scheduler": "scheduler.0" + }, + "Ethernet20|6": { + "scheduler": "scheduler.0" + }, + "Ethernet64|6": { + "scheduler": "scheduler.0" + }, + "Ethernet68|6": { + "scheduler": "scheduler.0" + }, + "Ethernet80|6": { + "scheduler": "scheduler.0" + }, + "Ethernet84|6": { + "scheduler": "scheduler.0" + }, + "Ethernet136|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet144|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet148|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet152|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet156|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet168|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet176|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet180|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet184|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet188|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet200|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet208|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet212|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet216|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet220|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet232|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet240|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet244|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet248|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet252|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + } + } +} diff --git a/src/sonic-config-engine/tests/test_j2files.py b/src/sonic-config-engine/tests/test_j2files.py index 12e855c66898..3d2d2846dcb8 100644 --- a/src/sonic-config-engine/tests/test_j2files.py +++ b/src/sonic-config-engine/tests/test_j2files.py @@ -309,8 +309,10 @@ def test_qos_dscp_remapping_render_template(self): '../../../device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8', '../../../device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8', '../../../device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64', + '../../../device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64', + '../../../device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64', '../../../device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S' - ] + ] sample_outputs = [ 'qos-arista7050cx3-dualtor.json', 'qos-arista7260-dualtor.json', @@ -318,6 +320,8 @@ def test_qos_dscp_remapping_render_template(self): 'qos-arista7050cx3-dualtor-remap-disabled.json', 'qos-arista7260-dualtor-remap-disabled.json', 'qos-arista7260-t1-remap-disabled.json', + 'qos-mellanox4600c-c64.json', + 'qos-mellanox4600c-c64-remap-disabled.json', 'qos-arista7050-t0-storage-backend.json' ] sample_minigraph_files = [ @@ -327,8 +331,11 @@ def test_qos_dscp_remapping_render_template(self): 'sample-arista-7050cx3-dualtor-minigraph-remap-disabled.xml', 'sample-arista-7260-dualtor-minigraph-remap-disabled.xml', 'sample-arista-7260-t1-minigraph-remap-disabled.xml', + 'sample-mellanox-4600c-t1-minigraph.xml', + 'sample-mellanox-4600c-t1-minigraph-remap-disabled.xml', 'sample-arista-7050-t0-storage-backend-minigraph.xml' ] + for i, path in enumerate(dir_paths): device_template_path = os.path.join(self.test_dir, path) sample_output = sample_outputs[i] @@ -434,7 +441,7 @@ def test_extra_lossless_buffer_for_tunnel_remapping(self): if utils.PYvX_DIR != 'py3': # Skip on python2 as the change will not be backported to previous version return - + TEST_DATA = [ # (vendor, platform, sku, minigraph, buffer_template, sample_output ) ('arista', 'x86_64-arista_7050cx3_32s', 'Arista-7050CX3-32S-D48C8', 'sample-arista-7050cx3-dualtor-minigraph.xml', 'buffers.json.j2', 'buffer-arista7050cx3-dualtor.json'), @@ -442,7 +449,11 @@ def test_extra_lossless_buffer_for_tunnel_remapping(self): ('arista', 'x86_64-arista_7260cx3_64', 'Arista-7260CX3-D108C8', 'sample-arista-7260-dualtor-minigraph.xml', 'buffers.json.j2', 'buffer-arista7260-dualtor.json'), ('arista', 'x86_64-arista_7260cx3_64', 'Arista-7260CX3-D108C8', 'sample-arista-7260-dualtor-minigraph-remap-disabled.xml', 'buffers.json.j2', 'buffer-arista7260-dualtor-remap-disabled.json'), ('arista', 'x86_64-arista_7260cx3_64', 'Arista-7260CX3-C64', 'sample-arista-7260-t1-minigraph.xml', 'buffers.json.j2', 'buffer-arista7260-t1.json'), - ('arista', 'x86_64-arista_7260cx3_64', 'Arista-7260CX3-C64', 'sample-arista-7260-t1-minigraph-remap-disabled.xml', 'buffers.json.j2', 'buffer-arista7260-t1-remap-disabled.json') + ('arista', 'x86_64-arista_7260cx3_64', 'Arista-7260CX3-C64', 'sample-arista-7260-t1-minigraph-remap-disabled.xml', 'buffers.json.j2', 'buffer-arista7260-t1-remap-disabled.json'), + ('mellanox', 'x86_64-mlnx_msn4600c-r0', 'Mellanox-SN4600C-C64', 'sample-mellanox-4600c-t1-minigraph.xml', 'buffers_dynamic.json.j2', 'buffers-mellanox4600c-t1-dynamic.json'), + ('mellanox', 'x86_64-mlnx_msn4600c-r0', 'Mellanox-SN4600C-C64', 'sample-mellanox-4600c-t1-minigraph.xml', 'buffers.json.j2', 'buffers-mellanox4600c-t1.json'), + ('mellanox', 'x86_64-mlnx_msn4600c-r0', 'Mellanox-SN4600C-C64', 'sample-mellanox-4600c-t1-minigraph-remap-disabled.xml', 'buffers_dynamic.json.j2', 'buffers-mellanox4600c-t1-dynamic-remap-disabled.json'), + ('mellanox', 'x86_64-mlnx_msn4600c-r0', 'Mellanox-SN4600C-C64', 'sample-mellanox-4600c-t1-minigraph-remap-disabled.xml', 'buffers.json.j2', 'buffers-mellanox4600c-t1-remap-disabled.json') ] for test_data in TEST_DATA: From eafaf08780908552a08532d4ac41fa9d5f3f6347 Mon Sep 17 00:00:00 2001 From: Junhua Zhai Date: Fri, 22 Jul 2022 01:52:46 +0000 Subject: [PATCH 142/259] [macsec] cli multi-namespace support (#11285) Enable multi-asic platform support for macsec cli --- .../cli-plugin-tests/conftest.py | 1 + .../cli-plugin-tests/mock_single_asic.py | 81 +++++++++++++++++++ .../cli-plugin-tests/mock_tables.py | 5 +- .../cli-plugin-tests/test_config_macsec.py | 64 +++++++-------- .../cli/config/plugins/macsec.py | 69 +++++++++------- .../cli/show/plugins/show_macsec.py | 56 ++++++++----- 6 files changed, 193 insertions(+), 83 deletions(-) create mode 100644 dockers/docker-macsec/cli-plugin-tests/mock_single_asic.py diff --git a/dockers/docker-macsec/cli-plugin-tests/conftest.py b/dockers/docker-macsec/cli-plugin-tests/conftest.py index e6608ce71265..c7fd38b84179 100644 --- a/dockers/docker-macsec/cli-plugin-tests/conftest.py +++ b/dockers/docker-macsec/cli-plugin-tests/conftest.py @@ -1,5 +1,6 @@ import pytest import mock_tables # lgtm [py/unused-import] +import mock_single_asic # lgtm[py/unused-import] from unittest import mock diff --git a/dockers/docker-macsec/cli-plugin-tests/mock_single_asic.py b/dockers/docker-macsec/cli-plugin-tests/mock_single_asic.py new file mode 100644 index 000000000000..db5642b4652c --- /dev/null +++ b/dockers/docker-macsec/cli-plugin-tests/mock_single_asic.py @@ -0,0 +1,81 @@ +# MONKEY PATCH!!! +from unittest import mock + +from sonic_py_common import multi_asic +from utilities_common import multi_asic as multi_asic_util + +mock_intf_table = { + '': { + 'eth0': { + 2: [{'addr': '10.1.1.1', 'netmask': '255.255.255.0', 'broadcast': '10.1.1.1'}], + 10: [{'addr': '3100::1', 'netmask': 'ffff:ffff:ffff:ffff::/64'}] + }, + 'Ethernet0': { + 17: [{'addr': '82:fd:d1:5b:45:2f', 'broadcast': 'ff:ff:ff:ff:ff:ff'}], + 2: [ + {'addr': '20.1.1.1', 'netmask': '255.255.255.0', 'broadcast': '20.1.1.1'}, + {'addr': '21.1.1.1', 'netmask': '255.255.255.0', 'broadcast': '21.1.1.1'} + ], + 10: [ + {'addr': 'aa00::1', 'netmask': 'ffff:ffff:ffff:ffff::/64'}, + {'addr': '2100::1', 'netmask': 'ffff:ffff:ffff:ffff::/64'}, + {'addr': 'fe80::64be:a1ff:fe85:c6c4%Ethernet0', 'netmask': 'ffff:ffff:ffff:ffff::/64'} + ] + }, + 'PortChannel0001': { + 17: [{'addr': '82:fd:d1:5b:45:2f', 'broadcast': 'ff:ff:ff:ff:ff:ff'}], + 2: [{'addr': '30.1.1.1', 'netmask': '255.255.255.0', 'broadcast': '30.1.1.1'}], + 10: [ + {'addr': 'ab00::1', 'netmask': 'ffff:ffff:ffff:ffff::/64'}, + {'addr': 'fe80::cc8d:60ff:fe08:139f%PortChannel0001', 'netmask': 'ffff:ffff:ffff:ffff::/64'} + ] + }, + 'Vlan100': { + 17: [{'addr': '82:fd:d1:5b:45:2f', 'broadcast': 'ff:ff:ff:ff:ff:ff'}], + 2: [{'addr': '40.1.1.1', 'netmask': '255.255.255.0', 'broadcast': '30.1.1.1'}], + 10: [ + {'addr': 'cc00::1', 'netmask': 'ffff:ffff:ffff:ffff::/64'}, + {'addr': 'fe80::c029:3fff:fe41:cf56%Vlan100', 'netmask': 'ffff:ffff:ffff:ffff::/64'} + ] + }, + 'lo': { + 2: [{'addr': '127.0.0.1', 'netmask': '255.0.0.0', 'broadcast': '127.255.255.255'}], + 10: [{'addr': '::1', 'netmask':'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128'}] + } + } +} + + +def mock_get_num_asics(): + return 1 + +def mock_is_multi_asic(): + return False + +def mock_get_namespace_list(namespace=None): + return [''] + + +def mock_single_asic_get_ip_intf_from_ns(namespace): + interfaces = [] + try: + interfaces = list(mock_intf_table[namespace].keys()) + except KeyError: + pass + return interfaces + + +def mock_single_asic_get_ip_intf_addr_from_ns(namespace, iface): + ipaddresses = [] + try: + ipaddresses = mock_intf_table[namespace][iface] + except KeyError: + pass + return ipaddresses + + +multi_asic.is_multi_asic = mock_is_multi_asic +multi_asic.get_num_asics = mock_get_num_asics +multi_asic.get_namespace_list = mock_get_namespace_list +multi_asic_util.multi_asic_get_ip_intf_from_ns = mock_single_asic_get_ip_intf_from_ns +multi_asic_util.multi_asic_get_ip_intf_addr_from_ns = mock_single_asic_get_ip_intf_addr_from_ns diff --git a/dockers/docker-macsec/cli-plugin-tests/mock_tables.py b/dockers/docker-macsec/cli-plugin-tests/mock_tables.py index 3708644bfba2..7580f9929ed5 100644 --- a/dockers/docker-macsec/cli-plugin-tests/mock_tables.py +++ b/dockers/docker-macsec/cli-plugin-tests/mock_tables.py @@ -125,7 +125,10 @@ def __init__(self, db): def get(self, macsec, name): key = self.db.hget("COUNTERS_MACSEC_NAME_MAP", name) - return self.db.get("COUNTERS:" + key) + if key: + fvs = self.db.get("COUNTERS:" + key) + if fvs: return True, fvs + return False, () swsssdk.interface.DBInterface._subscribe_keyspace_notification = _subscribe_keyspace_notification diff --git a/dockers/docker-macsec/cli-plugin-tests/test_config_macsec.py b/dockers/docker-macsec/cli-plugin-tests/test_config_macsec.py index 425ca2afa433..45ab80c7ed12 100644 --- a/dockers/docker-macsec/cli-plugin-tests/test_config_macsec.py +++ b/dockers/docker-macsec/cli-plugin-tests/test_config_macsec.py @@ -2,7 +2,6 @@ from unittest import mock from click.testing import CliRunner -from utilities_common.db import Db sys.path.append('../cli/config/plugins/') import macsec @@ -20,14 +19,13 @@ def test_plugin_registration(self): cli.add_command.assert_called_once_with(macsec.macsec) def test_default_profile(self, mock_cfgdb): + cfgdb = mock_cfgdb runner = CliRunner() - db = Db() - db.cfgdb = mock_cfgdb - result = runner.invoke(macsec.macsec.commands["profile"].commands["add"], - [profile_name, "--primary_cak=" + primary_cak,"--primary_ckn=" + primary_ckn], - obj=db) + result = runner.invoke(macsec.macsec, + ["profile", "add", profile_name, "--primary_cak=" + primary_cak,"--primary_ckn=" + primary_ckn], + obj=cfgdb) assert result.exit_code == 0 - profile_table = db.cfgdb.get_entry("MACSEC_PROFILE", profile_name) + profile_table = cfgdb.get_entry("MACSEC_PROFILE", profile_name) assert profile_table assert profile_table["priority"] == "255" assert profile_table["cipher_suite"] == "GCM-AES-128" @@ -39,15 +37,14 @@ def test_default_profile(self, mock_cfgdb): assert profile_table["send_sci"] == "true" assert "rekey_period" not in profile_table - result = runner.invoke(macsec.macsec.commands["profile"].commands["del"], [profile_name], obj=db) + result = runner.invoke(macsec.macsec, ["profile", "del", profile_name], obj=cfgdb) assert result.exit_code == 0, "exit code: {}, Exception: {}, Traceback: {}".format(result.exit_code, result.exception, result.exc_info) - profile_table = db.cfgdb.get_entry("MACSEC_PROFILE", profile_name) + profile_table = cfgdb.get_entry("MACSEC_PROFILE", profile_name) assert not profile_table def test_macsec_valid_profile(self, mock_cfgdb): + cfgdb = mock_cfgdb runner = CliRunner() - db = Db() - db.cfgdb = mock_cfgdb profile_name = "test" profile_map = { @@ -67,9 +64,9 @@ def test_macsec_valid_profile(self, mock_cfgdb): if v is not None: options[-1] += "=" + str(v) - result = runner.invoke(macsec.macsec.commands["profile"].commands["add"], options, obj=db) + result = runner.invoke(macsec.macsec, ["profile", "add"] + options, obj=cfgdb) assert result.exit_code == 0, "exit code: {}, Exception: {}, Traceback: {}".format(result.exit_code, result.exception, result.exc_info) - profile_table = db.cfgdb.get_entry("MACSEC_PROFILE", profile_name) + profile_table = cfgdb.get_entry("MACSEC_PROFILE", profile_name) assert profile_table assert profile_table["priority"] == str(profile_map["priority"]) assert profile_table["cipher_suite"] == profile_map["cipher_suite"] @@ -87,62 +84,65 @@ def test_macsec_valid_profile(self, mock_cfgdb): assert profile_table["rekey_period"] == str(profile_map["rekey_period"]) def test_macsec_invalid_profile(self, mock_cfgdb): + cfgdb = mock_cfgdb runner = CliRunner() - db = Db() - db.cfgdb = mock_cfgdb # Loss primary cak and primary ckn - result = runner.invoke(macsec.macsec.commands["profile"].commands["add"], ["test"], obj=db) + result = runner.invoke(macsec.macsec, ["profile", "add", "test"], obj=cfgdb) assert result.exit_code != 0 # Invalid primary cak - result = runner.invoke(macsec.macsec.commands["profile"].commands["add"], ["test", "--primary_cak=abcdfghjk90123456789012345678912","--primary_ckn=01234567890123456789012345678912", "--cipher_suite=GCM-AES-128"], obj=db) + result = runner.invoke(macsec.macsec, ["profile", "add", "test", + "--primary_cak=abcdfghjk90123456789012345678912","--primary_ckn=01234567890123456789012345678912", + "--cipher_suite=GCM-AES-128"], obj=cfgdb) assert result.exit_code != 0 # Invalid primary cak length - result = runner.invoke(macsec.macsec.commands["profile"].commands["add"], ["test", "--primary_cak=01234567890123456789012345678912","--primary_ckn=01234567890123456789012345678912", "--cipher_suite=GCM-AES-256"], obj=db) + result = runner.invoke(macsec.macsec, ["profile", "add", "test", + "--primary_cak=01234567890123456789012345678912","--primary_ckn=01234567890123456789012345678912", + "--cipher_suite=GCM-AES-256"], obj=cfgdb) assert result.exit_code != 0 def test_macsec_port(self, mock_cfgdb): + cfgdb = mock_cfgdb runner = CliRunner() - db = Db() - db.cfgdb = mock_cfgdb - result = runner.invoke(macsec.macsec.commands["profile"].commands["add"], ["test", "--primary_cak=01234567890123456789012345678912","--primary_ckn=01234567890123456789012345678912"], obj=db) + result = runner.invoke(macsec.macsec, ["profile", "add", "test", + "--primary_cak=01234567890123456789012345678912","--primary_ckn=01234567890123456789012345678912"], + obj=cfgdb) assert result.exit_code == 0, "exit code: {}, Exception: {}, Traceback: {}".format(result.exit_code, result.exception, result.exc_info) - result = runner.invoke(macsec.macsec.commands["port"].commands["add"], ["Ethernet0", "test"], obj=db) + result = runner.invoke(macsec.macsec, ["port", "add", "Ethernet0", "test"], obj=cfgdb) assert result.exit_code == 0, "exit code: {}, Exception: {}, Traceback: {}".format(result.exit_code, result.exception, result.exc_info) - port_table = db.cfgdb.get_entry("PORT", "Ethernet0") + port_table = cfgdb.get_entry("PORT", "Ethernet0") assert port_table assert port_table["macsec"] == "test" assert port_table["admin_status"] == "up" - result = runner.invoke(macsec.macsec.commands["profile"].commands["del"], ["test"], obj=db) + result = runner.invoke(macsec.macsec, ["profile", "del", "test"], obj=cfgdb) assert result.exit_code != 0 - result = runner.invoke(macsec.macsec.commands["port"].commands["del"], ["Ethernet0"], obj=db) + result = runner.invoke(macsec.macsec, ["port", "del", "Ethernet0"], obj=cfgdb) assert result.exit_code == 0, "exit code: {}, Exception: {}, Traceback: {}".format(result.exit_code, result.exception, result.exc_info) - port_table = db.cfgdb.get_entry("PORT", "Ethernet0") + port_table = cfgdb.get_entry("PORT", "Ethernet0") assert "macsec" not in port_table or not port_table["macsec"] assert port_table["admin_status"] == "up" def test_macsec_invalid_operation(self, mock_cfgdb): + cfgdb = mock_cfgdb runner = CliRunner() - db = Db() - db.cfgdb = mock_cfgdb # Enable nonexisted profile - result = runner.invoke(macsec.macsec.commands["port"].commands["add"], ["Ethernet0", "test"], obj=db) + result = runner.invoke(macsec.macsec, ["port", "add", "Ethernet0", "test"], obj=cfgdb) assert result.exit_code != 0 # Delete nonexisted profile - result = runner.invoke(macsec.macsec.commands["profile"].commands["del"], ["test"], obj=db) + result = runner.invoke(macsec.macsec, ["profile", "del", "test"], obj=cfgdb) assert result.exit_code != 0 - result = runner.invoke(macsec.macsec.commands["profile"].commands["add"], ["test", "--primary_cak=01234567890123456789012345678912","--primary_ckn=01234567890123456789012345678912"], obj=db) + result = runner.invoke(macsec.macsec, ["profile", "add", "test", "--primary_cak=01234567890123456789012345678912","--primary_ckn=01234567890123456789012345678912"], obj=cfgdb) assert result.exit_code == 0, "exit code: {}, Exception: {}, Traceback: {}".format(result.exit_code, result.exception, result.exc_info) # Repeat add profile - result = runner.invoke(macsec.macsec.commands["profile"].commands["add"], ["test", "--primary_cak=01234567890123456789012345678912","--primary_ckn=01234567890123456789012345678912"], obj=db) + result = runner.invoke(macsec.macsec, ["profile", "add", "test", "--primary_cak=01234567890123456789012345678912","--primary_ckn=01234567890123456789012345678912"], obj=cfgdb) assert result.exit_code != 0 diff --git a/dockers/docker-macsec/cli/config/plugins/macsec.py b/dockers/docker-macsec/cli/config/plugins/macsec.py index b76de8c98c7f..1b820dfd0e99 100644 --- a/dockers/docker-macsec/cli/config/plugins/macsec.py +++ b/dockers/docker-macsec/cli/config/plugins/macsec.py @@ -1,13 +1,27 @@ import click import utilities_common.cli as clicommon +from sonic_py_common import multi_asic +from swsscommon.swsscommon import ConfigDBConnector +from utilities_common.constants import DEFAULT_NAMESPACE +from utilities_common.db import Db # # 'macsec' group ('config macsec ...') # @click.group(cls=clicommon.AbbreviationGroup, name='macsec') -def macsec(): +# TODO add "hidden=True if this is a single ASIC platform, once we have click 7.0 in all branches. +@click.option('-n', '--namespace', help='Namespace name', + required=True if multi_asic.is_multi_asic() else False, type=click.Choice(multi_asic.get_namespace_list())) +@click.pass_context +def macsec(ctx, namespace): """MACsec-related configuration tasks""" - pass + if not ctx.obj or isinstance(ctx.obj, Db): + # Set namespace to default_namespace if it is None. + if namespace is None: + namespace = DEFAULT_NAMESPACE + config_db = ConfigDBConnector(use_unix_socket_path=True, namespace=str(namespace)) + config_db.connect() + ctx.obj = config_db # @@ -24,31 +38,29 @@ def macsec_port(): @macsec_port.command('add') @click.argument('port', metavar='', required=True) @click.argument('profile', metavar='', required=True) -@clicommon.pass_db -def add_port(db, port, profile): +def add_port(port, profile): """ Add MACsec port """ ctx = click.get_current_context() + config_db = ctx.obj if clicommon.get_interface_naming_mode() == "alias": - alias = port - iface_alias_converter = clicommon.InterfaceAliasConverter(db) - port = iface_alias_converter.alias_to_name(alias) + port = interface_alias_to_name(config_db, port) if port is None: - ctx.fail("cannot find port name for alias {}".format(alias)) + ctx.fail("cannot find port name for alias {}".format(port)) - profile_entry = db.cfgdb.get_entry('MACSEC_PROFILE', profile) + profile_entry = config_db.get_entry('MACSEC_PROFILE', profile) if len(profile_entry) == 0: ctx.fail("profile {} doesn't exist".format(profile)) - port_entry = db.cfgdb.get_entry('PORT', port) + port_entry = config_db.get_entry('PORT', port) if len(port_entry) == 0: ctx.fail("port {} doesn't exist".format(port)) port_entry['macsec'] = profile - db.cfgdb.set_entry("PORT", port, port_entry) + config_db.set_entry("PORT", port, port_entry) # @@ -56,27 +68,25 @@ def add_port(db, port, profile): # @macsec_port.command('del') @click.argument('port', metavar='', required=True) -@clicommon.pass_db -def del_port(db, port): +def del_port(port): """ Delete MACsec port """ ctx = click.get_current_context() + config_db = ctx.obj if clicommon.get_interface_naming_mode() == "alias": - alias = port - iface_alias_converter = clicommon.InterfaceAliasConverter(db) - port = iface_alias_converter.alias_to_name(alias) + port = interface_alias_to_name(config_db, port) if port is None: - ctx.fail("cannot find port name for alias {}".format(alias)) + ctx.fail("cannot find port name for alias {}".format(port)) - port_entry = db.cfgdb.get_entry('PORT', port) + port_entry = config_db.get_entry('PORT', port) if len(port_entry) == 0: ctx.fail("port {} doesn't exist".format(port)) del port_entry['macsec'] - db.cfgdb.set_entry("PORT", port, port_entry) + config_db.set_entry("PORT", port, port_entry) # @@ -109,13 +119,14 @@ def is_hexstring(hexstring: str): @click.option('--replay_window', metavar='', required=False, default=0, show_default=True, type=click.IntRange(0, 2**32), help="Replay window size that is the number of packets that could be out of order. This field works only if ENABLE_REPLAY_PROTECT is true.") @click.option('--send_sci/--no_send_sci', metavar='', required=False, default=True, show_default=True, is_flag=True, help="Send SCI in SecTAG field of MACsec header.") @click.option('--rekey_period', metavar='', required=False, default=0, show_default=True, type=click.IntRange(min=0), help="The period of proactively refresh (Unit second).") -@clicommon.pass_db -def add_profile(db, profile, priority, cipher_suite, primary_cak, primary_ckn, policy, enable_replay_protect, replay_window, send_sci, rekey_period): +def add_profile(profile, priority, cipher_suite, primary_cak, primary_ckn, policy, enable_replay_protect, replay_window, send_sci, rekey_period): """ Add MACsec profile """ ctx = click.get_current_context() - profile_entry = db.cfgdb.get_entry('MACSEC_PROFILE', profile) + config_db = ctx.obj + + profile_entry = config_db.get_entry('MACSEC_PROFILE', profile) if not len(profile_entry) == 0: ctx.fail("{} already exists".format(profile)) @@ -157,7 +168,7 @@ def add_profile(db, profile, priority, cipher_suite, primary_cak, primary_ckn, p profile_table[k] = "false" else: profile_table[k] = str(v) - db.cfgdb.set_entry("MACSEC_PROFILE", profile, profile_table) + config_db.set_entry("MACSEC_PROFILE", profile, profile_table) # @@ -165,24 +176,24 @@ def add_profile(db, profile, priority, cipher_suite, primary_cak, primary_ckn, p # @macsec_profile.command('del') @click.argument('profile', metavar='', required=True) -@clicommon.pass_db -def del_profile(db, profile): +def del_profile( profile): """ Delete MACsec profile """ ctx = click.get_current_context() + config_db = ctx.obj - profile_entry = db.cfgdb.get_entry('MACSEC_PROFILE', profile) + profile_entry = config_db.get_entry('MACSEC_PROFILE', profile) if len(profile_entry) == 0: ctx.fail("{} doesn't exist".format(profile)) # Check if the profile is being used by any port - for port in db.cfgdb.get_keys('PORT'): - attr = db.cfgdb.get_entry('PORT', port) + for port in config_db.get_keys('PORT'): + attr = config_db.get_entry('PORT', port) if 'macsec' in attr and attr['macsec'] == profile: ctx.fail("{} is being used by port {}, Please remove the MACsec from the port firstly".format(profile, port)) - db.cfgdb.set_entry("MACSEC_PROFILE", profile, None) + config_db.set_entry("MACSEC_PROFILE", profile, None) def register(cli): diff --git a/dockers/docker-macsec/cli/show/plugins/show_macsec.py b/dockers/docker-macsec/cli/show/plugins/show_macsec.py index 0d32f7e96249..3f1058df3572 100644 --- a/dockers/docker-macsec/cli/show/plugins/show_macsec.py +++ b/dockers/docker-macsec/cli/show/plugins/show_macsec.py @@ -4,22 +4,19 @@ import click from tabulate import tabulate -from swsscommon.swsscommon import SonicV2Connector +import utilities_common.multi_asic as multi_asic_util from swsscommon.swsscommon import CounterTable, MacsecCounter -DB_CONNECTOR = SonicV2Connector(use_unix_socket_path=False) -DB_CONNECTOR.connect(DB_CONNECTOR.APPL_DB) -DB_CONNECTOR.connect(DB_CONNECTOR.COUNTERS_DB) -COUNTER_TABLE = CounterTable(DB_CONNECTOR.get_redis_client(DB_CONNECTOR.COUNTERS_DB)) +DB_CONNECTOR = None +COUNTER_TABLE = None class MACsecAppMeta(object): - SEPARATOR = DB_CONNECTOR.get_db_separator(DB_CONNECTOR.APPL_DB) - def __init__(self, *args) -> None: - key = self.__class__.get_appl_table_name() + MACsecAppMeta.SEPARATOR + \ - MACsecAppMeta.SEPARATOR.join(args) + SEPARATOR = DB_CONNECTOR.get_db_separator(DB_CONNECTOR.APPL_DB) + key = self.__class__.get_appl_table_name() + SEPARATOR + \ + SEPARATOR.join(args) self.meta = DB_CONNECTOR.get_all( DB_CONNECTOR.APPL_DB, key) if len(self.meta) == 0: @@ -184,19 +181,36 @@ def create_macsec_objs(interface_name: str) -> typing.List[MACsecAppMeta]: @click.command() @click.argument('interface_name', required=False) -def macsec(interface_name): - ctx = click.get_current_context() - objs = [] - interface_names = [name.split(":")[1] for name in DB_CONNECTOR.keys(DB_CONNECTOR.APPL_DB, "MACSEC_PORT*")] - if interface_name is not None: - if interface_name not in interface_names: - ctx.fail("Cannot find the port {} in MACsec port lists {}".format(interface_name, interface_names)) - else: +@multi_asic_util.multi_asic_click_options +def macsec(interface_name, namespace, display): + MacsecContext(namespace, display).show(interface_name) + + +class MacsecContext(object): + + def __init__(self, namespace_option, display_option): + self.db = None + self.multi_asic = multi_asic_util.MultiAsic( + display_option, namespace_option) + + @multi_asic_util.run_on_multi_asic + def show(self, interface_name): + global DB_CONNECTOR + global COUNTER_TABLE + DB_CONNECTOR = self.db + COUNTER_TABLE = CounterTable(self.db.get_redis_client(self.db.COUNTERS_DB)) + + interface_names = [name.split(":")[1] for name in self.db.keys(self.db.APPL_DB, "MACSEC_PORT*")] + if interface_name is not None: + if interface_name not in interface_names: + return interface_names = [interface_name] - for interface_name in natsorted(interface_names): - objs += create_macsec_objs(interface_name) - for obj in objs: - print(obj.dump_str()) + + objs = [] + for interface_name in natsorted(interface_names): + objs += create_macsec_objs(interface_name) + for obj in objs: + print(obj.dump_str()) def register(cli): From 94df2c4b8646996411db21bb64f42638563b2063 Mon Sep 17 00:00:00 2001 From: Stephen Sun <5379172+stephenxs@users.noreply.github.com> Date: Thu, 14 Jul 2022 17:20:16 +0800 Subject: [PATCH 143/259] [Mellanox] Support new platform API get_port_or_cage_type for RJ45 ports (#11336) - Why I did it Support get_port_or_cage_type for RJ45 ports - How I did it Implement the new platform API get_port_or_cage_type Fix the issue: unable to import SFP when chassis object is destructed - How to verify it Manually test and regression test Signed-off-by: Stephen Sun --- .../sonic_platform/chassis.py | 58 ++++++++++++++----- .../mlnx-platform-api/tests/test_chassis.py | 14 +++++ 2 files changed, 58 insertions(+), 14 deletions(-) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py index ea4d7df30f9a..b83ee33cc316 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py @@ -30,7 +30,6 @@ from .utils import extract_RJ45_ports_index from . import utils from .device_data import DeviceDataManager - from .sfp import SFP, RJ45Port, deinitialize_sdk_handle except ImportError as e: raise ImportError (str(e) + "- required module not found") @@ -110,6 +109,8 @@ def __init__(self): self.sfp_event = None self.reboot_cause_initialized = False + self.sfp_module = None + # Build the RJ45 port list from platform.json and hwsku.json self.RJ45_port_list = extract_RJ45_ports_index() @@ -120,9 +121,8 @@ def __del__(self): self.sfp_event.deinitialize() if self._sfp_list: - from .sfp import SFP, deinitialize_sdk_handle - if SFP.shared_sdk_handle: - deinitialize_sdk_handle(SFP.shared_sdk_handle) + if self.sfp_module.SFP.shared_sdk_handle: + self.sfp_module.deinitialize_sdk_handle(sfp_module.SFP.shared_sdk_handle) ############################################## # PSU methods @@ -241,6 +241,12 @@ def get_fan_drawer(self, index): # SFP methods ############################################## + def _import_sfp_module(self): + if not self.sfp_module: + from . import sfp as sfp_module + self.sfp_module = sfp_module + return self.sfp_module + def initialize_single_sfp(self, index): sfp_count = self.get_num_sfps() if index < sfp_count: @@ -248,32 +254,32 @@ def initialize_single_sfp(self, index): self._sfp_list = [None] * sfp_count if not self._sfp_list[index]: - from .sfp import SFP + sfp_module = self._import_sfp_module() if self.RJ45_port_list and index in self.RJ45_port_list: - self._sfp_list[index] = RJ45Port(index) + self._sfp_list[index] = sfp_module.RJ45Port(index) else: - self._sfp_list[index] = SFP(index) + self._sfp_list[index] = sfp_module.SFP(index) self.sfp_initialized_count += 1 def initialize_sfp(self): if not self._sfp_list: - from .sfp import SFP + sfp_module = self._import_sfp_module() sfp_count = self.get_num_sfps() for index in range(sfp_count): if self.RJ45_port_list and index in self.RJ45_port_list: - sfp_module = RJ45Port(index) + sfp_object = sfp_module.RJ45Port(index) else: - sfp_module = SFP(index) - self._sfp_list.append(sfp_module) + sfp_object = sfp_module.SFP(index) + self._sfp_list.append(sfp_object) self.sfp_initialized_count = sfp_count elif self.sfp_initialized_count != len(self._sfp_list): - from .sfp import SFP + sfp_module = self._import_sfp_module() for index in range(len(self._sfp_list)): if self._sfp_list[index] is None: if self.RJ45_port_list and index in self.RJ45_port_list: - self._sfp_list[index] = RJ45Port(index) + self._sfp_list[index] = sfp_module.RJ45Port(index) else: - self._sfp_list[index] = SFP(index) + self._sfp_list[index] = sfp_module.SFP(index) self.sfp_initialized_count = len(self._sfp_list) def get_num_sfps(self): @@ -313,6 +319,30 @@ def get_sfp(self, index): self.initialize_single_sfp(index) return super(Chassis, self).get_sfp(index) + def get_port_or_cage_type(self, index): + """ + Retrieves sfp port or cage type corresponding to physical port + + Args: + index: An integer (>=0), the index of the sfp to retrieve. + The index should correspond to the physical port in a chassis. + For example:- + 1 for Ethernet0, 2 for Ethernet4 and so on for one platform. + 0 for Ethernet0, 1 for Ethernet4 and so on for another platform. + + Returns: + The masks of all types of port or cage that can be supported on the port + Types are defined in sfp_base.py + Eg. + Both SFP and SFP+ are supported on the port, the return value should be 0x0a + which is 0x02 | 0x08 + """ + index = index - 1 + if self.RJ45_port_list and index in self.RJ45_port_list: + from sonic_platform_base.sfp_base import SfpBase + return SfpBase.SFP_PORT_TYPE_BIT_RJ45 + raise NotImplementedError + def get_change_event(self, timeout=0): """ Returns a nested dictionary containing all devices which have diff --git a/platform/mellanox/mlnx-platform-api/tests/test_chassis.py b/platform/mellanox/mlnx-platform-api/tests/test_chassis.py index c6235b195a02..38b6bd6cfffd 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_chassis.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_chassis.py @@ -29,6 +29,7 @@ sys.path.insert(0, modules_path) import sonic_platform.chassis +from sonic_platform_base.sfp_base import SfpBase from sonic_platform.chassis import Chassis from sonic_platform.device_data import DeviceDataManager @@ -282,3 +283,16 @@ def test_revision_permission(self): sonic_platform.chassis.DMI_FILE = old_dmi_file os.system("rm -f " + new_dmi_file) assert rev == "N/A" + + def test_get_port_or_cage_type(self): + chassis = Chassis() + chassis.RJ45_port_list = [0] + assert SfpBase.SFP_PORT_TYPE_BIT_RJ45 == chassis.get_port_or_cage_type(1) + + exceptionRaised = False + try: + chassis.get_port_or_cage_type(2) + except NotImplementedError: + exceptionRaised = True + + assert exceptionRaised From f56963603bdb45008c9a0a10f18d5c74013c672e Mon Sep 17 00:00:00 2001 From: tjchadaga <85581939+tjchadaga@users.noreply.github.com> Date: Tue, 26 Jul 2022 18:27:15 -0700 Subject: [PATCH 144/259] Add bgp_device_global yang model (#11343) --- src/sonic-yang-models/doc/Configuration.md | 15 ++++++++ src/sonic-yang-models/setup.py | 1 + .../tests/files/sample_config_db.json | 5 +++ .../tests/bgp_device_global.json | 16 ++++++++ .../tests_config/bgp_device_global.json | 38 +++++++++++++++++++ .../yang-models/sonic-bgp-device-global.yang | 36 ++++++++++++++++++ 6 files changed, 111 insertions(+) create mode 100644 src/sonic-yang-models/tests/yang_model_tests/tests/bgp_device_global.json create mode 100644 src/sonic-yang-models/tests/yang_model_tests/tests_config/bgp_device_global.json create mode 100644 src/sonic-yang-models/yang-models/sonic-bgp-device-global.yang diff --git a/src/sonic-yang-models/doc/Configuration.md b/src/sonic-yang-models/doc/Configuration.md index bf254f5da538..3a3cdcc883a4 100644 --- a/src/sonic-yang-models/doc/Configuration.md +++ b/src/sonic-yang-models/doc/Configuration.md @@ -9,6 +9,7 @@ Table of Contents * [Incremental Configuration](#incremental-configuration) * [Redis and Json Schema](#redis-and-json-schema) * [ACL and Mirroring](#acl-and-mirroring) + * [BGP Device Global](#bgp-device-global) * [BGP Sessions](#bgp-sessions) * [BUFFER_PG](#buffer_pg) * [Buffer pool](#buffer-pool) @@ -333,7 +334,21 @@ and migration plan } } ``` +### BGP Device Global +The **BGP_DEVICE_GLOBAL** table contains device-level BGP global state. +It has a STATE object containing device state like **tsa_enabled** +which is set to true if device is currently isolated using +traffic-shift-away (TSA) route-maps in BGP + +``` +{ +"BGP_DEVICE_GLOBAL": { + "STATE": { + "tsa_enabled": "true" + } +} +``` ### BGP Sessions BGP session configuration is defined in **BGP_NEIGHBOR** table. BGP diff --git a/src/sonic-yang-models/setup.py b/src/sonic-yang-models/setup.py index 4d61be960c3b..616047aad3eb 100644 --- a/src/sonic-yang-models/setup.py +++ b/src/sonic-yang-models/setup.py @@ -80,6 +80,7 @@ def run(self): ('yang-models', ['./yang-models/sonic-acl.yang', './yang-models/sonic-auto_techsupport.yang', './yang-models/sonic-bgp-common.yang', + './yang-models/sonic-bgp-device-global.yang', './yang-models/sonic-bgp-global.yang', './yang-models/sonic-bgp-monitor.yang', './yang-models/sonic-bgp-internal-neighbor.yang', diff --git a/src/sonic-yang-models/tests/files/sample_config_db.json b/src/sonic-yang-models/tests/files/sample_config_db.json index 340e36cadbec..0be6f6cb16ad 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -1282,6 +1282,11 @@ "default|ipv4_unicast|21.0.0.0/8": { } }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "tsa_enabled": "false" + } + }, "BGP_PEER_RANGE": { "BGPSLBPassive": { "ip_range": [ diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/bgp_device_global.json b/src/sonic-yang-models/tests/yang_model_tests/tests/bgp_device_global.json new file mode 100644 index 000000000000..536736f82db2 --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/bgp_device_global.json @@ -0,0 +1,16 @@ +{ + "BGP_DEVICE_GLOBAL_WITH_DEFAULT_VALUES": { + "desc": "Load bgp device global table with fields set to default values" + }, + "BGP_DEVICE_GLOBAL_WITH_TSA_TEST": { + "desc": "Load bgp device global table with tsa_enabled set to true" + }, + "BGP_DEVICE_GLOBAL_WITH_TSB_TEST": { + "desc": "Load bgp device global table with tsa_enabled set to false" + }, + "BGP_DEVICE_GLOBAL_WITH_INVALID_VALUE": { + "desc": "Load bgp device global table with invalid value", + "eStrKey": "InvalidValue", + "eStr": ["tsa_enabled"] + } +} diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/bgp_device_global.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/bgp_device_global.json new file mode 100644 index 000000000000..f96de59df390 --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/bgp_device_global.json @@ -0,0 +1,38 @@ +{ + "BGP_DEVICE_GLOBAL_WITH_DEFAULT_VALUES": { + "sonic-bgp-device-global:sonic-bgp-device-global": { + "sonic-bgp-device-global:BGP_DEVICE_GLOBAL": { + "STATE":{ + "tsa_enabled": "false" + } + } + } + }, + "BGP_DEVICE_GLOBAL_WITH_TSA_TEST": { + "sonic-bgp-device-global:sonic-bgp-device-global": { + "sonic-bgp-device-global:BGP_DEVICE_GLOBAL": { + "STATE":{ + "tsa_enabled": "true" + } + } + } + }, + "BGP_DEVICE_GLOBAL_WITH_TSB_TEST": { + "sonic-bgp-device-global:sonic-bgp-device-global": { + "sonic-bgp-device-global:BGP_DEVICE_GLOBAL": { + "STATE":{ + "tsa_enabled": "false" + } + } + } + }, + "BGP_DEVICE_GLOBAL_WITH_INVALID_VALUE": { + "sonic-bgp-device-global:sonic-bgp-device-global": { + "sonic-bgp-device-global:BGP_DEVICE_GLOBAL": { + "STATE":{ + "tsa_enabled": "FALSE" + } + } + } + } +} diff --git a/src/sonic-yang-models/yang-models/sonic-bgp-device-global.yang b/src/sonic-yang-models/yang-models/sonic-bgp-device-global.yang new file mode 100644 index 000000000000..728714c7d51f --- /dev/null +++ b/src/sonic-yang-models/yang-models/sonic-bgp-device-global.yang @@ -0,0 +1,36 @@ +module sonic-bgp-device-global { + namespace "http://github.com/Azure/sonic-bgp-device-global"; + prefix bgp_device_global; + yang-version 1.1; + + organization + "SONiC"; + + contact + "SONiC"; + + description + "SONIC Device-specific BGP global data"; + + revision 2022-06-26 { + description + "Initial revision"; + } + + container sonic-bgp-device-global { + container BGP_DEVICE_GLOBAL { + container STATE { + description "BGP device-specific global data"; + leaf tsa_enabled { + type boolean; + default "false"; + description + "When set to true, Traffic is shifted away (TSA), i.e, BGP routes are not advertised to neighboring routers"; + } + } /* end of STATE container */ + } /* end of BGP_DEVICE_GLOBAL container */ + + } /* end of top level container */ + +} /* end of module sonic-bgp-device-global */ + From 948c932ceef2bec0e873ec4521ae368c1040628c Mon Sep 17 00:00:00 2001 From: "Marty Y. Lok" <76118573+mlok-nokia@users.noreply.github.com> Date: Thu, 14 Jul 2022 11:14:34 -0400 Subject: [PATCH 145/259] [Nokia][IXR7250E] Add Nokia platform Nokia-IXR7250E-36x100GE 100G line card device dat (#11382) Signed-off-by: mlok --- .../Nokia-IXR7250E-36x100G/0/buffers.json.j2 | 2 + .../0/buffers_defaults_t2.j2 | 37 + .../0/context_config.json | 21 + .../0/jr2cp-nokia-18x100g-4x25g-config.bcm | 2056 ++++++++++++++++ .../0/pg_profile_lookup.ini | 12 + .../Nokia-IXR7250E-36x100G/0/port_config.ini | 21 + .../Nokia-IXR7250E-36x100G/0/qos.json.j2 | 1 + .../Nokia-IXR7250E-36x100G/0/sai.profile | 1 + .../0/sai_postinit_cmd.soc | 36 + .../Nokia-IXR7250E-36x100G/1/buffers.json.j2 | 2 + .../1/buffers_defaults_t2.j2 | 37 + .../1/context_config.json | 21 + .../1/jr2cp-nokia-18x100g-4x25g-config.bcm | 2057 +++++++++++++++++ .../1/pg_profile_lookup.ini | 12 + .../Nokia-IXR7250E-36x100G/1/port_config.ini | 21 + .../Nokia-IXR7250E-36x100G/1/qos.json.j2 | 1 + .../Nokia-IXR7250E-36x100G/1/sai.profile | 1 + .../1/sai_postinit_cmd.soc | 6 + 18 files changed, 4345 insertions(+) create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/buffers.json.j2 create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/buffers_defaults_t2.j2 create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/context_config.json create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/jr2cp-nokia-18x100g-4x25g-config.bcm create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/pg_profile_lookup.ini create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/port_config.ini create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/qos.json.j2 create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/sai.profile create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/sai_postinit_cmd.soc create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/buffers.json.j2 create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/buffers_defaults_t2.j2 create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/context_config.json create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/jr2cp-nokia-18x100g-4x25g-config.bcm create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/pg_profile_lookup.ini create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/port_config.ini create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/qos.json.j2 create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/sai.profile create mode 100644 device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/sai_postinit_cmd.soc diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/buffers.json.j2 b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/buffers.json.j2 new file mode 100644 index 000000000000..f34a844f4a87 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/buffers.json.j2 @@ -0,0 +1,2 @@ +{%- set default_topo = 't2' %} +{%- include 'buffers_config.j2' %} diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/buffers_defaults_t2.j2 b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/buffers_defaults_t2.j2 new file mode 100644 index 000000000000..9aa3e46bcae6 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/buffers_defaults_t2.j2 @@ -0,0 +1,37 @@ +{%- set default_cable = '300m' %} + +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,36) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "6441610000", + "type": "both", + "mode": "dynamic", + "xoff": "24979046" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"1280", + "xon_offset": "2560", + "dynamic_th":"0" + }, + "egress_lossless_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "static_th":"33030144" + }, + "egress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"-1" + } + }, +{%- endmacro %} diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/context_config.json b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/context_config.json new file mode 100644 index 000000000000..5a8e83c7c92e --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/context_config.json @@ -0,0 +1,21 @@ +{ + "CONTEXTS": [ + { + "guid" : 0, + "name" : "syncd0", + "dbAsic" : "ASIC_DB", + "dbCounters" : "COUNTERS_DB", + "dbFlex": "FLEX_COUNTER_DB", + "dbState" : "STATE_DB", + "zmq_enable": false, + "zmq_endpoint": "tcp://127.0.0.1:5555", + "zmq_ntf_endpoint": "tcp://127.0.0.1:5556", + "switches": [ + { + "index" : 0, + "hwinfo" : "06:00.0" + } + ] + } + ] +} diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/jr2cp-nokia-18x100g-4x25g-config.bcm b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/jr2cp-nokia-18x100g-4x25g-config.bcm new file mode 100644 index 000000000000..0fae0269330b --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/jr2cp-nokia-18x100g-4x25g-config.bcm @@ -0,0 +1,2056 @@ +appl_enable_intr_init.BCM8885X=1 +appl_enable_learn_and_limit_init.BCM8885X=0 +appl_enable_oam.BCM8885X=0 +appl_enable_oam_fwd_idx_wa_init.BCM8885X=0 +appl_enable_oam_stat_wa_init.BCM8885X=0 +dma_desc_aggregator_buff_size_kb.BCM8885X=100 +dma_desc_aggregator_chain_length_max.BCM8885X=1000 +dma_desc_aggregator_enable_specific_MDB_LPM.BCM8885X=1 +dma_desc_aggregator_timeout_usec.BCM8885X=1000 +dport_map_direct.BCM8885X=1 + +dtm_flow_mapping_mode_region_64.BCM8885X=3 +dtm_flow_mapping_mode_region_65.BCM8885X=3 +dtm_flow_mapping_mode_region_66.BCM8885X=3 +dtm_flow_mapping_mode_region_67.BCM8885X=3 +dtm_flow_mapping_mode_region_68.BCM8885X=3 +dtm_flow_mapping_mode_region_69.BCM8885X=3 +dtm_flow_mapping_mode_region_70.BCM8885X=3 +dtm_flow_mapping_mode_region_71.BCM8885X=3 +dtm_flow_mapping_mode_region_72.BCM8885X=3 +dtm_flow_mapping_mode_region_73.BCM8885X=3 +dtm_flow_mapping_mode_region_74.BCM8885X=3 +dtm_flow_mapping_mode_region_75.BCM8885X=3 +dtm_flow_mapping_mode_region_76.BCM8885X=3 +dtm_flow_mapping_mode_region_77.BCM8885X=3 +dtm_flow_mapping_mode_region_78.BCM8885X=3 +dtm_flow_mapping_mode_region_79.BCM8885X=7 +dtm_flow_mapping_mode_region_80.BCM8885X=3 +dtm_flow_mapping_mode_region_81.BCM8885X=1 +dtm_flow_mapping_mode_region_82.BCM8885X=3 +dtm_flow_mapping_mode_region_83.BCM8885X=3 +dtm_flow_mapping_mode_region_84.BCM8885X=3 +dtm_flow_mapping_mode_region_85.BCM8885X=3 +dtm_flow_mapping_mode_region_86.BCM8885X=3 +dtm_flow_mapping_mode_region_87.BCM8885X=3 +dtm_flow_mapping_mode_region_88.BCM8885X=3 +dtm_flow_mapping_mode_region_89.BCM8885X=3 +dtm_flow_mapping_mode_region_90.BCM8885X=3 +dtm_flow_mapping_mode_region_91.BCM8885X=3 +dtm_flow_mapping_mode_region_92.BCM8885X=3 +dtm_flow_mapping_mode_region_93.BCM8885X=3 +dtm_flow_mapping_mode_region_94.BCM8885X=3 +dtm_flow_nof_remote_cores_region_1.BCM8885X=2 +dtm_flow_nof_remote_cores_region_10.BCM8885X=2 +dtm_flow_nof_remote_cores_region_11.BCM8885X=2 +dtm_flow_nof_remote_cores_region_12.BCM8885X=2 +dtm_flow_nof_remote_cores_region_13.BCM8885X=2 +dtm_flow_nof_remote_cores_region_14.BCM8885X=2 +dtm_flow_nof_remote_cores_region_15.BCM8885X=2 +dtm_flow_nof_remote_cores_region_16.BCM8885X=2 +dtm_flow_nof_remote_cores_region_17.BCM8885X=2 +dtm_flow_nof_remote_cores_region_18.BCM8885X=2 +dtm_flow_nof_remote_cores_region_19.BCM8885X=2 +dtm_flow_nof_remote_cores_region_2.BCM8885X=2 +dtm_flow_nof_remote_cores_region_20.BCM8885X=2 +dtm_flow_nof_remote_cores_region_21.BCM8885X=2 +dtm_flow_nof_remote_cores_region_22.BCM8885X=2 +dtm_flow_nof_remote_cores_region_23.BCM8885X=2 +dtm_flow_nof_remote_cores_region_24.BCM8885X=2 +dtm_flow_nof_remote_cores_region_25.BCM8885X=2 +dtm_flow_nof_remote_cores_region_26.BCM8885X=2 +dtm_flow_nof_remote_cores_region_27.BCM8885X=2 +dtm_flow_nof_remote_cores_region_28.BCM8885X=2 +dtm_flow_nof_remote_cores_region_29.BCM8885X=2 +dtm_flow_nof_remote_cores_region_3.BCM8885X=2 +dtm_flow_nof_remote_cores_region_30.BCM8885X=2 +dtm_flow_nof_remote_cores_region_31.BCM8885X=2 +dtm_flow_nof_remote_cores_region_32.BCM8885X=2 +dtm_flow_nof_remote_cores_region_33.BCM8885X=2 +dtm_flow_nof_remote_cores_region_34.BCM8885X=2 +dtm_flow_nof_remote_cores_region_35.BCM8885X=2 +dtm_flow_nof_remote_cores_region_36.BCM8885X=2 +dtm_flow_nof_remote_cores_region_37.BCM8885X=2 +dtm_flow_nof_remote_cores_region_38.BCM8885X=2 +dtm_flow_nof_remote_cores_region_39.BCM8885X=2 +dtm_flow_nof_remote_cores_region_4.BCM8885X=2 +dtm_flow_nof_remote_cores_region_40.BCM8885X=2 +dtm_flow_nof_remote_cores_region_41.BCM8885X=2 +dtm_flow_nof_remote_cores_region_42.BCM8885X=2 +dtm_flow_nof_remote_cores_region_43.BCM8885X=2 +dtm_flow_nof_remote_cores_region_44.BCM8885X=2 +dtm_flow_nof_remote_cores_region_45.BCM8885X=2 +dtm_flow_nof_remote_cores_region_46.BCM8885X=2 +dtm_flow_nof_remote_cores_region_47.BCM8885X=2 +dtm_flow_nof_remote_cores_region_48.BCM8885X=2 +dtm_flow_nof_remote_cores_region_49.BCM8885X=2 +dtm_flow_nof_remote_cores_region_5.BCM8885X=2 +dtm_flow_nof_remote_cores_region_50.BCM8885X=2 +dtm_flow_nof_remote_cores_region_51.BCM8885X=2 +dtm_flow_nof_remote_cores_region_52.BCM8885X=2 +dtm_flow_nof_remote_cores_region_53.BCM8885X=2 +dtm_flow_nof_remote_cores_region_54.BCM8885X=2 +dtm_flow_nof_remote_cores_region_55.BCM8885X=2 +dtm_flow_nof_remote_cores_region_56.BCM8885X=2 +dtm_flow_nof_remote_cores_region_57.BCM8885X=2 +dtm_flow_nof_remote_cores_region_58.BCM8885X=2 +dtm_flow_nof_remote_cores_region_59.BCM8885X=2 +dtm_flow_nof_remote_cores_region_6.BCM8885X=2 +dtm_flow_nof_remote_cores_region_60.BCM8885X=2 +dtm_flow_nof_remote_cores_region_7.BCM8885X=2 +dtm_flow_nof_remote_cores_region_8.BCM8885X=2 +dtm_flow_nof_remote_cores_region_9.BCM8885X=2 +dtm_flow_nof_remote_cores_region_73.BCM8869X=2 +dtm_flow_mapping_mode_region_73.BCM8869X=0 +dtm_flow_nof_remote_cores_region_74.BCM8869X=2 +dtm_flow_mapping_mode_region_74.BCM8869X=0 +dtm_flow_nof_remote_cores_region_75.BCM8869X=2 +dtm_flow_mapping_mode_region_75.BCM8869X=0 +ext_ram_enabled_bitmap.BCM8885X=3 +ext_ram_freq.BCM8885X=1200 +dram_temperature_threshold_restore_traffic.BCM8885X=89 +dram_temperature_threshold_power_down.BCM8885X=102 +dram_temperature_threshold_stop_traffic.BCM8885X=94 +dram_temperature_monitor_enable.BCM8885X=1 +fabric_connect_mode.BCM8885X=FE +ftmh_stacking_extension_size=0 +j2_ftmh_lb_key_extension_size=3 +j_ftmh_lb_key_extension_size=0 + + +lane_to_serdes_map_fabric_lane0.BCM8885X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8885X=rx1:tx1 +lane_to_serdes_map_fabric_lane2.BCM8885X=rx2:tx3 +lane_to_serdes_map_fabric_lane3.BCM8885X=rx3:tx2 + +lane_to_serdes_map_fabric_lane4.BCM8885X=rx4:tx4 +lane_to_serdes_map_fabric_lane5.BCM8885X=rx5:tx7 +lane_to_serdes_map_fabric_lane6.BCM8885X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8885X=rx7:tx5 + +lane_to_serdes_map_fabric_lane8.BCM8885X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8885X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8885X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8885X=rx11:tx11 + +lane_to_serdes_map_fabric_lane12.BCM8885X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8885X=rx13:tx13 +lane_to_serdes_map_fabric_lane14.BCM8885X=rx14:tx14 +lane_to_serdes_map_fabric_lane15.BCM8885X=rx15:tx15 + +lane_to_serdes_map_fabric_lane16.BCM8885X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8885X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8885X=rx18:tx18 +lane_to_serdes_map_fabric_lane19.BCM8885X=rx19:tx19 + +lane_to_serdes_map_fabric_lane20.BCM8885X=rx20:tx20 +lane_to_serdes_map_fabric_lane21.BCM8885X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8885X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8885X=rx23:tx23 + +lane_to_serdes_map_fabric_lane24.BCM8885X=rx24:tx26 +lane_to_serdes_map_fabric_lane25.BCM8885X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8885X=rx26:tx24 +lane_to_serdes_map_fabric_lane27.BCM8885X=rx27:tx27 + +lane_to_serdes_map_fabric_lane28.BCM8885X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8885X=rx29:tx31 +lane_to_serdes_map_fabric_lane30.BCM8885X=rx30:tx30 +lane_to_serdes_map_fabric_lane31.BCM8885X=rx31:tx29 + +lane_to_serdes_map_fabric_lane32.BCM8885X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8885X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8885X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8885X=rx35:tx35 + +lane_to_serdes_map_fabric_lane36.BCM8885X=rx36:tx36 +lane_to_serdes_map_fabric_lane37.BCM8885X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8885X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8885X=rx39:tx39 + +lane_to_serdes_map_fabric_lane40.BCM8885X=rx40:tx43 +lane_to_serdes_map_fabric_lane41.BCM8885X=rx41:tx42 +lane_to_serdes_map_fabric_lane42.BCM8885X=rx42:tx41 +lane_to_serdes_map_fabric_lane43.BCM8885X=rx43:tx40 + +lane_to_serdes_map_fabric_lane44.BCM8885X=rx44:tx47 +lane_to_serdes_map_fabric_lane45.BCM8885X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8885X=rx46:tx46 +lane_to_serdes_map_fabric_lane47.BCM8885X=rx47:tx44 + +lane_to_serdes_map_fabric_lane48.BCM8885X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8885X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8885X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8885X=rx51:tx51 + +lane_to_serdes_map_fabric_lane52.BCM8885X=rx52:tx52 +lane_to_serdes_map_fabric_lane53.BCM8885X=rx53:tx53 +lane_to_serdes_map_fabric_lane54.BCM8885X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8885X=rx55:tx55 + +lane_to_serdes_map_fabric_lane56.BCM8885X=rx56:tx59 +lane_to_serdes_map_fabric_lane57.BCM8885X=rx57:tx58 +lane_to_serdes_map_fabric_lane58.BCM8885X=rx58:tx57 +lane_to_serdes_map_fabric_lane59.BCM8885X=rx59:tx56 + +lane_to_serdes_map_fabric_lane60.BCM8885X=rx60:tx63 +lane_to_serdes_map_fabric_lane61.BCM8885X=rx61:tx61 +lane_to_serdes_map_fabric_lane62.BCM8885X=rx62:tx62 +lane_to_serdes_map_fabric_lane63.BCM8885X=rx63:tx60 + +lane_to_serdes_map_fabric_lane64.BCM8885X=rx64:tx64 +lane_to_serdes_map_fabric_lane65.BCM8885X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8885X=rx66:tx66 +lane_to_serdes_map_fabric_lane67.BCM8885X=rx67:tx67 + +lane_to_serdes_map_fabric_lane68.BCM8885X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8885X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8885X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8885X=rx71:tx71 + +lane_to_serdes_map_fabric_lane72.BCM8885X=rx72:tx75 +lane_to_serdes_map_fabric_lane73.BCM8885X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8885X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8885X=rx75:tx72 + +lane_to_serdes_map_fabric_lane76.BCM8885X=rx76:tx79 +lane_to_serdes_map_fabric_lane77.BCM8885X=rx77:tx78 +lane_to_serdes_map_fabric_lane78.BCM8885X=rx78:tx77 +lane_to_serdes_map_fabric_lane79.BCM8885X=rx79:tx76 + +lane_to_serdes_map_fabric_lane80.BCM8885X=rx80:tx80 +lane_to_serdes_map_fabric_lane81.BCM8885X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8885X=rx82:tx82 +lane_to_serdes_map_fabric_lane83.BCM8885X=rx83:tx83 + +lane_to_serdes_map_fabric_lane84.BCM8885X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8885X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8885X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8885X=rx87:tx87 + +lane_to_serdes_map_fabric_lane88.BCM8885X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8885X=rx89:tx90 +lane_to_serdes_map_fabric_lane90.BCM8885X=rx90:tx89 +lane_to_serdes_map_fabric_lane91.BCM8885X=rx91:tx91 + +lane_to_serdes_map_fabric_lane92.BCM8885X=rx92:tx94 +lane_to_serdes_map_fabric_lane93.BCM8885X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8885X=rx94:tx92 +lane_to_serdes_map_fabric_lane95.BCM8885X=rx95:tx95 + +lane_to_serdes_map_fabric_lane96.BCM8885X=rx96:tx96 +lane_to_serdes_map_fabric_lane97.BCM8885X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8885X=rx98:tx98 +lane_to_serdes_map_fabric_lane99.BCM8885X=rx99:tx99 + +lane_to_serdes_map_fabric_lane100.BCM8885X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8885X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8885X=rx102:tx102 +lane_to_serdes_map_fabric_lane103.BCM8885X=rx103:tx103 + +lane_to_serdes_map_fabric_lane104.BCM8885X=rx104:tx104 +lane_to_serdes_map_fabric_lane105.BCM8885X=rx105:tx105 +lane_to_serdes_map_fabric_lane106.BCM8885X=rx106:tx106 +lane_to_serdes_map_fabric_lane107.BCM8885X=rx107:tx107 + +lane_to_serdes_map_fabric_lane108.BCM8885X=rx108:tx108 +lane_to_serdes_map_fabric_lane109.BCM8885X=rx109:tx109 +lane_to_serdes_map_fabric_lane110.BCM8885X=rx110:tx110 +lane_to_serdes_map_fabric_lane111.BCM8885X=rx111:tx111 + +lane_to_serdes_map_fabric_lane112.BCM8885X=rx112:tx114 +lane_to_serdes_map_fabric_lane113.BCM8885X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8885X=rx114:tx112 +lane_to_serdes_map_fabric_lane115.BCM8885X=rx115:tx115 + +lane_to_serdes_map_fabric_lane116.BCM8885X=rx116:tx116 +lane_to_serdes_map_fabric_lane117.BCM8885X=rx117:tx117 +lane_to_serdes_map_fabric_lane118.BCM8885X=rx118:tx118 +lane_to_serdes_map_fabric_lane119.BCM8885X=rx119:tx119 + +lane_to_serdes_map_fabric_lane120.BCM8885X=rx120:tx120 +lane_to_serdes_map_fabric_lane121.BCM8885X=rx121:tx121 +lane_to_serdes_map_fabric_lane122.BCM8885X=rx122:tx122 +lane_to_serdes_map_fabric_lane123.BCM8885X=rx123:tx123 + +lane_to_serdes_map_fabric_lane124.BCM8885X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8885X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8885X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8885X=rx127:tx127 + +lane_to_serdes_map_fabric_lane128.BCM8885X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8885X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8885X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8885X=rx131:tx131 + +lane_to_serdes_map_fabric_lane132.BCM8885X=rx132:tx132 +lane_to_serdes_map_fabric_lane133.BCM8885X=rx133:tx133 +lane_to_serdes_map_fabric_lane134.BCM8885X=rx134:tx134 +lane_to_serdes_map_fabric_lane135.BCM8885X=rx135:tx135 + +lane_to_serdes_map_fabric_lane136.BCM8885X=rx136:tx139 +lane_to_serdes_map_fabric_lane137.BCM8885X=rx137:tx138 +lane_to_serdes_map_fabric_lane138.BCM8885X=rx138:tx137 +lane_to_serdes_map_fabric_lane139.BCM8885X=rx139:tx136 + +lane_to_serdes_map_fabric_lane140.BCM8885X=rx140:tx143 +lane_to_serdes_map_fabric_lane141.BCM8885X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8885X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8885X=rx143:tx140 + +lane_to_serdes_map_fabric_lane144.BCM8885X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8885X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8885X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8885X=rx147:tx147 + +lane_to_serdes_map_fabric_lane148.BCM8885X=rx148:tx148 +lane_to_serdes_map_fabric_lane149.BCM8885X=rx149:tx149 +lane_to_serdes_map_fabric_lane150.BCM8885X=rx150:tx150 +lane_to_serdes_map_fabric_lane151.BCM8885X=rx151:tx151 + +lane_to_serdes_map_fabric_lane152.BCM8885X=rx152:tx155 +lane_to_serdes_map_fabric_lane153.BCM8885X=rx153:tx154 +lane_to_serdes_map_fabric_lane154.BCM8885X=rx154:tx153 +lane_to_serdes_map_fabric_lane155.BCM8885X=rx155:tx152 + +lane_to_serdes_map_fabric_lane156.BCM8885X=rx156:tx159 +lane_to_serdes_map_fabric_lane157.BCM8885X=rx157:tx157 +lane_to_serdes_map_fabric_lane158.BCM8885X=rx158:tx158 +lane_to_serdes_map_fabric_lane159.BCM8885X=rx159:tx156 + +lane_to_serdes_map_fabric_lane160.BCM8885X=rx160:tx160 +lane_to_serdes_map_fabric_lane161.BCM8885X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8885X=rx162:tx162 +lane_to_serdes_map_fabric_lane163.BCM8885X=rx163:tx163 + +lane_to_serdes_map_fabric_lane164.BCM8885X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8885X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8885X=rx166:tx166 +lane_to_serdes_map_fabric_lane167.BCM8885X=rx167:tx167 + +lane_to_serdes_map_fabric_lane168.BCM8885X=rx168:tx171 +lane_to_serdes_map_fabric_lane169.BCM8885X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8885X=rx170:tx170 +lane_to_serdes_map_fabric_lane171.BCM8885X=rx171:tx168 + +lane_to_serdes_map_fabric_lane172.BCM8885X=rx172:tx175 +lane_to_serdes_map_fabric_lane173.BCM8885X=rx173:tx174 +lane_to_serdes_map_fabric_lane174.BCM8885X=rx174:tx173 +lane_to_serdes_map_fabric_lane175.BCM8885X=rx175:tx172 + +lane_to_serdes_map_fabric_lane176.BCM8885X=rx176:tx176 +lane_to_serdes_map_fabric_lane177.BCM8885X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8885X=rx178:tx178 +lane_to_serdes_map_fabric_lane179.BCM8885X=rx179:tx179 + +lane_to_serdes_map_fabric_lane180.BCM8885X=rx180:tx180 +lane_to_serdes_map_fabric_lane181.BCM8885X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8885X=rx182:tx182 +lane_to_serdes_map_fabric_lane183.BCM8885X=rx183:tx183 + +lane_to_serdes_map_fabric_lane184.BCM8885X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8885X=rx185:tx185 +lane_to_serdes_map_fabric_lane186.BCM8885X=rx186:tx186 +lane_to_serdes_map_fabric_lane187.BCM8885X=rx187:tx187 + +lane_to_serdes_map_fabric_lane188.BCM8885X=rx188:tx190 +lane_to_serdes_map_fabric_lane189.BCM8885X=rx189:tx189 +lane_to_serdes_map_fabric_lane190.BCM8885X=rx190:tx188 +lane_to_serdes_map_fabric_lane191.BCM8885X=rx191:tx191 + + +phy_rx_polarity_flip_fabric0.BCM8885X=0 +phy_rx_polarity_flip_fabric1.BCM8885X=1 +phy_rx_polarity_flip_fabric2.BCM8885X=0 +phy_rx_polarity_flip_fabric3.BCM8885X=0 +phy_rx_polarity_flip_fabric4.BCM8885X=0 +phy_rx_polarity_flip_fabric5.BCM8885X=0 +phy_rx_polarity_flip_fabric6.BCM8885X=0 +phy_rx_polarity_flip_fabric7.BCM8885X=0 +phy_rx_polarity_flip_fabric8.BCM8885X=1 +phy_rx_polarity_flip_fabric9.BCM8885X=1 +phy_rx_polarity_flip_fabric10.BCM8885X=0 +phy_rx_polarity_flip_fabric11.BCM8885X=0 +phy_rx_polarity_flip_fabric12.BCM8885X=1 +phy_rx_polarity_flip_fabric13.BCM8885X=0 +phy_rx_polarity_flip_fabric14.BCM8885X=0 +phy_rx_polarity_flip_fabric15.BCM8885X=1 +phy_rx_polarity_flip_fabric16.BCM8885X=1 +phy_rx_polarity_flip_fabric17.BCM8885X=1 +phy_rx_polarity_flip_fabric18.BCM8885X=0 +phy_rx_polarity_flip_fabric19.BCM8885X=0 +phy_rx_polarity_flip_fabric20.BCM8885X=0 +phy_rx_polarity_flip_fabric21.BCM8885X=0 +phy_rx_polarity_flip_fabric22.BCM8885X=1 +phy_rx_polarity_flip_fabric23.BCM8885X=0 +phy_rx_polarity_flip_fabric24.BCM8885X=1 +phy_rx_polarity_flip_fabric25.BCM8885X=0 +phy_rx_polarity_flip_fabric26.BCM8885X=1 +phy_rx_polarity_flip_fabric27.BCM8885X=1 +phy_rx_polarity_flip_fabric28.BCM8885X=1 +phy_rx_polarity_flip_fabric29.BCM8885X=1 +phy_rx_polarity_flip_fabric30.BCM8885X=0 +phy_rx_polarity_flip_fabric31.BCM8885X=1 +phy_rx_polarity_flip_fabric32.BCM8885X=0 +phy_rx_polarity_flip_fabric33.BCM8885X=1 +phy_rx_polarity_flip_fabric34.BCM8885X=0 +phy_rx_polarity_flip_fabric35.BCM8885X=0 +phy_rx_polarity_flip_fabric36.BCM8885X=0 +phy_rx_polarity_flip_fabric37.BCM8885X=1 +phy_rx_polarity_flip_fabric38.BCM8885X=1 +phy_rx_polarity_flip_fabric39.BCM8885X=0 +phy_rx_polarity_flip_fabric40.BCM8885X=1 +phy_rx_polarity_flip_fabric41.BCM8885X=0 +phy_rx_polarity_flip_fabric42.BCM8885X=0 +phy_rx_polarity_flip_fabric43.BCM8885X=0 +phy_rx_polarity_flip_fabric44.BCM8885X=1 +phy_rx_polarity_flip_fabric45.BCM8885X=0 +phy_rx_polarity_flip_fabric46.BCM8885X=0 +phy_rx_polarity_flip_fabric47.BCM8885X=1 +phy_rx_polarity_flip_fabric48.BCM8885X=1 +phy_rx_polarity_flip_fabric49.BCM8885X=1 +phy_rx_polarity_flip_fabric50.BCM8885X=1 +phy_rx_polarity_flip_fabric51.BCM8885X=1 +phy_rx_polarity_flip_fabric52.BCM8885X=1 +phy_rx_polarity_flip_fabric53.BCM8885X=1 +phy_rx_polarity_flip_fabric54.BCM8885X=1 +phy_rx_polarity_flip_fabric55.BCM8885X=1 +phy_rx_polarity_flip_fabric56.BCM8885X=0 +phy_rx_polarity_flip_fabric57.BCM8885X=0 +phy_rx_polarity_flip_fabric58.BCM8885X=0 +phy_rx_polarity_flip_fabric59.BCM8885X=0 +phy_rx_polarity_flip_fabric60.BCM8885X=0 +phy_rx_polarity_flip_fabric61.BCM8885X=0 +phy_rx_polarity_flip_fabric62.BCM8885X=1 +phy_rx_polarity_flip_fabric63.BCM8885X=0 +phy_rx_polarity_flip_fabric64.BCM8885X=1 +phy_rx_polarity_flip_fabric65.BCM8885X=1 +phy_rx_polarity_flip_fabric66.BCM8885X=0 +phy_rx_polarity_flip_fabric67.BCM8885X=0 +phy_rx_polarity_flip_fabric68.BCM8885X=1 +phy_rx_polarity_flip_fabric69.BCM8885X=1 +phy_rx_polarity_flip_fabric70.BCM8885X=1 +phy_rx_polarity_flip_fabric71.BCM8885X=0 +phy_rx_polarity_flip_fabric72.BCM8885X=0 +phy_rx_polarity_flip_fabric73.BCM8885X=1 +phy_rx_polarity_flip_fabric74.BCM8885X=0 +phy_rx_polarity_flip_fabric75.BCM8885X=1 +phy_rx_polarity_flip_fabric76.BCM8885X=1 +phy_rx_polarity_flip_fabric77.BCM8885X=1 +phy_rx_polarity_flip_fabric78.BCM8885X=1 +phy_rx_polarity_flip_fabric79.BCM8885X=0 +phy_rx_polarity_flip_fabric80.BCM8885X=1 +phy_rx_polarity_flip_fabric81.BCM8885X=0 +phy_rx_polarity_flip_fabric82.BCM8885X=0 +phy_rx_polarity_flip_fabric83.BCM8885X=0 +phy_rx_polarity_flip_fabric84.BCM8885X=1 +phy_rx_polarity_flip_fabric85.BCM8885X=0 +phy_rx_polarity_flip_fabric86.BCM8885X=1 +phy_rx_polarity_flip_fabric87.BCM8885X=0 +phy_rx_polarity_flip_fabric88.BCM8885X=1 +phy_rx_polarity_flip_fabric89.BCM8885X=1 +phy_rx_polarity_flip_fabric90.BCM8885X=1 +phy_rx_polarity_flip_fabric91.BCM8885X=1 +phy_rx_polarity_flip_fabric92.BCM8885X=1 +phy_rx_polarity_flip_fabric93.BCM8885X=1 +phy_rx_polarity_flip_fabric94.BCM8885X=1 +phy_rx_polarity_flip_fabric95.BCM8885X=1 +phy_rx_polarity_flip_fabric96.BCM8885X=0 +phy_rx_polarity_flip_fabric97.BCM8885X=1 +phy_rx_polarity_flip_fabric98.BCM8885X=0 +phy_rx_polarity_flip_fabric99.BCM8885X=0 +phy_rx_polarity_flip_fabric100.BCM8885X=0 +phy_rx_polarity_flip_fabric101.BCM8885X=1 +phy_rx_polarity_flip_fabric102.BCM8885X=1 +phy_rx_polarity_flip_fabric103.BCM8885X=0 +phy_rx_polarity_flip_fabric104.BCM8885X=1 +phy_rx_polarity_flip_fabric105.BCM8885X=0 +phy_rx_polarity_flip_fabric106.BCM8885X=0 +phy_rx_polarity_flip_fabric107.BCM8885X=0 +phy_rx_polarity_flip_fabric108.BCM8885X=1 +phy_rx_polarity_flip_fabric109.BCM8885X=1 +phy_rx_polarity_flip_fabric110.BCM8885X=0 +phy_rx_polarity_flip_fabric111.BCM8885X=1 +phy_rx_polarity_flip_fabric112.BCM8885X=0 +phy_rx_polarity_flip_fabric113.BCM8885X=0 +phy_rx_polarity_flip_fabric114.BCM8885X=1 +phy_rx_polarity_flip_fabric115.BCM8885X=1 +phy_rx_polarity_flip_fabric116.BCM8885X=0 +phy_rx_polarity_flip_fabric117.BCM8885X=1 +phy_rx_polarity_flip_fabric118.BCM8885X=1 +phy_rx_polarity_flip_fabric119.BCM8885X=1 +phy_rx_polarity_flip_fabric120.BCM8885X=1 +phy_rx_polarity_flip_fabric121.BCM8885X=1 +phy_rx_polarity_flip_fabric122.BCM8885X=1 +phy_rx_polarity_flip_fabric123.BCM8885X=0 +phy_rx_polarity_flip_fabric124.BCM8885X=0 +phy_rx_polarity_flip_fabric125.BCM8885X=0 +phy_rx_polarity_flip_fabric126.BCM8885X=0 +phy_rx_polarity_flip_fabric127.BCM8885X=1 +phy_rx_polarity_flip_fabric128.BCM8885X=0 +phy_rx_polarity_flip_fabric129.BCM8885X=0 +phy_rx_polarity_flip_fabric130.BCM8885X=1 +phy_rx_polarity_flip_fabric131.BCM8885X=0 +phy_rx_polarity_flip_fabric132.BCM8885X=0 +phy_rx_polarity_flip_fabric133.BCM8885X=1 +phy_rx_polarity_flip_fabric134.BCM8885X=1 +phy_rx_polarity_flip_fabric135.BCM8885X=0 +phy_rx_polarity_flip_fabric136.BCM8885X=0 +phy_rx_polarity_flip_fabric137.BCM8885X=1 +phy_rx_polarity_flip_fabric138.BCM8885X=1 +phy_rx_polarity_flip_fabric139.BCM8885X=0 +phy_rx_polarity_flip_fabric140.BCM8885X=1 +phy_rx_polarity_flip_fabric141.BCM8885X=0 +phy_rx_polarity_flip_fabric142.BCM8885X=1 +phy_rx_polarity_flip_fabric143.BCM8885X=1 +phy_rx_polarity_flip_fabric144.BCM8885X=1 +phy_rx_polarity_flip_fabric145.BCM8885X=1 +phy_rx_polarity_flip_fabric146.BCM8885X=1 +phy_rx_polarity_flip_fabric147.BCM8885X=0 +phy_rx_polarity_flip_fabric148.BCM8885X=1 +phy_rx_polarity_flip_fabric149.BCM8885X=1 +phy_rx_polarity_flip_fabric150.BCM8885X=0 +phy_rx_polarity_flip_fabric151.BCM8885X=0 +phy_rx_polarity_flip_fabric152.BCM8885X=0 +phy_rx_polarity_flip_fabric153.BCM8885X=0 +phy_rx_polarity_flip_fabric154.BCM8885X=0 +phy_rx_polarity_flip_fabric155.BCM8885X=1 +phy_rx_polarity_flip_fabric156.BCM8885X=0 +phy_rx_polarity_flip_fabric157.BCM8885X=0 +phy_rx_polarity_flip_fabric158.BCM8885X=0 +phy_rx_polarity_flip_fabric159.BCM8885X=1 +phy_rx_polarity_flip_fabric160.BCM8885X=0 +phy_rx_polarity_flip_fabric161.BCM8885X=1 +phy_rx_polarity_flip_fabric162.BCM8885X=1 +phy_rx_polarity_flip_fabric163.BCM8885X=1 +phy_rx_polarity_flip_fabric164.BCM8885X=1 +phy_rx_polarity_flip_fabric165.BCM8885X=0 +phy_rx_polarity_flip_fabric166.BCM8885X=0 +phy_rx_polarity_flip_fabric167.BCM8885X=1 +phy_rx_polarity_flip_fabric168.BCM8885X=0 +phy_rx_polarity_flip_fabric169.BCM8885X=1 +phy_rx_polarity_flip_fabric170.BCM8885X=0 +phy_rx_polarity_flip_fabric171.BCM8885X=0 +phy_rx_polarity_flip_fabric172.BCM8885X=0 +phy_rx_polarity_flip_fabric173.BCM8885X=1 +phy_rx_polarity_flip_fabric174.BCM8885X=1 +phy_rx_polarity_flip_fabric175.BCM8885X=1 +phy_rx_polarity_flip_fabric176.BCM8885X=0 +phy_rx_polarity_flip_fabric177.BCM8885X=1 +phy_rx_polarity_flip_fabric178.BCM8885X=0 +phy_rx_polarity_flip_fabric179.BCM8885X=1 +phy_rx_polarity_flip_fabric180.BCM8885X=1 +phy_rx_polarity_flip_fabric181.BCM8885X=0 +phy_rx_polarity_flip_fabric182.BCM8885X=0 +phy_rx_polarity_flip_fabric183.BCM8885X=0 +phy_rx_polarity_flip_fabric184.BCM8885X=0 +phy_rx_polarity_flip_fabric185.BCM8885X=0 +phy_rx_polarity_flip_fabric186.BCM8885X=1 +phy_rx_polarity_flip_fabric187.BCM8885X=0 +phy_rx_polarity_flip_fabric188.BCM8885X=0 +phy_rx_polarity_flip_fabric189.BCM8885X=0 +phy_rx_polarity_flip_fabric190.BCM8885X=0 +phy_rx_polarity_flip_fabric191.BCM8885X=1 + + +phy_tx_polarity_flip_fabric0.BCM8885X=0 +phy_tx_polarity_flip_fabric1.BCM8885X=0 +phy_tx_polarity_flip_fabric2.BCM8885X=0 +phy_tx_polarity_flip_fabric3.BCM8885X=1 +phy_tx_polarity_flip_fabric4.BCM8885X=1 +phy_tx_polarity_flip_fabric5.BCM8885X=0 +phy_tx_polarity_flip_fabric6.BCM8885X=1 +phy_tx_polarity_flip_fabric7.BCM8885X=1 +phy_tx_polarity_flip_fabric8.BCM8885X=0 +phy_tx_polarity_flip_fabric9.BCM8885X=1 +phy_tx_polarity_flip_fabric10.BCM8885X=1 +phy_tx_polarity_flip_fabric11.BCM8885X=1 +phy_tx_polarity_flip_fabric12.BCM8885X=1 +phy_tx_polarity_flip_fabric13.BCM8885X=0 +phy_tx_polarity_flip_fabric14.BCM8885X=1 +phy_tx_polarity_flip_fabric15.BCM8885X=1 +phy_tx_polarity_flip_fabric16.BCM8885X=1 +phy_tx_polarity_flip_fabric17.BCM8885X=1 +phy_tx_polarity_flip_fabric18.BCM8885X=0 +phy_tx_polarity_flip_fabric19.BCM8885X=0 +phy_tx_polarity_flip_fabric20.BCM8885X=0 +phy_tx_polarity_flip_fabric21.BCM8885X=1 +phy_tx_polarity_flip_fabric22.BCM8885X=1 +phy_tx_polarity_flip_fabric23.BCM8885X=0 +phy_tx_polarity_flip_fabric24.BCM8885X=0 +phy_tx_polarity_flip_fabric25.BCM8885X=1 +phy_tx_polarity_flip_fabric26.BCM8885X=1 +phy_tx_polarity_flip_fabric27.BCM8885X=0 +phy_tx_polarity_flip_fabric28.BCM8885X=1 +phy_tx_polarity_flip_fabric29.BCM8885X=0 +phy_tx_polarity_flip_fabric30.BCM8885X=1 +phy_tx_polarity_flip_fabric31.BCM8885X=0 +phy_tx_polarity_flip_fabric32.BCM8885X=0 +phy_tx_polarity_flip_fabric33.BCM8885X=0 +phy_tx_polarity_flip_fabric34.BCM8885X=0 +phy_tx_polarity_flip_fabric35.BCM8885X=0 +phy_tx_polarity_flip_fabric36.BCM8885X=1 +phy_tx_polarity_flip_fabric37.BCM8885X=1 +phy_tx_polarity_flip_fabric38.BCM8885X=0 +phy_tx_polarity_flip_fabric39.BCM8885X=0 +phy_tx_polarity_flip_fabric40.BCM8885X=1 +phy_tx_polarity_flip_fabric41.BCM8885X=0 +phy_tx_polarity_flip_fabric42.BCM8885X=0 +phy_tx_polarity_flip_fabric43.BCM8885X=1 +phy_tx_polarity_flip_fabric44.BCM8885X=0 +phy_tx_polarity_flip_fabric45.BCM8885X=0 +phy_tx_polarity_flip_fabric46.BCM8885X=1 +phy_tx_polarity_flip_fabric47.BCM8885X=0 +phy_tx_polarity_flip_fabric48.BCM8885X=1 +phy_tx_polarity_flip_fabric49.BCM8885X=1 +phy_tx_polarity_flip_fabric50.BCM8885X=0 +phy_tx_polarity_flip_fabric51.BCM8885X=0 +phy_tx_polarity_flip_fabric52.BCM8885X=1 +phy_tx_polarity_flip_fabric53.BCM8885X=0 +phy_tx_polarity_flip_fabric54.BCM8885X=0 +phy_tx_polarity_flip_fabric55.BCM8885X=1 +phy_tx_polarity_flip_fabric56.BCM8885X=0 +phy_tx_polarity_flip_fabric57.BCM8885X=0 +phy_tx_polarity_flip_fabric58.BCM8885X=1 +phy_tx_polarity_flip_fabric59.BCM8885X=0 +phy_tx_polarity_flip_fabric60.BCM8885X=1 +phy_tx_polarity_flip_fabric61.BCM8885X=1 +phy_tx_polarity_flip_fabric62.BCM8885X=1 +phy_tx_polarity_flip_fabric63.BCM8885X=1 +phy_tx_polarity_flip_fabric64.BCM8885X=1 +phy_tx_polarity_flip_fabric65.BCM8885X=0 +phy_tx_polarity_flip_fabric66.BCM8885X=1 +phy_tx_polarity_flip_fabric67.BCM8885X=0 +phy_tx_polarity_flip_fabric68.BCM8885X=0 +phy_tx_polarity_flip_fabric69.BCM8885X=0 +phy_tx_polarity_flip_fabric70.BCM8885X=0 +phy_tx_polarity_flip_fabric71.BCM8885X=1 +phy_tx_polarity_flip_fabric72.BCM8885X=0 +phy_tx_polarity_flip_fabric73.BCM8885X=1 +phy_tx_polarity_flip_fabric74.BCM8885X=0 +phy_tx_polarity_flip_fabric75.BCM8885X=1 +phy_tx_polarity_flip_fabric76.BCM8885X=0 +phy_tx_polarity_flip_fabric77.BCM8885X=0 +phy_tx_polarity_flip_fabric78.BCM8885X=0 +phy_tx_polarity_flip_fabric79.BCM8885X=1 +phy_tx_polarity_flip_fabric80.BCM8885X=1 +phy_tx_polarity_flip_fabric81.BCM8885X=0 +phy_tx_polarity_flip_fabric82.BCM8885X=0 +phy_tx_polarity_flip_fabric83.BCM8885X=0 +phy_tx_polarity_flip_fabric84.BCM8885X=1 +phy_tx_polarity_flip_fabric85.BCM8885X=0 +phy_tx_polarity_flip_fabric86.BCM8885X=1 +phy_tx_polarity_flip_fabric87.BCM8885X=0 +phy_tx_polarity_flip_fabric88.BCM8885X=1 +phy_tx_polarity_flip_fabric89.BCM8885X=1 +phy_tx_polarity_flip_fabric90.BCM8885X=1 +phy_tx_polarity_flip_fabric91.BCM8885X=1 +phy_tx_polarity_flip_fabric92.BCM8885X=1 +phy_tx_polarity_flip_fabric93.BCM8885X=1 +phy_tx_polarity_flip_fabric94.BCM8885X=0 +phy_tx_polarity_flip_fabric95.BCM8885X=0 +phy_tx_polarity_flip_fabric96.BCM8885X=1 +phy_tx_polarity_flip_fabric97.BCM8885X=1 +phy_tx_polarity_flip_fabric98.BCM8885X=1 +phy_tx_polarity_flip_fabric99.BCM8885X=0 +phy_tx_polarity_flip_fabric100.BCM8885X=0 +phy_tx_polarity_flip_fabric101.BCM8885X=0 +phy_tx_polarity_flip_fabric102.BCM8885X=1 +phy_tx_polarity_flip_fabric103.BCM8885X=1 +phy_tx_polarity_flip_fabric104.BCM8885X=1 +phy_tx_polarity_flip_fabric105.BCM8885X=0 +phy_tx_polarity_flip_fabric106.BCM8885X=1 +phy_tx_polarity_flip_fabric107.BCM8885X=0 +phy_tx_polarity_flip_fabric108.BCM8885X=0 +phy_tx_polarity_flip_fabric109.BCM8885X=1 +phy_tx_polarity_flip_fabric110.BCM8885X=0 +phy_tx_polarity_flip_fabric111.BCM8885X=0 +phy_tx_polarity_flip_fabric112.BCM8885X=1 +phy_tx_polarity_flip_fabric113.BCM8885X=0 +phy_tx_polarity_flip_fabric114.BCM8885X=0 +phy_tx_polarity_flip_fabric115.BCM8885X=1 +phy_tx_polarity_flip_fabric116.BCM8885X=1 +phy_tx_polarity_flip_fabric117.BCM8885X=1 +phy_tx_polarity_flip_fabric118.BCM8885X=0 +phy_tx_polarity_flip_fabric119.BCM8885X=0 +phy_tx_polarity_flip_fabric120.BCM8885X=0 +phy_tx_polarity_flip_fabric121.BCM8885X=0 +phy_tx_polarity_flip_fabric122.BCM8885X=1 +phy_tx_polarity_flip_fabric123.BCM8885X=1 +phy_tx_polarity_flip_fabric124.BCM8885X=0 +phy_tx_polarity_flip_fabric125.BCM8885X=0 +phy_tx_polarity_flip_fabric126.BCM8885X=0 +phy_tx_polarity_flip_fabric127.BCM8885X=1 +phy_tx_polarity_flip_fabric128.BCM8885X=0 +phy_tx_polarity_flip_fabric129.BCM8885X=0 +phy_tx_polarity_flip_fabric130.BCM8885X=0 +phy_tx_polarity_flip_fabric131.BCM8885X=1 +phy_tx_polarity_flip_fabric132.BCM8885X=0 +phy_tx_polarity_flip_fabric133.BCM8885X=0 +phy_tx_polarity_flip_fabric134.BCM8885X=1 +phy_tx_polarity_flip_fabric135.BCM8885X=1 +phy_tx_polarity_flip_fabric136.BCM8885X=1 +phy_tx_polarity_flip_fabric137.BCM8885X=1 +phy_tx_polarity_flip_fabric138.BCM8885X=1 +phy_tx_polarity_flip_fabric139.BCM8885X=1 +phy_tx_polarity_flip_fabric140.BCM8885X=0 +phy_tx_polarity_flip_fabric141.BCM8885X=0 +phy_tx_polarity_flip_fabric142.BCM8885X=0 +phy_tx_polarity_flip_fabric143.BCM8885X=0 +phy_tx_polarity_flip_fabric144.BCM8885X=1 +phy_tx_polarity_flip_fabric145.BCM8885X=1 +phy_tx_polarity_flip_fabric146.BCM8885X=1 +phy_tx_polarity_flip_fabric147.BCM8885X=1 +phy_tx_polarity_flip_fabric148.BCM8885X=1 +phy_tx_polarity_flip_fabric149.BCM8885X=1 +phy_tx_polarity_flip_fabric150.BCM8885X=1 +phy_tx_polarity_flip_fabric151.BCM8885X=1 +phy_tx_polarity_flip_fabric152.BCM8885X=1 +phy_tx_polarity_flip_fabric153.BCM8885X=1 +phy_tx_polarity_flip_fabric154.BCM8885X=1 +phy_tx_polarity_flip_fabric155.BCM8885X=0 +phy_tx_polarity_flip_fabric156.BCM8885X=1 +phy_tx_polarity_flip_fabric157.BCM8885X=0 +phy_tx_polarity_flip_fabric158.BCM8885X=0 +phy_tx_polarity_flip_fabric159.BCM8885X=0 +phy_tx_polarity_flip_fabric160.BCM8885X=0 +phy_tx_polarity_flip_fabric161.BCM8885X=1 +phy_tx_polarity_flip_fabric162.BCM8885X=0 +phy_tx_polarity_flip_fabric163.BCM8885X=1 +phy_tx_polarity_flip_fabric164.BCM8885X=1 +phy_tx_polarity_flip_fabric165.BCM8885X=1 +phy_tx_polarity_flip_fabric166.BCM8885X=0 +phy_tx_polarity_flip_fabric167.BCM8885X=0 +phy_tx_polarity_flip_fabric168.BCM8885X=0 +phy_tx_polarity_flip_fabric169.BCM8885X=0 +phy_tx_polarity_flip_fabric170.BCM8885X=1 +phy_tx_polarity_flip_fabric171.BCM8885X=0 +phy_tx_polarity_flip_fabric172.BCM8885X=0 +phy_tx_polarity_flip_fabric173.BCM8885X=0 +phy_tx_polarity_flip_fabric174.BCM8885X=0 +phy_tx_polarity_flip_fabric175.BCM8885X=1 +phy_tx_polarity_flip_fabric176.BCM8885X=0 +phy_tx_polarity_flip_fabric177.BCM8885X=0 +phy_tx_polarity_flip_fabric178.BCM8885X=0 +phy_tx_polarity_flip_fabric179.BCM8885X=1 +phy_tx_polarity_flip_fabric180.BCM8885X=1 +phy_tx_polarity_flip_fabric181.BCM8885X=0 +phy_tx_polarity_flip_fabric182.BCM8885X=0 +phy_tx_polarity_flip_fabric183.BCM8885X=0 +phy_tx_polarity_flip_fabric184.BCM8885X=0 +phy_tx_polarity_flip_fabric185.BCM8885X=1 +phy_tx_polarity_flip_fabric186.BCM8885X=1 +phy_tx_polarity_flip_fabric187.BCM8885X=0 +phy_tx_polarity_flip_fabric188.BCM8885X=1 +phy_tx_polarity_flip_fabric189.BCM8885X=0 +phy_tx_polarity_flip_fabric190.BCM8885X=0 +phy_tx_polarity_flip_fabric191.BCM8885X=1 + + +lane_to_serdes_map_nif_lane0.BCM8885X=rx0:tx0 +lane_to_serdes_map_nif_lane1.BCM8885X=rx1:tx1 +lane_to_serdes_map_nif_lane2.BCM8885X=rx2:tx2 +lane_to_serdes_map_nif_lane3.BCM8885X=rx3:tx3 +lane_to_serdes_map_nif_lane4.BCM8885X=rx4:tx4 +lane_to_serdes_map_nif_lane5.BCM8885X=rx5:tx5 +lane_to_serdes_map_nif_lane6.BCM8885X=rx6:tx6 +lane_to_serdes_map_nif_lane7.BCM8885X=rx7:tx7 + +lane_to_serdes_map_nif_lane8.BCM8885X=rx8:tx8 +lane_to_serdes_map_nif_lane9.BCM8885X=rx9:tx9 +lane_to_serdes_map_nif_lane10.BCM8885X=rx10:tx10 +lane_to_serdes_map_nif_lane11.BCM8885X=rx11:tx11 +lane_to_serdes_map_nif_lane12.BCM8885X=rx12:tx12 +lane_to_serdes_map_nif_lane13.BCM8885X=rx13:tx13 +lane_to_serdes_map_nif_lane14.BCM8885X=rx14:tx14 +lane_to_serdes_map_nif_lane15.BCM8885X=rx15:tx15 + +lane_to_serdes_map_nif_lane16.BCM8885X=rx16:tx16 +lane_to_serdes_map_nif_lane17.BCM8885X=rx17:tx17 +lane_to_serdes_map_nif_lane18.BCM8885X=rx18:tx18 +lane_to_serdes_map_nif_lane19.BCM8885X=rx19:tx19 +lane_to_serdes_map_nif_lane20.BCM8885X=rx20:tx20 +lane_to_serdes_map_nif_lane21.BCM8885X=rx21:tx21 +lane_to_serdes_map_nif_lane22.BCM8885X=rx22:tx22 +lane_to_serdes_map_nif_lane23.BCM8885X=rx23:tx23 + +lane_to_serdes_map_nif_lane24.BCM8885X=rx24:tx24 +lane_to_serdes_map_nif_lane25.BCM8885X=rx25:tx25 +lane_to_serdes_map_nif_lane26.BCM8885X=rx26:tx26 +lane_to_serdes_map_nif_lane27.BCM8885X=rx27:tx27 +lane_to_serdes_map_nif_lane28.BCM8885X=rx28:tx28 +lane_to_serdes_map_nif_lane29.BCM8885X=rx29:tx29 +lane_to_serdes_map_nif_lane30.BCM8885X=rx30:tx30 +lane_to_serdes_map_nif_lane31.BCM8885X=rx31:tx31 + +lane_to_serdes_map_nif_lane32.BCM8885X=rx32:tx32 +lane_to_serdes_map_nif_lane33.BCM8885X=rx33:tx33 +lane_to_serdes_map_nif_lane34.BCM8885X=rx34:tx34 +lane_to_serdes_map_nif_lane35.BCM8885X=rx35:tx35 +lane_to_serdes_map_nif_lane36.BCM8885X=rx36:tx36 +lane_to_serdes_map_nif_lane37.BCM8885X=rx37:tx37 +lane_to_serdes_map_nif_lane38.BCM8885X=rx38:tx38 +lane_to_serdes_map_nif_lane39.BCM8885X=rx39:tx39 + +lane_to_serdes_map_nif_lane40.BCM8885X=rx40:tx40 +lane_to_serdes_map_nif_lane41.BCM8885X=rx41:tx41 +lane_to_serdes_map_nif_lane42.BCM8885X=rx42:tx42 +lane_to_serdes_map_nif_lane43.BCM8885X=rx43:tx43 +lane_to_serdes_map_nif_lane44.BCM8885X=rx44:tx44 +lane_to_serdes_map_nif_lane45.BCM8885X=rx45:tx45 +lane_to_serdes_map_nif_lane46.BCM8885X=rx46:tx46 +lane_to_serdes_map_nif_lane47.BCM8885X=rx47:tx47 + +lane_to_serdes_map_nif_lane48.BCM8885X=rx48:tx48 +lane_to_serdes_map_nif_lane49.BCM8885X=rx49:tx49 +lane_to_serdes_map_nif_lane50.BCM8885X=rx50:tx50 +lane_to_serdes_map_nif_lane51.BCM8885X=rx51:tx51 +lane_to_serdes_map_nif_lane52.BCM8885X=rx52:tx52 +lane_to_serdes_map_nif_lane53.BCM8885X=rx53:tx53 +lane_to_serdes_map_nif_lane54.BCM8885X=rx54:tx54 +lane_to_serdes_map_nif_lane55.BCM8885X=rx55:tx55 + +lane_to_serdes_map_nif_lane56.BCM8885X=rx56:tx56 +lane_to_serdes_map_nif_lane57.BCM8885X=rx57:tx57 +lane_to_serdes_map_nif_lane58.BCM8885X=rx58:tx58 +lane_to_serdes_map_nif_lane59.BCM8885X=rx59:tx59 +lane_to_serdes_map_nif_lane60.BCM8885X=rx60:tx60 +lane_to_serdes_map_nif_lane61.BCM8885X=rx61:tx61 +lane_to_serdes_map_nif_lane62.BCM8885X=rx62:tx62 +lane_to_serdes_map_nif_lane63.BCM8885X=rx63:tx63 + +lane_to_serdes_map_nif_lane64.BCM8885X=rx64:tx64 +lane_to_serdes_map_nif_lane65.BCM8885X=rx65:tx65 +lane_to_serdes_map_nif_lane66.BCM8885X=rx66:tx66 +lane_to_serdes_map_nif_lane67.BCM8885X=rx67:tx67 +lane_to_serdes_map_nif_lane68.BCM8885X=rx68:tx68 +lane_to_serdes_map_nif_lane69.BCM8885X=rx69:tx69 +lane_to_serdes_map_nif_lane70.BCM8885X=rx70:tx70 +lane_to_serdes_map_nif_lane71.BCM8885X=rx71:tx71 + +lane_to_serdes_map_nif_lane72.BCM8885X=rx72:tx72 +lane_to_serdes_map_nif_lane73.BCM8885X=rx73:tx73 +lane_to_serdes_map_nif_lane74.BCM8885X=rx74:tx74 +lane_to_serdes_map_nif_lane75.BCM8885X=rx75:tx75 +lane_to_serdes_map_nif_lane76.BCM8885X=rx76:tx76 +lane_to_serdes_map_nif_lane77.BCM8885X=rx77:tx77 +lane_to_serdes_map_nif_lane78.BCM8885X=rx78:tx78 +lane_to_serdes_map_nif_lane79.BCM8885X=rx79:tx79 + +lane_to_serdes_map_nif_lane80.BCM8885X=rx80:tx80 +lane_to_serdes_map_nif_lane81.BCM8885X=rx81:tx81 +lane_to_serdes_map_nif_lane82.BCM8885X=rx82:tx82 +lane_to_serdes_map_nif_lane83.BCM8885X=rx83:tx83 +lane_to_serdes_map_nif_lane84.BCM8885X=rx84:tx84 +lane_to_serdes_map_nif_lane85.BCM8885X=rx85:tx85 +lane_to_serdes_map_nif_lane86.BCM8885X=rx86:tx86 +lane_to_serdes_map_nif_lane87.BCM8885X=rx87:tx87 + +lane_to_serdes_map_nif_lane88.BCM8885X=rx88:tx88 +lane_to_serdes_map_nif_lane89.BCM8885X=rx89:tx89 +lane_to_serdes_map_nif_lane90.BCM8885X=rx90:tx90 +lane_to_serdes_map_nif_lane91.BCM8885X=rx91:tx91 +lane_to_serdes_map_nif_lane92.BCM8885X=rx92:tx92 +lane_to_serdes_map_nif_lane93.BCM8885X=rx93:tx93 +lane_to_serdes_map_nif_lane94.BCM8885X=rx94:tx94 +lane_to_serdes_map_nif_lane95.BCM8885X=rx95:tx95 + +lane_to_serdes_map_nif_lane96.BCM8885X=rx96:tx96 +lane_to_serdes_map_nif_lane97.BCM8885X=rx97:tx97 +lane_to_serdes_map_nif_lane98.BCM8885X=rx98:tx98 +lane_to_serdes_map_nif_lane99.BCM8885X=rx99:tx99 +lane_to_serdes_map_nif_lane100.BCM8885X=rx100:tx100 +lane_to_serdes_map_nif_lane101.BCM8885X=rx101:tx101 +lane_to_serdes_map_nif_lane102.BCM8885X=rx102:tx102 +lane_to_serdes_map_nif_lane103.BCM8885X=rx103:tx103 + +lane_to_serdes_map_nif_lane104.BCM8885X=rx104:tx104 +lane_to_serdes_map_nif_lane105.BCM8885X=rx105:tx105 +lane_to_serdes_map_nif_lane106.BCM8885X=rx106:tx106 +lane_to_serdes_map_nif_lane107.BCM8885X=rx107:tx107 +lane_to_serdes_map_nif_lane108.BCM8885X=rx108:tx108 +lane_to_serdes_map_nif_lane109.BCM8885X=rx109:tx109 +lane_to_serdes_map_nif_lane110.BCM8885X=rx110:tx110 +lane_to_serdes_map_nif_lane111.BCM8885X=rx111:tx111 + +lane_to_serdes_map_nif_lane112.BCM8885X=rx112:tx112 +lane_to_serdes_map_nif_lane113.BCM8885X=rx113:tx113 +lane_to_serdes_map_nif_lane114.BCM8885X=rx114:tx114 +lane_to_serdes_map_nif_lane115.BCM8885X=rx115:tx115 +lane_to_serdes_map_nif_lane116.BCM8885X=rx116:tx116 +lane_to_serdes_map_nif_lane117.BCM8885X=rx117:tx117 +lane_to_serdes_map_nif_lane118.BCM8885X=rx118:tx118 +lane_to_serdes_map_nif_lane119.BCM8885X=rx119:tx119 + +lane_to_serdes_map_nif_lane120.BCM8885X=rx120:tx120 +lane_to_serdes_map_nif_lane121.BCM8885X=rx121:tx121 +lane_to_serdes_map_nif_lane122.BCM8885X=rx122:tx122 +lane_to_serdes_map_nif_lane123.BCM8885X=rx123:tx123 +lane_to_serdes_map_nif_lane124.BCM8885X=rx124:tx124 +lane_to_serdes_map_nif_lane125.BCM8885X=rx125:tx125 +lane_to_serdes_map_nif_lane126.BCM8885X=rx126:tx126 +lane_to_serdes_map_nif_lane127.BCM8885X=rx127:tx127 + +lane_to_serdes_map_nif_lane128.BCM8885X=rx128:tx128 +lane_to_serdes_map_nif_lane129.BCM8885X=rx129:tx129 +lane_to_serdes_map_nif_lane130.BCM8885X=rx130:tx130 +lane_to_serdes_map_nif_lane131.BCM8885X=rx131:tx131 +lane_to_serdes_map_nif_lane132.BCM8885X=rx132:tx132 +lane_to_serdes_map_nif_lane133.BCM8885X=rx133:tx133 +lane_to_serdes_map_nif_lane134.BCM8885X=rx134:tx134 +lane_to_serdes_map_nif_lane135.BCM8885X=rx135:tx135 + +lane_to_serdes_map_nif_lane136.BCM8885X=rx136:tx136 +lane_to_serdes_map_nif_lane137.BCM8885X=rx137:tx137 +lane_to_serdes_map_nif_lane138.BCM8885X=rx138:tx138 +lane_to_serdes_map_nif_lane139.BCM8885X=rx139:tx139 +lane_to_serdes_map_nif_lane140.BCM8885X=rx140:tx140 +lane_to_serdes_map_nif_lane141.BCM8885X=rx141:tx141 +lane_to_serdes_map_nif_lane142.BCM8885X=rx142:tx142 +lane_to_serdes_map_nif_lane143.BCM8885X=rx143:tx143 + + +mdb_profile=Balanced-Exem +mdb_profile_kaps_cfg.BCM8885X=2 +mdio_output_delay=16 +mem_cache_enable_ecc.BCM8885X=1 +mem_cache_enable_parity.BCM8885X=1 +miim_intr_enable.BCM8885X=0 +os=unix +outlif_logical_to_physical_phase_map_1=S1 +outlif_logical_to_physical_phase_map_2=L1 +outlif_logical_to_physical_phase_map_3=XL +outlif_logical_to_physical_phase_map_4=L2 +outlif_logical_to_physical_phase_map_5=M1 +outlif_logical_to_physical_phase_map_6=M2 +outlif_logical_to_physical_phase_map_7=M3 +outlif_logical_to_physical_phase_map_8=S2 +outlif_physical_phase_data_granularity_L1=60 +outlif_physical_phase_data_granularity_L2=60 +outlif_physical_phase_data_granularity_M1=60 +outlif_physical_phase_data_granularity_M2=60 +outlif_physical_phase_data_granularity_M3=60 +outlif_physical_phase_data_granularity_S1=60 +outlif_physical_phase_data_granularity_S2=60 +outlif_physical_phase_data_granularity_XL=60 +pdma_continuous_mode_enable.BCM8885X=1 + + +phy_rx_polarity_flip_phy0.BCM8885X=1 +phy_rx_polarity_flip_phy1.BCM8885X=0 +phy_rx_polarity_flip_phy2.BCM8885X=1 +phy_rx_polarity_flip_phy3.BCM8885X=0 +phy_rx_polarity_flip_phy4.BCM8885X=1 +phy_rx_polarity_flip_phy5.BCM8885X=1 +phy_rx_polarity_flip_phy6.BCM8885X=1 +phy_rx_polarity_flip_phy7.BCM8885X=0 + +phy_rx_polarity_flip_phy8.BCM8885X=0 +phy_rx_polarity_flip_phy9.BCM8885X=0 +phy_rx_polarity_flip_phy10.BCM8885X=1 +phy_rx_polarity_flip_phy11.BCM8885X=0 +phy_rx_polarity_flip_phy12.BCM8885X=1 +phy_rx_polarity_flip_phy13.BCM8885X=0 +phy_rx_polarity_flip_phy14.BCM8885X=0 +phy_rx_polarity_flip_phy15.BCM8885X=0 + +phy_rx_polarity_flip_phy16.BCM8885X=1 +phy_rx_polarity_flip_phy17.BCM8885X=0 +phy_rx_polarity_flip_phy18.BCM8885X=1 +phy_rx_polarity_flip_phy19.BCM8885X=0 +phy_rx_polarity_flip_phy20.BCM8885X=1 +phy_rx_polarity_flip_phy21.BCM8885X=1 +phy_rx_polarity_flip_phy22.BCM8885X=1 +phy_rx_polarity_flip_phy23.BCM8885X=1 + +phy_rx_polarity_flip_phy24.BCM8885X=0 +phy_rx_polarity_flip_phy25.BCM8885X=1 +phy_rx_polarity_flip_phy26.BCM8885X=0 +phy_rx_polarity_flip_phy27.BCM8885X=1 +phy_rx_polarity_flip_phy28.BCM8885X=1 +phy_rx_polarity_flip_phy29.BCM8885X=1 +phy_rx_polarity_flip_phy30.BCM8885X=0 +phy_rx_polarity_flip_phy31.BCM8885X=1 + +phy_rx_polarity_flip_phy32.BCM8885X=1 +phy_rx_polarity_flip_phy33.BCM8885X=0 +phy_rx_polarity_flip_phy34.BCM8885X=1 +phy_rx_polarity_flip_phy35.BCM8885X=0 +phy_rx_polarity_flip_phy36.BCM8885X=0 +phy_rx_polarity_flip_phy37.BCM8885X=0 +phy_rx_polarity_flip_phy38.BCM8885X=0 +phy_rx_polarity_flip_phy39.BCM8885X=1 + +phy_rx_polarity_flip_phy40.BCM8885X=1 +phy_rx_polarity_flip_phy41.BCM8885X=1 +phy_rx_polarity_flip_phy42.BCM8885X=0 +phy_rx_polarity_flip_phy43.BCM8885X=1 +phy_rx_polarity_flip_phy44.BCM8885X=1 +phy_rx_polarity_flip_phy45.BCM8885X=0 +phy_rx_polarity_flip_phy46.BCM8885X=0 +phy_rx_polarity_flip_phy47.BCM8885X=1 + +phy_rx_polarity_flip_phy48.BCM8885X=0 +phy_rx_polarity_flip_phy49.BCM8885X=1 +phy_rx_polarity_flip_phy50.BCM8885X=0 +phy_rx_polarity_flip_phy51.BCM8885X=0 +phy_rx_polarity_flip_phy52.BCM8885X=0 +phy_rx_polarity_flip_phy53.BCM8885X=1 +phy_rx_polarity_flip_phy54.BCM8885X=0 +phy_rx_polarity_flip_phy55.BCM8885X=0 + +phy_rx_polarity_flip_phy56.BCM8885X=0 +phy_rx_polarity_flip_phy57.BCM8885X=0 +phy_rx_polarity_flip_phy58.BCM8885X=0 +phy_rx_polarity_flip_phy59.BCM8885X=0 +phy_rx_polarity_flip_phy60.BCM8885X=0 +phy_rx_polarity_flip_phy61.BCM8885X=0 +phy_rx_polarity_flip_phy62.BCM8885X=1 +phy_rx_polarity_flip_phy63.BCM8885X=1 + +phy_rx_polarity_flip_phy64.BCM8885X=0 +phy_rx_polarity_flip_phy65.BCM8885X=0 +phy_rx_polarity_flip_phy66.BCM8885X=0 +phy_rx_polarity_flip_phy67.BCM8885X=0 +phy_rx_polarity_flip_phy68.BCM8885X=0 +phy_rx_polarity_flip_phy69.BCM8885X=0 +phy_rx_polarity_flip_phy70.BCM8885X=0 +phy_rx_polarity_flip_phy71.BCM8885X=0 + +phy_rx_polarity_flip_phy72.BCM8885X=0 +phy_rx_polarity_flip_phy73.BCM8885X=0 +phy_rx_polarity_flip_phy74.BCM8885X=0 +phy_rx_polarity_flip_phy75.BCM8885X=1 +phy_rx_polarity_flip_phy76.BCM8885X=0 +phy_rx_polarity_flip_phy77.BCM8885X=1 +phy_rx_polarity_flip_phy78.BCM8885X=0 +phy_rx_polarity_flip_phy79.BCM8885X=0 + +phy_rx_polarity_flip_phy80.BCM8885X=1 +phy_rx_polarity_flip_phy81.BCM8885X=0 +phy_rx_polarity_flip_phy82.BCM8885X=1 +phy_rx_polarity_flip_phy83.BCM8885X=1 +phy_rx_polarity_flip_phy84.BCM8885X=0 +phy_rx_polarity_flip_phy85.BCM8885X=0 +phy_rx_polarity_flip_phy86.BCM8885X=1 +phy_rx_polarity_flip_phy87.BCM8885X=1 + +phy_rx_polarity_flip_phy88.BCM8885X=0 +phy_rx_polarity_flip_phy89.BCM8885X=1 +phy_rx_polarity_flip_phy90.BCM8885X=0 +phy_rx_polarity_flip_phy91.BCM8885X=0 +phy_rx_polarity_flip_phy92.BCM8885X=0 +phy_rx_polarity_flip_phy93.BCM8885X=0 +phy_rx_polarity_flip_phy94.BCM8885X=0 +phy_rx_polarity_flip_phy95.BCM8885X=1 + +phy_rx_polarity_flip_phy96.BCM8885X=0 +phy_rx_polarity_flip_phy97.BCM8885X=0 +phy_rx_polarity_flip_phy98.BCM8885X=0 +phy_rx_polarity_flip_phy99.BCM8885X=0 +phy_rx_polarity_flip_phy100.BCM8885X=0 +phy_rx_polarity_flip_phy101.BCM8885X=1 +phy_rx_polarity_flip_phy102.BCM8885X=1 +phy_rx_polarity_flip_phy103.BCM8885X=0 + +phy_rx_polarity_flip_phy104.BCM8885X=1 +phy_rx_polarity_flip_phy105.BCM8885X=1 +phy_rx_polarity_flip_phy106.BCM8885X=1 +phy_rx_polarity_flip_phy107.BCM8885X=1 +phy_rx_polarity_flip_phy108.BCM8885X=0 +phy_rx_polarity_flip_phy109.BCM8885X=1 +phy_rx_polarity_flip_phy110.BCM8885X=1 +phy_rx_polarity_flip_phy111.BCM8885X=1 + +phy_rx_polarity_flip_phy112.BCM8885X=0 +phy_rx_polarity_flip_phy113.BCM8885X=1 +phy_rx_polarity_flip_phy114.BCM8885X=1 +phy_rx_polarity_flip_phy115.BCM8885X=1 +phy_rx_polarity_flip_phy116.BCM8885X=1 +phy_rx_polarity_flip_phy117.BCM8885X=1 +phy_rx_polarity_flip_phy118.BCM8885X=0 +phy_rx_polarity_flip_phy119.BCM8885X=0 + +phy_rx_polarity_flip_phy120.BCM8885X=1 +phy_rx_polarity_flip_phy121.BCM8885X=0 +phy_rx_polarity_flip_phy122.BCM8885X=0 +phy_rx_polarity_flip_phy123.BCM8885X=1 +phy_rx_polarity_flip_phy124.BCM8885X=0 +phy_rx_polarity_flip_phy125.BCM8885X=1 +phy_rx_polarity_flip_phy126.BCM8885X=1 +phy_rx_polarity_flip_phy127.BCM8885X=0 + +phy_rx_polarity_flip_phy128.BCM8885X=0 +phy_rx_polarity_flip_phy129.BCM8885X=0 +phy_rx_polarity_flip_phy130.BCM8885X=1 +phy_rx_polarity_flip_phy131.BCM8885X=0 +phy_rx_polarity_flip_phy132.BCM8885X=0 +phy_rx_polarity_flip_phy133.BCM8885X=1 +phy_rx_polarity_flip_phy134.BCM8885X=1 +phy_rx_polarity_flip_phy135.BCM8885X=0 + +phy_rx_polarity_flip_phy136.BCM8885X=1 +phy_rx_polarity_flip_phy137.BCM8885X=0 +phy_rx_polarity_flip_phy138.BCM8885X=0 +phy_rx_polarity_flip_phy139.BCM8885X=1 +phy_rx_polarity_flip_phy140.BCM8885X=1 +phy_rx_polarity_flip_phy141.BCM8885X=1 +phy_rx_polarity_flip_phy142.BCM8885X=0 +phy_rx_polarity_flip_phy143.BCM8885X=1 + + +phy_tx_polarity_flip_phy0.BCM8885X=1 +phy_tx_polarity_flip_phy1.BCM8885X=0 +phy_tx_polarity_flip_phy2.BCM8885X=0 +phy_tx_polarity_flip_phy3.BCM8885X=0 +phy_tx_polarity_flip_phy4.BCM8885X=1 +phy_tx_polarity_flip_phy5.BCM8885X=0 +phy_tx_polarity_flip_phy6.BCM8885X=0 +phy_tx_polarity_flip_phy7.BCM8885X=1 + +phy_tx_polarity_flip_phy8.BCM8885X=0 +phy_tx_polarity_flip_phy9.BCM8885X=1 +phy_tx_polarity_flip_phy10.BCM8885X=0 +phy_tx_polarity_flip_phy11.BCM8885X=1 +phy_tx_polarity_flip_phy12.BCM8885X=1 +phy_tx_polarity_flip_phy13.BCM8885X=1 +phy_tx_polarity_flip_phy14.BCM8885X=0 +phy_tx_polarity_flip_phy15.BCM8885X=1 + +phy_tx_polarity_flip_phy16.BCM8885X=1 +phy_tx_polarity_flip_phy17.BCM8885X=1 +phy_tx_polarity_flip_phy18.BCM8885X=0 +phy_tx_polarity_flip_phy19.BCM8885X=0 +phy_tx_polarity_flip_phy20.BCM8885X=1 +phy_tx_polarity_flip_phy21.BCM8885X=1 +phy_tx_polarity_flip_phy22.BCM8885X=0 +phy_tx_polarity_flip_phy23.BCM8885X=0 + +phy_tx_polarity_flip_phy24.BCM8885X=0 +phy_tx_polarity_flip_phy25.BCM8885X=0 +phy_tx_polarity_flip_phy26.BCM8885X=0 +phy_tx_polarity_flip_phy27.BCM8885X=1 +phy_tx_polarity_flip_phy28.BCM8885X=0 +phy_tx_polarity_flip_phy29.BCM8885X=0 +phy_tx_polarity_flip_phy30.BCM8885X=0 +phy_tx_polarity_flip_phy31.BCM8885X=0 + +phy_tx_polarity_flip_phy32.BCM8885X=1 +phy_tx_polarity_flip_phy33.BCM8885X=1 +phy_tx_polarity_flip_phy34.BCM8885X=1 +phy_tx_polarity_flip_phy35.BCM8885X=0 +phy_tx_polarity_flip_phy36.BCM8885X=1 +phy_tx_polarity_flip_phy37.BCM8885X=1 +phy_tx_polarity_flip_phy38.BCM8885X=1 +phy_tx_polarity_flip_phy39.BCM8885X=0 + +phy_tx_polarity_flip_phy40.BCM8885X=0 +phy_tx_polarity_flip_phy41.BCM8885X=0 +phy_tx_polarity_flip_phy42.BCM8885X=1 +phy_tx_polarity_flip_phy43.BCM8885X=1 +phy_tx_polarity_flip_phy44.BCM8885X=0 +phy_tx_polarity_flip_phy45.BCM8885X=0 +phy_tx_polarity_flip_phy46.BCM8885X=1 +phy_tx_polarity_flip_phy47.BCM8885X=0 + +phy_tx_polarity_flip_phy48.BCM8885X=1 +phy_tx_polarity_flip_phy49.BCM8885X=1 +phy_tx_polarity_flip_phy50.BCM8885X=1 +phy_tx_polarity_flip_phy51.BCM8885X=0 +phy_tx_polarity_flip_phy52.BCM8885X=1 +phy_tx_polarity_flip_phy53.BCM8885X=0 +phy_tx_polarity_flip_phy54.BCM8885X=0 +phy_tx_polarity_flip_phy55.BCM8885X=0 + +phy_tx_polarity_flip_phy56.BCM8885X=0 +phy_tx_polarity_flip_phy57.BCM8885X=1 +phy_tx_polarity_flip_phy58.BCM8885X=0 +phy_tx_polarity_flip_phy59.BCM8885X=0 +phy_tx_polarity_flip_phy60.BCM8885X=0 +phy_tx_polarity_flip_phy61.BCM8885X=0 +phy_tx_polarity_flip_phy62.BCM8885X=0 +phy_tx_polarity_flip_phy63.BCM8885X=0 + +phy_tx_polarity_flip_phy64.BCM8885X=0 +phy_tx_polarity_flip_phy65.BCM8885X=1 +phy_tx_polarity_flip_phy66.BCM8885X=1 +phy_tx_polarity_flip_phy67.BCM8885X=0 +phy_tx_polarity_flip_phy68.BCM8885X=1 +phy_tx_polarity_flip_phy69.BCM8885X=0 +phy_tx_polarity_flip_phy70.BCM8885X=0 +phy_tx_polarity_flip_phy71.BCM8885X=1 + +phy_tx_polarity_flip_phy72.BCM8885X=1 +phy_tx_polarity_flip_phy73.BCM8885X=1 +phy_tx_polarity_flip_phy74.BCM8885X=0 +phy_tx_polarity_flip_phy75.BCM8885X=1 +phy_tx_polarity_flip_phy76.BCM8885X=1 +phy_tx_polarity_flip_phy77.BCM8885X=0 +phy_tx_polarity_flip_phy78.BCM8885X=0 +phy_tx_polarity_flip_phy79.BCM8885X=1 + +phy_tx_polarity_flip_phy80.BCM8885X=1 +phy_tx_polarity_flip_phy81.BCM8885X=0 +phy_tx_polarity_flip_phy82.BCM8885X=0 +phy_tx_polarity_flip_phy83.BCM8885X=0 +phy_tx_polarity_flip_phy84.BCM8885X=0 +phy_tx_polarity_flip_phy85.BCM8885X=0 +phy_tx_polarity_flip_phy86.BCM8885X=1 +phy_tx_polarity_flip_phy87.BCM8885X=0 + +phy_tx_polarity_flip_phy88.BCM8885X=1 +phy_tx_polarity_flip_phy89.BCM8885X=0 +phy_tx_polarity_flip_phy90.BCM8885X=1 +phy_tx_polarity_flip_phy91.BCM8885X=1 +phy_tx_polarity_flip_phy92.BCM8885X=1 +phy_tx_polarity_flip_phy93.BCM8885X=0 +phy_tx_polarity_flip_phy94.BCM8885X=1 +phy_tx_polarity_flip_phy95.BCM8885X=1 + +phy_tx_polarity_flip_phy96.BCM8885X=1 +phy_tx_polarity_flip_phy97.BCM8885X=1 +phy_tx_polarity_flip_phy98.BCM8885X=1 +phy_tx_polarity_flip_phy99.BCM8885X=0 +phy_tx_polarity_flip_phy100.BCM8885X=1 +phy_tx_polarity_flip_phy101.BCM8885X=1 +phy_tx_polarity_flip_phy102.BCM8885X=1 +phy_tx_polarity_flip_phy103.BCM8885X=0 + +phy_tx_polarity_flip_phy104.BCM8885X=0 +phy_tx_polarity_flip_phy105.BCM8885X=0 +phy_tx_polarity_flip_phy106.BCM8885X=0 +phy_tx_polarity_flip_phy107.BCM8885X=1 +phy_tx_polarity_flip_phy108.BCM8885X=1 +phy_tx_polarity_flip_phy109.BCM8885X=0 +phy_tx_polarity_flip_phy110.BCM8885X=1 +phy_tx_polarity_flip_phy111.BCM8885X=0 + +phy_tx_polarity_flip_phy112.BCM8885X=0 +phy_tx_polarity_flip_phy113.BCM8885X=1 +phy_tx_polarity_flip_phy114.BCM8885X=1 +phy_tx_polarity_flip_phy115.BCM8885X=0 +phy_tx_polarity_flip_phy116.BCM8885X=0 +phy_tx_polarity_flip_phy117.BCM8885X=1 +phy_tx_polarity_flip_phy118.BCM8885X=0 +phy_tx_polarity_flip_phy119.BCM8885X=0 + +phy_tx_polarity_flip_phy120.BCM8885X=0 +phy_tx_polarity_flip_phy121.BCM8885X=1 +phy_tx_polarity_flip_phy122.BCM8885X=1 +phy_tx_polarity_flip_phy123.BCM8885X=0 +phy_tx_polarity_flip_phy124.BCM8885X=0 +phy_tx_polarity_flip_phy125.BCM8885X=0 +phy_tx_polarity_flip_phy126.BCM8885X=1 +phy_tx_polarity_flip_phy127.BCM8885X=0 + +phy_tx_polarity_flip_phy128.BCM8885X=1 +phy_tx_polarity_flip_phy129.BCM8885X=1 +phy_tx_polarity_flip_phy130.BCM8885X=0 +phy_tx_polarity_flip_phy131.BCM8885X=0 +phy_tx_polarity_flip_phy132.BCM8885X=0 +phy_tx_polarity_flip_phy133.BCM8885X=1 +phy_tx_polarity_flip_phy134.BCM8885X=0 +phy_tx_polarity_flip_phy135.BCM8885X=0 + +phy_tx_polarity_flip_phy136.BCM8885X=0 +phy_tx_polarity_flip_phy137.BCM8885X=0 +phy_tx_polarity_flip_phy138.BCM8885X=0 +phy_tx_polarity_flip_phy139.BCM8885X=0 +phy_tx_polarity_flip_phy140.BCM8885X=0 +phy_tx_polarity_flip_phy141.BCM8885X=0 +phy_tx_polarity_flip_phy142.BCM8885X=0 +phy_tx_polarity_flip_phy143.BCM8885X=0 + + +polled_irq_delay.BCM8885X=5 +polled_irq_mode.BCM8885X=0 +port_fec_fabric.BCM8885X=7 +bcm_stat_interval.BCM8885X=1000000 + + +port_init_cl72_256=0 +port_init_cl72_257=0 +port_init_cl72_258=0 +port_init_cl72_259=0 +port_init_cl72_260=0 +port_init_cl72_261=0 +port_init_cl72_262=0 +port_init_cl72_263=0 +port_init_cl72_264=0 +port_init_cl72_265=0 +port_init_cl72_266=0 +port_init_cl72_267=0 +port_init_cl72_268=0 +port_init_cl72_269=0 +port_init_cl72_270=0 +port_init_cl72_271=0 +port_init_cl72_272=0 +port_init_cl72_273=0 +port_init_cl72_274=0 +port_init_cl72_275=0 +port_init_cl72_276=0 +port_init_cl72_277=0 +port_init_cl72_278=0 +port_init_cl72_279=0 +port_init_cl72_280=0 +port_init_cl72_281=0 +port_init_cl72_282=0 +port_init_cl72_283=0 +port_init_cl72_284=0 +port_init_cl72_285=0 +port_init_cl72_286=0 +port_init_cl72_287=0 +port_init_cl72_288=0 +port_init_cl72_289=0 +port_init_cl72_290=0 +port_init_cl72_291=0 +port_init_cl72_292=0 +port_init_cl72_293=0 +port_init_cl72_294=0 +port_init_cl72_295=0 +port_init_cl72_296=0 +port_init_cl72_297=0 +port_init_cl72_298=0 +port_init_cl72_299=0 +port_init_cl72_300=0 +port_init_cl72_301=0 +port_init_cl72_302=0 +port_init_cl72_303=0 +port_init_cl72_304=0 +port_init_cl72_305=0 +port_init_cl72_306=0 +port_init_cl72_307=0 +port_init_cl72_308=0 +port_init_cl72_309=0 +port_init_cl72_310=0 +port_init_cl72_311=0 +port_init_cl72_312=0 +port_init_cl72_313=0 +port_init_cl72_314=0 +port_init_cl72_315=0 +port_init_cl72_316=0 +port_init_cl72_317=0 +port_init_cl72_318=0 +port_init_cl72_319=0 +port_init_cl72_320=0 +port_init_cl72_321=0 +port_init_cl72_322=0 +port_init_cl72_323=0 +port_init_cl72_324=0 +port_init_cl72_325=0 +port_init_cl72_326=0 +port_init_cl72_327=0 +port_init_cl72_328=0 +port_init_cl72_329=0 +port_init_cl72_330=0 +port_init_cl72_331=0 +port_init_cl72_332=0 +port_init_cl72_333=0 +port_init_cl72_334=0 +port_init_cl72_335=0 +port_init_cl72_336=0 +port_init_cl72_337=0 +port_init_cl72_338=0 +port_init_cl72_339=0 +port_init_cl72_340=0 +port_init_cl72_341=0 +port_init_cl72_342=0 +port_init_cl72_343=0 +port_init_cl72_344=0 +port_init_cl72_345=0 +port_init_cl72_346=0 +port_init_cl72_347=0 +port_init_cl72_348=0 +port_init_cl72_349=0 +port_init_cl72_350=0 +port_init_cl72_351=0 +port_init_cl72_352=0 +port_init_cl72_353=0 +port_init_cl72_354=0 +port_init_cl72_355=0 +port_init_cl72_356=0 +port_init_cl72_357=0 +port_init_cl72_358=0 +port_init_cl72_359=0 +port_init_cl72_360=0 +port_init_cl72_361=0 +port_init_cl72_362=0 +port_init_cl72_363=0 +port_init_cl72_364=0 +port_init_cl72_365=0 +port_init_cl72_366=0 +port_init_cl72_367=0 +port_init_cl72_368=0 +port_init_cl72_369=0 +port_init_cl72_370=0 +port_init_cl72_371=0 +port_init_cl72_372=0 +port_init_cl72_373=0 +port_init_cl72_374=0 +port_init_cl72_375=0 +port_init_cl72_376=0 +port_init_cl72_377=0 +port_init_cl72_378=0 +port_init_cl72_379=0 +port_init_cl72_380=0 +port_init_cl72_381=0 +port_init_cl72_382=0 +port_init_cl72_383=0 +port_init_cl72_384=0 +port_init_cl72_385=0 +port_init_cl72_386=0 +port_init_cl72_387=0 +port_init_cl72_388=0 +port_init_cl72_389=0 +port_init_cl72_390=0 +port_init_cl72_391=0 +port_init_cl72_392=0 +port_init_cl72_393=0 +port_init_cl72_394=0 +port_init_cl72_395=0 +port_init_cl72_396=0 +port_init_cl72_397=0 +port_init_cl72_398=0 +port_init_cl72_399=0 +port_init_cl72_400=0 +port_init_cl72_401=0 +port_init_cl72_402=0 +port_init_cl72_403=0 +port_init_cl72_404=0 +port_init_cl72_405=0 +port_init_cl72_406=0 +port_init_cl72_407=0 +port_init_cl72_408=0 +port_init_cl72_409=0 +port_init_cl72_410=0 +port_init_cl72_411=0 +port_init_cl72_412=0 +port_init_cl72_413=0 +port_init_cl72_414=0 +port_init_cl72_415=0 +port_init_cl72_416=0 +port_init_cl72_417=0 +port_init_cl72_418=0 +port_init_cl72_419=0 +port_init_cl72_420=0 +port_init_cl72_421=0 +port_init_cl72_422=0 +port_init_cl72_423=0 +port_init_cl72_424=0 +port_init_cl72_425=0 +port_init_cl72_426=0 +port_init_cl72_427=0 +port_init_cl72_428=0 +port_init_cl72_429=0 +port_init_cl72_430=0 +port_init_cl72_431=0 +port_init_cl72_432=0 +port_init_cl72_433=0 +port_init_cl72_434=0 +port_init_cl72_435=0 +port_init_cl72_436=0 +port_init_cl72_437=0 +port_init_cl72_438=0 +port_init_cl72_439=0 +port_init_cl72_440=0 +port_init_cl72_441=0 +port_init_cl72_442=0 +port_init_cl72_443=0 +port_init_cl72_444=0 +port_init_cl72_445=0 +port_init_cl72_446=0 +port_init_cl72_447=0 + + +port_init_speed_cc.BCM8885X=200000 +port_init_speed_cd.BCM8885X=400000 +port_init_speed_ce.BCM8885X=100000 +port_init_speed_fabric.BCM8885X=53125 +port_init_speed_il.BCM8885X=10312 +port_init_speed_le.BCM8885X=50000 +port_init_speed_xe.BCM8885X=10000 +port_init_speed_xl.BCM8885X=40000 +port_priorities.BCM8885X=8 +protocol_traps_mode.BCM8885X=IN_LIF +rate_ext_mdio_divisor=16 +schan_intr_enable.BCM8885X=0 +schan_timeout_usec.BCM8885X=900000 +serdes_fabric_clk_freq_in.BCM8885X=1 +serdes_fabric_clk_freq_out.BCM8885X=bypass +serdes_nif_clk_freq_in0.BCM8885X=1 +serdes_nif_clk_freq_in1.BCM8885X=1 +serdes_nif_clk_freq_out0.BCM8885X=bypass +serdes_nif_clk_freq_out1.BCM8885X=bypass +soc_family.BCM8885X=BCM8885X +stable_filename.BCM8885X=/tmp/warmboot_data +stable_location.BCM8885X=3 +stable_size.BCM8885X=800000000 +sw_state_max_size.BCM8885X=750000000 +system_headers_mode=1 +tdma_intr_enable.BCM8885X=0 +tdma_timeout_usec.BCM8885X=1000000 +tm_port_header_type_in_0.BCM8885X=INJECTED_2 +tm_port_header_type_in_200.BCM8885X=INJECTED_2_PP +tm_port_header_type_in_201.BCM8885X=INJECTED_2_PP +tm_port_header_type_in_202.BCM8885X=INJECTED_2_PP +tm_port_header_type_in_203.BCM8885X=INJECTED_2_PP +tm_port_header_type_in_232.BCM8885X=INJECTED_2 +tm_port_header_type_in_19.BCM8885X=ETH +tm_port_header_type_in_20.BCM8885X=INJECTED_2 +tm_port_header_type_out_0.BCM8885X=CPU +tm_port_header_type_out_200.BCM8885X=ETH +tm_port_header_type_out_201.BCM8885X=ETH +tm_port_header_type_out_202.BCM8885X=ETH +tm_port_header_type_out_203.BCM8885X=ETH +tm_port_header_type_out_232.BCM8885X=CPU +tm_port_header_type_out_19.BCM8885X=ETH +tm_port_header_type_out_20.BCM8885X=RAW +tslam_intr_enable.BCM8885X=0 +tslam_timeout_usec.BCM8885X=1000000 +ucode_port_0.BCM8885X=CPU.0:core_0.0 +ucode_port_200.BCM8885X=CPU.8:core_1.200 +ucode_port_201.BCM8885X=CPU.16:core_1.201 +ucode_port_202.BCM8885X=CPU.24:core_1.202 +ucode_port_203.BCM8885X=CPU.32:core_1.203 + + +ucode_port_1.BCM8885X=CGE18:core_1.1 +ucode_port_2.BCM8885X=CGE20:core_1.2 +ucode_port_3.BCM8885X=CGE22:core_1.3 +ucode_port_4.BCM8885X=CGE24:core_1.4 +ucode_port_5.BCM8885X=CGE26:core_1.5 +ucode_port_6.BCM8885X=CGE28:core_1.6 +ucode_port_7.BCM8885X=CGE30:core_1.7 +ucode_port_8.BCM8885X=CGE32:core_1.8 +ucode_port_9.BCM8885X=CGE34:core_1.9 +ucode_port_10.BCM8885X=CGE16:core_0.10 +ucode_port_11.BCM8885X=CGE14:core_0.11 +ucode_port_12.BCM8885X=CGE12:core_0.12 +ucode_port_13.BCM8885X=CGE10:core_0.13 +ucode_port_14.BCM8885X=CGE8:core_0.14 +ucode_port_15.BCM8885X=CGE6:core_0.15 +ucode_port_16.BCM8885X=CGE4:core_0.16 +ucode_port_17.BCM8885X=CGE2:core_0.17 +ucode_port_18.BCM8885X=CGE0:core_0.18 + + +ucode_port_19.BCM8885X=RCY0:core_0.19 +ucode_port_20.BCM8885X=RCY1:core_1.20 +ucode_port_21.BCM8885X=OLP:core_1.21 + + +port_init_speed_1.BCM8885X=100000 +port_init_speed_2.BCM8885X=100000 +port_init_speed_3.BCM8885X=100000 +port_init_speed_4.BCM8885X=100000 +port_init_speed_5.BCM8885X=100000 +port_init_speed_6.BCM8885X=100000 +port_init_speed_7.BCM8885X=100000 +port_init_speed_8.BCM8885X=100000 +port_init_speed_9.BCM8885X=100000 +port_init_speed_10.BCM8885X=100000 +port_init_speed_11.BCM8885X=100000 +port_init_speed_12.BCM8885X=100000 +port_init_speed_13.BCM8885X=100000 +port_init_speed_14.BCM8885X=100000 +port_init_speed_15.BCM8885X=100000 +port_init_speed_16.BCM8885X=100000 +port_init_speed_17.BCM8885X=100000 +port_init_speed_18.BCM8885X=100000 + + +port_fec_1.BCM8885X=0 +port_fec_2.BCM8885X=0 +port_fec_3.BCM8885X=0 +port_fec_4.BCM8885X=0 +port_fec_5.BCM8885x=0 +port_fec_6.BCM8885x=0 +port_fec_7.BCM8885x=0 +port_fec_8.BCM8885x=0 +port_fec_9.BCM8885x=0 +port_fec_10.BCM8885x=0 +port_fec_11.BCM8885x=0 +port_fec_12.BCM8885x=0 +port_fec_13.BCM8885x=0 +port_fec_14.BCM8885x=0 +port_fec_15.BCM8885x=0 +port_fec_16.BCM8885x=0 +port_fec_17.BCM8885x=0 +port_fec_18.BCM8885x=0 + +port_init_cl72_1=0 +port_init_cl72_2=0 +port_init_cl72_3=0 +port_init_cl72_4=0 +port_init_cl72_5=0 +port_init_cl72_6=0 +port_init_cl72_7=0 +port_init_cl72_8=0 +port_init_cl72_9=0 +port_init_cl72_10=0 +port_init_cl72_11=0 +port_init_cl72_12=0 +port_init_cl72_13=0 +port_init_cl72_14=0 +port_init_cl72_15=0 +port_init_cl72_16=0 +port_init_cl72_17=0 +port_init_cl72_18=0 + +serdes_lane_config_dfe_1.BCM8885X=lp +serdes_lane_config_dfe_2.BCM8885X=lp +serdes_lane_config_dfe_3.BCM8885X=lp +serdes_lane_config_dfe_4.BCM8885X=lp +serdes_lane_config_dfe_5.BCM8885X=lp +serdes_lane_config_dfe_6.BCM8885X=lp +serdes_lane_config_dfe_7.BCM8885X=lp +serdes_lane_config_dfe_8.BCM8885X=lp +serdes_lane_config_dfe_9.BCM8885X=lp +serdes_lane_config_dfe_10.BCM8885X=lp +serdes_lane_config_dfe_11.BCM8885X=lp +serdes_lane_config_dfe_12.BCM8885X=lp +serdes_lane_config_dfe_13.BCM8885X=lp +serdes_lane_config_dfe_14.BCM8885X=lp +serdes_lane_config_dfe_15.BCM8885X=lp +serdes_lane_config_dfe_16.BCM8885X=lp +serdes_lane_config_dfe_17.BCM8885X=lp +serdes_lane_config_dfe_18.BCM8885X=lp + + +serdes_lane_config_media_type_1.BCM8885X=backplane +serdes_lane_config_media_type_2.BCM8885X=backplane +serdes_lane_config_media_type_3.BCM8885X=backplane +serdes_lane_config_media_type_4.BCM8885X=backplane +serdes_lane_config_media_type_5.BCM8885X=backplane +serdes_lane_config_media_type_6.BCM8885X=backplane +serdes_lane_config_media_type_7.BCM8885X=backplane +serdes_lane_config_media_type_8.BCM8885X=backplane +serdes_lane_config_media_type_9.BCM8885X=backplane +serdes_lane_config_media_type_10.BCM8885X=backplane +serdes_lane_config_media_type_11.BCM8885X=backplane +serdes_lane_config_media_type_12.BCM8885X=backplane +serdes_lane_config_media_type_13.BCM8885X=backplane +serdes_lane_config_media_type_14.BCM8885X=backplane +serdes_lane_config_media_type_15.BCM8885X=backplane +serdes_lane_config_media_type_16.BCM8885X=backplane +serdes_lane_config_media_type_17.BCM8885X=backplane +serdes_lane_config_media_type_18.BCM8885X=backplane + + +serdes_tx_taps_1.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_2.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_3.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_4.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_5.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_6.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_7.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_8.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_9.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_10.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_11.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_12.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_13.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_14.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_15.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_16.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_17.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_18.BCM8885X=nrz:-6:87:-4 + + +serdes_tx_taps_256.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_257.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_258.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_259.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_260.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_261.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_262.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_263.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_264.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_265.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_266.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_267.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_268.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_269.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_270.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_271.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_272.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_273.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_274.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_275.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_276.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_277.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_278.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_279.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_280.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_281.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_282.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_283.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_284.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_285.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_286.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_287.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_288.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_289.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_290.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_291.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_292.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_293.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_294.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_295.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_296.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_297.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_298.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_299.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_300.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_301.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_302.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_303.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_304.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_305.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_306.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_307.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_308.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_309.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_310.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_311.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_312.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_313.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_314.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_315.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_316.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_317.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_318.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_319.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_320.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_321.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_322.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_323.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_324.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_325.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_326.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_327.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_328.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_329.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_330.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_331.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_332.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_333.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_334.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_335.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_336.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_337.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_338.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_339.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_340.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_341.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_342.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_343.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_344.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_345.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_346.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_347.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_348.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_349.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_350.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_351.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_352.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_353.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_354.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_355.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_356.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_357.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_358.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_359.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_360.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_361.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_362.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_363.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_364.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_365.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_366.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_367.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_368.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_369.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_370.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_371.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_372.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_373.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_374.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_375.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_376.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_377.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_378.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_379.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_380.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_381.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_382.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_383.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_384.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_385.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_386.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_387.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_388.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_389.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_390.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_391.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_392.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_393.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_394.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_395.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_396.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_397.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_398.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_399.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_400.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_401.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_402.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_403.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_404.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_405.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_406.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_407.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_408.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_409.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_410.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_411.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_412.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_413.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_414.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_415.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_416.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_417.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_418.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_419.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_420.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_421.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_422.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_423.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_424.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_425.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_426.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_427.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_428.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_429.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_430.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_431.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_432.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_433.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_434.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_435.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_436.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_437.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_438.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_439.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_440.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_441.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_442.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_443.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_444.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_445.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_446.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_447.BCM8885X=pam4:-20:148:0:0:0:0 + + +serdes_lane_config_channel_mode_256=force_nr +serdes_lane_config_channel_mode_257=force_nr +serdes_lane_config_channel_mode_258=force_nr +serdes_lane_config_channel_mode_259=force_nr +serdes_lane_config_channel_mode_260=force_nr +serdes_lane_config_channel_mode_261=force_nr +serdes_lane_config_channel_mode_262=force_nr +serdes_lane_config_channel_mode_263=force_nr +serdes_lane_config_channel_mode_264=force_nr +serdes_lane_config_channel_mode_265=force_nr +serdes_lane_config_channel_mode_266=force_nr +serdes_lane_config_channel_mode_267=force_nr +serdes_lane_config_channel_mode_268=force_nr +serdes_lane_config_channel_mode_269=force_nr +serdes_lane_config_channel_mode_270=force_nr +serdes_lane_config_channel_mode_271=force_nr +serdes_lane_config_channel_mode_272=force_nr +serdes_lane_config_channel_mode_273=force_nr +serdes_lane_config_channel_mode_274=force_nr +serdes_lane_config_channel_mode_275=force_nr +serdes_lane_config_channel_mode_276=force_nr +serdes_lane_config_channel_mode_277=force_nr +serdes_lane_config_channel_mode_278=force_nr +serdes_lane_config_channel_mode_279=force_nr +serdes_lane_config_channel_mode_280=force_nr +serdes_lane_config_channel_mode_281=force_nr +serdes_lane_config_channel_mode_282=force_nr +serdes_lane_config_channel_mode_283=force_nr +serdes_lane_config_channel_mode_284=force_nr +serdes_lane_config_channel_mode_285=force_nr +serdes_lane_config_channel_mode_286=force_nr +serdes_lane_config_channel_mode_287=force_nr +serdes_lane_config_channel_mode_288=force_nr +serdes_lane_config_channel_mode_289=force_nr +serdes_lane_config_channel_mode_290=force_nr +serdes_lane_config_channel_mode_291=force_nr +serdes_lane_config_channel_mode_292=force_nr +serdes_lane_config_channel_mode_293=force_nr +serdes_lane_config_channel_mode_294=force_nr +serdes_lane_config_channel_mode_295=force_nr +serdes_lane_config_channel_mode_296=force_nr +serdes_lane_config_channel_mode_297=force_nr +serdes_lane_config_channel_mode_298=force_nr +serdes_lane_config_channel_mode_299=force_nr +serdes_lane_config_channel_mode_300=force_nr +serdes_lane_config_channel_mode_301=force_nr +serdes_lane_config_channel_mode_302=force_nr +serdes_lane_config_channel_mode_303=force_nr +serdes_lane_config_channel_mode_304=force_nr +serdes_lane_config_channel_mode_305=force_nr +serdes_lane_config_channel_mode_306=force_nr +serdes_lane_config_channel_mode_307=force_nr +serdes_lane_config_channel_mode_308=force_nr +serdes_lane_config_channel_mode_309=force_nr +serdes_lane_config_channel_mode_310=force_nr +serdes_lane_config_channel_mode_311=force_nr +serdes_lane_config_channel_mode_312=force_nr +serdes_lane_config_channel_mode_313=force_nr +serdes_lane_config_channel_mode_314=force_nr +serdes_lane_config_channel_mode_315=force_nr +serdes_lane_config_channel_mode_316=force_nr +serdes_lane_config_channel_mode_317=force_nr +serdes_lane_config_channel_mode_318=force_nr +serdes_lane_config_channel_mode_319=force_nr +serdes_lane_config_channel_mode_320=force_nr +serdes_lane_config_channel_mode_321=force_nr +serdes_lane_config_channel_mode_322=force_nr +serdes_lane_config_channel_mode_323=force_nr +serdes_lane_config_channel_mode_324=force_nr +serdes_lane_config_channel_mode_325=force_nr +serdes_lane_config_channel_mode_326=force_nr +serdes_lane_config_channel_mode_327=force_nr +serdes_lane_config_channel_mode_328=force_nr +serdes_lane_config_channel_mode_329=force_nr +serdes_lane_config_channel_mode_330=force_nr +serdes_lane_config_channel_mode_331=force_nr +serdes_lane_config_channel_mode_332=force_nr +serdes_lane_config_channel_mode_333=force_nr +serdes_lane_config_channel_mode_334=force_nr +serdes_lane_config_channel_mode_335=force_nr +serdes_lane_config_channel_mode_336=force_nr +serdes_lane_config_channel_mode_337=force_nr +serdes_lane_config_channel_mode_338=force_nr +serdes_lane_config_channel_mode_339=force_nr +serdes_lane_config_channel_mode_340=force_nr +serdes_lane_config_channel_mode_341=force_nr +serdes_lane_config_channel_mode_342=force_nr +serdes_lane_config_channel_mode_343=force_nr +serdes_lane_config_channel_mode_344=force_nr +serdes_lane_config_channel_mode_345=force_nr +serdes_lane_config_channel_mode_346=force_nr +serdes_lane_config_channel_mode_347=force_nr +serdes_lane_config_channel_mode_348=force_nr +serdes_lane_config_channel_mode_349=force_nr +serdes_lane_config_channel_mode_350=force_nr +serdes_lane_config_channel_mode_351=force_nr +serdes_lane_config_channel_mode_352=force_nr +serdes_lane_config_channel_mode_353=force_nr +serdes_lane_config_channel_mode_354=force_nr +serdes_lane_config_channel_mode_355=force_nr +serdes_lane_config_channel_mode_356=force_nr +serdes_lane_config_channel_mode_357=force_nr +serdes_lane_config_channel_mode_358=force_nr +serdes_lane_config_channel_mode_359=force_nr +serdes_lane_config_channel_mode_360=force_nr +serdes_lane_config_channel_mode_361=force_nr +serdes_lane_config_channel_mode_362=force_nr +serdes_lane_config_channel_mode_363=force_nr +serdes_lane_config_channel_mode_364=force_nr +serdes_lane_config_channel_mode_365=force_nr +serdes_lane_config_channel_mode_366=force_nr +serdes_lane_config_channel_mode_367=force_nr +serdes_lane_config_channel_mode_368=force_nr +serdes_lane_config_channel_mode_369=force_nr +serdes_lane_config_channel_mode_370=force_nr +serdes_lane_config_channel_mode_371=force_nr +serdes_lane_config_channel_mode_372=force_nr +serdes_lane_config_channel_mode_373=force_nr +serdes_lane_config_channel_mode_374=force_nr +serdes_lane_config_channel_mode_375=force_nr +serdes_lane_config_channel_mode_376=force_nr +serdes_lane_config_channel_mode_377=force_nr +serdes_lane_config_channel_mode_378=force_nr +serdes_lane_config_channel_mode_379=force_nr +serdes_lane_config_channel_mode_380=force_nr +serdes_lane_config_channel_mode_381=force_nr +serdes_lane_config_channel_mode_382=force_nr +serdes_lane_config_channel_mode_383=force_nr +serdes_lane_config_channel_mode_384=force_nr +serdes_lane_config_channel_mode_385=force_nr +serdes_lane_config_channel_mode_386=force_nr +serdes_lane_config_channel_mode_387=force_nr +serdes_lane_config_channel_mode_388=force_nr +serdes_lane_config_channel_mode_389=force_nr +serdes_lane_config_channel_mode_390=force_nr +serdes_lane_config_channel_mode_391=force_nr +serdes_lane_config_channel_mode_392=force_nr +serdes_lane_config_channel_mode_393=force_nr +serdes_lane_config_channel_mode_394=force_nr +serdes_lane_config_channel_mode_395=force_nr +serdes_lane_config_channel_mode_396=force_nr +serdes_lane_config_channel_mode_397=force_nr +serdes_lane_config_channel_mode_398=force_nr +serdes_lane_config_channel_mode_399=force_nr +serdes_lane_config_channel_mode_400=force_nr +serdes_lane_config_channel_mode_401=force_nr +serdes_lane_config_channel_mode_402=force_nr +serdes_lane_config_channel_mode_403=force_nr +serdes_lane_config_channel_mode_404=force_nr +serdes_lane_config_channel_mode_405=force_nr +serdes_lane_config_channel_mode_406=force_nr +serdes_lane_config_channel_mode_407=force_nr +serdes_lane_config_channel_mode_408=force_nr +serdes_lane_config_channel_mode_409=force_nr +serdes_lane_config_channel_mode_410=force_nr +serdes_lane_config_channel_mode_411=force_nr +serdes_lane_config_channel_mode_412=force_nr +serdes_lane_config_channel_mode_413=force_nr +serdes_lane_config_channel_mode_414=force_nr +serdes_lane_config_channel_mode_415=force_nr +serdes_lane_config_channel_mode_416=force_nr +serdes_lane_config_channel_mode_417=force_nr +serdes_lane_config_channel_mode_418=force_nr +serdes_lane_config_channel_mode_419=force_nr +serdes_lane_config_channel_mode_420=force_nr +serdes_lane_config_channel_mode_421=force_nr +serdes_lane_config_channel_mode_422=force_nr +serdes_lane_config_channel_mode_423=force_nr +serdes_lane_config_channel_mode_424=force_nr +serdes_lane_config_channel_mode_425=force_nr +serdes_lane_config_channel_mode_426=force_nr +serdes_lane_config_channel_mode_427=force_nr +serdes_lane_config_channel_mode_428=force_nr +serdes_lane_config_channel_mode_429=force_nr +serdes_lane_config_channel_mode_430=force_nr +serdes_lane_config_channel_mode_431=force_nr +serdes_lane_config_channel_mode_432=force_nr +serdes_lane_config_channel_mode_433=force_nr +serdes_lane_config_channel_mode_434=force_nr +serdes_lane_config_channel_mode_435=force_nr +serdes_lane_config_channel_mode_436=force_nr +serdes_lane_config_channel_mode_437=force_nr +serdes_lane_config_channel_mode_438=force_nr +serdes_lane_config_channel_mode_439=force_nr +serdes_lane_config_channel_mode_440=force_nr +serdes_lane_config_channel_mode_441=force_nr +serdes_lane_config_channel_mode_442=force_nr +serdes_lane_config_channel_mode_443=force_nr +serdes_lane_config_channel_mode_444=force_nr +serdes_lane_config_channel_mode_445=force_nr +serdes_lane_config_channel_mode_446=force_nr +serdes_lane_config_channel_mode_447=force_nr + + +rif_id_max=24576 +dpp_db_path=/usr/share/bcm/db +sai_recycle_port_lane_base=96 +appl_param_nof_ports_per_modid=64 +udh_exists=1 +modreg IPS_FORCE_LOCAL_OR_FABRIC FORCE_FABRIC=1 +xflow_macsec_secure_chan_to_num_secure_assoc_encrypt=2 +xflow_macsec_secure_chan_to_num_secure_assoc_decrypt=4 +cmic_dma_abort_in_cold_boot=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/pg_profile_lookup.ini b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/pg_profile_lookup.ini new file mode 100644 index 000000000000..7eb58931c209 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/pg_profile_lookup.ini @@ -0,0 +1,12 @@ +# PG lossless profiles. +# speed cable size xon xoff threshold xon_offset + 100000 300m 1280 2560 110592 0 1280 + 400000 300m 1280 2560 315392 0 1280 + 100000 1000m 1280 2560 225280 0 1280 + 400000 1000m 1280 2560 778240 0 1280 + 100000 2000m 1280 2560 393216 0 1280 + 400000 2000m 1280 2560 1445888 0 1280 + 100000 80000m 1280 2560 1388544 0 1280 + 400000 80000m 1280 2560 5435392 0 1280 + 100000 120000m 1280 2560 2056192 0 1280 + 400000 120000m 1280 2560 8093696 0 1280 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/port_config.ini b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/port_config.ini new file mode 100644 index 000000000000..96710e7e0fb5 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/port_config.ini @@ -0,0 +1,21 @@ +# name lanes alias index asic_port_name role speed coreid coreportid numvoq +Ethernet0 72,73,74,75 Ethernet0 1 Eth0-ASIC0 Ext 100000 1 1 8 +Ethernet1 80,81,82,83 Ethernet1 2 Eth1-ASIC0 Ext 100000 1 2 8 +Ethernet2 88,89,90,91 Ethernet2 3 Eth2-ASIC0 Ext 100000 1 3 8 +Ethernet3 96,97,98,99 Ethernet3 4 Eth3-ASIC0 Ext 100000 1 4 8 +Ethernet4 104,105,106,107 Ethernet4 5 Eth4-ASIC0 Ext 100000 1 5 8 +Ethernet5 112,113,114,115 Ethernet5 6 Eth5-ASIC0 Ext 100000 1 6 8 +Ethernet6 120,121,122,123 Ethernet6 7 Eth6-ASIC0 Ext 100000 1 7 8 +Ethernet7 128,129,130,131 Ethernet7 8 Eth7-ASIC0 Ext 100000 1 8 8 +Ethernet8 136,137,138,139 Ethernet8 9 Eth8-ASIC0 Ext 100000 1 9 8 +Ethernet9 64,65,66,67 Ethernet9 10 Eth9-ASIC0 Ext 100000 0 10 8 +Ethernet10 56,57,58,59 Ethernet10 11 Eth10-ASIC0 Ext 100000 0 11 8 +Ethernet11 48,49,50,51 Ethernet11 12 Eth11-ASIC0 Ext 100000 0 12 8 +Ethernet12 40,41,42,43 Ethernet12 13 Eth12-ASIC0 Ext 100000 0 13 8 +Ethernet13 32,33,34,35 Ethernet13 14 Eth13-ASIC0 Ext 100000 0 14 8 +Ethernet14 24,25,26,27 Ethernet14 15 Eth14-ASIC0 Ext 100000 0 15 8 +Ethernet15 16,17,18,19 Ethernet15 16 Eth15-ASIC0 Ext 100000 0 16 8 +Ethernet16 8,9,10,11 Ethernet16 17 Eth16-ASIC0 Ext 100000 0 17 8 +Ethernet17 0,1,2,3 Ethernet17 18 Eth17-ASIC0 Ext 100000 0 18 8 +Ethernet-IB0 115 Ethernet-IB0 37 Rcy1-ASIC0 Inb 10000 0 19 8 +Ethernet-Rec0 116 Ethernet-Rec0 39 Rcy2-ASIC0 Rec 10000 1 20 8 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/qos.json.j2 b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/qos.json.j2 new file mode 100644 index 000000000000..3e548325ea30 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/qos.json.j2 @@ -0,0 +1 @@ +{%- include 'qos_config.j2' %} diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/sai.profile b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/sai.profile new file mode 100644 index 000000000000..cebcc2d6ee48 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/sai.profile @@ -0,0 +1 @@ +SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/jr2cp-nokia-18x100g-4x25g-config.bcm diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/sai_postinit_cmd.soc b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/sai_postinit_cmd.soc new file mode 100644 index 000000000000..26466f89ae44 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/sai_postinit_cmd.soc @@ -0,0 +1,36 @@ +phy set 3 reg=0xd134 data=-8 lane=0 +phy set 3 reg=0xd135 data=132 lane=0 +phy set 3 reg=0xd136 data=-8 lane=0 +phy set 3 reg=0xd137 data=0 lane=0 +phy set 3 reg=0xd138 data=0 lane=0 +phy set 3 reg=0xd133 data=0x1802 lane=0 + +phy set 3 reg=0xd134 data=-8 lane=1 +phy set 3 reg=0xd135 data=132 lane=1 +phy set 3 reg=0xd136 data=-12 lane=1 +phy set 3 reg=0xd137 data=0 lane=1 +phy set 3 reg=0xd138 data=0 lane=1 +phy set 3 reg=0xd133 data=0x1800 lane=1 + +phy set 3 reg=0xd134 data=-8 lane=7 +phy set 3 reg=0xd135 data=132 lane=7 +phy set 3 reg=0xd136 data=-8 lane=7 +phy set 3 reg=0xd137 data=0 lane=7 +phy set 3 reg=0xd138 data=0 lane=7 +phy set 3 reg=0xd133 data=0x1804 lane=7 + + +phy set 6 reg=0xd134 data=-8 lane=1 +phy set 6 reg=0xd135 data=132 lane=1 +phy set 6 reg=0xd136 data=-8 lane=1 +phy set 6 reg=0xd137 data=0 lane=1 +phy set 6 reg=0xd138 data=0 lane=1 +phy set 6 reg=0xd133 data=0x1802 lane=1 + + +phy set 8 reg=0xd134 data=-8 lane=1 +phy set 8 reg=0xd135 data=132 lane=1 +phy set 8 reg=0xd136 data=-8 lane=1 +phy set 8 reg=0xd137 data=0 lane=1 +phy set 8 reg=0xd138 data=0 lane=1 +phy set 8 reg=0xd133 data=0x1802 lane=1 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/buffers.json.j2 b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/buffers.json.j2 new file mode 100644 index 000000000000..f34a844f4a87 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/buffers.json.j2 @@ -0,0 +1,2 @@ +{%- set default_topo = 't2' %} +{%- include 'buffers_config.j2' %} diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/buffers_defaults_t2.j2 b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/buffers_defaults_t2.j2 new file mode 100644 index 000000000000..9aa3e46bcae6 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/buffers_defaults_t2.j2 @@ -0,0 +1,37 @@ +{%- set default_cable = '300m' %} + +{%- macro generate_port_lists(PORT_ALL) %} + {# Generate list of ports #} + {%- for port_idx in range(0,36) %} + {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %} + {%- endfor %} +{%- endmacro %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "6441610000", + "type": "both", + "mode": "dynamic", + "xoff": "24979046" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"1280", + "xon_offset": "2560", + "dynamic_th":"0" + }, + "egress_lossless_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "static_th":"33030144" + }, + "egress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"-1" + } + }, +{%- endmacro %} diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/context_config.json b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/context_config.json new file mode 100644 index 000000000000..5caa2e8eef88 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/context_config.json @@ -0,0 +1,21 @@ +{ + "CONTEXTS": [ + { + "guid" : 0, + "name" : "syncd1", + "dbAsic" : "ASIC_DB", + "dbCounters" : "COUNTERS_DB", + "dbFlex": "FLEX_COUNTER_DB", + "dbState" : "STATE_DB", + "zmq_enable": false, + "zmq_endpoint": "tcp://127.0.0.1:5555", + "zmq_ntf_endpoint": "tcp://127.0.0.1:5556", + "switches": [ + { + "index" : 1, + "hwinfo" : "07:00.0" + } + ] + } + ] +} diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/jr2cp-nokia-18x100g-4x25g-config.bcm b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/jr2cp-nokia-18x100g-4x25g-config.bcm new file mode 100644 index 000000000000..33af71fd8abf --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/jr2cp-nokia-18x100g-4x25g-config.bcm @@ -0,0 +1,2057 @@ +appl_enable_intr_init.BCM8885X=1 +appl_enable_learn_and_limit_init.BCM8885X=0 +appl_enable_oam.BCM8885X=0 +appl_enable_oam_fwd_idx_wa_init.BCM8885X=0 +appl_enable_oam_stat_wa_init.BCM8885X=0 +dma_desc_aggregator_buff_size_kb.BCM8885X=100 +dma_desc_aggregator_chain_length_max.BCM8885X=1000 +dma_desc_aggregator_enable_specific_MDB_LPM.BCM8885X=1 +dma_desc_aggregator_timeout_usec.BCM8885X=1000 +dport_map_direct.BCM8885X=1 + +dtm_flow_mapping_mode_region_64.BCM8885X=3 +dtm_flow_mapping_mode_region_65.BCM8885X=3 +dtm_flow_mapping_mode_region_66.BCM8885X=3 +dtm_flow_mapping_mode_region_67.BCM8885X=3 +dtm_flow_mapping_mode_region_68.BCM8885X=3 +dtm_flow_mapping_mode_region_69.BCM8885X=3 +dtm_flow_mapping_mode_region_70.BCM8885X=3 +dtm_flow_mapping_mode_region_71.BCM8885X=3 +dtm_flow_mapping_mode_region_72.BCM8885X=3 +dtm_flow_mapping_mode_region_73.BCM8885X=3 +dtm_flow_mapping_mode_region_74.BCM8885X=3 +dtm_flow_mapping_mode_region_75.BCM8885X=3 +dtm_flow_mapping_mode_region_76.BCM8885X=3 +dtm_flow_mapping_mode_region_77.BCM8885X=3 +dtm_flow_mapping_mode_region_78.BCM8885X=3 +dtm_flow_mapping_mode_region_79.BCM8885X=7 +dtm_flow_mapping_mode_region_80.BCM8885X=3 +dtm_flow_mapping_mode_region_81.BCM8885X=1 +dtm_flow_mapping_mode_region_82.BCM8885X=3 +dtm_flow_mapping_mode_region_83.BCM8885X=3 +dtm_flow_mapping_mode_region_84.BCM8885X=3 +dtm_flow_mapping_mode_region_85.BCM8885X=3 +dtm_flow_mapping_mode_region_86.BCM8885X=3 +dtm_flow_mapping_mode_region_87.BCM8885X=3 +dtm_flow_mapping_mode_region_88.BCM8885X=3 +dtm_flow_mapping_mode_region_89.BCM8885X=3 +dtm_flow_mapping_mode_region_90.BCM8885X=3 +dtm_flow_mapping_mode_region_91.BCM8885X=3 +dtm_flow_mapping_mode_region_92.BCM8885X=3 +dtm_flow_mapping_mode_region_93.BCM8885X=3 +dtm_flow_mapping_mode_region_94.BCM8885X=3 +dtm_flow_nof_remote_cores_region_1.BCM8885X=2 +dtm_flow_nof_remote_cores_region_10.BCM8885X=2 +dtm_flow_nof_remote_cores_region_11.BCM8885X=2 +dtm_flow_nof_remote_cores_region_12.BCM8885X=2 +dtm_flow_nof_remote_cores_region_13.BCM8885X=2 +dtm_flow_nof_remote_cores_region_14.BCM8885X=2 +dtm_flow_nof_remote_cores_region_15.BCM8885X=2 +dtm_flow_nof_remote_cores_region_16.BCM8885X=2 +dtm_flow_nof_remote_cores_region_17.BCM8885X=2 +dtm_flow_nof_remote_cores_region_18.BCM8885X=2 +dtm_flow_nof_remote_cores_region_19.BCM8885X=2 +dtm_flow_nof_remote_cores_region_2.BCM8885X=2 +dtm_flow_nof_remote_cores_region_20.BCM8885X=2 +dtm_flow_nof_remote_cores_region_21.BCM8885X=2 +dtm_flow_nof_remote_cores_region_22.BCM8885X=2 +dtm_flow_nof_remote_cores_region_23.BCM8885X=2 +dtm_flow_nof_remote_cores_region_24.BCM8885X=2 +dtm_flow_nof_remote_cores_region_25.BCM8885X=2 +dtm_flow_nof_remote_cores_region_26.BCM8885X=2 +dtm_flow_nof_remote_cores_region_27.BCM8885X=2 +dtm_flow_nof_remote_cores_region_28.BCM8885X=2 +dtm_flow_nof_remote_cores_region_29.BCM8885X=2 +dtm_flow_nof_remote_cores_region_3.BCM8885X=2 +dtm_flow_nof_remote_cores_region_30.BCM8885X=2 +dtm_flow_nof_remote_cores_region_31.BCM8885X=2 +dtm_flow_nof_remote_cores_region_32.BCM8885X=2 +dtm_flow_nof_remote_cores_region_33.BCM8885X=2 +dtm_flow_nof_remote_cores_region_34.BCM8885X=2 +dtm_flow_nof_remote_cores_region_35.BCM8885X=2 +dtm_flow_nof_remote_cores_region_36.BCM8885X=2 +dtm_flow_nof_remote_cores_region_37.BCM8885X=2 +dtm_flow_nof_remote_cores_region_38.BCM8885X=2 +dtm_flow_nof_remote_cores_region_39.BCM8885X=2 +dtm_flow_nof_remote_cores_region_4.BCM8885X=2 +dtm_flow_nof_remote_cores_region_40.BCM8885X=2 +dtm_flow_nof_remote_cores_region_41.BCM8885X=2 +dtm_flow_nof_remote_cores_region_42.BCM8885X=2 +dtm_flow_nof_remote_cores_region_43.BCM8885X=2 +dtm_flow_nof_remote_cores_region_44.BCM8885X=2 +dtm_flow_nof_remote_cores_region_45.BCM8885X=2 +dtm_flow_nof_remote_cores_region_46.BCM8885X=2 +dtm_flow_nof_remote_cores_region_47.BCM8885X=2 +dtm_flow_nof_remote_cores_region_48.BCM8885X=2 +dtm_flow_nof_remote_cores_region_49.BCM8885X=2 +dtm_flow_nof_remote_cores_region_5.BCM8885X=2 +dtm_flow_nof_remote_cores_region_50.BCM8885X=2 +dtm_flow_nof_remote_cores_region_51.BCM8885X=2 +dtm_flow_nof_remote_cores_region_52.BCM8885X=2 +dtm_flow_nof_remote_cores_region_53.BCM8885X=2 +dtm_flow_nof_remote_cores_region_54.BCM8885X=2 +dtm_flow_nof_remote_cores_region_55.BCM8885X=2 +dtm_flow_nof_remote_cores_region_56.BCM8885X=2 +dtm_flow_nof_remote_cores_region_57.BCM8885X=2 +dtm_flow_nof_remote_cores_region_58.BCM8885X=2 +dtm_flow_nof_remote_cores_region_59.BCM8885X=2 +dtm_flow_nof_remote_cores_region_6.BCM8885X=2 +dtm_flow_nof_remote_cores_region_60.BCM8885X=2 +dtm_flow_nof_remote_cores_region_7.BCM8885X=2 +dtm_flow_nof_remote_cores_region_8.BCM8885X=2 +dtm_flow_nof_remote_cores_region_9.BCM8885X=2 +dtm_flow_nof_remote_cores_region_73.BCM8869X=2 +dtm_flow_mapping_mode_region_73.BCM8869X=0 +dtm_flow_nof_remote_cores_region_74.BCM8869X=2 +dtm_flow_mapping_mode_region_74.BCM8869X=0 +dtm_flow_nof_remote_cores_region_75.BCM8869X=2 +dtm_flow_mapping_mode_region_75.BCM8869X=0 +ext_ram_enabled_bitmap.BCM8885X=3 +ext_ram_freq.BCM8885X=1200 +dram_temperature_threshold_restore_traffic.BCM8885X=89 +dram_temperature_threshold_power_down.BCM8885X=102 +dram_temperature_threshold_stop_traffic.BCM8885X=94 +dram_temperature_monitor_enable.BCM8885X=1 +fabric_connect_mode.BCM8885X=FE +ftmh_stacking_extension_size=0 +j2_ftmh_lb_key_extension_size=3 +j_ftmh_lb_key_extension_size=0 + + +lane_to_serdes_map_fabric_lane0.BCM8885X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8885X=rx1:tx1 +lane_to_serdes_map_fabric_lane2.BCM8885X=rx2:tx3 +lane_to_serdes_map_fabric_lane3.BCM8885X=rx3:tx2 + +lane_to_serdes_map_fabric_lane4.BCM8885X=rx4:tx4 +lane_to_serdes_map_fabric_lane5.BCM8885X=rx5:tx7 +lane_to_serdes_map_fabric_lane6.BCM8885X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8885X=rx7:tx5 + +lane_to_serdes_map_fabric_lane8.BCM8885X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8885X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8885X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8885X=rx11:tx11 + +lane_to_serdes_map_fabric_lane12.BCM8885X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8885X=rx13:tx13 +lane_to_serdes_map_fabric_lane14.BCM8885X=rx14:tx14 +lane_to_serdes_map_fabric_lane15.BCM8885X=rx15:tx15 + +lane_to_serdes_map_fabric_lane16.BCM8885X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8885X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8885X=rx18:tx18 +lane_to_serdes_map_fabric_lane19.BCM8885X=rx19:tx19 + +lane_to_serdes_map_fabric_lane20.BCM8885X=rx20:tx20 +lane_to_serdes_map_fabric_lane21.BCM8885X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8885X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8885X=rx23:tx23 + +lane_to_serdes_map_fabric_lane24.BCM8885X=rx24:tx26 +lane_to_serdes_map_fabric_lane25.BCM8885X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8885X=rx26:tx24 +lane_to_serdes_map_fabric_lane27.BCM8885X=rx27:tx27 + +lane_to_serdes_map_fabric_lane28.BCM8885X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8885X=rx29:tx31 +lane_to_serdes_map_fabric_lane30.BCM8885X=rx30:tx30 +lane_to_serdes_map_fabric_lane31.BCM8885X=rx31:tx29 + +lane_to_serdes_map_fabric_lane32.BCM8885X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8885X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8885X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8885X=rx35:tx35 + +lane_to_serdes_map_fabric_lane36.BCM8885X=rx36:tx36 +lane_to_serdes_map_fabric_lane37.BCM8885X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8885X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8885X=rx39:tx39 + +lane_to_serdes_map_fabric_lane40.BCM8885X=rx40:tx43 +lane_to_serdes_map_fabric_lane41.BCM8885X=rx41:tx42 +lane_to_serdes_map_fabric_lane42.BCM8885X=rx42:tx41 +lane_to_serdes_map_fabric_lane43.BCM8885X=rx43:tx40 + +lane_to_serdes_map_fabric_lane44.BCM8885X=rx44:tx47 +lane_to_serdes_map_fabric_lane45.BCM8885X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8885X=rx46:tx46 +lane_to_serdes_map_fabric_lane47.BCM8885X=rx47:tx44 + +lane_to_serdes_map_fabric_lane48.BCM8885X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8885X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8885X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8885X=rx51:tx51 + +lane_to_serdes_map_fabric_lane52.BCM8885X=rx52:tx52 +lane_to_serdes_map_fabric_lane53.BCM8885X=rx53:tx53 +lane_to_serdes_map_fabric_lane54.BCM8885X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8885X=rx55:tx55 + +lane_to_serdes_map_fabric_lane56.BCM8885X=rx56:tx59 +lane_to_serdes_map_fabric_lane57.BCM8885X=rx57:tx58 +lane_to_serdes_map_fabric_lane58.BCM8885X=rx58:tx57 +lane_to_serdes_map_fabric_lane59.BCM8885X=rx59:tx56 + +lane_to_serdes_map_fabric_lane60.BCM8885X=rx60:tx63 +lane_to_serdes_map_fabric_lane61.BCM8885X=rx61:tx61 +lane_to_serdes_map_fabric_lane62.BCM8885X=rx62:tx62 +lane_to_serdes_map_fabric_lane63.BCM8885X=rx63:tx60 + +lane_to_serdes_map_fabric_lane64.BCM8885X=rx64:tx64 +lane_to_serdes_map_fabric_lane65.BCM8885X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8885X=rx66:tx66 +lane_to_serdes_map_fabric_lane67.BCM8885X=rx67:tx67 + +lane_to_serdes_map_fabric_lane68.BCM8885X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8885X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8885X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8885X=rx71:tx71 + +lane_to_serdes_map_fabric_lane72.BCM8885X=rx72:tx75 +lane_to_serdes_map_fabric_lane73.BCM8885X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8885X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8885X=rx75:tx72 + +lane_to_serdes_map_fabric_lane76.BCM8885X=rx76:tx79 +lane_to_serdes_map_fabric_lane77.BCM8885X=rx77:tx78 +lane_to_serdes_map_fabric_lane78.BCM8885X=rx78:tx77 +lane_to_serdes_map_fabric_lane79.BCM8885X=rx79:tx76 + +lane_to_serdes_map_fabric_lane80.BCM8885X=rx80:tx80 +lane_to_serdes_map_fabric_lane81.BCM8885X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8885X=rx82:tx82 +lane_to_serdes_map_fabric_lane83.BCM8885X=rx83:tx83 + +lane_to_serdes_map_fabric_lane84.BCM8885X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8885X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8885X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8885X=rx87:tx87 + +lane_to_serdes_map_fabric_lane88.BCM8885X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8885X=rx89:tx90 +lane_to_serdes_map_fabric_lane90.BCM8885X=rx90:tx89 +lane_to_serdes_map_fabric_lane91.BCM8885X=rx91:tx91 + +lane_to_serdes_map_fabric_lane92.BCM8885X=rx92:tx94 +lane_to_serdes_map_fabric_lane93.BCM8885X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8885X=rx94:tx92 +lane_to_serdes_map_fabric_lane95.BCM8885X=rx95:tx95 + +lane_to_serdes_map_fabric_lane96.BCM8885X=rx96:tx96 +lane_to_serdes_map_fabric_lane97.BCM8885X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8885X=rx98:tx98 +lane_to_serdes_map_fabric_lane99.BCM8885X=rx99:tx99 + +lane_to_serdes_map_fabric_lane100.BCM8885X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8885X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8885X=rx102:tx102 +lane_to_serdes_map_fabric_lane103.BCM8885X=rx103:tx103 + +lane_to_serdes_map_fabric_lane104.BCM8885X=rx104:tx104 +lane_to_serdes_map_fabric_lane105.BCM8885X=rx105:tx105 +lane_to_serdes_map_fabric_lane106.BCM8885X=rx106:tx106 +lane_to_serdes_map_fabric_lane107.BCM8885X=rx107:tx107 + +lane_to_serdes_map_fabric_lane108.BCM8885X=rx108:tx108 +lane_to_serdes_map_fabric_lane109.BCM8885X=rx109:tx109 +lane_to_serdes_map_fabric_lane110.BCM8885X=rx110:tx110 +lane_to_serdes_map_fabric_lane111.BCM8885X=rx111:tx111 + +lane_to_serdes_map_fabric_lane112.BCM8885X=rx112:tx114 +lane_to_serdes_map_fabric_lane113.BCM8885X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8885X=rx114:tx112 +lane_to_serdes_map_fabric_lane115.BCM8885X=rx115:tx115 + +lane_to_serdes_map_fabric_lane116.BCM8885X=rx116:tx116 +lane_to_serdes_map_fabric_lane117.BCM8885X=rx117:tx117 +lane_to_serdes_map_fabric_lane118.BCM8885X=rx118:tx118 +lane_to_serdes_map_fabric_lane119.BCM8885X=rx119:tx119 + +lane_to_serdes_map_fabric_lane120.BCM8885X=rx120:tx120 +lane_to_serdes_map_fabric_lane121.BCM8885X=rx121:tx121 +lane_to_serdes_map_fabric_lane122.BCM8885X=rx122:tx122 +lane_to_serdes_map_fabric_lane123.BCM8885X=rx123:tx123 + +lane_to_serdes_map_fabric_lane124.BCM8885X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8885X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8885X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8885X=rx127:tx127 + +lane_to_serdes_map_fabric_lane128.BCM8885X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8885X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8885X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8885X=rx131:tx131 + +lane_to_serdes_map_fabric_lane132.BCM8885X=rx132:tx132 +lane_to_serdes_map_fabric_lane133.BCM8885X=rx133:tx133 +lane_to_serdes_map_fabric_lane134.BCM8885X=rx134:tx134 +lane_to_serdes_map_fabric_lane135.BCM8885X=rx135:tx135 + +lane_to_serdes_map_fabric_lane136.BCM8885X=rx136:tx139 +lane_to_serdes_map_fabric_lane137.BCM8885X=rx137:tx138 +lane_to_serdes_map_fabric_lane138.BCM8885X=rx138:tx137 +lane_to_serdes_map_fabric_lane139.BCM8885X=rx139:tx136 + +lane_to_serdes_map_fabric_lane140.BCM8885X=rx140:tx143 +lane_to_serdes_map_fabric_lane141.BCM8885X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8885X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8885X=rx143:tx140 + +lane_to_serdes_map_fabric_lane144.BCM8885X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8885X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8885X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8885X=rx147:tx147 + +lane_to_serdes_map_fabric_lane148.BCM8885X=rx148:tx148 +lane_to_serdes_map_fabric_lane149.BCM8885X=rx149:tx149 +lane_to_serdes_map_fabric_lane150.BCM8885X=rx150:tx150 +lane_to_serdes_map_fabric_lane151.BCM8885X=rx151:tx151 + +lane_to_serdes_map_fabric_lane152.BCM8885X=rx152:tx155 +lane_to_serdes_map_fabric_lane153.BCM8885X=rx153:tx154 +lane_to_serdes_map_fabric_lane154.BCM8885X=rx154:tx153 +lane_to_serdes_map_fabric_lane155.BCM8885X=rx155:tx152 + +lane_to_serdes_map_fabric_lane156.BCM8885X=rx156:tx159 +lane_to_serdes_map_fabric_lane157.BCM8885X=rx157:tx157 +lane_to_serdes_map_fabric_lane158.BCM8885X=rx158:tx158 +lane_to_serdes_map_fabric_lane159.BCM8885X=rx159:tx156 + +lane_to_serdes_map_fabric_lane160.BCM8885X=rx160:tx160 +lane_to_serdes_map_fabric_lane161.BCM8885X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8885X=rx162:tx162 +lane_to_serdes_map_fabric_lane163.BCM8885X=rx163:tx163 + +lane_to_serdes_map_fabric_lane164.BCM8885X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8885X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8885X=rx166:tx166 +lane_to_serdes_map_fabric_lane167.BCM8885X=rx167:tx167 + +lane_to_serdes_map_fabric_lane168.BCM8885X=rx168:tx171 +lane_to_serdes_map_fabric_lane169.BCM8885X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8885X=rx170:tx170 +lane_to_serdes_map_fabric_lane171.BCM8885X=rx171:tx168 + +lane_to_serdes_map_fabric_lane172.BCM8885X=rx172:tx175 +lane_to_serdes_map_fabric_lane173.BCM8885X=rx173:tx174 +lane_to_serdes_map_fabric_lane174.BCM8885X=rx174:tx173 +lane_to_serdes_map_fabric_lane175.BCM8885X=rx175:tx172 + +lane_to_serdes_map_fabric_lane176.BCM8885X=rx176:tx176 +lane_to_serdes_map_fabric_lane177.BCM8885X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8885X=rx178:tx178 +lane_to_serdes_map_fabric_lane179.BCM8885X=rx179:tx179 + +lane_to_serdes_map_fabric_lane180.BCM8885X=rx180:tx180 +lane_to_serdes_map_fabric_lane181.BCM8885X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8885X=rx182:tx182 +lane_to_serdes_map_fabric_lane183.BCM8885X=rx183:tx183 + +lane_to_serdes_map_fabric_lane184.BCM8885X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8885X=rx185:tx185 +lane_to_serdes_map_fabric_lane186.BCM8885X=rx186:tx186 +lane_to_serdes_map_fabric_lane187.BCM8885X=rx187:tx187 + +lane_to_serdes_map_fabric_lane188.BCM8885X=rx188:tx190 +lane_to_serdes_map_fabric_lane189.BCM8885X=rx189:tx189 +lane_to_serdes_map_fabric_lane190.BCM8885X=rx190:tx188 +lane_to_serdes_map_fabric_lane191.BCM8885X=rx191:tx191 + + +phy_rx_polarity_flip_fabric0.BCM8885X=0 +phy_rx_polarity_flip_fabric1.BCM8885X=1 +phy_rx_polarity_flip_fabric2.BCM8885X=0 +phy_rx_polarity_flip_fabric3.BCM8885X=0 +phy_rx_polarity_flip_fabric4.BCM8885X=0 +phy_rx_polarity_flip_fabric5.BCM8885X=0 +phy_rx_polarity_flip_fabric6.BCM8885X=0 +phy_rx_polarity_flip_fabric7.BCM8885X=0 +phy_rx_polarity_flip_fabric8.BCM8885X=1 +phy_rx_polarity_flip_fabric9.BCM8885X=1 +phy_rx_polarity_flip_fabric10.BCM8885X=0 +phy_rx_polarity_flip_fabric11.BCM8885X=0 +phy_rx_polarity_flip_fabric12.BCM8885X=1 +phy_rx_polarity_flip_fabric13.BCM8885X=0 +phy_rx_polarity_flip_fabric14.BCM8885X=0 +phy_rx_polarity_flip_fabric15.BCM8885X=1 +phy_rx_polarity_flip_fabric16.BCM8885X=1 +phy_rx_polarity_flip_fabric17.BCM8885X=1 +phy_rx_polarity_flip_fabric18.BCM8885X=0 +phy_rx_polarity_flip_fabric19.BCM8885X=0 +phy_rx_polarity_flip_fabric20.BCM8885X=0 +phy_rx_polarity_flip_fabric21.BCM8885X=0 +phy_rx_polarity_flip_fabric22.BCM8885X=1 +phy_rx_polarity_flip_fabric23.BCM8885X=0 +phy_rx_polarity_flip_fabric24.BCM8885X=1 +phy_rx_polarity_flip_fabric25.BCM8885X=0 +phy_rx_polarity_flip_fabric26.BCM8885X=1 +phy_rx_polarity_flip_fabric27.BCM8885X=1 +phy_rx_polarity_flip_fabric28.BCM8885X=1 +phy_rx_polarity_flip_fabric29.BCM8885X=1 +phy_rx_polarity_flip_fabric30.BCM8885X=0 +phy_rx_polarity_flip_fabric31.BCM8885X=1 +phy_rx_polarity_flip_fabric32.BCM8885X=0 +phy_rx_polarity_flip_fabric33.BCM8885X=1 +phy_rx_polarity_flip_fabric34.BCM8885X=0 +phy_rx_polarity_flip_fabric35.BCM8885X=0 +phy_rx_polarity_flip_fabric36.BCM8885X=0 +phy_rx_polarity_flip_fabric37.BCM8885X=1 +phy_rx_polarity_flip_fabric38.BCM8885X=1 +phy_rx_polarity_flip_fabric39.BCM8885X=0 +phy_rx_polarity_flip_fabric40.BCM8885X=1 +phy_rx_polarity_flip_fabric41.BCM8885X=0 +phy_rx_polarity_flip_fabric42.BCM8885X=0 +phy_rx_polarity_flip_fabric43.BCM8885X=0 +phy_rx_polarity_flip_fabric44.BCM8885X=1 +phy_rx_polarity_flip_fabric45.BCM8885X=0 +phy_rx_polarity_flip_fabric46.BCM8885X=0 +phy_rx_polarity_flip_fabric47.BCM8885X=1 +phy_rx_polarity_flip_fabric48.BCM8885X=1 +phy_rx_polarity_flip_fabric49.BCM8885X=1 +phy_rx_polarity_flip_fabric50.BCM8885X=1 +phy_rx_polarity_flip_fabric51.BCM8885X=1 +phy_rx_polarity_flip_fabric52.BCM8885X=1 +phy_rx_polarity_flip_fabric53.BCM8885X=1 +phy_rx_polarity_flip_fabric54.BCM8885X=1 +phy_rx_polarity_flip_fabric55.BCM8885X=1 +phy_rx_polarity_flip_fabric56.BCM8885X=0 +phy_rx_polarity_flip_fabric57.BCM8885X=0 +phy_rx_polarity_flip_fabric58.BCM8885X=0 +phy_rx_polarity_flip_fabric59.BCM8885X=0 +phy_rx_polarity_flip_fabric60.BCM8885X=0 +phy_rx_polarity_flip_fabric61.BCM8885X=0 +phy_rx_polarity_flip_fabric62.BCM8885X=1 +phy_rx_polarity_flip_fabric63.BCM8885X=0 +phy_rx_polarity_flip_fabric64.BCM8885X=1 +phy_rx_polarity_flip_fabric65.BCM8885X=1 +phy_rx_polarity_flip_fabric66.BCM8885X=0 +phy_rx_polarity_flip_fabric67.BCM8885X=0 +phy_rx_polarity_flip_fabric68.BCM8885X=1 +phy_rx_polarity_flip_fabric69.BCM8885X=1 +phy_rx_polarity_flip_fabric70.BCM8885X=1 +phy_rx_polarity_flip_fabric71.BCM8885X=0 +phy_rx_polarity_flip_fabric72.BCM8885X=0 +phy_rx_polarity_flip_fabric73.BCM8885X=1 +phy_rx_polarity_flip_fabric74.BCM8885X=0 +phy_rx_polarity_flip_fabric75.BCM8885X=1 +phy_rx_polarity_flip_fabric76.BCM8885X=1 +phy_rx_polarity_flip_fabric77.BCM8885X=1 +phy_rx_polarity_flip_fabric78.BCM8885X=1 +phy_rx_polarity_flip_fabric79.BCM8885X=0 +phy_rx_polarity_flip_fabric80.BCM8885X=1 +phy_rx_polarity_flip_fabric81.BCM8885X=0 +phy_rx_polarity_flip_fabric82.BCM8885X=0 +phy_rx_polarity_flip_fabric83.BCM8885X=0 +phy_rx_polarity_flip_fabric84.BCM8885X=1 +phy_rx_polarity_flip_fabric85.BCM8885X=0 +phy_rx_polarity_flip_fabric86.BCM8885X=1 +phy_rx_polarity_flip_fabric87.BCM8885X=0 +phy_rx_polarity_flip_fabric88.BCM8885X=1 +phy_rx_polarity_flip_fabric89.BCM8885X=1 +phy_rx_polarity_flip_fabric90.BCM8885X=1 +phy_rx_polarity_flip_fabric91.BCM8885X=1 +phy_rx_polarity_flip_fabric92.BCM8885X=1 +phy_rx_polarity_flip_fabric93.BCM8885X=1 +phy_rx_polarity_flip_fabric94.BCM8885X=1 +phy_rx_polarity_flip_fabric95.BCM8885X=1 +phy_rx_polarity_flip_fabric96.BCM8885X=0 +phy_rx_polarity_flip_fabric97.BCM8885X=1 +phy_rx_polarity_flip_fabric98.BCM8885X=0 +phy_rx_polarity_flip_fabric99.BCM8885X=0 +phy_rx_polarity_flip_fabric100.BCM8885X=0 +phy_rx_polarity_flip_fabric101.BCM8885X=1 +phy_rx_polarity_flip_fabric102.BCM8885X=1 +phy_rx_polarity_flip_fabric103.BCM8885X=0 +phy_rx_polarity_flip_fabric104.BCM8885X=1 +phy_rx_polarity_flip_fabric105.BCM8885X=0 +phy_rx_polarity_flip_fabric106.BCM8885X=0 +phy_rx_polarity_flip_fabric107.BCM8885X=0 +phy_rx_polarity_flip_fabric108.BCM8885X=1 +phy_rx_polarity_flip_fabric109.BCM8885X=1 +phy_rx_polarity_flip_fabric110.BCM8885X=0 +phy_rx_polarity_flip_fabric111.BCM8885X=1 +phy_rx_polarity_flip_fabric112.BCM8885X=0 +phy_rx_polarity_flip_fabric113.BCM8885X=0 +phy_rx_polarity_flip_fabric114.BCM8885X=1 +phy_rx_polarity_flip_fabric115.BCM8885X=1 +phy_rx_polarity_flip_fabric116.BCM8885X=0 +phy_rx_polarity_flip_fabric117.BCM8885X=1 +phy_rx_polarity_flip_fabric118.BCM8885X=1 +phy_rx_polarity_flip_fabric119.BCM8885X=1 +phy_rx_polarity_flip_fabric120.BCM8885X=1 +phy_rx_polarity_flip_fabric121.BCM8885X=1 +phy_rx_polarity_flip_fabric122.BCM8885X=1 +phy_rx_polarity_flip_fabric123.BCM8885X=0 +phy_rx_polarity_flip_fabric124.BCM8885X=0 +phy_rx_polarity_flip_fabric125.BCM8885X=0 +phy_rx_polarity_flip_fabric126.BCM8885X=0 +phy_rx_polarity_flip_fabric127.BCM8885X=1 +phy_rx_polarity_flip_fabric128.BCM8885X=0 +phy_rx_polarity_flip_fabric129.BCM8885X=0 +phy_rx_polarity_flip_fabric130.BCM8885X=1 +phy_rx_polarity_flip_fabric131.BCM8885X=0 +phy_rx_polarity_flip_fabric132.BCM8885X=0 +phy_rx_polarity_flip_fabric133.BCM8885X=1 +phy_rx_polarity_flip_fabric134.BCM8885X=1 +phy_rx_polarity_flip_fabric135.BCM8885X=0 +phy_rx_polarity_flip_fabric136.BCM8885X=0 +phy_rx_polarity_flip_fabric137.BCM8885X=1 +phy_rx_polarity_flip_fabric138.BCM8885X=1 +phy_rx_polarity_flip_fabric139.BCM8885X=0 +phy_rx_polarity_flip_fabric140.BCM8885X=1 +phy_rx_polarity_flip_fabric141.BCM8885X=0 +phy_rx_polarity_flip_fabric142.BCM8885X=1 +phy_rx_polarity_flip_fabric143.BCM8885X=1 +phy_rx_polarity_flip_fabric144.BCM8885X=1 +phy_rx_polarity_flip_fabric145.BCM8885X=1 +phy_rx_polarity_flip_fabric146.BCM8885X=1 +phy_rx_polarity_flip_fabric147.BCM8885X=0 +phy_rx_polarity_flip_fabric148.BCM8885X=1 +phy_rx_polarity_flip_fabric149.BCM8885X=1 +phy_rx_polarity_flip_fabric150.BCM8885X=0 +phy_rx_polarity_flip_fabric151.BCM8885X=0 +phy_rx_polarity_flip_fabric152.BCM8885X=0 +phy_rx_polarity_flip_fabric153.BCM8885X=0 +phy_rx_polarity_flip_fabric154.BCM8885X=0 +phy_rx_polarity_flip_fabric155.BCM8885X=1 +phy_rx_polarity_flip_fabric156.BCM8885X=0 +phy_rx_polarity_flip_fabric157.BCM8885X=0 +phy_rx_polarity_flip_fabric158.BCM8885X=0 +phy_rx_polarity_flip_fabric159.BCM8885X=1 +phy_rx_polarity_flip_fabric160.BCM8885X=0 +phy_rx_polarity_flip_fabric161.BCM8885X=1 +phy_rx_polarity_flip_fabric162.BCM8885X=1 +phy_rx_polarity_flip_fabric163.BCM8885X=1 +phy_rx_polarity_flip_fabric164.BCM8885X=1 +phy_rx_polarity_flip_fabric165.BCM8885X=0 +phy_rx_polarity_flip_fabric166.BCM8885X=0 +phy_rx_polarity_flip_fabric167.BCM8885X=1 +phy_rx_polarity_flip_fabric168.BCM8885X=0 +phy_rx_polarity_flip_fabric169.BCM8885X=1 +phy_rx_polarity_flip_fabric170.BCM8885X=0 +phy_rx_polarity_flip_fabric171.BCM8885X=0 +phy_rx_polarity_flip_fabric172.BCM8885X=0 +phy_rx_polarity_flip_fabric173.BCM8885X=1 +phy_rx_polarity_flip_fabric174.BCM8885X=1 +phy_rx_polarity_flip_fabric175.BCM8885X=1 +phy_rx_polarity_flip_fabric176.BCM8885X=0 +phy_rx_polarity_flip_fabric177.BCM8885X=1 +phy_rx_polarity_flip_fabric178.BCM8885X=0 +phy_rx_polarity_flip_fabric179.BCM8885X=1 +phy_rx_polarity_flip_fabric180.BCM8885X=1 +phy_rx_polarity_flip_fabric181.BCM8885X=0 +phy_rx_polarity_flip_fabric182.BCM8885X=0 +phy_rx_polarity_flip_fabric183.BCM8885X=0 +phy_rx_polarity_flip_fabric184.BCM8885X=0 +phy_rx_polarity_flip_fabric185.BCM8885X=0 +phy_rx_polarity_flip_fabric186.BCM8885X=1 +phy_rx_polarity_flip_fabric187.BCM8885X=0 +phy_rx_polarity_flip_fabric188.BCM8885X=0 +phy_rx_polarity_flip_fabric189.BCM8885X=0 +phy_rx_polarity_flip_fabric190.BCM8885X=0 +phy_rx_polarity_flip_fabric191.BCM8885X=1 + + +phy_tx_polarity_flip_fabric0.BCM8885X=0 +phy_tx_polarity_flip_fabric1.BCM8885X=0 +phy_tx_polarity_flip_fabric2.BCM8885X=0 +phy_tx_polarity_flip_fabric3.BCM8885X=1 +phy_tx_polarity_flip_fabric4.BCM8885X=1 +phy_tx_polarity_flip_fabric5.BCM8885X=0 +phy_tx_polarity_flip_fabric6.BCM8885X=1 +phy_tx_polarity_flip_fabric7.BCM8885X=1 +phy_tx_polarity_flip_fabric8.BCM8885X=0 +phy_tx_polarity_flip_fabric9.BCM8885X=1 +phy_tx_polarity_flip_fabric10.BCM8885X=1 +phy_tx_polarity_flip_fabric11.BCM8885X=1 +phy_tx_polarity_flip_fabric12.BCM8885X=1 +phy_tx_polarity_flip_fabric13.BCM8885X=0 +phy_tx_polarity_flip_fabric14.BCM8885X=1 +phy_tx_polarity_flip_fabric15.BCM8885X=1 +phy_tx_polarity_flip_fabric16.BCM8885X=1 +phy_tx_polarity_flip_fabric17.BCM8885X=1 +phy_tx_polarity_flip_fabric18.BCM8885X=0 +phy_tx_polarity_flip_fabric19.BCM8885X=0 +phy_tx_polarity_flip_fabric20.BCM8885X=0 +phy_tx_polarity_flip_fabric21.BCM8885X=1 +phy_tx_polarity_flip_fabric22.BCM8885X=1 +phy_tx_polarity_flip_fabric23.BCM8885X=0 +phy_tx_polarity_flip_fabric24.BCM8885X=0 +phy_tx_polarity_flip_fabric25.BCM8885X=1 +phy_tx_polarity_flip_fabric26.BCM8885X=1 +phy_tx_polarity_flip_fabric27.BCM8885X=0 +phy_tx_polarity_flip_fabric28.BCM8885X=1 +phy_tx_polarity_flip_fabric29.BCM8885X=0 +phy_tx_polarity_flip_fabric30.BCM8885X=1 +phy_tx_polarity_flip_fabric31.BCM8885X=0 +phy_tx_polarity_flip_fabric32.BCM8885X=0 +phy_tx_polarity_flip_fabric33.BCM8885X=0 +phy_tx_polarity_flip_fabric34.BCM8885X=0 +phy_tx_polarity_flip_fabric35.BCM8885X=0 +phy_tx_polarity_flip_fabric36.BCM8885X=1 +phy_tx_polarity_flip_fabric37.BCM8885X=1 +phy_tx_polarity_flip_fabric38.BCM8885X=0 +phy_tx_polarity_flip_fabric39.BCM8885X=0 +phy_tx_polarity_flip_fabric40.BCM8885X=1 +phy_tx_polarity_flip_fabric41.BCM8885X=0 +phy_tx_polarity_flip_fabric42.BCM8885X=0 +phy_tx_polarity_flip_fabric43.BCM8885X=1 +phy_tx_polarity_flip_fabric44.BCM8885X=0 +phy_tx_polarity_flip_fabric45.BCM8885X=0 +phy_tx_polarity_flip_fabric46.BCM8885X=1 +phy_tx_polarity_flip_fabric47.BCM8885X=0 +phy_tx_polarity_flip_fabric48.BCM8885X=1 +phy_tx_polarity_flip_fabric49.BCM8885X=1 +phy_tx_polarity_flip_fabric50.BCM8885X=0 +phy_tx_polarity_flip_fabric51.BCM8885X=0 +phy_tx_polarity_flip_fabric52.BCM8885X=1 +phy_tx_polarity_flip_fabric53.BCM8885X=0 +phy_tx_polarity_flip_fabric54.BCM8885X=0 +phy_tx_polarity_flip_fabric55.BCM8885X=1 +phy_tx_polarity_flip_fabric56.BCM8885X=0 +phy_tx_polarity_flip_fabric57.BCM8885X=0 +phy_tx_polarity_flip_fabric58.BCM8885X=1 +phy_tx_polarity_flip_fabric59.BCM8885X=0 +phy_tx_polarity_flip_fabric60.BCM8885X=1 +phy_tx_polarity_flip_fabric61.BCM8885X=1 +phy_tx_polarity_flip_fabric62.BCM8885X=1 +phy_tx_polarity_flip_fabric63.BCM8885X=1 +phy_tx_polarity_flip_fabric64.BCM8885X=1 +phy_tx_polarity_flip_fabric65.BCM8885X=0 +phy_tx_polarity_flip_fabric66.BCM8885X=1 +phy_tx_polarity_flip_fabric67.BCM8885X=0 +phy_tx_polarity_flip_fabric68.BCM8885X=0 +phy_tx_polarity_flip_fabric69.BCM8885X=0 +phy_tx_polarity_flip_fabric70.BCM8885X=0 +phy_tx_polarity_flip_fabric71.BCM8885X=1 +phy_tx_polarity_flip_fabric72.BCM8885X=0 +phy_tx_polarity_flip_fabric73.BCM8885X=1 +phy_tx_polarity_flip_fabric74.BCM8885X=0 +phy_tx_polarity_flip_fabric75.BCM8885X=1 +phy_tx_polarity_flip_fabric76.BCM8885X=0 +phy_tx_polarity_flip_fabric77.BCM8885X=0 +phy_tx_polarity_flip_fabric78.BCM8885X=0 +phy_tx_polarity_flip_fabric79.BCM8885X=1 +phy_tx_polarity_flip_fabric80.BCM8885X=1 +phy_tx_polarity_flip_fabric81.BCM8885X=0 +phy_tx_polarity_flip_fabric82.BCM8885X=0 +phy_tx_polarity_flip_fabric83.BCM8885X=0 +phy_tx_polarity_flip_fabric84.BCM8885X=1 +phy_tx_polarity_flip_fabric85.BCM8885X=0 +phy_tx_polarity_flip_fabric86.BCM8885X=1 +phy_tx_polarity_flip_fabric87.BCM8885X=0 +phy_tx_polarity_flip_fabric88.BCM8885X=1 +phy_tx_polarity_flip_fabric89.BCM8885X=1 +phy_tx_polarity_flip_fabric90.BCM8885X=1 +phy_tx_polarity_flip_fabric91.BCM8885X=1 +phy_tx_polarity_flip_fabric92.BCM8885X=1 +phy_tx_polarity_flip_fabric93.BCM8885X=1 +phy_tx_polarity_flip_fabric94.BCM8885X=0 +phy_tx_polarity_flip_fabric95.BCM8885X=0 +phy_tx_polarity_flip_fabric96.BCM8885X=1 +phy_tx_polarity_flip_fabric97.BCM8885X=1 +phy_tx_polarity_flip_fabric98.BCM8885X=1 +phy_tx_polarity_flip_fabric99.BCM8885X=0 +phy_tx_polarity_flip_fabric100.BCM8885X=0 +phy_tx_polarity_flip_fabric101.BCM8885X=0 +phy_tx_polarity_flip_fabric102.BCM8885X=1 +phy_tx_polarity_flip_fabric103.BCM8885X=1 +phy_tx_polarity_flip_fabric104.BCM8885X=1 +phy_tx_polarity_flip_fabric105.BCM8885X=0 +phy_tx_polarity_flip_fabric106.BCM8885X=1 +phy_tx_polarity_flip_fabric107.BCM8885X=0 +phy_tx_polarity_flip_fabric108.BCM8885X=0 +phy_tx_polarity_flip_fabric109.BCM8885X=1 +phy_tx_polarity_flip_fabric110.BCM8885X=0 +phy_tx_polarity_flip_fabric111.BCM8885X=0 +phy_tx_polarity_flip_fabric112.BCM8885X=1 +phy_tx_polarity_flip_fabric113.BCM8885X=0 +phy_tx_polarity_flip_fabric114.BCM8885X=0 +phy_tx_polarity_flip_fabric115.BCM8885X=1 +phy_tx_polarity_flip_fabric116.BCM8885X=1 +phy_tx_polarity_flip_fabric117.BCM8885X=1 +phy_tx_polarity_flip_fabric118.BCM8885X=0 +phy_tx_polarity_flip_fabric119.BCM8885X=0 +phy_tx_polarity_flip_fabric120.BCM8885X=0 +phy_tx_polarity_flip_fabric121.BCM8885X=0 +phy_tx_polarity_flip_fabric122.BCM8885X=1 +phy_tx_polarity_flip_fabric123.BCM8885X=1 +phy_tx_polarity_flip_fabric124.BCM8885X=0 +phy_tx_polarity_flip_fabric125.BCM8885X=0 +phy_tx_polarity_flip_fabric126.BCM8885X=0 +phy_tx_polarity_flip_fabric127.BCM8885X=1 +phy_tx_polarity_flip_fabric128.BCM8885X=0 +phy_tx_polarity_flip_fabric129.BCM8885X=0 +phy_tx_polarity_flip_fabric130.BCM8885X=0 +phy_tx_polarity_flip_fabric131.BCM8885X=1 +phy_tx_polarity_flip_fabric132.BCM8885X=0 +phy_tx_polarity_flip_fabric133.BCM8885X=0 +phy_tx_polarity_flip_fabric134.BCM8885X=1 +phy_tx_polarity_flip_fabric135.BCM8885X=1 +phy_tx_polarity_flip_fabric136.BCM8885X=1 +phy_tx_polarity_flip_fabric137.BCM8885X=1 +phy_tx_polarity_flip_fabric138.BCM8885X=1 +phy_tx_polarity_flip_fabric139.BCM8885X=1 +phy_tx_polarity_flip_fabric140.BCM8885X=0 +phy_tx_polarity_flip_fabric141.BCM8885X=0 +phy_tx_polarity_flip_fabric142.BCM8885X=0 +phy_tx_polarity_flip_fabric143.BCM8885X=0 +phy_tx_polarity_flip_fabric144.BCM8885X=1 +phy_tx_polarity_flip_fabric145.BCM8885X=1 +phy_tx_polarity_flip_fabric146.BCM8885X=1 +phy_tx_polarity_flip_fabric147.BCM8885X=1 +phy_tx_polarity_flip_fabric148.BCM8885X=1 +phy_tx_polarity_flip_fabric149.BCM8885X=1 +phy_tx_polarity_flip_fabric150.BCM8885X=1 +phy_tx_polarity_flip_fabric151.BCM8885X=1 +phy_tx_polarity_flip_fabric152.BCM8885X=1 +phy_tx_polarity_flip_fabric153.BCM8885X=1 +phy_tx_polarity_flip_fabric154.BCM8885X=1 +phy_tx_polarity_flip_fabric155.BCM8885X=0 +phy_tx_polarity_flip_fabric156.BCM8885X=1 +phy_tx_polarity_flip_fabric157.BCM8885X=0 +phy_tx_polarity_flip_fabric158.BCM8885X=0 +phy_tx_polarity_flip_fabric159.BCM8885X=0 +phy_tx_polarity_flip_fabric160.BCM8885X=0 +phy_tx_polarity_flip_fabric161.BCM8885X=1 +phy_tx_polarity_flip_fabric162.BCM8885X=0 +phy_tx_polarity_flip_fabric163.BCM8885X=1 +phy_tx_polarity_flip_fabric164.BCM8885X=1 +phy_tx_polarity_flip_fabric165.BCM8885X=1 +phy_tx_polarity_flip_fabric166.BCM8885X=0 +phy_tx_polarity_flip_fabric167.BCM8885X=0 +phy_tx_polarity_flip_fabric168.BCM8885X=0 +phy_tx_polarity_flip_fabric169.BCM8885X=0 +phy_tx_polarity_flip_fabric170.BCM8885X=1 +phy_tx_polarity_flip_fabric171.BCM8885X=0 +phy_tx_polarity_flip_fabric172.BCM8885X=0 +phy_tx_polarity_flip_fabric173.BCM8885X=0 +phy_tx_polarity_flip_fabric174.BCM8885X=0 +phy_tx_polarity_flip_fabric175.BCM8885X=1 +phy_tx_polarity_flip_fabric176.BCM8885X=0 +phy_tx_polarity_flip_fabric177.BCM8885X=0 +phy_tx_polarity_flip_fabric178.BCM8885X=0 +phy_tx_polarity_flip_fabric179.BCM8885X=1 +phy_tx_polarity_flip_fabric180.BCM8885X=1 +phy_tx_polarity_flip_fabric181.BCM8885X=0 +phy_tx_polarity_flip_fabric182.BCM8885X=0 +phy_tx_polarity_flip_fabric183.BCM8885X=0 +phy_tx_polarity_flip_fabric184.BCM8885X=0 +phy_tx_polarity_flip_fabric185.BCM8885X=1 +phy_tx_polarity_flip_fabric186.BCM8885X=1 +phy_tx_polarity_flip_fabric187.BCM8885X=0 +phy_tx_polarity_flip_fabric188.BCM8885X=1 +phy_tx_polarity_flip_fabric189.BCM8885X=0 +phy_tx_polarity_flip_fabric190.BCM8885X=0 +phy_tx_polarity_flip_fabric191.BCM8885X=1 + + +lane_to_serdes_map_nif_lane0.BCM8885X=rx0:tx0 +lane_to_serdes_map_nif_lane1.BCM8885X=rx1:tx1 +lane_to_serdes_map_nif_lane2.BCM8885X=rx2:tx2 +lane_to_serdes_map_nif_lane3.BCM8885X=rx3:tx3 +lane_to_serdes_map_nif_lane4.BCM8885X=rx4:tx4 +lane_to_serdes_map_nif_lane5.BCM8885X=rx5:tx5 +lane_to_serdes_map_nif_lane6.BCM8885X=rx6:tx6 +lane_to_serdes_map_nif_lane7.BCM8885X=rx7:tx7 + +lane_to_serdes_map_nif_lane8.BCM8885X=rx8:tx8 +lane_to_serdes_map_nif_lane9.BCM8885X=rx9:tx9 +lane_to_serdes_map_nif_lane10.BCM8885X=rx10:tx10 +lane_to_serdes_map_nif_lane11.BCM8885X=rx11:tx11 +lane_to_serdes_map_nif_lane12.BCM8885X=rx12:tx12 +lane_to_serdes_map_nif_lane13.BCM8885X=rx13:tx13 +lane_to_serdes_map_nif_lane14.BCM8885X=rx14:tx14 +lane_to_serdes_map_nif_lane15.BCM8885X=rx15:tx15 + +lane_to_serdes_map_nif_lane16.BCM8885X=rx16:tx16 +lane_to_serdes_map_nif_lane17.BCM8885X=rx17:tx17 +lane_to_serdes_map_nif_lane18.BCM8885X=rx18:tx18 +lane_to_serdes_map_nif_lane19.BCM8885X=rx19:tx19 +lane_to_serdes_map_nif_lane20.BCM8885X=rx20:tx20 +lane_to_serdes_map_nif_lane21.BCM8885X=rx21:tx21 +lane_to_serdes_map_nif_lane22.BCM8885X=rx22:tx22 +lane_to_serdes_map_nif_lane23.BCM8885X=rx23:tx23 + +lane_to_serdes_map_nif_lane24.BCM8885X=rx24:tx24 +lane_to_serdes_map_nif_lane25.BCM8885X=rx25:tx25 +lane_to_serdes_map_nif_lane26.BCM8885X=rx26:tx26 +lane_to_serdes_map_nif_lane27.BCM8885X=rx27:tx27 +lane_to_serdes_map_nif_lane28.BCM8885X=rx28:tx28 +lane_to_serdes_map_nif_lane29.BCM8885X=rx29:tx29 +lane_to_serdes_map_nif_lane30.BCM8885X=rx30:tx30 +lane_to_serdes_map_nif_lane31.BCM8885X=rx31:tx31 + +lane_to_serdes_map_nif_lane32.BCM8885X=rx32:tx32 +lane_to_serdes_map_nif_lane33.BCM8885X=rx33:tx33 +lane_to_serdes_map_nif_lane34.BCM8885X=rx34:tx34 +lane_to_serdes_map_nif_lane35.BCM8885X=rx35:tx35 +lane_to_serdes_map_nif_lane36.BCM8885X=rx36:tx36 +lane_to_serdes_map_nif_lane37.BCM8885X=rx37:tx37 +lane_to_serdes_map_nif_lane38.BCM8885X=rx38:tx38 +lane_to_serdes_map_nif_lane39.BCM8885X=rx39:tx39 + +lane_to_serdes_map_nif_lane40.BCM8885X=rx40:tx40 +lane_to_serdes_map_nif_lane41.BCM8885X=rx41:tx41 +lane_to_serdes_map_nif_lane42.BCM8885X=rx42:tx42 +lane_to_serdes_map_nif_lane43.BCM8885X=rx43:tx43 +lane_to_serdes_map_nif_lane44.BCM8885X=rx44:tx44 +lane_to_serdes_map_nif_lane45.BCM8885X=rx45:tx45 +lane_to_serdes_map_nif_lane46.BCM8885X=rx46:tx46 +lane_to_serdes_map_nif_lane47.BCM8885X=rx47:tx47 + +lane_to_serdes_map_nif_lane48.BCM8885X=rx48:tx48 +lane_to_serdes_map_nif_lane49.BCM8885X=rx49:tx49 +lane_to_serdes_map_nif_lane50.BCM8885X=rx50:tx50 +lane_to_serdes_map_nif_lane51.BCM8885X=rx51:tx51 +lane_to_serdes_map_nif_lane52.BCM8885X=rx52:tx52 +lane_to_serdes_map_nif_lane53.BCM8885X=rx53:tx53 +lane_to_serdes_map_nif_lane54.BCM8885X=rx54:tx54 +lane_to_serdes_map_nif_lane55.BCM8885X=rx55:tx55 + +lane_to_serdes_map_nif_lane56.BCM8885X=rx56:tx56 +lane_to_serdes_map_nif_lane57.BCM8885X=rx57:tx57 +lane_to_serdes_map_nif_lane58.BCM8885X=rx58:tx58 +lane_to_serdes_map_nif_lane59.BCM8885X=rx59:tx59 +lane_to_serdes_map_nif_lane60.BCM8885X=rx60:tx60 +lane_to_serdes_map_nif_lane61.BCM8885X=rx61:tx61 +lane_to_serdes_map_nif_lane62.BCM8885X=rx62:tx62 +lane_to_serdes_map_nif_lane63.BCM8885X=rx63:tx63 + +lane_to_serdes_map_nif_lane64.BCM8885X=rx64:tx64 +lane_to_serdes_map_nif_lane65.BCM8885X=rx65:tx65 +lane_to_serdes_map_nif_lane66.BCM8885X=rx66:tx66 +lane_to_serdes_map_nif_lane67.BCM8885X=rx67:tx67 +lane_to_serdes_map_nif_lane68.BCM8885X=rx68:tx68 +lane_to_serdes_map_nif_lane69.BCM8885X=rx69:tx69 +lane_to_serdes_map_nif_lane70.BCM8885X=rx70:tx70 +lane_to_serdes_map_nif_lane71.BCM8885X=rx71:tx71 + +lane_to_serdes_map_nif_lane72.BCM8885X=rx72:tx72 +lane_to_serdes_map_nif_lane73.BCM8885X=rx73:tx73 +lane_to_serdes_map_nif_lane74.BCM8885X=rx74:tx74 +lane_to_serdes_map_nif_lane75.BCM8885X=rx75:tx75 +lane_to_serdes_map_nif_lane76.BCM8885X=rx76:tx76 +lane_to_serdes_map_nif_lane77.BCM8885X=rx77:tx77 +lane_to_serdes_map_nif_lane78.BCM8885X=rx78:tx78 +lane_to_serdes_map_nif_lane79.BCM8885X=rx79:tx79 + +lane_to_serdes_map_nif_lane80.BCM8885X=rx80:tx80 +lane_to_serdes_map_nif_lane81.BCM8885X=rx81:tx81 +lane_to_serdes_map_nif_lane82.BCM8885X=rx82:tx82 +lane_to_serdes_map_nif_lane83.BCM8885X=rx83:tx83 +lane_to_serdes_map_nif_lane84.BCM8885X=rx84:tx84 +lane_to_serdes_map_nif_lane85.BCM8885X=rx85:tx85 +lane_to_serdes_map_nif_lane86.BCM8885X=rx86:tx86 +lane_to_serdes_map_nif_lane87.BCM8885X=rx87:tx87 + +lane_to_serdes_map_nif_lane88.BCM8885X=rx88:tx88 +lane_to_serdes_map_nif_lane89.BCM8885X=rx89:tx89 +lane_to_serdes_map_nif_lane90.BCM8885X=rx90:tx90 +lane_to_serdes_map_nif_lane91.BCM8885X=rx91:tx91 +lane_to_serdes_map_nif_lane92.BCM8885X=rx92:tx92 +lane_to_serdes_map_nif_lane93.BCM8885X=rx93:tx93 +lane_to_serdes_map_nif_lane94.BCM8885X=rx94:tx94 +lane_to_serdes_map_nif_lane95.BCM8885X=rx95:tx95 + +lane_to_serdes_map_nif_lane96.BCM8885X=rx96:tx96 +lane_to_serdes_map_nif_lane97.BCM8885X=rx97:tx97 +lane_to_serdes_map_nif_lane98.BCM8885X=rx98:tx98 +lane_to_serdes_map_nif_lane99.BCM8885X=rx99:tx99 +lane_to_serdes_map_nif_lane100.BCM8885X=rx100:tx100 +lane_to_serdes_map_nif_lane101.BCM8885X=rx101:tx101 +lane_to_serdes_map_nif_lane102.BCM8885X=rx102:tx102 +lane_to_serdes_map_nif_lane103.BCM8885X=rx103:tx103 + +lane_to_serdes_map_nif_lane104.BCM8885X=rx104:tx104 +lane_to_serdes_map_nif_lane105.BCM8885X=rx105:tx105 +lane_to_serdes_map_nif_lane106.BCM8885X=rx106:tx106 +lane_to_serdes_map_nif_lane107.BCM8885X=rx107:tx107 +lane_to_serdes_map_nif_lane108.BCM8885X=rx108:tx108 +lane_to_serdes_map_nif_lane109.BCM8885X=rx109:tx109 +lane_to_serdes_map_nif_lane110.BCM8885X=rx110:tx110 +lane_to_serdes_map_nif_lane111.BCM8885X=rx111:tx111 + +lane_to_serdes_map_nif_lane112.BCM8885X=rx112:tx112 +lane_to_serdes_map_nif_lane113.BCM8885X=rx113:tx113 +lane_to_serdes_map_nif_lane114.BCM8885X=rx114:tx114 +lane_to_serdes_map_nif_lane115.BCM8885X=rx115:tx115 +lane_to_serdes_map_nif_lane116.BCM8885X=rx116:tx116 +lane_to_serdes_map_nif_lane117.BCM8885X=rx117:tx117 +lane_to_serdes_map_nif_lane118.BCM8885X=rx118:tx118 +lane_to_serdes_map_nif_lane119.BCM8885X=rx119:tx119 + +lane_to_serdes_map_nif_lane120.BCM8885X=rx120:tx120 +lane_to_serdes_map_nif_lane121.BCM8885X=rx121:tx121 +lane_to_serdes_map_nif_lane122.BCM8885X=rx122:tx122 +lane_to_serdes_map_nif_lane123.BCM8885X=rx123:tx123 +lane_to_serdes_map_nif_lane124.BCM8885X=rx124:tx124 +lane_to_serdes_map_nif_lane125.BCM8885X=rx125:tx125 +lane_to_serdes_map_nif_lane126.BCM8885X=rx126:tx126 +lane_to_serdes_map_nif_lane127.BCM8885X=rx127:tx127 + +lane_to_serdes_map_nif_lane128.BCM8885X=rx128:tx128 +lane_to_serdes_map_nif_lane129.BCM8885X=rx129:tx129 +lane_to_serdes_map_nif_lane130.BCM8885X=rx130:tx130 +lane_to_serdes_map_nif_lane131.BCM8885X=rx131:tx131 +lane_to_serdes_map_nif_lane132.BCM8885X=rx132:tx132 +lane_to_serdes_map_nif_lane133.BCM8885X=rx133:tx133 +lane_to_serdes_map_nif_lane134.BCM8885X=rx134:tx134 +lane_to_serdes_map_nif_lane135.BCM8885X=rx135:tx135 + +lane_to_serdes_map_nif_lane136.BCM8885X=rx136:tx136 +lane_to_serdes_map_nif_lane137.BCM8885X=rx137:tx137 +lane_to_serdes_map_nif_lane138.BCM8885X=rx138:tx138 +lane_to_serdes_map_nif_lane139.BCM8885X=rx139:tx139 +lane_to_serdes_map_nif_lane140.BCM8885X=rx140:tx140 +lane_to_serdes_map_nif_lane141.BCM8885X=rx141:tx141 +lane_to_serdes_map_nif_lane142.BCM8885X=rx142:tx142 +lane_to_serdes_map_nif_lane143.BCM8885X=rx143:tx143 + + +mdb_profile=Balanced-Exem +mdb_profile_kaps_cfg.BCM8885X=2 +mdio_output_delay=16 +mem_cache_enable_ecc.BCM8885X=1 +mem_cache_enable_parity.BCM8885X=1 +miim_intr_enable.BCM8885X=0 +os=unix +outlif_logical_to_physical_phase_map_1=S1 +outlif_logical_to_physical_phase_map_2=L1 +outlif_logical_to_physical_phase_map_3=XL +outlif_logical_to_physical_phase_map_4=L2 +outlif_logical_to_physical_phase_map_5=M1 +outlif_logical_to_physical_phase_map_6=M2 +outlif_logical_to_physical_phase_map_7=M3 +outlif_logical_to_physical_phase_map_8=S2 +outlif_physical_phase_data_granularity_L1=60 +outlif_physical_phase_data_granularity_L2=60 +outlif_physical_phase_data_granularity_M1=60 +outlif_physical_phase_data_granularity_M2=60 +outlif_physical_phase_data_granularity_M3=60 +outlif_physical_phase_data_granularity_S1=60 +outlif_physical_phase_data_granularity_S2=60 +outlif_physical_phase_data_granularity_XL=60 +pdma_continuous_mode_enable.BCM8885X=1 + + +phy_rx_polarity_flip_phy0.BCM8885X=0 +phy_rx_polarity_flip_phy1.BCM8885X=0 +phy_rx_polarity_flip_phy2.BCM8885X=1 +phy_rx_polarity_flip_phy3.BCM8885X=0 +phy_rx_polarity_flip_phy4.BCM8885X=0 +phy_rx_polarity_flip_phy5.BCM8885X=0 +phy_rx_polarity_flip_phy6.BCM8885X=1 +phy_rx_polarity_flip_phy7.BCM8885X=0 + +phy_rx_polarity_flip_phy8.BCM8885X=0 +phy_rx_polarity_flip_phy9.BCM8885X=1 +phy_rx_polarity_flip_phy10.BCM8885X=1 +phy_rx_polarity_flip_phy11.BCM8885X=1 +phy_rx_polarity_flip_phy12.BCM8885X=1 +phy_rx_polarity_flip_phy13.BCM8885X=0 +phy_rx_polarity_flip_phy14.BCM8885X=0 +phy_rx_polarity_flip_phy15.BCM8885X=1 + +phy_rx_polarity_flip_phy16.BCM8885X=1 +phy_rx_polarity_flip_phy17.BCM8885X=0 +phy_rx_polarity_flip_phy18.BCM8885X=1 +phy_rx_polarity_flip_phy19.BCM8885X=0 +phy_rx_polarity_flip_phy20.BCM8885X=1 +phy_rx_polarity_flip_phy21.BCM8885X=1 +phy_rx_polarity_flip_phy22.BCM8885X=1 +phy_rx_polarity_flip_phy23.BCM8885X=1 + +phy_rx_polarity_flip_phy24.BCM8885X=0 +phy_rx_polarity_flip_phy25.BCM8885X=1 +phy_rx_polarity_flip_phy26.BCM8885X=0 +phy_rx_polarity_flip_phy27.BCM8885X=1 +phy_rx_polarity_flip_phy28.BCM8885X=1 +phy_rx_polarity_flip_phy29.BCM8885X=1 +phy_rx_polarity_flip_phy30.BCM8885X=0 +phy_rx_polarity_flip_phy31.BCM8885X=1 + +phy_rx_polarity_flip_phy32.BCM8885X=1 +phy_rx_polarity_flip_phy33.BCM8885X=0 +phy_rx_polarity_flip_phy34.BCM8885X=1 +phy_rx_polarity_flip_phy35.BCM8885X=0 +phy_rx_polarity_flip_phy36.BCM8885X=0 +phy_rx_polarity_flip_phy37.BCM8885X=0 +phy_rx_polarity_flip_phy38.BCM8885X=0 +phy_rx_polarity_flip_phy39.BCM8885X=1 + +phy_rx_polarity_flip_phy40.BCM8885X=1 +phy_rx_polarity_flip_phy41.BCM8885X=1 +phy_rx_polarity_flip_phy42.BCM8885X=0 +phy_rx_polarity_flip_phy43.BCM8885X=1 +phy_rx_polarity_flip_phy44.BCM8885X=1 +phy_rx_polarity_flip_phy45.BCM8885X=0 +phy_rx_polarity_flip_phy46.BCM8885X=0 +phy_rx_polarity_flip_phy47.BCM8885X=1 + +phy_rx_polarity_flip_phy48.BCM8885X=0 +phy_rx_polarity_flip_phy49.BCM8885X=1 +phy_rx_polarity_flip_phy50.BCM8885X=0 +phy_rx_polarity_flip_phy51.BCM8885X=0 +phy_rx_polarity_flip_phy52.BCM8885X=0 +phy_rx_polarity_flip_phy53.BCM8885X=1 +phy_rx_polarity_flip_phy54.BCM8885X=0 +phy_rx_polarity_flip_phy55.BCM8885X=0 + +phy_rx_polarity_flip_phy56.BCM8885X=0 +phy_rx_polarity_flip_phy57.BCM8885X=0 +phy_rx_polarity_flip_phy58.BCM8885X=0 +phy_rx_polarity_flip_phy59.BCM8885X=0 +phy_rx_polarity_flip_phy60.BCM8885X=0 +phy_rx_polarity_flip_phy61.BCM8885X=0 +phy_rx_polarity_flip_phy62.BCM8885X=1 +phy_rx_polarity_flip_phy63.BCM8885X=1 + +phy_rx_polarity_flip_phy64.BCM8885X=0 +phy_rx_polarity_flip_phy65.BCM8885X=0 +phy_rx_polarity_flip_phy66.BCM8885X=0 +phy_rx_polarity_flip_phy67.BCM8885X=0 +phy_rx_polarity_flip_phy68.BCM8885X=0 +phy_rx_polarity_flip_phy69.BCM8885X=0 +phy_rx_polarity_flip_phy70.BCM8885X=0 +phy_rx_polarity_flip_phy71.BCM8885X=0 + +phy_rx_polarity_flip_phy72.BCM8885X=1 +phy_rx_polarity_flip_phy73.BCM8885X=0 +phy_rx_polarity_flip_phy74.BCM8885X=0 +phy_rx_polarity_flip_phy75.BCM8885X=1 +phy_rx_polarity_flip_phy76.BCM8885X=1 +phy_rx_polarity_flip_phy77.BCM8885X=1 +phy_rx_polarity_flip_phy78.BCM8885X=0 +phy_rx_polarity_flip_phy79.BCM8885X=1 + +phy_rx_polarity_flip_phy80.BCM8885X=1 +phy_rx_polarity_flip_phy81.BCM8885X=0 +phy_rx_polarity_flip_phy82.BCM8885X=1 +phy_rx_polarity_flip_phy83.BCM8885X=1 +phy_rx_polarity_flip_phy84.BCM8885X=0 +phy_rx_polarity_flip_phy85.BCM8885X=0 +phy_rx_polarity_flip_phy86.BCM8885X=1 +phy_rx_polarity_flip_phy87.BCM8885X=1 + +phy_rx_polarity_flip_phy88.BCM8885X=0 +phy_rx_polarity_flip_phy89.BCM8885X=1 +phy_rx_polarity_flip_phy90.BCM8885X=0 +phy_rx_polarity_flip_phy91.BCM8885X=0 +phy_rx_polarity_flip_phy92.BCM8885X=0 +phy_rx_polarity_flip_phy93.BCM8885X=0 +phy_rx_polarity_flip_phy94.BCM8885X=0 +phy_rx_polarity_flip_phy95.BCM8885X=1 + +phy_rx_polarity_flip_phy96.BCM8885X=0 +phy_rx_polarity_flip_phy97.BCM8885X=0 +phy_rx_polarity_flip_phy98.BCM8885X=0 +phy_rx_polarity_flip_phy99.BCM8885X=0 +phy_rx_polarity_flip_phy100.BCM8885X=0 +phy_rx_polarity_flip_phy101.BCM8885X=1 +phy_rx_polarity_flip_phy102.BCM8885X=1 +phy_rx_polarity_flip_phy103.BCM8885X=0 + +phy_rx_polarity_flip_phy104.BCM8885X=1 +phy_rx_polarity_flip_phy105.BCM8885X=1 +phy_rx_polarity_flip_phy106.BCM8885X=1 +phy_rx_polarity_flip_phy107.BCM8885X=1 +phy_rx_polarity_flip_phy108.BCM8885X=0 +phy_rx_polarity_flip_phy109.BCM8885X=1 +phy_rx_polarity_flip_phy110.BCM8885X=1 +phy_rx_polarity_flip_phy111.BCM8885X=1 + +phy_rx_polarity_flip_phy112.BCM8885X=0 +phy_rx_polarity_flip_phy113.BCM8885X=1 +phy_rx_polarity_flip_phy114.BCM8885X=1 +phy_rx_polarity_flip_phy115.BCM8885X=1 +phy_rx_polarity_flip_phy116.BCM8885X=1 +phy_rx_polarity_flip_phy117.BCM8885X=1 +phy_rx_polarity_flip_phy118.BCM8885X=0 +phy_rx_polarity_flip_phy119.BCM8885X=0 + +phy_rx_polarity_flip_phy120.BCM8885X=1 +phy_rx_polarity_flip_phy121.BCM8885X=0 +phy_rx_polarity_flip_phy122.BCM8885X=0 +phy_rx_polarity_flip_phy123.BCM8885X=1 +phy_rx_polarity_flip_phy124.BCM8885X=0 +phy_rx_polarity_flip_phy125.BCM8885X=1 +phy_rx_polarity_flip_phy126.BCM8885X=1 +phy_rx_polarity_flip_phy127.BCM8885X=0 + +phy_rx_polarity_flip_phy128.BCM8885X=0 +phy_rx_polarity_flip_phy129.BCM8885X=0 +phy_rx_polarity_flip_phy130.BCM8885X=1 +phy_rx_polarity_flip_phy131.BCM8885X=0 +phy_rx_polarity_flip_phy132.BCM8885X=0 +phy_rx_polarity_flip_phy133.BCM8885X=1 +phy_rx_polarity_flip_phy134.BCM8885X=1 +phy_rx_polarity_flip_phy135.BCM8885X=0 + +phy_rx_polarity_flip_phy136.BCM8885X=1 +phy_rx_polarity_flip_phy137.BCM8885X=0 +phy_rx_polarity_flip_phy138.BCM8885X=0 +phy_rx_polarity_flip_phy139.BCM8885X=1 +phy_rx_polarity_flip_phy140.BCM8885X=1 +phy_rx_polarity_flip_phy141.BCM8885X=1 +phy_rx_polarity_flip_phy142.BCM8885X=0 +phy_rx_polarity_flip_phy143.BCM8885X=1 + + +phy_tx_polarity_flip_phy0.BCM8885X=1 +phy_tx_polarity_flip_phy1.BCM8885X=1 +phy_tx_polarity_flip_phy2.BCM8885X=0 +phy_tx_polarity_flip_phy3.BCM8885X=1 +phy_tx_polarity_flip_phy4.BCM8885X=1 +phy_tx_polarity_flip_phy5.BCM8885X=0 +phy_tx_polarity_flip_phy6.BCM8885X=0 +phy_tx_polarity_flip_phy7.BCM8885X=1 + +phy_tx_polarity_flip_phy8.BCM8885X=0 +phy_tx_polarity_flip_phy9.BCM8885X=1 +phy_tx_polarity_flip_phy10.BCM8885X=0 +phy_tx_polarity_flip_phy11.BCM8885X=1 +phy_tx_polarity_flip_phy12.BCM8885X=1 +phy_tx_polarity_flip_phy13.BCM8885X=1 +phy_tx_polarity_flip_phy14.BCM8885X=0 +phy_tx_polarity_flip_phy15.BCM8885X=1 + +phy_tx_polarity_flip_phy16.BCM8885X=1 +phy_tx_polarity_flip_phy17.BCM8885X=1 +phy_tx_polarity_flip_phy18.BCM8885X=0 +phy_tx_polarity_flip_phy19.BCM8885X=0 +phy_tx_polarity_flip_phy20.BCM8885X=1 +phy_tx_polarity_flip_phy21.BCM8885X=1 +phy_tx_polarity_flip_phy22.BCM8885X=0 +phy_tx_polarity_flip_phy23.BCM8885X=0 + +phy_tx_polarity_flip_phy24.BCM8885X=0 +phy_tx_polarity_flip_phy25.BCM8885X=0 +phy_tx_polarity_flip_phy26.BCM8885X=0 +phy_tx_polarity_flip_phy27.BCM8885X=1 +phy_tx_polarity_flip_phy28.BCM8885X=0 +phy_tx_polarity_flip_phy29.BCM8885X=0 +phy_tx_polarity_flip_phy30.BCM8885X=0 +phy_tx_polarity_flip_phy31.BCM8885X=0 + +phy_tx_polarity_flip_phy32.BCM8885X=1 +phy_tx_polarity_flip_phy33.BCM8885X=1 +phy_tx_polarity_flip_phy34.BCM8885X=1 +phy_tx_polarity_flip_phy35.BCM8885X=0 +phy_tx_polarity_flip_phy36.BCM8885X=1 +phy_tx_polarity_flip_phy37.BCM8885X=1 +phy_tx_polarity_flip_phy38.BCM8885X=1 +phy_tx_polarity_flip_phy39.BCM8885X=0 + +phy_tx_polarity_flip_phy40.BCM8885X=0 +phy_tx_polarity_flip_phy41.BCM8885X=0 +phy_tx_polarity_flip_phy42.BCM8885X=1 +phy_tx_polarity_flip_phy43.BCM8885X=1 +phy_tx_polarity_flip_phy44.BCM8885X=0 +phy_tx_polarity_flip_phy45.BCM8885X=0 +phy_tx_polarity_flip_phy46.BCM8885X=1 +phy_tx_polarity_flip_phy47.BCM8885X=0 + +phy_tx_polarity_flip_phy48.BCM8885X=1 +phy_tx_polarity_flip_phy49.BCM8885X=1 +phy_tx_polarity_flip_phy50.BCM8885X=1 +phy_tx_polarity_flip_phy51.BCM8885X=0 +phy_tx_polarity_flip_phy52.BCM8885X=1 +phy_tx_polarity_flip_phy53.BCM8885X=0 +phy_tx_polarity_flip_phy54.BCM8885X=0 +phy_tx_polarity_flip_phy55.BCM8885X=0 + +phy_tx_polarity_flip_phy56.BCM8885X=0 +phy_tx_polarity_flip_phy57.BCM8885X=1 +phy_tx_polarity_flip_phy58.BCM8885X=0 +phy_tx_polarity_flip_phy59.BCM8885X=0 +phy_tx_polarity_flip_phy60.BCM8885X=0 +phy_tx_polarity_flip_phy61.BCM8885X=0 +phy_tx_polarity_flip_phy62.BCM8885X=0 +phy_tx_polarity_flip_phy63.BCM8885X=0 + +phy_tx_polarity_flip_phy64.BCM8885X=0 +phy_tx_polarity_flip_phy65.BCM8885X=1 +phy_tx_polarity_flip_phy66.BCM8885X=1 +phy_tx_polarity_flip_phy67.BCM8885X=0 +phy_tx_polarity_flip_phy68.BCM8885X=1 +phy_tx_polarity_flip_phy69.BCM8885X=0 +phy_tx_polarity_flip_phy70.BCM8885X=0 +phy_tx_polarity_flip_phy71.BCM8885X=1 + +phy_tx_polarity_flip_phy72.BCM8885X=1 +phy_tx_polarity_flip_phy73.BCM8885X=1 +phy_tx_polarity_flip_phy74.BCM8885X=0 +phy_tx_polarity_flip_phy75.BCM8885X=1 +phy_tx_polarity_flip_phy76.BCM8885X=1 +phy_tx_polarity_flip_phy77.BCM8885X=1 +phy_tx_polarity_flip_phy78.BCM8885X=0 +phy_tx_polarity_flip_phy79.BCM8885X=1 + +phy_tx_polarity_flip_phy80.BCM8885X=1 +phy_tx_polarity_flip_phy81.BCM8885X=0 +phy_tx_polarity_flip_phy82.BCM8885X=0 +phy_tx_polarity_flip_phy83.BCM8885X=0 +phy_tx_polarity_flip_phy84.BCM8885X=0 +phy_tx_polarity_flip_phy85.BCM8885X=0 +phy_tx_polarity_flip_phy86.BCM8885X=1 +phy_tx_polarity_flip_phy87.BCM8885X=0 + +phy_tx_polarity_flip_phy88.BCM8885X=1 +phy_tx_polarity_flip_phy89.BCM8885X=0 +phy_tx_polarity_flip_phy90.BCM8885X=1 +phy_tx_polarity_flip_phy91.BCM8885X=1 +phy_tx_polarity_flip_phy92.BCM8885X=1 +phy_tx_polarity_flip_phy93.BCM8885X=0 +phy_tx_polarity_flip_phy94.BCM8885X=1 +phy_tx_polarity_flip_phy95.BCM8885X=1 + +phy_tx_polarity_flip_phy96.BCM8885X=1 +phy_tx_polarity_flip_phy97.BCM8885X=1 +phy_tx_polarity_flip_phy98.BCM8885X=1 +phy_tx_polarity_flip_phy99.BCM8885X=0 +phy_tx_polarity_flip_phy100.BCM8885X=1 +phy_tx_polarity_flip_phy101.BCM8885X=1 +phy_tx_polarity_flip_phy102.BCM8885X=1 +phy_tx_polarity_flip_phy103.BCM8885X=0 + +phy_tx_polarity_flip_phy104.BCM8885X=0 +phy_tx_polarity_flip_phy105.BCM8885X=0 +phy_tx_polarity_flip_phy106.BCM8885X=0 +phy_tx_polarity_flip_phy107.BCM8885X=1 +phy_tx_polarity_flip_phy108.BCM8885X=1 +phy_tx_polarity_flip_phy109.BCM8885X=0 +phy_tx_polarity_flip_phy110.BCM8885X=1 +phy_tx_polarity_flip_phy111.BCM8885X=0 + +phy_tx_polarity_flip_phy112.BCM8885X=0 +phy_tx_polarity_flip_phy113.BCM8885X=1 +phy_tx_polarity_flip_phy114.BCM8885X=1 +phy_tx_polarity_flip_phy115.BCM8885X=0 +phy_tx_polarity_flip_phy116.BCM8885X=0 +phy_tx_polarity_flip_phy117.BCM8885X=1 +phy_tx_polarity_flip_phy118.BCM8885X=0 +phy_tx_polarity_flip_phy119.BCM8885X=0 + +phy_tx_polarity_flip_phy120.BCM8885X=0 +phy_tx_polarity_flip_phy121.BCM8885X=1 +phy_tx_polarity_flip_phy122.BCM8885X=1 +phy_tx_polarity_flip_phy123.BCM8885X=0 +phy_tx_polarity_flip_phy124.BCM8885X=0 +phy_tx_polarity_flip_phy125.BCM8885X=0 +phy_tx_polarity_flip_phy126.BCM8885X=1 +phy_tx_polarity_flip_phy127.BCM8885X=0 + +phy_tx_polarity_flip_phy128.BCM8885X=1 +phy_tx_polarity_flip_phy129.BCM8885X=1 +phy_tx_polarity_flip_phy130.BCM8885X=0 +phy_tx_polarity_flip_phy131.BCM8885X=0 +phy_tx_polarity_flip_phy132.BCM8885X=0 +phy_tx_polarity_flip_phy133.BCM8885X=1 +phy_tx_polarity_flip_phy134.BCM8885X=0 +phy_tx_polarity_flip_phy135.BCM8885X=0 + +phy_tx_polarity_flip_phy136.BCM8885X=0 +phy_tx_polarity_flip_phy137.BCM8885X=0 +phy_tx_polarity_flip_phy138.BCM8885X=0 +phy_tx_polarity_flip_phy139.BCM8885X=0 +phy_tx_polarity_flip_phy140.BCM8885X=0 +phy_tx_polarity_flip_phy141.BCM8885X=0 +phy_tx_polarity_flip_phy142.BCM8885X=0 +phy_tx_polarity_flip_phy143.BCM8885X=0 + + +polled_irq_delay.BCM8885X=5 +polled_irq_mode.BCM8885X=0 +port_fec_fabric.BCM8885X=7 +bcm_stat_interval.BCM8885X=1000000 + + +port_init_cl72_1=0 +port_init_cl72_2=0 +port_init_cl72_3=0 +port_init_cl72_4=0 +port_init_cl72_5=0 +port_init_cl72_6=0 +port_init_cl72_7=0 +port_init_cl72_8=0 +port_init_cl72_9=0 +port_init_cl72_10=0 +port_init_cl72_11=0 +port_init_cl72_12=0 +port_init_cl72_13=0 +port_init_cl72_14=0 +port_init_cl72_15=0 +port_init_cl72_16=0 +port_init_cl72_17=0 +port_init_cl72_18=0 + +port_init_cl72_256=0 +port_init_cl72_257=0 +port_init_cl72_258=0 +port_init_cl72_259=0 +port_init_cl72_260=0 +port_init_cl72_261=0 +port_init_cl72_262=0 +port_init_cl72_263=0 +port_init_cl72_264=0 +port_init_cl72_265=0 +port_init_cl72_266=0 +port_init_cl72_267=0 +port_init_cl72_268=0 +port_init_cl72_269=0 +port_init_cl72_270=0 +port_init_cl72_271=0 +port_init_cl72_272=0 +port_init_cl72_273=0 +port_init_cl72_274=0 +port_init_cl72_275=0 +port_init_cl72_276=0 +port_init_cl72_277=0 +port_init_cl72_278=0 +port_init_cl72_279=0 +port_init_cl72_280=0 +port_init_cl72_281=0 +port_init_cl72_282=0 +port_init_cl72_283=0 +port_init_cl72_284=0 +port_init_cl72_285=0 +port_init_cl72_286=0 +port_init_cl72_287=0 +port_init_cl72_288=0 +port_init_cl72_289=0 +port_init_cl72_290=0 +port_init_cl72_291=0 +port_init_cl72_292=0 +port_init_cl72_293=0 +port_init_cl72_294=0 +port_init_cl72_295=0 +port_init_cl72_296=0 +port_init_cl72_297=0 +port_init_cl72_298=0 +port_init_cl72_299=0 +port_init_cl72_300=0 +port_init_cl72_301=0 +port_init_cl72_302=0 +port_init_cl72_303=0 +port_init_cl72_304=0 +port_init_cl72_305=0 +port_init_cl72_306=0 +port_init_cl72_307=0 +port_init_cl72_308=0 +port_init_cl72_309=0 +port_init_cl72_310=0 +port_init_cl72_311=0 +port_init_cl72_312=0 +port_init_cl72_313=0 +port_init_cl72_314=0 +port_init_cl72_315=0 +port_init_cl72_316=0 +port_init_cl72_317=0 +port_init_cl72_318=0 +port_init_cl72_319=0 +port_init_cl72_320=0 +port_init_cl72_321=0 +port_init_cl72_322=0 +port_init_cl72_323=0 +port_init_cl72_324=0 +port_init_cl72_325=0 +port_init_cl72_326=0 +port_init_cl72_327=0 +port_init_cl72_328=0 +port_init_cl72_329=0 +port_init_cl72_330=0 +port_init_cl72_331=0 +port_init_cl72_332=0 +port_init_cl72_333=0 +port_init_cl72_334=0 +port_init_cl72_335=0 +port_init_cl72_336=0 +port_init_cl72_337=0 +port_init_cl72_338=0 +port_init_cl72_339=0 +port_init_cl72_340=0 +port_init_cl72_341=0 +port_init_cl72_342=0 +port_init_cl72_343=0 +port_init_cl72_344=0 +port_init_cl72_345=0 +port_init_cl72_346=0 +port_init_cl72_347=0 +port_init_cl72_348=0 +port_init_cl72_349=0 +port_init_cl72_350=0 +port_init_cl72_351=0 +port_init_cl72_352=0 +port_init_cl72_353=0 +port_init_cl72_354=0 +port_init_cl72_355=0 +port_init_cl72_356=0 +port_init_cl72_357=0 +port_init_cl72_358=0 +port_init_cl72_359=0 +port_init_cl72_360=0 +port_init_cl72_361=0 +port_init_cl72_362=0 +port_init_cl72_363=0 +port_init_cl72_364=0 +port_init_cl72_365=0 +port_init_cl72_366=0 +port_init_cl72_367=0 +port_init_cl72_368=0 +port_init_cl72_369=0 +port_init_cl72_370=0 +port_init_cl72_371=0 +port_init_cl72_372=0 +port_init_cl72_373=0 +port_init_cl72_374=0 +port_init_cl72_375=0 +port_init_cl72_376=0 +port_init_cl72_377=0 +port_init_cl72_378=0 +port_init_cl72_379=0 +port_init_cl72_380=0 +port_init_cl72_381=0 +port_init_cl72_382=0 +port_init_cl72_383=0 +port_init_cl72_384=0 +port_init_cl72_385=0 +port_init_cl72_386=0 +port_init_cl72_387=0 +port_init_cl72_388=0 +port_init_cl72_389=0 +port_init_cl72_390=0 +port_init_cl72_391=0 +port_init_cl72_392=0 +port_init_cl72_393=0 +port_init_cl72_394=0 +port_init_cl72_395=0 +port_init_cl72_396=0 +port_init_cl72_397=0 +port_init_cl72_398=0 +port_init_cl72_399=0 +port_init_cl72_400=0 +port_init_cl72_401=0 +port_init_cl72_402=0 +port_init_cl72_403=0 +port_init_cl72_404=0 +port_init_cl72_405=0 +port_init_cl72_406=0 +port_init_cl72_407=0 +port_init_cl72_408=0 +port_init_cl72_409=0 +port_init_cl72_410=0 +port_init_cl72_411=0 +port_init_cl72_412=0 +port_init_cl72_413=0 +port_init_cl72_414=0 +port_init_cl72_415=0 +port_init_cl72_416=0 +port_init_cl72_417=0 +port_init_cl72_418=0 +port_init_cl72_419=0 +port_init_cl72_420=0 +port_init_cl72_421=0 +port_init_cl72_422=0 +port_init_cl72_423=0 +port_init_cl72_424=0 +port_init_cl72_425=0 +port_init_cl72_426=0 +port_init_cl72_427=0 +port_init_cl72_428=0 +port_init_cl72_429=0 +port_init_cl72_430=0 +port_init_cl72_431=0 +port_init_cl72_432=0 +port_init_cl72_433=0 +port_init_cl72_434=0 +port_init_cl72_435=0 +port_init_cl72_436=0 +port_init_cl72_437=0 +port_init_cl72_438=0 +port_init_cl72_439=0 +port_init_cl72_440=0 +port_init_cl72_441=0 +port_init_cl72_442=0 +port_init_cl72_443=0 +port_init_cl72_444=0 +port_init_cl72_445=0 +port_init_cl72_446=0 +port_init_cl72_447=0 + + +port_init_speed_cc.BCM8885X=200000 +port_init_speed_cd.BCM8885X=400000 +port_init_speed_ce.BCM8885X=100000 +port_init_speed_fabric.BCM8885X=53125 +port_init_speed_il.BCM8885X=10312 +port_init_speed_le.BCM8885X=50000 +port_init_speed_xe.BCM8885X=10000 +port_init_speed_xl.BCM8885X=40000 +port_priorities.BCM8885X=8 +protocol_traps_mode.BCM8885X=IN_LIF +rate_ext_mdio_divisor=16 +schan_intr_enable.BCM8885X=0 +schan_timeout_usec.BCM8885X=900000 +serdes_fabric_clk_freq_in.BCM8885X=1 +serdes_fabric_clk_freq_out.BCM8885X=bypass +serdes_nif_clk_freq_in0.BCM8885X=1 +serdes_nif_clk_freq_in1.BCM8885X=1 +serdes_nif_clk_freq_out0.BCM8885X=bypass +serdes_nif_clk_freq_out1.BCM8885X=bypass +soc_family.BCM8885X=BCM8885X +stable_filename.BCM8885X=/tmp/warmboot_data +stable_location.BCM8885X=3 +stable_size.BCM8885X=800000000 +sw_state_max_size.BCM8885X=750000000 +system_headers_mode=1 +tdma_intr_enable.BCM8885X=0 +tdma_timeout_usec.BCM8885X=1000000 +tm_port_header_type_in_0.BCM8885X=INJECTED_2 +tm_port_header_type_in_200.BCM8885X=INJECTED_2_PP +tm_port_header_type_in_201.BCM8885X=INJECTED_2_PP +tm_port_header_type_in_202.BCM8885X=INJECTED_2_PP +tm_port_header_type_in_203.BCM8885X=INJECTED_2_PP +tm_port_header_type_in_232.BCM8885X=INJECTED_2 +tm_port_header_type_in_19.BCM8885X=ETH +tm_port_header_type_in_20.BCM8885X=INJECTED_2 +tm_port_header_type_out_0.BCM8885X=CPU +tm_port_header_type_out_200.BCM8885X=ETH +tm_port_header_type_out_201.BCM8885X=ETH +tm_port_header_type_out_202.BCM8885X=ETH +tm_port_header_type_out_203.BCM8885X=ETH +tm_port_header_type_out_232.BCM8885X=CPU +tm_port_header_type_out_19.BCM8885X=ETH +tm_port_header_type_out_20.BCM8885X=RAW +tslam_intr_enable.BCM8885X=0 +tslam_timeout_usec.BCM8885X=1000000 +ucode_port_0.BCM8885X=CPU.0:core_0.0 +ucode_port_200.BCM8885X=CPU.8:core_1.200 +ucode_port_201.BCM8885X=CPU.16:core_1.201 +ucode_port_202.BCM8885X=CPU.24:core_1.202 +ucode_port_203.BCM8885X=CPU.32:core_1.203 + + +ucode_port_1.BCM8885X=CGE18:core_1.1 +ucode_port_2.BCM8885X=CGE20:core_1.2 +ucode_port_3.BCM8885X=CGE22:core_1.3 +ucode_port_4.BCM8885X=CGE24:core_1.4 +ucode_port_5.BCM8885X=CGE26:core_1.5 +ucode_port_6.BCM8885X=CGE28:core_1.6 +ucode_port_7.BCM8885X=CGE30:core_1.7 +ucode_port_8.BCM8885X=CGE32:core_1.8 +ucode_port_9.BCM8885X=CGE34:core_1.9 +ucode_port_10.BCM8885X=CGE16:core_0.10 +ucode_port_11.BCM8885X=CGE14:core_0.11 +ucode_port_12.BCM8885X=CGE12:core_0.12 +ucode_port_13.BCM8885X=CGE10:core_0.13 +ucode_port_14.BCM8885X=CGE8:core_0.14 +ucode_port_15.BCM8885X=CGE6:core_0.15 +ucode_port_16.BCM8885X=CGE4:core_0.16 +ucode_port_17.BCM8885X=CGE2:core_0.17 +ucode_port_18.BCM8885X=CGE0:core_0.18 + + +ucode_port_19.BCM8885X=RCY0:core_0.19 +ucode_port_20.BCM8885X=RCY1:core_1.20 +ucode_port_21.BCM8885X=OLP:core_1.21 + + +port_init_speed_1.BCM8885X=100000 +port_init_speed_2.BCM8885X=100000 +port_init_speed_3.BCM8885X=100000 +port_init_speed_4.BCM8885X=100000 +port_init_speed_5.BCM8885X=100000 +port_init_speed_6.BCM8885X=100000 +port_init_speed_7.BCM8885X=100000 +port_init_speed_8.BCM8885X=100000 +port_init_speed_9.BCM8885X=100000 +port_init_speed_10.BCM8885X=100000 +port_init_speed_11.BCM8885X=100000 +port_init_speed_12.BCM8885X=100000 +port_init_speed_13.BCM8885X=100000 +port_init_speed_14.BCM8885X=100000 +port_init_speed_15.BCM8885X=100000 +port_init_speed_16.BCM8885X=100000 +port_init_speed_17.BCM8885X=100000 +port_init_speed_18.BCM8885X=100000 + + +port_fec_1.BCM8885X=0 +port_fec_2.BCM8885X=0 +port_fec_3.BCM8885X=0 +port_fec_4.BCM8885X=0 +port_fec_5.BCM8885x=0 +port_fec_6.BCM8885x=0 +port_fec_7.BCM8885x=0 +port_fec_8.BCM8885x=0 +port_fec_9.BCM8885x=0 +port_fec_10.BCM8885x=0 +port_fec_11.BCM8885x=0 +port_fec_12.BCM8885x=0 +port_fec_13.BCM8885x=0 +port_fec_14.BCM8885x=0 +port_fec_15.BCM8885x=0 +port_fec_16.BCM8885x=0 +port_fec_17.BCM8885x=0 +port_fec_18.BCM8885x=0 + + +serdes_lane_config_dfe_1.BCM8885X=lp +serdes_lane_config_dfe_2.BCM8885X=lp +serdes_lane_config_dfe_3.BCM8885X=lp +serdes_lane_config_dfe_4.BCM8885X=lp +serdes_lane_config_dfe_5.BCM8885X=lp +serdes_lane_config_dfe_6.BCM8885X=lp +serdes_lane_config_dfe_7.BCM8885X=lp +serdes_lane_config_dfe_8.BCM8885X=lp +serdes_lane_config_dfe_9.BCM8885X=lp +serdes_lane_config_dfe_10.BCM8885X=lp +serdes_lane_config_dfe_11.BCM8885X=lp +serdes_lane_config_dfe_12.BCM8885X=lp +serdes_lane_config_dfe_13.BCM8885X=lp +serdes_lane_config_dfe_14.BCM8885X=lp +serdes_lane_config_dfe_15.BCM8885X=lp +serdes_lane_config_dfe_16.BCM8885X=lp +serdes_lane_config_dfe_17.BCM8885X=lp +serdes_lane_config_dfe_18.BCM8885X=lp + + +serdes_lane_config_media_type_1.BCM8885X=backplane +serdes_lane_config_media_type_2.BCM8885X=backplane +serdes_lane_config_media_type_3.BCM8885X=backplane +serdes_lane_config_media_type_4.BCM8885X=backplane +serdes_lane_config_media_type_5.BCM8885X=backplane +serdes_lane_config_media_type_6.BCM8885X=backplane +serdes_lane_config_media_type_7.BCM8885X=backplane +serdes_lane_config_media_type_8.BCM8885X=backplane +serdes_lane_config_media_type_9.BCM8885X=backplane +serdes_lane_config_media_type_10.BCM8885X=backplane +serdes_lane_config_media_type_11.BCM8885X=backplane +serdes_lane_config_media_type_12.BCM8885X=backplane +serdes_lane_config_media_type_13.BCM8885X=backplane +serdes_lane_config_media_type_14.BCM8885X=backplane +serdes_lane_config_media_type_15.BCM8885X=backplane +serdes_lane_config_media_type_16.BCM8885X=backplane +serdes_lane_config_media_type_17.BCM8885X=backplane +serdes_lane_config_media_type_18.BCM8885X=backplane + + +serdes_tx_taps_1.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_2.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_3.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_4.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_5.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_6.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_7.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_8.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_9.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_10.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_11.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_12.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_13.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_14.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_15.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_16.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_17.BCM8885X=nrz:-6:87:-4 +serdes_tx_taps_18.BCM8885X=nrz:-6:87:-4 + + +serdes_tx_taps_256.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_257.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_258.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_259.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_260.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_261.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_262.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_263.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_264.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_265.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_266.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_267.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_268.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_269.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_270.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_271.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_272.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_273.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_274.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_275.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_276.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_277.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_278.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_279.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_280.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_281.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_282.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_283.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_284.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_285.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_286.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_287.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_288.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_289.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_290.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_291.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_292.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_293.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_294.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_295.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_296.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_297.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_298.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_299.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_300.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_301.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_302.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_303.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_304.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_305.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_306.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_307.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_308.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_309.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_310.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_311.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_312.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_313.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_314.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_315.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_316.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_317.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_318.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_319.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_320.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_321.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_322.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_323.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_324.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_325.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_326.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_327.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_328.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_329.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_330.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_331.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_332.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_333.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_334.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_335.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_336.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_337.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_338.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_339.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_340.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_341.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_342.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_343.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_344.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_345.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_346.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_347.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_348.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_349.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_350.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_351.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_352.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_353.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_354.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_355.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_356.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_357.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_358.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_359.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_360.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_361.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_362.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_363.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_364.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_365.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_366.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_367.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_368.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_369.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_370.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_371.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_372.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_373.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_374.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_375.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_376.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_377.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_378.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_379.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_380.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_381.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_382.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_383.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_384.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_385.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_386.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_387.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_388.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_389.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_390.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_391.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_392.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_393.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_394.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_395.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_396.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_397.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_398.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_399.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_400.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_401.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_402.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_403.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_404.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_405.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_406.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_407.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_408.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_409.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_410.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_411.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_412.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_413.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_414.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_415.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_416.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_417.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_418.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_419.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_420.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_421.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_422.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_423.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_424.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_425.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_426.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_427.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_428.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_429.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_430.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_431.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_432.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_433.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_434.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_435.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_436.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_437.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_438.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_439.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_440.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_441.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_442.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_443.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_444.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_445.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_446.BCM8885X=pam4:-20:148:0:0:0:0 +serdes_tx_taps_447.BCM8885X=pam4:-20:148:0:0:0:0 + + +serdes_lane_config_channel_mode_256=force_nr +serdes_lane_config_channel_mode_257=force_nr +serdes_lane_config_channel_mode_258=force_nr +serdes_lane_config_channel_mode_259=force_nr +serdes_lane_config_channel_mode_260=force_nr +serdes_lane_config_channel_mode_261=force_nr +serdes_lane_config_channel_mode_262=force_nr +serdes_lane_config_channel_mode_263=force_nr +serdes_lane_config_channel_mode_264=force_nr +serdes_lane_config_channel_mode_265=force_nr +serdes_lane_config_channel_mode_266=force_nr +serdes_lane_config_channel_mode_267=force_nr +serdes_lane_config_channel_mode_268=force_nr +serdes_lane_config_channel_mode_269=force_nr +serdes_lane_config_channel_mode_270=force_nr +serdes_lane_config_channel_mode_271=force_nr +serdes_lane_config_channel_mode_272=force_nr +serdes_lane_config_channel_mode_273=force_nr +serdes_lane_config_channel_mode_274=force_nr +serdes_lane_config_channel_mode_275=force_nr +serdes_lane_config_channel_mode_276=force_nr +serdes_lane_config_channel_mode_277=force_nr +serdes_lane_config_channel_mode_278=force_nr +serdes_lane_config_channel_mode_279=force_nr +serdes_lane_config_channel_mode_280=force_nr +serdes_lane_config_channel_mode_281=force_nr +serdes_lane_config_channel_mode_282=force_nr +serdes_lane_config_channel_mode_283=force_nr +serdes_lane_config_channel_mode_284=force_nr +serdes_lane_config_channel_mode_285=force_nr +serdes_lane_config_channel_mode_286=force_nr +serdes_lane_config_channel_mode_287=force_nr +serdes_lane_config_channel_mode_288=force_nr +serdes_lane_config_channel_mode_289=force_nr +serdes_lane_config_channel_mode_290=force_nr +serdes_lane_config_channel_mode_291=force_nr +serdes_lane_config_channel_mode_292=force_nr +serdes_lane_config_channel_mode_293=force_nr +serdes_lane_config_channel_mode_294=force_nr +serdes_lane_config_channel_mode_295=force_nr +serdes_lane_config_channel_mode_296=force_nr +serdes_lane_config_channel_mode_297=force_nr +serdes_lane_config_channel_mode_298=force_nr +serdes_lane_config_channel_mode_299=force_nr +serdes_lane_config_channel_mode_300=force_nr +serdes_lane_config_channel_mode_301=force_nr +serdes_lane_config_channel_mode_302=force_nr +serdes_lane_config_channel_mode_303=force_nr +serdes_lane_config_channel_mode_304=force_nr +serdes_lane_config_channel_mode_305=force_nr +serdes_lane_config_channel_mode_306=force_nr +serdes_lane_config_channel_mode_307=force_nr +serdes_lane_config_channel_mode_308=force_nr +serdes_lane_config_channel_mode_309=force_nr +serdes_lane_config_channel_mode_310=force_nr +serdes_lane_config_channel_mode_311=force_nr +serdes_lane_config_channel_mode_312=force_nr +serdes_lane_config_channel_mode_313=force_nr +serdes_lane_config_channel_mode_314=force_nr +serdes_lane_config_channel_mode_315=force_nr +serdes_lane_config_channel_mode_316=force_nr +serdes_lane_config_channel_mode_317=force_nr +serdes_lane_config_channel_mode_318=force_nr +serdes_lane_config_channel_mode_319=force_nr +serdes_lane_config_channel_mode_320=force_nr +serdes_lane_config_channel_mode_321=force_nr +serdes_lane_config_channel_mode_322=force_nr +serdes_lane_config_channel_mode_323=force_nr +serdes_lane_config_channel_mode_324=force_nr +serdes_lane_config_channel_mode_325=force_nr +serdes_lane_config_channel_mode_326=force_nr +serdes_lane_config_channel_mode_327=force_nr +serdes_lane_config_channel_mode_328=force_nr +serdes_lane_config_channel_mode_329=force_nr +serdes_lane_config_channel_mode_330=force_nr +serdes_lane_config_channel_mode_331=force_nr +serdes_lane_config_channel_mode_332=force_nr +serdes_lane_config_channel_mode_333=force_nr +serdes_lane_config_channel_mode_334=force_nr +serdes_lane_config_channel_mode_335=force_nr +serdes_lane_config_channel_mode_336=force_nr +serdes_lane_config_channel_mode_337=force_nr +serdes_lane_config_channel_mode_338=force_nr +serdes_lane_config_channel_mode_339=force_nr +serdes_lane_config_channel_mode_340=force_nr +serdes_lane_config_channel_mode_341=force_nr +serdes_lane_config_channel_mode_342=force_nr +serdes_lane_config_channel_mode_343=force_nr +serdes_lane_config_channel_mode_344=force_nr +serdes_lane_config_channel_mode_345=force_nr +serdes_lane_config_channel_mode_346=force_nr +serdes_lane_config_channel_mode_347=force_nr +serdes_lane_config_channel_mode_348=force_nr +serdes_lane_config_channel_mode_349=force_nr +serdes_lane_config_channel_mode_350=force_nr +serdes_lane_config_channel_mode_351=force_nr +serdes_lane_config_channel_mode_352=force_nr +serdes_lane_config_channel_mode_353=force_nr +serdes_lane_config_channel_mode_354=force_nr +serdes_lane_config_channel_mode_355=force_nr +serdes_lane_config_channel_mode_356=force_nr +serdes_lane_config_channel_mode_357=force_nr +serdes_lane_config_channel_mode_358=force_nr +serdes_lane_config_channel_mode_359=force_nr +serdes_lane_config_channel_mode_360=force_nr +serdes_lane_config_channel_mode_361=force_nr +serdes_lane_config_channel_mode_362=force_nr +serdes_lane_config_channel_mode_363=force_nr +serdes_lane_config_channel_mode_364=force_nr +serdes_lane_config_channel_mode_365=force_nr +serdes_lane_config_channel_mode_366=force_nr +serdes_lane_config_channel_mode_367=force_nr +serdes_lane_config_channel_mode_368=force_nr +serdes_lane_config_channel_mode_369=force_nr +serdes_lane_config_channel_mode_370=force_nr +serdes_lane_config_channel_mode_371=force_nr +serdes_lane_config_channel_mode_372=force_nr +serdes_lane_config_channel_mode_373=force_nr +serdes_lane_config_channel_mode_374=force_nr +serdes_lane_config_channel_mode_375=force_nr +serdes_lane_config_channel_mode_376=force_nr +serdes_lane_config_channel_mode_377=force_nr +serdes_lane_config_channel_mode_378=force_nr +serdes_lane_config_channel_mode_379=force_nr +serdes_lane_config_channel_mode_380=force_nr +serdes_lane_config_channel_mode_381=force_nr +serdes_lane_config_channel_mode_382=force_nr +serdes_lane_config_channel_mode_383=force_nr +serdes_lane_config_channel_mode_384=force_nr +serdes_lane_config_channel_mode_385=force_nr +serdes_lane_config_channel_mode_386=force_nr +serdes_lane_config_channel_mode_387=force_nr +serdes_lane_config_channel_mode_388=force_nr +serdes_lane_config_channel_mode_389=force_nr +serdes_lane_config_channel_mode_390=force_nr +serdes_lane_config_channel_mode_391=force_nr +serdes_lane_config_channel_mode_392=force_nr +serdes_lane_config_channel_mode_393=force_nr +serdes_lane_config_channel_mode_394=force_nr +serdes_lane_config_channel_mode_395=force_nr +serdes_lane_config_channel_mode_396=force_nr +serdes_lane_config_channel_mode_397=force_nr +serdes_lane_config_channel_mode_398=force_nr +serdes_lane_config_channel_mode_399=force_nr +serdes_lane_config_channel_mode_400=force_nr +serdes_lane_config_channel_mode_401=force_nr +serdes_lane_config_channel_mode_402=force_nr +serdes_lane_config_channel_mode_403=force_nr +serdes_lane_config_channel_mode_404=force_nr +serdes_lane_config_channel_mode_405=force_nr +serdes_lane_config_channel_mode_406=force_nr +serdes_lane_config_channel_mode_407=force_nr +serdes_lane_config_channel_mode_408=force_nr +serdes_lane_config_channel_mode_409=force_nr +serdes_lane_config_channel_mode_410=force_nr +serdes_lane_config_channel_mode_411=force_nr +serdes_lane_config_channel_mode_412=force_nr +serdes_lane_config_channel_mode_413=force_nr +serdes_lane_config_channel_mode_414=force_nr +serdes_lane_config_channel_mode_415=force_nr +serdes_lane_config_channel_mode_416=force_nr +serdes_lane_config_channel_mode_417=force_nr +serdes_lane_config_channel_mode_418=force_nr +serdes_lane_config_channel_mode_419=force_nr +serdes_lane_config_channel_mode_420=force_nr +serdes_lane_config_channel_mode_421=force_nr +serdes_lane_config_channel_mode_422=force_nr +serdes_lane_config_channel_mode_423=force_nr +serdes_lane_config_channel_mode_424=force_nr +serdes_lane_config_channel_mode_425=force_nr +serdes_lane_config_channel_mode_426=force_nr +serdes_lane_config_channel_mode_427=force_nr +serdes_lane_config_channel_mode_428=force_nr +serdes_lane_config_channel_mode_429=force_nr +serdes_lane_config_channel_mode_430=force_nr +serdes_lane_config_channel_mode_431=force_nr +serdes_lane_config_channel_mode_432=force_nr +serdes_lane_config_channel_mode_433=force_nr +serdes_lane_config_channel_mode_434=force_nr +serdes_lane_config_channel_mode_435=force_nr +serdes_lane_config_channel_mode_436=force_nr +serdes_lane_config_channel_mode_437=force_nr +serdes_lane_config_channel_mode_438=force_nr +serdes_lane_config_channel_mode_439=force_nr +serdes_lane_config_channel_mode_440=force_nr +serdes_lane_config_channel_mode_441=force_nr +serdes_lane_config_channel_mode_442=force_nr +serdes_lane_config_channel_mode_443=force_nr +serdes_lane_config_channel_mode_444=force_nr +serdes_lane_config_channel_mode_445=force_nr +serdes_lane_config_channel_mode_446=force_nr +serdes_lane_config_channel_mode_447=force_nr + + +rif_id_max=24576 +dpp_db_path=/usr/share/bcm/db +sai_recycle_port_lane_base=96 +appl_param_nof_ports_per_modid=64 +udh_exists=1 +modreg IPS_FORCE_LOCAL_OR_FABRIC FORCE_FABRIC=1 +xflow_macsec_secure_chan_to_num_secure_assoc_encrypt=2 +xflow_macsec_secure_chan_to_num_secure_assoc_decrypt=4 +cmic_dma_abort_in_cold_boot=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/pg_profile_lookup.ini b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/pg_profile_lookup.ini new file mode 100644 index 000000000000..7eb58931c209 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/pg_profile_lookup.ini @@ -0,0 +1,12 @@ +# PG lossless profiles. +# speed cable size xon xoff threshold xon_offset + 100000 300m 1280 2560 110592 0 1280 + 400000 300m 1280 2560 315392 0 1280 + 100000 1000m 1280 2560 225280 0 1280 + 400000 1000m 1280 2560 778240 0 1280 + 100000 2000m 1280 2560 393216 0 1280 + 400000 2000m 1280 2560 1445888 0 1280 + 100000 80000m 1280 2560 1388544 0 1280 + 400000 80000m 1280 2560 5435392 0 1280 + 100000 120000m 1280 2560 2056192 0 1280 + 400000 120000m 1280 2560 8093696 0 1280 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/port_config.ini b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/port_config.ini new file mode 100644 index 000000000000..f1a7fee5ad1f --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/port_config.ini @@ -0,0 +1,21 @@ +# name lanes alias index asic_port_name role speed coreid coreportid numvoq +Ethernet18 72,73,74,75 Ethernet18 19 Eth0-ASIC1 Ext 100000 1 1 8 +Ethernet19 80,81,82,83 Ethernet19 20 Eth1-ASIC1 Ext 100000 1 2 8 +Ethernet20 88,89,90,91 Ethernet20 21 Eth2-ASIC1 Ext 100000 1 3 8 +Ethernet21 96,97,98,99 Ethernet21 22 Eth3-ASIC1 Ext 100000 1 4 8 +Ethernet22 104,105,106,107 Ethernet22 23 Eth4-ASIC1 Ext 100000 1 5 8 +Ethernet23 112,113,114,115 Ethernet23 24 Eth5-ASIC1 Ext 100000 1 6 8 +Ethernet24 120,121,122,123 Ethernet24 25 Eth6-ASIC1 Ext 100000 1 7 8 +Ethernet25 128,129,130,131 Ethernet25 26 Eth7-ASIC1 Ext 100000 1 8 8 +Ethernet26 136,137,138,139 Ethernet26 27 Eth8-ASIC1 Ext 100000 1 9 8 +Ethernet27 64,65,66,67 Ethernet27 28 Eth9-ASIC1 Ext 100000 0 10 8 +Ethernet28 56,57,58,59 Ethernet28 29 Eth10-ASIC1 Ext 100000 0 11 8 +Ethernet29 48,49,50,51 Ethernet29 30 Eth11-ASIC1 Ext 100000 0 12 8 +Ethernet30 40,41,42,43 Ethernet30 31 Eth12-ASIC1 Ext 100000 0 13 8 +Ethernet31 32,33,34,35 Ethernet31 32 Eth13-ASIC1 Ext 100000 0 14 8 +Ethernet32 24,25,26,27 Ethernet32 33 Eth14-ASIC1 Ext 100000 0 15 8 +Ethernet33 16,17,18,19 Ethernet33 34 Eth15-ASIC1 Ext 100000 0 16 8 +Ethernet34 8,9,10,11 Ethernet34 35 Eth16-ASIC1 Ext 100000 0 17 8 +Ethernet35 0,1,2,3 Ethernet35 36 Eth17-ASIC1 Ext 100000 0 18 8 +Ethernet-IB1 115 Ethernet-IB1 38 Rcy1-ASIC1 Inb 10000 0 19 8 +Ethernet-Rec1 116 Ethernet-Rec1 40 Rcy2-ASIC1 Rec 10000 1 20 8 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/qos.json.j2 b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/qos.json.j2 new file mode 100644 index 000000000000..3e548325ea30 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/qos.json.j2 @@ -0,0 +1 @@ +{%- include 'qos_config.j2' %} diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/sai.profile b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/sai.profile new file mode 100644 index 000000000000..cebcc2d6ee48 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/sai.profile @@ -0,0 +1 @@ +SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/jr2cp-nokia-18x100g-4x25g-config.bcm diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/sai_postinit_cmd.soc b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/sai_postinit_cmd.soc new file mode 100644 index 000000000000..db5ad5ebb264 --- /dev/null +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/sai_postinit_cmd.soc @@ -0,0 +1,6 @@ +phy set 8 reg=0xd134 data=-8 lane=1 +phy set 8 reg=0xd135 data=132 lane=1 +phy set 8 reg=0xd136 data=-8 lane=1 +phy set 8 reg=0xd137 data=0 lane=1 +phy set 8 reg=0xd138 data=0 lane=1 +phy set 8 reg=0xd133 data=0x1802 lane=1 From 0c7f0aa9b7a35e3a873809fa6ebd24f7226dbdff Mon Sep 17 00:00:00 2001 From: tjchadaga <85581939+tjchadaga@users.noreply.github.com> Date: Tue, 12 Jul 2022 10:08:58 -0700 Subject: [PATCH 146/259] Add load_minigraph option to include traffic-shift-away during config migration (#11403) --- files/image_config/config-setup/config-setup | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/files/image_config/config-setup/config-setup b/files/image_config/config-setup/config-setup index b151437b9e25..7ddf4530fe5d 100755 --- a/files/image_config/config-setup/config-setup +++ b/files/image_config/config-setup/config-setup @@ -109,7 +109,15 @@ run_hookdir() { reload_minigraph() { echo "Reloading minigraph..." - config load_minigraph -y -n + if + [[ "$(sonic-cfggen -d -v DEVICE_METADATA.localhost.subtype | tr [:upper:] [:lower:])" == *"dualtor"* ]] || + [[ "$(sonic-cfggen -d -v DEVICE_METADATA.localhost.type | tr [:upper:] [:lower:])" == *"leafrouter"* ]]; + then + #Keep device isolated with traffic-shift-away option on LeafRouter and Dualtor + config load_minigraph -y -n -t + else + config load_minigraph -y -n + fi config save -y } From e00cd53cafd9a683bd8e1095cd68285456d06d4c Mon Sep 17 00:00:00 2001 From: jusherma Date: Mon, 25 Jul 2022 22:02:46 -0700 Subject: [PATCH 147/259] [build] don't require passwordless sudo #11417 Why I did it Not all build environments have passwordless sudo enabled for all users How I did it Instead of using sudo to delete fsroot directories, mount them in a small, temporary docker container and delete them from there How to verify it Build in an environment where the build user does not have passwordless sudo enabled and confirm that no sudo password prompts are seen --- Makefile.work | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile.work b/Makefile.work index 0428c3cbc553..aa0eade252ee 100644 --- a/Makefile.work +++ b/Makefile.work @@ -182,7 +182,8 @@ endif DOCKER_LOCKFILE_SAVE := $(DOCKER_LOCKDIR)/docker_save.lock $(shell mkdir -m 0777 -p $(DOCKER_LOCKDIR)) $(shell [ -f $(DOCKER_LOCKFILE_SAVE) ] || (touch $(DOCKER_LOCKFILE_SAVE) && chmod 0777 $(DOCKER_LOCKFILE_SAVE))) -$(shell sudo rm -rf $(DOCKER_ROOT) && mkdir -p $(DOCKER_ROOT)) +$(docker run --rm -v $(DOCKER_ROOT)\:/mount alpine sh -c 'rm -rf /mount/') +$(mkdir -p $(DOCKER_ROOT)) ifeq ($(DOCKER_BUILDER_MOUNT),) override DOCKER_BUILDER_MOUNT := "$(PWD):/sonic" From 4bc1192dcde15ab51f15c6fca26dcbc7d8a347a2 Mon Sep 17 00:00:00 2001 From: tjchadaga <85581939+tjchadaga@users.noreply.github.com> Date: Thu, 14 Jul 2022 12:26:58 -0700 Subject: [PATCH 148/259] Log message fix for TSB (#11441) --- dockers/docker-fpm-frr/base_image_files/TS | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/dockers/docker-fpm-frr/base_image_files/TS b/dockers/docker-fpm-frr/base_image_files/TS index 4ee085282be8..799bf9ded700 100755 --- a/dockers/docker-fpm-frr/base_image_files/TS +++ b/dockers/docker-fpm-frr/base_image_files/TS @@ -7,8 +7,10 @@ PLATFORM=${PLATFORM:-`sonic-cfggen -H -v DEVICE_METADATA.localhost.platform`} if [[ $1 == "TSA" ]]; then TSA_STATE_UPDATE='{"BGP_DEVICE_GLOBAL":{"STATE":{"tsa_enabled": "true"}}}' + log_msg='System Mode: Normal -> Maintenance' elif [[ $1 == "TSB" ]]; then TSA_STATE_UPDATE='{"BGP_DEVICE_GLOBAL":{"STATE":{"tsa_enabled": "false"}}}' + log_msg='System Mode: Maintenance -> Normal' fi # Parse the device specific asic conf file, if it exists @@ -28,8 +30,8 @@ if [[ ($NUM_ASIC -gt 1) ]]; then echo -e "BGP"$asic" : \c" if [[ -n "$TSA_STATE_UPDATE" ]]; then sonic-cfggen -a "$TSA_STATE_UPDATE" -w -n $NAMESPACE_PREFIX$asic - logger -t $1 -p user.info "BGP$asic: System Mode: Normal -> Maintenance" - echo "BGP$asic: System Mode: Normal -> Maintenance" + logger -t $1 -p user.info "BGP$asic: $log_msg" + echo "$log_msg" else # If TSC is executed, invoke FRR script to check installed route-maps docker exec -i bgp$asic /usr/bin/$1 @@ -40,11 +42,10 @@ if [[ ($NUM_ASIC -gt 1) ]]; then else if [[ -n "$TSA_STATE_UPDATE" ]]; then sonic-cfggen -a "$TSA_STATE_UPDATE" -w - logger -t $1 -p user.info "System Mode: Normal -> Maintenance" - echo "System Mode: Normal -> Maintenance" + logger -t $1 -p user.info "$log_msg" + echo "$log_msg" else # If TSC is executed, invoke FRR script to check installed route-maps docker exec -i bgp /usr/bin/$1 fi fi - From 1d32553a91adddeab07ceb9adb908fb96fd55043 Mon Sep 17 00:00:00 2001 From: abdosi <58047199+abdosi@users.noreply.github.com> Date: Mon, 18 Jul 2022 07:10:13 -0700 Subject: [PATCH 149/259] Added Support for deployment_id parsing for Device Asic metadata (#11454) What I did: Added Support for deployment_id parsing for Device Asic metadata. Why I did:- Deployment Id is used in BGP docker for FRR template generation. For multi-asic platforms running in namespace without deployment id as key in DEVICE_METADATA FRR template generation fails. This change is needed after this #10154 where if deployment_id is none we don't update DEVICE_METADA dictionary. How I verify:- Added unit-test. --- src/sonic-config-engine/minigraph.py | 11 ++++--- .../tests/multi_npu_data/sample-minigraph.xml | 31 +++++++++++++++++++ .../tests/test_multinpu_cfggen.py | 1 + 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index 51c48ea8c262..e80420190828 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -1040,6 +1040,7 @@ def parse_asic_meta(meta, hname): switch_id = None switch_type = None max_cores = None + deployment_id = None macsec_profile = {} device_metas = meta.find(str(QName(ns, "Devices"))) for device in device_metas.findall(str(QName(ns1, "DeviceMetadata"))): @@ -1056,10 +1057,12 @@ def parse_asic_meta(meta, hname): switch_type = value elif name == "MaxCores": max_cores = value + elif name == "DeploymentId": + deployment_id = value elif name == 'MacSecProfile': macsec_profile = parse_macsec_profile(value) - return sub_role, switch_id, switch_type, max_cores, macsec_profile + return sub_role, switch_id, switch_type, max_cores, deployment_id, macsec_profile def parse_deviceinfo(meta, hwsku): port_speeds = {} @@ -1413,7 +1416,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw elif child.tag == str(QName(ns, "PngDec")): (neighbors, devices, port_speed_png) = parse_asic_png(child, asic_name, hostname) elif child.tag == str(QName(ns, "MetadataDeclaration")): - (sub_role, switch_id, switch_type, max_cores, macsec_profile) = parse_asic_meta(child, asic_name) + (sub_role, switch_id, switch_type, max_cores, deployment_id, macsec_profile) = parse_asic_meta(child, asic_name) elif child.tag == str(QName(ns, "LinkMetadataDeclaration")): linkmetas = parse_linkmeta(child, hostname) elif child.tag == str(QName(ns, "DeviceInfos")): @@ -1987,7 +1990,7 @@ def parse_asic_sub_role(filename, asic_name): root = ET.parse(filename).getroot() for child in root: if child.tag == str(QName(ns, "MetadataDeclaration")): - sub_role, _, _, _, _= parse_asic_meta(child, asic_name) + sub_role, _, _, _, _, _= parse_asic_meta(child, asic_name) return sub_role def parse_asic_switch_type(filename, asic_name): @@ -1995,7 +1998,7 @@ def parse_asic_switch_type(filename, asic_name): root = ET.parse(filename).getroot() for child in root: if child.tag == str(QName(ns, "MetadataDeclaration")): - _, _, switch_type, _, _ = parse_asic_meta(child, asic_name) + _, _, switch_type, _, _, _ = parse_asic_meta(child, asic_name) return switch_type return None diff --git a/src/sonic-config-engine/tests/multi_npu_data/sample-minigraph.xml b/src/sonic-config-engine/tests/multi_npu_data/sample-minigraph.xml index 935d2c0c833a..be3938f24bc4 100644 --- a/src/sonic-config-engine/tests/multi_npu_data/sample-minigraph.xml +++ b/src/sonic-config-engine/tests/multi_npu_data/sample-minigraph.xml @@ -1465,6 +1465,11 @@ FrontEnd + + DeploymentId + + 1 + @@ -1475,6 +1480,11 @@ FrontEnd + + DeploymentId + + 1 + @@ -1485,6 +1495,11 @@ FrontEnd + + DeploymentId + + 1 + @@ -1495,6 +1510,11 @@ FrontEnd + + DeploymentId + + 1 + @@ -1505,6 +1525,11 @@ BackEnd + + DeploymentId + + 1 + @@ -1515,6 +1540,12 @@ BackEnd + + DeploymentId + + 1 + +
diff --git a/src/sonic-config-engine/tests/test_multinpu_cfggen.py b/src/sonic-config-engine/tests/test_multinpu_cfggen.py index 35c2000c0e4e..a34b0b6cfd78 100644 --- a/src/sonic-config-engine/tests/test_multinpu_cfggen.py +++ b/src/sonic-config-engine/tests/test_multinpu_cfggen.py @@ -304,6 +304,7 @@ def test_device_asic_metadata(self): self.assertEqual(output['localhost']['sub_role'], 'FrontEnd') else: self.assertEqual(output['localhost']['sub_role'], 'BackEnd') + self.assertEqual(output['localhost']['deployment_id'], "1") def test_global_asic_acl(self): argument = "-m {} -p {} --var-json \"ACL_TABLE\"".format(self.sample_graph, self.sample_port_config) From e317af0e9a23a922c343d9346d57ffc3fac0b45d Mon Sep 17 00:00:00 2001 From: Stephen Sun <5379172+stephenxs@users.noreply.github.com> Date: Sun, 17 Jul 2022 10:34:45 +0800 Subject: [PATCH 150/259] Fix chassis test issue (#11460) Signed-off-by: Stephen Sun --- platform/mellanox/mlnx-platform-api/tests/test_chassis.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platform/mellanox/mlnx-platform-api/tests/test_chassis.py b/platform/mellanox/mlnx-platform-api/tests/test_chassis.py index 38b6bd6cfffd..8ae4ece8eec6 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_chassis.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_chassis.py @@ -286,7 +286,8 @@ def test_revision_permission(self): def test_get_port_or_cage_type(self): chassis = Chassis() - chassis.RJ45_port_list = [0] + chassis._RJ45_port_inited = True + chassis._RJ45_port_list = [0] assert SfpBase.SFP_PORT_TYPE_BIT_RJ45 == chassis.get_port_or_cage_type(1) exceptionRaised = False From eb56dc8b90713c8eaa5f3aff3b70d731c42baef3 Mon Sep 17 00:00:00 2001 From: abdosi <58047199+abdosi@users.noreply.github.com> Date: Tue, 26 Jul 2022 16:50:16 -0700 Subject: [PATCH 151/259] Enable ARP Update Script for Packet based chassis. (#11465) What I did: Following changes done for packet based chassis:- 1> Run arp_update on LC's to resolve static route nexthops over backend port-channel interfaces. 2> On Supervisor make sure arp_update exit gracefully --- dockers/docker-orchagent/docker-init.j2 | 9 +++++--- files/build_templates/arp_update_vars.j2 | 4 +++- files/scripts/arp_update | 28 ++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/dockers/docker-orchagent/docker-init.j2 b/dockers/docker-orchagent/docker-init.j2 index d0a3ef9e2d36..4cd6a53a11cd 100755 --- a/dockers/docker-orchagent/docker-init.j2 +++ b/dockers/docker-orchagent/docker-init.j2 @@ -21,7 +21,7 @@ CFGGEN_PARAMS=" \ -t /usr/share/sonic/templates/wait_for_link.sh.j2,/usr/bin/wait_for_link.sh \ " VLAN=$(sonic-cfggen $CFGGEN_PARAMS) - +SWITCH_TYPE=${SWITCH_TYPE:-`sonic-cfggen -d -v "DEVICE_METADATA['localhost']['switch_type']"`} chmod +x /usr/bin/wait_for_link.sh # Executed platform specific initialization tasks. @@ -34,9 +34,12 @@ if [ -x /usr/share/sonic/hwsku/hwsku-init ]; then /usr/share/sonic/hwsku/hwsku-init fi -# Start arp_update and NDP proxy daemon when VLAN exists -if [ "$VLAN" != "" ]; then +# Start arp update when VLAN exists or switch type as chassis packet for backend port channel interfaces +if [[ "$VLAN" != "" ]] || [[ "$SWITCH_TYPE" == "chassis-packet" ]]; then cp /usr/share/sonic/templates/arp_update.conf /etc/supervisor/conf.d/ +fi + +if [ "$VLAN" != "" ]; then cp /usr/share/sonic/templates/ndppd.conf /etc/supervisor/conf.d/ fi diff --git a/files/build_templates/arp_update_vars.j2 b/files/build_templates/arp_update_vars.j2 index 3cdfa8102340..91992e781ac0 100644 --- a/files/build_templates/arp_update_vars.j2 +++ b/files/build_templates/arp_update_vars.j2 @@ -1,6 +1,8 @@ { + "switch_type": "{% if DEVICE_METADATA and 'localhost' in DEVICE_METADATA and 'switch_type' in DEVICE_METADATA['localhost'] %}{{ DEVICE_METADATA['localhost']['switch_type'] }}{%endif %}", "interface": "{% for (name, prefix) in INTERFACE|pfx_filter %}{% if prefix|ipv6 %}{{ name }} {% endif %}{% endfor %}", "pc_interface" : "{% for (name, prefix) in PORTCHANNEL_INTERFACE|pfx_filter %}{% if prefix|ipv6 %}{{ name }} {% endif %}{% endfor %}", "vlan_sub_interface": "{% for (name, prefix) in VLAN_SUB_INTERFACE|pfx_filter %}{% if prefix|ipv6 %}{{ name }} {% endif %}{% endfor %}", - "vlan" : "{% if VLAN %}{{ VLAN.keys() | join(' ') }}{% endif %}" + "vlan" : "{% if VLAN %}{{ VLAN.keys() | join(' ') }}{% endif %}", + "static_route_nexthops": "{% if STATIC_ROUTE %}{% for static_route_prefix, static_route_attr in STATIC_ROUTE.items() %}{%- if static_route_prefix -%}{{ static_route_attr['nexthop'].split(',') | join(' ') | lower + " " }}{%- endif -%}{% endfor %}{% endif %}" } diff --git a/files/scripts/arp_update b/files/scripts/arp_update index e7f083e20d27..2f66fc84b396 100755 --- a/files/scripts/arp_update +++ b/files/scripts/arp_update @@ -12,6 +12,34 @@ ARP_UPDATE_VARS_FILE="/usr/share/sonic/templates/arp_update_vars.j2" while /bin/true; do # find L3 interfaces which are UP, send ipv6 multicast pings ARP_UPDATE_VARS=$(sonic-cfggen -d -t ${ARP_UPDATE_VARS_FILE}) + SWITCH_TYPE=$(echo $ARP_UPDATE_VARS | jq -r '.switch_type') + if [[ "$SWITCH_TYPE" == "chassis-packet" ]]; then + STATIC_ROUTE_NEXTHOPS=$(echo $ARP_UPDATE_VARS | jq -r '.static_route_nexthops') + # on supervisor/rp exit the script gracefully + if [[ -z "$STATIC_ROUTE_NEXTHOPS" ]]; then + logger "arp_update: exiting as no static route in packet based chassis" + exit 0 + fi + for nexthop in $STATIC_ROUTE_NEXTHOPS; do + if [[ $nexthop == *"."* ]]; then + neigh_state=( $(ip -4 neigh show | grep $nexthop | tr -s ' ' | cut -d ' ' -f 3,4) ) + ping_prefix=ping + elif [[ $nexthop == *":"* ]] ; then + neigh_state=( $(ip -6 neigh show | grep $nexthop | tr -s ' ' | cut -d ' ' -f 3,4) ) + ping_prefix=ping6 + fi + + if [[ "${neigh_state[1]}" == "INCOMPLETE" ]] || [[ "${neigh_state[1]}" == "FAILED" ]]; then + pingcmd="timeout 0.2 $ping_prefix -I ${neigh_state[0]} -n -q -i 0 -c 1 -W 1 $nexthop >/dev/null" + eval $pingcmd + logger "arp_update: sttaic route nexthop not resolved, pinging $nexthop on ${neigh_state[0]}" + fi + done + + sleep 300 + continue + fi + # find L3 interfaces which are UP, send ipv6 multicast pings INTERFACE=$(echo $ARP_UPDATE_VARS | jq -r '.interface') PC_INTERFACE=$(echo $ARP_UPDATE_VARS | jq -r '.pc_interface') VLAN_SUB_INTERFACE=$(echo $ARP_UPDATE_VARS | jq -r '.vlan_sub_interface') From 7a502a25c148842be82e4dffdc7d6873a990a7ff Mon Sep 17 00:00:00 2001 From: Ze Gan Date: Sun, 24 Jul 2022 19:19:33 +0800 Subject: [PATCH 152/259] [iproute2]: Enhance iproute2 to update PN for XPN (#11474) Why I did it ip command cannot update packet number if the cipher is XPN. How I did it Specify SSCI when update packet number and ignore SSCI value if update action. Signed-off-by: Ze Gan --- .../patch/0001-patch-macsec-xpn-support.patch | 79 +++++++++++-------- 1 file changed, 47 insertions(+), 32 deletions(-) diff --git a/src/iproute2/patch/0001-patch-macsec-xpn-support.patch b/src/iproute2/patch/0001-patch-macsec-xpn-support.patch index 33e7e6a7dd94..54b8ab7968a7 100644 --- a/src/iproute2/patch/0001-patch-macsec-xpn-support.patch +++ b/src/iproute2/patch/0001-patch-macsec-xpn-support.patch @@ -1,15 +1,15 @@ -From f1ea3235b5250dfd1193b5033620b030b9789fd9 Mon Sep 17 00:00:00 2001 +From 129613207b2f1616507814fbe060a2ce317d0bbb Mon Sep 17 00:00:00 2001 From: Ze Gan -Date: Mon, 30 Aug 2021 06:45:28 +0000 +Date: Mon, 18 Jul 2022 15:07:15 +0000 Subject: [PATCH] MACsec XPN support Signed-off-by: Ze Gan --- - ip/ipmacsec.c | 86 ++++++++++++++++++++++++++++++++++++++++++++------- - 1 file changed, 74 insertions(+), 12 deletions(-) + ip/ipmacsec.c | 97 +++++++++++++++++++++++++++++++++++++++++++-------- + 1 file changed, 83 insertions(+), 14 deletions(-) diff --git a/ip/ipmacsec.c b/ip/ipmacsec.c -index 18289ecd..1df19bf1 100644 +index 18289ec..fffe94a 100644 --- a/ip/ipmacsec.c +++ b/ip/ipmacsec.c @@ -10,6 +10,7 @@ @@ -119,33 +119,23 @@ index 18289ecd..1df19bf1 100644 if (sa->key_len) { addattr_l(&req.n, MACSEC_BUFLEN, MACSEC_SA_ATTR_KEYID, -@@ -428,6 +457,13 @@ static int do_modify_nl(enum cmd c, enum macsec_nl_commands cmd, int ifindex, +@@ -428,6 +457,15 @@ static int do_modify_nl(enum cmd c, enum macsec_nl_commands cmd, int ifindex, addattr8(&req.n, MACSEC_BUFLEN, MACSEC_SA_ATTR_ACTIVE, sa->active); } + -+ if (sa->ssci != 0) { -+ addattr32(&req.n, MACSEC_BUFLEN, MACSEC_SA_ATTR_SSCI, -+ sa->ssci); -+ addattr_l(&req.n, MACSEC_BUFLEN, MACSEC_SA_ATTR_SALT, -+ sa->salt, MACSEC_SALT_LEN); -+ } ++ if (c == CMD_ADD) { ++ if (sa->ssci != 0) { ++ addattr32(&req.n, MACSEC_BUFLEN, MACSEC_SA_ATTR_SSCI, ++ sa->ssci); ++ addattr_l(&req.n, MACSEC_BUFLEN, MACSEC_SA_ATTR_SALT, ++ sa->salt, MACSEC_SALT_LEN); ++ } ++ } } addattr_nest_end(&req.n, attr_sa); -@@ -456,6 +492,11 @@ static bool check_sa_args(enum cmd c, struct sa_desc *sa) - fprintf(stderr, "cannot change key on SA\n"); - return -1; - } -+ -+ if (sa->ssci) { -+ fprintf(stderr, "cannot change SSCI on SA\n"); -+ return -1; -+ } - } - - return 0; -@@ -637,6 +678,8 @@ static void print_key(struct rtattr *key) +@@ -637,6 +675,8 @@ static void print_key(struct rtattr *key) #define CIPHER_NAME_GCM_AES_128 "GCM-AES-128" #define CIPHER_NAME_GCM_AES_256 "GCM-AES-256" @@ -154,7 +144,7 @@ index 18289ecd..1df19bf1 100644 #define DEFAULT_CIPHER_NAME CIPHER_NAME_GCM_AES_128 static const char *cs_id_to_name(__u64 cid) -@@ -649,6 +692,10 @@ static const char *cs_id_to_name(__u64 cid) +@@ -649,6 +689,10 @@ static const char *cs_id_to_name(__u64 cid) return CIPHER_NAME_GCM_AES_128; case MACSEC_CIPHER_ID_GCM_AES_256: return CIPHER_NAME_GCM_AES_256; @@ -165,7 +155,7 @@ index 18289ecd..1df19bf1 100644 default: return "(unknown)"; } -@@ -897,13 +944,22 @@ static void print_tx_sc(const char *prefix, __u64 sci, __u8 encoding_sa, +@@ -897,12 +941,21 @@ static void print_tx_sc(const char *prefix, __u64 sci, __u8 encoding_sa, print_string(PRINT_FP, NULL, "%s", prefix); print_uint(PRINT_ANY, "an", "%d:", rta_getattr_u8(sa_attr[MACSEC_SA_ATTR_AN])); @@ -175,7 +165,7 @@ index 18289ecd..1df19bf1 100644 + print_uint(PRINT_ANY, "pn", " PN %u,", + rta_getattr_u32(sa_attr[MACSEC_SA_ATTR_PN])); + } else { -+ print_uint(PRINT_ANY, "pn", " PN %" PRIu64 ",", ++ print_u64(PRINT_ANY, "pn", " PN %" PRIu64 ",", + rta_getattr_u64(sa_attr[MACSEC_SA_ATTR_PN])); + } @@ -184,13 +174,38 @@ index 18289ecd..1df19bf1 100644 " state %s,", state ? "on" : "off"); + if (sa_attr[MACSEC_SA_ATTR_SSCI]) { + print_uint(PRINT_ANY, "ssci", " SSCI %u,", -+ rta_getattr_u32(sa_attr[MACSEC_SA_ATTR_SSCI])); ++ ntohl(rta_getattr_u32(sa_attr[MACSEC_SA_ATTR_SSCI]))); + } print_key(sa_attr[MACSEC_SA_ATTR_KEYID]); print_txsa_stats(prefix, sa_attr[MACSEC_SA_ATTR_STATS]); - close_json_object(); -@@ -1322,9 +1378,15 @@ static int macsec_parse_opt(struct link_util *lu, int argc, char **argv, +@@ -965,13 +1018,23 @@ static void print_rx_sc(const char *prefix, __be64 sci, __u8 active, + print_string(PRINT_FP, NULL, "%s", prefix); + print_uint(PRINT_ANY, "an", "%u:", + rta_getattr_u8(sa_attr[MACSEC_SA_ATTR_AN])); +- print_uint(PRINT_ANY, "pn", " PN %u,", +- rta_getattr_u32(sa_attr[MACSEC_SA_ATTR_PN])); ++ if (!sa_attr[MACSEC_SA_ATTR_SSCI]) { ++ print_uint(PRINT_ANY, "pn", " PN %u,", ++ rta_getattr_u32(sa_attr[MACSEC_SA_ATTR_PN])); ++ } else { ++ print_u64(PRINT_ANY, "pn", " PN %" PRIu64 ",", ++ rta_getattr_u64(sa_attr[MACSEC_SA_ATTR_PN])); ++ } + + print_bool(PRINT_JSON, "active", NULL, state); + print_string(PRINT_FP, NULL, " state %s,", + state ? "on" : "off"); + ++ if (sa_attr[MACSEC_SA_ATTR_SSCI]) { ++ print_uint(PRINT_ANY, "ssci", " SSCI %u,", ++ ntohl(rta_getattr_u32(sa_attr[MACSEC_SA_ATTR_SSCI]))); ++ } ++ + print_key(sa_attr[MACSEC_SA_ATTR_KEYID]); + + print_rxsa_stats(prefix, sa_attr[MACSEC_SA_ATTR_STATS]); +@@ -1322,9 +1385,15 @@ static int macsec_parse_opt(struct link_util *lu, int argc, char **argv, else if (strcmp(*argv, "gcm-aes-256") == 0 || strcmp(*argv, "GCM-AES-256") == 0) cipher.id = MACSEC_CIPHER_ID_GCM_AES_256; @@ -209,5 +224,5 @@ index 18289ecd..1df19bf1 100644 NEXT_ARG(); if (cipher.icv_len) -- -2.17.1 +2.25.1 From ff3ad9ddd1afec0f4cbbb4e11d7d84cde618ed0e Mon Sep 17 00:00:00 2001 From: Lior Avramov <73036155+liorghub@users.noreply.github.com> Date: Thu, 28 Jul 2022 02:18:36 +0300 Subject: [PATCH 153/259] [memory_checker] Do not check memory usage of containers if docker daemon is not running (#11476) Fix in Monit memory_checker plugin. Skip fetching running containers if docker engine is down (can happen in deinit). This PR fixes issue #11472. Signed-off-by: liora liora@nvidia.com Why I did it In the case where Monit runs during deinit flow, memory_checker plugin is fetching the running containers without checking if Docker service is still running. I added this check. How I did it Use systemctl is-active to check if Docker engine is still running. How to verify it Use systemctl to stop docker engine and reload Monit, no errors in log and relevant print appears in log. Which release branch to backport (provide reason below if selected) The fix is required in 202205 and 202012 since the PR that introduced the issue was cherry picked to those branches (#11129). --- files/image_config/monit/memory_checker | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/files/image_config/monit/memory_checker b/files/image_config/monit/memory_checker index dfe270e79524..a93bc30b3fe4 100755 --- a/files/image_config/monit/memory_checker +++ b/files/image_config/monit/memory_checker @@ -96,6 +96,19 @@ def check_memory_usage(container_name, threshold_value): sys.exit(4) +def is_service_active(service_name): + """Test if service is running. + + Args: + service_name: A string contains the service name + + Returns: + True if service is running, False otherwise + """ + status = subprocess.run("systemctl is-active --quiet {}".format(service_name), shell=True, check=False) + return status.returncode == 0 + + def get_running_container_names(): """Retrieves names of running containers by talking to the docker daemon. @@ -128,6 +141,12 @@ def main(): parser.add_argument("threshold_value", type=int, help="threshold value in bytes") args = parser.parse_args() + if not is_service_active("docker"): + syslog.syslog(syslog.LOG_INFO, + "[memory_checker] Exits without checking memory usage of container '{}' since docker daemon is not running!" + .format(args.container_name)) + sys.exit(0) + running_container_names = get_running_container_names() if args.container_name in running_container_names: check_memory_usage(args.container_name, args.threshold_value) From 5a313e691287ea44d816eabd8d8811e693fcd4c5 Mon Sep 17 00:00:00 2001 From: bingwang-ms <66248323+bingwang-ms@users.noreply.github.com> Date: Tue, 26 Jul 2022 02:00:00 +0800 Subject: [PATCH 154/259] Automatically enable tunnel_qos_remap on T1 and T0 in DualToR deployment (#11508) Why I did it This PR is to backport PR #11056 and PR #11045 into master branch. This PR is to enable tunnel_qos_remap on T1 and T0 in DualToR deployment. On T1, we check the property DownstreamRedundancyTypes. On T0, we check the property RedundancyType. tunnel_qos_remap is set to enabled if gemini is in DownstreamRedundancyTypes (on T1) or RedundancyType (on T0). How I did it The change is implemented in minigraph.py. How to verify it Verified by test_minigraph_case.py and 'test_j2files.py`. --- src/sonic-config-engine/minigraph.py | 66 +- ...ample-arista-7050cx3-dualtor-minigraph.xml | 13 +- .../sample-arista-7260-dualtor-minigraph.xml | 13 +- .../tests/sample-arista-7260-t1-minigraph.xml | 13 +- .../sample-mellanox-4600c-t1-minigraph.xml | 13 +- ...imple-sample-graph-case-remap-disabled.xml | 8 - ...ase-remap-enabled-no-tunnel-attributes.xml | 891 ++++++++++++++++++ ...simple-sample-graph-case-remap-enabled.xml | 13 +- .../tests/test_minigraph_case.py | 10 +- 9 files changed, 959 insertions(+), 81 deletions(-) create mode 100644 src/sonic-config-engine/tests/simple-sample-graph-case-remap-enabled-no-tunnel-attributes.xml diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index e80420190828..b8bb02d8285d 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -894,6 +894,7 @@ def parse_meta(meta, hname): kube_data = {} macsec_profile = {} redundancy_type = None + downstream_redundancy_types = None qos_profile = None device_metas = meta.find(str(QName(ns, "Devices"))) @@ -940,33 +941,13 @@ def parse_meta(meta, hname): macsec_profile = parse_macsec_profile(value) elif name == "RedundancyType": redundancy_type = value + elif name == "DownstreamRedundancyTypes": + downstream_redundancy_types = value elif name == "SonicQosProfile": qos_profile = value - return syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile, redundancy_type, qos_profile + return syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile, downstream_redundancy_types, redundancy_type, qos_profile -def parse_system_defaults(meta): - system_default_values = {} - - system_defaults = meta.find(str(QName(ns1, "SystemDefaults"))) - - if system_defaults is None: - return system_default_values - - for system_default in system_defaults.findall(str(QName(ns1, "SystemDefault"))): - name = system_default.find(str(QName(ns1, "Name"))).text - value = system_default.find(str(QName(ns1, "Value"))).text - - # Tunnel Qos remapping - if name == "TunnelQosRemapEnabled": - if value.lower() == "true": - status = "enabled" - else: - status = "disabled" - system_default_values["tunnel_qos_remap"] = {"status": status} - - return system_default_values - def parse_linkmeta(meta, hname): link = meta.find(str(QName(ns, "Link"))) linkmetas = {} @@ -1368,6 +1349,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw static_routes = {} system_defaults = {} macsec_profile = {} + downstream_redundancy_types = None redundancy_type = None qos_profile = None @@ -1400,13 +1382,11 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw elif child.tag == str(QName(ns, "UngDec")): (u_neighbors, u_devices, _, _, _, _, _, _) = parse_png(child, hostname, None) elif child.tag == str(QName(ns, "MetadataDeclaration")): - (syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile, redundancy_type, qos_profile) = parse_meta(child, hostname) + (syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile, downstream_redundancy_types, redundancy_type, qos_profile) = parse_meta(child, hostname) elif child.tag == str(QName(ns, "LinkMetadataDeclaration")): linkmetas = parse_linkmeta(child, hostname) elif child.tag == str(QName(ns, "DeviceInfos")): (port_speeds_default, port_descriptions, sys_ports) = parse_deviceinfo(child, hwsku) - elif child.tag == str(QName(ns, "SystemDefaultsDeclaration")): - system_defaults = parse_system_defaults(child) else: if child.tag == str(QName(ns, "DpgDec")): (intfs, lo_intfs, mvrf, mgmt_intf, voq_inband_intfs, vlans, vlan_members, dhcp_relay_table, pcs, pc_members, acls, vni, tunnel_intfs, dpg_ecmp_content, static_routes, tunnel_intfs_qos_remap_config) = parse_dpg(child, asic_name) @@ -1421,8 +1401,6 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw linkmetas = parse_linkmeta(child, hostname) elif child.tag == str(QName(ns, "DeviceInfos")): (port_speeds_default, port_descriptions, sys_ports) = parse_deviceinfo(child, hwsku) - elif child.tag == str(QName(ns, "SystemDefaultsDeclaration")): - system_defaults = parse_system_defaults(child) select_mmu_profiles(qos_profile, platform, hwsku) # set the host device type in asic metadata also @@ -1459,10 +1437,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw 'ip': kube_data.get('ip', '') } } - - if len(system_defaults) > 0: - results['SYSTEM_DEFAULTS'] = system_defaults - + results['PEER_SWITCH'], mux_tunnel_name, peer_switch_ip = get_peer_switch_info(linkmetas, devices) if bool(results['PEER_SWITCH']): @@ -1471,7 +1446,20 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw print("Warning: more than one peer switch was found. Only the first will be parsed: {}".format(results['PEER_SWITCH'].keys()[0])) results['DEVICE_METADATA']['localhost']['peer_switch'] = list(results['PEER_SWITCH'].keys())[0] + + # Enable tunnel_qos_remap if downstream_redundancy_types(T1) or redundancy_type(T0) = Gemini/Libra + enable_tunnel_qos_map = False + if results['DEVICE_METADATA']['localhost']['type'].lower() == 'leafrouter' and ('gemini' in str(downstream_redundancy_types).lower() or 'libra' in str(downstream_redundancy_types).lower()): + enable_tunnel_qos_map = True + elif results['DEVICE_METADATA']['localhost']['type'].lower() == 'torrouter' and ('gemini' in str(redundancy_type).lower() or 'libra' in str(redundancy_type).lower()): + enable_tunnel_qos_map = True + + if enable_tunnel_qos_map: + system_defaults['tunnel_qos_remap'] = {"status": "enabled"} + if len(system_defaults) > 0: + results['SYSTEM_DEFAULTS'] = system_defaults + # for this hostname, if sub_role is defined, add sub_role in # device_metadata if sub_role is not None: @@ -1872,14 +1860,28 @@ def get_tunnel_entries(tunnel_intfs, tunnel_intfs_qos_remap_config, lo_intfs, tu break tunnels = {} + + default_qos_map_for_mux_tunnel = { + "decap_dscp_to_tc_map": "AZURE_TUNNEL", + "decap_tc_to_pg_map": "AZURE_TUNNEL", + "encap_tc_to_dscp_map": "AZURE_TUNNEL", + "encap_tc_to_queue_map": "AZURE_TUNNEL" + } + for type, tunnel_dict in tunnel_intfs.items(): for tunnel_key, tunnel_attr in tunnel_dict.items(): tunnel_attr['dst_ip'] = lo_addr if (tunnel_qos_remap.get('status') == 'enabled') and (mux_tunnel_name == tunnel_key) and (peer_switch_ip is not None): tunnel_attr['src_ip'] = peer_switch_ip + # The DSCP mode must be pipe if remap is enabled + tunnel_attr['dscp_mode'] = "pipe" if tunnel_key in tunnel_intfs_qos_remap_config[type]: tunnel_attr.update(tunnel_intfs_qos_remap_config[type][tunnel_key].items()) + # Use default value if qos remap attribute is missing + for k, v in default_qos_map_for_mux_tunnel.items(): + if k not in tunnel_attr: + tunnel_attr[k] = v tunnels[tunnel_key] = tunnel_attr diff --git a/src/sonic-config-engine/tests/sample-arista-7050cx3-dualtor-minigraph.xml b/src/sonic-config-engine/tests/sample-arista-7050cx3-dualtor-minigraph.xml index 6ffea8427ddb..521b5c5ae074 100644 --- a/src/sonic-config-engine/tests/sample-arista-7050cx3-dualtor-minigraph.xml +++ b/src/sonic-config-engine/tests/sample-arista-7050cx3-dualtor-minigraph.xml @@ -2334,19 +2334,16 @@ 10.20.6.16 + + RedundancyType + + Gemini + - - - - TunnelQosRemapEnabled - True - - - diff --git a/src/sonic-config-engine/tests/sample-arista-7260-dualtor-minigraph.xml b/src/sonic-config-engine/tests/sample-arista-7260-dualtor-minigraph.xml index e1a7d3580594..37e1a872887e 100644 --- a/src/sonic-config-engine/tests/sample-arista-7260-dualtor-minigraph.xml +++ b/src/sonic-config-engine/tests/sample-arista-7260-dualtor-minigraph.xml @@ -4600,19 +4600,16 @@ 10.20.6.16 + + RedundancyType + + Gemini + - - - - TunnelQosRemapEnabled - True - - - diff --git a/src/sonic-config-engine/tests/sample-arista-7260-t1-minigraph.xml b/src/sonic-config-engine/tests/sample-arista-7260-t1-minigraph.xml index f4f4a349e97e..47dcdafcd404 100644 --- a/src/sonic-config-engine/tests/sample-arista-7260-t1-minigraph.xml +++ b/src/sonic-config-engine/tests/sample-arista-7260-t1-minigraph.xml @@ -2481,19 +2481,16 @@ 10.20.6.16 + + DownstreamRedundancyTypes + + Gemini + - - - - TunnelQosRemapEnabled - True - - - str-7260cx3-acs-7 Arista-7260CX3-C64 diff --git a/src/sonic-config-engine/tests/sample-mellanox-4600c-t1-minigraph.xml b/src/sonic-config-engine/tests/sample-mellanox-4600c-t1-minigraph.xml index e7f581178b29..bdb8acc63119 100644 --- a/src/sonic-config-engine/tests/sample-mellanox-4600c-t1-minigraph.xml +++ b/src/sonic-config-engine/tests/sample-mellanox-4600c-t1-minigraph.xml @@ -2450,19 +2450,16 @@ 10.0.0.7 + + DownstreamRedundancyTypes + + Gemini + - - - - TunnelQosRemapEnabled - True - - - r-tigon-11 Mellanox-SN4600C-C64 diff --git a/src/sonic-config-engine/tests/simple-sample-graph-case-remap-disabled.xml b/src/sonic-config-engine/tests/simple-sample-graph-case-remap-disabled.xml index 7d0be06e4e82..91c0aa46c10e 100644 --- a/src/sonic-config-engine/tests/simple-sample-graph-case-remap-disabled.xml +++ b/src/sonic-config-engine/tests/simple-sample-graph-case-remap-disabled.xml @@ -474,14 +474,6 @@ - - - - TunnelQosRemapEnabled - False - - - diff --git a/src/sonic-config-engine/tests/simple-sample-graph-case-remap-enabled-no-tunnel-attributes.xml b/src/sonic-config-engine/tests/simple-sample-graph-case-remap-enabled-no-tunnel-attributes.xml new file mode 100644 index 000000000000..a88bc4e2adeb --- /dev/null +++ b/src/sonic-config-engine/tests/simple-sample-graph-case-remap-enabled-no-tunnel-attributes.xml @@ -0,0 +1,891 @@ + + + + + + false + switch-t0 + 10.0.0.56 + ARISTA01T1 + 10.0.0.57 + 1 + 180 + 60 + + + switch-t0 + FC00::71 + ARISTA01T1 + FC00::72 + 1 + 180 + 60 + + + false + switch-t0 + 10.0.0.58 + ARISTA02T1 + 10.0.0.59 + 1 + 180 + 60 + + + switch-t0 + FC00::75 + ARISTA02T1 + FC00::76 + 1 + 180 + 60 + + + + + 65100 + switch-t0 + + +
10.0.0.57
+ + + +
+ +
10.0.0.59
+ + + +
+
+ +
+ + 64600 + ARISTA01T1 + + + + 64600 + ARISTA02T1 + + + + 64600 + ARISTA03T1 + + + + 64600 + ARISTA04T1 + + +
+
+ + + + + + HostIP + Loopback0 + + 10.1.0.32/32 + + 10.1.0.32/32 + + + HostIP1 + Loopback0 + + FC00:1::32/128 + + FC00:1::32/128 + + + + + HostIP + eth0 + + 10.0.0.100/24 + + 10.0.0.100/24 + + + + + + + switch-t0 + + + PortChannel01 + fortyGigE0/4 + + + + + + + + + ab1 + fortyGigE0/8 + 192.0.0.1;192.0.0.2 + fc02:2000::1;fc02:2000::2 + 1000 + 1000 + 192.168.0.0/27 + 00:aa:bb:cc:dd:ee + + + ab2 + fortyGigE0/4 + 192.0.0.1 + fc02:2000::3;fc02:2000::4 + 2000 + 2000 + + + + + + + PortChannel01 + 10.0.0.56/31 + + + + PortChannel01 + FC00::71/126 + + + + fortyGigE0/0 + 10.0.0.58/31 + + + + fortyGigE0/0 + FC00::75/126 + + + + ab1 + 192.168.0.1/27 + + + + + + PortChannel01 + DataAcl + DataPlane + + + SNMP + SNMP_ACL + SNMP + + + ERSPAN_DSCP + Everflow_dscp + Everflow_dscp + + + + + + + + + + DeviceSerialLink + 9600 + switch-t0 + console + true + switch-t1 + 1 + + + DeviceSerialLink + 9600 + switch-t0 + 1 + true + managed_device + console + + + DeviceInterfaceLink + 10000 + switch-t0 + fortyGigE0/0 + switch-01t1 + port1 + + + DeviceInterfaceLink + 10000 + switch-t0 + fortyGigE0/12 + switch-02t1 + port1 + + + DeviceInterfaceLink + 25000 + switch-t0 + fortyGigE0/4 + server1 + port1 + + + DeviceInterfaceLink + 40000 + switch-t0 + fortyGigE0/8 + server2 + port1 + + + LogicalLink + 10000 + false + switch-t0 + fortyGigE0/4 + true + mux-cable + L + true + + + LogicalLink + 10000 + false + switch-t0 + fortyGigE0/8 + true + mux-cable + U + true + + + LogicalLink + 0 + false + switch-t0 + MuxTunnel0 + false + switch2-t0 + MuxTunnel0 + true + + + + + ToRRouter +
+ 26.1.1.10/32 +
+ switch-t0 + Force10-S6000 + AAA00PrdStr00 +
+ +
+ 25.1.1.10/32 +
+ + 10.7.0.196/26 + + switch2-t0 + Force10-S6000 +
+ + switch-01t1 +
+ 10.1.0.186/32 +
+ 2 + + + 10.7.0.196/26 + + Force10-S6000 +
+ + Server +
+ 10.10.10.1/32 +
+ + fe80::0001/80 + + + 10.0.0.1/32 + + server1 + server-sku +
+ + Server +
+ 10.10.10.2/32 +
+ + fe80::0002/128 + + + 10.0.0.2/32 + + server2 + server-sku +
+
+
+ + + + + + + GeminiPeeringLink + + True + + + UpperTOR + + switch-t0 + + + LowerTOR + + switch2-t0 + + + switch2-t0:MuxTunnel0;switch-t0:MuxTunnel0 + + + + + + AutoNegotiation + + True + + + switch-01t1:port1;switch-t0:fortyGigE0/0 + + + + + + AutoNegotiation + + True + + + switch-02t1:port1;switch-t0:fortyGigE0/12 + + + + + + AutoNegotiation + + True + + + server1:port1;switch-t0:fortyGigE0/4 + + + + + + AutoNegotiation + + True + + + server2:port1;switch-t0:fortyGigE0/8 + + + + + + + switch-t0 + + + DeploymentId + + 1 + + + ErspanDestinationIpv4 + + 10.0.100.1 + + + NtpResources + + 10.0.10.1;10.0.10.2 + + + + SnmpResources + + 10.0.10.3;10.0.10.4 + + + + SyslogResources + + 10.0.10.5;10.0.10.6 + + + + TacacsServer + + 10.0.10.7;10.0.10.8 + + + KubernetesEnabled + + 0 + + + KubernetesServerIp + + 10.10.10.10 + + + ResourceType + + Storage + + + RedundancyType + + Gemini + + + + + + + + + + + DeviceInterface + + true + 1 + fortyGigE0/0 + + false + 0 + 0 + 10000 + + + DeviceInterface + + true + 1 + fortyGigE0/4 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + 1 + fortyGigE0/8 + + false + 0 + 0 + 40000 + Interface description + + + DeviceInterface + + true + 1 + fortyGigE0/12 + + false + 0 + 0 + 100000 + Interface description + + + DeviceInterface + + true + 1 + fortyGigE0/16 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/20 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/24 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/28 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/32 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/36 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/40 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/44 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/48 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/52 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/56 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/60 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/64 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/68 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/72 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/76 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/80 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/84 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/88 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/92 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/96 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/100 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/104 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/108 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/112 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/116 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/120 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + 1 + fortyGigE0/124 + + false + 0 + 0 + 100000 + + + true + 0 + Force10-S6000 + + + DeviceInterface + + true + 1 + eth0 + false + eth0 + 1000 + + + + + switch-t0 + Force10-S6000 +
diff --git a/src/sonic-config-engine/tests/simple-sample-graph-case-remap-enabled.xml b/src/sonic-config-engine/tests/simple-sample-graph-case-remap-enabled.xml index d38f77774e9f..406c613a9c9e 100644 --- a/src/sonic-config-engine/tests/simple-sample-graph-case-remap-enabled.xml +++ b/src/sonic-config-engine/tests/simple-sample-graph-case-remap-enabled.xml @@ -469,19 +469,16 @@ Storage + + RedundancyType + + Gemini + - - - - TunnelQosRemapEnabled - True - - - diff --git a/src/sonic-config-engine/tests/test_minigraph_case.py b/src/sonic-config-engine/tests/test_minigraph_case.py index bfee76c7546e..2aa78944163b 100644 --- a/src/sonic-config-engine/tests/test_minigraph_case.py +++ b/src/sonic-config-engine/tests/test_minigraph_case.py @@ -382,7 +382,7 @@ def test_minigraph_tunnel_table(self): "tunnel_type": "IPINIP", "src_ip": "25.1.1.10", "dst_ip": "10.1.0.32", - "dscp_mode": "uniform", + "dscp_mode": "pipe", "encap_ecn_mode": "standard", "ecn_mode": "copy_from_outer", "ttl_mode": "pipe", @@ -399,6 +399,14 @@ def test_minigraph_tunnel_table(self): expected_tunnel ) + # Validate extra config for mux tunnel is generated automatically when tunnel_qos_remap = enabled + sample_graph_enabled_remap = os.path.join(self.test_dir, 'simple-sample-graph-case-remap-enabled-no-tunnel-attributes.xml') + argument = '-m "' + sample_graph_enabled_remap + '" -p "' + self.port_config + '" -v "TUNNEL"' + output = self.run_script(argument) + self.assertEqual( + utils.to_dict(output.strip()), + expected_tunnel + ) def test_minigraph_mux_cable_table(self): argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v "MUX_CABLE"' From 400b401f4bdced7036cf8f4cd18063aea2bd63dc Mon Sep 17 00:00:00 2001 From: Ikki Zhu <79439153+qnos@users.noreply.github.com> Date: Thu, 28 Jul 2022 09:39:23 +0800 Subject: [PATCH 155/259] [hlx/sfp] fix hlx platform sfp+ tx disable issue (#11532) Why I did it: To fix hlx platform sfp+ module tx disable issue How I did it: Fix sfp+ tx disable function according SFF-8472 specification Co-authored-by: Eric Zhu --- .../x86_64-cel_e1031-r0/sonic_platform/sfp.py | 67 ++++++++++--------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/device/celestica/x86_64-cel_e1031-r0/sonic_platform/sfp.py b/device/celestica/x86_64-cel_e1031-r0/sonic_platform/sfp.py index e04c23dc42de..627fa8a7a1ee 100644 --- a/device/celestica/x86_64-cel_e1031-r0/sonic_platform/sfp.py +++ b/device/celestica/x86_64-cel_e1031-r0/sonic_platform/sfp.py @@ -8,7 +8,7 @@ try: import time - from ctypes import create_string_buffer + from ctypes import c_char from sonic_platform_base.sfp_base import SfpBase from sonic_platform_base.sonic_sfp.sff8472 import sff8472InterfaceId from sonic_platform_base.sonic_sfp.sff8472 import sff8472Dom @@ -121,8 +121,8 @@ SFP_VOLT_WIDTH = 2 SFP_CHANNL_MON_OFFSET = 100 SFP_CHANNL_MON_WIDTH = 6 -SFP_CHANNL_STATUS_OFFSET = 110 -SFP_CHANNL_STATUS_WIDTH = 1 +SFP_STATUS_CONTROL_OFFSET = 110 +SFP_STATUS_CONTROL_WIDTH = 1 SFP_TX_DISABLE_HARD_BIT = 7 SFP_TX_DISABLE_SOFT_BIT = 6 @@ -869,7 +869,7 @@ def get_rx_los(self): elif self.sfp_type == SFP_TYPE: offset = 256 dom_channel_monitor_raw = self._read_eeprom_specific_bytes( - (offset + SFP_CHANNL_STATUS_OFFSET), SFP_CHANNL_STATUS_WIDTH) + (offset + SFP_STATUS_CONTROL_OFFSET), SFP_STATUS_CONTROL_WIDTH) if dom_channel_monitor_raw is not None: rx_los_data = int(dom_channel_monitor_raw[0], 16) rx_los_list.append(rx_los_data & 0x02 != 0) @@ -901,7 +901,7 @@ def get_tx_fault(self): elif self.sfp_type == SFP_TYPE: offset = 256 dom_channel_monitor_raw = self._read_eeprom_specific_bytes( - (offset + SFP_CHANNL_STATUS_OFFSET), SFP_CHANNL_STATUS_WIDTH) + (offset + SFP_STATUS_CONTROL_OFFSET), SFP_STATUS_CONTROL_WIDTH) if dom_channel_monitor_raw is not None: tx_fault_data = int(dom_channel_monitor_raw[0], 16) tx_fault_list.append(tx_fault_data & 0x04 != 0) @@ -936,7 +936,7 @@ def get_tx_disable(self): elif self.sfp_type == SFP_TYPE: offset = 256 dom_channel_monitor_raw = self._read_eeprom_specific_bytes( - (offset + SFP_CHANNL_STATUS_OFFSET), SFP_CHANNL_STATUS_WIDTH) + (offset + SFP_STATUS_CONTROL_OFFSET), SFP_STATUS_CONTROL_WIDTH) if dom_channel_monitor_raw is not None: tx_disable_data = int(dom_channel_monitor_raw[0], 16) tx_disable_list.append(tx_disable_data & 0xC0 != 0) @@ -1170,31 +1170,36 @@ def tx_disable(self, tx_disable): Returns: A boolean, True if tx_disable is set successfully, False if not """ - sysfs_sfp_i2c_client_eeprom_path = self.port_to_eeprom_mapping[self.port_num] - status_control_raw = self._read_eeprom_specific_bytes( - SFP_CHANNL_STATUS_OFFSET, SFP_CHANNL_STATUS_WIDTH) - if status_control_raw is not None: - # Set bit 6 for Soft TX Disable Select - # 01000000 = 64 and 10111111 = 191 - tx_disable_bit = 64 if tx_disable else 191 - status_control = int(status_control_raw[0], 16) - tx_disable_ctl = (status_control | tx_disable_bit) if tx_disable else ( - status_control & tx_disable_bit) - try: - sysfsfile_eeprom = open( - sysfs_sfp_i2c_client_eeprom_path, mode="r+b", buffering=0) - buffer = create_string_buffer(1) - buffer[0] = chr(tx_disable_ctl) - # Write to eeprom - sysfsfile_eeprom.seek(SFP_CHANNL_STATUS_OFFSET) - sysfsfile_eeprom.write(buffer[0]) - except Exception: - return False - finally: - if sysfsfile_eeprom: - sysfsfile_eeprom.close() - time.sleep(0.01) - return True + if not self.get_presence(): + return False + + if self.dom_tx_disable_supported: + # SFP status/control register at address A2h, byte 110 + offset = 256 + sysfs_sfp_i2c_client_eeprom_path = self.port_to_eeprom_mapping[self.port_num] + status_control_raw = self._read_eeprom_specific_bytes( + (offset + SFP_STATUS_CONTROL_OFFSET), SFP_STATUS_CONTROL_WIDTH) + if status_control_raw is not None: + # Set bit 6 for Soft TX Disable Select + # 01000000 = 64 and 10111111 = 191 + tx_disable_bit = 64 if tx_disable else 191 + status_control = int(status_control_raw[0], 16) + tx_disable_ctl = (status_control | tx_disable_bit) if tx_disable else ( + status_control & tx_disable_bit) + try: + sysfsfile_eeprom = open( + sysfs_sfp_i2c_client_eeprom_path, mode="r+b", buffering=0) + tx_disable_data = c_char(tx_disable_ctl) + # Write to eeprom + sysfsfile_eeprom.seek(offset + SFP_STATUS_CONTROL_OFFSET) + sysfsfile_eeprom.write(tx_disable_data) + except Exception: + return False + finally: + if sysfsfile_eeprom: + sysfsfile_eeprom.close() + time.sleep(0.01) + return True return False def tx_disable_channel(self, channel, disable): From b41d516a9ad0b1ce9ed8eafe13b21ab54937b9ed Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Thu, 28 Jul 2022 00:58:04 +0800 Subject: [PATCH 156/259] [ci] Fix some not sai package removed issue (#11544) Only replace the file name starts with "cisco-". --- .azure-pipelines/official-build-cisco-8000.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.azure-pipelines/official-build-cisco-8000.yml b/.azure-pipelines/official-build-cisco-8000.yml index 474d3e743ff7..7ec7430fc3ad 100644 --- a/.azure-pipelines/official-build-cisco-8000.yml +++ b/.azure-pipelines/official-build-cisco-8000.yml @@ -83,7 +83,7 @@ stages: fi cd $(dirname $filename) echo "PWD=$(pwd)" - ls -l *.deb + ls -l cisco-*.deb while read -r package; do # Cisco version format: -sai--- # The may contain several values in one build, the part is skipped when publishing to storage @@ -93,7 +93,7 @@ stages: package_url="$PACKAGE_URL/sai/ciscosai/master/$version/$package" echo "Override package $package from $package_url" wget "$package_url$StorageSASKey" -O "$package" - done < <(ls *.deb) + done < <(ls cisco-*.deb) env: StorageSASKey: $(StorageSASKey) condition: ne(variables['Build.Reason'], 'PullRequest') From a71d5db05e5586b624f6e407663cb3e22797844d Mon Sep 17 00:00:00 2001 From: Jing Zhang Date: Thu, 28 Jul 2022 09:08:53 -0700 Subject: [PATCH 157/259] Update WARM START FINALIZER to wait for linkmgrd to reconcile (#11477) Spanning from sonic-net/sonic-linkmgrd#76, this PR is to update warm restart finalizer to wait for linkmgrd to be reconciled. sign-off: Jing Zhang zhangjing@microsoft.com Why I did it To make sure finalizer save config after linkmgrd's reconciliation. How I did it Add linkmgrd to the reconciliation wait list of warmboot finalizer. How to verify it Verified on lab device, linkmgrd reconciled as expected. --- files/image_config/warmboot-finalizer/finalize-warmboot.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/files/image_config/warmboot-finalizer/finalize-warmboot.sh b/files/image_config/warmboot-finalizer/finalize-warmboot.sh index 2649e51b0d21..c4d3338dcc37 100755 --- a/files/image_config/warmboot-finalizer/finalize-warmboot.sh +++ b/files/image_config/warmboot-finalizer/finalize-warmboot.sh @@ -10,6 +10,7 @@ declare -A RECONCILE_COMPONENTS=( \ ["swss"]="orchagent neighsyncd" \ ["bgp"]="bgp" \ ["nat"]="natsyncd" \ + ["mux"]="linkmgrd" \ ) for reconcile_file in $(find /etc/sonic/ -iname '*_reconcile' -type f); do From b7e3db4ef10987692811783f94dfd8857419986f Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox <57339448+Junchao-Mellanox@users.noreply.github.com> Date: Thu, 14 Jul 2022 14:24:39 +0800 Subject: [PATCH 158/259] [Mellanox] Fix issue: failed to decode Json while there is no hwsku.json (#11436) - Why I did it Fix bug: pmon report error on start up because some SKUs do not have hwsku.json - How I did it If hwsku.json, do not extract RJ45 port information - How to verify it Manual test. Unit test. --- .../mlnx-platform-api/sonic_platform/chassis.py | 10 +++++++++- .../mlnx-platform-api/sonic_platform/utils.py | 16 ++++++++++------ .../mlnx-platform-api/tests/test_utils.py | 7 ++++++- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py index b83ee33cc316..b9fa2593174c 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py @@ -112,7 +112,8 @@ def __init__(self): self.sfp_module = None # Build the RJ45 port list from platform.json and hwsku.json - self.RJ45_port_list = extract_RJ45_ports_index() + self._RJ45_port_inited = False + self._RJ45_port_list = None logger.log_info("Chassis loaded successfully") @@ -124,6 +125,13 @@ def __del__(self): if self.sfp_module.SFP.shared_sdk_handle: self.sfp_module.deinitialize_sdk_handle(sfp_module.SFP.shared_sdk_handle) + @property + def RJ45_port_list(self): + if not self._RJ45_port_inited: + self._RJ45_port_list = extract_RJ45_ports_index() + self._RJ45_port_inited = True + return self._RJ45_port_list + ############################################## # PSU methods ############################################## diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py b/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py index b35ef313dfcd..adf931d37e90 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py @@ -177,12 +177,12 @@ def is_host(): """ Test whether current process is running on the host or an docker return True for host and False for docker - """ + """ try: - proc = subprocess.Popen("docker --version 2>/dev/null", - stdout=subprocess.PIPE, - shell=True, - stderr=subprocess.STDOUT, + proc = subprocess.Popen("docker --version 2>/dev/null", + stdout=subprocess.PIPE, + shell=True, + stderr=subprocess.STDOUT, universal_newlines=True) stdout = proc.communicate()[0] proc.wait() @@ -239,9 +239,13 @@ def load_json_file(filename, log_func=logger.log_error): def extract_RJ45_ports_index(): # Cross check 'platform.json' and 'hwsku.json' to extract the RJ45 port index if exists. hwsku_path = device_info.get_path_to_hwsku_dir() + hwsku_file = os.path.join(hwsku_path, HWSKU_JSON) + if not os.path.exists(hwsku_file): + # Platforms having no hwsku.json do not have RJ45 port + return None + platform_file = device_info.get_path_to_port_config_file() platform_dict = load_json_file(platform_file)['interfaces'] - hwsku_file = os.path.join(hwsku_path, HWSKU_JSON) hwsku_dict = load_json_file(hwsku_file)['interfaces'] port_name_to_index_map_dict = {} RJ45_port_index_list = [] diff --git a/platform/mellanox/mlnx-platform-api/tests/test_utils.py b/platform/mellanox/mlnx-platform-api/tests/test_utils.py index bbc3ab28e58c..e1052202d416 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_utils.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_utils.py @@ -113,10 +113,15 @@ def test_default_return(self, mock_log): @utils.default_return(100, log_func=mock_log) def func(): raise RuntimeError('') - + assert func() == 100 assert mock_log.call_count == 1 def test_run_command(self): output = utils.run_command('ls') assert output + + @mock.patch('sonic_py_common.device_info.get_path_to_hwsku_dir', mock.MagicMock(return_value='/tmp')) + def test_extract_RJ45_ports_index(self): + rj45_list = utils.extract_RJ45_ports_index() + assert rj45_list is None From b1456ee1c8c65fbc705dbf88751cd517170fe29c Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Fri, 29 Jul 2022 09:38:12 -0700 Subject: [PATCH 159/259] [202205][linkmgrd][utilities][swss][sairedis][platform-daemon][platform-common] advance submodule head (#11578) linkmgrd: * e0fe1d4 2022-07-27 | TSA enhancement (#98) (HEAD -> 202205) [Jing Zhang] utilities: * 7d7e15e 2022-07-18 | [vnet_route_check] Align DB data parse logic with format used by swsscommon API (#2268) (HEAD -> 202205) [Volodymyr Samotiy] * b3d5d18 2022-07-20 | [MultiAsic] sudo reboot command doesn't gracefully stop Asic syncd# on multiasic platform (#2258) [Marty Y. Lok] * 504ebe6 2022-07-08 | Add 'traffic_shift_away' option to config load_minigraph (#2240) [tjchadaga] * 4079e4a 2022-06-20 | Gives cisco-8000 more flexibility to easily add subcommnads under show platform (#2213) [Nathan Cohen] * 46443c6 2022-07-27 | Update db_migrator to support `PORT_QOS_MAP|global` (#2205) [bingwang-ms] * d7fbdd6 2022-05-26 | fix for non-coherent cmis modules (#2163) [qinchuanares] * 79b4439 2022-06-24 | [sfpshow/sfputil] Enhance sfpshow and sfputil to behavior correctly on RJ45 ports (#2111) [Kebo Liu] swss: * 275f311 2022-07-26 | [DualToR] Handle race condition between tunnel_decap and mux orchestrator (#2397) (HEAD -> 202205) [Devesh Pathak] * 47586e8 2022-07-22 | [EVPN]Fix missing Vlan member update notification in P2MP scenario (#2388) [Sudharsan Dhamal Gopalarathnam] * 7d5c73f 2022-07-19 | [macsecmgr]: Fix cleanup macsec objs if container stop (#2376) [Ze Gan] * c03996f 2022-07-17 | [orchagent]: Enhance initSaiPhyApi (#2367) [andywongarista] * 57890d7 2022-07-27 | Fix for remote system interface not getting created (#2364) [skeesara-nokia] * 1a93ec9 2022-07-13 | Orchagent changes for synchronizing npu/phy device Tx in the data path before enabling transceiver Tx. (#2277) [jaganbal-a] sairedis: * a4903be 2022-07-20 | Update PN with XPN support (#1081) (HEAD -> 202205, github/202205) [Ze Gan] * 2cb5671 2022-07-27 | Add SAI_OBJECT_TYPE_TUNNEL object to break-before-make list (#1075) [Vaibhav Hemant Dixit] platform-daemon: * 901c6a1 2022-06-28 | [CMIS]Improved 400G link bring up sequence (#254) (HEAD -> 202205) [Prince George] platform-common: * f223b3f 2022-07-09 | Support get_port_or_cage_type (#288) (HEAD -> 202205) [Stephen Sun] Signed-off-by: Ying Xie --- src/linkmgrd | 2 +- src/sonic-platform-common | 2 +- src/sonic-platform-daemons | 2 +- src/sonic-sairedis | 2 +- src/sonic-swss | 2 +- src/sonic-utilities | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/linkmgrd b/src/linkmgrd index c911ec7bee78..e0fe1d46781b 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit c911ec7bee78d5b1d0438c5a4ddd581d0a35177c +Subproject commit e0fe1d46781b1202082db2162148dd0dfd57b299 diff --git a/src/sonic-platform-common b/src/sonic-platform-common index 4fe38c704692..f223b3fe552b 160000 --- a/src/sonic-platform-common +++ b/src/sonic-platform-common @@ -1 +1 @@ -Subproject commit 4fe38c70469245fb3cec4d74567b088290754585 +Subproject commit f223b3fe552b84477b5fdaa6d281257e0b24428b diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index 17587b68cfaf..901c6a14ff04 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit 17587b68cfaface8f785abd6346915e9c255995b +Subproject commit 901c6a14ff0416a9967c530d0bdade889c09ecda diff --git a/src/sonic-sairedis b/src/sonic-sairedis index 38c0bb1fee95..a4903be3a284 160000 --- a/src/sonic-sairedis +++ b/src/sonic-sairedis @@ -1 +1 @@ -Subproject commit 38c0bb1fee954291c3b483bc61a63999c1714ca9 +Subproject commit a4903be3a2840c186f5727af94d8138304a1138f diff --git a/src/sonic-swss b/src/sonic-swss index 7841930b8b51..275f311e9f2f 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 7841930b8b5175928429c64ac710f3957bd2b834 +Subproject commit 275f311e9f2fecce3f55bc5ae1487b634baa0975 diff --git a/src/sonic-utilities b/src/sonic-utilities index bcc12063a54a..7d7e15ee0e16 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit bcc12063a54abdad9ba1ad2d6c15139bf34d4c77 +Subproject commit 7d7e15ee0e1699c095ebc802f1f95d506d37f11b From f2d7481b5f8226d915212bba84738edf9b8543b6 Mon Sep 17 00:00:00 2001 From: tjchadaga <85581939+tjchadaga@users.noreply.github.com> Date: Sat, 30 Jul 2022 22:16:58 -0700 Subject: [PATCH 160/259] Fix for TSA error logging on multi-asic (#11519) --- dockers/docker-fpm-frr/base_image_files/TS | 34 ++++++++++++++----- dockers/docker-fpm-frr/base_image_files/TSA | 25 +++++--------- dockers/docker-fpm-frr/base_image_files/TSB | 20 ++++------- src/sonic-bgpcfgd/tests/test_device_global.py | 8 ++++- 4 files changed, 48 insertions(+), 39 deletions(-) diff --git a/dockers/docker-fpm-frr/base_image_files/TS b/dockers/docker-fpm-frr/base_image_files/TS index 799bf9ded700..e0e7ce0ebabf 100755 --- a/dockers/docker-fpm-frr/base_image_files/TS +++ b/dockers/docker-fpm-frr/base_image_files/TS @@ -5,12 +5,16 @@ PLATFORM=${PLATFORM:-`sonic-cfggen -H -v DEVICE_METADATA.localhost.platform`} -if [[ $1 == "TSA" ]]; then +if [[ $1 == "TSA" ]]; then TSA_STATE_UPDATE='{"BGP_DEVICE_GLOBAL":{"STATE":{"tsa_enabled": "true"}}}' log_msg='System Mode: Normal -> Maintenance' + err_msg='System is already in Maintenance' + desired_tsa_state=true elif [[ $1 == "TSB" ]]; then TSA_STATE_UPDATE='{"BGP_DEVICE_GLOBAL":{"STATE":{"tsa_enabled": "false"}}}' log_msg='System Mode: Maintenance -> Normal' + err_msg='System is already in Normal mode' + desired_tsa_state=false fi # Parse the device specific asic conf file, if it exists @@ -28,10 +32,16 @@ if [[ ($NUM_ASIC -gt 1) ]]; then if [ $sub_role == 'FrontEnd' ] then echo -e "BGP"$asic" : \c" - if [[ -n "$TSA_STATE_UPDATE" ]]; then - sonic-cfggen -a "$TSA_STATE_UPDATE" -w -n $NAMESPACE_PREFIX$asic - logger -t $1 -p user.info "BGP$asic: $log_msg" - echo "$log_msg" + if [[ -n "$TSA_STATE_UPDATE" ]]; then + current_tsa_state="$(sonic-cfggen -d -v BGP_DEVICE_GLOBAL.STATE.tsa_enabled -n $NAMESPACE_PREFIX$asic)" + if [[ $current_tsa_state == $desired_tsa_state ]]; then + echo "$err_msg" + logger -t $1 -p user.info "$err_msg" + else + sonic-cfggen -a "$TSA_STATE_UPDATE" -w -n $NAMESPACE_PREFIX$asic + logger -t $1 -p user.info "$log_msg" + echo "$log_msg" + fi else # If TSC is executed, invoke FRR script to check installed route-maps docker exec -i bgp$asic /usr/bin/$1 @@ -40,10 +50,16 @@ if [[ ($NUM_ASIC -gt 1) ]]; then asic=$[$asic+1] done else - if [[ -n "$TSA_STATE_UPDATE" ]]; then - sonic-cfggen -a "$TSA_STATE_UPDATE" -w - logger -t $1 -p user.info "$log_msg" - echo "$log_msg" + if [[ -n "$TSA_STATE_UPDATE" ]]; then + current_tsa_state="$(sonic-cfggen -d -v BGP_DEVICE_GLOBAL.STATE.tsa_enabled)" + if [[ $current_tsa_state == $desired_tsa_state ]]; then + echo "$err_msg" + logger -t $1 -p user.info "$err_msg" + else + sonic-cfggen -a "$TSA_STATE_UPDATE" -w + logger -t $1 -p user.info "$log_msg" + echo "$log_msg" + fi else # If TSC is executed, invoke FRR script to check installed route-maps docker exec -i bgp /usr/bin/$1 diff --git a/dockers/docker-fpm-frr/base_image_files/TSA b/dockers/docker-fpm-frr/base_image_files/TSA index 8c37525ef0a9..eba79c6ae87b 100755 --- a/dockers/docker-fpm-frr/base_image_files/TSA +++ b/dockers/docker-fpm-frr/base_image_files/TSA @@ -1,20 +1,13 @@ #!/bin/bash - -if [[ "$(sonic-cfggen -d -v BGP_DEVICE_GLOBAL.STATE.tsa_enabled)" == "true" ]]; then - echo "System is already in Maintenance" - logger -t TSA -p user.info "System is already in Maintenance" -else - # toggle the mux to standby if dualtor and any mux active - if - [[ "$(sonic-cfggen -d -v DEVICE_METADATA.localhost.subtype | tr [:upper:] [:lower:])" == *"dualtor"* ]] && - [[ $(show mux status | grep active | wc -l) > 0 ]]; - then - logger -t TSA -p user.info "Toggle all mux mode to standby" - sudo config mux mode standby all - fi - - /usr/bin/TS TSA - echo "Please execute 'config save' to preserve System mode in Maintenance after reboot or config reload" +# toggle the mux to standby if dualtor and any mux active +if +[[ "$(sonic-cfggen -d -v DEVICE_METADATA.localhost.subtype | tr [:upper:] [:lower:])" == *"dualtor"* ]] && +[[ $(show mux status | grep active | wc -l) > 0 ]]; +then + logger -t TSA -p user.info "Toggle all mux mode to standby" + sudo config mux mode standby all fi +/usr/bin/TS TSA +echo "Please execute 'config save' to preserve System mode in Maintenance after reboot or config reload" diff --git a/dockers/docker-fpm-frr/base_image_files/TSB b/dockers/docker-fpm-frr/base_image_files/TSB index 5f8d90160fcb..1343a6349f9d 100755 --- a/dockers/docker-fpm-frr/base_image_files/TSB +++ b/dockers/docker-fpm-frr/base_image_files/TSB @@ -1,17 +1,11 @@ #!/bin/bash -if [[ "$(sonic-cfggen -d -v BGP_DEVICE_GLOBAL.STATE.tsa_enabled)" == "false" ]]; then - echo "System is already in Normal mode" - logger -t TSB -p user.info "System is already in Normal mode" -else - # toggle the mux to auto if dualtor - if [[ "$(sonic-cfggen -d -v DEVICE_METADATA.localhost.subtype | tr [:upper:] [:lower:])" == *"dualtor"* ]]; - then - logger -t TSB -p user.info "Toggle all mux mode to auto" - sudo config mux mode auto all - fi - - /usr/bin/TS TSB - echo "Please execute 'config save' to preserve System mode in Normal state after reboot or config reload" +# toggle the mux to auto if dualtor +if [[ "$(sonic-cfggen -d -v DEVICE_METADATA.localhost.subtype | tr [:upper:] [:lower:])" == *"dualtor"* ]]; +then + logger -t TSB -p user.info "Toggle all mux mode to auto" + sudo config mux mode auto all fi +/usr/bin/TS TSB +echo "Please execute 'config save' to preserve System mode in Normal state after reboot or config reload" diff --git a/src/sonic-bgpcfgd/tests/test_device_global.py b/src/sonic-bgpcfgd/tests/test_device_global.py index eae1ff424e1f..ad79158aaa06 100644 --- a/src/sonic-bgpcfgd/tests/test_device_global.py +++ b/src/sonic-bgpcfgd/tests/test_device_global.py @@ -7,9 +7,15 @@ from .util import load_constants import bgpcfgd.managers_device_global from swsscommon import swsscommon +from copy import deepcopy TEMPLATE_PATH = os.path.abspath('../../dockers/docker-fpm-frr/frr') BASE_PATH = os.path.abspath('../sonic-bgpcfgd/tests/data/general/peer-group.conf/') +global_constants = { + "bgp": { + "traffic_shift_community" :"12345:12345" + } +} def constructor(): cfg_mgr = MagicMock() @@ -32,7 +38,7 @@ def get_config(): cfg_mgr.push = push cfg_mgr.get_config = get_config - constants = load_constants()['constants'] + constants = deepcopy(global_constants) common_objs = { 'directory': Directory(), 'cfg_mgr': cfg_mgr, From 6771f44f5ce5deb69f70c186298e6854dcc68060 Mon Sep 17 00:00:00 2001 From: Liu Shilong Date: Tue, 2 Aug 2022 16:24:46 +0800 Subject: [PATCH 161/259] [ci] Update azp reference to support transfering organization from Azure to sonic-net (#11602) Why I did it When transfer repo to another organization, azp reference also need change. Change azp reference to avoid pipeline failure. --- .azure-pipelines/azure-pipelines-UpgrateVersion.yml | 4 ++-- .azure-pipelines/build-commonlib.yml | 4 ++-- .azure-pipelines/docker-sonic-slave-arm64.yml | 4 ++-- .azure-pipelines/docker-sonic-slave-armhf.yml | 4 ++-- .azure-pipelines/docker-sonic-slave.yml | 4 ++-- .azure-pipelines/official-build.yml | 4 ++-- azure-pipelines.yml | 4 ++-- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.azure-pipelines/azure-pipelines-UpgrateVersion.yml b/.azure-pipelines/azure-pipelines-UpgrateVersion.yml index cc6135b045ef..33f802b0d56c 100644 --- a/.azure-pipelines/azure-pipelines-UpgrateVersion.yml +++ b/.azure-pipelines/azure-pipelines-UpgrateVersion.yml @@ -22,9 +22,9 @@ resources: repositories: - repository: buildimage type: github - name: Azure/sonic-buildimage + name: sonic-net/sonic-buildimage ref: master - endpoint: build + endpoint: sonic-net pool: sonicbld diff --git a/.azure-pipelines/build-commonlib.yml b/.azure-pipelines/build-commonlib.yml index df9bcb25ae70..a36adc625d71 100644 --- a/.azure-pipelines/build-commonlib.yml +++ b/.azure-pipelines/build-commonlib.yml @@ -11,9 +11,9 @@ resources: repositories: - repository: buildimage type: github - name: Azure/sonic-buildimage + name: sonic-net/sonic-buildimage ref: master - endpoint: build + endpoint: sonic-net jobs: - template: .azure-pipelines/template-commonlib.yml@buildimage diff --git a/.azure-pipelines/docker-sonic-slave-arm64.yml b/.azure-pipelines/docker-sonic-slave-arm64.yml index 2a9af06c3d01..6350d8fd3b5d 100644 --- a/.azure-pipelines/docker-sonic-slave-arm64.yml +++ b/.azure-pipelines/docker-sonic-slave-arm64.yml @@ -7,9 +7,9 @@ resources: repositories: - repository: buildimage type: github - name: Azure/sonic-buildimage + name: sonic-net/sonic-buildimage ref: master - endpoint: build + endpoint: sonic-net schedules: - cron: "0 8 * * *" diff --git a/.azure-pipelines/docker-sonic-slave-armhf.yml b/.azure-pipelines/docker-sonic-slave-armhf.yml index 69e73479f342..fcdad5f2cd19 100644 --- a/.azure-pipelines/docker-sonic-slave-armhf.yml +++ b/.azure-pipelines/docker-sonic-slave-armhf.yml @@ -7,9 +7,9 @@ resources: repositories: - repository: buildimage type: github - name: Azure/sonic-buildimage + name: sonic-net/sonic-buildimage ref: master - endpoint: build + endpoint: sonic-net schedules: - cron: "0 8 * * *" diff --git a/.azure-pipelines/docker-sonic-slave.yml b/.azure-pipelines/docker-sonic-slave.yml index 3ae3f88f0154..cd8a6df4aff4 100644 --- a/.azure-pipelines/docker-sonic-slave.yml +++ b/.azure-pipelines/docker-sonic-slave.yml @@ -7,9 +7,9 @@ resources: repositories: - repository: buildimage type: github - name: Azure/sonic-buildimage + name: sonic-net/sonic-buildimage ref: master - endpoint: build + endpoint: sonic-net schedules: - cron: "0 8 * * *" diff --git a/.azure-pipelines/official-build.yml b/.azure-pipelines/official-build.yml index fb986cf67039..049935940bd6 100644 --- a/.azure-pipelines/official-build.yml +++ b/.azure-pipelines/official-build.yml @@ -22,9 +22,9 @@ resources: repositories: - repository: buildimage type: github - name: Azure/sonic-buildimage + name: sonic-net/sonic-buildimage ref: master - endpoint: build + endpoint: sonic-net trigger: none pr: none diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 138add70a24e..f691b7aeeda0 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -32,8 +32,8 @@ resources: endpoint: sonic-net - repository: buildimage type: github - name: Azure/sonic-buildimage - endpoint: build + name: sonic-net/sonic-buildimage + endpoint: sonic-net ref: master variables: From 79e014efcb1678226ec2f1cbd23db84bb8c19271 Mon Sep 17 00:00:00 2001 From: Santhosh Kumar T <53558409+santhosh-kt@users.noreply.github.com> Date: Tue, 2 Aug 2022 22:25:49 +0530 Subject: [PATCH 162/259] [DellEMC] S6100 Platform Service optimization porting in 202205 (#11329) To reduce rc.local script execution time. Porting changes from [DellEMC] S6100 Platform Service optimization #10989 Changes: Moving platform-modules-s6100.service and s6100-lpc-monitor.service asynchronous to rc.local script. --- .../debian/platform-modules-s6100.init | 40 ------------------ .../debian/platform-modules-s6100.postinst | 6 +-- .../sonic-platform-modules-dell/debian/rules | 3 ++ .../s6100/scripts/s6100_platform.sh | 41 +++++++++++-------- .../systemd/platform-modules-s6100.service | 2 +- .../systemd/s6100-platform-startup.service | 2 +- 6 files changed, 30 insertions(+), 64 deletions(-) delete mode 100755 platform/broadcom/sonic-platform-modules-dell/debian/platform-modules-s6100.init diff --git a/platform/broadcom/sonic-platform-modules-dell/debian/platform-modules-s6100.init b/platform/broadcom/sonic-platform-modules-dell/debian/platform-modules-s6100.init deleted file mode 100755 index c798b24ef235..000000000000 --- a/platform/broadcom/sonic-platform-modules-dell/debian/platform-modules-s6100.init +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -### BEGIN INIT INFO -# Provides: setup-board -# Required-Start: -# Required-Stop: -# Should-Start: -# Should-Stop: -# Default-Start: S -# Default-Stop: 0 6 -# Short-Description: Setup S6100 board. -### END INIT INFO - -case "$1" in -start) - echo -n "Setting up board... " - - /usr/local/bin/iom_power_on.sh - /usr/local/bin/s6100_platform.sh init - - echo "done." - ;; - -stop) - /usr/local/bin/s6100_platform.sh deinit - echo "done." - - ;; - -force-reload|restart) - echo "Not supported" - ;; - -*) - echo "Usage: /etc/init.d/platform-modules-s6100.init {start|stop}" - exit 1 - ;; -esac - -exit 0 diff --git a/platform/broadcom/sonic-platform-modules-dell/debian/platform-modules-s6100.postinst b/platform/broadcom/sonic-platform-modules-dell/debian/platform-modules-s6100.postinst index eda8f7c8a41a..78c78fa0037f 100644 --- a/platform/broadcom/sonic-platform-modules-dell/debian/platform-modules-s6100.postinst +++ b/platform/broadcom/sonic-platform-modules-dell/debian/platform-modules-s6100.postinst @@ -1,11 +1,7 @@ # postinst script for S6100 # Enable Dell-S6100-platform-service -depmod -a systemctl enable platform-modules-s6100.service -systemctl start platform-modules-s6100.service - -systemctl enable s6100-lpc-monitor.service -systemctl start s6100-lpc-monitor.service +systemctl start --no-block platform-modules-s6100.service #DEBHELPER# diff --git a/platform/broadcom/sonic-platform-modules-dell/debian/rules b/platform/broadcom/sonic-platform-modules-dell/debian/rules index 8baafa14076a..ab13dbfef00b 100755 --- a/platform/broadcom/sonic-platform-modules-dell/debian/rules +++ b/platform/broadcom/sonic-platform-modules-dell/debian/rules @@ -90,6 +90,9 @@ override_dh_auto_install: override_dh_usrlocal: +override_dh_installmodules: + dh_installmodules --no-scripts; + override_dh_clean: dh_clean set -e; \ diff --git a/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/s6100_platform.sh b/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/s6100_platform.sh index 15763bbc9e36..34973002dc38 100755 --- a/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/s6100_platform.sh +++ b/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/s6100_platform.sh @@ -3,6 +3,30 @@ #platform init script for Dell S6100 if [[ "$1" == "init" ]]; then + depmod -a + case "$(cat /proc/cmdline)" in + *SONIC_BOOT_TYPE=warm*) + TYPE='warm' + ;; + *SONIC_BOOT_TYPE=fastfast*) + TYPE='fastfast' + ;; + *SONIC_BOOT_TYPE=fast*|*fast-reboot*) + TYPE='fast' + ;; + *SONIC_BOOT_TYPE=soft*) + TYPE='soft' + ;; + *) + TYPE='cold' + esac + + if [[ "$TYPE" == "cold" ]]; then + /usr/local/bin/iom_power_on.sh + fi + + systemctl enable s6100-lpc-monitor.service + systemctl start --no-block s6100-lpc-monitor.service pericom="/sys/bus/pci/devices/0000:08:00.0" modprobe i2c-dev @@ -24,23 +48,6 @@ if [[ "$1" == "init" ]]; then systemctl start --no-block s6100-ssd-upgrade-status.service - case "$(cat /proc/cmdline)" in - *SONIC_BOOT_TYPE=warm*) - TYPE='warm' - ;; - *SONIC_BOOT_TYPE=fastfast*) - TYPE='fastfast' - ;; - *SONIC_BOOT_TYPE=fast*|*fast-reboot*) - TYPE='fast' - ;; - *SONIC_BOOT_TYPE=soft*) - TYPE='soft' - ;; - *) - TYPE='cold' - esac - if [[ "$TYPE" == "cold" ]]; then systemctl start s6100-platform-startup.service else diff --git a/platform/broadcom/sonic-platform-modules-dell/s6100/systemd/platform-modules-s6100.service b/platform/broadcom/sonic-platform-modules-dell/s6100/systemd/platform-modules-s6100.service index 4883ecf268fd..127426f09873 100644 --- a/platform/broadcom/sonic-platform-modules-dell/s6100/systemd/platform-modules-s6100.service +++ b/platform/broadcom/sonic-platform-modules-dell/s6100/systemd/platform-modules-s6100.service @@ -1,6 +1,6 @@ [Unit] Description=Dell S6100 Platform modules -Before=pmon.service determine-reboot-cause.service +Before=pmon.service determine-reboot-cause.service pcie-check.service system-health.service watchdog-control.service DefaultDependencies=no [Service] diff --git a/platform/broadcom/sonic-platform-modules-dell/s6100/systemd/s6100-platform-startup.service b/platform/broadcom/sonic-platform-modules-dell/s6100/systemd/s6100-platform-startup.service index d7a40f43033c..ecba7b006361 100644 --- a/platform/broadcom/sonic-platform-modules-dell/s6100/systemd/s6100-platform-startup.service +++ b/platform/broadcom/sonic-platform-modules-dell/s6100/systemd/s6100-platform-startup.service @@ -1,6 +1,6 @@ [Unit] Description=Dell S6100 Platform Startup Service -Before=pmon.service determine-reboot-cause.service +Before=pmon.service determine-reboot-cause.service pcie-check.service system-health.service watchdog-control.service DefaultDependencies=no [Service] From f30e85358eb5859cc310b7873c521c383d87547f Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Sun, 7 Aug 2022 11:29:11 +0800 Subject: [PATCH 163/259] [ci/build]: Upgrade SONiC package versions (#11438) Upgrade SONiC Versions --- .../build-sonic-slave-bullseye/versions-git | 10 ++-- .../build-sonic-slave-bullseye/versions-web | 5 +- .../build-sonic-slave-buster/versions-git | 2 +- .../build-sonic-slave-buster/versions-web | 4 +- .../build-sonic-slave-stretch/versions-web | 4 +- files/build/versions/default/versions-docker | 24 ++++---- files/build/versions/default/versions-git | 14 ++--- files/build/versions/default/versions-web | 1 - .../versions-deb-bullseye | 4 +- .../versions-deb-bullseye | 2 +- .../versions-py3 | 2 +- .../docker-config-engine-buster/versions-py3 | 2 +- .../docker-database/versions-deb-bullseye | 2 +- .../docker-dhcp-relay/versions-deb-bullseye | 2 +- .../docker-macsec/versions-deb-bullseye | 2 +- .../dockers/docker-mux/versions-deb-bullseye | 2 +- .../docker-orchagent/versions-deb-bullseye | 4 +- .../versions-deb-bullseye | 4 +- .../versions-deb-bullseye | 2 +- .../docker-sonic-mgmt-framework/versions-py3 | 15 ++--- .../versions-py3-all-armhf | 1 - .../versions-deb-bullseye | 2 +- .../dockers/docker-sonic-vs/versions-py2 | 2 +- .../dockers/docker-sonic-vs/versions-py3 | 4 +- .../docker-syncd-brcm/versions-deb-buster | 2 +- .../docker-syncd-mlnx/versions-deb-bullseye | 4 +- .../versions-deb-bullseye | 59 +++++++++---------- .../versions-deb-bullseye-arm64 | 7 +-- .../versions-deb-bullseye-armhf | 11 ++-- .../dockers/sonic-slave-bullseye/versions-git | 2 +- .../dockers/sonic-slave-bullseye/versions-py3 | 6 +- .../sonic-slave-buster/versions-deb-buster | 9 ++- .../dockers/sonic-slave-buster/versions-git | 2 +- .../dockers/sonic-slave-buster/versions-py3 | 8 +-- .../dockers/sonic-slave-stretch/versions-git | 2 +- .../dockers/sonic-slave-stretch/versions-py3 | 2 +- .../versions/host-image/versions-deb-bullseye | 16 ++--- .../host-image/versions-deb-bullseye-arm64 | 4 -- .../host-image/versions-deb-bullseye-armhf | 4 +- files/build/versions/host-image/versions-py3 | 6 +- 40 files changed, 123 insertions(+), 137 deletions(-) delete mode 100644 files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3-all-armhf diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-git b/files/build/versions/build/build-sonic-slave-bullseye/versions-git index 2922c0970b74..a6c5a5b75ec6 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-git +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-git @@ -1,14 +1,14 @@ -https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 +https://github.com/CESNET/libyang.git==0c609c35080f523c9696db48976de8257d174102 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b -https://github.com/flashrom/flashrom.git==edcea80d68e0f029b79bc273ba622dc4a3e6cb2b -https://github.com/FreeRADIUS/freeradius-server.git==32cecd3590f9fd51cef222afe8c010c389e613f2 -https://github.com/FreeRADIUS/pam_radius.git==5e67868520e90a489626928f28c0befa531bf7d2 +https://github.com/flashrom/flashrom.git==36299dbab2397f25c4009339018065dc79d77452 +https://github.com/FreeRADIUS/freeradius-server.git==6aa357b999415e58e6fbb4db269d17c474b3ee04 +https://github.com/FreeRADIUS/pam_radius.git==272f6420c5c01f9bdb27c98e5edb44de406f4631 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 https://github.com/thom311/libnl==3399f520bae2231c5b6a6c2adce52b383292c520 https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b61368d4c5 https://salsa.debian.org/kernel-team/ethtool/==5ead2b58847600ea0ccd0aa76b5bedce678f17ee -https://salsa.debian.org/kernel-team/initramfs-tools.git==9a4d579050b7221e8a5e4be7160e8cab25c3065b +https://salsa.debian.org/kernel-team/initramfs-tools.git==dd16eade69ef76b304a369fac2f6c0de508b855b https://salsa.debian.org/sk-guest/monit.git==c9da7ebb1f35dfba17b50b5969a6e75e29cbec0d https://salsa.debian.org/ssh-team/openssh.git==de790f931452a2dcb4490d074d5a16ab8456a523 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-web b/files/build/versions/build/build-sonic-slave-bullseye/versions-web index 529de49dbe36..78ad627bca63 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-web +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-web @@ -9,7 +9,6 @@ http://deb.debian.org/debian/pool/main/n/ntp/ntp_4.2.8p15+dfsg.orig.tar.xz==c1c5 http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0-3~bpo9+1.debian.tar.xz==ef340aedc6fd42c549cd503bffb498b2 http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0-3~bpo9+1.dsc==be4ce11ef67268e59e4b6be587327c40 http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0.orig.tar.gz==6d565680a4af0d2e261abbc3e3431b2b -https://chrome-infra-packages.appspot.com/client?platform=linux-amd64&version=git_revision:2fe24264d5b4585ecd16ba8e9bb582d8f4b20875==e1557fb4a093dec95a2251d01f0d4cd3 https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.dsc==de6e9967da7c4992ffd1a72b815994f7 https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.tar.gz==b959c7ac01839e9b96a733d27b19e59e https://deb.debian.org/debian/pool/main/k/kdump-tools/kdump-tools_1.6.8.4.dsc==f96a03bb090ab03d484e5d232161fafe @@ -49,5 +48,5 @@ https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openss https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/python3.9-minimal_3.9.2-1+fips_amd64.deb==22b10a1f10cdcf1ad5e80e60803e2023 https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/python3.9_3.9.2-1+fips_amd64.deb==a0caf3616afdf36c3480b94d496c58df https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/symcrypt-openssl_0.1_amd64.deb==94f118009a4426cc5de4d6a0f7d6974d -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-5/libsaibcm-dev_7.1.0.0-5_amd64.deb==e3712a4071becf90f5c7d4d1bf930b7b -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-5/libsaibcm_7.1.0.0-5_amd64.deb==8830dc77ffc8e65f0b14ca9397932518 \ No newline at end of file +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-6/libsaibcm-dev_7.1.0.0-6_amd64.deb==dc4d2c529376a4948463485005d78c86 +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-6/libsaibcm_7.1.0.0-6_amd64.deb==7666e5d02364e0c176a6931edc597ea9 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-git b/files/build/versions/build/build-sonic-slave-buster/versions-git index f61a89afba4a..04dc2ef27459 100644 --- a/files/build/versions/build/build-sonic-slave-buster/versions-git +++ b/files/build/versions/build/build-sonic-slave-buster/versions-git @@ -1,4 +1,4 @@ -https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 +https://github.com/CESNET/libyang.git==0c609c35080f523c9696db48976de8257d174102 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 https://github.com/Mellanox/libpsample.git==62bb27d9a49424e45191eee81df7ce0d8c74e774 https://github.com/sflow/host-sflow==4ff2a940848fa9244a289f9c96fd9681d31a0264 diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-web b/files/build/versions/build/build-sonic-slave-buster/versions-web index efffd6a3bf92..be481d0c9e8d 100644 --- a/files/build/versions/build/build-sonic-slave-buster/versions-web +++ b/files/build/versions/build/build-sonic-slave-buster/versions-web @@ -25,5 +25,5 @@ https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0-4.debia https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0-4.dsc?sv=2015-04-05&sr=b&sig=pWfg55owvQ2jZtZ6ylHp0OP8uZyfc9sxO6H%2BP4Ez7w4%3D&se=2156-02-02T17%3A20%3A05Z&sp=r==6917fe7b3ada9313be94713dd50fee7b https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0.orig.tar.gz?sv=2015-04-05&sr=b&sig=%2BrAjWESiSNRCMN7NGqEqVGceLefpwwS%2FWPKEfJpPLSQ%3D&se=2156-02-02T17%3A17%3A20Z&sp=r==0be59730ebce071eceaf6bfdb8d3a20e https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm_dnx_7.1.0.0-1_amd64.deb==e84a66a741f04aebe7085b0ae970f4e3 -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-5/libsaibcm-dev_7.1.0.0-5_amd64.deb==e3712a4071becf90f5c7d4d1bf930b7b -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-5/libsaibcm_7.1.0.0-5_amd64.deb==8830dc77ffc8e65f0b14ca9397932518 \ No newline at end of file +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-6/libsaibcm-dev_7.1.0.0-6_amd64.deb==dc4d2c529376a4948463485005d78c86 +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-6/libsaibcm_7.1.0.0-6_amd64.deb==7666e5d02364e0c176a6931edc597ea9 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-stretch/versions-web b/files/build/versions/build/build-sonic-slave-stretch/versions-web index 36216b15c306..3a05aff056b4 100644 --- a/files/build/versions/build/build-sonic-slave-stretch/versions-web +++ b/files/build/versions/build/build-sonic-slave-stretch/versions-web @@ -1,2 +1,2 @@ -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-5/libsaibcm-dev_7.1.0.0-5_amd64.deb==e3712a4071becf90f5c7d4d1bf930b7b -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-5/libsaibcm_7.1.0.0-5_amd64.deb==8830dc77ffc8e65f0b14ca9397932518 \ No newline at end of file +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-6/libsaibcm-dev_7.1.0.0-6_amd64.deb==dc4d2c529376a4948463485005d78c86 +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-6/libsaibcm_7.1.0.0-6_amd64.deb==7666e5d02364e0c176a6931edc597ea9 \ No newline at end of file diff --git a/files/build/versions/default/versions-docker b/files/build/versions/default/versions-docker index d37a1aec3714..c53272a4b01e 100644 --- a/files/build/versions/default/versions-docker +++ b/files/build/versions/default/versions-docker @@ -1,15 +1,15 @@ -amd64:amd64/debian:bullseye==sha256:9a67b70d0ba1d7c7690f917eedd8d24974dd8fd493205368b1e555a90c954208 -amd64:amd64/debian:buster==sha256:0e328f15f5cb0f93bff52a37d98f0bbfc40f97fcaf250096fd2b2c6871a497eb -amd64:debian:bullseye==sha256:859ea45db307402ee024b153c7a63ad4888eb4751921abbef68679fc73c4c739 -amd64:debian:buster==sha256:9740683722a2a8aa497a5b23e4bc229fcf8b8991e26d3935540c7704ff24012e +amd64:amd64/debian:bullseye==sha256:3098a8fda8e7bc6bc92c37aaaa9d46fa0dd93992203ca3f53bb84e1d00ffb796 +amd64:amd64/debian:buster==sha256:7e1f93236be2e4a04a2b83e7fda8c0186e72e4c1e8cc830e097710ccc71d2dcf +amd64:debian:bullseye==sha256:82bab30ed448b8e2509aabe21f40f0607d905b7fd0dec72802627a20274eba55 +amd64:debian:buster==sha256:fb9654aac57319592f1d51497c62001e7033eddf059355408a0b53f7c71f8d5f amd64:debian:stretch==sha256:c5c5200ff1e9c73ffbf188b4a67eb1c91531b644856b4aefe86a58d2f0cb05be -arm64:arm64v8/debian:bullseye==sha256:bd276cb1059f6502e342d3052a4c2767f2b3a0196508f5c2c34ce6da4a15b104 -arm64:arm64v8/debian:buster==sha256:e774922f3043b6564c6719a7ec32f25d4b70304eff9dbd725161d4033cf38038 -arm64:debian:bullseye==sha256:859ea45db307402ee024b153c7a63ad4888eb4751921abbef68679fc73c4c739 -arm64:debian:buster==sha256:9740683722a2a8aa497a5b23e4bc229fcf8b8991e26d3935540c7704ff24012e +arm64:arm64v8/debian:bullseye==sha256:ede74d90543e4dedd6662653de639d72e82640717f99041591dc9f34c186f0f9 +arm64:arm64v8/debian:buster==sha256:d0f5ed350e7624e19f0f40c2c0cc31b0b2811f444ca929a083fefe449432333d +arm64:debian:bullseye==sha256:82bab30ed448b8e2509aabe21f40f0607d905b7fd0dec72802627a20274eba55 +arm64:debian:buster==sha256:fb9654aac57319592f1d51497c62001e7033eddf059355408a0b53f7c71f8d5f arm64:debian:stretch==sha256:c5c5200ff1e9c73ffbf188b4a67eb1c91531b644856b4aefe86a58d2f0cb05be -armhf:arm32v7/debian:bullseye==sha256:c34498c16d591fe7f5a4c955a2e7c960e3066fa8a1d9fde6b9230b9adfbf8b20 -armhf:arm32v7/debian:buster==sha256:27ab779c4d59ead815ff584f2e41b34a6b261db358b4cdfe664b8bfa1f494ae8 -armhf:debian:bullseye==sha256:859ea45db307402ee024b153c7a63ad4888eb4751921abbef68679fc73c4c739 -armhf:debian:buster==sha256:9740683722a2a8aa497a5b23e4bc229fcf8b8991e26d3935540c7704ff24012e +armhf:arm32v7/debian:bullseye==sha256:48179204080219ed1d2dd14889619783b3eb2bc68cfcb05f64e8bf3403e6e480 +armhf:arm32v7/debian:buster==sha256:1f7bef58f2040ee2d97c1f40eb5ff29f8c2aa51eeaa90931ac11e7c6680103aa +armhf:debian:bullseye==sha256:82bab30ed448b8e2509aabe21f40f0607d905b7fd0dec72802627a20274eba55 +armhf:debian:buster==sha256:fb9654aac57319592f1d51497c62001e7033eddf059355408a0b53f7c71f8d5f armhf:debian:stretch==sha256:c5c5200ff1e9c73ffbf188b4a67eb1c91531b644856b4aefe86a58d2f0cb05be \ No newline at end of file diff --git a/files/build/versions/default/versions-git b/files/build/versions/default/versions-git index 3b009fa3f127..d5b1903d5299 100644 --- a/files/build/versions/default/versions-git +++ b/files/build/versions/default/versions-git @@ -1,15 +1,15 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==d22bf607218d50bf20444b0610f62b265f829dbc +https://chromium.googlesource.com/chromium/tools/depot_tools.git==eb8426e2ac6e8b03837a8d093863008fbec79860 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f -https://github.com/CESNET/libyang.git==87375f15159545a87a1e0de200f5d9d67e9091d7 +https://github.com/CESNET/libyang.git==0c609c35080f523c9696db48976de8257d174102 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b https://github.com/dyninc/OpenBFDD.git==e35f43ad8d2b3f084e96a84c392528a90d05a287 -https://github.com/flashrom/flashrom.git==edcea80d68e0f029b79bc273ba622dc4a3e6cb2b -https://github.com/FreeRADIUS/freeradius-server.git==32cecd3590f9fd51cef222afe8c010c389e613f2 -https://github.com/FreeRADIUS/pam_radius.git==5e67868520e90a489626928f28c0befa531bf7d2 +https://github.com/flashrom/flashrom.git==36299dbab2397f25c4009339018065dc79d77452 +https://github.com/FreeRADIUS/freeradius-server.git==6aa357b999415e58e6fbb4db269d17c474b3ee04 +https://github.com/FreeRADIUS/pam_radius.git==272f6420c5c01f9bdb27c98e5edb44de406f4631 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 -https://github.com/lguohan/gnxi.git==53901aba9ead82be21f1408a601b6266dcf1e3e4 +https://github.com/lguohan/gnxi.git==f2b11e45b16ab13485ae14933f30c18ee6336499 https://github.com/Marvell-switching/mrvl-prestera.git==9dbae444204a2c27b33be698ce497d55926b8893 https://github.com/Mellanox/libpsample.git==62bb27d9a49424e45191eee81df7ce0d8c74e774 https://github.com/p4lang/scapy-vxlan.git==85ffe83da156568ee47a0750f638227e6e1d7479 @@ -18,6 +18,6 @@ https://github.com/sflow/sflowtool==5307b19399ffb0a1a873c9d09e78cb5011deaf6f https://github.com/thom311/libnl==3399f520bae2231c5b6a6c2adce52b383292c520 https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b61368d4c5 https://salsa.debian.org/kernel-team/ethtool/==5ead2b58847600ea0ccd0aa76b5bedce678f17ee -https://salsa.debian.org/kernel-team/initramfs-tools.git==9a4d579050b7221e8a5e4be7160e8cab25c3065b +https://salsa.debian.org/kernel-team/initramfs-tools.git==dd16eade69ef76b304a369fac2f6c0de508b855b https://salsa.debian.org/sk-guest/monit.git==c9da7ebb1f35dfba17b50b5969a6e75e29cbec0d https://salsa.debian.org/ssh-team/openssh.git==de790f931452a2dcb4490d074d5a16ab8456a523 \ No newline at end of file diff --git a/files/build/versions/default/versions-web b/files/build/versions/default/versions-web index 098b884ecc8e..d196d694dd87 100644 --- a/files/build/versions/default/versions-web +++ b/files/build/versions/default/versions-web @@ -25,7 +25,6 @@ http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0.orig.tar.gz==6d http://www.mellanox.com/downloads/MFT/mft-4.20.0-34-x86_64-deb.tgz==87ad9025d4fc0c3abb9272c3e93af496 https://archive.apache.org/dist/thrift/0.14.1/thrift-0.14.1.tar.gz==c64434548438df2cb1e53fb27c600e85 https://bootstrap.pypa.io/pip/2.7/get-pip.py==60e8267eb1b7bc71dc4843eb7bd294d3 -https://chrome-infra-packages.appspot.com/client?platform=linux-amd64&version=git_revision:2fe24264d5b4585ecd16ba8e9bb582d8f4b20875==e1557fb4a093dec95a2251d01f0d4cd3 https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.dsc==de6e9967da7c4992ffd1a72b815994f7 https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.tar.gz==b959c7ac01839e9b96a733d27b19e59e https://deb.debian.org/debian/pool/main/k/kdump-tools/kdump-tools_1.6.8.4.dsc==f96a03bb090ab03d484e5d232161fafe diff --git a/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye b/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye index 950389e1ed40..62230b67e3f7 100644 --- a/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye @@ -1,5 +1,5 @@ ca-certificates==20210119 -curl==7.74.0-1.3+deb11u1 +curl==7.74.0-1.3+deb11u2 iproute2==5.10.0-4 jq==1.6-2.1 less==551-2 @@ -9,7 +9,7 @@ libbrotli1==1.0.9-2+b2 libbsd0==0.11.3-1 libcap2==1:2.44-1 libcap2-bin==1:2.44-1 -libcurl4==7.74.0-1.3+deb11u1 +libcurl4==7.74.0-1.3+deb11u2 libdaemon0==0.14-7.1 libdbus-1-3==1.12.20-2 libelf1==0.183-1 diff --git a/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye b/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye index a541786cb02e..ece218a17250 100644 --- a/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye @@ -49,7 +49,7 @@ libtsan0==10.2.1-6 libubsan1==10.2.1-6 libyang==1.0.73 libyang-cpp==1.0.73 -linux-libc-dev==5.10.127-1 +linux-libc-dev==5.10.127-2 make==4.3-4.1 patch==2.7.6-7 python3-dev==3.9.2-3 diff --git a/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 b/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 index fc989a7fb4e6..37b2533c408a 100644 --- a/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 +++ b/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 @@ -10,6 +10,6 @@ pyangbind==0.8.1 pyyaml==5.4.1 redis==3.5.3 redis-dump-load==1.1 -regex==2022.7.9 +regex==2022.7.25 six==1.16.0 xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-buster/versions-py3 b/files/build/versions/dockers/docker-config-engine-buster/versions-py3 index fc989a7fb4e6..37b2533c408a 100644 --- a/files/build/versions/dockers/docker-config-engine-buster/versions-py3 +++ b/files/build/versions/dockers/docker-config-engine-buster/versions-py3 @@ -10,6 +10,6 @@ pyangbind==0.8.1 pyyaml==5.4.1 redis==3.5.3 redis-dump-load==1.1 -regex==2022.7.9 +regex==2022.7.25 six==1.16.0 xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-database/versions-deb-bullseye b/files/build/versions/dockers/docker-database/versions-deb-bullseye index 53ea345145cb..0c7520529655 100644 --- a/files/build/versions/dockers/docker-database/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-database/versions-deb-bullseye @@ -3,7 +3,7 @@ gdbserver==10.1-1.7 libbabeltrace1==1.5.8-1+b3 libboost-regex1.74.0==1.74.0-9 libcbor0==0.5.0+dfsg-2 -libcurl3-gnutls==7.74.0-1.3+deb11u1 +libcurl3-gnutls==7.74.0-1.3+deb11u2 libdebuginfod1==0.183-1 libdw1==0.183-1 libedit2==3.1-20191231-2+b1 diff --git a/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bullseye b/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bullseye index 011cc321d68b..4759b47b46f1 100644 --- a/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bullseye @@ -6,7 +6,7 @@ libbabeltrace1==1.5.8-1+b3 libboost-regex1.74.0==1.74.0-9 libboost-thread1.74.0==1.74.0-9 libcbor0==0.5.0+dfsg-2 -libcurl3-gnutls==7.74.0-1.3+deb11u1 +libcurl3-gnutls==7.74.0-1.3+deb11u2 libdebuginfod1==0.183-1 libdns-export1110==1:9.11.19+dfsg-2.1 libdw1==0.183-1 diff --git a/files/build/versions/dockers/docker-macsec/versions-deb-bullseye b/files/build/versions/dockers/docker-macsec/versions-deb-bullseye index 3df82080595d..57ffb475a1fa 100644 --- a/files/build/versions/dockers/docker-macsec/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-macsec/versions-deb-bullseye @@ -3,7 +3,7 @@ gdbserver==10.1-1.7 libbabeltrace1==1.5.8-1+b3 libboost-regex1.74.0==1.74.0-9 libcbor0==0.5.0+dfsg-2 -libcurl3-gnutls==7.74.0-1.3+deb11u1 +libcurl3-gnutls==7.74.0-1.3+deb11u2 libdebuginfod1==0.183-1 libdw1==0.183-1 libedit2==3.1-20191231-2+b1 diff --git a/files/build/versions/dockers/docker-mux/versions-deb-bullseye b/files/build/versions/dockers/docker-mux/versions-deb-bullseye index 65be3dbbb031..25fe2a088435 100644 --- a/files/build/versions/dockers/docker-mux/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-mux/versions-deb-bullseye @@ -7,7 +7,7 @@ libboost-program-options1.74.0==1.74.0-9 libboost-regex1.74.0==1.74.0-9 libboost-thread1.74.0==1.74.0-9 libcbor0==0.5.0+dfsg-2 -libcurl3-gnutls==7.74.0-1.3+deb11u1 +libcurl3-gnutls==7.74.0-1.3+deb11u2 libdebuginfod1==0.183-1 libdw1==0.183-1 libedit2==3.1-20191231-2+b1 diff --git a/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye b/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye index 373ceb8f94f4..c57efac6d2f9 100644 --- a/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye @@ -26,7 +26,7 @@ libcc1-0==10.2.1-6 libcrypt-dev==1:4.4.18-4 libctf-nobfd0==2.35.2-2 libctf0==2.35.2-2 -libcurl3-gnutls==7.74.0-1.3+deb11u1 +libcurl3-gnutls==7.74.0-1.3+deb11u2 libdebuginfod1==0.183-1 libdpkg-perl==1.20.11 libdw1==0.183-1 @@ -66,7 +66,7 @@ libtirpc-dev==1.3.1-1 libtsan0==10.2.1-6 libubsan1==10.2.1-6 libunwind8==1.3.2-2 -linux-libc-dev==5.10.127-1 +linux-libc-dev==5.10.127-2 make==4.3-4.1 ndisc6==1.0.4-2 ndppd==0.2.5-6 diff --git a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye index 789d0b818fb4..41c2020f604f 100644 --- a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye @@ -34,7 +34,7 @@ libcc1-0==10.2.1-6 libcrypt-dev==1:4.4.18-4 libctf-nobfd0==2.35.2-2 libctf0==2.35.2-2 -libcurl3-gnutls==7.74.0-1.3+deb11u1 +libcurl3-gnutls==7.74.0-1.3+deb11u2 libdatrie1==0.2.13-1 libdbi1==0.9.0-6 libdebuginfod1==0.183-1 @@ -100,7 +100,7 @@ libxdmcp6==1:1.1.2-3 libxext6==2:1.3.3-1.1 libxml2==2.9.10+dfsg-6.7+deb11u2 libxrender1==1:0.9.10-1 -linux-libc-dev==5.10.127-1 +linux-libc-dev==5.10.127-2 lm-sensors==1:3.6.0-7 lm-sensors-dbgsym==1:3.6.0-7 make==4.3-4.1 diff --git a/files/build/versions/dockers/docker-router-advertiser/versions-deb-bullseye b/files/build/versions/dockers/docker-router-advertiser/versions-deb-bullseye index 8af2912a05c1..207001e0f1f8 100644 --- a/files/build/versions/dockers/docker-router-advertiser/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-router-advertiser/versions-deb-bullseye @@ -3,7 +3,7 @@ gdbserver==10.1-1.7 libbabeltrace1==1.5.8-1+b3 libboost-regex1.74.0==1.74.0-9 libcbor0==0.5.0+dfsg-2 -libcurl3-gnutls==7.74.0-1.3+deb11u1 +libcurl3-gnutls==7.74.0-1.3+deb11u2 libdebuginfod1==0.183-1 libdw1==0.183-1 libedit2==3.1-20191231-2+b1 diff --git a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 index 730b58c9d931..af3ca22ed5c3 100644 --- a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 +++ b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 @@ -1,26 +1,27 @@ -attrs==21.4.0 +attrs==22.1.0 certifi==2017.4.17 charset-normalizer==2.1.0 click==8.1.3 clickclick==20.10.2 connexion==2.7.0 -flask==2.1.2 +flask==2.2.1 grpcio==1.47.0 grpcio-tools==1.20.0 idna==3.3 importlib-metadata==4.12.0 -importlib-resources==5.8.0 +importlib-resources==5.9.0 inflection==0.5.1 itsdangerous==2.1.2 -jsonschema==4.7.1 +jsonschema==4.9.1 openapi-schema-validator==0.2.3 openapi-spec-validator==0.4.0 -protobuf==4.21.2 +pkgutil_resolve_name==1.3.10 +protobuf==4.21.4 pyrsistent==0.18.1 python-dateutil==2.6.0 requests==2.28.1 six==1.11.0 typing_extensions==4.3.0 urllib3==1.26.5 -werkzeug==2.1.2 -zipp==3.8.0 \ No newline at end of file +werkzeug==2.2.1 +zipp==3.8.1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3-all-armhf b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3-all-armhf deleted file mode 100644 index 7bf28f48a622..000000000000 --- a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3-all-armhf +++ /dev/null @@ -1 +0,0 @@ -jsonschema==4.7.2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-telemetry/versions-deb-bullseye b/files/build/versions/dockers/docker-sonic-telemetry/versions-deb-bullseye index 8bea8bf749b4..406135762005 100644 --- a/files/build/versions/dockers/docker-sonic-telemetry/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-sonic-telemetry/versions-deb-bullseye @@ -3,7 +3,7 @@ gdbserver==10.1-1.7 libbabeltrace1==1.5.8-1+b3 libboost-regex1.74.0==1.74.0-9 libcbor0==0.5.0+dfsg-2 -libcurl3-gnutls==7.74.0-1.3+deb11u1 +libcurl3-gnutls==7.74.0-1.3+deb11u2 libdebuginfod1==0.183-1 libdw1==0.183-1 libedit2==3.1-20191231-2+b1 diff --git a/files/build/versions/dockers/docker-sonic-vs/versions-py2 b/files/build/versions/dockers/docker-sonic-vs/versions-py2 index 1db34fe35214..f6389557e01f 100644 --- a/files/build/versions/dockers/docker-sonic-vs/versions-py2 +++ b/files/build/versions/dockers/docker-sonic-vs/versions-py2 @@ -10,4 +10,4 @@ pyroute2==0.5.3 requests==2.27.1 scapy==2.4.0 six==1.16.0 -urllib3==1.26.10 \ No newline at end of file +urllib3==1.26.11 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-vs/versions-py3 b/files/build/versions/dockers/docker-sonic-vs/versions-py3 index 8f38fca76681..b61e61ec9e48 100644 --- a/files/build/versions/dockers/docker-sonic-vs/versions-py3 +++ b/files/build/versions/dockers/docker-sonic-vs/versions-py3 @@ -20,7 +20,7 @@ prettyprinter==0.18.0 ptyprocess==0.7.0 pycairo==1.21.0 pygments==2.12.0 -pygobject==3.42.1 +pygobject==3.42.2 pyroute2==0.5.14 requests==2.28.1 scapy==2.4.4 @@ -28,7 +28,7 @@ semantic-version==2.10.0 systemd-python==234 tabulate==0.8.2 toposort==1.6 -urllib3==1.26.10 +urllib3==1.26.11 wcwidth==0.2.5 websocket-client==1.3.3 www-authenticate==0.9.2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm/versions-deb-buster index 4bec997d7613..0890405f5df4 100644 --- a/files/build/versions/dockers/docker-syncd-brcm/versions-deb-buster +++ b/files/build/versions/dockers/docker-syncd-brcm/versions-deb-buster @@ -12,7 +12,7 @@ libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 libipt2==2.0-2 libkmod2==26-1 libpopt0==1.16-12 -libsaibcm==7.1.0.0-5 +libsaibcm==7.1.0.0-6 libsaimetadata==1.0.0 libsaimetadata-dbg==1.0.0 libsairedis==1.0.0 diff --git a/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye index 1af86cb382fc..8498396803ae 100644 --- a/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye @@ -9,7 +9,7 @@ libc-dev-bin==2.31-13+deb11u3 libc6-dev==2.31-13+deb11u3 libcbor0==0.5.0+dfsg-2 libcrypt-dev==1:4.4.18-4 -libcurl3-gnutls==7.74.0-1.3+deb11u1 +libcurl3-gnutls==7.74.0-1.3+deb11u2 libdebuginfod1==0.183-1 libdw1==0.183-1 libedit2==3.1-20191231-2+b1 @@ -37,7 +37,7 @@ libswsscommon-dbg==1.0.0 libtirpc-dev==1.3.1-1 libunwind8==1.3.2-2 libxml2==2.9.10+dfsg-6.7+deb11u2 -linux-libc-dev==5.10.127-1 +linux-libc-dev==5.10.127-2 mft==4.20.0-34 mlnx-sai==1.mlnx.SAIRel1.21.2.0 openssh-client==1:8.4p1-5+deb11u1 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye index 3630e96c0cbf..157ba92383bf 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye @@ -58,7 +58,7 @@ cpp==4:10.2.1-1 cpp-10==10.2.1-6 cppcheck==2.3-1 cron==3.0pl1-137 -curl==7.74.0-1.3+deb11u1 +curl==7.74.0-1.3+deb11u2 dbus==1.12.20-2 dbus-user-session==1.12.20-2 dconf-gsettings-backend==0.38.0-2 @@ -175,11 +175,10 @@ gpg-wks-client==2.2.27-2+deb11u2 gpg-wks-server==2.2.27-2+deb11u2 gpgconf==2.2.27-2+deb11u2 gpgsm==2.2.27-2+deb11u2 -gpgv==2.2.27-2+deb11u2 graphviz==2.42.2-5 groff==1.22.4-6 groff-base==1.22.4-6 -gsasl-common==1.10.0-4 +gsasl-common==1.10.0-4+deb11u1 gsettings-desktop-schemas==3.38.0-2 gsfonts==1:8.11+urwcyr1.0.7~pre44-4.5 gstreamer1.0-libav==1.18.4-3 @@ -424,10 +423,10 @@ libctf0==2.35.2-2 libcunit1==2.1-3-dfsg-2.3 libcunit1-dev==2.1-3-dfsg-2.3 libcups2==2.3.3op2-3+deb11u2 -libcurl3-gnutls==7.74.0-1.3+deb11u1 -libcurl3-nss==7.74.0-1.3+deb11u1 -libcurl4==7.74.0-1.3+deb11u1 -libcurl4-nss-dev==7.74.0-1.3+deb11u1 +libcurl3-gnutls==7.74.0-1.3+deb11u2 +libcurl3-nss==7.74.0-1.3+deb11u2 +libcurl4==7.74.0-1.3+deb11u2 +libcurl4-nss-dev==7.74.0-1.3+deb11u2 libdaemon-dev==0.14-7.1 libdaemon0==0.14-7.1 libdata-dpath-perl==0.58-1 @@ -595,7 +594,6 @@ libgmock-dev==1.10.0.20201025-1.1 libgmp-dev==2:6.2.1+dfsg-1+deb11u1 libgmpxx4ldbl==2:6.2.1+dfsg-1+deb11u1 libgnutls-dane0==3.7.1-5+deb11u1 -libgnutls30==3.7.1-5+deb11u1 libgomp1==10.2.1-6 libgoogle-perftools4==2.8.1-1 libgpgme11==1.14.0-1+b2 @@ -604,7 +602,7 @@ libgraphite2-3==1.3.14-1 libgraphite2-dev==1.3.14-1 libgs9==9.53.3~dfsg-7+deb11u2 libgs9-common==9.53.3~dfsg-7+deb11u2 -libgsasl7==1.10.0-4 +libgsasl7==1.10.0-4+deb11u1 libgsm1==1.0.18-2 libgssrpc4==1.18.3-6+deb11u1 libgstreamer-plugins-base1.0-0==1.18.4-2 @@ -695,7 +693,7 @@ libjbig0==2.1-3.1+b2 libjbig2dec0==0.19-2 libjemalloc-dev==5.2.1-3 libjemalloc2==5.2.1-3 -libjetty9-java==9.4.39-3 +libjetty9-java==9.4.39-3+deb11u1 libjpeg62-turbo==1:2.0.6-4 libjq1==1.6-2.1 libjs-bootstrap4==4.5.2+dfsg1-7 @@ -1084,7 +1082,6 @@ libsrt1.4-gnutls==1.4.2-1.3 libssh-gcrypt-4==0.9.5-1+deb11u1 libssh2-1==1.9.0-2 libssl-dev==1.1.1n-0+deb11u3 -libssl1.1==1.1.1n-0+deb11u3 libstdc++-10-dev==10.2.1-6 libstemmer0d==2.1.0-1 libstrictures-perl==2.000006-1 @@ -1267,16 +1264,16 @@ libxdamage1==1:1.1.5-2 libxdelta2==1.1.3-9.3 libxdmcp-dev==1:1.1.2-3 libxdmcp6==1:1.1.2-3 -libxencall1==4.14.4+74-gd7b22226b5-1 -libxendevicemodel1==4.14.4+74-gd7b22226b5-1 -libxenevtchn1==4.14.4+74-gd7b22226b5-1 -libxenforeignmemory1==4.14.4+74-gd7b22226b5-1 -libxengnttab1==4.14.4+74-gd7b22226b5-1 -libxenhypfs1==4.14.4+74-gd7b22226b5-1 -libxenmisc4.14==4.14.4+74-gd7b22226b5-1 -libxenstore3.0==4.14.4+74-gd7b22226b5-1 -libxentoolcore1==4.14.4+74-gd7b22226b5-1 -libxentoollog1==4.14.4+74-gd7b22226b5-1 +libxencall1==4.14.5+24-g87d90d511c-1 +libxendevicemodel1==4.14.5+24-g87d90d511c-1 +libxenevtchn1==4.14.5+24-g87d90d511c-1 +libxenforeignmemory1==4.14.5+24-g87d90d511c-1 +libxengnttab1==4.14.5+24-g87d90d511c-1 +libxenhypfs1==4.14.5+24-g87d90d511c-1 +libxenmisc4.14==4.14.5+24-g87d90d511c-1 +libxenstore3.0==4.14.5+24-g87d90d511c-1 +libxentoolcore1==4.14.5+24-g87d90d511c-1 +libxentoollog1==4.14.5+24-g87d90d511c-1 libxerces2-java==2.12.1-1 libxext-dev==2:1.3.3-1.1 libxext6==2:1.3.3-1.1 @@ -1343,12 +1340,12 @@ libzvbi0==0.2.35-18 libzzip-0-13==0.13.62-3.3+deb11u1 licensecheck==3.1.1-2 lintian==2.104.0 -linux-compiler-gcc-10-x86==5.10.127-1 -linux-headers-5.10.0-16-amd64==5.10.127-1 -linux-headers-5.10.0-16-common==5.10.127-1 -linux-headers-amd64==5.10.127-1 -linux-kbuild-5.10==5.10.127-1 -linux-libc-dev==5.10.127-1 +linux-compiler-gcc-10-x86==5.10.127-2 +linux-headers-5.10.0-16-amd64==5.10.127-2 +linux-headers-5.10.0-16-common==5.10.127-2 +linux-headers-amd64==5.10.127-2 +linux-kbuild-5.10==5.10.127-2 +linux-libc-dev==5.10.127-2 linuxdoc-tools==0.9.82-1 llvm-11==1:11.0.1-2 llvm-11-dev==1:11.0.1-2 @@ -1396,10 +1393,10 @@ nftables==0.9.8-3.1 node-jquery==3.5.1+dfsg+~3.5.5-7 ocl-icd-libopencl1==2.2.14-2 openjade==1.4devel1-22 -openjdk-11-jdk==11.0.15+10-1~deb11u1 -openjdk-11-jdk-headless==11.0.15+10-1~deb11u1 -openjdk-11-jre==11.0.15+10-1~deb11u1 -openjdk-11-jre-headless==11.0.15+10-1~deb11u1 +openjdk-11-jdk==11.0.16+8-1~deb11u1 +openjdk-11-jdk-headless==11.0.16+8-1~deb11u1 +openjdk-11-jre==11.0.16+8-1~deb11u1 +openjdk-11-jre-headless==11.0.16+8-1~deb11u1 opensp==1.5.2-13+b2 openssh-client==1:8.4p1-5+deb11u1 openssh-server==1:8.4p1-5+deb11u1 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 index 9a2e2a6ab39d..27741eecce56 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 @@ -1,11 +1,8 @@ -base-files==11.1+deb11u4 -bash==5.1-2+deb11u1 binutils-aarch64-linux-gnu==2.35.2-2 binutils-arm-linux-gnueabihf==2.35.2-2 cpp-10-arm-linux-gnueabihf==10.2.1-6cross1 cpp-arm-linux-gnueabihf==4:10.2.1-1 dctrl-tools==2.24-3 -dpkg==1.20.11 dvipng==1.15-1.1 gcc-10-arm-linux-gnueabihf==10.2.1-6cross1 gcc-10-arm-linux-gnueabihf-base==10.2.1-6cross1 @@ -20,6 +17,6 @@ libgomp1-armhf-cross==10.2.1-6cross1 libstdc++6-armhf-cross==10.2.1-6cross1 libubsan1-armhf-cross==10.2.1-6cross1 libxslt1-dev==1.1.34-4 -linux-headers-5.10.0-16-arm64==5.10.127-1 -linux-headers-arm64==5.10.127-1 +linux-headers-5.10.0-16-arm64==5.10.127-2 +linux-headers-arm64==5.10.127-2 nodejs==14.20.0-deb-1nodesource1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf index 8c6430609f8d..468d8e36c579 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf @@ -1,10 +1,7 @@ -base-files==11.1+deb11u4 -bash==5.1-2+deb11u1 binutils-arm-linux-gnueabihf==2.35.2-2 bubblewrap==0.4.1-3 dctrl-tools==2.24-3 doxygen==1.9.1-2 -dpkg==1.20.11 dvipng==1.15-1.1 faketime==0.9.8-9 gir1.2-nautilus-3.0==3.38.2-1+deb11u1 @@ -46,10 +43,10 @@ libxapian-dev==1.4.18-3 libxslt1-dev==1.1.34-4 libxstring-perl==0.005-1+b1 libyaml-tiny-perl==1.73-1 -linux-compiler-gcc-10-arm==5.10.127-1 -linux-headers-5.10.0-16-armmp==5.10.127-1 -linux-headers-armmp==5.10.127-1 -mat2==0.12.1-2 +linux-compiler-gcc-10-arm==5.10.127-2 +linux-headers-5.10.0-16-armmp==5.10.127-2 +linux-headers-armmp==5.10.127-2 +mat2==0.12.1-2+deb11u1 nodejs==14.20.0-deb-1nodesource1 ps2eps==1.68+binaryfree-3 python3-cairo==1.16.2-4+b2 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-git b/files/build/versions/dockers/sonic-slave-bullseye/versions-git index d7cbfb3e3c61..6902af6272e9 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-git +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==d22bf607218d50bf20444b0610f62b265f829dbc +https://chromium.googlesource.com/chromium/tools/depot_tools.git==eb8426e2ac6e8b03837a8d093863008fbec79860 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 index 8435906eca68..60aea4709497 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 @@ -6,7 +6,7 @@ automat==20.2.0 babel==2.8.0 bcrypt==3.1.7 beautifulsoup4==4.9.3 -bitarray==2.5.1 +bitarray==2.6.0 certifi==2020.6.20 chardet==4.0.0 click==7.1.2 @@ -66,7 +66,7 @@ pyangbind==0.8.1 pyasn1==0.4.8 pyasn1-modules==0.2.1 pycurl==7.43.0.6 -pyfakefs==4.5.6 +pyfakefs==4.6.3 pygments==2.7.1 pygobject==3.38.0 pyhamcrest==1.9.0 @@ -85,7 +85,7 @@ pytz==2021.1 pyxdg==0.27 pyyaml==5.4.1 redis==4.3.4 -regex==2022.7.9 +regex==2022.7.25 requests==2.25.1 roman==2.0.0 service-identity==18.1.0 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster index 8dc213a838ae..18c72d254fd7 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster +++ b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster @@ -172,7 +172,6 @@ gpg-wks-client==2.2.12-1+deb10u2 gpg-wks-server==2.2.12-1+deb10u2 gpgconf==2.2.12-1+deb10u2 gpgsm==2.2.12-1+deb10u2 -gpgv==2.2.12-1+deb10u2 graphviz==2.40.1-6+deb10u1 groff==1.22.4-3+deb10u1 groff-base==1.22.4-3+deb10u1 @@ -1393,10 +1392,10 @@ nettle-dev==3.4.1-1+deb10u1 nftables==0.9.0-2 ocl-icd-libopencl1==2.2.12-2 openjade==1.4devel1-21.3+b1 -openjdk-11-jdk==11.0.15+10-1~deb10u1 -openjdk-11-jdk-headless==11.0.15+10-1~deb10u1 -openjdk-11-jre==11.0.15+10-1~deb10u1 -openjdk-11-jre-headless==11.0.15+10-1~deb10u1 +openjdk-11-jdk==11.0.16+8-1~deb10u1 +openjdk-11-jdk-headless==11.0.16+8-1~deb10u1 +openjdk-11-jre==11.0.16+8-1~deb10u1 +openjdk-11-jre-headless==11.0.16+8-1~deb10u1 openmpi-bin==3.1.3-11 openmpi-common==3.1.3-11 opensp==1.5.2-13+b1 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-git b/files/build/versions/dockers/sonic-slave-buster/versions-git index d7cbfb3e3c61..6902af6272e9 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-git +++ b/files/build/versions/dockers/sonic-slave-buster/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==d22bf607218d50bf20444b0610f62b265f829dbc +https://chromium.googlesource.com/chromium/tools/depot_tools.git==eb8426e2ac6e8b03837a8d093863008fbec79860 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-py3 b/files/build/versions/dockers/sonic-slave-buster/versions-py3 index f0a45aa4b4ce..87abe3b3b415 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-py3 +++ b/files/build/versions/dockers/sonic-slave-buster/versions-py3 @@ -4,7 +4,7 @@ async-timeout==4.0.2 atomicwrites==1.1.5 attrs==18.2.0 babel==2.6.0 -bitarray==2.5.1 +bitarray==2.6.0 certifi==2018.8.24 chardet==3.0.4 cov-core==1.15.0 @@ -49,7 +49,7 @@ pyang==2.4.0 pyangbind==0.8.1 pycrypto==2.6.1 pycurl==7.43.0.2 -pyfakefs==4.5.6 +pyfakefs==4.6.3 pygments==2.3.1 pygobject==3.30.4 pympler==0.8 @@ -65,7 +65,7 @@ pytz==2019.1 pyxdg==0.25 pyyaml==5.4.1 redis==4.3.4 -regex==2022.7.9 +regex==2022.7.25 requests==2.21.0 roman==2.0.0 secretstorage==2.3.1 @@ -77,4 +77,4 @@ unattended-upgrades==0.1 unidiff==0.5.4 urllib3==1.24.1 wrapt==1.14.1 -zipp==3.8.0 \ No newline at end of file +zipp==3.8.1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-git b/files/build/versions/dockers/sonic-slave-stretch/versions-git index d7cbfb3e3c61..6902af6272e9 100644 --- a/files/build/versions/dockers/sonic-slave-stretch/versions-git +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==d22bf607218d50bf20444b0610f62b265f829dbc +https://chromium.googlesource.com/chromium/tools/depot_tools.git==eb8426e2ac6e8b03837a8d093863008fbec79860 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-py3 b/files/build/versions/dockers/sonic-slave-stretch/versions-py3 index b06ec424cf06..104e6fcca2cb 100644 --- a/files/build/versions/dockers/sonic-slave-stretch/versions-py3 +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-py3 @@ -1,6 +1,6 @@ alabaster==0.7.8 babel==2.3.4 -bitarray==2.5.1 +bitarray==2.6.0 chardet==2.3.0 cryptography==1.7.1 devscripts==2.17.6+deb9u2 diff --git a/files/build/versions/host-image/versions-deb-bullseye b/files/build/versions/host-image/versions-deb-bullseye index dd4b509c55d1..ba7d2dcc36a0 100644 --- a/files/build/versions/host-image/versions-deb-bullseye +++ b/files/build/versions/host-image/versions-deb-bullseye @@ -24,7 +24,7 @@ cpp==4:10.2.1-1 cpp-10==10.2.1-6 cracklib-runtime==2.9.6-3.4 cron==3.0pl1-137 -curl==7.74.0-1.3+deb11u1 +curl==7.74.0-1.3+deb11u2 dbus==1.12.20-2 device-tree-compiler==1.6.0-1 dirmngr==2.2.27-2+deb11u2 @@ -122,8 +122,8 @@ libcrypt-dev==1:4.4.18-4 libcryptsetup12==2:2.3.7-1+deb11u1 libctf-nobfd0==2.35.2-2 libctf0==2.35.2-2 -libcurl3-gnutls==7.74.0-1.3+deb11u1 -libcurl4==7.74.0-1.3+deb11u1 +libcurl3-gnutls==7.74.0-1.3+deb11u2 +libcurl4==7.74.0-1.3+deb11u2 libdbd-sqlite3-perl==1.66-1+b1 libdbi-perl==1.643-3+b1 libdbus-1-3==1.12.20-2 @@ -297,7 +297,7 @@ libyang==1.0.73 libyang-cpp==1.0.73 linux-base==4.6 linux-image-5.10.0-12-2-amd64-unsigned==5.10.103-1 -linux-libc-dev==5.10.127-1 +linux-libc-dev==5.10.127-2 locales==2.31-13+deb11u3 logrotate==3.18.0-2+deb11u1 lsb-release==11.1.0 @@ -315,12 +315,12 @@ ndisc6==1.0.4-2 net-tools==1.60+git20181103.0eebece-1 netbase==6.3 netfilter-persistent==1.0.15 -ntp==1:4.2.8p15+dfsg-1 +ntp==1:4.2.8p15+dfsg-1+deb10u2 ntpstat==0.0.0.1-2+b1 opennsl-modules==7.1.0.0 -openssh-client==1:8.4p1-5+deb11u1 -openssh-server==1:8.4p1-5+deb11u1 -openssh-sftp-server==1:8.4p1-5+deb11u1 +openssh-client==1:8.4p1-5+fips +openssh-server==1:8.4p1-5+fips +openssh-sftp-server==1:8.4p1-5+fips openssl==1.1.1n-0+deb11u3 patch==2.7.6-7 pci.ids==0.0~2021.02.08-1 diff --git a/files/build/versions/host-image/versions-deb-bullseye-arm64 b/files/build/versions/host-image/versions-deb-bullseye-arm64 index 7629b9110636..9692e5b5aaf1 100644 --- a/files/build/versions/host-image/versions-deb-bullseye-arm64 +++ b/files/build/versions/host-image/versions-deb-bullseye-arm64 @@ -8,11 +8,7 @@ libxml2-dev==2.9.10+dfsg-6.7+deb11u2 libxslt1-dev==1.1.34-4 libxslt1.1==1.1.34-4 linux-image-5.10.0-12-2-arm64-unsigned==5.10.103-1 -ntp==1:4.2.8p15+dfsg-1+deb10u2 ntpstat==0.0.0.1-2 -openssh-client==1:8.4p1-5+fips -openssh-server==1:8.4p1-5+fips -openssh-sftp-server==1:8.4p1-5+fips picocom==3.1-2 traceroute==1:2.1.0-2 tsingma-bsp==1.0 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-deb-bullseye-armhf b/files/build/versions/host-image/versions-deb-bullseye-armhf index bac8233e5d2e..e93778b7b8d3 100644 --- a/files/build/versions/host-image/versions-deb-bullseye-armhf +++ b/files/build/versions/host-image/versions-deb-bullseye-armhf @@ -10,7 +10,9 @@ libxslt1-dev==1.1.34-4 libxslt1.1==1.1.34-4 linux-image-5.10.0-12-2-armmp==5.10.103-1 mrvlprestera==1.0 -ntp==1:4.2.8p15+dfsg-1+deb10u2 ntpstat==0.0.0.1-2 +openssh-client==1:8.4p1-5+deb11u1 +openssh-server==1:8.4p1-5+deb11u1 +openssh-sftp-server==1:8.4p1-5+deb11u1 picocom==3.1-2 traceroute==1:2.1.0-2 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-py3 b/files/build/versions/host-image/versions-py3 index 28b92f13378e..880b76ced0a3 100644 --- a/files/build/versions/host-image/versions-py3 +++ b/files/build/versions/host-image/versions-py3 @@ -47,13 +47,13 @@ pycairo==1.21.0 pycparser==2.21 pycurl==7.43.0.6 pygments==2.12.0 -pygobject==3.42.1 +pygobject==3.42.2 pyroute2==0.5.19 python-apt==2.2.1 python-dateutil==2.8.2 pyyaml==5.4.1 redis==3.5.3 -regex==2022.7.9 +regex==2022.7.25 requests==2.28.1 scapy==2.4.4 semantic-version==2.10.0 @@ -62,7 +62,7 @@ systemd-python==234 tabulate==0.8.2 thrift==0.13.0 toposort==1.6 -urllib3==1.26.10 +urllib3==1.26.11 watchdog==0.10.3 wcwidth==0.2.5 websocket-client==1.3.3 From cf282747e6d56002f196e74d0d5a74b340c446f8 Mon Sep 17 00:00:00 2001 From: Samuel Angebault Date: Wed, 6 Jul 2022 03:57:52 +0200 Subject: [PATCH 164/259] [Arista] Update configurations for 7800R3A-36D2 (#10987) Why I did it This linecard runs in multi-asic mode and therefore needs the use_pcie_id_chassis file to work properly. The default_sku file was also missing which would break the boot when no minigraph is provided. Description for the changelog Add missing default_sku and use_pci_id_chassis configs for 7800R3A-36D2 --- device/arista/x86_64-arista_7800r3a_36d2_lc/default_sku | 1 + device/arista/x86_64-arista_7800r3a_36d2_lc/use_pci_id_chassis | 0 2 files changed, 1 insertion(+) create mode 100644 device/arista/x86_64-arista_7800r3a_36d2_lc/default_sku create mode 100644 device/arista/x86_64-arista_7800r3a_36d2_lc/use_pci_id_chassis diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/default_sku b/device/arista/x86_64-arista_7800r3a_36d2_lc/default_sku new file mode 100644 index 000000000000..2aa543267cef --- /dev/null +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/default_sku @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72 t1 diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/use_pci_id_chassis b/device/arista/x86_64-arista_7800r3a_36d2_lc/use_pci_id_chassis new file mode 100644 index 000000000000..e69de29bb2d1 From f6ed14245643f8a5e698542fabe2bd989d731ea9 Mon Sep 17 00:00:00 2001 From: Hua Liu <58683130+liuh-80@users.noreply.github.com> Date: Fri, 24 Jun 2022 17:39:50 +0800 Subject: [PATCH 165/259] Update swsssdk submodule (#10996) Updating sonic-utilities sub module with the following commits ca785a2 Remove sonic-db-cli #### Why I did it To fix sonic-db-cli high CPU usage on SONiC startup issue: https://github.com/Azure/sonic-buildimage/issues/10218 sonic-db-cli re-write with c++ and move to sonic-swss-common repo. #### How I did it #### How to verify it #### Which release branch to backport (provide reason below if selected) #### Description for the changelog ca785a2 Remove sonic-db-cli #### A picture of a cute animal (not mandatory but encouraged) Co-authored-by: liuh-80 --- src/sonic-py-swsssdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-py-swsssdk b/src/sonic-py-swsssdk index 653bdba51750..ca785a2cc6a8 160000 --- a/src/sonic-py-swsssdk +++ b/src/sonic-py-swsssdk @@ -1 +1 @@ -Subproject commit 653bdba51750cac95feb3dd47904bf4de2353fec +Subproject commit ca785a2cc6a8a06fdb1145d5f4ff50ec7c5d25a6 From 32fb4c777203ade3fd0560e40661d0ccc4908adc Mon Sep 17 00:00:00 2001 From: Nikola Dancejic <26731235+Ndancejic@users.noreply.github.com> Date: Fri, 29 Jul 2022 16:22:20 -0700 Subject: [PATCH 166/259] [swss] Adding bgp container as dependent of swss (#11000) What I did: Added bgp as a dependent of swss Why I did it: bgp container was not restarting on swss crash. When swss crashes, linkmgrd doesn't initate a switchover because it cannot access the default route from orchagent. Bringing down bgp with swss will isolate the ToR, causing linkmgrd to initiate a switchover to the peer ToR avoiding significant packet loss. How I did it: Added bgp to DEPENDENT Signed-off-by: Nikola Dancejic --- files/scripts/swss.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/scripts/swss.sh b/files/scripts/swss.sh index 5b2772eafac4..9d8f1763736d 100755 --- a/files/scripts/swss.sh +++ b/files/scripts/swss.sh @@ -9,7 +9,7 @@ LOCKFILE="/tmp/swss-syncd-lock$DEV" NAMESPACE_PREFIX="asic" ETC_SONIC_PATH="/etc/sonic/" -DEPENDENT="radv" +DEPENDENT="radv bgp" MULTI_INST_DEPENDENT="teamd" . /usr/local/bin/asic_status.sh From 2280f3854c8053aaba7aead8dba282a9affd57c1 Mon Sep 17 00:00:00 2001 From: kenneth-arista <93353051+kenneth-arista@users.noreply.github.com> Date: Wed, 6 Jul 2022 14:42:45 -0700 Subject: [PATCH 167/259] [Arista] Enable larger number of LAGs on 7800 LCs (#11070) For 7800 LCs, set LAG mode to support 1024 number of 16-member system LAGs. Why I did it The SOC property changes are necessary to match #10519 which increases the number of system LAG IDs to 1024. Description for the changelog For 7800 LCs, set LAG mode to support 1024 number of 16-member system LAGs. --- .../jr2-a7280cr3-32d4-40x100G.config.bcm | 2 +- .../0/j2p-a7800r3a-36d-36x400G.config.bcm | 3 +++ .../1/j2p-a7800r3a-36d-36x400G.config.bcm | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/jr2-a7280cr3-32d4-40x100G.config.bcm b/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/jr2-a7280cr3-32d4-40x100G.config.bcm index f6f1774d8ee2..abbe4c368742 100644 --- a/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/jr2-a7280cr3-32d4-40x100G.config.bcm +++ b/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/jr2-a7280cr3-32d4-40x100G.config.bcm @@ -6,7 +6,7 @@ system_headers_mode=1 suppress_unknown_prop_warnings=1 l4_protocols_load_balancing_enable=1 fabric_logical_port_base=512 -trunk_group_max_members=128 +trunk_group_max_members=16 num_olp_tm_ports.BCM8869X=1 # nif diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/j2p-a7800r3a-36d-36x400G.config.bcm b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/j2p-a7800r3a-36d-36x400G.config.bcm index 66b740d161a8..529c0266e790 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/j2p-a7800r3a-36d-36x400G.config.bcm +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/j2p-a7800r3a-36d-36x400G.config.bcm @@ -21,6 +21,9 @@ pmf_sexem3_stage=IPMF2 # Jericho2-mode (description 0x1 used for Jericho 2 mode) system_headers_mode=1 +# HW mode to support 1024 16-member system wide LAGs +trunk_group_max_members=16 + # Disable link-training port_init_cl72=0 diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/j2p-a7800r3a-36d-36x400G.config.bcm b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/j2p-a7800r3a-36d-36x400G.config.bcm index fe67582df2f5..c2a1d4229f24 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/j2p-a7800r3a-36d-36x400G.config.bcm +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/j2p-a7800r3a-36d-36x400G.config.bcm @@ -21,6 +21,9 @@ pmf_sexem3_stage=IPMF2 # Jericho2-mode (description 0x1 used for Jericho 2 mode) system_headers_mode=1 +# HW mode to support 1024 16-member system wide LAGs +trunk_group_max_members=16 + # Disable link-training port_init_cl72=0 From 0b4e8f77f2ca522421fdd384eb91afdf05eefdde Mon Sep 17 00:00:00 2001 From: StormLiangMS <89824293+StormLiangMS@users.noreply.github.com> Date: Fri, 29 Jul 2022 23:33:09 +0800 Subject: [PATCH 168/259] [bgpcfgd] improve the log when delete a loopback interface (#11152) Why I did it The bgpcfgd doesn't support deletion of 'zebra set src', if an interface is deleted, the bgpcfgd will drop a warning message. In current implementation, we only care about the loopback0 interface but not others. To improve the log print to have the key info, which will give the name of the deleted interface. We can ignore it if it is not the loopback0 interface. The application layer should be aware of that update and deletion is not supported, delete or update with a new address of loopback0 could cause issue, this log can give enough info to root cause the issue. How I did it How to verify it --- src/sonic-bgpcfgd/bgpcfgd/managers_setsrc.py | 2 +- src/sonic-bgpcfgd/tests/test_setsrc.py | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/sonic-bgpcfgd/bgpcfgd/managers_setsrc.py b/src/sonic-bgpcfgd/bgpcfgd/managers_setsrc.py index d1de585b0520..903760c9375c 100644 --- a/src/sonic-bgpcfgd/bgpcfgd/managers_setsrc.py +++ b/src/sonic-bgpcfgd/bgpcfgd/managers_setsrc.py @@ -64,4 +64,4 @@ def set_handler(self, key, data): def del_handler(self, key): """ Implementation of 'DEL' command for this class """ self.directory.remove(self.db_name, self.table_name, key) - log_warn("Delete command is not supported for 'zebra set src' templates") \ No newline at end of file + log_warn("Delete key '%s' is not supported for 'zebra set src' templates" % str(key)) \ No newline at end of file diff --git a/src/sonic-bgpcfgd/tests/test_setsrc.py b/src/sonic-bgpcfgd/tests/test_setsrc.py index 5d1a81908837..4de72102b613 100644 --- a/src/sonic-bgpcfgd/tests/test_setsrc.py +++ b/src/sonic-bgpcfgd/tests/test_setsrc.py @@ -58,5 +58,6 @@ def test_set_handler_invalid_ip(mocked_log_err): @patch('bgpcfgd.managers_setsrc.log_warn') def test_del_handler(mocked_log_warn): m = constructor() - m.del_handler("Loopback0|10.1.0.32/32") - mocked_log_warn.assert_called_with("Delete command is not supported for 'zebra set src' templates") + del_key = "Loopback0|10.1.0.32/32" + m.del_handler(del_key) + mocked_log_warn.assert_called_with("Delete key '%s' is not supported for 'zebra set src' templates" % del_key) From 29d29b94917954f0bbffa11fb1a265c2c26e840c Mon Sep 17 00:00:00 2001 From: Stepan Blyshchak <38952541+stepanblyschak@users.noreply.github.com> Date: Thu, 28 Jul 2022 12:03:22 +0300 Subject: [PATCH 169/259] [swss.sh] clear counters cache folder on swss cold/fast reload (#11244) A change in sonic-utilities makes all cache files be saved into a /tmp/cache. On swss restart this cache has to be removed in case swss starts in cold or fast mode. A related cache restoration in the warmboot finalizer script is also updated to use new location. - Why I did it To fix #9817. Clear the cache directory on swss.sh except for warm start. Also, adopted finalize-warmboot script to take the cache directory. - How I did it A change in sonic-utilities makes all cache files be saved into a /tmp/cache. On swss restart this cache has to be removed in case swss starts in cold or fast mode. A related cache restoration in the warmboot finalizer script is also updated to use new location. - How to verify it Run togather with Azure/sonic-utilities#2232. Verify counters cache is removed on config reload, cold/fast reboots, swss restart. Signed-off-by: Stepan Blyschak --- .../warmboot-finalizer/finalize-warmboot.sh | 12 ++++-------- files/scripts/swss.sh | 1 + 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/files/image_config/warmboot-finalizer/finalize-warmboot.sh b/files/image_config/warmboot-finalizer/finalize-warmboot.sh index c4d3338dcc37..412559289026 100755 --- a/files/image_config/warmboot-finalizer/finalize-warmboot.sh +++ b/files/image_config/warmboot-finalizer/finalize-warmboot.sh @@ -109,14 +109,10 @@ function restore_counters_folder() { debug "Restoring counters folder after warmboot..." - modules=("portstat-0" "dropstat" "pfcstat-0" "queuestat-0" "intfstat-0") - for module in ${modules[@]} - do - statfile="/host/counters/$module" - if [[ -d $statfile ]]; then - mv $statfile /tmp/ - fi - done + cache_counters_folder="/host/counters" + if [[ -d $cache_counters_folder ]]; then + mv $cache_counters_folder /tmp/cache + fi } diff --git a/files/scripts/swss.sh b/files/scripts/swss.sh index 9d8f1763736d..ee30d49cdaaf 100755 --- a/files/scripts/swss.sh +++ b/files/scripts/swss.sh @@ -178,6 +178,7 @@ start() { $SONIC_DB_CLI RESTAPI_DB FLUSHDB clean_up_tables STATE_DB "'PORT_TABLE*', 'MGMT_PORT_TABLE*', 'VLAN_TABLE*', 'VLAN_MEMBER_TABLE*', 'LAG_TABLE*', 'LAG_MEMBER_TABLE*', 'INTERFACE_TABLE*', 'MIRROR_SESSION*', 'VRF_TABLE*', 'FDB_TABLE*', 'FG_ROUTE_TABLE*', 'BUFFER_POOL*', 'BUFFER_PROFILE*', 'MUX_CABLE_TABLE*', 'ADVERTISE_NETWORK_TABLE*', 'VXLAN_TUNNEL_TABLE*', 'MACSEC_PORT_TABLE*', 'MACSEC_INGRESS_SA_TABLE*', 'MACSEC_EGRESS_SA_TABLE*', 'MACSEC_INGRESS_SC_TABLE*', 'MACSEC_EGRESS_SC_TABLE*'" $SONIC_DB_CLI APPL_STATE_DB FLUSHDB + rm -rf /tmp/cache fi # On supervisor card, skip starting asic related services here. In wait(), From d2d2caa83eb1e6c6d03289c217828e2c53e291e8 Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Thu, 4 Aug 2022 08:02:12 +0800 Subject: [PATCH 170/259] Upgrade sonic fips packages to version 0.2 (#11461) Why I did it Upgrade sonic fips packages to version 0.2 Upgrade openssl version from 1.1.1k-1+deb11u1+fips to 1.1.1n-0+deb11u3+fips Upgrade openssh version from 8.4p1-5+fips to 8.4p1-5+deb11u1+fips How I did it Change the makefile. --- rules/sonic-fips.mk | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rules/sonic-fips.mk b/rules/sonic-fips.mk index 471f69e9ff4b..a63e00de3fa5 100644 --- a/rules/sonic-fips.mk +++ b/rules/sonic-fips.mk @@ -1,8 +1,8 @@ # fips packages -FIPS_VERSION = 0.1 -FIPS_OPENSSL_VERSION = 1.1.1k-1+deb11u1+fips -FIPS_OPENSSH_VERSION = 8.4p1-5+fips +FIPS_VERSION = 0.2 +FIPS_OPENSSL_VERSION = 1.1.1n-0+deb11u3+fips +FIPS_OPENSSH_VERSION = 8.4p1-5+deb11u1+fips FIPS_PYTHON_MAIN_VERSION = 3.9 FIPS_PYTHON_VERSION = 3.9.2-1+fips FIPS_GOLANG_MAIN_VERSION = 1.15 From 324ae3d3a0396ad474615074475a374d8f992155 Mon Sep 17 00:00:00 2001 From: Saikrishna Arcot Date: Wed, 27 Jul 2022 18:21:22 -0700 Subject: [PATCH 171/259] [teamd]: Upgrade teamd docker to Bullseye (#11536) Signed-off-by: Saikrishna Arcot --- dockers/docker-teamd/Dockerfile.j2 | 2 +- rules/docker-teamd.mk | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dockers/docker-teamd/Dockerfile.j2 b/dockers/docker-teamd/Dockerfile.j2 index 7bcafb60cff0..be5e6984dda9 100644 --- a/dockers/docker-teamd/Dockerfile.j2 +++ b/dockers/docker-teamd/Dockerfile.j2 @@ -1,5 +1,5 @@ {% from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %} -FROM docker-swss-layer-buster-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} +FROM docker-swss-layer-bullseye-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} ARG docker_container_name RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%syslogtag%/;" /etc/rsyslog.conf diff --git a/rules/docker-teamd.mk b/rules/docker-teamd.mk index d376daa2100f..9a04bc1f6859 100644 --- a/rules/docker-teamd.mk +++ b/rules/docker-teamd.mk @@ -7,13 +7,13 @@ DOCKER_TEAMD_DBG = $(DOCKER_TEAMD_STEM)-$(DBG_IMAGE_MARK).gz $(DOCKER_TEAMD)_PATH = $(DOCKERS_PATH)/$(DOCKER_TEAMD_STEM) $(DOCKER_TEAMD)_DEPENDS += $(SWSS) $(LIBTEAMDCTL) $(LIBTEAM_UTILS) -$(DOCKER_TEAMD)_DBG_DEPENDS = $($(DOCKER_SWSS_LAYER_BUSTER)_DBG_DEPENDS) +$(DOCKER_TEAMD)_DBG_DEPENDS = $($(DOCKER_SWSS_LAYER_BULLSEYE)_DBG_DEPENDS) $(DOCKER_TEAMD)_DBG_DEPENDS += $(SWSS_DBG) $(LIBSWSSCOMMON_DBG) $(DOCKER_TEAMD)_DBG_DEPENDS += $(LIBTEAMDCTL_DBG) $(LIBTEAM_UTILS_DBG) -$(DOCKER_TEAMD)_DBG_IMAGE_PACKAGES = $($(DOCKER_SWSS_LAYER_BUSTER)_DBG_IMAGE_PACKAGES) +$(DOCKER_TEAMD)_DBG_IMAGE_PACKAGES = $($(DOCKER_SWSS_LAYER_BULLSEYE)_DBG_IMAGE_PACKAGES) -$(DOCKER_TEAMD)_LOAD_DOCKERS += $(DOCKER_SWSS_LAYER_BUSTER) +$(DOCKER_TEAMD)_LOAD_DOCKERS += $(DOCKER_SWSS_LAYER_BULLSEYE) $(DOCKER_TEAMD)_VERSION = 1.0.0 $(DOCKER_TEAMD)_PACKAGE_NAME = teamd @@ -36,5 +36,5 @@ $(DOCKER_TEAMD)_RUN_OPT += -v /host/warmboot:/var/warmboot $(DOCKER_TEAMD)_BASE_IMAGE_FILES += teamdctl:/usr/bin/teamdctl $(DOCKER_TEAMD)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) -SONIC_BUSTER_DOCKERS += $(DOCKER_TEAMD) -SONIC_BUSTER_DBG_DOCKERS += $(DOCKER_TEAMD_DBG) +SONIC_BULLSEYE_DOCKERS += $(DOCKER_TEAMD) +SONIC_BULLSEYE_DBG_DOCKERS += $(DOCKER_TEAMD_DBG) From 7dcd1f20efd3b06144fc6c3824d548ce9f9d9b6d Mon Sep 17 00:00:00 2001 From: Ze Gan Date: Sat, 30 Jul 2022 10:11:02 +0800 Subject: [PATCH 172/259] [submodule]: Update sonic-wpa-supplicant (#11539) ``` 88d1eaea9 [mka]: Fix rekey of PN based cannot triggered in XPN cipher (#57) ``` Signed-off-by: Ze Gan --- src/wpasupplicant/sonic-wpa-supplicant | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wpasupplicant/sonic-wpa-supplicant b/src/wpasupplicant/sonic-wpa-supplicant index 3f43852b8ccd..88d1eaea944c 160000 --- a/src/wpasupplicant/sonic-wpa-supplicant +++ b/src/wpasupplicant/sonic-wpa-supplicant @@ -1 +1 @@ -Subproject commit 3f43852b8ccd5d2a0877c86b82d227893e4566d4 +Subproject commit 88d1eaea944c5ea90d9d7796dc10abc80823ed93 From 34a20c40eca1a75f69fa31fd4a254e08024149a3 Mon Sep 17 00:00:00 2001 From: amulyan7 <98349131+amulyan7@users.noreply.github.com> Date: Wed, 3 Aug 2022 10:04:37 -0700 Subject: [PATCH 173/259] Add ping package to pmon docker (#11550) ping command is not working inside PMON docker (bullseye) Use case: chassisd checks for module reachability inside PMON for "show chassis modules midplane-status" CLI, and on Cisco chassis, this uses ping command to check network reachability --- dockers/docker-platform-monitor/Dockerfile.j2 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dockers/docker-platform-monitor/Dockerfile.j2 b/dockers/docker-platform-monitor/Dockerfile.j2 index 1e8c28b0682e..5c34246ca8be 100755 --- a/dockers/docker-platform-monitor/Dockerfile.j2 +++ b/dockers/docker-platform-monitor/Dockerfile.j2 @@ -25,7 +25,8 @@ RUN apt-get update && \ i2c-tools \ psmisc \ python3-jsonschema \ - libpci3 + libpci3 \ + iputils-ping # On Arista devices, the sonic_platform wheel is not installed in the container. # Instead, the installation directory is mounted from the host OS. However, this method From bc300b4d7992c2bd2f403ea5f732388ad8541db5 Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox <57339448+Junchao-Mellanox@users.noreply.github.com> Date: Mon, 8 Aug 2022 20:06:52 +0800 Subject: [PATCH 174/259] [Mellanox] add more log while doing sysfs reading (#11556) - Why I did it Add more log while doing sysfs reading to increase the debug capability - How I did it Log the relevant file path and error number while sysfs reading return None - How to verify it Manual test --- .../mellanox/mlnx-platform-api/sonic_platform/utils.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py b/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py index adf931d37e90..0db7e1e26e30 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py @@ -14,6 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import ctypes import functools import subprocess import json @@ -43,7 +44,14 @@ def read_from_file(file_path, target_type, default='', raise_exception=False, lo """ try: with open(file_path, 'r') as f: - value = target_type(f.read().strip()) + value = f.read() + if value is None: + # None return value is not allowed in any case, so we log error here for further debug. + logger.log_error('Failed to read from {}, value is None, errno is {}'.format(file_path, ctypes.get_errno())) + # Raise ValueError for the except statement to handle this as a normal exception + raise ValueError('File content of {} is None'.format(file_path)) + else: + value = target_type(value.strip()) except (ValueError, IOError) as e: if log_func: log_func('Failed to read from file {} - {}'.format(file_path, repr(e))) From fda1290926781c53bcc921a9fbdc8c4e7f2ee218 Mon Sep 17 00:00:00 2001 From: bingwang-ms <66248323+bingwang-ms@users.noreply.github.com> Date: Mon, 1 Aug 2022 09:35:34 +0800 Subject: [PATCH 175/259] Support different `DSCP_TO_TC_MAP` for T1 in dualtor deployment (#11569) * Support different DSCP_TO_TC_MAP for T1 in dualtor deployment --- .../Arista-7260CX3-C64/buffers_extra_pgs.j2 | 20 ----- .../Arista-7260CX3-Q64/buffers_extra_pgs.j2 | 1 - .../th2/7260/BALANCED/buffers_defaults_t1.j2 | 4 - .../profiles/th2/7260/BALANCED/qos.json.j2 | 67 +++++++++++++++ .../7260/RDMA-CENTRIC/buffers_defaults_t1.j2 | 5 +- .../th2/7260/RDMA-CENTRIC/qos.json.j2 | 66 +++++++++++++++ files/build_templates/buffers_config.j2 | 4 - .../py3/buffer-arista7260-t1.json | 48 ----------- .../sample_output/py3/qos-arista7260-t1.json | 82 +++++++++++++++++-- 9 files changed, 208 insertions(+), 89 deletions(-) delete mode 100644 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_extra_pgs.j2 delete mode 120000 device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_extra_pgs.j2 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_extra_pgs.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_extra_pgs.j2 deleted file mode 100644 index 73c1c1a9b30e..000000000000 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/buffers_extra_pgs.j2 +++ /dev/null @@ -1,20 +0,0 @@ -{% if DEVICE_METADATA is defined and 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'LeafRouter' %} -{%- macro generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pg) %} - "BUFFER_PG": { -{% for port in port_names.split(',') %} -{% if port not in port_names_require_no_extra_pg.split(',') %} - "{{ port }}|2": { - "profile" : "ingress_lossy_profile" - }, - "{{ port }}|6": { - "profile" : "ingress_lossy_profile" - }, -{% endif %} - "{{ port }}|0": { - "profile" : "ingress_lossy_profile" - }{% if not loop.last %},{% endif %} - -{% endfor %} - }, -{% endmacro %} -{% endif %} diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_extra_pgs.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_extra_pgs.j2 deleted file mode 120000 index 7dfb03cbc9d0..000000000000 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/buffers_extra_pgs.j2 +++ /dev/null @@ -1 +0,0 @@ -../Arista-7260CX3-C64/buffers_extra_pgs.j2 \ No newline at end of file diff --git a/device/common/profiles/th2/7260/BALANCED/buffers_defaults_t1.j2 b/device/common/profiles/th2/7260/BALANCED/buffers_defaults_t1.j2 index 118dba43177a..08b1395d245e 100644 --- a/device/common/profiles/th2/7260/BALANCED/buffers_defaults_t1.j2 +++ b/device/common/profiles/th2/7260/BALANCED/buffers_defaults_t1.j2 @@ -51,11 +51,7 @@ {%- endmacro %} {% import 'buffers_extra_queues.j2' as defs1 with context %} -{% import 'buffers_extra_pgs.j2' as defs2 with context %} {%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} {{ defs1.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} {%- endmacro %} -{%- macro generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) %} -{{ defs2.generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) }} -{%- endmacro %} diff --git a/device/common/profiles/th2/7260/BALANCED/qos.json.j2 b/device/common/profiles/th2/7260/BALANCED/qos.json.j2 index d760038736a6..68daa8ee92f0 100644 --- a/device/common/profiles/th2/7260/BALANCED/qos.json.j2 +++ b/device/common/profiles/th2/7260/BALANCED/qos.json.j2 @@ -1,4 +1,5 @@ {% if ('type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'LeafRouter') %} +{% set different_dscp_to_tc_map = true %} {%- macro generate_dscp_to_tc_map() %} "DSCP_TO_TC_MAP": { "AZURE": { @@ -66,6 +67,72 @@ "61": "1", "62": "1", "63": "1" + }, + "AZURE_UPLINK": { + "0" : "1", + "1" : "1", + "2" : "1", + "3" : "3", + "4" : "4", + "5" : "1", + "6" : "1", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "1", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "7", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" } }, {%- endmacro %} diff --git a/device/common/profiles/th2/7260/RDMA-CENTRIC/buffers_defaults_t1.j2 b/device/common/profiles/th2/7260/RDMA-CENTRIC/buffers_defaults_t1.j2 index 118dba43177a..b2766366b0d7 100644 --- a/device/common/profiles/th2/7260/RDMA-CENTRIC/buffers_defaults_t1.j2 +++ b/device/common/profiles/th2/7260/RDMA-CENTRIC/buffers_defaults_t1.j2 @@ -51,11 +51,8 @@ {%- endmacro %} {% import 'buffers_extra_queues.j2' as defs1 with context %} -{% import 'buffers_extra_pgs.j2' as defs2 with context %} {%- macro generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) %} {{ defs1.generate_queue_buffers_with_extra_lossless_queues(port_names, port_names_require_extra_buffer) }} {%- endmacro %} -{%- macro generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) %} -{{ defs2.generate_pg_buffers_with_extra_lossy_pgs(port_names, port_names_require_no_extra_pgs) }} -{%- endmacro %} + diff --git a/device/common/profiles/th2/7260/RDMA-CENTRIC/qos.json.j2 b/device/common/profiles/th2/7260/RDMA-CENTRIC/qos.json.j2 index d760038736a6..faf682d3c176 100644 --- a/device/common/profiles/th2/7260/RDMA-CENTRIC/qos.json.j2 +++ b/device/common/profiles/th2/7260/RDMA-CENTRIC/qos.json.j2 @@ -66,6 +66,72 @@ "61": "1", "62": "1", "63": "1" + }, + "AZURE_UPLINK": { + "0" : "1", + "1" : "1", + "2" : "1", + "3" : "3", + "4" : "4", + "5" : "1", + "6" : "1", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "1", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "7", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" } }, {%- endmacro %} diff --git a/files/build_templates/buffers_config.j2 b/files/build_templates/buffers_config.j2 index 0a72e325824a..21d730c74b2a 100644 --- a/files/build_templates/buffers_config.j2 +++ b/files/build_templates/buffers_config.j2 @@ -172,10 +172,6 @@ def {{ defs.generate_pg_profiles_with_extra_lossless_pgs_with_inactive_ports(port_names_active, port_names_extra_queues, port_names_inactive) }}, {% elif defs.generate_pg_profiles_with_inactive_ports is defined %} {{ defs.generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) }}, -{% elif (defs.generate_pg_buffers_with_extra_lossy_pgs is defined) and (port_names_extra_queues != '') %} -{{ defs.generate_pg_buffers_with_extra_lossy_pgs(port_names_active, port_names_extra_queues) }} -{% elif (defs.generate_pg_buffers_with_extra_lossy_pgs_with_inactive_ports is defined) and (port_names_extra_queues != '') %} -{{ defs.generate_pg_buffers_with_extra_lossy_pgs_with_inactive_ports(port_names_active, port_names_extra_queues, port_names_inactive) }} {% elif defs.generate_pg_profils is defined %} {{ defs.generate_pg_profils(port_names_active) }} {% else %} diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json index 1ce8a99e4fb7..702076249ac6 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7260-t1.json @@ -112,21 +112,9 @@ "Ethernet0|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet0|2": { - "profile" : "ingress_lossy_profile" - }, - "Ethernet0|6": { - "profile" : "ingress_lossy_profile" - }, "Ethernet4|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet4|2": { - "profile" : "ingress_lossy_profile" - }, - "Ethernet4|6": { - "profile" : "ingress_lossy_profile" - }, "Ethernet144|0": { "profile" : "ingress_lossy_profile" }, @@ -136,21 +124,9 @@ "Ethernet16|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet16|2": { - "profile" : "ingress_lossy_profile" - }, - "Ethernet16|6": { - "profile" : "ingress_lossy_profile" - }, "Ethernet20|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet20|2": { - "profile" : "ingress_lossy_profile" - }, - "Ethernet20|6": { - "profile" : "ingress_lossy_profile" - }, "Ethernet152|0": { "profile" : "ingress_lossy_profile" }, @@ -160,21 +136,9 @@ "Ethernet64|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet64|2": { - "profile" : "ingress_lossy_profile" - }, - "Ethernet64|6": { - "profile" : "ingress_lossy_profile" - }, "Ethernet68|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet68|2": { - "profile" : "ingress_lossy_profile" - }, - "Ethernet68|6": { - "profile" : "ingress_lossy_profile" - }, "Ethernet168|0": { "profile" : "ingress_lossy_profile" }, @@ -184,21 +148,9 @@ "Ethernet80|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet80|2": { - "profile" : "ingress_lossy_profile" - }, - "Ethernet80|6": { - "profile" : "ingress_lossy_profile" - }, "Ethernet84|0": { "profile" : "ingress_lossy_profile" }, - "Ethernet84|2": { - "profile" : "ingress_lossy_profile" - }, - "Ethernet84|6": { - "profile" : "ingress_lossy_profile" - }, "Ethernet180|0": { "profile" : "ingress_lossy_profile" }, diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json index a479523fc1f1..a0e9ad63147e 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json @@ -89,6 +89,72 @@ "61": "1", "62": "1", "63": "1" + }, + "AZURE_UPLINK": { + "0" : "1", + "1" : "1", + "2" : "1", + "3" : "3", + "4" : "4", + "5" : "1", + "6" : "1", + "7" : "1", + "8" : "0", + "9" : "1", + "10": "1", + "11": "1", + "12": "1", + "13": "1", + "14": "1", + "15": "1", + "16": "1", + "17": "1", + "18": "1", + "19": "1", + "20": "1", + "21": "1", + "22": "1", + "23": "1", + "24": "1", + "25": "1", + "26": "1", + "27": "1", + "28": "1", + "29": "1", + "30": "1", + "31": "1", + "32": "1", + "33": "1", + "34": "1", + "35": "1", + "36": "1", + "37": "1", + "38": "1", + "39": "1", + "40": "1", + "41": "1", + "42": "1", + "43": "1", + "44": "1", + "45": "1", + "46": "5", + "47": "1", + "48": "7", + "49": "1", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1" } }, "TC_TO_PRIORITY_GROUP_MAP": { @@ -118,7 +184,7 @@ "dscp_to_tc_map" : "AZURE" }, "Ethernet0": { - "dscp_to_tc_map" : "AZURE", + "dscp_to_tc_map" : "AZURE_UPLINK", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", @@ -126,7 +192,7 @@ "pfcwd_sw_enable" : "3,4" }, "Ethernet4": { - "dscp_to_tc_map" : "AZURE", + "dscp_to_tc_map" : "AZURE_UPLINK", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", @@ -134,7 +200,7 @@ "pfcwd_sw_enable" : "3,4" }, "Ethernet16": { - "dscp_to_tc_map" : "AZURE", + "dscp_to_tc_map" : "AZURE_UPLINK", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", @@ -142,7 +208,7 @@ "pfcwd_sw_enable" : "3,4" }, "Ethernet20": { - "dscp_to_tc_map" : "AZURE", + "dscp_to_tc_map" : "AZURE_UPLINK", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", @@ -150,7 +216,7 @@ "pfcwd_sw_enable" : "3,4" }, "Ethernet64": { - "dscp_to_tc_map" : "AZURE", + "dscp_to_tc_map" : "AZURE_UPLINK", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", @@ -158,7 +224,7 @@ "pfcwd_sw_enable" : "3,4" }, "Ethernet68": { - "dscp_to_tc_map" : "AZURE", + "dscp_to_tc_map" : "AZURE_UPLINK", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", @@ -166,7 +232,7 @@ "pfcwd_sw_enable" : "3,4" }, "Ethernet80": { - "dscp_to_tc_map" : "AZURE", + "dscp_to_tc_map" : "AZURE_UPLINK", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", @@ -174,7 +240,7 @@ "pfcwd_sw_enable" : "3,4" }, "Ethernet84": { - "dscp_to_tc_map" : "AZURE", + "dscp_to_tc_map" : "AZURE_UPLINK", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", From 8a12a4ba024111ebd24819678ffd4aa8b64bdc7e Mon Sep 17 00:00:00 2001 From: Stephen Sun <5379172+stephenxs@users.noreply.github.com> Date: Mon, 1 Aug 2022 09:27:36 +0800 Subject: [PATCH 176/259] Support queue 7 in dual ToR scenario (#11571) Signed-off-by: Stephen Sun --- .../buffers_defaults_objects.j2 | 12 +++ .../py3/buffers-mellanox4600c-t1-dynamic.json | 88 +++++++++---------- .../py3/buffers-mellanox4600c-t1.json | 88 +++++++++---------- 3 files changed, 100 insertions(+), 88 deletions(-) diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/buffers_defaults_objects.j2 b/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/buffers_defaults_objects.j2 index e960447574c5..f0b0e3993bd4 100644 --- a/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/buffers_defaults_objects.j2 +++ b/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/buffers_defaults_objects.j2 @@ -143,7 +143,11 @@ {% endfor %} {% for port in port_names_active.split(',') %} {% if port not in port_names_extra_queues.split(',') %} +{% if port_names_extra_queues|length > 0 %} + "{{ port }}|5-7": { +{% else %} "{{ port }}|5-6": { +{% endif %} "profile" : "q_lossy_profile" }{% if not loop.last %},{% endif %} @@ -187,7 +191,11 @@ }, {% endfor %} {% for port in port_names_inactive.split(',') %} +{% if port_names_extra_queues|length > 0 %} + "{{ port }}|5-7": { +{% else %} "{{ port }}|5-6": { +{% endif %} "profile" : "q_lossy_profile" }{% if not loop.last %},{% endif %} @@ -204,7 +212,11 @@ }, {% endfor %} {% for port in port_names_inactive.split(',') %} +{% if port_names_extra_queues|length > 0 %} + "{{ port }}|5-7": { +{% else %} "{{ port }}|5-6": { +{% endif %} "profile" : "egress_lossy_zero_profile" }{% if not loop.last %},{% endif %} diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic.json b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic.json index 57be84be1fb1..d036b2d723bb 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic.json @@ -996,28 +996,28 @@ "Ethernet84|0-2": { "profile" : "q_lossy_profile" }, - "Ethernet0|5-6": { + "Ethernet0|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet4|5-6": { + "Ethernet4|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet16|5-6": { + "Ethernet16|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet20|5-6": { + "Ethernet20|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet64|5-6": { + "Ethernet64|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet68|5-6": { + "Ethernet68|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet80|5-6": { + "Ethernet80|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet84|5-6": { + "Ethernet84|5-7": { "profile" : "q_lossy_profile" }, "Ethernet136|0-1": { @@ -1537,112 +1537,112 @@ "Ethernet236|0-2": { "profile" : "q_lossy_profile" }, - "Ethernet8|5-6": { + "Ethernet8|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet12|5-6": { + "Ethernet12|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet24|5-6": { + "Ethernet24|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet28|5-6": { + "Ethernet28|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet32|5-6": { + "Ethernet32|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet36|5-6": { + "Ethernet36|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet40|5-6": { + "Ethernet40|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet44|5-6": { + "Ethernet44|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet48|5-6": { + "Ethernet48|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet52|5-6": { + "Ethernet52|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet56|5-6": { + "Ethernet56|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet60|5-6": { + "Ethernet60|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet72|5-6": { + "Ethernet72|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet76|5-6": { + "Ethernet76|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet88|5-6": { + "Ethernet88|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet92|5-6": { + "Ethernet92|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet96|5-6": { + "Ethernet96|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet100|5-6": { + "Ethernet100|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet104|5-6": { + "Ethernet104|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet108|5-6": { + "Ethernet108|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet112|5-6": { + "Ethernet112|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet116|5-6": { + "Ethernet116|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet120|5-6": { + "Ethernet120|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet124|5-6": { + "Ethernet124|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet128|5-6": { + "Ethernet128|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet132|5-6": { + "Ethernet132|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet140|5-6": { + "Ethernet140|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet160|5-6": { + "Ethernet160|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet164|5-6": { + "Ethernet164|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet172|5-6": { + "Ethernet172|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet192|5-6": { + "Ethernet192|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet196|5-6": { + "Ethernet196|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet204|5-6": { + "Ethernet204|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet224|5-6": { + "Ethernet224|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet228|5-6": { + "Ethernet228|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet236|5-6": { + "Ethernet236|5-7": { "profile" : "q_lossy_profile" } } diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1.json b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1.json index a545415612d5..43ec8bd4c6e8 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1.json @@ -772,28 +772,28 @@ "Ethernet84|0-2": { "profile" : "q_lossy_profile" }, - "Ethernet0|5-6": { + "Ethernet0|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet4|5-6": { + "Ethernet4|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet16|5-6": { + "Ethernet16|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet20|5-6": { + "Ethernet20|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet64|5-6": { + "Ethernet64|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet68|5-6": { + "Ethernet68|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet80|5-6": { + "Ethernet80|5-7": { "profile" : "q_lossy_profile" }, - "Ethernet84|5-6": { + "Ethernet84|5-7": { "profile" : "q_lossy_profile" }, "Ethernet136|0-1": { @@ -1313,112 +1313,112 @@ "Ethernet236|0-2": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet8|5-6": { + "Ethernet8|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet12|5-6": { + "Ethernet12|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet24|5-6": { + "Ethernet24|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet28|5-6": { + "Ethernet28|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet32|5-6": { + "Ethernet32|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet36|5-6": { + "Ethernet36|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet40|5-6": { + "Ethernet40|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet44|5-6": { + "Ethernet44|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet48|5-6": { + "Ethernet48|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet52|5-6": { + "Ethernet52|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet56|5-6": { + "Ethernet56|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet60|5-6": { + "Ethernet60|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet72|5-6": { + "Ethernet72|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet76|5-6": { + "Ethernet76|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet88|5-6": { + "Ethernet88|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet92|5-6": { + "Ethernet92|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet96|5-6": { + "Ethernet96|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet100|5-6": { + "Ethernet100|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet104|5-6": { + "Ethernet104|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet108|5-6": { + "Ethernet108|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet112|5-6": { + "Ethernet112|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet116|5-6": { + "Ethernet116|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet120|5-6": { + "Ethernet120|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet124|5-6": { + "Ethernet124|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet128|5-6": { + "Ethernet128|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet132|5-6": { + "Ethernet132|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet140|5-6": { + "Ethernet140|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet160|5-6": { + "Ethernet160|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet164|5-6": { + "Ethernet164|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet172|5-6": { + "Ethernet172|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet192|5-6": { + "Ethernet192|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet196|5-6": { + "Ethernet196|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet204|5-6": { + "Ethernet204|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet224|5-6": { + "Ethernet224|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet228|5-6": { + "Ethernet228|5-7": { "profile" : "egress_lossy_zero_profile" }, - "Ethernet236|5-6": { + "Ethernet236|5-7": { "profile" : "egress_lossy_zero_profile" } } From 871a1c51d84a3a1c43d3b1db3249fb37435bf157 Mon Sep 17 00:00:00 2001 From: Sudharsan Dhamal Gopalarathnam Date: Thu, 4 Aug 2022 09:18:00 -0700 Subject: [PATCH 177/259] [vs]Preventing ebtables cfg to be applied on vs (#11585) *Preventing ebtables rules to be applied on KVM image. The ebtables rules in SONiC are added to prevent ARP as well as L2 forwarding to be blocked in linux kernel since the hardware will take care of the actual L2 forward. However this is not the case with KVM where linux needs to forward even L2 packets --- files/build_templates/docker_image_ctl.j2 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/files/build_templates/docker_image_ctl.j2 b/files/build_templates/docker_image_ctl.j2 index 19ca92a8e98c..99051ee62d8c 100644 --- a/files/build_templates/docker_image_ctl.j2 +++ b/files/build_templates/docker_image_ctl.j2 @@ -190,8 +190,9 @@ function postStartAction() fi fi # Setup ebtables configuration +{%- if sonic_asic_platform != "vs" %} ebtables_config - +{%- endif %} # chassisdb starts before database starts, bypass the PING check since other # databases are not availbale until database container is ready. # also chassisdb doesn't support warm/fast reboot, its dump.rdb is deleted From 9fd05ce876db557f8e738a45c929fdd3eacc2088 Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Mon, 8 Aug 2022 12:48:48 +0800 Subject: [PATCH 178/259] Fix CVE-2017-1000487 alert for thrift 0.14.1 (#11634) Why I did it Fix CVE-2017-1000487 alert in thrift 0.14.1. See https://nvd.nist.gov/vuln/detail/CVE-2017-1000487 How I did it Change the version of org.codehaus.plexus:plexus-utils from 3.0.14 to 3.0.16. --- src/thrift_0_14_1/thrift.patch/0002-cve-2017-1000487.patch | 1 + src/thrift_0_14_1/thrift.patch/series | 1 + 2 files changed, 2 insertions(+) create mode 120000 src/thrift_0_14_1/thrift.patch/0002-cve-2017-1000487.patch diff --git a/src/thrift_0_14_1/thrift.patch/0002-cve-2017-1000487.patch b/src/thrift_0_14_1/thrift.patch/0002-cve-2017-1000487.patch new file mode 120000 index 000000000000..ef6607064039 --- /dev/null +++ b/src/thrift_0_14_1/thrift.patch/0002-cve-2017-1000487.patch @@ -0,0 +1 @@ +../../thrift/patch/0002-cve-2017-1000487.patch \ No newline at end of file diff --git a/src/thrift_0_14_1/thrift.patch/series b/src/thrift_0_14_1/thrift.patch/series index 19ba4dba26f3..fa2f836a8e09 100644 --- a/src/thrift_0_14_1/thrift.patch/series +++ b/src/thrift_0_14_1/thrift.patch/series @@ -2,3 +2,4 @@ 0002-Fix-build-rules.patch 0003-Remove-minimist-packages.patch 0004-Remove-underscore-packages.patch +0002-cve-2017-1000487.patch From f16e7ad8ed4dcdce3526087db6c40984b307938a Mon Sep 17 00:00:00 2001 From: Ze Gan Date: Sun, 7 Aug 2022 13:38:50 +0800 Subject: [PATCH 179/259] [submodule]: Update sonic-wpa-supplicant (#11636) 24f505148 [eloop.c]: Increase timeout of signal termination (#62) 2b2c1ad72 [driver_macsec_sonic.c]: Fixbug: a wrong db_wait in delete sa (#61) Signed-off-by: Ze Gan --- src/wpasupplicant/sonic-wpa-supplicant | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wpasupplicant/sonic-wpa-supplicant b/src/wpasupplicant/sonic-wpa-supplicant index 88d1eaea944c..24f505148191 160000 --- a/src/wpasupplicant/sonic-wpa-supplicant +++ b/src/wpasupplicant/sonic-wpa-supplicant @@ -1 +1 @@ -Subproject commit 88d1eaea944c5ea90d9d7796dc10abc80823ed93 +Subproject commit 24f5051481910677b9e5937c01b8b941185086d3 From d1f72a4878c41bb3eedcede8cbd15b0597828ff2 Mon Sep 17 00:00:00 2001 From: Saikrishna Arcot Date: Tue, 12 Jul 2022 07:38:41 -0700 Subject: [PATCH 180/259] Change dhcp6relay to be a submodule, and rename it to dhcprelay (#10711) Why I did it src/dhcprelay is being split out to be its own submodule. How I did it Add existing dhcprelay commits into the new repo. Clean up Makefile (sonic-net/sonic-dhcp-relay@772625f) Add LGTM config (sonic-net/sonic-dhcp-relay@5cc0889) Add Azure pipeline config (sonic-net/sonic-dhcp-relay@c79cdb7) Add submodule reference, renaming most references of dhcp6relay to dhcprelay (to reflect that this will not just be for IPv6 in the future). How to verify it Successful run of LGTM is tested at sonic-net/sonic-dhcp-relay#4. Failure run of LGTM is tested at sonic-net/sonic-dhcp-relay#3. Azure pipeline is run for each commit/PR, and will build for amd64, armhf, and arm64. UT/code coverage check is not yet done. Signed-off-by: Saikrishna Arcot --- .gitmodules | 3 + rules/dhcp6relay.dep | 9 - rules/dhcp6relay.mk | 12 - rules/dhcprelay.dep | 11 + rules/dhcprelay.mk | 12 + rules/docker-dhcp-relay.mk | 4 +- src/dhcp6relay/.gitignore | 5 - src/dhcp6relay/Makefile | 42 -- src/dhcp6relay/debian/changelog | 5 - src/dhcp6relay/debian/compat | 1 - src/dhcp6relay/debian/control | 14 - src/dhcp6relay/debian/rules | 6 - src/dhcp6relay/src/configInterface.cpp | 152 ----- src/dhcp6relay/src/configInterface.h | 75 --- src/dhcp6relay/src/main.cpp | 18 - src/dhcp6relay/src/relay.cpp | 861 ------------------------- src/dhcp6relay/src/relay.h | 358 ---------- src/dhcp6relay/src/subdir.mk | 23 - src/dhcprelay | 1 + 19 files changed, 29 insertions(+), 1583 deletions(-) delete mode 100644 rules/dhcp6relay.dep delete mode 100644 rules/dhcp6relay.mk create mode 100644 rules/dhcprelay.dep create mode 100644 rules/dhcprelay.mk delete mode 100644 src/dhcp6relay/.gitignore delete mode 100644 src/dhcp6relay/Makefile delete mode 100644 src/dhcp6relay/debian/changelog delete mode 100644 src/dhcp6relay/debian/compat delete mode 100644 src/dhcp6relay/debian/control delete mode 100755 src/dhcp6relay/debian/rules delete mode 100644 src/dhcp6relay/src/configInterface.cpp delete mode 100644 src/dhcp6relay/src/configInterface.h delete mode 100644 src/dhcp6relay/src/main.cpp delete mode 100644 src/dhcp6relay/src/relay.cpp delete mode 100644 src/dhcp6relay/src/relay.h delete mode 100644 src/dhcp6relay/src/subdir.mk create mode 160000 src/dhcprelay diff --git a/.gitmodules b/.gitmodules index 24cccee9316a..2a0e230e3ed8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -113,3 +113,6 @@ [submodule "src/ptf-py3"] path = src/ptf-py3 url = https://github.com/p4lang/ptf.git +[submodule "src/dhcprelay"] + path = src/dhcprelay + url = https://github.com/sonic-net/sonic-dhcp-relay.git diff --git a/rules/dhcp6relay.dep b/rules/dhcp6relay.dep deleted file mode 100644 index be82d326fe21..000000000000 --- a/rules/dhcp6relay.dep +++ /dev/null @@ -1,9 +0,0 @@ - -SPATH := $($(SONIC_DHCP6RELAY)_SRC_PATH) -DEP_FILES := $(SONIC_COMMON_FILES_LIST) rules/dhcp6relay.mk rules/dhcp6relay.dep -DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) -DEP_FILES += $(shell git ls-files $(SPATH)) - -$(SONIC_DHCP6RELAY)_CACHE_MODE := GIT_CONTENT_SHA -$(SONIC_DHCP6RELAY)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) -$(SONIC_DHCP6RELAY)_DEP_FILES := $(DEP_FILES) diff --git a/rules/dhcp6relay.mk b/rules/dhcp6relay.mk deleted file mode 100644 index 204bf6fa34dd..000000000000 --- a/rules/dhcp6relay.mk +++ /dev/null @@ -1,12 +0,0 @@ -# SONiC DHCPV6 RELAY Package - -SONIC_DHCP6RELAY_VERSION = 1.0.0-0 -SONIC_DHCP6RELAY_PKG_NAME = dhcp6relay - -SONIC_DHCP6RELAY = sonic-$(SONIC_DHCP6RELAY_PKG_NAME)_$(SONIC_DHCP6RELAY_VERSION)_$(CONFIGURED_ARCH).deb -$(SONIC_DHCP6RELAY)_DEPENDS = $(LIBSWSSCOMMON) $(LIBHIREDIS) $(LIBSWSSCOMMON_DEV) $(LIBHIREDIS_DEV) -$(SONIC_DHCP6RELAY)_SRC_PATH = $(SRC_PATH)/$(SONIC_DHCP6RELAY_PKG_NAME) -SONIC_DPKG_DEBS += $(SONIC_DHCP6RELAY) - -SONIC_DHCP6RELAY_DBG = sonic-$(SONIC_DHCP6RELAY_PKG_NAME)-dbgsym_$(SONIC_DHCP6RELAY_VERSION)_$(CONFIGURED_ARCH).deb -$(eval $(call add_derived_package,$(SONIC_DHCP6RELAY),$(SONIC_DHCP6RELAY_DBG))) diff --git a/rules/dhcprelay.dep b/rules/dhcprelay.dep new file mode 100644 index 000000000000..5f6d77a84fc3 --- /dev/null +++ b/rules/dhcprelay.dep @@ -0,0 +1,11 @@ + +SPATH := $($(SONIC_DHCPRELAY)_SRC_PATH) +DEP_FILES := $(SONIC_COMMON_FILES_LIST) rules/dhcprelay.mk rules/dhcprelay.dep +DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) +SMDEP_FILES := $(addprefix $(SPATH)/,$(shell cd $(SPATH) && git ls-files)) + +$(SONIC_DHCPRELAY)_CACHE_MODE := GIT_CONTENT_SHA +$(SONIC_DHCPRELAY)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) +$(SONIC_DHCPRELAY)_DEP_FILES := $(DEP_FILES) +$(SONIC_DHCPRELAY)_SMDEP_FILES := $(SMDEP_FILES) +$(SONIC_DHCPRELAY)_SMDEP_PATHS := $(SPATH) diff --git a/rules/dhcprelay.mk b/rules/dhcprelay.mk new file mode 100644 index 000000000000..0a32d7d54297 --- /dev/null +++ b/rules/dhcprelay.mk @@ -0,0 +1,12 @@ +# SONiC DHCPV6 RELAY Package + +SONIC_DHCPRELAY_VERSION = 1.0.0-0 +SONIC_DHCPRELAY_PKG_NAME = dhcp6relay + +SONIC_DHCPRELAY = sonic-$(SONIC_DHCPRELAY_PKG_NAME)_$(SONIC_DHCPRELAY_VERSION)_$(CONFIGURED_ARCH).deb +$(SONIC_DHCPRELAY)_DEPENDS = $(LIBSWSSCOMMON) $(LIBHIREDIS) $(LIBSWSSCOMMON_DEV) $(LIBHIREDIS_DEV) +$(SONIC_DHCPRELAY)_SRC_PATH = $(SRC_PATH)/dhcprelay +SONIC_DPKG_DEBS += $(SONIC_DHCPRELAY) + +SONIC_DHCPRELAY_DBG = sonic-$(SONIC_DHCPRELAY_PKG_NAME)-dbgsym_$(SONIC_DHCPRELAY_VERSION)_$(CONFIGURED_ARCH).deb +$(eval $(call add_derived_package,$(SONIC_DHCPRELAY),$(SONIC_DHCPRELAY_DBG))) diff --git a/rules/docker-dhcp-relay.mk b/rules/docker-dhcp-relay.mk index b742bff43b0d..c2db8d7ba538 100644 --- a/rules/docker-dhcp-relay.mk +++ b/rules/docker-dhcp-relay.mk @@ -6,10 +6,10 @@ DOCKER_DHCP_RELAY_DBG = $(DOCKER_DHCP_RELAY_STEM)-$(DBG_IMAGE_MARK).gz $(DOCKER_DHCP_RELAY)_PATH = $(DOCKERS_PATH)/$(DOCKER_DHCP_RELAY_STEM) -$(DOCKER_DHCP_RELAY)_DEPENDS += $(ISC_DHCP_RELAY) $(SONIC_DHCPMON) $(SONIC_DHCP6RELAY) $(LIBSWSSCOMMON) +$(DOCKER_DHCP_RELAY)_DEPENDS += $(ISC_DHCP_RELAY) $(SONIC_DHCPMON) $(SONIC_DHCPRELAY) $(LIBSWSSCOMMON) $(DOCKER_DHCP_RELAY)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_DEPENDS) -$(DOCKER_DHCP_RELAY)_DBG_DEPENDS += $(ISC_DHCP_RELAY_DBG) $(SONIC_DHCP6RELAY_DBG) $(SONIC_DHCPMON_DBG) +$(DOCKER_DHCP_RELAY)_DBG_DEPENDS += $(ISC_DHCP_RELAY_DBG) $(SONIC_DHCPRELAY_DBG) $(SONIC_DHCPMON_DBG) $(DOCKER_DHCP_RELAY)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_IMAGE_PACKAGES) diff --git a/src/dhcp6relay/.gitignore b/src/dhcp6relay/.gitignore deleted file mode 100644 index 9d09ae6b3f1a..000000000000 --- a/src/dhcp6relay/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -debian/* -!debian/changelog -!debian/compat -!debian/control -!debian/rules diff --git a/src/dhcp6relay/Makefile b/src/dhcp6relay/Makefile deleted file mode 100644 index dd384452a5fc..000000000000 --- a/src/dhcp6relay/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -RM := rm -rf -DHCP6RELAY_TARGET := dhcp6relay -CP := cp -MKDIR := mkdir -CC := g++ -MV := mv -LIBS := -levent -lhiredis -lswsscommon -pthread -lboost_thread -lboost_system -CFLAGS += -Wall -std=c++17 -fPIE -I$(PWD)/../sonic-swss-common/common -PWD := $(shell pwd) - -ifneq ($(MAKECMDGOALS),clean) -ifneq ($(strip $(C_DEPS)),) --include $(C_DEPS) $(OBJS) -endif -endif - --include src/subdir.mk - -all: sonic-dhcp6relay - -sonic-dhcp6relay: $(OBJS) - @echo 'Building target: $@' - @echo 'Invoking: G++ Linker' - $(CC) $(LDFLAGS) -o $(DHCP6RELAY_TARGET) $(OBJS) $(LIBS) - @echo 'Finished building target: $@' - @echo ' ' - -install: - $(MKDIR) -p $(DESTDIR)/usr/sbin - $(MV) $(DHCP6RELAY_TARGET) $(DESTDIR)/usr/sbin - -deinstall: - $(RM) $(DESTDIR)/usr/sbin/$(DHCP6RELAY_TARGET) - $(RM) -rf $(DESTDIR)/usr/sbin - -clean: - -$(RM) $(EXECUTABLES) $(C_DEPS) $(OBJS) $(DHCP6RELAY_TARGET) - -@echo ' ' - -.PHONY: all clean dependents - - diff --git a/src/dhcp6relay/debian/changelog b/src/dhcp6relay/debian/changelog deleted file mode 100644 index 67ed277049e5..000000000000 --- a/src/dhcp6relay/debian/changelog +++ /dev/null @@ -1,5 +0,0 @@ -sonic-dhcp6relay (1.0.0-0) UNRELEASED; urgency=medium - - * Initial release. - --- Kelly Yeh diff --git a/src/dhcp6relay/debian/compat b/src/dhcp6relay/debian/compat deleted file mode 100644 index 48082f72f087..000000000000 --- a/src/dhcp6relay/debian/compat +++ /dev/null @@ -1 +0,0 @@ -12 diff --git a/src/dhcp6relay/debian/control b/src/dhcp6relay/debian/control deleted file mode 100644 index af7877fef9a8..000000000000 --- a/src/dhcp6relay/debian/control +++ /dev/null @@ -1,14 +0,0 @@ -Source: sonic-dhcp6relay -Section: devel -Priority: optional -Maintainer: Kelly Yeh -Build-Depends: debhelper (>= 12.0.0), libevent-dev, libboost-thread-dev, libboost-system-dev, libswsscommon-dev -Standards-Version: 3.9.3 -Homepage: https://github.com/Azure/sonic-buildimage -XS-Go-Import-Path: github.com/Azure/sonic-buildimage - -Package: sonic-dhcp6relay -Architecture: any -Built-Using: ${misc:Built-Using} -Depends: ${shlibs:Depends} -Description: SONiC DHCPv6 Relay diff --git a/src/dhcp6relay/debian/rules b/src/dhcp6relay/debian/rules deleted file mode 100755 index ac2cd63889ef..000000000000 --- a/src/dhcp6relay/debian/rules +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/make -f - -export DEB_BUILD_MAINT_OPTIONS=hardening=+all - -%: - dh $@ --parallel diff --git a/src/dhcp6relay/src/configInterface.cpp b/src/dhcp6relay/src/configInterface.cpp deleted file mode 100644 index ca78d80e63da..000000000000 --- a/src/dhcp6relay/src/configInterface.cpp +++ /dev/null @@ -1,152 +0,0 @@ -#include -#include -#include -#include "configInterface.h" - -constexpr auto DEFAULT_TIMEOUT_MSEC = 1000; - -bool pollSwssNotifcation = true; -std::shared_ptr mSwssThreadPtr; - -std::shared_ptr configDbPtr = std::make_shared ("CONFIG_DB", 0); -swss::SubscriberStateTable ipHelpersTable(configDbPtr.get(), "DHCP_RELAY"); -swss::Select swssSelect; - -/** - * @code void initialize_swss() - * - * @brief initialize DB tables and start SWSS listening thread - * - * @return none - */ -void initialize_swss(std::vector *vlans) -{ - try { - swssSelect.addSelectable(&ipHelpersTable); - get_dhcp(vlans); - mSwssThreadPtr = std::make_shared (&handleSwssNotification, vlans); - } - catch (const std::bad_alloc &e) { - syslog(LOG_ERR, "Failed allocate memory. Exception details: %s", e.what()); - } -} - -/** - * @code void deinitialize_swss() - * - * @brief deinitialize DB interface and join SWSS listening thread - * - * @return none - */ -void deinitialize_swss() -{ - stopSwssNotificationPoll(); - mSwssThreadPtr->interrupt(); -} - - -/** - * @code void get_dhcp(std::vector *vlans) - * - * @brief initialize and get vlan table information from DHCP_RELAY - * - * @return none - */ -void get_dhcp(std::vector *vlans) { - swss::Selectable *selectable; - int ret = swssSelect.select(&selectable, DEFAULT_TIMEOUT_MSEC); - if (ret == swss::Select::ERROR) { - syslog(LOG_WARNING, "Select: returned ERROR"); - } else if (ret == swss::Select::TIMEOUT) { - } - if (selectable == static_cast (&ipHelpersTable)) { - handleRelayNotification(ipHelpersTable, vlans); - } -} -/** - * @code void handleSwssNotification(std::vector *vlans) - * - * @brief main thread for handling SWSS notification - * - * @param context list of vlans/argument config that contains strings of server and option - * - * @return none - */ -void handleSwssNotification(std::vector *vlans) -{ - while (pollSwssNotifcation) { - get_dhcp(vlans); - } -} - -/** - * @code void handleRelayNotification(swss::SubscriberStateTable &ipHelpersTable, std::vector *vlans) - * - * @brief handles DHCPv6 relay configuration change notification - * - * @param ipHelpersTable DHCP table - * @param vlans list of vlans/argument config that contains strings of server and option - * - * @return none - */ -void handleRelayNotification(swss::SubscriberStateTable &ipHelpersTable, std::vector *vlans) -{ - std::deque entries; - - ipHelpersTable.pops(entries); - processRelayNotification(entries, vlans); -} - -/** - * @code void processRelayNotification(std::deque &entries, std::vector *vlans) - * - * @brief process DHCPv6 relay servers and options configuration change notification - * - * @param entries queue of std::tuple> entries in DHCP table - * @param vlans list of vlans/argument config that contains strings of server and option - * - * @return none - */ -void processRelayNotification(std::deque &entries, std::vector *vlans) -{ - std::vector servers; - - for (auto &entry: entries) { - std::string vlan = kfvKey(entry); - std::string operation = kfvOp(entry); - std::vector fieldValues = kfvFieldsValues(entry); - - relay_config intf; - intf.is_option_79 = true; - intf.interface = vlan; - intf.db = nullptr; - for (auto &fieldValue: fieldValues) { - std::string f = fvField(fieldValue); - std::string v = fvValue(fieldValue); - if(f == "dhcpv6_servers") { - std::stringstream ss(v); - while (ss.good()) { - std::string substr; - getline(ss, substr, ','); - intf.servers.push_back(substr); - } - syslog(LOG_DEBUG, "key: %s, Operation: %s, f: %s, v: %s", vlan.c_str(), operation.c_str(), f.c_str(), v.c_str()); - } - if(f == "dhcpv6_option|rfc6939_support" && v == "false") { - intf.is_option_79 = false; - } - } - vlans->push_back(intf); - } -} - -/** -*@code stopSwssNotificationPoll -* -*@brief stop SWSS listening thread -* -*@return none -*/ -void stopSwssNotificationPoll() { - pollSwssNotifcation = false; -}; diff --git a/src/dhcp6relay/src/configInterface.h b/src/dhcp6relay/src/configInterface.h deleted file mode 100644 index 20b0912c5cef..000000000000 --- a/src/dhcp6relay/src/configInterface.h +++ /dev/null @@ -1,75 +0,0 @@ -#include -#include "subscriberstatetable.h" -#include "select.h" -#include "relay.h" - -/** - * @code void initialize_swss() - * - * @brief initialize DB tables and start SWSS listening thread - * - * @return none - */ -void initialize_swss(std::vector *vlans); - -/** - * @code void deinitialize_swss() - * - * @brief deinitialize DB interface and join SWSS listening thread - * - * @return none - */ -void deinitialize_swss(); - -/** - * @code void get_dhcp(std::vector *vlans) - * - * @brief initialize and get vlan information from DHCP_RELAY - * - * @return none - */ -void get_dhcp(std::vector *vlans); - -/** - * @code void handleSwssNotification(std::vector *vlans) - * - * @brief main thread for handling SWSS notification - * - * @param vlans list of vlans/argument config that contains strings of server and option - * - * @return none - */ -void handleSwssNotification(std::vector *vlans); - -/** - * @code void handleRelayNotification(swss::SubscriberStateTable &ipHelpersTable, std::vector *vlans) - * - * @brief handles DHCPv6 relay configuration change notification - * - * @param ipHelpersTable DHCP table - * @param vlans list of vlans/argument config that contains strings of server and option - * - * @return none - */ -void handleRelayNotification(swss::SubscriberStateTable &configMuxTable, std::vector *vlans); - -/** - * @code void processRelayNotification(std::deque &entries, std::vector *vlans) - * - * @brief process DHCPv6 relay servers and options configuration change notification - * - * @param entries queue of std::tuple> entries in DHCP table - * @param context list of vlans/argument config that contains strings of server and option - * - * @return none - */ -void processRelayNotification(std::deque &entries, std::vector *vlans); - -/** -*@code stopSwssNotificationPoll -* -*@brief stop SWSS listening thread -* -*@return none -*/ -void stopSwssNotificationPoll(); diff --git a/src/dhcp6relay/src/main.cpp b/src/dhcp6relay/src/main.cpp deleted file mode 100644 index 9f5bc74bcfa0..000000000000 --- a/src/dhcp6relay/src/main.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include -#include "configInterface.h" - -int main(int argc, char *argv[]) { - try { - std::vector vlans; - swss::DBConnector state_db("STATE_DB", 0); - initialize_swss(&vlans); - loop_relay(&vlans, &state_db); - } - catch (std::exception &e) - { - syslog(LOG_ERR, "An exception occurred.\n"); - return 1; - } - return 0; -} diff --git a/src/dhcp6relay/src/relay.cpp b/src/dhcp6relay/src/relay.cpp deleted file mode 100644 index 4b3b4d4010bf..000000000000 --- a/src/dhcp6relay/src/relay.cpp +++ /dev/null @@ -1,861 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#include "configdb.h" -#include "sonicv2connector.h" -#include "dbconnector.h" -#include "configInterface.h" - - -struct event *listen_event; -struct event *server_listen_event; -struct event_base *base; -struct event *ev_sigint; -struct event *ev_sigterm; -static std::string counter_table = "DHCPv6_COUNTER_TABLE|"; - -/* DHCPv6 filter */ -/* sudo tcpdump -dd "ip6 dst ff02::1:2 && udp dst port 547" */ - -static struct sock_filter ether_relay_filter[] = { - - { 0x28, 0, 0, 0x0000000c }, - { 0x15, 0, 13, 0x000086dd }, - { 0x20, 0, 0, 0x00000026 }, - { 0x15, 0, 11, 0xff020000 }, - { 0x20, 0, 0, 0x0000002a }, - { 0x15, 0, 9, 0x00000000 }, - { 0x20, 0, 0, 0x0000002e }, - { 0x15, 0, 7, 0x00000000 }, - { 0x20, 0, 0, 0x00000032 }, - { 0x15, 0, 5, 0x00010002 }, - { 0x30, 0, 0, 0x00000014 }, - { 0x15, 0, 3, 0x00000011 }, - { 0x28, 0, 0, 0x00000038 }, - { 0x15, 0, 1, 0x00000223 }, - { 0x6, 0, 0, 0x00040000 }, - { 0x6, 0, 0, 0x00000000 }, -}; -const struct sock_fprog ether_relay_fprog = { - lengthof(ether_relay_filter), - ether_relay_filter -}; - -/* DHCPv6 Counter */ -uint64_t counters[DHCPv6_MESSAGE_TYPE_COUNT]; -std::map counterMap = {{DHCPv6_MESSAGE_TYPE_UNKNOWN, "Unknown"}, - {DHCPv6_MESSAGE_TYPE_SOLICIT, "Solicit"}, - {DHCPv6_MESSAGE_TYPE_ADVERTISE, "Advertise"}, - {DHCPv6_MESSAGE_TYPE_REQUEST, "Request"}, - {DHCPv6_MESSAGE_TYPE_CONFIRM, "Confirm"}, - {DHCPv6_MESSAGE_TYPE_RENEW, "Renew"}, - {DHCPv6_MESSAGE_TYPE_REBIND, "Rebind"}, - {DHCPv6_MESSAGE_TYPE_REPLY, "Reply"}, - {DHCPv6_MESSAGE_TYPE_RELEASE, "Release"}, - {DHCPv6_MESSAGE_TYPE_DECLINE, "Decline"}, - {DHCPv6_MESSAGE_TYPE_RECONFIGURE, "Reconfigure"}, - {DHCPv6_MESSAGE_TYPE_INFORMATION_REQUEST, "Information-Request"}, - {DHCPv6_MESSAGE_TYPE_RELAY_FORW, "Relay-Forward"}, - {DHCPv6_MESSAGE_TYPE_RELAY_REPL, "Relay-Reply"}, - {DHCPv6_MESSAGE_TYPE_MALFORMED, "Malformed"}}; - -/** - * @code void initialize_counter(swss::DBConnector *db, std::string counterVlan); - * - * @brief initialize the counter by each Vlan - * - * @param swss::DBConnector *db state_db connector - * @param counterVlan counter table with interface name - * - * @return none - */ -void initialize_counter(swss::DBConnector *db, std::string counterVlan) { - db->hset(counterVlan, "Unknown", toString(counters[DHCPv6_MESSAGE_TYPE_UNKNOWN])); - db->hset(counterVlan, "Solicit", toString(counters[DHCPv6_MESSAGE_TYPE_SOLICIT])); - db->hset(counterVlan, "Advertise", toString(counters[DHCPv6_MESSAGE_TYPE_ADVERTISE])); - db->hset(counterVlan, "Request", toString(counters[DHCPv6_MESSAGE_TYPE_REQUEST])); - db->hset(counterVlan, "Confirm", toString(counters[DHCPv6_MESSAGE_TYPE_CONFIRM])); - db->hset(counterVlan, "Renew", toString(counters[DHCPv6_MESSAGE_TYPE_RENEW])); - db->hset(counterVlan, "Rebind", toString(counters[DHCPv6_MESSAGE_TYPE_REBIND])); - db->hset(counterVlan, "Reply", toString(counters[DHCPv6_MESSAGE_TYPE_REPLY])); - db->hset(counterVlan, "Release", toString(counters[DHCPv6_MESSAGE_TYPE_RELEASE])); - db->hset(counterVlan, "Decline", toString(counters[DHCPv6_MESSAGE_TYPE_DECLINE])); - db->hset(counterVlan, "Reconfigure", toString(counters[DHCPv6_MESSAGE_TYPE_RECONFIGURE])); - db->hset(counterVlan, "Information-Request", toString(counters[DHCPv6_MESSAGE_TYPE_INFORMATION_REQUEST])); - db->hset(counterVlan, "Relay-Forward", toString(counters[DHCPv6_MESSAGE_TYPE_RELAY_FORW])); - db->hset(counterVlan, "Relay-Reply", toString(counters[DHCPv6_MESSAGE_TYPE_RELAY_REPL])); - db->hset(counterVlan, "Malformed", toString(counters[DHCPv6_MESSAGE_TYPE_MALFORMED])); -} - -/** - * @code void update_counter(swss::DBConnector *db, std::string CounterVlan, uint8_t msg_type); - * - * @brief update the counter in state_db with count of each DHCPv6 message type - * - * @param swss::DBConnector *db state_db connector - * @param counterVlan counter table with interface name - * @param msg_type dhcpv6 message type to be updated in counter - * - * @return none - */ -void update_counter(swss::DBConnector *db, std::string counterVlan, uint8_t msg_type) { - db->hset(counterVlan, counterMap.find(msg_type)->second, toString(counters[msg_type])); -} - -/** - * @code std::string toString(uint16_t count); - * - * @brief convert uint16_t to string - * - * @param count count of messages in counter - * - * @return count in string - */ -std::string toString(uint16_t count) { - std::stringstream ss; - ss << count; - std::string countValue = ss.str(); - return countValue; -} - -/** - * @code const struct ether_header *parse_ether_frame(const uint8_t *buffer, const uint8_t **out_end); - * - * @brief parse through ethernet frame - * - * @param *buffer message buffer - * @param **out_end pointer - * - * @return ether_header end of ethernet header position - */ -const struct ether_header *parse_ether_frame(const uint8_t *buffer, const uint8_t **out_end) { - (*out_end) = buffer + sizeof(struct ether_header); - return (const struct ether_header *)buffer; -} - -/** - * @code const struct ip6_hdr *parse_ip6_hdr(const uint8_t *buffer, const uint8_t **out_end); - * - * @brief parse through ipv6 header - * - * @param *buffer message buffer - * @param **out_end pointer - * - * @return ip6_hdr end of ipv6 header position - */ -const struct ip6_hdr *parse_ip6_hdr(const uint8_t *buffer, const uint8_t **out_end) { - (*out_end) = buffer + sizeof(struct ip6_hdr); - return (struct ip6_hdr *)buffer; -} - -/** - * @code const struct udphdr *parse_udp(const uint8_t *buffer, const uint8_t **out_end); - * - * @brief parse through udp header - * - * @param *buffer message buffer - * @param **out_end pointer - * - * @return udphdr end of udp header position - */ -const struct udphdr *parse_udp(const uint8_t *buffer, const uint8_t **out_end) { - (*out_end) = buffer + sizeof(struct udphdr); - return (const struct udphdr *)buffer; -} - -/** - * @code const struct dhcpv6_msg *parse_dhcpv6_hdr(const uint8_t *buffer); - * - * @brief parse through dhcpv6 header - * - * @param *buffer message buffer - * @param **out_end pointer - * - * @return dhcpv6_msg end of dhcpv6 header position - */ -const struct dhcpv6_msg *parse_dhcpv6_hdr(const uint8_t *buffer) { - return (const struct dhcpv6_msg *)buffer; -} - -/** - * @code const struct dhcpv6_relay_msg *parse_dhcpv6_relay(const uint8_t *buffer); - * - * @brief parse through dhcpv6 relay message - * - * @param *buffer message buffer - * @param **out_end pointer - * - * @return dhcpv6_relay_msg start of dhcpv6 relay message or end of dhcpv6 message type position - */ -const struct dhcpv6_relay_msg *parse_dhcpv6_relay(const uint8_t *buffer) { - return (const struct dhcpv6_relay_msg *)buffer; -} - -/** - * @code const struct dhcpv6_option *parse_dhcpv6_opt(const uint8_t *buffer, const uint8_t **out_end); - * - * @brief parse through dhcpv6 option - * - * @param *buffer message buffer - * @param **out_end pointer - * - * @return dhcpv6_option end of dhcpv6 message option - */ -const struct dhcpv6_option *parse_dhcpv6_opt(const uint8_t *buffer, const uint8_t **out_end) { - auto option = (const struct dhcpv6_option *)buffer; - uint8_t size = 4; // option-code + option-len - size += *(uint16_t *)(buffer); - (*out_end) = buffer + size + ntohs(option->option_length); - - return option; -} - -/** - * @code void send_udp(int sock, uint8_t *buffer, struct sockaddr_in6 target, uint32_t n, relay_config *config, uint8_t msg_type); - * - * @brief send udp packet - * - * @param *buffer message buffer - * @param sockaddr_in6 target target socket - * @param n length of message - * @param relay_config *config pointer to relay_config - * @param uint8_t msg_type message type of dhcpv6 option of relayed message - * - * @return dhcpv6_option end of dhcpv6 message option - */ -void send_udp(int sock, uint8_t *buffer, struct sockaddr_in6 target, uint32_t n, relay_config *config, uint8_t msg_type) { - std::string counterVlan = counter_table; - if(sendto(sock, buffer, n, 0, (const struct sockaddr *)&target, sizeof(target)) == -1) - syslog(LOG_ERR, "sendto: Failed to send to target address\n"); - else if (counterMap.find(msg_type) != counterMap.end()) { - counters[msg_type]++; - update_counter(config->db, counterVlan.append(config->interface), msg_type); - } else { - syslog(LOG_WARNING, "unexpected message type %d(0x%x)\n", msg_type, msg_type); - } -} - -/** - * @code relay_forward(uint8_t *buffer, const struct dhcpv6_msg *msg, uint16_t msg_length); - * - * @brief embed the DHCPv6 message received into DHCPv6 relay forward message - * - * @param buffer pointer to buffer - * @param msg pointer to parsed DHCPv6 message - * @param msg_length length of DHCPv6 message - * - * @return none - */ -void relay_forward(uint8_t *buffer, const struct dhcpv6_msg *msg, uint16_t msg_length) { - struct dhcpv6_option option; - option.option_code = htons(OPTION_RELAY_MSG); - option.option_length = htons(msg_length); - memcpy(buffer, &option, sizeof(struct dhcpv6_option)); - memcpy(buffer + sizeof(struct dhcpv6_option), msg, msg_length); -} - -/** - * @code sock_open(int ifindex, const struct sock_fprog *fprog); - * - * @brief prepare L2 socket to attach to "udp and port 547" filter - * - * @param ifindex interface index - * @param fprog bpf filter "udp and port 547" - * - * @return socket descriptor - */ -int sock_open(int ifindex, const struct sock_fprog *fprog) -{ - if (!ifindex) { - errno = EINVAL; - return -1; - } - - int s = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); - if (s == -1) { - syslog(LOG_ERR, "socket: Failed to create socket\n"); - return -1; - } - - struct sockaddr_ll sll = { - .sll_family = AF_PACKET, - .sll_protocol = htons(ETH_P_ALL), - .sll_ifindex = ifindex - }; - - if (bind(s, (struct sockaddr *)&sll, sizeof sll) == -1) { - syslog(LOG_ERR, "bind: Failed to bind to specified interface\n"); - (void) close(s); - return -1; - } - - if (fprog && setsockopt(s, SOL_SOCKET, SO_ATTACH_FILTER, fprog, sizeof *fprog) == -1) - { - syslog(LOG_ERR, "setsockopt: Failed to attach filter\n"); - (void) close(s); - return -1; - } - - return s; -} - -/** - * @code prepare_relay_config(relay_config *interface_config, int local_sock, int filter); - * - * @brief prepare for specified relay interface config: server and link address - * - * @param interface_config pointer to relay config to be prepared - * @param local_sock L3 socket used for relaying messages - * @param filter socket attached with filter - * - * @return none - */ -void prepare_relay_config(relay_config *interface_config, int *local_sock, int filter) { - struct ifaddrs *ifa, *ifa_tmp; - sockaddr_in6 non_link_local; - sockaddr_in6 link_local; - - interface_config->local_sock = *local_sock; - interface_config->filter = filter; - - for(auto server: interface_config->servers) { - sockaddr_in6 tmp; - if(inet_pton(AF_INET6, server.c_str(), &tmp.sin6_addr) != 1) - { - syslog(LOG_WARNING, "inet_pton: Failed to convert IPv6 address\n"); - } - tmp.sin6_family = AF_INET6; - tmp.sin6_flowinfo = 0; - tmp.sin6_port = htons(RELAY_PORT); - tmp.sin6_scope_id = 0; - interface_config->servers_sock.push_back(tmp); - } - - if (getifaddrs(&ifa) == -1) { - syslog(LOG_WARNING, "getifaddrs: Unable to get network interfaces\n"); - exit(1); - } - - ifa_tmp = ifa; - while (ifa_tmp) { - if (ifa_tmp->ifa_addr->sa_family == AF_INET6) { - struct sockaddr_in6 *in6 = (struct sockaddr_in6*) ifa_tmp->ifa_addr; - if((strcmp(ifa_tmp->ifa_name, interface_config->interface.c_str()) == 0) && !IN6_IS_ADDR_LINKLOCAL(&in6->sin6_addr)) { - non_link_local = *in6; - break; - } - if((strcmp(ifa_tmp->ifa_name, interface_config->interface.c_str()) == 0) && IN6_IS_ADDR_LINKLOCAL(&in6->sin6_addr)) { - link_local = *in6; - } - } - ifa_tmp = ifa_tmp->ifa_next; - } - freeifaddrs(ifa); - - if(!IN6_IS_ADDR_LINKLOCAL(&non_link_local.sin6_addr)) { - interface_config->link_address = non_link_local; - } - else { - interface_config->link_address = link_local; - } -} - -/** - * @code prepare_socket(int *local_sock, int *server_sock, relay_config *config, int index); - * - * @brief prepare L3 socket for sending - * - * @param local_sock pointer to socket binded to global address for relaying client message to server and listening for server message - * @param server_sock pointer to socket binded to link_local address for relaying server message to client - * @param index scope id of interface - * - * @return none - */ -void prepare_socket(int *local_sock, int *server_sock, relay_config *config, int index) { - struct ifaddrs *ifa, *ifa_tmp; - sockaddr_in6 addr; - sockaddr_in6 ll_addr; - memset(&addr, 0, sizeof(addr)); - memset(&ll_addr, 0, sizeof(ll_addr)); - - if ((*local_sock = socket(AF_INET6, SOCK_DGRAM, 0)) == -1) { - syslog(LOG_ERR, "socket: Failed to create socket on interface %s\n", config->interface.c_str()); - } - - if ((*server_sock= socket(AF_INET6, SOCK_DGRAM, 0)) == -1) { - syslog(LOG_ERR, "socket: Failed to create socket on interface %s\n", config->interface.c_str()); - } - - int retry = 0; - bool bind_addr = false; - bool bind_ll_addr = false; - do { - if (getifaddrs(&ifa) == -1) { - syslog(LOG_WARNING, "getifaddrs: Unable to get network interfaces with %s\n", strerror(errno)); - } - else { - ifa_tmp = ifa; - while (ifa_tmp) { - if ((ifa_tmp->ifa_addr->sa_family == AF_INET6) && (strcmp(ifa_tmp->ifa_name, config->interface.c_str()) == 0)) { - struct sockaddr_in6 *in6 = (struct sockaddr_in6*) ifa_tmp->ifa_addr; - if(!IN6_IS_ADDR_LINKLOCAL(&in6->sin6_addr)) { - bind_addr = true; - in6->sin6_family = AF_INET6; - in6->sin6_port = htons(RELAY_PORT); - addr = *in6; - } - if(IN6_IS_ADDR_LINKLOCAL(&in6->sin6_addr)) { - bind_ll_addr = true; - in6->sin6_family = AF_INET6; - in6->sin6_port = htons(RELAY_PORT); - ll_addr = *in6; - } - } - ifa_tmp = ifa_tmp->ifa_next; - } - freeifaddrs(ifa); - } - - if (bind_addr && bind_ll_addr) { - break; - } - - syslog(LOG_WARNING, "Retry #%d to bind to sockets on interface %s\n", ++retry, config->interface.c_str()); - sleep(5); - } while (retry < 6); - - if ((!bind_addr) || (bind(*local_sock, (sockaddr *)&addr, sizeof(addr)) == -1)) { - syslog(LOG_ERR, "bind: Failed to bind socket to global ipv6 address on interface %s after %d retries with %s\n", config->interface.c_str(), retry, strerror(errno)); - } - - if ((!bind_ll_addr) || (bind(*server_sock, (sockaddr *)&ll_addr, sizeof(addr)) == -1)) { - syslog(LOG_ERR, "bind: Failed to bind socket to link local ipv6 address on interface %s after %d retries with %s\n", config->interface.c_str(), retry, strerror(errno)); - } -} - - -/** - * @code relay_client(int sock, const uint8_t *msg, int32_t len, ip6_hdr *ip_hdr, const ether_header *ether_hdr, relay_config *config); - * - * @brief construct relay-forward message - * - * @param sock L3 socket for sending data to servers - * @param msg pointer to dhcpv6 message header position - * @param len size of data received - * @param ip_hdr pointer to IPv6 header - * @param ether_hdr pointer to Ethernet header - * @param config pointer to the relay interface config - * - * @return none - */ -void relay_client(int sock, const uint8_t *msg, int32_t len, const ip6_hdr *ip_hdr, const ether_header *ether_hdr, relay_config *config) { - static uint8_t buffer[4096]; - auto current_buffer_position = buffer; - dhcpv6_relay_msg new_message; - new_message.msg_type = DHCPv6_MESSAGE_TYPE_RELAY_FORW; - memcpy(&new_message.peer_address, &ip_hdr->ip6_src, sizeof(in6_addr)); - new_message.hop_count = 0; - - memcpy(&new_message.link_address, &config->link_address.sin6_addr, sizeof(in6_addr)); - memcpy(current_buffer_position, &new_message, sizeof(dhcpv6_relay_msg)); - current_buffer_position += sizeof(dhcpv6_relay_msg); - - if(config->is_option_79) { - linklayer_addr_option option79; - option79.link_layer_type = htons(1); - option79.option_code = htons(OPTION_CLIENT_LINKLAYER_ADDR); - option79.option_length = htons(2 + 6); // link_layer_type field + address - - memcpy(current_buffer_position, &option79, sizeof(linklayer_addr_option)); - current_buffer_position += sizeof(linklayer_addr_option); - - memcpy(current_buffer_position, ðer_hdr->ether_shost, sizeof(ether_hdr->ether_shost)); - current_buffer_position += sizeof(ether_hdr->ether_shost); - } - - auto dhcp_message_length = len; - relay_forward(current_buffer_position, parse_dhcpv6_hdr(msg), dhcp_message_length); - current_buffer_position += dhcp_message_length + sizeof(dhcpv6_option); - - for(auto server: config->servers_sock) { - send_udp(sock, buffer, server, current_buffer_position - buffer, config, new_message.msg_type); - } -} - -/** - * @code relay_relay_forw(int sock, const uint8_t *msg, int32_t len, const ip6_hdr *ip_hdr, relay_config *config) - * - * @brief construct a relay-forward message encapsulated relay-forward message - * - * @param sock L3 socket for sending data to servers - * @param msg pointer to dhcpv6 message header position - * @param len size of data received - * @param ip_hdr pointer to IPv6 header - * @param config pointer to the relay interface config - * - * @return none - */ -void relay_relay_forw(int sock, const uint8_t *msg, int32_t len, const ip6_hdr *ip_hdr, relay_config *config) { - static uint8_t buffer[4096]; - dhcpv6_relay_msg new_message; - auto current_buffer_position = buffer; - auto dhcp_relay_header = parse_dhcpv6_relay(msg); - - if (dhcp_relay_header->hop_count >= HOP_LIMIT) - return; - - new_message.msg_type = DHCPv6_MESSAGE_TYPE_RELAY_FORW; - memcpy(&new_message.peer_address, &ip_hdr->ip6_src, sizeof(in6_addr)); - new_message.hop_count = dhcp_relay_header->hop_count + 1; - - memset(&new_message.link_address, 0, sizeof(in6_addr)); - - memcpy(current_buffer_position, &new_message, sizeof(dhcpv6_relay_msg)); - current_buffer_position += sizeof(dhcpv6_relay_msg); - - auto dhcp_message_length = len; - relay_forward(current_buffer_position, parse_dhcpv6_hdr(msg), dhcp_message_length); - current_buffer_position += dhcp_message_length + sizeof(dhcpv6_option); - - for(auto server: config->servers_sock) { - send_udp(sock, buffer, server, current_buffer_position - buffer, config, new_message.msg_type); - } -} - -/** - * @code relay_relay_reply(int sock, const uint8_t *msg, int32_t len, relay_config *configs); - * - * @brief relay and unwrap a relay-reply message - * - * @param sock L3 socket for sending data to servers - * @param msg pointer to dhcpv6 message header position - * @param len size of data received - * @param config relay interface config - * - * @return none - */ - void relay_relay_reply(int sock, const uint8_t *msg, int32_t len, relay_config *config) { - static uint8_t buffer[4096]; - uint8_t type = 0; - struct sockaddr_in6 target_addr; - auto current_buffer_position = buffer; - auto current_position = msg; - const uint8_t *tmp = NULL; - auto dhcp_relay_header = parse_dhcpv6_relay(msg); - current_position += sizeof(struct dhcpv6_relay_msg); - - auto position = current_position + sizeof(struct dhcpv6_option); - auto dhcpv6msg = parse_dhcpv6_hdr(position); - - while ((current_position - msg) < len) { - auto option = parse_dhcpv6_opt(current_position, &tmp); - current_position = tmp; - if (current_position - msg > len || ntohs(option->option_length) > sizeof(buffer) - (current_buffer_position - buffer)) { - break; - } - switch (ntohs(option->option_code)) { - case OPTION_RELAY_MSG: - memcpy(current_buffer_position, ((uint8_t *)option) + sizeof(struct dhcpv6_option), ntohs(option->option_length)); - current_buffer_position += ntohs(option->option_length); - type = dhcpv6msg->msg_type; - break; - default: - break; - } - } - - memcpy(&target_addr.sin6_addr, &dhcp_relay_header->peer_address, sizeof(struct in6_addr)); - target_addr.sin6_family = AF_INET6; - target_addr.sin6_flowinfo = 0; - target_addr.sin6_port = htons(CLIENT_PORT); - target_addr.sin6_scope_id = if_nametoindex(config->interface.c_str()); - - send_udp(sock, buffer, target_addr, current_buffer_position - buffer, config, type); -} - - -/** - * @code callback(evutil_socket_t fd, short event, void *arg); - * - * @brief callback for libevent that is called everytime data is received at the filter socket - * - * @param fd filter socket - * @param event libevent triggered event - * @param arg callback argument provided by user - * - * @return none - */ -void callback(evutil_socket_t fd, short event, void *arg) { - struct relay_config *config = (struct relay_config *)arg; - static uint8_t message_buffer[4096]; - std::string counterVlan = counter_table; - int32_t len = recv(config->filter, message_buffer, 4096, 0); - if (len <= 0) { - syslog(LOG_WARNING, "recv: Failed to receive data at filter socket: %s\n", strerror(errno)); - return; - } - - char* ptr = (char *)message_buffer; - const uint8_t *current_position = (uint8_t *)ptr; - const uint8_t *tmp = NULL; - const uint8_t *prev = NULL; - - auto ether_header = parse_ether_frame(current_position, &tmp); - current_position = tmp; - - auto ip_header = parse_ip6_hdr(current_position, &tmp); - current_position = tmp; - - prev = current_position; - if (ip_header->ip6_ctlun.ip6_un1.ip6_un1_nxt != IPPROTO_UDP) { - const struct ip6_ext *ext_header; - do { - ext_header = (const struct ip6_ext *)current_position; - current_position += ext_header->ip6e_len; - if((current_position == prev) || (current_position >= (uint8_t *)ptr + sizeof(message_buffer))) { - return; - } - prev = current_position; - } - while (ext_header->ip6e_nxt != IPPROTO_UDP); - } - - auto udp_header = parse_udp(current_position, &tmp); - current_position = tmp; - - auto msg = parse_dhcpv6_hdr(current_position); - auto option_position = current_position + sizeof(struct dhcpv6_msg); - - switch (msg->msg_type) { - case DHCPv6_MESSAGE_TYPE_RELAY_FORW: - { - relay_relay_forw(config->local_sock, current_position, ntohs(udp_header->len) - sizeof(udphdr), ip_header, config); - break; - } - case DHCPv6_MESSAGE_TYPE_SOLICIT: - case DHCPv6_MESSAGE_TYPE_REQUEST: - case DHCPv6_MESSAGE_TYPE_CONFIRM: - case DHCPv6_MESSAGE_TYPE_RENEW: - case DHCPv6_MESSAGE_TYPE_REBIND: - case DHCPv6_MESSAGE_TYPE_RELEASE: - case DHCPv6_MESSAGE_TYPE_DECLINE: - case DHCPv6_MESSAGE_TYPE_INFORMATION_REQUEST: - { - while (option_position - message_buffer < len) { - auto option = parse_dhcpv6_opt(option_position, &tmp); - option_position = tmp; - if (ntohs(option->option_code) > DHCPv6_OPTION_LIMIT) { - counters[DHCPv6_MESSAGE_TYPE_MALFORMED]++; - update_counter(config->db, counterVlan.append(config->interface), DHCPv6_MESSAGE_TYPE_MALFORMED); - syslog(LOG_WARNING, "DHCPv6 option is invalid or contains malformed payload\n"); - return; - } - } - counters[msg->msg_type]++; - update_counter(config->db, counterVlan.append(config->interface), msg->msg_type); - relay_client(config->local_sock, current_position, ntohs(udp_header->len) - sizeof(udphdr), ip_header, ether_header, config); - break; - } - default: - { - syslog(LOG_WARNING, "DHCPv6 client message received was not relayed\n"); - break; - } - } -} - -/** - * @code void server_callback(evutil_socket_t fd, short event, void *arg); - * - * @brief callback for libevent that is called everytime data is received at the server socket - * - * @param fd filter socket - * @param event libevent triggered event - * @param arg callback argument provided by user - * - * @return none - */ -void server_callback(evutil_socket_t fd, short event, void *arg) { - struct relay_config *config = (struct relay_config *)arg; - sockaddr_in6 from; - socklen_t len = sizeof(from); - int32_t data = 0; - static uint8_t message_buffer[4096]; - - if ((data = recvfrom(config->local_sock, message_buffer, 4096, 0, (sockaddr *)&from, &len)) == -1) { - syslog(LOG_WARNING, "recv: Failed to receive data from server\n"); - } - - auto msg = parse_dhcpv6_hdr(message_buffer); - counters[msg->msg_type]++; - std::string counterVlan = counter_table; - update_counter(config->db, counterVlan.append(config->interface), msg->msg_type); - if (msg->msg_type == DHCPv6_MESSAGE_TYPE_RELAY_REPL) { - relay_relay_reply(config->server_sock, message_buffer, data, config); - } -} - -/** - * @code signal_init(); - * - * @brief initialize DHCPv6 Relay libevent signals - */ -int signal_init() { - int rv = -1; - do { - ev_sigint = evsignal_new(base, SIGINT, signal_callback, base); - if (ev_sigint == NULL) { - syslog(LOG_ERR, "Could not create SIGINT libevent signal\n"); - break; - } - - ev_sigterm = evsignal_new(base, SIGTERM, signal_callback, base); - if (ev_sigterm == NULL) { - syslog(LOG_ERR, "Could not create SIGTERM libevent signal\n"); - break; - } - rv = 0; - } while(0); - return rv; -} - -/** - * @code signal_start(); - * - * @brief start DHCPv6 Relay libevent base and add signals - */ -int signal_start() -{ - int rv = -1; - do - { - if (evsignal_add(ev_sigint, NULL) != 0) { - syslog(LOG_ERR, "Could not add SIGINT libevent signal\n"); - break; - } - - if (evsignal_add(ev_sigterm, NULL) != 0) { - syslog(LOG_ERR, "Could not add SIGTERM libevent signal\n"); - break; - } - - if (event_base_dispatch(base) != 0) { - syslog(LOG_ERR, "Could not start libevent dispatching loop\n"); - } - - rv = 0; - } while (0); - - return rv; -} - -/** - * @code signal_callback(fd, event, arg); - * - * @brief signal handler for dhcp6relay. Initiate shutdown when signal is caught - * - * @param fd libevent socket - * @param event event triggered - * @param arg pointer to libevent base - * - * @return none - */ -void signal_callback(evutil_socket_t fd, short event, void *arg) -{ - syslog(LOG_ALERT, "Received signal: '%s'\n", strsignal(fd)); - if ((fd == SIGTERM) || (fd == SIGINT)) { - dhcp6relay_stop(); - } -} - -/** - * @code dhcp6relay_stop(); - * - * @brief stop DHCPv6 Relay libevent loop upon signal - */ -void dhcp6relay_stop() -{ - event_base_loopexit(base, NULL); -} - -/** - * @code loop_relay(std::vector *vlans, swss::DBConnector *db); - * - * @brief main loop: configure sockets, create libevent base, start server listener thread - * - * @param vlans list of vlans retrieved from config_db - * @param db state_db connector - */ -void loop_relay(std::vector *vlans, swss::DBConnector *db) { - std::vector sockets; - base = event_base_new(); - if(base == NULL) { - syslog(LOG_ERR, "libevent: Failed to create base\n"); - } - - for(relay_config &vlan : *vlans) { - relay_config *config = &vlan; - int filter = 0; - int local_sock = 0; - int server_sock = 0; - int index = if_nametoindex(config->interface.c_str()); - config->db = db; - - std::string counterVlan = counter_table; - initialize_counter(config->db, counterVlan.append(config->interface)); - - filter = sock_open(index, ðer_relay_fprog); - prepare_socket(&local_sock, &server_sock, config, index); - - config->local_sock = local_sock; - config->server_sock = server_sock; - - sockets.push_back(filter); - sockets.push_back(local_sock); - sockets.push_back(server_sock); - - prepare_relay_config(config, &local_sock, filter); - - evutil_make_listen_socket_reuseable(filter); - evutil_make_socket_nonblocking(filter); - - evutil_make_listen_socket_reuseable(local_sock); - evutil_make_socket_nonblocking(local_sock); - - listen_event = event_new(base, filter, EV_READ|EV_PERSIST, callback, config); - server_listen_event = event_new(base, local_sock, EV_READ|EV_PERSIST, server_callback, config); - if (listen_event == NULL || server_listen_event == NULL) { - syslog(LOG_ERR, "libevent: Failed to create libevent\n"); - } - - event_add(listen_event, NULL); - event_add(server_listen_event, NULL); - } - - if((signal_init() == 0) && signal_start() == 0) { - shutdown(); - for(std::size_t i = 0; i -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#define PACKED __attribute__ ((packed)) - -#define RELAY_PORT 547 -#define CLIENT_PORT 546 -#define HOP_LIMIT 8 //HOP_LIMIT reduced from 32 to 8 as stated in RFC8415 -#define DHCPv6_OPTION_LIMIT 56 // DHCPv6 option code greater than 56 are currently unassigned - -#define lengthof(A) (sizeof (A) / sizeof (A)[0]) - -#define OPTION_RELAY_MSG 9 -#define OPTION_CLIENT_LINKLAYER_ADDR 79 - -/* DHCPv6 message types */ -typedef enum -{ - DHCPv6_MESSAGE_TYPE_UNKNOWN = 0, - DHCPv6_MESSAGE_TYPE_SOLICIT = 1, - DHCPv6_MESSAGE_TYPE_ADVERTISE = 2, - DHCPv6_MESSAGE_TYPE_REQUEST = 3, - DHCPv6_MESSAGE_TYPE_CONFIRM = 4, - DHCPv6_MESSAGE_TYPE_RENEW = 5, - DHCPv6_MESSAGE_TYPE_REBIND = 6, - DHCPv6_MESSAGE_TYPE_REPLY = 7, - DHCPv6_MESSAGE_TYPE_RELEASE = 8, - DHCPv6_MESSAGE_TYPE_DECLINE = 9, - DHCPv6_MESSAGE_TYPE_RECONFIGURE = 10, - DHCPv6_MESSAGE_TYPE_INFORMATION_REQUEST = 11, - DHCPv6_MESSAGE_TYPE_RELAY_FORW = 12, - DHCPv6_MESSAGE_TYPE_RELAY_REPL = 13, - DHCPv6_MESSAGE_TYPE_MALFORMED = 14, - - DHCPv6_MESSAGE_TYPE_COUNT -} dhcp_message_type_t; - -struct relay_config { - int local_sock; - int server_sock; - int filter; - sockaddr_in6 link_address; - swss::DBConnector *db; - std::string interface; - std::vector servers; - std::vector servers_sock; - bool is_option_79; -}; - - -/* DHCPv6 messages and options */ - -struct dhcpv6_msg { - uint8_t msg_type; - uint8_t xid[3]; -}; - -struct PACKED dhcpv6_relay_msg { - uint8_t msg_type; - uint8_t hop_count; - struct in6_addr link_address; - struct in6_addr peer_address; -}; - - -struct dhcpv6_option { - uint16_t option_code; - uint16_t option_length; -}; - -struct linklayer_addr_option { - uint16_t option_code; - uint16_t option_length; - uint16_t link_layer_type; -}; - -/** - * @code sock_open(int ifindex, const struct sock_fprog *fprog); - * - * @brief prepare L2 socket to attach to "udp and port 547" filter - * - * @param ifindex interface index - * @param fprog bpf filter "udp and port 547" - * - * @return socket descriptor - */ -int sock_open(int ifindex, const struct sock_fprog *fprog); - -/** - * @code prepare_socket(int *local_sock, int *server_sock, relay_config *config, int index); - * - * @brief prepare L3 socket for sending - * - * @param local_sock pointer to socket binded to global address for relaying client message to server and listening for server message - * @param server_sock pointer to socket binded to link_local address for relaying server message to client - * @param index scope id of interface - * - * @return none - */ -void prepare_socket(int *local_sock, int *server_sock, relay_config *config, int index); - -/** - * @code prepare_relay_config(relay_config *interface_config, int local_sock, int filter); - * - * @brief prepare for specified relay interface config: server and link address - * - * @param interface_config pointer to relay config to be prepared - * @param local_sock L3 socket used for relaying messages - * @param filter socket attached with filter - * - * @return none - */ -void prepare_relay_config(relay_config *interface_config, int *local_sock, int filter); - -/** - * @code relay_forward(uint8_t *buffer, const struct dhcpv6_msg *msg, uint16_t msg_length); - * - * @brief embed the DHCPv6 message received into DHCPv6 relay forward message - * - * @param buffer pointer to buffer - * @param msg pointer to parsed DHCPv6 message - * @param msg_length length of DHCPv6 message - * - * @return none - */ -void relay_forward(uint8_t *buffer, const struct dhcpv6_msg *msg, uint16_t msg_length); - -/** - * @code relay_client(int sock, const uint8_t *msg, int32_t len, ip6_hdr *ip_hdr, const ether_header *ether_hdr, relay_config *config); - * - * @brief construct relay-forward message - * - * @param sock L3 socket for sending data to servers - * @param msg pointer to dhcpv6 message header position - * @param len size of data received - * @param ip_hdr pointer to IPv6 header - * @param ether_hdr pointer to Ethernet header - * @param config pointer to the relay interface config - * - * @return none - */ -void relay_client(int sock, const uint8_t *msg, int32_t len, const ip6_hdr *ip_hdr, const ether_header *ether_hdr, relay_config *config); - -/** - * @code relay_relay_forw(int sock, const uint8_t *msg, int32_t len, const ip6_hdr *ip_hdr, relay_config *config) - * - * @brief construct a relay-forward message encapsulated relay-forward message - * - * @param sock L3 socket for sending data to servers - * @param msg pointer to dhcpv6 message header position - * @param len size of data received - * @param ip_hdr pointer to IPv6 header - * @param config pointer to the relay interface config - * - * @return none - */ -void relay_relay_forw(int sock, const uint8_t *msg, int32_t len, const ip6_hdr *ip_hdr, relay_config *config); - -/** - * @code relay_relay_reply(int sock, const uint8_t *msg, int32_t len, relay_config *configs); - * - * @brief relay and unwrap a relay-reply message - * - * @param sock L3 socket for sending data to servers - * @param msg pointer to dhcpv6 message header position - * @param len size of data received - * @param config relay interface config - * - * @return none - */ -void relay_relay_reply(int sock, const uint8_t *msg, int32_t len, relay_config *configs); - -/** - * @code loop_relay(std::vector *vlans, swss::DBConnector *db); - * - * @brief main loop: configure sockets, create libevent base, start server listener thread - * - * @param vlans list of vlans retrieved from config_db - * @param db state_db connector - */ -void loop_relay(std::vector *vlans, swss::DBConnector *db); - -/** - * @code signal_init(); - * - * @brief initialize DHCPv6 Relay libevent signals - */ -int signal_init(); - -/** - * @code signal_start(); - * - * @brief start DHCPv6 Relay libevent base and add signals - */ -int signal_start(); - -/** - * @code dhcp6relay_stop(); - * - * @brief stop DHCPv6 Relay libevent loop upon signal - */ -void dhcp6relay_stop(); - -/** - * @code signal_callback(fd, event, arg); - * - * @brief signal handler for dhcp6relay. Initiate shutdown when signal is caught - * - * @param fd libevent socket - * @param event event triggered - * @param arg pointer to libevent base - * - * @return none - */ -void signal_callback(evutil_socket_t fd, short event, void *arg); - -/** - * @code shutdown(); - * - * @brief free signals and terminate threads - */ -void shutdown(); - -/** - * @code void initialize_counter(swss::DBConnector *db, std::string counterVlan); - * - * @brief initialize the counter by each Vlan - * - * @param swss::DBConnector *db state_db connector - * @param counterVlan counter table with interface name - * - * @return none - */ -void initialize_counter(swss::DBConnector *db, std::string counterVlan); - -/** - * @code void update_counter(swss::DBConnector *db, std::string CounterVlan, uint8_t msg_type); - * - * @brief update the counter in state_db with count of each DHCPv6 message type - * - * @param swss::DBConnector *db state_db connector - * @param counterVlan counter table with interface name - * @param msg_type dhcpv6 message type to be updated in counter - * - * @return none - */ -void update_counter(swss::DBConnector *db, std::string counterVlan, uint8_t msg_type); - -/* Helper functions */ - -/** - * @code std::string toString(uint16_t count); - * - * @brief convert uint16_t to string - * - * @param count count of messages in counter - * - * @return count in string - */ -std::string toString(uint16_t count); - -/** - * @code const struct ether_header *parse_ether_frame(const uint8_t *buffer, const uint8_t **out_end); - * - * @brief parse through ethernet frame - * - * @param *buffer message buffer - * @param **out_end pointer - * - * @return ether_header end of ethernet header position - */ -const struct ether_header *parse_ether_frame(const uint8_t *buffer, const uint8_t **out_end); - -/** - * @code const struct ip6_hdr *parse_ip6_hdr(const uint8_t *buffer, const uint8_t **out_end); - * - * @brief parse through ipv6 header - * - * @param *buffer message buffer - * @param **out_end pointer - * - * @return ip6_hdr end of ipv6 header position - */ -const struct ip6_hdr *parse_ip6_hdr(const uint8_t *buffer, const uint8_t **out_end); - -/** - * @code const struct udphdr *parse_udp(const uint8_t *buffer, const uint8_t **out_end); - * - * @brief parse through udp header - * - * @param *buffer message buffer - * @param **out_end pointer - * - * @return udphdr end of udp header position - */ -const struct udphdr *parse_udp(const uint8_t *buffer, const uint8_t **out_end); - -/** - * @code const struct dhcpv6_msg *parse_dhcpv6_hdr(const uint8_t *buffer); - * - * @brief parse through dhcpv6 header - * - * @param *buffer message buffer - * @param **out_end pointer - * - * @return dhcpv6_msg end of dhcpv6 header position - */ -const struct dhcpv6_msg *parse_dhcpv6_hdr(const uint8_t *buffer); - -/** - * @code const struct dhcpv6_relay_msg *parse_dhcpv6_relay(const uint8_t *buffer); - * - * @brief parse through dhcpv6 relay message - * - * @param *buffer message buffer - * @param **out_end pointer - * - * @return dhcpv6_relay_msg start of dhcpv6 relay message or end of dhcpv6 message type position - */ -const struct dhcpv6_relay_msg *parse_dhcpv6_relay(const uint8_t *buffer); - -/** - * @code const struct dhcpv6_option *parse_dhcpv6_opt(const uint8_t *buffer, const uint8_t **out_end); - * - * @brief parse through dhcpv6 option - * - * @param *buffer message buffer - * @param **out_end pointer - * - * @return dhcpv6_option end of dhcpv6 message option - */ -const struct dhcpv6_option *parse_dhcpv6_opt(const uint8_t *buffer, const uint8_t **out_end); - -/** - * @code void send_udp(int sock, uint8_t *buffer, struct sockaddr_in6 target, uint32_t n, relay_config *config, uint8_t msg_type); - * - * @brief send udp packet - * - * @param *buffer message buffer - * @param sockaddr_in6 target target socket - * @param n length of message - * @param relay_config *config pointer to relay_config - * @param uint8_t msg_type message type of dhcpv6 option of relayed message - * - * @return dhcpv6_option end of dhcpv6 message option - */ -void send_udp(int sock, uint8_t *buffer, struct sockaddr_in6 target, uint32_t n, relay_config *config, uint8_t msg_type); - diff --git a/src/dhcp6relay/src/subdir.mk b/src/dhcp6relay/src/subdir.mk deleted file mode 100644 index 1c93d490ec63..000000000000 --- a/src/dhcp6relay/src/subdir.mk +++ /dev/null @@ -1,23 +0,0 @@ -CC := g++ - -C_SRCS += \ -../src/relay.c \ -../src/configInterface.c \ -../src/main.c - -OBJS += \ -./src/relay.o \ -./src/configInterface.o \ -./src/main.o - -C_DEPS += \ -./src/relay.d \ -./src/configInterface.d \ -./src/main.d - -src/%.o: src/%.cpp - @echo 'Building file: $<' - @echo 'Invoking: GCC C++ Compiler' - $(CC) -D__FILENAME__="$(subst src/,,$<)" $(CFLAGS) -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<" - @echo 'Finished building: $<' - @echo ' ' diff --git a/src/dhcprelay b/src/dhcprelay new file mode 160000 index 000000000000..6f94c2ededb3 --- /dev/null +++ b/src/dhcprelay @@ -0,0 +1 @@ +Subproject commit 6f94c2ededb39ef4cdab788e295a041b2aec12b4 From 094745f06f55766a2318f146648b37e03e9d6496 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Tue, 9 Aug 2022 14:21:29 -0700 Subject: [PATCH 181/259] [write_standby] update write_standby.py script (#11650) Why I did it The initial value has to be present for the state machines to work. In active-standby dual-tor scenario, or any hardware mux scenario, the value will be updtaed eventually with a delay. However, in active-active dual-tor scenario, there is no other mechanism to initialize the value and get state machines started. So this script will have to write something at start up time. For active-active dualtor, 'active' is a more preferred initial value, the state machine will switch the state to standby soon if link prober found link not in good state. How I did it Update the script to always provide initial values. How to verify it Tested on active-active dual-tor testbed. Signed-off-by: Ying Xie ying.xie@microsoft.com --- files/scripts/write_standby.py | 45 +++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/files/scripts/write_standby.py b/files/scripts/write_standby.py index 3a41fe58bbe6..86d50737b1c5 100755 --- a/files/scripts/write_standby.py +++ b/files/scripts/write_standby.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 +import argparse import time from sonic_py_common import logger as log @@ -19,11 +20,13 @@ class MuxStateWriter(object): Class used to write standby mux state to APP DB """ - def __init__(self): + def __init__(self, activeactive, activestandby): self.config_db_connector = None self.appl_db_connector = None self.state_db_connector = None self.asic_db_connector = None + self.default_active_active_state = activeactive + self.default_active_standby_state = activestandby @property def config_db(self): @@ -96,14 +99,25 @@ def is_warmrestart(self): return status and value == 'true' - def get_auto_mux_intfs(self): + def get_all_mux_intfs_modes(self): """ - Returns a list of all mux cable interfaces that are configured to auto-switch + Returns a list of all mux cable interfaces, with suggested modes + Setting mux initial modes is crucial to kick off the statemachines, + have to set the modes for all mux/gRPC ports. """ + intf_modes = {} all_intfs = self.config_db.get_table('MUX_CABLE') - auto_intfs = [intf for intf, status in all_intfs.items() - if status['state'].lower() == 'auto'] - return auto_intfs + for intf, status in all_intfs.items(): + state = status['state'].lower() + if state in ['active', 'standby']: + intf_modes[intf] = state + elif state in ['auto', 'manual']: + if ('soc_ipv4' in status or 'soc_ipv6' in status or + ('cable_type' in status and status['cable_type'] == 'active-active')): + intf_modes[intf] = self.default_active_active_state + else: + intf_modes[intf] = self.default_active_standby_state + return intf_modes def tunnel_exists(self): """ @@ -144,19 +158,26 @@ def apply_mux_config(self): logger.log_warning("Skip setting mux state due to ongoing warmrestart.") return - intfs = self.get_auto_mux_intfs() - state = 'standby' + modes = self.get_all_mux_intfs_modes() if self.wait_for_tunnel(): - logger.log_warning("Applying {} state to interfaces {}".format(state, intfs)) + logger.log_warning("Applying state to interfaces {}".format(modes)) producer_state_table = ProducerStateTable(self.appl_db, 'MUX_CABLE_TABLE') - fvs = create_fvs(state=state) - for intf in intfs: + for intf, state in modes.items(): + fvs = create_fvs(state=state) producer_state_table.set(intf, fvs) else: logger.log_error("Timed out waiting for tunnel {}, mux state will not be written".format(self.tunnel_name)) if __name__ == '__main__': - mux_writer = MuxStateWriter() + parser = argparse.ArgumentParser(description='Write initial mux state') + parser.add_argument('-a', '--active_active', + help='state: intial state for "auto" and/or "manual" config in active-active mode, default "active"', + type=str, required=False, default='active') + parser.add_argument('-s', '--active_standby', + help='state: intial state for "auto" and/or "manual" config in active-standby mode, default "standby"', + type=str, required=False, default='standby') + args = parser.parse_args() + mux_writer = MuxStateWriter(activeactive=args.active_active, activestandby=args.active_standby) mux_writer.apply_mux_config() From 5970a065d53f5fd0de05bc1ce1dd846a89aa595c Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Tue, 9 Aug 2022 23:04:32 +0000 Subject: [PATCH 182/259] Revert "Update swsssdk submodule (#10996)" This reverts commit f6ed14245643f8a5e698542fabe2bd989d731ea9. --- src/sonic-py-swsssdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-py-swsssdk b/src/sonic-py-swsssdk index ca785a2cc6a8..653bdba51750 160000 --- a/src/sonic-py-swsssdk +++ b/src/sonic-py-swsssdk @@ -1 +1 @@ -Subproject commit ca785a2cc6a8a06fdb1145d5f4ff50ec7c5d25a6 +Subproject commit 653bdba51750cac95feb3dd47904bf4de2353fec From 6391b0a8eeb31ee7f211efb7de5c94fc6b37c19f Mon Sep 17 00:00:00 2001 From: Stephen Sun <5379172+stephenxs@users.noreply.github.com> Date: Mon, 1 Aug 2022 23:25:18 +0800 Subject: [PATCH 183/259] Extend t1-lag timeout to 360 (#11478) Signed-off-by: Stephen Sun --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index f691b7aeeda0..d99dad2eb61b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -185,7 +185,7 @@ stages: - job: pool: sonictest-t1-lag displayName: "kvmtest-t1-lag" - timeoutInMinutes: 300 + timeoutInMinutes: 360 steps: - template: .azure-pipelines/run-test-template.yml From b389931262d7849ffbab79c6ca67de48585ebc15 Mon Sep 17 00:00:00 2001 From: bingwang-ms <66248323+bingwang-ms@users.noreply.github.com> Date: Tue, 9 Aug 2022 09:34:13 +0800 Subject: [PATCH 184/259] Support TC value above 7 in yang model (#11630) --- .../tests_config/qosmaps.json | 56 ++++++++++++++++++- .../yang-models/sonic-dot1p-tc-map.yang | 11 ++-- .../yang-models/sonic-dscp-tc-map.yang | 11 ++-- .../sonic-tc-priority-group-map.yang | 11 ++-- .../yang-models/sonic-tc-queue-map.yang | 11 ++-- .../yang-templates/sonic-types.yang.j2 | 9 +++ 6 files changed, 83 insertions(+), 26 deletions(-) diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/qosmaps.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/qosmaps.json index f5e5701938c3..a05d80631f1f 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/qosmaps.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/qosmaps.json @@ -13,6 +13,10 @@ { "dscp":"2", "tc":"2" + }, + { + "dscp":"8", + "tc":"8" } ] }, @@ -26,6 +30,10 @@ { "dscp":"2", "tc":"2" + }, + { + "dscp":"8", + "tc":"8" } ] } @@ -65,7 +73,7 @@ "DSCP_TO_TC_MAP": [ { "dscp": "1", - "tc": "8" + "tc": "16" }, { "dscp":"2", @@ -92,6 +100,10 @@ { "dot1p":"2", "tc":"2" + }, + { + "dot1p":"3", + "tc":"8" } ] }, @@ -105,6 +117,10 @@ { "dot1p":"2", "tc":"2" + }, + { + "dot1p":"3", + "tc":"8" } ] } @@ -144,7 +160,7 @@ "DOT1P_TO_TC_MAP": [ { "dot1p": "1", - "tc": "8" + "tc": "16" }, { "dot1p":"2", @@ -171,6 +187,10 @@ { "tc":"2", "qindex":"2" + }, + { + "tc":"8", + "qindex":"3" } ] }, @@ -184,6 +204,10 @@ { "tc":"2", "qindex":"2" + }, + { + "tc":"8", + "qindex":"3" } ] } @@ -250,6 +274,10 @@ { "tc":"2", "pg":"2" + }, + { + "tc":"8", + "pg":"3" } ] }, @@ -263,6 +291,10 @@ { "tc":"2", "pg":"2" + }, + { + "tc":"8", + "pg":"3" } ] } @@ -487,6 +519,10 @@ { "dscp":"2", "tc":"2" + }, + { + "dscp":"8", + "tc":"8" } ] } @@ -507,6 +543,10 @@ { "dot1p":"2", "tc":"2" + }, + { + "dot1p":"3", + "tc":"8" } ] } @@ -527,6 +567,10 @@ { "tc":"2", "qindex":"2" + }, + { + "tc":"8", + "qindex":"3" } ] } @@ -546,6 +590,10 @@ { "tc":"2", "pg":"2" + }, + { + "tc":"8", + "pg":"3" } ] } @@ -643,6 +691,10 @@ { "dscp":"2", "tc":"2" + }, + { + "dscp":"8", + "tc":"8" } ] } diff --git a/src/sonic-yang-models/yang-models/sonic-dot1p-tc-map.yang b/src/sonic-yang-models/yang-models/sonic-dot1p-tc-map.yang index 0a756298c97e..1636f43f6c64 100644 --- a/src/sonic-yang-models/yang-models/sonic-dot1p-tc-map.yang +++ b/src/sonic-yang-models/yang-models/sonic-dot1p-tc-map.yang @@ -6,6 +6,10 @@ module sonic-dot1p-tc-map { prefix dot1ptm; + import sonic-types { + prefix stypes; + } + organization "SONiC"; @@ -54,12 +58,7 @@ module sonic-dot1p-tc-map { } leaf tc { - type string { - pattern "[0-7]?"{ - error-message "Invalid Traffic Class"; - error-app-tag tc-invalid; - } - } + type stypes:tc_type; } } } diff --git a/src/sonic-yang-models/yang-models/sonic-dscp-tc-map.yang b/src/sonic-yang-models/yang-models/sonic-dscp-tc-map.yang index 71d9fcd4884d..fb590b85c6ff 100644 --- a/src/sonic-yang-models/yang-models/sonic-dscp-tc-map.yang +++ b/src/sonic-yang-models/yang-models/sonic-dscp-tc-map.yang @@ -6,6 +6,10 @@ module sonic-dscp-tc-map { prefix dtm; + import sonic-types { + prefix stypes; + } + organization "SONiC"; @@ -54,12 +58,7 @@ module sonic-dscp-tc-map { } leaf tc { - type string { - pattern "[0-7]?" { - error-message "Invalid Traffic Class"; - error-app-tag tc-invalid; - } - } + type stypes:tc_type; } } } diff --git a/src/sonic-yang-models/yang-models/sonic-tc-priority-group-map.yang b/src/sonic-yang-models/yang-models/sonic-tc-priority-group-map.yang index 4290b79c3ee7..1b21673f58a0 100644 --- a/src/sonic-yang-models/yang-models/sonic-tc-priority-group-map.yang +++ b/src/sonic-yang-models/yang-models/sonic-tc-priority-group-map.yang @@ -6,6 +6,10 @@ module sonic-tc-priority-group-map { prefix tpgm; + import sonic-types { + prefix stypes; + } + organization "SONiC"; @@ -45,12 +49,7 @@ module sonic-tc-priority-group-map { key "tc"; leaf tc { - type string { - pattern "[0-7]?" { - error-message "Invalid Traffic Class"; - error-app-tag tc-invalid; - } - } + type stypes:tc_type; } leaf pg { diff --git a/src/sonic-yang-models/yang-models/sonic-tc-queue-map.yang b/src/sonic-yang-models/yang-models/sonic-tc-queue-map.yang index fa22a8331294..3bcfab1f4598 100644 --- a/src/sonic-yang-models/yang-models/sonic-tc-queue-map.yang +++ b/src/sonic-yang-models/yang-models/sonic-tc-queue-map.yang @@ -6,6 +6,10 @@ module sonic-tc-queue-map { prefix tqm; + import sonic-types { + prefix stypes; + } + organization "SONiC"; @@ -45,12 +49,7 @@ module sonic-tc-queue-map { key "tc"; leaf tc { - type string { - pattern "[0-7]?" { - error-message "Invalid Traffic Class"; - error-app-tag tc-invalid; - } - } + type stypes:tc_type; } leaf qindex { diff --git a/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 b/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 index 6d8bd198d216..5f24b45dff1c 100644 --- a/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 +++ b/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 @@ -262,6 +262,15 @@ module sonic-types { } } + typedef tc_type { + type uint8 { + range "0..15" { + error-message "Invalid Traffic Class"; + error-app-tag tc-invalid; + } + } + } + {% if yang_model_type == "cvl" %} /* Required for CVL */ container operation { From e8fe21b3a434006dd58b4ac2151fc3ee28030e4e Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Wed, 10 Aug 2022 22:24:05 -0700 Subject: [PATCH 185/259] [202205][linkmgrd][utilities][swss][swss-common][sairedis][platform-daemon] advance submodule head (#11652) linkmgrd: * 17240f1 2022-08-02 | [active-active] Update unhealthy label definition (#102) (HEAD -> 202205, github/202205) [Jing Zhang] * 99a7b4b 2022-07-28 | Update the definition of healthy label (#99) [Jing Zhang] * 551144b 2022-08-08 | [Active-Standby]Remove unnecessary `handleMuxWaitTimeout` logs (#100) [Jing Zhang] utilities: * 8cbbe4f 2022-08-08 | [crm] add checking for CRM interval range (#2293) (HEAD -> 202205, github/202205) [Andriy Yurkiv] * 7dac7a7 2022-08-03 | Fix version in db_migrator for `PORT_QOS_MAP|global` (#2289) [bingwang-ms] * e14f0c9 2022-08-03 | Add override testcase to verify removal (#2288) [jingwenxie] * 61ea21d 2022-07-29 | [watermarkstat] Fix CLI script for unconfigured PG counters (#2239) [Nazarii Hnydyn] * e206e2d 2022-05-19 | [portconfig] Allow to configure interface mtu for physical ports only [Sudharsan Dhamal Gopalarathnam] * 9751479 2022-08-01 | Transfer organization from Azure to sonic-net (#2285) [Liu Shilong] * 218b175 2022-07-29 | [202205][counters] Keep counters cache in a single directory (#2280) [Stepan Blyshchak] swss: * d772a70 2022-08-09 | [muxorch] return true if the nbr IP is in the skip_neighbors list (#2407) (HEAD -> 202205) [Nikola Dancejic] * a3ac275 2022-08-08 | [EVPN]Modified tunnel creation logic when creating tunnel in VRF-VNI map creation flow (#2404) (HEAD -> 202205) [Sudharsan Dhamal Gopalarathnam] * 67c1376 2022-08-09 | [QoS] Fix issue: the WRED profile can not be set if current min > new max or current max < new min (#2379) [Stephen Sun] * 0295a35 2022-07-21 | [Buffer Orch] Support removing buffer port profile list (#2371) [Stephen Sun] * 450e9ec 2022-07-07 | Fix: missing sonic-db-cli in docker-sonic-vs image (#2357) [Qi Luo] * c1c1147 2022-06-02 | Purge package sonic-db-cli which depends on libswsscommon (#2308) [Qi Luo] swss-common: * 749cd6f 2022-07-21 | Fix PING database command not backward compatible with python version issue. (#650) (HEAD -> 202205) [Hua Liu] * 4fa7484 2022-06-27 | Fix: missing sonic-db-cli in docker-sonic-vs image (#640) [Qi Luo] * 4d0dc7a 2022-06-23 | [sonic-cli] Fix sonic-db-cli output format not backward compatible with python version issue. (#631) [Hua Liu] * c5573fe 2022-06-03 | Purge package sonic-db-cli which depends on libswsscommon (#628) [Qi Luo] * 0ade483 2022-08-02 | Add docker-mux related table names (#627) [Jing Zhang] * 675d793 2022-05-26 | Re-write sonic-db-cli with c++ for sonic startup performance issue (#607) [Hua Liu] * 1155773 2022-08-01 | Transfer organization from Azure to sonic-net (#661) (github/202205) [Liu Shilong] sairedis: * c62a453 2022-06-03 | Purge package sonic-db-cli which depends on libswsscommon (#1057) (HEAD -> 202205) [Qi Luo] * 8be9292 2022-07-20 | [syncd] Remove error message when tryTranslateVidToRid fails (#1048) [Kamil Cudnik] * eb552ee 2022-08-01 | Transfer organization from Azure to sonic-net (#1099) (github/202205) [Liu Shilong] platform-daemon: * d150229 2022-08-11 | Correct the peer forwarding state table (#281) (HEAD -> 202205) [Longxiang Lyu] * 9507e6c 2022-08-10 | [ycabled] remove some spurious logs (#282) (HEAD -> 202205) [vdahiya12] Signed-off-by: Ying Xie --- src/linkmgrd | 2 +- src/sonic-platform-daemons | 2 +- src/sonic-sairedis | 2 +- src/sonic-swss | 2 +- src/sonic-swss-common | 2 +- src/sonic-utilities | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/linkmgrd b/src/linkmgrd index e0fe1d46781b..17240f1d412f 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit e0fe1d46781b1202082db2162148dd0dfd57b299 +Subproject commit 17240f1d412f8c0355f2288944fbc423a247f77e diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index 901c6a14ff04..9507e6cd5575 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit 901c6a14ff0416a9967c530d0bdade889c09ecda +Subproject commit 9507e6cd5575fd011886a3a32d0629e0f44a514c diff --git a/src/sonic-sairedis b/src/sonic-sairedis index a4903be3a284..c62a45351da4 160000 --- a/src/sonic-sairedis +++ b/src/sonic-sairedis @@ -1 +1 @@ -Subproject commit a4903be3a2840c186f5727af94d8138304a1138f +Subproject commit c62a45351da491b7144996c19ea1cda6a494b7b4 diff --git a/src/sonic-swss b/src/sonic-swss index 275f311e9f2f..d772a70d5397 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 275f311e9f2fecce3f55bc5ae1487b634baa0975 +Subproject commit d772a70d539721644d4f240a165c7f0fa2de739d diff --git a/src/sonic-swss-common b/src/sonic-swss-common index 509b265b8732..749cd6f6badc 160000 --- a/src/sonic-swss-common +++ b/src/sonic-swss-common @@ -1 +1 @@ -Subproject commit 509b265b8732ba058b5e599c06ce887e5ba97f5e +Subproject commit 749cd6f6badc0c41251c08d413b33481d6e9ac4c diff --git a/src/sonic-utilities b/src/sonic-utilities index 7d7e15ee0e16..8cbbe4f0091b 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 7d7e15ee0e1699c095ebc802f1f95d506d37f11b +Subproject commit 8cbbe4f0091bae9e55fd750b96c38a82475925a2 From 95bf542dd558446015e7c3eda5ec4aa02636188d Mon Sep 17 00:00:00 2001 From: Senthil Kumar Guruswamy <75792349+sg893052@users.noreply.github.com> Date: Tue, 28 Jun 2022 02:24:08 +0530 Subject: [PATCH 186/259] Upgrade broadcom platform containers(syncd/ saiserver/ syncd-rpc/ syncd-dnx-rpc) to bullseye (#10864) --- platform/broadcom/docker-saiserver-brcm.mk | 4 ++-- platform/broadcom/docker-saiserver-brcm/Dockerfile.j2 | 2 +- platform/broadcom/docker-syncd-brcm-dnx-rpc.mk | 2 +- .../broadcom/docker-syncd-brcm-dnx-rpc/Dockerfile.j2 | 4 ++-- platform/broadcom/docker-syncd-brcm-dnx.mk | 10 +++++----- platform/broadcom/docker-syncd-brcm-dnx/Dockerfile.j2 | 2 +- platform/broadcom/docker-syncd-brcm-rpc.mk | 2 +- platform/broadcom/docker-syncd-brcm-rpc/Dockerfile.j2 | 4 ++-- platform/broadcom/docker-syncd-brcm.mk | 2 +- platform/broadcom/docker-syncd-brcm/Dockerfile.j2 | 2 +- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/platform/broadcom/docker-saiserver-brcm.mk b/platform/broadcom/docker-saiserver-brcm.mk index f4f9cdd42a49..2ee39c8600e8 100644 --- a/platform/broadcom/docker-saiserver-brcm.mk +++ b/platform/broadcom/docker-saiserver-brcm.mk @@ -4,9 +4,9 @@ DOCKER_SAISERVER_BRCM = docker-saiserver$(SAITHRIFT_VER)-brcm.gz $(DOCKER_SAISERVER_BRCM)_PATH = $(PLATFORM_PATH)/docker-saiserver-brcm $(DOCKER_SAISERVER_BRCM)_DEPENDS += $(SAISERVER) $(DOCKER_SAISERVER_BRCM)_FILES += $(DSSERVE) $(BCMCMD) -$(DOCKER_SAISERVER_BRCM)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BUSTER) +$(DOCKER_SAISERVER_BRCM)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BULLSEYE) SONIC_DOCKER_IMAGES += $(DOCKER_SAISERVER_BRCM) -SONIC_BUSTER_DOCKERS += $(DOCKER_SAISERVER_BRCM) +SONIC_BULLSEYE_DOCKERS += $(DOCKER_SAISERVER_BRCM) #Support two versions of saiserver $(DOCKER_SAISERVER_BRCM)_CONTAINER_NAME = saiserver$(SAITHRIFT_VER) diff --git a/platform/broadcom/docker-saiserver-brcm/Dockerfile.j2 b/platform/broadcom/docker-saiserver-brcm/Dockerfile.j2 index d77eb46b6aa3..782320a4b39b 100644 --- a/platform/broadcom/docker-saiserver-brcm/Dockerfile.j2 +++ b/platform/broadcom/docker-saiserver-brcm/Dockerfile.j2 @@ -1,5 +1,5 @@ {% from "dockers/dockerfile-macros.j2" import install_debian_packages %} -FROM docker-config-engine-buster-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} +FROM docker-config-engine-bullseye-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} ARG docker_container_name RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%syslogtag%/;" /etc/rsyslog.conf diff --git a/platform/broadcom/docker-syncd-brcm-dnx-rpc.mk b/platform/broadcom/docker-syncd-brcm-dnx-rpc.mk index 111071128c97..a7ca064b0912 100644 --- a/platform/broadcom/docker-syncd-brcm-dnx-rpc.mk +++ b/platform/broadcom/docker-syncd-brcm-dnx-rpc.mk @@ -30,4 +30,4 @@ $(DOCKER_SYNCD_BRCM_DNX_RPC)_BASE_IMAGE_FILES += bcmcmd:/usr/bin/bcmcmd $(DOCKER_SYNCD_BRCM_DNX_RPC)_BASE_IMAGE_FILES += bcmsh:/usr/bin/bcmsh $(DOCKER_SYNCD_BRCM_DNX_RPC)_MACHINE = broadcom-dnx -SONIC_BUSTER_DOCKERS += $(DOCKER_SYNCD_BRCM_DNX_RPC) +SONIC_BULLSEYE_DOCKERS += $(DOCKER_SYNCD_BRCM_DNX_RPC) diff --git a/platform/broadcom/docker-syncd-brcm-dnx-rpc/Dockerfile.j2 b/platform/broadcom/docker-syncd-brcm-dnx-rpc/Dockerfile.j2 index c476f2823211..868b0603e11e 100644 --- a/platform/broadcom/docker-syncd-brcm-dnx-rpc/Dockerfile.j2 +++ b/platform/broadcom/docker-syncd-brcm-dnx-rpc/Dockerfile.j2 @@ -15,7 +15,7 @@ RUN apt-get purge -y syncd RUN apt-get update \ && apt-get -y install \ net-tools \ - python-pip \ + python3-pip \ python-setuptools \ build-essential \ libssl-dev \ @@ -25,7 +25,7 @@ RUN apt-get update \ cmake \ libqt5core5a \ libqt5network5 \ - libboost-atomic1.71.0 + libboost-atomic1.74.0 RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } ; \ {% for deb in docker_syncd_brcm_dnx_rpc_debs.split(' ') -%} diff --git a/platform/broadcom/docker-syncd-brcm-dnx.mk b/platform/broadcom/docker-syncd-brcm-dnx.mk index 2cf89f18753a..4cba4867c9ca 100644 --- a/platform/broadcom/docker-syncd-brcm-dnx.mk +++ b/platform/broadcom/docker-syncd-brcm-dnx.mk @@ -7,9 +7,9 @@ DOCKER_SYNCD_DNX_PLATFORM_CODE = brcm-dnx $(DOCKER_SYNCD_DNX_BASE)_PATH = $(PLATFORM_PATH)/docker-syncd-$(DOCKER_SYNCD_DNX_PLATFORM_CODE) $(DOCKER_SYNCD_DNX_BASE)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) -$(DOCKER_SYNCD_DNX_BASE)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BUSTER) -$(DOCKER_SYNCD_DNX_BASE)_DBG_DEPENDS += $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_DEPENDS) -$(DOCKER_SYNCD_DNX_BASE)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_IMAGE_PACKAGES) +$(DOCKER_SYNCD_DNX_BASE)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BULLSEYE) +$(DOCKER_SYNCD_DNX_BASE)_DBG_DEPENDS += $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_DEPENDS) +$(DOCKER_SYNCD_DNX_BASE)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_IMAGE_PACKAGES) SONIC_DOCKER_IMAGES += $(DOCKER_SYNCD_DNX_BASE) ifneq ($(ENABLE_SYNCD_RPC),y) @@ -47,5 +47,5 @@ $(DOCKER_SYNCD_DNX_BASE)_BASE_IMAGE_FILES += bcmcmd:/usr/bin/bcmcmd $(DOCKER_SYNCD_DNX_BASE)_BASE_IMAGE_FILES += bcmsh:/usr/bin/bcmsh $(DOCKER_SYNCD_DNX_BASE)_BASE_IMAGE_FILES += bcm_common:/usr/bin/bcm_common -SONIC_BUSTER_DOCKERS += $(DOCKER_SYNCD_DNX_BASE) -SONIC_BUSTER_DBG_DOCKERS += $(DOCKER_SYNCD_DNX_BASE_DBG) +SONIC_BULLSEYE_DOCKERS += $(DOCKER_SYNCD_DNX_BASE) +SONIC_BULLSEYE_DBG_DOCKERS += $(DOCKER_SYNCD_DNX_BASE_DBG) diff --git a/platform/broadcom/docker-syncd-brcm-dnx/Dockerfile.j2 b/platform/broadcom/docker-syncd-brcm-dnx/Dockerfile.j2 index 95d3db54b11e..230c2628f41d 100755 --- a/platform/broadcom/docker-syncd-brcm-dnx/Dockerfile.j2 +++ b/platform/broadcom/docker-syncd-brcm-dnx/Dockerfile.j2 @@ -1,5 +1,5 @@ {% from "dockers/dockerfile-macros.j2" import install_debian_packages %} -FROM docker-config-engine-buster-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} +FROM docker-config-engine-bullseye-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} ARG docker_container_name diff --git a/platform/broadcom/docker-syncd-brcm-rpc.mk b/platform/broadcom/docker-syncd-brcm-rpc.mk index 49c664819f8b..95810f1cb477 100644 --- a/platform/broadcom/docker-syncd-brcm-rpc.mk +++ b/platform/broadcom/docker-syncd-brcm-rpc.mk @@ -29,4 +29,4 @@ $(DOCKER_SYNCD_BRCM_RPC)_BASE_IMAGE_FILES += bcmcmd:/usr/bin/bcmcmd $(DOCKER_SYNCD_BRCM_RPC)_BASE_IMAGE_FILES += bcmsh:/usr/bin/bcmsh $(DOCKER_SYNCD_BRCM_RPC)_MACHINE = broadcom -SONIC_BUSTER_DOCKERS += $(DOCKER_SYNCD_BRCM_RPC) +SONIC_BULLSEYE_DOCKERS += $(DOCKER_SYNCD_BRCM_RPC) diff --git a/platform/broadcom/docker-syncd-brcm-rpc/Dockerfile.j2 b/platform/broadcom/docker-syncd-brcm-rpc/Dockerfile.j2 index 6e5a3d6dadc5..3517b037a40a 100644 --- a/platform/broadcom/docker-syncd-brcm-rpc/Dockerfile.j2 +++ b/platform/broadcom/docker-syncd-brcm-rpc/Dockerfile.j2 @@ -15,7 +15,7 @@ RUN apt-get purge -y syncd RUN apt-get update \ && apt-get -y install \ net-tools \ - python-pip \ + python3-pip \ python-setuptools \ build-essential \ libssl-dev \ @@ -25,7 +25,7 @@ RUN apt-get update \ cmake \ libqt5core5a \ libqt5network5 \ - libboost-atomic1.71.0 + libboost-atomic1.74.0 RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } ; \ {% for deb in docker_syncd_brcm_rpc_debs.split(' ') -%} diff --git a/platform/broadcom/docker-syncd-brcm.mk b/platform/broadcom/docker-syncd-brcm.mk index cb4ee813d914..315c27a416d8 100644 --- a/platform/broadcom/docker-syncd-brcm.mk +++ b/platform/broadcom/docker-syncd-brcm.mk @@ -1,7 +1,7 @@ # docker image for brcm syncd DOCKER_SYNCD_PLATFORM_CODE = brcm -include $(PLATFORM_PATH)/../template/docker-syncd-base.mk +include $(PLATFORM_PATH)/../template/docker-syncd-bullseye.mk $(DOCKER_SYNCD_BASE)_DEPENDS += $(SYNCD) $(DOCKER_SYNCD_BASE)_DEPENDS += $(BRCM_XGS_SAI) diff --git a/platform/broadcom/docker-syncd-brcm/Dockerfile.j2 b/platform/broadcom/docker-syncd-brcm/Dockerfile.j2 index e8f9c8c86a97..6900e7c933b5 100755 --- a/platform/broadcom/docker-syncd-brcm/Dockerfile.j2 +++ b/platform/broadcom/docker-syncd-brcm/Dockerfile.j2 @@ -1,5 +1,5 @@ {% from "dockers/dockerfile-macros.j2" import install_debian_packages %} -FROM docker-config-engine-buster-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} +FROM docker-config-engine-bullseye-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} ARG docker_container_name From b6d16f41f1fd3993b3e164eedde0a7500171500b Mon Sep 17 00:00:00 2001 From: byu343 Date: Wed, 6 Jul 2022 14:40:13 -0700 Subject: [PATCH 187/259] [Arista][phy-credo]: update deb for speed change and bug fix (#10990) Add support for reacting to speed change between 40G and 100G in CONFIG_DB Fix a bug on optical bit setting. Avoid the random error in shutdown for issue: aristanetworks/sonic#40 Avoid to run on SmartsvilleBkMs, which depends on a different driver (credo-sai). How I did it How to verify it Verified on the duts that the commands printed in the log are matching the expectation and the interfaces are up. --- rules/phy-credo.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/phy-credo.mk b/rules/phy-credo.mk index 0218fdf6f691..197888e518bf 100644 --- a/rules/phy-credo.mk +++ b/rules/phy-credo.mk @@ -1,3 +1,3 @@ PHY_CREDO = phy-credo_1.0_amd64.deb -$(PHY_CREDO)_URL = "https://github.com/aristanetworks/sonic-firmware/raw/d227160f981f27df020ab50b9e0f16b1bd9166ea/phy/phy-credo_1.0_amd64.deb" +$(PHY_CREDO)_URL = "https://github.com/aristanetworks/sonic-firmware/raw/e89a1696954fd381e1e95edf208cffc97caf15d4/phy/phy-credo_1.0_amd64.deb" SONIC_ONLINE_DEBS += $(PHY_CREDO) From 3b749d63204c27bb1d8365d5d5bc437c86e15e51 Mon Sep 17 00:00:00 2001 From: Kebo Liu Date: Thu, 11 Aug 2022 13:59:26 +0800 Subject: [PATCH 188/259] [Mellanox] Update hw-mgmt package to V.7.0020.3006 (#11538) - Why I did it Update HW-MGMT to V.7.0020.3006 1. Support new system SN2201 2. Add COMEX BRDWL respin support - How I did it Update the version number of the makefile Advance the hw-mgmt submodule pointer - How to verify it Run full regression on Nvidia platforms Signed-off-by: Kebo Liu --- platform/mellanox/hw-management.mk | 2 +- platform/mellanox/hw-management/hw-mgmt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/mellanox/hw-management.mk b/platform/mellanox/hw-management.mk index fac7bddc2c24..f7142d5812d9 100644 --- a/platform/mellanox/hw-management.mk +++ b/platform/mellanox/hw-management.mk @@ -16,7 +16,7 @@ # # Mellanox HW Management -MLNX_HW_MANAGEMENT_VERSION = 7.0020.2004 +MLNX_HW_MANAGEMENT_VERSION = 7.0020.3006 export MLNX_HW_MANAGEMENT_VERSION diff --git a/platform/mellanox/hw-management/hw-mgmt b/platform/mellanox/hw-management/hw-mgmt index ec2e9173e9f2..137109ed15be 160000 --- a/platform/mellanox/hw-management/hw-mgmt +++ b/platform/mellanox/hw-management/hw-mgmt @@ -1 +1 @@ -Subproject commit ec2e9173e9f24cbc02eb87d81889d408528e090b +Subproject commit 137109ed15be147a99b59ceb9dfa1799688dfb71 From adccd64bb4dc2c4d7a5172aef94f7ba377df3538 Mon Sep 17 00:00:00 2001 From: Vivek Date: Thu, 11 Aug 2022 00:37:33 -0700 Subject: [PATCH 189/259] [Mellanox] [SKU] Mellanox-SN4700-C128 SKU added (#11574) - Why I did it New SKU for MSN-4700 Platform i.e. Mellanox-SN4700-C128 Requirements: * Breakout: Port 1-32: 4x100G * Downlinks: 120 (1-30) * Uplinks: 8 (31-32) * Shared Headroom: Enabled * Over Subscribe Ratio: 1:8 * Default Topology: T2 * Default Cable Length for T2: 1500m * QoS params: The default ones defined in qos_config.j2 will be applied * Small Packet Percentage: Used 50% for traditional buffer model Note: For dynamic model, the value defined in LOSSLESS_TRAFFIC_PATTERN|AZURE|small_packet_percentage is used Additional Details: Switch Type has to be programmed as SpineRouter through config_db.json in DEVICE_METADATA|localhost|type field for the buffer values & cable lengths defined in the buffers_defaults_t2.j2 to apply on the device Cable Lengths Used for generating buffer_defaults_{t0,t1,t2}.j2 values Signed-off-by: Vivek Reddy Karri --- .../Mellanox-SN4700-C128/buffers.json.j2 | 15 + .../buffers_defaults_objects.j2 | 1 + .../buffers_defaults_t0.j2 | 39 ++ .../buffers_defaults_t1.j2 | 39 ++ .../buffers_defaults_t2.j2 | 44 ++ .../buffers_dynamic.json.j2 | 16 + .../Mellanox-SN4700-C128/hwsku.json | 388 ++++++++++++++++++ .../pg_profile_lookup.ini | 41 ++ .../Mellanox-SN4700-C128/port_config.ini | 129 ++++++ .../Mellanox-SN4700-C128/qos.json.j2 | 1 + .../Mellanox-SN4700-C128/sai.profile | 3 + .../sai_4700_128x100g.xml | 277 +++++++++++++ 12 files changed, 993 insertions(+) create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers.json.j2 create mode 120000 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_defaults_objects.j2 create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_defaults_t0.j2 create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_defaults_t1.j2 create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_defaults_t2.j2 create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_dynamic.json.j2 create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/hwsku.json create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/pg_profile_lookup.ini create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/port_config.ini create mode 120000 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/qos.json.j2 create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/sai.profile create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/sai_4700_128x100g.xml diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers.json.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers.json.j2 new file mode 100644 index 000000000000..2905747f5b04 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers.json.j2 @@ -0,0 +1,15 @@ +{# + Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{%- set default_topo = 't2' %} +{%- include 'buffers_config.j2' %} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_defaults_objects.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_defaults_objects.j2 new file mode 120000 index 000000000000..c01aebb7ae12 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_defaults_objects.j2 @@ -0,0 +1 @@ +../../x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/buffers_defaults_objects.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_defaults_t0.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_defaults_t0.j2 new file mode 100644 index 000000000000..f22c56702af5 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_defaults_t0.j2 @@ -0,0 +1,39 @@ +{# + Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{% set default_cable = '5m' %} +{% set ingress_lossless_pool_size = '44910592' %} +{% set ingress_lossless_pool_xoff = '1751040' %} +{% set egress_lossless_pool_size = '60817392' %} +{% set egress_lossy_pool_size = '44910592' %} + +{% import 'buffers_defaults_objects.j2' as defs with context %} + +{%- macro generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) %} +{{ defs.generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_profile_lists_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_profile_lists(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_queue_buffers(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_pg_profiles(port_names_active, port_names_inactive) }} +{%- endmacro %} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_defaults_t1.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_defaults_t1.j2 new file mode 100644 index 000000000000..b87050280529 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_defaults_t1.j2 @@ -0,0 +1,39 @@ +{# + Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{% set default_cable = '5m' %} +{% set ingress_lossless_pool_size = '44587008' %} +{% set ingress_lossless_pool_xoff = '2074624' %} +{% set egress_lossless_pool_size = '60817392' %} +{% set egress_lossy_pool_size = '44587008' %} + +{% import 'buffers_defaults_objects.j2' as defs with context %} + +{%- macro generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) %} +{{ defs.generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_profile_lists_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_profile_lists(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_queue_buffers(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_pg_profiles(port_names_active, port_names_inactive) }} +{%- endmacro %} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_defaults_t2.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_defaults_t2.j2 new file mode 100644 index 000000000000..b0df4defd449 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_defaults_t2.j2 @@ -0,0 +1,44 @@ +{# + Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{% set default_cable = '1500m' %} +{%-set ports2cable = { + 'spinerouter_leafrouter' : '1500m', + 'spinerouter_spinerouter' : '1500m' + } +-%} +{% set ingress_lossless_pool_size = '35094528' %} +{% set ingress_lossless_pool_xoff = '11567104' %} +{% set egress_lossless_pool_size = '60817392' %} +{% set egress_lossy_pool_size = '35094528' %} + +{% import 'buffers_defaults_objects.j2' as defs with context %} + +{%- macro generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) %} +{{ defs.generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_profile_lists_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_profile_lists(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_queue_buffers(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_pg_profiles(port_names_active, port_names_inactive) }} +{%- endmacro %} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_dynamic.json.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_dynamic.json.j2 new file mode 100644 index 000000000000..4ec20f1d9e84 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/buffers_dynamic.json.j2 @@ -0,0 +1,16 @@ +{# + Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{%- set default_topo = 't2' %} +{%- set dynamic_mode = 'true' %} +{%- include 'buffers_config.j2' %} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/hwsku.json b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/hwsku.json new file mode 100644 index 000000000000..867637000a1f --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/hwsku.json @@ -0,0 +1,388 @@ +{ + "interfaces": { + "Ethernet0": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet2": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet4": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet6": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet8": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet10": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet12": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet14": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet16": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet18": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet20": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet22": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet24": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet26": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet28": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet30": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet32": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet34": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet36": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet38": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet40": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet42": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet44": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet46": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet48": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet50": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet52": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet54": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet56": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet58": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet60": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet62": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet64": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet66": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet68": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet70": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet72": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet74": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet76": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet78": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet80": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet82": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet84": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet86": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet88": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet90": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet92": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet94": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet96": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet98": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet100": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet102": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet104": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet106": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet108": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet110": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet112": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet114": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet116": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet118": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet120": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet122": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet124": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet126": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet128": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet130": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet132": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet134": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet136": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet138": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet140": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet142": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet144": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet146": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet148": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet150": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet152": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet154": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet156": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet158": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet160": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet162": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet164": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet166": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet168": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet170": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet172": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet174": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet176": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet178": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet180": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet182": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet184": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet186": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet188": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet190": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet192": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet194": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet196": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet198": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet200": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet202": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet204": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet206": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet208": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet210": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet212": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet214": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet216": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet218": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet220": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet222": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet224": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet226": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet228": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet230": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet232": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet234": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet236": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet238": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet240": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet242": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet244": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet246": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet248": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet250": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet252": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + }, + "Ethernet254": { + "default_brkout_mode": "4x100G[50G,25G,10G,1G]" + } + } +} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/pg_profile_lookup.ini b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/pg_profile_lookup.ini new file mode 100644 index 000000000000..7b78fb98ae37 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/pg_profile_lookup.ini @@ -0,0 +1,41 @@ +## +## Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. +## Apache-2.0 +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +## +# PG lossless profiles. +# speed cable size xon xoff threshold + 10000 5m 19456 19456 24576 0 + 25000 5m 19456 19456 26624 0 + 40000 5m 19456 19456 30720 0 + 50000 5m 19456 19456 33792 0 + 100000 5m 19456 19456 59392 0 + 200000 5m 19456 19456 66560 0 + 10000 40m 19456 19456 25600 0 + 25000 40m 19456 19456 28672 0 + 40000 40m 19456 19456 33792 0 + 50000 40m 19456 19456 36864 0 + 100000 40m 19456 19456 66560 0 + 200000 40m 19456 19456 80896 0 + 10000 300m 19456 19456 30720 0 + 25000 300m 19456 19456 41984 0 + 40000 300m 19456 19456 54272 0 + 50000 300m 19456 19456 63488 0 + 100000 300m 19456 19456 120832 0 + 200000 300m 19456 19456 188416 0 + 10000 1500m 19456 19456 55296 0 + 25000 1500m 19456 19456 103424 0 + 40000 1500m 19456 19456 153600 0 + 50000 1500m 19456 19456 187392 0 + 100000 1500m 19456 19456 366592 0 diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/port_config.ini b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/port_config.ini new file mode 100644 index 000000000000..d64b66b0b691 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/port_config.ini @@ -0,0 +1,129 @@ +# name lanes alias index speed +Ethernet0 0,1 etp1a 1 100000 +Ethernet2 2,3 etp1b 1 100000 +Ethernet4 4,5 etp1c 1 100000 +Ethernet6 6,7 etp1d 1 100000 +Ethernet8 8,9 etp2a 2 100000 +Ethernet10 10,11 etp2b 2 100000 +Ethernet12 12,13 etp2c 2 100000 +Ethernet14 14,15 etp2d 2 100000 +Ethernet16 16,17 etp3a 3 100000 +Ethernet18 18,19 etp3b 3 100000 +Ethernet20 20,21 etp3c 3 100000 +Ethernet22 22,23 etp3d 3 100000 +Ethernet24 24,25 etp4a 4 100000 +Ethernet26 26,27 etp4b 4 100000 +Ethernet28 28,29 etp4c 4 100000 +Ethernet30 30,31 etp4d 4 100000 +Ethernet32 32,33 etp5a 5 100000 +Ethernet34 34,35 etp5b 5 100000 +Ethernet36 36,37 etp5c 5 100000 +Ethernet38 38,39 etp5d 5 100000 +Ethernet40 40,41 etp6a 6 100000 +Ethernet42 42,43 etp6b 6 100000 +Ethernet44 44,45 etp6c 6 100000 +Ethernet46 46,47 etp6d 6 100000 +Ethernet48 48,49 etp7a 7 100000 +Ethernet50 50,51 etp7b 7 100000 +Ethernet52 52,53 etp7c 7 100000 +Ethernet54 54,55 etp7d 7 100000 +Ethernet56 56,57 etp8a 8 100000 +Ethernet58 58,59 etp8b 8 100000 +Ethernet60 60,61 etp8c 8 100000 +Ethernet62 62,63 etp8d 8 100000 +Ethernet64 64,65 etp9a 9 100000 +Ethernet66 66,67 etp9b 9 100000 +Ethernet68 68,69 etp9c 9 100000 +Ethernet70 70,71 etp9d 9 100000 +Ethernet72 72,73 etp10a 10 100000 +Ethernet74 74,75 etp10b 10 100000 +Ethernet76 76,77 etp10c 10 100000 +Ethernet78 78,79 etp10d 10 100000 +Ethernet80 80,81 etp11a 11 100000 +Ethernet82 82,83 etp11b 11 100000 +Ethernet84 84,85 etp11c 11 100000 +Ethernet86 86,87 etp11d 11 100000 +Ethernet88 88,89 etp12a 12 100000 +Ethernet90 90,91 etp12b 12 100000 +Ethernet92 92,93 etp12c 12 100000 +Ethernet94 94,95 etp12d 12 100000 +Ethernet96 96,97 etp13a 13 100000 +Ethernet98 98,99 etp13b 13 100000 +Ethernet100 100,101 etp13c 13 100000 +Ethernet102 102,103 etp13d 13 100000 +Ethernet104 104,105 etp14a 14 100000 +Ethernet106 106,107 etp14b 14 100000 +Ethernet108 108,109 etp14c 14 100000 +Ethernet110 110,111 etp14d 14 100000 +Ethernet112 112,113 etp15a 15 100000 +Ethernet114 114,115 etp15b 15 100000 +Ethernet116 116,117 etp15c 15 100000 +Ethernet118 118,119 etp15d 15 100000 +Ethernet120 120,121 etp16a 16 100000 +Ethernet122 122,123 etp16b 16 100000 +Ethernet124 124,125 etp16c 16 100000 +Ethernet126 126,127 etp16d 16 100000 +Ethernet128 128,129 etp17a 17 100000 +Ethernet130 130,131 etp17b 17 100000 +Ethernet132 132,133 etp17c 17 100000 +Ethernet134 134,135 etp17d 17 100000 +Ethernet136 136,137 etp18a 18 100000 +Ethernet138 138,139 etp18b 18 100000 +Ethernet140 140,141 etp18c 18 100000 +Ethernet142 142,143 etp18d 18 100000 +Ethernet144 144,145 etp19a 19 100000 +Ethernet146 146,147 etp19b 19 100000 +Ethernet148 148,149 etp19c 19 100000 +Ethernet150 150,151 etp19d 19 100000 +Ethernet152 152,153 etp20a 20 100000 +Ethernet154 154,155 etp20b 20 100000 +Ethernet156 156,157 etp20c 20 100000 +Ethernet158 158,159 etp20d 20 100000 +Ethernet160 160,161 etp21a 21 100000 +Ethernet162 162,163 etp21b 21 100000 +Ethernet164 164,165 etp21c 21 100000 +Ethernet166 166,167 etp21d 21 100000 +Ethernet168 168,169 etp22a 22 100000 +Ethernet170 170,171 etp22b 22 100000 +Ethernet172 172,173 etp22c 22 100000 +Ethernet174 174,175 etp22d 22 100000 +Ethernet176 176,177 etp23a 23 100000 +Ethernet178 178,179 etp23b 23 100000 +Ethernet180 180,181 etp23c 23 100000 +Ethernet182 182,183 etp23d 23 100000 +Ethernet184 184,185 etp24a 24 100000 +Ethernet186 186,187 etp24b 24 100000 +Ethernet188 188,189 etp24c 24 100000 +Ethernet190 190,191 etp24d 24 100000 +Ethernet192 192,193 etp25a 25 100000 +Ethernet194 194,195 etp25b 25 100000 +Ethernet196 196,197 etp25c 25 100000 +Ethernet198 198,199 etp25d 25 100000 +Ethernet200 200,201 etp26a 26 100000 +Ethernet202 202,203 etp26b 26 100000 +Ethernet204 204,205 etp26c 26 100000 +Ethernet206 206,207 etp26d 26 100000 +Ethernet208 208,209 etp27a 27 100000 +Ethernet210 210,211 etp27b 27 100000 +Ethernet212 212,213 etp27c 27 100000 +Ethernet214 214,215 etp27d 27 100000 +Ethernet216 216,217 etp28a 28 100000 +Ethernet218 218,219 etp28b 28 100000 +Ethernet220 220,221 etp28c 28 100000 +Ethernet222 222,223 etp28d 28 100000 +Ethernet224 224,225 etp29a 29 100000 +Ethernet226 226,227 etp29b 29 100000 +Ethernet228 228,229 etp29c 29 100000 +Ethernet230 230,231 etp29d 29 100000 +Ethernet232 232,233 etp30a 30 100000 +Ethernet234 234,235 etp30b 30 100000 +Ethernet236 236,237 etp30c 30 100000 +Ethernet238 238,239 etp30d 30 100000 +Ethernet240 240,241 etp31a 31 100000 +Ethernet242 242,243 etp31b 31 100000 +Ethernet244 244,245 etp31c 31 100000 +Ethernet246 246,247 etp31d 31 100000 +Ethernet248 248,249 etp32a 32 100000 +Ethernet250 250,251 etp32b 32 100000 +Ethernet252 252,253 etp32c 32 100000 +Ethernet254 254,255 etp32d 32 100000 diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/qos.json.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/qos.json.j2 new file mode 120000 index 000000000000..eccf286dc879 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/qos.json.j2 @@ -0,0 +1 @@ +../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/qos.json.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/sai.profile b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/sai.profile new file mode 100644 index 000000000000..d20b5e46b843 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/sai.profile @@ -0,0 +1,3 @@ +SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_4700_128x100g.xml +SAI_DUMP_STORE_PATH=/var/log/mellanox/sdk-dumps +SAI_DUMP_STORE_AMOUNT=10 diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/sai_4700_128x100g.xml b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/sai_4700_128x100g.xml new file mode 100644 index 000000000000..f5d49f8b86ab --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-C128/sai_4700_128x100g.xml @@ -0,0 +1,277 @@ + + + + + 00:02:03:04:05:00 + + + 1 + + + 32 + + + + + 1 + 8 + 17 + 3 + 1536 + 4 + + + 5 + 8 + 16 + 3 + 1536 + 4 + + + 9 + 8 + 19 + 3 + 1536 + 4 + + + 13 + 8 + 18 + 3 + 1536 + 4 + + + 17 + 8 + 21 + 3 + 1536 + 4 + + + 21 + 8 + 20 + 3 + 1536 + 4 + + + 25 + 8 + 23 + 3 + 1536 + 4 + + + 29 + 8 + 22 + 3 + 1536 + 4 + + + 33 + 8 + 29 + 3 + 1536 + 4 + + + 37 + 8 + 28 + 3 + 1536 + 4 + + + 41 + 8 + 31 + 3 + 1536 + 4 + + + 45 + 8 + 30 + 3 + 1536 + 4 + + + 49 + 8 + 25 + 3 + 1536 + 4 + + + 53 + 8 + 24 + 3 + 1536 + 4 + + + 57 + 8 + 27 + 3 + 1536 + 4 + + + 61 + 8 + 26 + 3 + 1536 + 4 + + + 65 + 8 + 14 + 3 + 1536 + 4 + + + 69 + 8 + 15 + 3 + 1536 + 4 + + + 73 + 8 + 12 + 3 + 1536 + 4 + + + 77 + 8 + 13 + 3 + 1536 + 4 + + + 81 + 8 + 10 + 3 + 1536 + 4 + + + 85 + 8 + 11 + 3 + 1536 + 4 + + + 89 + 8 + 8 + 3 + 1536 + 4 + + + 93 + 8 + 9 + 3 + 1536 + 4 + + + 97 + 8 + 2 + 3 + 1536 + 4 + + + 101 + 8 + 3 + 3 + 1536 + 4 + + + 105 + 8 + 0 + + + 3 + + + 1536 + 4 + + + 109 + 8 + 1 + 3 + 1536 + 4 + + + 113 + 8 + 6 + 3 + 1536 + 4 + + + 117 + 8 + 7 + 3 + 1536 + 4 + + + 121 + 8 + 4 + 3 + 1536 + 4 + + + 125 + 8 + 5 + 3 + 1536 + 4 + + + + From 0cec818e74a43bffdc2b4583260b2f122378666d Mon Sep 17 00:00:00 2001 From: StormLiangMS <89824293+StormLiangMS@users.noreply.github.com> Date: Thu, 11 Aug 2022 13:22:14 +0800 Subject: [PATCH 190/259] [bgp-cfgd] BGP allow list enhancement (#11586) Why I did it 2 things are missing in current allow-prefix list implementation. In some usecase, need to tell the BGP neighbor and have different allow-prefix list for different neighbors, which is not supported. for the prefix list, can't support flexible le and ge. How I did it To enhance the bgp allow-prefix list feature to have: To include the neighbor type info for the allow-prefix list. To support flexible le and ge length for allow-prefix list. How to verify it 4 new unit test cases are added in this PR to cover changes. --- .../bgpcfgd/managers_allow_list.py | 112 ++++++++++----- src/sonic-bgpcfgd/tests/test_allow_list.py | 129 +++++++++++++++++- 2 files changed, 203 insertions(+), 38 deletions(-) diff --git a/src/sonic-bgpcfgd/bgpcfgd/managers_allow_list.py b/src/sonic-bgpcfgd/bgpcfgd/managers_allow_list.py index 209d12fd2f97..4bdd488fc2eb 100644 --- a/src/sonic-bgpcfgd/bgpcfgd/managers_allow_list.py +++ b/src/sonic-bgpcfgd/bgpcfgd/managers_allow_list.py @@ -14,8 +14,11 @@ class BGPAllowListMgr(Manager): ALLOW_ADDRESS_PL_NAME_TMPL = "ALLOW_ADDRESS_%d_%s" # template for a name for the ALLOW_ADDRESS prefix-list ??? EMPTY_COMMUNITY = "empty" PL_NAME_TMPL = "PL_ALLOW_LIST_DEPLOYMENT_ID_%d_COMMUNITY_%s_V%s" + PL_NAME_TMPL_WITH_NEIGH = "PL_ALLOW_LIST_DEPLOYMENT_ID_%d_NEIGHBOR_%s_COMMUNITY_%s_V%s" COMMUNITY_NAME_TMPL = "COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_%d_COMMUNITY_%s" + COMMUNITY_NAME_TMPL_WITH_NEIGH = "COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_%d_NEIGHBOR_%s_COMMUNITY_%s" RM_NAME_TMPL = "ALLOW_LIST_DEPLOYMENT_ID_%d_V%s" + RM_NAME_TMPL_WITH_NEIGH = "ALLOW_LIST_DEPLOYMENT_ID_%d_NEIGHBOR_%s_V%s" ROUTE_MAP_ENTRY_WITH_COMMUNITY_START = 10 ROUTE_MAP_ENTRY_WITH_COMMUNITY_END = 29990 ROUTE_MAP_ENTRY_WITHOUT_COMMUNITY_START = 30000 @@ -38,7 +41,7 @@ def __init__(self, common_objs, db, table): db, table, ) - self.key_re = re.compile(r"^DEPLOYMENT_ID\|\d+\|\S+$|^DEPLOYMENT_ID\|\d+$") + self.key_re = re.compile(r"^DEPLOYMENT_ID\|\d+\|\S+$|^DEPLOYMENT_ID\|\d+$|^DEPLOYMENT_ID\|\d+\|\S+\|NEIGHBOR_TYPE\|\S+$|^DEPLOYMENT_ID\|\d+\|NEIGHBOR_TYPE\|\S+") self.enabled = self.__get_enabled() self.prefix_match_tag = self.__get_routemap_tag() self.__load_constant_lists() @@ -55,8 +58,14 @@ def set_handler(self, key, data): return True if not self.__set_handler_validate(key, data): return True - key = key.replace("DEPLOYMENT_ID|", "") - deployment_id, community_value = key.split('|', 1) if '|' in key else (key, BGPAllowListMgr.EMPTY_COMMUNITY) + if 'NEIGHBOR_TYPE' in key: + keys = key.split('|NEIGHBOR_TYPE|', 1) + deployment_id = keys[0].replace("DEPLOYMENT_ID|", "") + neighbor_type, community_value = keys[1].split('|', 1) if '|' in keys[1] else (keys[1], BGPAllowListMgr.EMPTY_COMMUNITY) + else: + key = key.replace("DEPLOYMENT_ID|", "") + deployment_id, community_value = key.split('|', 1) if '|' in key else (key, BGPAllowListMgr.EMPTY_COMMUNITY) + neighbor_type = '' deployment_id = int(deployment_id) prefixes_v4 = [] prefixes_v6 = [] @@ -65,7 +74,7 @@ def set_handler(self, key, data): if "prefixes_v6" in data: prefixes_v6 = str(data['prefixes_v6']).split(",") default_action_community = self.__get_default_action_community(data) - self.__update_policy(deployment_id, community_value, prefixes_v4, prefixes_v6, default_action_community) + self.__update_policy(deployment_id, community_value, prefixes_v4, prefixes_v6, default_action_community, neighbor_type) return True def __set_handler_validate(self, key, data): @@ -85,13 +94,13 @@ def __set_handler_validate(self, key, data): prefixes_v6 = [] if "prefixes_v4" in data: prefixes_v4 = str(data["prefixes_v4"]).split(",") - if not all(TemplateFabric.is_ipv4(prefix) for prefix in prefixes_v4): + if not all(TemplateFabric.is_ipv4(re.split('ge|le', prefix)[0]) for prefix in prefixes_v4): arguments = "prefixes_v4", str(data["prefixes_v4"]) log_err("BGPAllowListMgr::Received BGP ALLOWED 'SET' message with invalid input[%s]:'%s'" % arguments) return False if "prefixes_v6" in data: prefixes_v6 = str(data["prefixes_v6"]).split(",") - if not all(TemplateFabric.is_ipv6(prefix) for prefix in prefixes_v6): + if not all(TemplateFabric.is_ipv6(re.split('ge|le', prefix)[0]) for prefix in prefixes_v6): arguments = "prefixes_v6", str(data["prefixes_v6"]) log_err("BGPAllowListMgr::Received BGP ALLOWED 'SET' message with invalid input[%s]:'%s'" % arguments) return False @@ -113,10 +122,18 @@ def del_handler(self, key): return if not self.__del_handler_validate(key): return - key = key.replace('DEPLOYMENT_ID|', '') - deployment_id, community = key.split('|', 1) if '|' in key else (key, BGPAllowListMgr.EMPTY_COMMUNITY) + + if 'NEIGHBOR_TYPE' in key: + keys = key.split('|NEIGHBOR_TYPE|', 1) + deployment_id = keys[0].replace("DEPLOYMENT_ID|", "") + neighbor_type, community_value = keys[1].split('|', 1) if '|' in keys[1] else (keys[1], BGPAllowListMgr.EMPTY_COMMUNITY) + else: + key = key.replace("DEPLOYMENT_ID|", "") + deployment_id, community_value = key.split('|', 1) if '|' in key else (key, BGPAllowListMgr.EMPTY_COMMUNITY) + neighbor_type = '' + deployment_id = int(deployment_id) - self.__remove_policy(deployment_id, community) + self.__remove_policy(deployment_id, community_value, neighbor_type) def __del_handler_validate(self, key): """ @@ -129,7 +146,7 @@ def __del_handler_validate(self, key): return False return True - def __update_policy(self, deployment_id, community_value, prefixes_v4, prefixes_v6, default_action): + def __update_policy(self, deployment_id, community_value, prefixes_v4, prefixes_v6, default_action, neighbor_type): """ Update "allow list" policy with parameters :param deployment_id: deployment id which policy will be changed @@ -139,12 +156,13 @@ def __update_policy(self, deployment_id, community_value, prefixes_v4, prefixes_ :param default_action: the default action for the policy. should be either 'permit' or 'deny' """ # update all related entries with the information - info = deployment_id, community_value, str(prefixes_v4), str(prefixes_v6) + info = deployment_id, community_value, str(prefixes_v4), str(prefixes_v6), neighbor_type msg = "BGPAllowListMgr::Updating 'Allow list' policy." msg += " deployment_id '%s'. community: '%s'" msg += " prefix_v4 '%s'. prefix_v6: '%s'" + msg += " neighbor_type %s" log_info(msg % info) - names = self.__generate_names(deployment_id, community_value) + names = self.__generate_names(deployment_id, community_value, neighbor_type) self.cfg_mgr.update() cmds = [] cmds += self.__update_prefix_list(self.V4, names['pl_v4'], prefixes_v4) @@ -156,14 +174,14 @@ def __update_policy(self, deployment_id, community_value, prefixes_v4, prefixes_ cmds += self.__update_default_route_map_entry(names['rm_v6'], default_action) if cmds: self.cfg_mgr.push_list(cmds) - peer_groups = self.__find_peer_group_by_deployment_id(deployment_id) + peer_groups = self.__find_peer_group(deployment_id, neighbor_type) self.cfg_mgr.restart_peer_groups(peer_groups) log_debug("BGPAllowListMgr::__update_policy. The peers configuration scheduled for updates") else: log_debug("BGPAllowListMgr::__update_policy. Nothing to update") log_info("BGPAllowListMgr::Done") - def __remove_policy(self, deployment_id, community_value): + def __remove_policy(self, deployment_id, community_value, neighbor_type): """ Remove "allow list" policy for given deployment_id and community_value :param deployment_id: deployment id which policy will be removed @@ -177,7 +195,7 @@ def __remove_policy(self, deployment_id, community_value): log_info(msg % info) default_action = self.__get_default_action_community() - names = self.__generate_names(deployment_id, community_value) + names = self.__generate_names(deployment_id, community_value, neighbor_type) self.cfg_mgr.update() cmds = [] cmds += self.__remove_allow_route_map_entry(self.V4, names['pl_v4'], names['community'], names['rm_v4']) @@ -189,7 +207,7 @@ def __remove_policy(self, deployment_id, community_value): cmds += self.__update_default_route_map_entry(names['rm_v6'], default_action) if cmds: self.cfg_mgr.push_list(cmds) - peer_groups = self.__find_peer_group_by_deployment_id(deployment_id) + peer_groups = self.__find_peer_group(deployment_id, neighbor_type) self.cfg_mgr.restart_peer_groups(peer_groups) log_debug("BGPAllowListMgr::__remove_policy. 'Allow list' policy was scheduled for removal") else: @@ -197,26 +215,42 @@ def __remove_policy(self, deployment_id, community_value): log_info('BGPAllowListMgr::Done') @staticmethod - def __generate_names(deployment_id, community_value): + def __generate_names(deployment_id, community_value, neighbor_type): """ Generate prefix-list names for a given peer_ip and community value :param deployment_id: deployment_id for which we're going to filter prefixes :param community_value: community, which we want to use to filter prefixes :return: a dictionary with names """ - if community_value == BGPAllowListMgr.EMPTY_COMMUNITY: - community_name = BGPAllowListMgr.EMPTY_COMMUNITY + if not neighbor_type: + if community_value == BGPAllowListMgr.EMPTY_COMMUNITY: + community_name = BGPAllowListMgr.EMPTY_COMMUNITY + else: + community_name = BGPAllowListMgr.COMMUNITY_NAME_TMPL % (deployment_id, community_value) + names = { + "pl_v4": BGPAllowListMgr.PL_NAME_TMPL % (deployment_id, community_value, '4'), + "pl_v6": BGPAllowListMgr.PL_NAME_TMPL % (deployment_id, community_value, '6'), + "rm_v4": BGPAllowListMgr.RM_NAME_TMPL % (deployment_id, '4'), + "rm_v6": BGPAllowListMgr.RM_NAME_TMPL % (deployment_id, '6'), + "community": community_name, + 'neigh_type': neighbor_type, + } + arguments = deployment_id, community_value, str(names) + log_debug("BGPAllowListMgr::__generate_names. deployment_id: %d, community: %s. names: %s" % arguments) else: - community_name = BGPAllowListMgr.COMMUNITY_NAME_TMPL % (deployment_id, community_value) - names = { - "pl_v4": BGPAllowListMgr.PL_NAME_TMPL % (deployment_id, community_value, '4'), - "pl_v6": BGPAllowListMgr.PL_NAME_TMPL % (deployment_id, community_value, '6'), - "rm_v4": BGPAllowListMgr.RM_NAME_TMPL % (deployment_id, '4'), - "rm_v6": BGPAllowListMgr.RM_NAME_TMPL % (deployment_id, '6'), - "community": community_name, - } - arguments = deployment_id, community_value, str(names) - log_debug("BGPAllowListMgr::__generate_names. deployment_id: %d, community: %s. names: %s" % arguments) + if community_value == BGPAllowListMgr.EMPTY_COMMUNITY: + community_name = BGPAllowListMgr.EMPTY_COMMUNITY + else: + community_name = BGPAllowListMgr.COMMUNITY_NAME_TMPL_WITH_NEIGH % (deployment_id, neighbor_type, community_value) + names = { + "pl_v4": BGPAllowListMgr.PL_NAME_TMPL_WITH_NEIGH % (deployment_id, neighbor_type, community_value, '4'), + "pl_v6": BGPAllowListMgr.PL_NAME_TMPL_WITH_NEIGH % (deployment_id, neighbor_type, community_value, '6'), + "rm_v4": BGPAllowListMgr.RM_NAME_TMPL_WITH_NEIGH % (deployment_id, neighbor_type, '4'), + "rm_v6": BGPAllowListMgr.RM_NAME_TMPL_WITH_NEIGH % (deployment_id, neighbor_type, '6'), + "community": community_name, + } + arguments = deployment_id, neighbor_type, community_value, str(names) + log_debug("BGPAllowListMgr::__generate_names. deployment_id: %d, neighbor_type: %s, community: %s. names: %s" % arguments) return names def __update_prefix_list(self, af, pl_name, allow_list): @@ -630,7 +664,7 @@ def __get_routemap_tag(self): return prefix_match_tag @staticmethod - def __get_peer_group_to_restart(deployment_id, pg_2_rm, rm_2_call): + def __get_peer_group_to_restart(deployment_id, pg_2_rm, rm_2_call, neighbor_type): """ Get peer_groups which are assigned to deployment_id :deployment_id: deployment_id number @@ -639,14 +673,17 @@ def __get_peer_group_to_restart(deployment_id, pg_2_rm, rm_2_call): :rm_2_call: a dictionary: key - name of a route-map, value - name of a route-map call defined for the route-map """ ret = set() - target_allow_list_prefix = 'ALLOW_LIST_DEPLOYMENT_ID_%d_V' % deployment_id + if not neighbor_type: + target_allow_list_prefix = 'ALLOW_LIST_DEPLOYMENT_ID_%d_V' % deployment_id + else: + target_allow_list_prefix = 'ALLOW_LIST_DEPLOYMENT_ID_%d_NEIGHBOR_%s_V' % (deployment_id, neighbor_type) for peer_group, route_map in pg_2_rm.items(): if route_map in rm_2_call: if rm_2_call[route_map].startswith(target_allow_list_prefix): ret.add(peer_group) return list(ret) - def __find_peer_group_by_deployment_id(self, deployment_id): + def __find_peer_group(self, deployment_id, neighbor_type): """ Deduce peer-group names which are connected to devices with requested deployment_id :param deployment_id: deployment_id number @@ -656,7 +693,7 @@ def __find_peer_group_by_deployment_id(self, deployment_id): peer_groups = self.__extract_peer_group_names() pg_2_rm = self.__get_peer_group_to_route_map(peer_groups) rm_2_call = self.__get_route_map_calls(set(pg_2_rm.values())) - ret = self.__get_peer_group_to_restart(deployment_id, pg_2_rm, rm_2_call) + ret = self.__get_peer_group_to_restart(deployment_id, pg_2_rm, rm_2_call, neighbor_type) return list(ret) def __get_enabled(self): @@ -706,11 +743,14 @@ def __to_prefix_list(self, af, allow_list): res = [] prefix_mask_default = 32 if af == self.V4 else 128 for prefix in allow_list: - prefix_mask = int(prefix.split("/")[1]) - if prefix_mask == prefix_mask_default: + if 'le' in prefix or 'ge' in prefix: res.append("permit %s" % prefix) else: - res.append("permit %s le %d" % (prefix, prefix_mask_default)) + prefix_mask = int(prefix.split("/")[1]) + if prefix_mask == prefix_mask_default: + res.append("permit %s" % prefix) + else: + res.append("permit %s le %d" % (prefix, prefix_mask_default)) return res def __af_to_family(self, af): diff --git a/src/sonic-bgpcfgd/tests/test_allow_list.py b/src/sonic-bgpcfgd/tests/test_allow_list.py index e77c692ee593..c5bec039c3e4 100644 --- a/src/sonic-bgpcfgd/tests/test_allow_list.py +++ b/src/sonic-bgpcfgd/tests/test_allow_list.py @@ -866,6 +866,131 @@ def test_set_handler_no_community_update_prefixes_remove(): ] ) +def test_set_handler_with_neighbor_type(): + set_del_test( + "SET", + ("DEPLOYMENT_ID|5|NEIGHBOR_TYPE|OpticalLonghaulTerminal", { + "prefixes_v4": "10.62.64.0/22 ge 30,"\ + "10.1.44.0/23 ge 30,"\ + "10.17.92.0/23 ge 30,"\ + "10.73.92.0/23 ge 30,"\ + "10.26.170.0/24 ge 30,"\ + "10.26.171.0/24 ge 30,"\ + "10.26.255.0/24 ge 30", + "prefixes_v6": "fc01:20::/64", + }), + [ + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V4 seq 10 deny 0.0.0.0/0 le 17', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V4 seq 20 permit 20.20.30.0/24 le 32', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V4 seq 30 permit 40.50.0.0/16 le 32', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V6 seq 20 deny ::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V6 seq 30 permit fc01:20::/64 le 128', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V6 seq 40 permit fc01:30::/64 le 128', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_V4 permit 30000', + ' match ip address prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V4', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_V6 permit 30000', + ' match ipv6 address prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V6', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_V4 permit 65535', + ' set community 123:123 additive', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_V6 permit 65535', + ' set community 123:123 additive', + "" + ], + [ + 'no ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V4', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V4 seq 10 deny 0.0.0.0/0 le 17', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V4 seq 20 permit 10.62.64.0/22 ge 30', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V4 seq 30 permit 10.1.44.0/23 ge 30', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V4 seq 40 permit 10.17.92.0/23 ge 30', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V4 seq 50 permit 10.73.92.0/23 ge 30', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V4 seq 60 permit 10.26.170.0/24 ge 30', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V4 seq 70 permit 10.26.171.0/24 ge 30', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V4 seq 80 permit 10.26.255.0/24 ge 30', + 'no ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V6', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V6 seq 20 deny ::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_empty_V6 seq 30 permit fc01:20::/64 le 128', + ] + ) + +def test_set_handler_with_neighbor_type_and_community(): + set_del_test( + "SET", + ("DEPLOYMENT_ID|5|NEIGHBOR_TYPE|OpticalLonghaulTerminal|1010:2020", { + "prefixes_v4": "10.62.64.0/22 ge 30,"\ + "10.1.44.0/23 ge 30,"\ + "10.17.92.0/23 ge 30,"\ + "10.73.92.0/23 ge 30,"\ + "10.26.170.0/24 ge 30,"\ + "10.26.171.0/24 ge 30,"\ + "10.26.255.0/24 ge 30", + "prefixes_v6": "fc01:20::/64", + }), + [ + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V4 seq 10 deny 0.0.0.0/0 le 17', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V4 seq 20 permit 20.20.30.0/24 le 32', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V4 seq 30 permit 40.50.0.0/16 le 32', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V6 seq 20 deny ::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V6 seq 30 permit fc01:20::/64 le 128', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V6 seq 40 permit fc01:30::/64 le 128', + 'bgp community-list standard COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020 permit 1010:2020', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_V4 permit 10', + ' match ip address prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V4', + ' match community COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_V6 permit 10', + ' match ipv6 address prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V6', + ' match community COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_V4 permit 65535', + ' set community 123:123 additive', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_V6 permit 65535', + ' set community 123:123 additive', + "" + ], + [ + 'no ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V4', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V4 seq 10 deny 0.0.0.0/0 le 17', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V4 seq 20 permit 10.62.64.0/22 ge 30', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V4 seq 30 permit 10.1.44.0/23 ge 30', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V4 seq 40 permit 10.17.92.0/23 ge 30', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V4 seq 50 permit 10.73.92.0/23 ge 30', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V4 seq 60 permit 10.26.170.0/24 ge 30', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V4 seq 70 permit 10.26.171.0/24 ge 30', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V4 seq 80 permit 10.26.255.0/24 ge 30', + 'no ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V6', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V6 seq 20 deny ::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_COMMUNITY_1010:2020_V6 seq 30 permit fc01:20::/64 le 128', + ] + ) + +def test_del_handler_with_neighbor_type_community_no_data(): + set_del_test( + "DEL", + ("DEPLOYMENT_ID|5|NEIGHBOR_TYPE|OpticalLonghaulTerminal|1010:2020",), + [ + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_V4 permit 65535', + ' set community 123:123 additive', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_V6 permit 65535', + ' set community 123:123 additive' + ], + [] + ) + +def test_del_handler_with_neighbor_type_no_data(): + set_del_test( + "DEL", + ("DEPLOYMENT_ID|5|NEIGHBOR_TYPE|OpticalLonghaulTerminal",), + [ + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_V4 permit 65535', + ' set community 123:123 additive', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_NEIGHBOR_OpticalLonghaulTerminal_V6 permit 65535', + ' set community 123:123 additive' + ], + [] + ) + @patch.dict("sys.modules", swsscommon=swsscommon_module_mock) def test___set_handler_validate(): from bgpcfgd.managers_allow_list import BGPAllowListMgr @@ -894,7 +1019,7 @@ def test___set_handler_validate(): }) @patch.dict("sys.modules", swsscommon=swsscommon_module_mock) -def test___find_peer_group_by_deployment_id(): +def test___find_peer_group(): from bgpcfgd.managers_allow_list import BGPAllowListMgr cfg_mgr = MagicMock() cfg_mgr.update.return_value = None @@ -984,7 +1109,7 @@ def test___find_peer_group_by_deployment_id(): 'constants': global_constants, } mgr = BGPAllowListMgr(common_objs, "CONFIG_DB", "BGP_ALLOWED_PREFIXES") - values = mgr._BGPAllowListMgr__find_peer_group_by_deployment_id(0) + values = mgr._BGPAllowListMgr__find_peer_group(0, '') assert set(values) == {'PEER_V4_INT', 'PEER_V6_INT', 'PEER_V6', 'PEER_V4'} @patch.dict("sys.modules", swsscommon=swsscommon_module_mock) From 3201dc93f608e9f976e4c207b2e641456dd6bc7b Mon Sep 17 00:00:00 2001 From: Stepan Blyshchak <38952541+stepanblyschak@users.noreply.github.com> Date: Thu, 11 Aug 2022 06:57:07 +0300 Subject: [PATCH 191/259] [swss.sh/syncd.sh] Trap only on EXIT (#11590) When using trap on SIGTERM the script will not react to the SIGTERM signal sent while a child is executing. I.e, the following script does not react on SIGTERM sent to it if it is waiting for sleep to finish: ``` trap "echo Handled SIGTERM" 0 2 3 15 echo "Before sleep" sleep inf echo "After sleep" ``` Instead, trap only on EXIT which covers also a scenario with exit on SIGINT, SIGTERM. Signed-off-by: Stepan Blyschak --- files/scripts/swss.sh | 2 +- files/scripts/syncd_common.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/files/scripts/swss.sh b/files/scripts/swss.sh index ee30d49cdaaf..61315acc149f 100755 --- a/files/scripts/swss.sh +++ b/files/scripts/swss.sh @@ -38,7 +38,7 @@ function lock_service_state_change() exec {LOCKFD}>${LOCKFILE} /usr/bin/flock -x ${LOCKFD} - trap "/usr/bin/flock -u ${LOCKFD}" 0 2 3 15 + trap "/usr/bin/flock -u ${LOCKFD}" EXIT debug "Locked ${LOCKFILE} (${LOCKFD}) from ${SERVICE}$DEV service" } diff --git a/files/scripts/syncd_common.sh b/files/scripts/syncd_common.sh index 3adfb6cbfcf9..3d03c8b9e4e5 100755 --- a/files/scripts/syncd_common.sh +++ b/files/scripts/syncd_common.sh @@ -3,11 +3,11 @@ # # common functions used by "syncd" scipts (syncd.sh, gbsyncd.sh, etc..) # scripts using this must provide implementations of the following functions: -# +# # startplatform # waitplatform # stopplatform1 and stopplatform2 -# +# # For examples of these, see gbsyncd.sh and syncd.sh. # @@ -25,7 +25,7 @@ function lock_service_state_change() exec {LOCKFD}>${LOCKFILE} /usr/bin/flock -x ${LOCKFD} - trap "/usr/bin/flock -u ${LOCKFD}" 0 2 3 15 + trap "/usr/bin/flock -u ${LOCKFD}" EXIT debug "Locked ${LOCKFILE} (${LOCKFD}) from ${SERVICE}$DEV service" } From 92ed619f9962f9a7f3e8f557b0e9370887133a78 Mon Sep 17 00:00:00 2001 From: Saikrishna Arcot Date: Tue, 9 Aug 2022 09:41:07 -0700 Subject: [PATCH 192/259] Update Broadcom SAI to 7.1.0.0-9 (#11612) This brings in a SAI library that is compiled on Bullseye. Signed-off-by: Saikrishna Arcot --- platform/broadcom/sai.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/broadcom/sai.mk b/platform/broadcom/sai.mk index ad43e8ddbe5d..b4f5873ea3f5 100644 --- a/platform/broadcom/sai.mk +++ b/platform/broadcom/sai.mk @@ -1,5 +1,5 @@ -LIBSAIBCM_XGS_VERSION = 7.1.0.0-6 -LIBSAIBCM_DNX_VERSION = 7.1.0.0-1 +LIBSAIBCM_XGS_VERSION = 7.1.0.0-9 +LIBSAIBCM_DNX_VERSION = 7.1.0.0-9 LIBSAIBCM_BRANCH_NAME = REL_7.0 LIBSAIBCM_XGS_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/$(LIBSAIBCM_BRANCH_NAME)/$(LIBSAIBCM_XGS_VERSION)" LIBSAIBCM_DNX_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/$(LIBSAIBCM_BRANCH_NAME)/$(LIBSAIBCM_DNX_VERSION)" From 15c80b207c08a8888655bac386095b584cf7c8e7 Mon Sep 17 00:00:00 2001 From: Lawrence Lee Date: Tue, 9 Aug 2022 16:19:42 -0700 Subject: [PATCH 193/259] [arp_update]: Resolve failed neighbors on dualtor (#11615) In arp_update, check for FAILED or INCOMPLETE kernel neighbor entries and manually ping them to try and resolve the neighbor Signed-off-by: Lawrence Lee --- files/scripts/arp_update | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/files/scripts/arp_update b/files/scripts/arp_update index 2f66fc84b396..df2758e187a7 100755 --- a/files/scripts/arp_update +++ b/files/scripts/arp_update @@ -54,6 +54,7 @@ while /bin/true; do done VLAN=$(echo $ARP_UPDATE_VARS | jq -r '.vlan') + SUBTYPE=$(sonic-db-cli CONFIG_DB hget 'DEVICE_METADATA|localhost' 'subtype' | tr '[:upper:]' '[:lower:]') for vlan in $VLAN; do # generate a list of arping commands: # arping -q -w 0 -c 1 -i ; @@ -75,7 +76,26 @@ while /bin/true; do ndisc6cmd="sed -e 's/^/ndisc6 -q -w 0 -1 /' -e 's/$/;/'" ip6cmd="ip -6 neigh show | grep -v fe80 | grep $vlan | cut -d ' ' -f 1,3 | $ndisc6cmd" eval `eval $ip6cmd` + + if [[ $SUBTYPE == "dualtor" ]]; then + # on dual ToR devices, try to resolve failed neighbor entries since + # these entries will have tunnel routes installed, preventing normal + # neighbor resolution (SWSS PR #2137) + + # since ndisc6 is a userland process, the above ndisc6 commands are + # insufficient to update the kernel neighbor table for failed entries + + # we don't need to do this for ipv4 neighbors since arping is able to + # update the kernel neighbor table + + # generates the following command for each failed or incomplete IPv6 neighbor + # timeout 0.2 ping -n -q -i 0 -c 1 -W 1 -I >/dev/null + ping6_template="sed -e 's/^/timeout 0.2 ping /' -e 's/,/ -n -q -i 0 -c 1 -W 1 -I /' -e 's/$/ >\/dev\/null;/'" + failed_ip6_neigh_cmd="ip -6 neigh show | grep -v fe80 | grep $vlan | grep -E 'FAILED|INCOMPLETE' | cut -d ' ' -f 1,3 --output-delimiter=',' | $ping6_template" + eval `eval $failed_ip6_neigh_cmd` + fi done + # sleep here before handling the mismatch as it is not required during startup sleep 300 From 964e0abd2cab46a7d576321655a3933f54bc587c Mon Sep 17 00:00:00 2001 From: Lawrence Lee Date: Tue, 9 Aug 2022 16:19:59 -0700 Subject: [PATCH 194/259] [swss]: Run tunnel_pkt_handler on dualtor only (#11627) At SWSS docker init time, check the device subtype and enable tunnel packet handler only if it is dualtor Signed-off-by: Lawrence Lee --- dockers/docker-orchagent/Dockerfile.j2 | 2 +- dockers/docker-orchagent/docker-init.j2 | 5 +++++ dockers/docker-orchagent/supervisord.conf.j2 | 12 ------------ dockers/docker-orchagent/tunnel_packet_handler.conf | 9 +++++++++ 4 files changed, 15 insertions(+), 13 deletions(-) create mode 100644 dockers/docker-orchagent/tunnel_packet_handler.conf diff --git a/dockers/docker-orchagent/Dockerfile.j2 b/dockers/docker-orchagent/Dockerfile.j2 index a023862c1d9d..a7a314cdc8c9 100755 --- a/dockers/docker-orchagent/Dockerfile.j2 +++ b/dockers/docker-orchagent/Dockerfile.j2 @@ -68,7 +68,7 @@ RUN apt-get purge -y \ COPY ["files/arp_update", "/usr/bin"] COPY ["arp_update.conf", "files/arp_update_vars.j2", "/usr/share/sonic/templates/"] -COPY ["ndppd.conf", "/usr/share/sonic/templates/"] +COPY ["ndppd.conf", "tunnel_packet_handler.conf", "/usr/share/sonic/templates/"] COPY ["enable_counters.py", "tunnel_packet_handler.py", "/usr/bin/"] COPY ["orchagent.sh", "swssconfig.sh", "buffermgrd.sh", "/usr/bin/"] COPY ["files/supervisor-proc-exit-listener", "/usr/bin"] diff --git a/dockers/docker-orchagent/docker-init.j2 b/dockers/docker-orchagent/docker-init.j2 index 4cd6a53a11cd..18fc1b57a721 100755 --- a/dockers/docker-orchagent/docker-init.j2 +++ b/dockers/docker-orchagent/docker-init.j2 @@ -21,6 +21,7 @@ CFGGEN_PARAMS=" \ -t /usr/share/sonic/templates/wait_for_link.sh.j2,/usr/bin/wait_for_link.sh \ " VLAN=$(sonic-cfggen $CFGGEN_PARAMS) +SUBTYPE=$(sonic-cfggen -d -v "DEVICE_METADATA['localhost']['subtype']") SWITCH_TYPE=${SWITCH_TYPE:-`sonic-cfggen -d -v "DEVICE_METADATA['localhost']['switch_type']"`} chmod +x /usr/bin/wait_for_link.sh @@ -43,6 +44,10 @@ if [ "$VLAN" != "" ]; then cp /usr/share/sonic/templates/ndppd.conf /etc/supervisor/conf.d/ fi +if [ "$SUBTYPE" == "DualToR" ]; then + cp /usr/share/sonic/templates/tunnel_packet_handler.conf /etc/supervisor/conf.d/ +fi + USE_PCI_ID_IN_CHASSIS_STATE_DB=/usr/share/sonic/platform/use_pci_id_chassis ASIC_ID="asic$NAMESPACE_ID" if [ -f "$USE_PCI_ID_IN_CHASSIS_STATE_DB" ]; then diff --git a/dockers/docker-orchagent/supervisord.conf.j2 b/dockers/docker-orchagent/supervisord.conf.j2 index 9751a58bb833..eef040ee1784 100644 --- a/dockers/docker-orchagent/supervisord.conf.j2 +++ b/dockers/docker-orchagent/supervisord.conf.j2 @@ -288,15 +288,3 @@ dependent_startup_wait_for=swssconfig:exited environment=ASAN_OPTIONS="log_path=/var/log/asan/fdbsyncd-asan.log{{ asan_extra_options }}" {% endif %} {%- endif %} - -{% if is_fabric_asic == 0 %} -[program:tunnel_packet_handler] -command=/usr/bin/tunnel_packet_handler.py -priority=12 -autostart=false -autorestart=unexpected -stdout_logfile=syslog -stderr_logfile=syslog -dependent_startup=true -dependent_startup_wait_for=swssconfig:exited -{%- endif %} diff --git a/dockers/docker-orchagent/tunnel_packet_handler.conf b/dockers/docker-orchagent/tunnel_packet_handler.conf new file mode 100644 index 000000000000..aa6f3d2f3380 --- /dev/null +++ b/dockers/docker-orchagent/tunnel_packet_handler.conf @@ -0,0 +1,9 @@ +[program:tunnel_packet_handler] +command=/usr/bin/tunnel_packet_handler.py +priority=12 +autostart=false +autorestart=unexpected +stdout_logfile=syslog +stderr_logfile=syslog +dependent_startup=true +dependent_startup_wait_for=swssconfig:exited From 8c88ecbe35d3ac9a55ee847ef727b18318a75651 Mon Sep 17 00:00:00 2001 From: Saikrishna Arcot Date: Tue, 9 Aug 2022 17:05:36 -0700 Subject: [PATCH 195/259] Upgrade LLDP docker to Bullseye (#11628) Signed-off-by: Saikrishna Arcot --- dockers/docker-lldp/Dockerfile.j2 | 2 +- rules/docker-lldp.mk | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dockers/docker-lldp/Dockerfile.j2 b/dockers/docker-lldp/Dockerfile.j2 index 496af3e11601..d7e38e663be8 100644 --- a/dockers/docker-lldp/Dockerfile.j2 +++ b/dockers/docker-lldp/Dockerfile.j2 @@ -1,5 +1,5 @@ {% from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %} -FROM docker-config-engine-buster-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} +FROM docker-config-engine-bullseye-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} ARG docker_container_name ARG image_version diff --git a/rules/docker-lldp.mk b/rules/docker-lldp.mk index f9c77ec14c40..b2e7b350f3bb 100644 --- a/rules/docker-lldp.mk +++ b/rules/docker-lldp.mk @@ -8,13 +8,13 @@ $(DOCKER_LLDP)_PATH = $(DOCKERS_PATH)/docker-lldp $(DOCKER_LLDP)_DEPENDS += $(LLDPD) $(LIBSWSSCOMMON) $(PYTHON3_SWSSCOMMON) -$(DOCKER_LLDP)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_DEPENDS) +$(DOCKER_LLDP)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_DEPENDS) $(DOCKER_LLDP)_DBG_DEPENDS += $(LLDPD_DBG) $(LIBSWSSCOMMON_DBG) -$(DOCKER_LLDP)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_IMAGE_PACKAGES) +$(DOCKER_LLDP)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_IMAGE_PACKAGES) $(DOCKER_LLDP)_PYTHON_WHEELS += $(DBSYNCD_PY3) -$(DOCKER_LLDP)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BUSTER) +$(DOCKER_LLDP)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BULLSEYE) $(DOCKER_LLDP)_VERSION = 1.0.0 $(DOCKER_LLDP)_PACKAGE_NAME = lldp @@ -36,5 +36,5 @@ $(DOCKER_LLDP)_BASE_IMAGE_FILES += lldpctl:/usr/bin/lldpctl $(DOCKER_LLDP)_BASE_IMAGE_FILES += lldpcli:/usr/bin/lldpcli $(DOCKER_LLDP)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) -SONIC_BUSTER_DOCKERS += $(DOCKER_LLDP) -SONIC_BUSTER_DBG_DOCKERS += $(DOCKER_LLDP_DBG) +SONIC_BULLSEYE_DOCKERS += $(DOCKER_LLDP) +SONIC_BULLSEYE_DBG_DOCKERS += $(DOCKER_LLDP_DBG) From d1a9052a4ef9ac9ead421e35b5f96a6457f699c1 Mon Sep 17 00:00:00 2001 From: gechiang <62408185+gechiang@users.noreply.github.com> Date: Thu, 11 Aug 2022 09:07:39 -0700 Subject: [PATCH 196/259] [BRCM SAI 7.1.7.1] catch up on all pending fix patches for REL_7.0/7.1 (#11693) --- platform/broadcom/sai.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/broadcom/sai.mk b/platform/broadcom/sai.mk index b4f5873ea3f5..8d78a89a97a5 100644 --- a/platform/broadcom/sai.mk +++ b/platform/broadcom/sai.mk @@ -1,5 +1,5 @@ -LIBSAIBCM_XGS_VERSION = 7.1.0.0-9 -LIBSAIBCM_DNX_VERSION = 7.1.0.0-9 +LIBSAIBCM_XGS_VERSION = 7.1.7.1 +LIBSAIBCM_DNX_VERSION = 7.1.7.1 LIBSAIBCM_BRANCH_NAME = REL_7.0 LIBSAIBCM_XGS_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/$(LIBSAIBCM_BRANCH_NAME)/$(LIBSAIBCM_XGS_VERSION)" LIBSAIBCM_DNX_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/$(LIBSAIBCM_BRANCH_NAME)/$(LIBSAIBCM_DNX_VERSION)" From 113e1059b2c4e292086ab53ae7b8794a0bcd3244 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B3=93=E5=B0=91=E9=88=BA?= <51807939+geans-pin@users.noreply.github.com> Date: Thu, 14 Jul 2022 02:58:47 +0800 Subject: [PATCH 197/259] PDE migration to bullseye (#10836) #### Why I did it Upgrade docker-pde to bullseye #### How to verify it Check Azp status --- dockers/docker-pde/Dockerfile.j2 | 7 +- .../cancun_4.5.0/bcm56370_a0_cch.pkg | Bin 0 -> 65628 bytes .../cancun_4.5.0/bcm56370_a0_ceh.pkg | Bin 0 -> 13576 bytes .../cancun_4.5.0/bcm56370_a0_cfh.pkg | Bin 0 -> 56812 bytes .../cancun_4.5.0/bcm56370_a0_cih.pkg | Bin 0 -> 880452 bytes .../cancun_4.5.0/bcm56370_a0_cmh.pkg | Bin 0 -> 4324 bytes .../cancun_4.6.0/bcm56370_a0_cch.pkg | Bin 0 -> 66064 bytes .../cancun_4.6.0/bcm56370_a0_ceh.pkg | Bin 0 -> 13576 bytes .../cancun_4.6.0/bcm56370_a0_cfh.pkg | Bin 0 -> 56812 bytes .../cancun_4.6.0/bcm56370_a0_cih.pkg | Bin 0 -> 882564 bytes .../cancun_4.6.0/bcm56370_a0_cmh.pkg | Bin 0 -> 4324 bytes .../cancun_4.7.0/bcm56770_a0_cch.pkg | Bin 0 -> 104416 bytes .../cancun_4.7.0/bcm56770_a0_ceh.pkg | Bin 0 -> 18020 bytes .../cancun_4.7.0/bcm56770_a0_cfh.pkg | Bin 0 -> 77172 bytes .../cancun_4.7.0/bcm56770_a0_cih.pkg | Bin 0 -> 970692 bytes .../cancun_4.7.0/bcm56770_a0_cmh.pkg | Bin 0 -> 4324 bytes .../cancun_4.8.0/bcm56770_a0_cch.pkg | Bin 0 -> 128496 bytes .../cancun_4.8.0/bcm56770_a0_ceh.pkg | Bin 0 -> 19252 bytes .../cancun_4.8.0/bcm56770_a0_cfh.pkg | Bin 0 -> 77172 bytes .../cancun_4.8.0/bcm56770_a0_cih.pkg | Bin 0 -> 995268 bytes .../cancun_4.8.0/bcm56770_a0_cmh.pkg | Bin 0 -> 4324 bytes .../cancun_6.8.0/bcm56870_a0_cch.pkg | Bin 0 -> 112696 bytes .../cancun_6.8.0/bcm56870_a0_ceh.pkg | Bin 0 -> 18020 bytes .../cancun_6.8.0/bcm56870_a0_cfh.pkg | Bin 0 -> 76828 bytes .../cancun_6.8.0/bcm56870_a0_cih.pkg | Bin 0 -> 983556 bytes .../cancun_6.8.0/bcm56870_a0_cmh.pkg | Bin 0 -> 4324 bytes .../cancun_6.9.1/bcm56870_a0_cch.pkg | Bin 0 -> 136720 bytes .../cancun_6.9.1/bcm56870_a0_ceh.pkg | Bin 0 -> 19252 bytes .../cancun_6.9.1/bcm56870_a0_cfh.pkg | Bin 0 -> 89948 bytes .../cancun_6.9.1/bcm56870_a0_cih.pkg | Bin 0 -> 1008612 bytes .../cancun_6.9.1/bcm56870_a0_cmh.pkg | Bin 0 -> 4324 bytes dockers/docker-pde/docker_init.sh | 18 +- dockers/docker-pde/syncd_init_common.sh | 254 ++++++++++++++++++ platform/broadcom/docker-pde.mk | 16 +- 34 files changed, 280 insertions(+), 15 deletions(-) create mode 100644 dockers/docker-pde/cancun_files/cancun_4.5.0/bcm56370_a0_cch.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.5.0/bcm56370_a0_ceh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.5.0/bcm56370_a0_cfh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.5.0/bcm56370_a0_cih.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.5.0/bcm56370_a0_cmh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.6.0/bcm56370_a0_cch.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.6.0/bcm56370_a0_ceh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.6.0/bcm56370_a0_cfh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.6.0/bcm56370_a0_cih.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.6.0/bcm56370_a0_cmh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.7.0/bcm56770_a0_cch.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.7.0/bcm56770_a0_ceh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.7.0/bcm56770_a0_cfh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.7.0/bcm56770_a0_cih.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.7.0/bcm56770_a0_cmh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.8.0/bcm56770_a0_cch.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.8.0/bcm56770_a0_ceh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.8.0/bcm56770_a0_cfh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.8.0/bcm56770_a0_cih.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_4.8.0/bcm56770_a0_cmh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_6.8.0/bcm56870_a0_cch.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_6.8.0/bcm56870_a0_ceh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_6.8.0/bcm56870_a0_cfh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_6.8.0/bcm56870_a0_cih.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_6.8.0/bcm56870_a0_cmh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_6.9.1/bcm56870_a0_cch.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_6.9.1/bcm56870_a0_ceh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_6.9.1/bcm56870_a0_cfh.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_6.9.1/bcm56870_a0_cih.pkg create mode 100644 dockers/docker-pde/cancun_files/cancun_6.9.1/bcm56870_a0_cmh.pkg mode change 100644 => 100755 dockers/docker-pde/docker_init.sh create mode 100755 dockers/docker-pde/syncd_init_common.sh diff --git a/dockers/docker-pde/Dockerfile.j2 b/dockers/docker-pde/Dockerfile.j2 index a6e7e62c8647..0ddbfd59ce1e 100644 --- a/dockers/docker-pde/Dockerfile.j2 +++ b/dockers/docker-pde/Dockerfile.j2 @@ -1,4 +1,4 @@ -FROM docker-config-engine-buster-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} +FROM docker-config-engine-bullseye-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} ARG docker_container_name ENV PYTHONPATH=/usr/share/sonic/platform @@ -20,8 +20,7 @@ RUN apt-get update && apt-get install -y ipmitool telnet busybox kmod libpcap-de RUN apt-get install -y bzip2 curl ioping openssl bc sysstat # Packages for PDDF - -RUN apt-get install -y python-jsonschema +RUN apt-get install -y python3-jsonschema i2c-tools RUN pip3 install pytest pexpect @@ -89,7 +88,7 @@ COPY ["stress-sfp-i2c.py", "/home/pde"] COPY ["supervisord.conf", "/etc/supervisor/conf.d/"] COPY ["syseeprom.py", "/usr/bin/"] COPY ["docker_init.sh", "/usr/bin/"] -COPY ["cancun_files/cancun_4.5.0/*", "cancun_files/cancun_6.6.1/*", "cancun_files/cancun_4.3.0/*", "/usr/lib/cancun/"] +COPY ["cancun_files/cancun_4.6.0/*", "cancun_files/cancun_6.9.1/*", "cancun_files/cancun_4.8.0/*", "/usr/lib/cancun/"] COPY ["syncd_init_common.sh", "/usr/bin/"] ENTRYPOINT ["/usr/bin/docker_init.sh"] diff --git a/dockers/docker-pde/cancun_files/cancun_4.5.0/bcm56370_a0_cch.pkg b/dockers/docker-pde/cancun_files/cancun_4.5.0/bcm56370_a0_cch.pkg new file mode 100644 index 0000000000000000000000000000000000000000..b2813d85f3c2b45347a7ff6393228b4bca1176bc GIT binary patch literal 65628 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 uJy%Kdj@P^1*pK&@-eX4GyH4*sn*n~-J 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 &FW!9gg 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 literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_4.6.0/bcm56370_a0_cch.pkg b/dockers/docker-pde/cancun_files/cancun_4.6.0/bcm56370_a0_cch.pkg new file mode 100644 index 0000000000000000000000000000000000000000..f53b5f989962fea17469ffc6e2ef518fe6395730 GIT binary patch literal 66064 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 I&wBR%0A{?whyVZp literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_4.6.0/bcm56370_a0_cih.pkg b/dockers/docker-pde/cancun_files/cancun_4.6.0/bcm56370_a0_cih.pkg new file mode 100644 index 0000000000000000000000000000000000000000..6733261fb613e343b331662558be8440b0b51a69 GIT binary patch literal 882564 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 literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_4.6.0/bcm56370_a0_cmh.pkg b/dockers/docker-pde/cancun_files/cancun_4.6.0/bcm56370_a0_cmh.pkg new file mode 100644 index 0000000000000000000000000000000000000000..ec6be5d84409e29cb77fa53ad5bd38470403805e GIT binary patch literal 4324 zcmchaPl#7l6vyxLzh?d$Gs{c`HUDoyM9OlQ$SMDfI-0gn7b-1+)Ri$R2reX~gdi$( zBa~J!D>oUDD-jVQ%_#pYRI*K!EfjH8-_LvR$m{&>85j`{eCOVK&gY(Y?|t|E?w$1= zt2#PYcBCThJeh_JDi#k)s>>!09zsFAY^&^*+NC*S9+&aV$i9yP&VR1a{-sgxZ}o;c z{3YF&25V8qN|UA8(n6_SS}DCPZI^aQ4`ch(?*r)*>6p|jnVnMojC4WzQ@SS&9AMF^ z9If_T=leg=zt%G4>Xx=h?@GI+0}^&vd^xnDzIimMV>sG_-Xhz75BdSVf=kUVoKi(Pw8LT7ph~#@KF|>MVeOoJbyxd%=0s9 zpXZgbG|w{+e4Zas;Vt>eljG@+`TXR`@vIr(Kl!$RXDqq#j1PGBWR8C-;Mw;%{-=PS8SobZepbL=4EPrU z{^x+79q^X|evadR+fjYLLmRw&OIefeZs*ZGIzc zt?7gPt{C;Mo}w)A`F(U5rwp$7yE3=-dHxEp%=7bVpXaZZbSpnU;I9Szf|{SCl6l_J z+|D1b^3t|_X)(t4nGQHgVtCt$m*Flppi_l-lR{H%hvdeeZ;e|<{g4Qe!goZeteYV;2ScQcQ?6iTU^a@KCoN9E)sV| z`hUBtx-aZ3s`HFEeP&A3?OWuX@V@XN3=SXPCHw#8dqp~YJ*9u{R`2(g+C0O|`tcok zBaaz*F}v4Lx47S<>~))?*eYm1Ydk3pEWzHM=h+WxqcF})AdcYw7 literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_4.7.0/bcm56770_a0_cch.pkg b/dockers/docker-pde/cancun_files/cancun_4.7.0/bcm56770_a0_cch.pkg new file mode 100644 index 0000000000000000000000000000000000000000..34691d28dc6dc275e21afb4adc8c971515f4e9c5 GIT binary patch literal 104416 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

g*%6}u zUX_!6J{_k(UC`|Vzk2zC{{Gh+G{;xUbMG3S=*B#m%iJH-hs|?MdG1rglQ}Y1Zr_@6 z*nO_tewlLad-BugxpMp0l&hML4yY-IpUTyDV5=NDb^k>e=e?;Wl7xm-CEiA~KSNHP_}p%NNSo^VFx5d_ zpSq7WMgWD_r;LZRPg5JP4W6L9s|f1)I2{wQkFo2tPyGy(k`_y!?*9LyKJ~a;*gnOt zyx#kid1^1g>%|u{4(fa{Yrwj3TsLmhaTxo!n=ke_uN$X>@x|1aj@#4^EvhfZU*rGS z$9bM7?)9zLont~ea=r2;{f^r28pS5s(~#eMcwZ&*;oTL|y-(%**Xhhvzucm)n5n7j z>=D`v{zm<$8$QQv+gFU=ysx-N_uXsL{Y`ySM>ZBXzreTO-{09+G51_F58K_a+-n)fR*kbpH;zt>!{0bMH%=YK zSvMJ{uZ(}``UUrxoUyPvg69YUSI%p#Bi0H0F5VWqNRO{-9dlmuEcb9-$%|ZEZ@psR zKKH*e``K~Y8U8gxU%Dj&a}xX}J>HRlb|I(tx%gRV+z;peH+yyBlmiG`yt%nXB970R zRQ`?@QA=bozKn-48)F`UJTcUv+X%p7HvT8{3HI37>B5gBT0!9qD5~13^0{2)L%@ zu4B$ohwlmgtj6ElxUXRyyddQM#)Iv+ zjtpz_{IG{SKj|UQ#XaP?v4=dj^^oW89`by-hdg)nkVh`QR)=5eA~f`fd44q*tPR~E8vd={NaFa8}RJ{zJ0*I5^(I@{NEDrO9Q@dz@W7PCH0pBm+mjwLV0lz2U-wpWX0sln6@hh(Dv4B4j@W%uGRKTAM_?`hjD&V^Z zT#weZ>zWzp#{~SafS(lbn*x4fz>f|%zp3c9Y!&F21$@hZPYXCU7Hy5^9lP1uRvwziyrE6)jd9W_jG?xSD&`{uI) zq_5b@$Ni`B3_SS1c(3wswr#<$&o%?=s5IZw8QSN?oBAndKBHRuG?B`7!RHP7Gw%_ir!>;03fz`w z2ho-&w|P$$H`nL3#C&c`q|p}Zjs8H!*cS7SH0tnLncui|A4BK&ZfVcP0{F64{*Ui> z`e?XlmhqX9WiWN4FSba+x{$`c)+J8X)u zp(LYzbEW~OLW0KX!4{yC)e<#OlcFkg1<1lQQWQPkda5xk`|u} zqJBR!kk++POmEoD| zyG?3%qN`lFO>4@H3gsyOnbp<#({^+k`gzqhE7-8xLmO{*!llIo-_*4a%pZJw&UZZqXH{LAv!hrXk| z@k}h0=}n1D%3j3r%v=#=;#ns6#j*G2;J3)T|DpVEo)xmbK?cqWITNHDadH3zp6#^G z4pH3CcFx~n-0af#tkb;i)+KG%E@``TNu&SU^=;CsZ&dR-sY}|1UD9Y5eS-~gKF8TJ z?Y6IXyGchEFHP_01AQ;4^Eu>+a&t!BtK8Vtl9JmpbEa6Q>v*QPBz0|j|6CZW*adTB z+7H~X=(Qi1zg`dhP-i=_AC{!;xF2rrp&z)X)N4P;rM)itq0V+y3;?Oq<`zN=6vAv+bYr-H}LstW}U$AiIE1ZBZ%t+mwTY5 z-1wxN`+zx(d#t^V1=eCq$|uo&%gy{yCwH`+B`vqta}S38XDr0^9BW4A3-&UagAE$xgmc)`~LpUy>`Y0 zfFpN%alTGDuL%Q|5F_E(+F&etD)-Z=Fd9}#f0WIBCnoV|nbT>_2_KNVm<*z@gw z?(_>Z(g_drYn`tvaby~!edFd0{n%gY*aX>98ZtuLuW?2@AF`%2WKLZMh5$yGZlB*gvpuqR!nn zk@ml(Z=%dowDvPmQl9+&tF~bYv#anZ*TV zTaDA##%VYBQN5lgU`iwkcn`uB!x~}eV^gg zauv|b&scLgu0Q#`Wa#p)Fnrj9@UAd8c4M6{bA4VHez%+ajLC!b`^Rhat)W$IGaPoV z?yEI!Yalng7$bFgHtHeIWr53s$f7snLYSkG=IC(4qQeHUe?K<1n?Pbl$pf~-#U}Ym7%RODG@tNb>=qOPW%po?W)cW z(>AAeZo6hqBUp#7&+k(?9_InQEWq{@!-NY3w`!%J(JEdV$DUI*+L1&M- ztswqJ7t?h79>1dP-#OZnh=T129KYhZg!o8-=Mv)7V|yZwjMr(+_C)#1Qq6hLV~lnZ zu2uTM`n3WAG=Gy3eGu$Z!08{4N#e-k-_il!MG(g{YnAppiu3d?iyF**&R8chx=xSt z!RpB0TokKP2dRvy&QcwuI*V;WGpP>i+Q{>1ZWC)e!eH7&KU(k9kAHI;?T6~xXkV$K zWj|H55x>7MZQMcS2Gb_wNZVlB#_kq}ZKpbqI?UN_s-xKNz1Xsj*cPzmIDW8eLa#bv z?uq@rzvA?JRX@X@@$Y_}C>&aB!@~6I4Dqnc)Q^vPWUk(;Z>-xuK7zl0?>4$$NsDbb zRB`lP)z8d-(TAPhD(`oQu?d3PxQTG;jPL4^?sZD}K~1ey((xMo4SnQyc(Hwg{ek0t zchK##PAQ8{y{=&HA*B8wzNbxk>I1#*APt_=1ywq?OoP$6*e#%Q;`V{5&S#ORP^EL$ z^f{fUI=hy&YusXj<4fh<+yfkU!hQ2Mje#whIV9lJ;@U0q|2k-v(+8^rrCDtENZu+B6?${qoQf_oVQ&8H|$i@QCjX<;g$7d`SWgU^bSHziU zx^|%6l*SlLX~>w;7`rJgw|+^#kH9lCqxI)Ddwk&+__jo^cF4V_CFK`VJFJsC+ToIx zn|o-;k8i*qpl?M>T6$lS`P5KqxLZlwsy8C{F zm{E>6aKfK>zGus_oTBA?kkat0DGggpX~>q+s4JyW?w--MkuT3B4u&u5p>BL9C>{Ph_rq^8#6J8-Klj7h1E0a# zzj!r&UpYR^Egg_;nUH>MS4E-uBDqcrf5m~c7L-^ zNeBEbR>~R2Mo1g2b-(9H;>XAixsDgOZQHiKrB8X%0KyfrVcSa1XR|L!{bX+MH!_ot zIxORlf8UwQp|d87>DqBV%t!1HQ;I1mb-Nke7DT?Xk34WQ>);X~Yly*q* zj%I@X@7l&XzY`ruB?@2v4z$yd#o+_uxo5F|o7XN%fG=>4(zb7Z*|5|9lzq3-w${lu zG81MBc5Z=xW16}Nf{pbR)LuB9jBJ3zp9aYyROn$3k1rU|wXaG&7N zkQbf$_r-;l0soK-X=0k2cr5pxP!D78wW{a5U?bEsWFvVSxu`-<9t+WakCCnMTkH6-9!r)5pX%VTWE$-R2acAU%akjX zX6`5__<;ia)VqV9!XM$QoR@UQk9`z4c|1-Tp9GIl%gR_LkPdG9rTiGdV9R^#Q~n@< z$Nrmy6Sfs_?_s^Ci7j2W4eVe6`MIY`n*emf{nJZ}E6eZtDO!I2buC?OKbF(|nYPn? znYI)D(f|MJApJl39va*Ev27bb$JnlIfagL8+X%K6@a$Ri|LF9!^2^cx%k{iw^?3Z? zt*B?nM)Ee|@tf*t$p3eIy3D8agVF!nPxa#enI8u0ziq$xRnA=oTi#=z^7wR*{YCNr zH|RUqJWE4h&zAas*Su%pUB&`#XCu{F3)ww97dDjXe_A8^j}?HA9QvAlOLp zi{>?-6_4fS)Rdc&lw;kDJU`GkQ~&et%{|Mqio+8ikdB=6KX$T=U}?c$rZ>~bht9mW z6Iuq!0S=C{4sc$lS6%UW&TBrtnxC)8!M!HpKT6tz{B`Z=o6*_7(hn1LU$j$dL7ga} ztt0lUTPbhzEo@RcY0X$CPJ4RIi#_!!!*I#&evA8T*YB%!F`14w2$Zd`K~g1TaOXa3GsWMoRy|}C*L>$*Wb!HjFcmV zkD{f&i0>2QH#igZH&a{}a+$tdz*F9%y70y?na9`rJASrY3$*IQ&YcI|+X;|?cR=|5 zaIXDT-xzth^=*;)nQx4wX{7`??oS`IJW6;vsn)A7x)|! zUVH=WMcw%4ySY5u@+U?C%zTpc9F(? z4z2)e3gqBE2XV{Kx3Kv==va<(Y?pgTdE>Y1JP+}^V3r^I;y1$31Ne>tuET#&6lb;W zy%0A~p~Z5lgZ_j5UcpL#D~jtIH#Xo;U!S;FQOs$~ZO6~+AFy8oG3<;5 z$1MHK_mui7=u1`5hgZC1$~tYx^3-7&5I*1Uhw_}KAm<0_y_xOTIh10 zttrQtayi@Q--FKK^()!tN2F`&VJt)ATVVXI5V|IAIfRzqfp;7^CU2uyLj$N89-<#Z znC>_kuwSn8gABy4*85^y-7emP``|8}z9#KnHGnICt#R-7^Tk)nxbJCVPuPuZ1lid? zxDDeKw?3FNzp)D%#!` zy3Fpnr`YXzK6u3E`CRV4%-D!)v*lFIwg3X%q@{Gd-GK9f9=ofopRpObAS0peKa=q7x$N~leZ|Z zzX$QwfWyP{IXvF0-yKPLc)r*nl$###83BjiQ~_mpPK4hhfgiqwG=M-lvb{9DLnqJc zdAMPS0*q+h@GE|0ao7nr<2R?er*v?|rkM zLk7Ni8D%g}C6zwP@hOU@b&zI0%)`C#$*tGnW1Vmw75N||>4d10oIFt{IUf_{<-3=$ z9@1P-u2bDd}h z(Qf11$vQE$gY^8TnclHSczK-h9ky6cwA)zEI+=Q|5Dh=S;WIkV_)v3=STzr@U$d?* zSDEP-G>Ur~_m{sh0uTC;b-)k1q&?OpO-qGJo|kksG?2^XWPF4H1?~?YF zE@?Bnq@C0y?cgqHCw58OwoBTNx}?qNlJfbI&$*`GN$!-?D8$dC~MW&9iQP5 z_03wh7e1_cQ(54%tAH!NYZmVr(XRXZJ7;z1jCDTyAN1`tKlj3nuNm-FLVnJ9T^65b ze65gwy?}2Z{Gxfy`%`}oGWfigy^+`O;Mfd2!AArfzXYAV;mAN|Jp`S7qW4(f*re&U zFYhHcRvLQZH`1b>pgkZNsTUj>EjuzAM}NlApK%p!-`MX~r~4Cr?kjMQFK~}v@UL{K6WOSn z?|XXBL0>X<@K>baFSzo|v-6uh?d_*@bl)CT4U&)NWN9M-W)wAE8sgy z)6Ua<5S>-??av9K@jWY^pXM7yJZn5nG~P#~9*+aQft~6BUuT))_;lOxd&uT-rR;5d z?SNB{#{_4;;FPsKvG=Ph^oD*cBj1PaCZopz{P4k+Yha@HbH^_TU zg^W{`A0Nc|0l$OV>mCKUmed|4>h+cyy?RWeSM1aJ^IU>%7z3tv^V8PrGRki|xVA>G zypL6<*SLpTl6s9}if>MLv)4HPjcDlu9ovVa*YQEG_-5;P-GDO>Sg(v%>-D+{y&|K> z^=-2{eg>NuF{!Wkx1TnB5Pd}6+e04W_$#hk>mPQ{vo0Izh7xvhC*66ujw%*NCOsxA zzCg4rPZcg!)>jgm`5ZS_$IYe{cXFGbYiXvplb!D5X1tT!N^d7C&b&CJ8#L0?Wz-F8 zpdsDlb;DR4(oJ4B_$d3oyJvNLBy@ZvSJo2vFy8Uvy)HQ6&qxCZd>g|w;u}uxD}K=U zLHT_L;%8)Nlzmi=5Z*j@7kw+d7Kd+rb$VxihL0YygS;IucMa(#uN%DWkZ$t2VXZTy zo4js@<{k7x7`R?xeLQ40dEE@{0ZOCE+Re}&pjtPq(}u=WeoS$GH>8`qZie=b)nkhD zz9GBG+s$965ACg5Yn!g;RzrKM>hU$Sx2o37(B7(AH$!`?YTXR&t*Ui1w706(&CuSe zS~o*`t7_d0?X9YHGqks=*3Hn~s#-VP8=IvYW852iHn}%O+Tyr3Hetrl{%vUg)_&ka z#@IZk_Y)nx=w@jDRy~G?_HWg?8QQ;9>t<;GR;`<%{adwehW2mOx*6KPRqJMG|5mM= zq5WI6Zie=6)w*Gi=I1IOo|S*D($A(()$f`39T=W_jPJ>q$E{Z^$ivU3Gj=J%H=p=! z6B7A3Ok^P3q>8|y;|KlQYfksK0v+ed`pkU!PE?NX+!kN*!#DSiA@4|#e*NRkcELx{ za$g(2jm3K`{x%lx)VU438+g&Y=KFy0U4R!uo{1sPgn&~o&)9S2*?sG{eBSiwqWo?p z&zzFJaVy`0iJYXxcl>Cl<-z`q$9HVv`wQ{?pj0-O6`M96-VrdJcLj{o4&&I3@z_S5 zq3zbj`2Nn>BYJ;-2YoH6_jhQY<>vjEI=SQfF-uzR>5?7!`F_jC_3oN&AKT^|Fr)$d z2-aRp@2fSYHF)2i^*{6*1pYqSX9E8DfZrDIF9-atfZq}DF9dvUz`q*sdjtO2fPXFE z_XqrefPX#Uw88$1Gc4OCbdNjtE$@`wGp=`=w7WO%MF9te_)jJHK!OeCYoioq0b; zkH3G#`Bu7)7O8yqF-K>-nNB_e^^X?h=x3<_>q=xNUoH=F=IE?VO{c5_{BrbPXrW3P z{5o|t>!vI+9Q^B|xTCm>Xc?e&>Z#A$sk=Teb8l15`n-?mrC#Jlo^1vGz4C*E6AlpY zy&%&MhNy6$Ansq-S6DZs6VSyJL5@CrM(3Sne9~7>ZRodh_APaSUf4X15L`2lZ`;1V z@HPWp{w_ZRXI%*XBHI~BS1#qZVi zt6YxHj-n&a8QOnd`ujYeU#eqhC;52i{3H4|LT{cU2jOFik5?GwpTEgE GFaN*1AKdN$ literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_4.7.0/bcm56770_a0_ceh.pkg b/dockers/docker-pde/cancun_files/cancun_4.7.0/bcm56770_a0_ceh.pkg new file mode 100644 index 0000000000000000000000000000000000000000..4e1c0cf9a7ef9aea79d2e9f565650f31c2f0eb02 GIT binary patch literal 18020 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�021o>B$_+)jT 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 VOAb#{Uy{S(lEdS#{CMa3{}0XoRV)Ai literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_4.7.0/bcm56770_a0_cih.pkg b/dockers/docker-pde/cancun_files/cancun_4.7.0/bcm56770_a0_cih.pkg new file mode 100644 index 0000000000000000000000000000000000000000..781da77bc063c052d4f5a0d9ad533116ca56530b GIT binary patch literal 970692 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⪼9AARK`f)1{cHSFN0crS0B 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 O^Xeev=k47sAN@Z=vaJLF literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_4.7.0/bcm56770_a0_cmh.pkg b/dockers/docker-pde/cancun_files/cancun_4.7.0/bcm56770_a0_cmh.pkg new file mode 100644 index 0000000000000000000000000000000000000000..b625ff1b05060f511fbe395ceb686bd2db440f97 GIT binary patch literal 4324 zcmchaTZmRw6vy{*#%4@Y$Fa=v7G6rt9)gfa%a4)9yN%;zLa+xF9|o#{ZVU)Y4zK95-j**qOiK&;cUJUa=^#42OEII9OFJXpo!T;NPul3vO?0xn= zXP<9f+p4xDE89XA-aZl?SCm()ZF2(ofRgQfq_8ArEPa2T^m9VDD9&4@Ci|EjPb*sW?Nka>pYauj$o`uC_n;62jDMtN+9a(5r z$>nK}lIYv{QV3^0&BCjt-}-$uso>sGKaAgz5>xtaLfb zr}7hv^LIM=IX@Vyjo-dyz{zd-tKTv^DLn|HG!{%RQ@( zr<$K@$NAUEhsF6hzwyQVdSF@1bAG4z4LM!UPjUDzho4dMoI}j}FMVk7Eou9lYqOsC ziSPcbh%+wy_?T0*uRXK$#puf#)3^3X(ck(Kw|lWk9OvIRIA!$5N4bBY&c@OgU(ent zaOi&5BhFZ7m8|VIuFIG#hpIV;kG;nlUwJbNd#>p}*FVJ^`qgG$X7t6_E3uKsjO$}| z22;0qJU4qESnkx^EJhycaSnS25ksjQobMJ-<;t>nXlRy0hY(wQ;pkTY literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_4.8.0/bcm56770_a0_cch.pkg b/dockers/docker-pde/cancun_files/cancun_4.8.0/bcm56770_a0_cch.pkg new file mode 100644 index 0000000000000000000000000000000000000000..2be24cc0b5029cb700edb5650d1f09b3905be019 GIT binary patch literal 128496 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 literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_4.8.0/bcm56770_a0_cfh.pkg b/dockers/docker-pde/cancun_files/cancun_4.8.0/bcm56770_a0_cfh.pkg new file mode 100644 index 0000000000000000000000000000000000000000..5febf2f7f2a94a8ff4bfa2b82b3e036c3704366d GIT binary patch literal 77172 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
g8cFyD~l~w8smqUi{p5YFKI453~i#L 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 UIXq2$Ne+uk4v(*~%hfafAJT+oB>(^b literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_4.8.0/bcm56770_a0_cih.pkg b/dockers/docker-pde/cancun_files/cancun_4.8.0/bcm56770_a0_cih.pkg new file mode 100644 index 0000000000000000000000000000000000000000..09b9577fe4ee00354bbc65986a27a7b3c7211dcf GIT binary patch literal 995268 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 literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_6.9.1/bcm56870_a0_ceh.pkg b/dockers/docker-pde/cancun_files/cancun_6.9.1/bcm56870_a0_ceh.pkg new file mode 100644 index 0000000000000000000000000000000000000000..a5469025cfad5de2104cc992c645885345931745 GIT binary patch literal 19252 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 literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_6.9.1/bcm56870_a0_cfh.pkg b/dockers/docker-pde/cancun_files/cancun_6.9.1/bcm56870_a0_cfh.pkg new file mode 100644 index 0000000000000000000000000000000000000000..9c664c35334eebe944a2a417a36d5379890e3ff3 GIT binary patch literal 89948 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 NIOJ>p*M9W9{|5rwR}KIG literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_6.9.1/bcm56870_a0_cmh.pkg b/dockers/docker-pde/cancun_files/cancun_6.9.1/bcm56870_a0_cmh.pkg new file mode 100644 index 0000000000000000000000000000000000000000..57f1c5ae40bc672f7131188a3c23f5bc8f058111 GIT binary patch literal 4324 zcmchaONduh9LLXfQZvoT#`012fHcQPn}`q}IgIG^&{4-%8(mbm5PYnPsX%BUA}R=? zp&LOng;}-Hh+4IXAaqLXwa7u;h~}aYH`VuZ@BPK?_dmaZ3GoNtIp_R-pYyxtoO|y7 zoLS$!s=H@pcPi4(bH%tZ#exTt>awY$$52o&+bRd7E@_UK`(->cvM-{5^MBK5Uux7x zTD_tUH>JDMXf4VlX@=A(y(D!>E2TH3ccfj?|FI9%Z?AM%Iw1{6X6IG^TDmCRknTur zqbypL?P||;zW)*zi^s>|~nf0o^ zS?ZVeNynuD=}T!)G8;S0KI<4JX8nDsrAiYe4K2OZmC}UcMOs$3i6LyOV$?s_U8Dz9 z@+jI9B>MI()Hn|nX?g9pey5(SxcAf#Hj(RmQ?e0La}@#n>}A6Qe{cSDO)dS5@< z{6^SX(+9h%81>%%qAc&sWp3^B{LjEL&(EuUp8ut!Tlx6`|7*a%Q1efy zWS-YFw{JhG^3t|_X)(rkR0kX-vFqZA?SDHZerKr@v+~%Is!bf9`Tg@Ob}ygDI81*1 zRw#xMZ@!;rYM@KXZ5 zH{f~Cx%{gGetN*K33x8W>>bV{O1nqcKH}L}^A15DKi{<_)%w0T4|4hK{K(}e=JWRj z`8hurtBv38GT`L4{LQ<}ZuyP3`P%QD@y+@28|lZhPCg92x&L8v^JUGN<7wvS**^bz z`7ocK^BbS%Hvr2#&-tC>HsyO4q zkB>Pu``R~4UyQ!IWBPU-sQO!9;#c|$zic>~^e3TzA)>%~h{PXNL1r81OJY#$g z`|gNixf~WFPTl9QZ{41e%fb0;@mvmF+5e5(n)q1A2X@Pu zB5_xw|G8b&ePL%&ooB@9GfSdw-y-jX_k|B(aQOHx+5bb^i*)d}ly3i7z29qU^9(cV z$9Lq7JZ9v@>|R6N;(m{^*KLlLpEak>Jex7wV=vAx%00%pg~7_Vl=8cxNOn)>9ARE- m^pC{sMb$kB#&T|w|CPGk|3{JT?5Wn2Id2>$_E+b;ng0O#Y`<>+ literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/docker_init.sh b/dockers/docker-pde/docker_init.sh old mode 100644 new mode 100755 index f8e45e99d98d..4404095ded33 --- a/dockers/docker-pde/docker_init.sh +++ b/dockers/docker-pde/docker_init.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash + set -x start_bcm() @@ -10,6 +11,8 @@ start_bcm() PLATFORM_DIR=/usr/share/sonic/platform HWSKU_DIR=/usr/share/sonic/hwsku +# Default use python3 version +SONIC_PLATFORM_API_PYTHON_VERSION=3 mkdir -p /etc/sai.d/ @@ -20,23 +23,28 @@ fi . /usr/bin/syncd_init_common.sh config_syncd -# If the sonic-platform package is not installed, try to install it -pip show sonic-platform > /dev/null 2>&1 +# If the Python 3 sonic-platform package is not installed, try to install it +python3 -c "import sonic_platform" > /dev/null 2>&1 || pip3 show sonic-platform > /dev/null 2>&1 if [ $? -ne 0 ]; then - SONIC_PLATFORM_WHEEL="/usr/share/sonic/platform/sonic_platform-1.0-py2-none-any.whl" + SONIC_PLATFORM_WHEEL="/usr/share/sonic/platform/sonic_platform-1.0-py3-none-any.whl" echo "sonic-platform package not installed, attempting to install..." if [ -e ${SONIC_PLATFORM_WHEEL} ]; then - pip install ${SONIC_PLATFORM_WHEEL} + pip3 install ${SONIC_PLATFORM_WHEEL} if [ $? -eq 0 ]; then echo "Successfully installed ${SONIC_PLATFORM_WHEEL}" + SONIC_PLATFORM_API_PYTHON_VERSION=3 else echo "Error: Failed to install ${SONIC_PLATFORM_WHEEL}" fi else echo "Error: Unable to locate ${SONIC_PLATFORM_WHEEL}" fi +else + SONIC_PLATFORM_API_PYTHON_VERSION=3 fi start_bcm -exec /usr/bin/supervisord +exec /usr/local/bin/supervisord + + diff --git a/dockers/docker-pde/syncd_init_common.sh b/dockers/docker-pde/syncd_init_common.sh new file mode 100755 index 000000000000..0212f842329a --- /dev/null +++ b/dockers/docker-pde/syncd_init_common.sh @@ -0,0 +1,254 @@ +#!/usr/bin/env bash + +CMD_SYNCD=/usr/bin/syncd + +# dsserve: domain socket server for stdio +CMD_DSSERVE=/usr/bin/dsserve +CMD_DSSERVE_ARGS="$CMD_SYNCD --diag" + +ENABLE_SAITHRIFT=0 + +PLATFORM_DIR=/usr/share/sonic/platform +HWSKU_DIR=/usr/share/sonic/hwsku + +SONIC_ASIC_TYPE=$(sonic-cfggen -y /etc/sonic/sonic_version.yml -v asic_type) + +if [ -x $CMD_DSSERVE ]; then + CMD=$CMD_DSSERVE + CMD_ARGS=$CMD_DSSERVE_ARGS +else + CMD=$CMD_SYNCD + CMD_ARGS= +fi + +# Use temporary view between init and apply +CMD_ARGS+=" -u" + +case "$(cat /proc/cmdline)" in + *SONIC_BOOT_TYPE=fastfast*) + if [ -e /var/warmboot/warm-starting ]; then + FASTFAST_REBOOT='yes' + fi + ;; + *SONIC_BOOT_TYPE=fast*|*fast-reboot*) + FAST_REBOOT='yes' + ;; + *) + FAST_REBOOT='no' + FASTFAST_REBOOT='no' + ;; +esac + + +function check_warm_boot() +{ + # FIXME: if we want to continue start option approach, then we need to add + # code here to support redis database query. + # SYSTEM_WARM_START=`sonic-db-cli STATE_DB hget "WARM_RESTART_ENABLE_TABLE|system" enable` + # SERVICE_WARM_START=`sonic-db-cli STATE_DB hget "WARM_RESTART_ENABLE_TABLE|${SERVICE}" enable` + # SYSTEM_WARM_START could be empty, always make WARM_BOOT meaningful. + # if [[ x"$SYSTEM_WARM_START" == x"true" ]] || [[ x"$SERVICE_WARM_START" == x"true" ]]; then + # WARM_BOOT="true" + # else + WARM_BOOT="false" + # fi +} + + +function set_start_type() +{ + if [ x"$WARM_BOOT" == x"true" ]; then + CMD_ARGS+=" -t warm" + elif [ x"$FAST_REBOOT" == x"yes" ]; then + CMD_ARGS+=" -t fast" + elif [ x"$FASTFAST_REBOOT" == x"yes" ]; then + CMD_ARGS+=" -t fastfast" + fi +} + + +config_syncd_bcm() +{ + PLATFORM_COMMON_DIR=/usr/share/sonic/device/x86_64-broadcom_common + PLT_CONFIG_BCM=$(find $HWSKU_DIR -name '*.bcm') + + if [ ! -z "$PLT_CONFIG_BCM" ]; then + cp -f $HWSKU_DIR/*.config.bcm /tmp + cp -f /etc/sai.d/sai.profile /tmp + CONFIG_BCM=$(find /tmp -name '*.bcm') + SAI_PROFILE=$(find /tmp -name 'sai.profile') + sed -i 's+/usr/share/sonic/hwsku+/tmp+g' $SAI_PROFILE + + #Get first three characters of chip id + readline=$(grep '0x14e4' /proc/linux-kernel-bde) + chip_id=${readline#*0x14e4:0x} + chip_id=${chip_id::3} + COMMON_CONFIG_BCM=$(find $PLATFORM_COMMON_DIR/x86_64-broadcom_${chip_id} -name '*.bcm') + + if [ -f $PLATFORM_COMMON_DIR/x86_64-broadcom_${chip_id}/*.bcm ]; then + for file in $CONFIG_BCM; do + echo "" >> $file + echo "# Start of chip common properties" >> $file + while read line + do + line=$( echo $line | xargs ) + if [ ! -z "$line" ];then + if [ "${line::1}" == '#' ];then + echo $line >> $file + else + sedline=${line%=*} + if grep -q $sedline $file ;then + echo "Keep the config $(grep $sedline $file) in $file" + else + echo $line >> $file + fi + fi + fi + done < $COMMON_CONFIG_BCM + echo "# End of chip common properties" >> $file + done + echo "Merging $PLT_CONFIG_BCM with $COMMON_CONFIG_BCM, merge files stored in $CONFIG_BCM" + fi + #sync the file system + sync + + # copy the final config.bcm and sai.profile to the shared folder for 'show tech' + cp -f /tmp/sai.profile /var/run/sswsyncd/ + cp -f /tmp/*.bcm /var/run/sswsyncd/ + fi + + if [ -f "/tmp/sai.profile" ]; then + CMD_ARGS+=" -p /tmp/sai.profile" + elif [ -f "/etc/sai.d/sai.profile" ]; then + CMD_ARGS+=" -p /etc/sai.d/sai.profile" + else + CMD_ARGS+=" -p $HWSKU_DIR/sai.profile" + fi + + [ -e /dev/linux-bcm-knet ] || mknod /dev/linux-bcm-knet c 122 0 + [ -e /dev/linux-user-bde ] || mknod /dev/linux-user-bde c 126 0 + [ -e /dev/linux-kernel-bde ] || mknod /dev/linux-kernel-bde c 127 0 +} + +config_syncd_mlnx() +{ + CMD_ARGS+=" -p /tmp/sai.profile" + + [ -e /dev/sxdevs/sxcdev ] || ( mkdir -p /dev/sxdevs && mknod /dev/sxdevs/sxcdev c 231 193 ) + + # Read MAC address + MAC_ADDRESS="$(sonic-cfggen -d -v DEVICE_METADATA.localhost.mac)" + + # Write MAC address into /tmp/profile file. + cat $HWSKU_DIR/sai.profile > /tmp/sai.profile + echo "DEVICE_MAC_ADDRESS=$MAC_ADDRESS" >> /tmp/sai.profile + echo "SAI_WARM_BOOT_WRITE_FILE=/var/warmboot/" >> /tmp/sai.profile +} + +config_syncd_centec() +{ + CMD_ARGS+=" -p $HWSKU_DIR/sai.profile" + + [ -e /dev/linux_dal ] || mknod /dev/linux_dal c 198 0 + [ -e /dev/net/tun ] || ( mkdir -p /dev/net && mknod /dev/net/tun c 10 200 ) +} + +config_syncd_cavium() +{ + CMD_ARGS+=" -p $HWSKU_DIR/sai.profile -d" + + export XP_ROOT=/usr/bin/ + + # Wait until redis-server starts + until [ $(sonic-db-cli PING | grep -c PONG) -gt 0 ]; do + sleep 1 + done +} + +config_syncd_marvell() +{ + CMD_ARGS+=" -p $HWSKU_DIR/sai.profile" + + [ -e /dev/net/tun ] || ( mkdir -p /dev/net && mknod /dev/net/tun c 10 200 ) +} + +config_syncd_barefoot() +{ + PROFILE_FILE="$HWSKU_DIR/sai.profile" + if [ ! -f $PROFILE_FILE ]; then + # default profile file + PROFILE_FILE="/tmp/sai.profile" + echo "SAI_KEY_WARM_BOOT_WRITE_FILE=/var/warmboot/sai-warmboot.bin" > $PROFILE_FILE + echo "SAI_KEY_WARM_BOOT_READ_FILE=/var/warmboot/sai-warmboot.bin" >> $PROFILE_FILE + fi + CMD_ARGS+=" -p $PROFILE_FILE" + + # Check and load SDE profile + P4_PROFILE=$(sonic-cfggen -d -v 'DEVICE_METADATA["localhost"]["p4_profile"]') + if [[ -n "$P4_PROFILE" ]]; then + if [[ ( -d /opt/bfn/install_${P4_PROFILE} ) && ( -L /opt/bfn/install || ! -e /opt/bfn/install ) ]]; then + ln -srfn /opt/bfn/install_${P4_PROFILE} /opt/bfn/install + fi + fi + export PYTHONHOME=/opt/bfn/install/ + export PYTHONPATH=/opt/bfn/install/ + export ONIE_PLATFORM=`grep onie_platform /etc/machine.conf | awk 'BEGIN { FS = "=" } ; { print $2 }'` + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/bfn/install/lib/platform/$ONIE_PLATFORM:/opt/bfn/install/lib:/opt/bfn/install/lib/tofinopd/switch + ./opt/bfn/install/bin/dma_setup.sh +} + +config_syncd_nephos() +{ + CMD_ARGS+=" -p $HWSKU_DIR/sai.profile" +} + +config_syncd_vs() +{ + CMD_ARGS+=" -p $HWSKU_DIR/sai.profile" +} + +config_syncd_innovium() +{ + CMD_ARGS+=" -p $HWSKU_DIR/sai.profile" + ulimit -s 65536 + export II_ROOT="/var/log/invm" + export II_APPEND_LOG=1 + mkdir -p $II_ROOT +} + +config_syncd() +{ + check_warm_boot + + if [ "$SONIC_ASIC_TYPE" == "broadcom" ]; then + config_syncd_bcm + elif [ "$SONIC_ASIC_TYPE" == "mellanox" ]; then + config_syncd_mlnx + elif [ "$SONIC_ASIC_TYPE" == "cavium" ]; then + config_syncd_cavium + elif [ "$SONIC_ASIC_TYPE" == "centec" ]; then + config_syncd_centec + elif [ "$SONIC_ASIC_TYPE" == "marvell" ]; then + config_syncd_marvell + elif [ "$SONIC_ASIC_TYPE" == "barefoot" ]; then + config_syncd_barefoot + elif [ "$SONIC_ASIC_TYPE" == "nephos" ]; then + config_syncd_nephos + elif [ "$SONIC_ASIC_TYPE" == "vs" ]; then + config_syncd_vs + elif [ "$SONIC_ASIC_TYPE" == "innovium" ]; then + config_syncd_innovium + else + echo "Unknown ASIC type $SONIC_ASIC_TYPE" + exit 1 + fi + + set_start_type + + if [ ${ENABLE_SAITHRIFT} == 1 ]; then + CMD_ARGS+=" -r -m $HWSKU_DIR/port_config.ini" + fi + + [ -r $PLATFORM_DIR/syncd.conf ] && . $PLATFORM_DIR/syncd.conf +} + diff --git a/platform/broadcom/docker-pde.mk b/platform/broadcom/docker-pde.mk index d433160e2a7d..a16c0c1f16e8 100644 --- a/platform/broadcom/docker-pde.mk +++ b/platform/broadcom/docker-pde.mk @@ -16,17 +16,20 @@ ifeq ($(PDDF_SUPPORT), y) $(DOCKER_PDE)_PYTHON_WHEELS += $(PDDF_PLATFORM_API_BASE_PY3) endif $(DOCKER_PDE)_PYTHON_WHEELS += $(SONIC_DAEMON_BASE_PY3) -$(DOCKER_PDE)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_DEPENDS) -$(DOCKER_PDE)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_IMAGE_PACKAGES) -$(DOCKER_PDE)_LOAD_DOCKERS = $(DOCKER_CONFIG_ENGINE_BUSTER) +$(DOCKER_PDE)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_DEPENDS) +$(DOCKER_PDE)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_IMAGE_PACKAGES) +$(DOCKER_PDE)_LOAD_DOCKERS = $(DOCKER_CONFIG_ENGINE_BULLSEYE) SONIC_DOCKER_IMAGES += $(DOCKER_PDE) -SONIC_BUSTER_DOCKERS += $(DOCKER_PDE) +SONIC_BULLSEYE_DOCKERS += $(DOCKER_PDE) SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_PDE) -SONIC_BUSTER_DBG_DOCKERS += $(DOCKER_PDE_DBG) +SONIC_BULLSEYE_DBG_DOCKERS += $(DOCKER_PDE_DBG) SONIC_DOCKER_DBG_IMAGES += $(DOCKER_PDE_DBG) SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_PDE_DBG) +$(DOCKER_PDE)_VERSION = 1.0.0 +$(DOCKER_PDE)_PACKAGE_NAME = pde + $(DOCKER_PDE)_CONTAINER_NAME = pde $(DOCKER_PDE)_RUN_OPT += --privileged -t $(DOCKER_PDE)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro @@ -35,12 +38,13 @@ $(DOCKER_PDE)_RUN_OPT += -v /usr/lib/python2.7/dist-packages:/usr/share/sonic/cl $(DOCKER_PDE)_RUN_OPT += -v /usr/local/lib/python3.7/dist-packages/utilities_common:/usr/local/lib/python3.7/dist-packages/utilities_common:ro $(DOCKER_PDE)_RUN_OPT += -v /var/log/syslog:/var/log/syslog:ro +$(DOCKER_PDE)_RUN_OPT += -v /var/log/ramfs:/var/log/ramfs:ro $(DOCKER_PDE)_RUN_OPT += -v /lib/modules:/lib/modules:ro $(DOCKER_PDE)_RUN_OPT += -v /boot:/boot:ro $(DOCKER_PDE)_RUN_OPT += -v /var/log/ramfs:/var/log/ramfs:ro $(DOCKER_PDE)_RUN_OPT += -v /usr/share/sonic/device/x86_64-broadcom_common:/usr/share/sonic/device/x86_64-broadcom_common:ro $(DOCKER_PDE)_RUN_OPT += -v /usr/share/sonic/device/pddf:/usr/share/sonic/device/pddf:ro - +$(DOCKER_PDE)_RUN_OPT += -v /usr/share/sonic/device/x86_64-broadcom_common:/usr/share/sonic/device/x86_64-broadcom_common:ro $(DOCKER_PDE)_BASE_IMAGE_FILES += pde-test:/usr/local/bin/pde-test $(DOCKER_PDE)_BASE_IMAGE_FILES += pde-bench:/usr/local/bin/pde-bench $(DOCKER_PDE)_BASE_IMAGE_FILES += pde-stress:/usr/local/bin/pde-stress From a9f2edd19544a83e8be3873fe0c2811b0933bd7c Mon Sep 17 00:00:00 2001 From: Junhua Zhai Date: Thu, 30 Jun 2022 07:54:36 +0000 Subject: [PATCH 198/259] Upgrade gbsyncd container to bullseye (#11288) Update the base of docker gbsyncd from buster to bullseye --- platform/components/docker-gbsyncd-credo/Dockerfile.j2 | 2 +- platform/template/docker-gbsyncd-base.mk | 10 +++++----- platform/vs/docker-gbsyncd-vs/Dockerfile.j2 | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/platform/components/docker-gbsyncd-credo/Dockerfile.j2 b/platform/components/docker-gbsyncd-credo/Dockerfile.j2 index 98717c31e057..3010dc7fdad5 100644 --- a/platform/components/docker-gbsyncd-credo/Dockerfile.j2 +++ b/platform/components/docker-gbsyncd-credo/Dockerfile.j2 @@ -1,4 +1,4 @@ -FROM docker-config-engine-buster-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} +FROM docker-config-engine-bullseye-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} ARG docker_container_name RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%syslogtag%/;" /etc/rsyslog.conf diff --git a/platform/template/docker-gbsyncd-base.mk b/platform/template/docker-gbsyncd-base.mk index 0b02557845f9..712554405080 100644 --- a/platform/template/docker-gbsyncd-base.mk +++ b/platform/template/docker-gbsyncd-base.mk @@ -9,18 +9,18 @@ $(DOCKER_GBSYNCD_BASE)_PATH = $(PLATFORM_PATH)/docker-gbsyncd-$(DOCKER_GBSYNCD_P $(DOCKER_GBSYNCD_BASE)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) -$(DOCKER_GBSYNCD_BASE)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BUSTER) +$(DOCKER_GBSYNCD_BASE)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BULLSEYE) -$(DOCKER_GBSYNCD_BASE)_DBG_DEPENDS += $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_DEPENDS) +$(DOCKER_GBSYNCD_BASE)_DBG_DEPENDS += $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_DEPENDS) -$(DOCKER_GBSYNCD_BASE)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_IMAGE_PACKAGES) +$(DOCKER_GBSYNCD_BASE)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_IMAGE_PACKAGES) SONIC_DOCKER_IMAGES += $(DOCKER_GBSYNCD_BASE) -SONIC_BUSTER_DOCKERS += $(DOCKER_GBSYNCD_BASE) +SONIC_BULLSEYE_DOCKERS += $(DOCKER_GBSYNCD_BASE) SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_GBSYNCD_BASE) SONIC_DOCKER_DBG_IMAGES += $(DOCKER_GBSYNCD_BASE_DBG) -SONIC_BUSTER_DBG_DOCKERS += $(DOCKER_GBSYNCD_BASE_DBG) +SONIC_BULLSEYE_DBG_DOCKERS += $(DOCKER_GBSYNCD_BASE_DBG) SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_GBSYNCD_BASE_DBG) $(DOCKER_GBSYNCD_BASE)_CONTAINER_NAME = gbsyncd diff --git a/platform/vs/docker-gbsyncd-vs/Dockerfile.j2 b/platform/vs/docker-gbsyncd-vs/Dockerfile.j2 index 08956a44ce77..4dd9abf49ee7 100644 --- a/platform/vs/docker-gbsyncd-vs/Dockerfile.j2 +++ b/platform/vs/docker-gbsyncd-vs/Dockerfile.j2 @@ -1,4 +1,4 @@ -FROM docker-config-engine-buster-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} +FROM docker-config-engine-bullseye-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} ARG docker_container_name From 7e4883e71f1ad627d3d4031ef820ac961aa24976 Mon Sep 17 00:00:00 2001 From: Hua Liu <58683130+liuh-80@users.noreply.github.com> Date: Fri, 12 Aug 2022 20:57:24 +0800 Subject: [PATCH 199/259] Fix docker database flush_unused_database failed issue (#11600) (#11677) Fix docker-database flush_unused_database failed issue: https://github.com/Azure/sonic-buildimage/issues/11597 When change flush_unused_database from use swsssdk to use swsscommon, get_instancelist() and get_dblist() name changed but not update. Change flush_unused_database code to use swsscommon API: Change get_instancelist to getInstanceList. Change get_dblist to getDbList. Pass all E2E test. Manually check syslog make sure error log not exist and swss, syncd, bgp service started. Search code in Azure make sure there all similer case are fixed in this PR. - [ ] 201811 - [ ] 201911 - [ ] 202006 - [ ] 202012 - [ ] 202106 - [ ] 202111 - [ ] 202205 Fix docker-database flush_unused_database failed issue: https://github.com/Azure/sonic-buildimage/issues/11597 When change flush_unused_database from use swsssdk to use swsscommon, get_instancelist() and get_dblist() name changed but not update. Co-authored-by: liuh-80 #### Why I did it #### How I did it #### How to verify it #### Which release branch to backport (provide reason below if selected) - [ ] 201811 - [ ] 201911 - [ ] 202006 - [ ] 202012 - [ ] 202106 - [ ] 202111 - [ ] 202205 #### Description for the changelog #### Link to config_db schema for YANG module changes #### A picture of a cute animal (not mandatory but encouraged) --- dockers/docker-database/docker-database-init.sh | 2 +- dockers/docker-database/flush_unused_database | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dockers/docker-database/docker-database-init.sh b/dockers/docker-database/docker-database-init.sh index 413bbc0b20df..9b92b5890c2d 100755 --- a/dockers/docker-database/docker-database-init.sh +++ b/dockers/docker-database/docker-database-init.sh @@ -79,7 +79,7 @@ rm $db_cfg_file_tmp # copy dump.rdb file to each instance for restoration DUMPFILE=/var/lib/redis/dump.rdb -redis_inst_list=`/usr/bin/python3 -c "import swsssdk; print(' '.join(swsssdk.SonicDBConfig.get_instancelist().keys()))"` +redis_inst_list=`/usr/bin/python3 -c "from swsscommon import swsscommon; print(' '.join(swsscommon.SonicDBConfig.getInstanceList().keys()))"` for inst in $redis_inst_list do mkdir -p /var/lib/$inst diff --git a/dockers/docker-database/flush_unused_database b/dockers/docker-database/flush_unused_database index e1f7394d9776..cc69fc86eb72 100755 --- a/dockers/docker-database/flush_unused_database +++ b/dockers/docker-database/flush_unused_database @@ -11,15 +11,15 @@ while(True): break time.sleep(1) -instlists = swsssdk.SonicDBConfig.get_instancelist() +instlists = swsscommon.SonicDBConfig.getInstanceList() for instname, v in instlists.items(): - insthost = v['hostname'] - instsocket = v['unix_socket_path'] + insthost = v.hostname + instsocket = v.unixSocketPath - dblists = swsssdk.SonicDBConfig.get_dblist() + dblists = swsscommon.SonicDBConfig.getDbList() for dbname in dblists: - dbid = swsssdk.SonicDBConfig.get_dbid(dbname) - dbinst = swsssdk.SonicDBConfig.get_instancename(dbname) + dbid = swsscommon.SonicDBConfig.getDbId(dbname) + dbinst = swsscommon.SonicDBConfig.getDbInst(dbname) # this DB is on current instance, skip flush if dbinst == instname: From ad36e1727fad67b027b62d424e12748f91a06734 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Fri, 12 Aug 2022 21:16:38 -0700 Subject: [PATCH 200/259] [202205][kernel][swss][utilities][platform-daemon][linkmgrd] advance submodule head (#11705) Kernel: * 86c4b66 2022-07-28 | [Mellanox] Add new kernel patches from HW-MGMT package V.7.0020.3005 (#287) (HEAD -> 202205) [Kebo Liu] * 3a8416a 2022-07-05 | [patch] mlxsw: i2c: Prevent transaction execution for special chip (#279) [Stepan Blyshchak] swss: * 3f69944 2022-08-10 | Set internal class state to reflect the actual state (#2410) (HEAD -> 202205, tag: foo) [Prince Sunny] * 87e98eb 2022-08-09 | [portsorch] Expose supported FEC modes to STABE_DB and check whether FEC mode is supported before setting it (#2400) [Stephen Sun] * e71ab99 2022-07-29 | portsorch: initial support for link-training (#2359) [Dante (Kuo-Jung) Su] * ed5e5be 2022-07-08 | Port configuration incremental update support (#2305) [Junchao-Mellanox] utilities: * 0df3ba8 2022-08-12 | Revert "Improve the way to check port type of RJ45 port (#2249)" (HEAD -> 202205) [Ying Xie] * 9b21903 2022-08-12 | Fix test failure in dump table test in 202205 (#2307) (HEAD -> 202205, github/202205) [Stephen Sun] * 750d1db 2022-08-11 | Convert IPv6 addresses to lowercase in apply-patch (#2299) (HEAD -> 202205) [dbarashinvd] * 555947e 2022-08-09 | [config][muxcable] add support to enable/disable ycable telemetry (#2297) [vdahiya12] * 978f416 2022-08-09 | Fix GCU bug when backend service modifying config (#2295) [jingwenxie] * 8fed381 2022-08-02 | [intfutil] Check whether the FEC mode is supported on the platform before configuring it to CONFIG_DB (#2223) (github/202205) [Stephen Sun] * a1a09e4 2022-07-29 | Improve the way to check port type of RJ45 port (#2249) [Stephen Sun] * 9bdbfb8 2022-05-19 | sonic-utils: initial support for link-training (#2071) [Dante (Kuo-Jung) Su] * c088ec4 2022-08-10 | Support to enable fips for the command sonic_installer (#2154) (#2303) [xumia] platform-daemon: * 767cfb6 2022-08-09 | [ycabled] add capability to enable/disable telemetry (#279) (HEAD -> 202205) [vdahiya12] linkmgrd: * cf1ba2b 2022-08-12 | wait for handler to be completed (#114) (HEAD -> 202205, github/202205) [Jing Zhang] * e99026c 2022-08-11 | [lgtm]: add uuid-dev to lgtm prepare (#112) (HEAD -> 202205) [Jing Zhang] * bd1b7f0 2022-08-11 | Adjust `DbInterfaceRaceConditionCheck` to Wait Longer for Handlers to be executed (#111) (HEAD -> 202205, github/202205) [Jing Zhang] * e9dc6b2 2022-08-11 | Backoff mux probing for server down scenario (#106) [Jing Zhang] * 0d61171 2022-08-09 | Fix race condition caused by strand `wrap` method (#104) [Jing Zhang] * e9ede7d 2022-07-02 | Enforce switch after config mux to active (#95) [Longxiang Lyu] * 15dbc30 2022-06-30 | Add unittest to verify mux toggle active (#94) [Longxiang Lyu] Signed-off-by: Ying Xie --- .gitmodules | 4 ++++ src/linkmgrd | 2 +- src/sonic-linux-kernel | 2 +- src/sonic-platform-daemons | 2 +- src/sonic-swss | 2 +- src/sonic-utilities | 2 +- 6 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index 2a0e230e3ed8..33f79b5f9e87 100644 --- a/.gitmodules +++ b/.gitmodules @@ -35,6 +35,10 @@ path = src/sonic-utilities url = https://github.com/Azure/sonic-utilities branch = 202205 +[submodule "src/sonic-linux-kernel"] + path = src/sonic-linux-kernel + url = https://github.com/sonic-net/sonic-linux-kernel + branch = 202205 [submodule "platform/broadcom/sonic-platform-modules-arista"] path = platform/broadcom/sonic-platform-modules-arista url = https://github.com/aristanetworks/sonic diff --git a/src/linkmgrd b/src/linkmgrd index 17240f1d412f..cf1ba2b45357 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit 17240f1d412f8c0355f2288944fbc423a247f77e +Subproject commit cf1ba2b4535728f769d913567bc9153a99a16ef0 diff --git a/src/sonic-linux-kernel b/src/sonic-linux-kernel index b9083b1a271e..86c4b66a63f0 160000 --- a/src/sonic-linux-kernel +++ b/src/sonic-linux-kernel @@ -1 +1 @@ -Subproject commit b9083b1a271e63757bef4fcd914ed524bd3c35c9 +Subproject commit 86c4b66a63f0e76054bd35a4c6a2a2c39b67d08a diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index 9507e6cd5575..767cfb60d297 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit 9507e6cd5575fd011886a3a32d0629e0f44a514c +Subproject commit 767cfb60d2978f38a935825ada62fd9ffc73820a diff --git a/src/sonic-swss b/src/sonic-swss index d772a70d5397..3f69944d8be7 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit d772a70d539721644d4f240a165c7f0fa2de739d +Subproject commit 3f69944d8be7893c79b2c0e96972190cad9c3b38 diff --git a/src/sonic-utilities b/src/sonic-utilities index 8cbbe4f0091b..0df3ba812fbd 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 8cbbe4f0091bae9e55fd750b96c38a82475925a2 +Subproject commit 0df3ba812fbdc700b4170ebf29b5a97f87407eb1 From fd5ddbad8c379bea568280c5cf052505e1a68dd5 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Sat, 13 Aug 2022 07:53:05 -0700 Subject: [PATCH 201/259] [202205][utilities] advance submodule head (#11729) utilities: * fbf82b9 2022-08-08 | Fix the issue that sonic_platform is not installed on vs image (#2300) (HEAD -> 202205, github/202205) [Stephen Sun] * 19a3540 2022-08-13 | Revert "Revert "Improve the way to check port type of RJ45 port (#2249)"" [Ying Xie] Signed-off-by: Ying Xie Signed-off-by: Ying Xie --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index 0df3ba812fbd..fbf82b93b7c5 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 0df3ba812fbdc700b4170ebf29b5a97f87407eb1 +Subproject commit fbf82b93b7c5812bc87664b76dca98eb8ed465ab From 5c306cc2e584970ef5803febe4237f67a5047d62 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Mon, 15 Aug 2022 13:50:59 +0800 Subject: [PATCH 202/259] [ci/build]: Upgrade SONiC package versions (#11679) --- .../build-sonic-slave-bullseye/versions-git | 4 +- .../build-sonic-slave-bullseye/versions-py3 | 2 +- .../versions-py3-all-arm64 | 1 + .../versions-py3-all-armhf | 1 + .../build-sonic-slave-bullseye/versions-web | 36 +++++----- .../build-sonic-slave-buster/versions-py3 | 2 +- files/build/versions/default/versions-git | 6 +- files/build/versions/default/versions-web | 72 +++++++++---------- .../versions-deb-bullseye | 5 +- .../versions-deb-bullseye-armhf | 1 + .../versions-deb-bullseye | 4 +- .../docker-orchagent/versions-deb-bullseye | 2 +- .../versions-deb-bullseye | 3 +- .../versions/dockers/docker-ptf/versions-py2 | 2 +- .../docker-sonic-mgmt-framework/versions-py3 | 6 +- .../dockers/docker-sonic-vs/versions-py3 | 2 +- .../docker-syncd-mlnx/versions-deb-bullseye | 2 +- .../docker-teamd/versions-deb-bullseye | 29 ++++++++ .../dockers/docker-teamd/versions-deb-buster | 22 ------ .../versions-deb-bullseye | 11 +-- .../dockers/sonic-slave-bullseye/versions-git | 2 +- .../sonic-slave-buster/versions-deb-buster | 4 +- .../dockers/sonic-slave-buster/versions-git | 2 +- .../dockers/sonic-slave-stretch/versions-git | 2 +- .../versions/host-image/versions-deb-bullseye | 18 +++-- .../host-image/versions-deb-bullseye-armhf | 1 + files/build/versions/host-image/versions-py3 | 2 +- .../host-image/versions-py3-all-arm64 | 1 + .../host-image/versions-py3-all-armhf | 3 +- 29 files changed, 136 insertions(+), 112 deletions(-) create mode 100644 files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye-armhf create mode 100644 files/build/versions/dockers/docker-teamd/versions-deb-bullseye delete mode 100644 files/build/versions/dockers/docker-teamd/versions-deb-buster create mode 100644 files/build/versions/host-image/versions-py3-all-arm64 diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-git b/files/build/versions/build/build-sonic-slave-bullseye/versions-git index a6c5a5b75ec6..6198befa025e 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-git +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-git @@ -1,8 +1,8 @@ https://github.com/CESNET/libyang.git==0c609c35080f523c9696db48976de8257d174102 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b -https://github.com/flashrom/flashrom.git==36299dbab2397f25c4009339018065dc79d77452 -https://github.com/FreeRADIUS/freeradius-server.git==6aa357b999415e58e6fbb4db269d17c474b3ee04 +https://github.com/flashrom/flashrom.git==02f43e89bae6bcdd7505af0ccd361e6eb3d3c74c +https://github.com/FreeRADIUS/freeradius-server.git==aad788744b7f2df8182a5ecdd6b470c250aa4020 https://github.com/FreeRADIUS/pam_radius.git==272f6420c5c01f9bdb27c98e5edb44de406f4631 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 index 80d6298be071..4e672aada23e 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 @@ -4,7 +4,7 @@ colorful==0.5.4 docker==5.0.3 docker-image-py==0.1.12 enlighten==1.10.2 -filelock==3.7.1 +filelock==3.8.0 ijson==2.6.1 ipaddress==1.0.23 jsondiff==2.0.0 diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-arm64 b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-arm64 index 67e4dec5743e..bc236e03f7ee 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-arm64 +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-arm64 @@ -1,4 +1,5 @@ bitarray==1.5.3 click==7.0 +filelock==3.7.1 lxml==4.6.5 redis==3.5.3 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-armhf b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-armhf index 67e4dec5743e..bc236e03f7ee 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-armhf +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-armhf @@ -1,4 +1,5 @@ bitarray==1.5.3 click==7.0 +filelock==3.7.1 lxml==4.6.5 redis==3.5.3 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-web b/files/build/versions/build/build-sonic-slave-bullseye/versions-web index 78ad627bca63..a13096572821 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-web +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-web @@ -30,23 +30,23 @@ https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_ https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1-3.debian.tar.xz?sv=2020-04-08&st=2021-12-14T08%3A00%3A00Z&se=2030-12-14T18%3A18%3A00Z&sr=b&sp=r&sig=C8aYSvaQgMJ58Z13kFY0Wr0J0QF6i7WCeET9%2BpF%2BAxc%3D==e8d1e99b4b9e93f5dde860f6d55f42e3 https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1-3.dsc?sv=2020-04-08&st=2021-12-14T00%3A00%3A00Z&se=2050-12-15T00%3A00%3A00Z&sr=b&sp=r&sig=fIy6dVz3s59K0TiMkTlwSWN8lCzRl3i76ruAtROhfWA%3D==df3ed0dd965589fd09bf6a2920bc273e https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1.orig.tar.gz?sv=2020-04-08&st=2021-12-14T00%3A00%3A00Z&se=2050-12-15T00%3A00%3A00Z&sr=b&sp=r&sig=gpihyZv%2Fr0bVrCUKCKwpS4bIoqiPpdd%2BgCfuUGNHOUc%3D==780d14908dc1a6aa2790de376ab56b7a -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==eafff1fa77d5e770bc73e06ff8840cb6 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-go_1.15.15-1~deb11u4+fips_amd64.deb==b60f6db62805696b47ab422ab798fe56 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-src_1.15.15-1~deb11u4+fips_amd64.deb==1c920937aa49b602a1bfec3c49747131 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==e18fed0c17f90b48c19ccde122c4d5c1 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libk5crypto3_1.18.3-6+deb11u1+fips_amd64.deb==c5b36c1b743b16c8d1d9c4ced34536a8 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libpython3.9-minimal_3.9.2-1+fips_amd64.deb==e49ec97fc613209a562ef459dc6fa097 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libpython3.9-stdlib_3.9.2-1+fips_amd64.deb==00bd255dd05813d3c5ef3b83beed2587 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libpython3.9_3.9.2-1+fips_amd64.deb==62393c04da16a02f90bd8521c0940c2f -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libssl-dev_1.1.1k-1+deb11u1+fips_amd64.deb==709b37517a788eddb09e121f0d53de9d -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libssl-doc_1.1.1k-1+deb11u1+fips_all.deb==fc1e33dfaeabc36583ebdf177d025b42 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libssl1.1_1.1.1k-1+deb11u1+fips_amd64.deb==034fdda29c5e965a3edbb54aa05dfbb9 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openssh-client_8.4p1-5+fips_amd64.deb==cac3a4aa6ea63594fd885ad695b96e0c -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openssh-server_8.4p1-5+fips_amd64.deb==8f3af9449065938ca698ff0726929c64 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openssh-sftp-server_8.4p1-5+fips_amd64.deb==765da7b03557259d6569d15b27ca07f2 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openssl_1.1.1k-1+deb11u1+fips_amd64.deb==89b8ca1e189263c38911d05bef925ba6 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/python3.9-minimal_3.9.2-1+fips_amd64.deb==22b10a1f10cdcf1ad5e80e60803e2023 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/python3.9_3.9.2-1+fips_amd64.deb==a0caf3616afdf36c3480b94d496c58df -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/symcrypt-openssl_0.1_amd64.deb==94f118009a4426cc5de4d6a0f7d6974d +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==eafff1fa77d5e770bc73e06ff8840cb6 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/golang-1.15-go_1.15.15-1~deb11u4+fips_amd64.deb==b60f6db62805696b47ab422ab798fe56 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/golang-1.15-src_1.15.15-1~deb11u4+fips_amd64.deb==1c920937aa49b602a1bfec3c49747131 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==e18fed0c17f90b48c19ccde122c4d5c1 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/libk5crypto3_1.18.3-6+deb11u1+fips_amd64.deb==c5b36c1b743b16c8d1d9c4ced34536a8 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/libpython3.9-minimal_3.9.2-1+fips_amd64.deb==e49ec97fc613209a562ef459dc6fa097 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/libpython3.9-stdlib_3.9.2-1+fips_amd64.deb==b2c800e69de159ba33fe2e5a1dc4df7e +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/libpython3.9_3.9.2-1+fips_amd64.deb==62393c04da16a02f90bd8521c0940c2f +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/libssl-dev_1.1.1n-0+deb11u3+fips_amd64.deb==39e789edf46397a8ab5851eb04714dca +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/libssl-doc_1.1.1n-0+deb11u3+fips_all.deb==781de0ae17c60d6e96e2500e82e40813 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/libssl1.1_1.1.1n-0+deb11u3+fips_amd64.deb==4d63c0923422a02f0611befd5c7dadb8 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/openssh-client_8.4p1-5+deb11u1+fips_amd64.deb==78d4f013f2df42701b7ab45e5bd9acf8 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/openssh-server_8.4p1-5+deb11u1+fips_amd64.deb==a8b1e573a945ce8267ea89f717d8fe6c +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/openssh-sftp-server_8.4p1-5+deb11u1+fips_amd64.deb==47a4be915783c2460a9389c2860f982c +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/openssl_1.1.1n-0+deb11u3+fips_amd64.deb==e55c936da98174a36af968c63d3fd88d +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/python3.9-minimal_3.9.2-1+fips_amd64.deb==3cf85ae8651d33ebb97d651833c9a631 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/python3.9_3.9.2-1+fips_amd64.deb==a0caf3616afdf36c3480b94d496c58df +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/symcrypt-openssl_0.2_amd64.deb==6728693e1131c1a230499a6b5a856284 https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-6/libsaibcm-dev_7.1.0.0-6_amd64.deb==dc4d2c529376a4948463485005d78c86 https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-6/libsaibcm_7.1.0.0-6_amd64.deb==7666e5d02364e0c176a6931edc597ea9 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-py3 b/files/build/versions/build/build-sonic-slave-buster/versions-py3 index ac211ffcb682..48d552cff651 100644 --- a/files/build/versions/build/build-sonic-slave-buster/versions-py3 +++ b/files/build/versions/build/build-sonic-slave-buster/versions-py3 @@ -7,7 +7,7 @@ dbus-python==1.2.18 docker==5.0.3 docker-image-py==0.1.12 enlighten==1.10.2 -filelock==3.7.1 +filelock==3.8.0 ijson==2.6.1 ipaddress==1.0.23 jsondiff==2.0.0 diff --git a/files/build/versions/default/versions-git b/files/build/versions/default/versions-git index d5b1903d5299..4ea077bc73b6 100644 --- a/files/build/versions/default/versions-git +++ b/files/build/versions/default/versions-git @@ -1,11 +1,11 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==eb8426e2ac6e8b03837a8d093863008fbec79860 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==5da65ec20db9b17b03420d928240092e5955a769 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f https://github.com/CESNET/libyang.git==0c609c35080f523c9696db48976de8257d174102 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b https://github.com/dyninc/OpenBFDD.git==e35f43ad8d2b3f084e96a84c392528a90d05a287 -https://github.com/flashrom/flashrom.git==36299dbab2397f25c4009339018065dc79d77452 -https://github.com/FreeRADIUS/freeradius-server.git==6aa357b999415e58e6fbb4db269d17c474b3ee04 +https://github.com/flashrom/flashrom.git==02f43e89bae6bcdd7505af0ccd361e6eb3d3c74c +https://github.com/FreeRADIUS/freeradius-server.git==aad788744b7f2df8182a5ecdd6b470c250aa4020 https://github.com/FreeRADIUS/pam_radius.git==272f6420c5c01f9bdb27c98e5edb44de406f4631 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 diff --git a/files/build/versions/default/versions-web b/files/build/versions/default/versions-web index d196d694dd87..abdd2c2555bb 100644 --- a/files/build/versions/default/versions-web +++ b/files/build/versions/default/versions-web @@ -84,46 +84,46 @@ https://sonicstorage.blob.core.windows.net/packages/redis/redis-server_6.0.6-1~b https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1_bpo10+1_arm64.deb?sv=2015-04-05&sr=b&sig=GbkJV2wWln3hoz27zKi5erdk3NDKrAFrQriA97bcRCY%3D&se=2030-10-24T04%3A22%3A21Z&sp=r==282b4766cc9ac7d8bb70622bd69d9f5c https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1_bpo10+1_armhf.deb?sv=2015-04-05&sr=b&sig=67vHAMxsl%2BS3X1KsqhdYhakJkGdg5FKSPgU8kUiw4as%3D&se=2030-10-24T04%3A22%3A40Z&sp=r==62f287117afab6caaec564232ebbb5de https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1~bpo10+1_amd64.deb?sv=2015-04-05&sr=b&sig=73zbmjkf3pi%2Bn0R8Hy7CWT2EUvOAyzM5aLYJWCLySGM%3D&se=2030-09-06T19%3A44%3A59Z&sp=r==2d58c3c3358290c04d5e0ba70f297f18 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==eafff1fa77d5e770bc73e06ff8840cb6 https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-go_1.15.15-1~deb11u4%2Bfips_amd64.deb==b60f6db62805696b47ab422ab798fe56 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-go_1.15.15-1~deb11u4+fips_amd64.deb==b60f6db62805696b47ab422ab798fe56 https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-src_1.15.15-1~deb11u4%2Bfips_amd64.deb==1c920937aa49b602a1bfec3c49747131 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-src_1.15.15-1~deb11u4+fips_amd64.deb==1c920937aa49b602a1bfec3c49747131 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==e18fed0c17f90b48c19ccde122c4d5c1 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libk5crypto3_1.18.3-6+deb11u1+fips_amd64.deb==c5b36c1b743b16c8d1d9c4ced34536a8 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libpython3.9-minimal_3.9.2-1+fips_amd64.deb==e49ec97fc613209a562ef459dc6fa097 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libpython3.9-stdlib_3.9.2-1+fips_amd64.deb==00bd255dd05813d3c5ef3b83beed2587 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libpython3.9_3.9.2-1+fips_amd64.deb==62393c04da16a02f90bd8521c0940c2f -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libssl-dev_1.1.1k-1+deb11u1+fips_amd64.deb==709b37517a788eddb09e121f0d53de9d -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libssl-doc_1.1.1k-1+deb11u1+fips_all.deb==fc1e33dfaeabc36583ebdf177d025b42 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/libssl1.1_1.1.1k-1+deb11u1+fips_amd64.deb==034fdda29c5e965a3edbb54aa05dfbb9 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openssh-client_8.4p1-5+fips_amd64.deb==cac3a4aa6ea63594fd885ad695b96e0c -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openssh-server_8.4p1-5+fips_amd64.deb==8f3af9449065938ca698ff0726929c64 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openssh-sftp-server_8.4p1-5+fips_amd64.deb==765da7b03557259d6569d15b27ca07f2 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/openssl_1.1.1k-1+deb11u1+fips_amd64.deb==89b8ca1e189263c38911d05bef925ba6 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/python3.9-minimal_3.9.2-1+fips_amd64.deb==22b10a1f10cdcf1ad5e80e60803e2023 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/python3.9_3.9.2-1+fips_amd64.deb==a0caf3616afdf36c3480b94d496c58df -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/symcrypt-openssl_0.1_amd64.deb==94f118009a4426cc5de4d6a0f7d6974d -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==52bad2d21e796bd2c183d9fdd66f8a0a https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/golang-1.15-go_1.15.15-1~deb11u4%2Bfips_arm64.deb==0b70c104b907db13ff2fe5d52b3d0008 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/golang-1.15-go_1.15.15-1~deb11u4+fips_arm64.deb==0b70c104b907db13ff2fe5d52b3d0008 https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/golang-1.15-src_1.15.15-1~deb11u4%2Bfips_arm64.deb==1d06900f03424fa5ce34a782605983fe -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/golang-1.15-src_1.15.15-1~deb11u4+fips_arm64.deb==1d06900f03424fa5ce34a782605983fe -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==e18fed0c17f90b48c19ccde122c4d5c1 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/libk5crypto3_1.18.3-6+deb11u1+fips_arm64.deb==c6dd8e2b8d30492e280d4b1b3fd362a6 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/libpython3.9-minimal_3.9.2-1+fips_arm64.deb==13ce25cc4936316acdd88f52a5f4f7bd -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/libpython3.9-stdlib_3.9.2-1+fips_arm64.deb==88ed9fe59c095f60a0b3ea25d9fc666a -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/libpython3.9_3.9.2-1+fips_arm64.deb==bdc459caf450092df703f987b4c7b3f0 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/libssl-dev_1.1.1k-1+deb11u1+fips_arm64.deb==a6487890c288b0e14dc00fb32cfdb4f2 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/libssl-doc_1.1.1k-1+deb11u1+fips_all.deb==fc1e33dfaeabc36583ebdf177d025b42 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/libssl1.1_1.1.1k-1+deb11u1+fips_arm64.deb==86d0f1959bfcd9460d5f01c1dc73fc9c -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/openssh-client_8.4p1-5+fips_arm64.deb==42104a6c4c3c14acec187a3cc92fb513 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/openssh-server_8.4p1-5+fips_arm64.deb==2884ef2e3f3b2c24dea38384e6265beb -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/openssh-sftp-server_8.4p1-5+fips_arm64.deb==1f8f9cef3e420dad5d172dd44f37ae3d -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/openssl_1.1.1k-1+deb11u1+fips_arm64.deb==fe1cebf54c66b0d6e5985dc6ffa7b613 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/python3.9-minimal_3.9.2-1+fips_arm64.deb==2854f00fbddaa17e549ec3be34718f4f -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/python3.9_3.9.2-1+fips_arm64.deb==45c9fe276c0c50a7cd9368f9c03d0296 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/symcrypt-openssl_0.1_arm64.deb==2edbe79c1d8261b6fa2d58defe457040 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==eafff1fa77d5e770bc73e06ff8840cb6 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/golang-1.15-go_1.15.15-1~deb11u4+fips_amd64.deb==b60f6db62805696b47ab422ab798fe56 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/golang-1.15-src_1.15.15-1~deb11u4+fips_amd64.deb==1c920937aa49b602a1bfec3c49747131 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==e18fed0c17f90b48c19ccde122c4d5c1 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/libk5crypto3_1.18.3-6+deb11u1+fips_amd64.deb==c5b36c1b743b16c8d1d9c4ced34536a8 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/libpython3.9-minimal_3.9.2-1+fips_amd64.deb==e49ec97fc613209a562ef459dc6fa097 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/libpython3.9-stdlib_3.9.2-1+fips_amd64.deb==b2c800e69de159ba33fe2e5a1dc4df7e +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/libpython3.9_3.9.2-1+fips_amd64.deb==62393c04da16a02f90bd8521c0940c2f +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/libssl-dev_1.1.1n-0+deb11u3+fips_amd64.deb==39e789edf46397a8ab5851eb04714dca +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/libssl-doc_1.1.1n-0+deb11u3+fips_all.deb==781de0ae17c60d6e96e2500e82e40813 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/libssl1.1_1.1.1n-0+deb11u3+fips_amd64.deb==4d63c0923422a02f0611befd5c7dadb8 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/openssh-client_8.4p1-5+deb11u1+fips_amd64.deb==78d4f013f2df42701b7ab45e5bd9acf8 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/openssh-server_8.4p1-5+deb11u1+fips_amd64.deb==a8b1e573a945ce8267ea89f717d8fe6c +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/openssh-sftp-server_8.4p1-5+deb11u1+fips_amd64.deb==47a4be915783c2460a9389c2860f982c +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/openssl_1.1.1n-0+deb11u3+fips_amd64.deb==e55c936da98174a36af968c63d3fd88d +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/python3.9-minimal_3.9.2-1+fips_amd64.deb==3cf85ae8651d33ebb97d651833c9a631 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/python3.9_3.9.2-1+fips_amd64.deb==a0caf3616afdf36c3480b94d496c58df +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/symcrypt-openssl_0.2_amd64.deb==6728693e1131c1a230499a6b5a856284 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==eafff1fa77d5e770bc73e06ff8840cb6 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/golang-1.15-go_1.15.15-1~deb11u4+fips_arm64.deb==4f17ccd4d69c63690c9fefb65f266962 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/golang-1.15-src_1.15.15-1~deb11u4+fips_arm64.deb==b1362391adf8e55bc56830f33499cbcd +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==e18fed0c17f90b48c19ccde122c4d5c1 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/libk5crypto3_1.18.3-6+deb11u1+fips_arm64.deb==c6dd8e2b8d30492e280d4b1b3fd362a6 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/libpython3.9-minimal_3.9.2-1+fips_arm64.deb==0e880b1ef8bd3dfb05999d1e1c1cb8a6 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/libpython3.9-stdlib_3.9.2-1+fips_arm64.deb==0bd2ef987de4d14b2550b26630c62767 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/libpython3.9_3.9.2-1+fips_arm64.deb==202a4fdd9fc0ac76ee6c6dd658ccc998 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/libssl-dev_1.1.1n-0+deb11u3+fips_arm64.deb==e8d8e735d741d09744b8f66144bcb8a2 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/libssl-doc_1.1.1n-0+deb11u3+fips_all.deb==781de0ae17c60d6e96e2500e82e40813 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/libssl1.1_1.1.1n-0+deb11u3+fips_arm64.deb==e52056aa2b8bbb0b6da010a15dd9c49d +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/openssh-client_8.4p1-5+deb11u1+fips_arm64.deb==22aacf32a706f231824d5f8586e479cd +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/openssh-server_8.4p1-5+deb11u1+fips_arm64.deb==4516583d0f7b42c503237c76977fc41d +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/openssh-sftp-server_8.4p1-5+deb11u1+fips_arm64.deb==2fc21a6d1c0091d00abaa27cbf10e271 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/openssl_1.1.1n-0+deb11u3+fips_arm64.deb==e93bdf5a1d1554c53367e4ded0b2afa2 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/python3.9-minimal_3.9.2-1+fips_arm64.deb==203627e9d8f79bc78fad3b6321fbc24a +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/python3.9_3.9.2-1+fips_arm64.deb==45c9fe276c0c50a7cd9368f9c03d0296 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/symcrypt-openssl_0.2_arm64.deb==8a61d4d4617985f5e3247ec2010d956c https://storage.googleapis.com/golang/go1.14.2.linux-amd64.tar.gz==856d248e3ea8a287d13e5f6afd086282 https://storage.googleapis.com/golang/go1.14.2.linux-arm64.tar.gz==e5f79b403701e00f20d13f0ea561b064 https://storage.googleapis.com/golang/go1.14.2.linux-armv6l.tar.gz==04467414e783b18de4278e9f24baf4be \ No newline at end of file diff --git a/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye b/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye index 62230b67e3f7..3eb489a515ca 100644 --- a/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye @@ -48,7 +48,8 @@ libsasl2-modules-db==2.1.27+dfsg-2.1+deb11u1 libsodium23==1.0.18-1 libsqlite3-0==3.34.1-3 libssh2-1==1.9.0-2 -libssl-dev==1.1.1k-1+deb11u1+fips +libssl-dev==1.1.1n-0+deb11u3+fips +libssl1.1==1.1.1n-0+deb11u3+fips libwrap0==7.6.q-31 libxtables12==1.8.7-1 libzmq5==4.3.4-1 @@ -56,7 +57,7 @@ lua-bitop==1.0.2-5 lua-cjson==2.1.0+dfsg-2.1 media-types==4.0.0 net-tools==1.60+git20181103.0eebece-1 -openssl==1.1.1n-0+deb11u3 +openssl==1.1.1n-0+deb11u3+fips perl==5.32.1-4+deb11u2 perl-modules-5.32==5.32.1-4+deb11u2 procps==2:3.3.17-5 diff --git a/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye-armhf b/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye-armhf new file mode 100644 index 000000000000..450d66651091 --- /dev/null +++ b/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye-armhf @@ -0,0 +1 @@ +openssl==1.1.1n-0+deb11u3 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye b/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye index ece218a17250..0c89f8e65b5e 100644 --- a/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye @@ -44,7 +44,9 @@ libpython3.9-dev==3.9.2-1 libquadmath0==10.2.1-6 libstdc++-10-dev==10.2.1-6 libswsscommon==1.0.0 -libtirpc-dev==1.3.1-1 +libtirpc-common==1.3.1-1+deb11u1 +libtirpc-dev==1.3.1-1+deb11u1 +libtirpc3==1.3.1-1+deb11u1 libtsan0==10.2.1-6 libubsan1==10.2.1-6 libyang==1.0.73 diff --git a/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye b/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye index c57efac6d2f9..3b0cc386a7f7 100644 --- a/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye @@ -62,7 +62,7 @@ libsource-highlight-common==3.1.9-3 libsource-highlight4v5==3.1.9-3+b1 libstdc++-10-dev==10.2.1-6 libswsscommon-dbg==1.0.0 -libtirpc-dev==1.3.1-1 +libtirpc-dev==1.3.1-1+deb11u1 libtsan0==10.2.1-6 libubsan1==10.2.1-6 libunwind8==1.3.2-2 diff --git a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye index 41c2020f604f..06652b678622 100644 --- a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye @@ -22,6 +22,7 @@ gdb==10.1-1.7 gdbserver==10.1-1.7 i2c-tools==4.2-1+b1 ipmitool==1.8.18-10.1 +iputils-ping==3:20210202-1 libasan6==10.2.1-6 libbabeltrace1==1.5.8-1+b3 libbinutils==2.35.2-2 @@ -86,7 +87,7 @@ libstdc++-10-dev==10.2.1-6 libswsscommon-dbg==1.0.0 libthai-data==0.1.28-3 libthai0==0.1.28-3 -libtirpc-dev==1.3.1-1 +libtirpc-dev==1.3.1-1+deb11u1 libtsan0==10.2.1-6 libubsan1==10.2.1-6 libunwind8==1.3.2-2 diff --git a/files/build/versions/dockers/docker-ptf/versions-py2 b/files/build/versions/dockers/docker-ptf/versions-py2 index 5b8ef0199582..90cedc45de7c 100644 --- a/files/build/versions/dockers/docker-ptf/versions-py2 +++ b/files/build/versions/dockers/docker-ptf/versions-py2 @@ -36,7 +36,7 @@ protobuf==3.6.1 ptf==0.9.1 ptyprocess==0.7.0 pyaml==21.10.1 -pybrctl==0.1.3 +pybrctl==0.1.4 pycparser==2.21 pygments==2.5.2 pylibpcap==0.6.4 diff --git a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 index af3ca22ed5c3..456819069211 100644 --- a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 +++ b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 @@ -4,7 +4,7 @@ charset-normalizer==2.1.0 click==8.1.3 clickclick==20.10.2 connexion==2.7.0 -flask==2.2.1 +flask==2.2.2 grpcio==1.47.0 grpcio-tools==1.20.0 idna==3.3 @@ -16,12 +16,12 @@ jsonschema==4.9.1 openapi-schema-validator==0.2.3 openapi-spec-validator==0.4.0 pkgutil_resolve_name==1.3.10 -protobuf==4.21.4 +protobuf==4.21.5 pyrsistent==0.18.1 python-dateutil==2.6.0 requests==2.28.1 six==1.11.0 typing_extensions==4.3.0 urllib3==1.26.5 -werkzeug==2.2.1 +werkzeug==2.2.2 zipp==3.8.1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-vs/versions-py3 b/files/build/versions/dockers/docker-sonic-vs/versions-py3 index b61e61ec9e48..849bf7fffbd2 100644 --- a/files/build/versions/dockers/docker-sonic-vs/versions-py3 +++ b/files/build/versions/dockers/docker-sonic-vs/versions-py3 @@ -8,7 +8,7 @@ dbus-python==1.2.18 docker==5.0.3 docker-image-py==0.1.12 enlighten==1.10.2 -filelock==3.7.1 +filelock==3.8.0 idna==3.3 jsonpatch==1.32 jsonpointer==2.3 diff --git a/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye index 8498396803ae..2366de808e5b 100644 --- a/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye @@ -34,7 +34,7 @@ libsairedis-dbg==1.0.0 libsource-highlight-common==3.1.9-3 libsource-highlight4v5==3.1.9-3+b1 libswsscommon-dbg==1.0.0 -libtirpc-dev==1.3.1-1 +libtirpc-dev==1.3.1-1+deb11u1 libunwind8==1.3.2-2 libxml2==2.9.10+dfsg-6.7+deb11u2 linux-libc-dev==5.10.127-2 diff --git a/files/build/versions/dockers/docker-teamd/versions-deb-bullseye b/files/build/versions/dockers/docker-teamd/versions-deb-bullseye new file mode 100644 index 000000000000..21bebe3ce894 --- /dev/null +++ b/files/build/versions/dockers/docker-teamd/versions-deb-bullseye @@ -0,0 +1,29 @@ +gdb==10.1-1.7 +gdbserver==10.1-1.7 +libbabeltrace1==1.5.8-1+b3 +libboost-regex1.74.0==1.74.0-9 +libcbor0==0.5.0+dfsg-2 +libcurl3-gnutls==7.74.0-1.3+deb11u2 +libdebuginfod1==0.183-1 +libdw1==0.183-1 +libedit2==3.1-20191231-2+b1 +libfido2-1==1.6.0-2 +libglib2.0-0==2.66.8-1 +libgpm2==1.20.7-8 +libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 +libicu67==67.1-7 +libipt2==2.0.3-1 +libmpfr6==4.1.0-3 +libsource-highlight-common==3.1.9-3 +libsource-highlight4v5==3.1.9-3+b1 +libswsscommon-dbg==1.0.0 +libteam-utils==1.30-1 +libteam-utils-dbgsym==1.30-1 +libteamdctl0-dbgsym==1.30-1 +libunwind8==1.3.2-2 +openssh-client==1:8.4p1-5+deb11u1 +sshpass==1.09-1+b1 +strace==5.10-1 +swss-dbg==1.0.0 +vim==2:8.2.2434-3+deb11u1 +vim-runtime==2:8.2.2434-3+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-teamd/versions-deb-buster b/files/build/versions/dockers/docker-teamd/versions-deb-buster deleted file mode 100644 index f89cae273ac8..000000000000 --- a/files/build/versions/dockers/docker-teamd/versions-deb-buster +++ /dev/null @@ -1,22 +0,0 @@ -gdb==8.2.1-2+b3 -gdbserver==8.2.1-2+b3 -libbabeltrace1==1.5.6-2+deb10u1 -libbsd0==0.9.1-2+deb10u1 -libdw1==0.176-1.1 -libedit2==3.1-20181209-1 -libglib2.0-0==2.58.3-2+deb10u3 -libgpm2==1.20.7-5 -libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 -libipt2==2.0-2 -libpopt0==1.16-12 -libswsscommon-dbg==1.0.0 -libteam-utils==1.30-1 -libteam-utils-dbgsym==1.30-1 -libteamdctl0-dbgsym==1.30-1 -libunwind8==1.2.1-10~deb10u1 -openssh-client==1:7.9p1-10+deb10u2 -sshpass==1.06-1 -strace==4.26-0.2 -swss-dbg==1.0.0 -vim==2:8.1.0875-5+deb10u2 -vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye index 157ba92383bf..d90331f1a46a 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye @@ -183,7 +183,7 @@ gsettings-desktop-schemas==3.38.0-2 gsfonts==1:8.11+urwcyr1.0.7~pre44-4.5 gstreamer1.0-libav==1.18.4-3 gstreamer1.0-plugins-base==1.18.4-2 -gstreamer1.0-plugins-good==1.18.4-2 +gstreamer1.0-plugins-good==1.18.4-2+deb11u1 gstreamer1.0-x==1.18.4-2 gtk-update-icon-cache==3.24.24-4+deb11u2 guile-2.2-libs==2.2.7+1-6 @@ -593,7 +593,8 @@ libgme0==0.6.3-2 libgmock-dev==1.10.0.20201025-1.1 libgmp-dev==2:6.2.1+dfsg-1+deb11u1 libgmpxx4ldbl==2:6.2.1+dfsg-1+deb11u1 -libgnutls-dane0==3.7.1-5+deb11u1 +libgnutls-dane0==3.7.1-5+deb11u2 +libgnutls30==3.7.1-5+deb11u2 libgomp1==10.2.1-6 libgoogle-perftools4==2.8.1-1 libgpgme11==1.14.0-1+b2 @@ -1135,7 +1136,9 @@ libtime-moment-perl==0.44-1+b3 libtimedate-perl==2.3300-2 libtinyxml2-8==8.0.0+dfsg-2 libtinyxml2-dev==8.0.0+dfsg-2 -libtirpc-dev==1.3.1-1 +libtirpc-common==1.3.1-1+deb11u1 +libtirpc-dev==1.3.1-1+deb11u1 +libtirpc3==1.3.1-1+deb11u1 libtk8.6==8.6.11-2 libtool==2.4.6-15 libtool-bin==2.4.6-15 @@ -1676,7 +1679,7 @@ tk8.6==8.6.11-2 tk8.6-blt2.5==2.5.3+dfsg-4.1 ucf==3.0043 unattended-upgrades==2.8 -unzip==6.0-26 +unzip==6.0-26+deb11u1 uuid-dev==2.36.1-8+deb11u1 va-driver-all==2.10.0-1 vdpau-driver-all==1.4-3 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-git b/files/build/versions/dockers/sonic-slave-bullseye/versions-git index 6902af6272e9..169e67dab005 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-git +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==eb8426e2ac6e8b03837a8d093863008fbec79860 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==5da65ec20db9b17b03420d928240092e5955a769 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster index 18c72d254fd7..2aae3de762eb 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster +++ b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster @@ -50,7 +50,7 @@ cmake==3.13.4-1 cmake-data==3.13.4-1 cmocka-doc==1.1.3-1 comerr-dev==2.1-1.44.5-1+deb10u3 -containerd.io==1.6.6-1 +containerd.io==1.6.7-1 cowbuilder==0.88 cowdancer==0.88 cpio==2.12+dfsg-9 @@ -179,7 +179,7 @@ gsettings-desktop-schemas==3.28.1-1 gsfonts==1:8.11+urwcyr1.0.7~pre44-4.4 gstreamer1.0-libav==1.15.0.1+git20180723+db823502-2+deb10u1 gstreamer1.0-plugins-base==1.14.4-2+deb10u1 -gstreamer1.0-plugins-good==1.14.4-1+deb10u1 +gstreamer1.0-plugins-good==1.14.4-1+deb10u2 gstreamer1.0-plugins-ugly==1.14.4-1+deb10u1 gstreamer1.0-x==1.14.4-2+deb10u1 gtk-update-icon-cache==3.24.5-1 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-git b/files/build/versions/dockers/sonic-slave-buster/versions-git index 6902af6272e9..169e67dab005 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-git +++ b/files/build/versions/dockers/sonic-slave-buster/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==eb8426e2ac6e8b03837a8d093863008fbec79860 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==5da65ec20db9b17b03420d928240092e5955a769 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-git b/files/build/versions/dockers/sonic-slave-stretch/versions-git index 6902af6272e9..169e67dab005 100644 --- a/files/build/versions/dockers/sonic-slave-stretch/versions-git +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==eb8426e2ac6e8b03837a8d093863008fbec79860 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==5da65ec20db9b17b03420d928240092e5955a769 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/host-image/versions-deb-bullseye b/files/build/versions/host-image/versions-deb-bullseye index ba7d2dcc36a0..5cd6c127244b 100644 --- a/files/build/versions/host-image/versions-deb-bullseye +++ b/files/build/versions/host-image/versions-deb-bullseye @@ -163,6 +163,7 @@ libglib2.0-bin==2.66.8-1 libglib2.0-data==2.66.8-1 libglib2.0-dev==2.66.8-1 libglib2.0-dev-bin==2.66.8-1 +libgnutls30==3.7.1-5+deb11u2 libgomp1==10.2.1-6 libgpm2==1.20.7-8 libgrpc++1==1.30.2-3 @@ -259,14 +260,17 @@ libsm-dev==2:1.2.3-1 libsm6==2:1.2.3-1 libsqlite3-0==3.34.1-3 libssh2-1==1.9.0-2 -libssl-dev==1.1.1k-1+deb11u1+fips +libssl-dev==1.1.1n-0+deb11u3+fips +libssl1.1==1.1.1n-0+deb11u3+fips libstdc++-10-dev==10.2.1-6 libswsscommon==1.0.0 libsysfs2==2.1.0+repack-7 libsystemd-dev==247.3-7 libtac2==1.4.1-1 libtcl8.6==8.6.11+dfsg-1 -libtirpc-dev==1.3.1-1 +libtirpc-common==1.3.1-1+deb11u1 +libtirpc-dev==1.3.1-1+deb11u1 +libtirpc3==1.3.1-1+deb11u1 libtsan0==10.2.1-6 libubootenv-tool==0.3.2-0.1 libubootenv0.1==0.3.2-0.1 @@ -318,10 +322,10 @@ netfilter-persistent==1.0.15 ntp==1:4.2.8p15+dfsg-1+deb10u2 ntpstat==0.0.0.1-2+b1 opennsl-modules==7.1.0.0 -openssh-client==1:8.4p1-5+fips -openssh-server==1:8.4p1-5+fips -openssh-sftp-server==1:8.4p1-5+fips -openssl==1.1.1n-0+deb11u3 +openssh-client==1:8.4p1-5+deb11u1+fips +openssh-server==1:8.4p1-5+deb11u1+fips +openssh-sftp-server==1:8.4p1-5+deb11u1+fips +openssl==1.1.1n-0+deb11u3+fips patch==2.7.6-7 pci.ids==0.0~2021.02.08-1 pciutils==1:3.7.0-5 @@ -386,7 +390,7 @@ traceroute==1:2.1.0-2+b1 u-boot-tools==2021.01+dfsg-5 ucf==3.0043 udev==247.3-7 -unzip==6.0-26 +unzip==6.0-26+deb11u1 usbutils==1:013-3 uuid-dev==2.36.1-8+deb11u1 vim==2:8.2.2434-3+deb11u1 diff --git a/files/build/versions/host-image/versions-deb-bullseye-armhf b/files/build/versions/host-image/versions-deb-bullseye-armhf index e93778b7b8d3..a6a6ef723be4 100644 --- a/files/build/versions/host-image/versions-deb-bullseye-armhf +++ b/files/build/versions/host-image/versions-deb-bullseye-armhf @@ -14,5 +14,6 @@ ntpstat==0.0.0.1-2 openssh-client==1:8.4p1-5+deb11u1 openssh-server==1:8.4p1-5+deb11u1 openssh-sftp-server==1:8.4p1-5+deb11u1 +openssl==1.1.1n-0+deb11u3 picocom==3.1-2 traceroute==1:2.1.0-2 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-py3 b/files/build/versions/host-image/versions-py3 index 880b76ced0a3..174bde8fc234 100644 --- a/files/build/versions/host-image/versions-py3 +++ b/files/build/versions/host-image/versions-py3 @@ -14,7 +14,7 @@ dbus-python==1.2.16 docker==5.0.3 docker-image-py==0.1.12 enlighten==1.10.2 -filelock==3.7.1 +filelock==3.8.0 grpcio==1.39.0 grpcio-tools==1.39.0 idna==3.3 diff --git a/files/build/versions/host-image/versions-py3-all-arm64 b/files/build/versions/host-image/versions-py3-all-arm64 new file mode 100644 index 000000000000..9745a2e2d48a --- /dev/null +++ b/files/build/versions/host-image/versions-py3-all-arm64 @@ -0,0 +1 @@ +filelock==3.7.1 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-py3-all-armhf b/files/build/versions/host-image/versions-py3-all-armhf index 431dc5a43838..7065fdf06d1b 100644 --- a/files/build/versions/host-image/versions-py3-all-armhf +++ b/files/build/versions/host-image/versions-py3-all-armhf @@ -1 +1,2 @@ -cryptography==3.3.1 \ No newline at end of file +cryptography==3.3.1 +filelock==3.7.1 \ No newline at end of file From 6a2c540cba6510542fef88593107607d95e65979 Mon Sep 17 00:00:00 2001 From: Hua Liu <58683130+liuh-80@users.noreply.github.com> Date: Wed, 17 Aug 2022 15:35:00 +0800 Subject: [PATCH 203/259] [swsscommon] Add c++ version sonic-db-cli from sonic-swss-common (#10825) (#11713) Cherry pick PR https://github.com/sonic-net/sonic-buildimage/pull/10825 to 202205 branch #### Why I did it Fix sonic-db-cli high CPU usage on SONiC startup issue: https://github.com/sonic-net/sonic-buildimage/issues/10218 ETA of this issue will be 2022/05/31 #### How I did it Re-write sonic-cli with c++ in sonic-swss-common: https://github.com/sonic-net/sonic-swss-common/pull/607 Modify swss-common rules and slave.mk to install c++ version sonic-db-cli. #### How to verify it Pass all E2E test scenario. #### Which release branch to backport (provide reason below if selected) - [ ] 201811 - [ ] 201911 - [ ] 202006 - [ ] 202012 - [ ] 202106 - [ ] 202111 #### Description for the changelog Build and install c++ version sonic-db-cli from swss-common. #### Link to config_db schema for YANG module changes #### A picture of a cute animal (not mandatory but encouraged) --- files/build_templates/sonic_debian_extension.j2 | 4 ++++ rules/docker-config-engine-bullseye.mk | 3 ++- rules/docker-config-engine-buster.mk | 3 ++- rules/docker-config-engine-stretch.mk | 4 +++- rules/docker-config-engine.mk | 2 ++ rules/docker-database.mk | 3 +++ rules/swss-common.mk | 3 +++ slave.mk | 1 + 8 files changed, 20 insertions(+), 3 deletions(-) diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 223240c329f3..c1719f435999 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -315,6 +315,10 @@ sudo dpkg --root=$FILESYSTEM_ROOT -i {{deb}} || sudo LANG=C DEBIAN_FRONTEND=noni {% endfor %} {% endif %} +# Install sonic-db-cli +sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/sonic-db-cli_*.deb || \ + sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f + # Install custom-built monit package and SONiC configuration files sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/monit_*.deb || \ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f diff --git a/rules/docker-config-engine-bullseye.mk b/rules/docker-config-engine-bullseye.mk index eae426a111df..0c4aad67a8d7 100644 --- a/rules/docker-config-engine-bullseye.mk +++ b/rules/docker-config-engine-bullseye.mk @@ -7,7 +7,8 @@ $(DOCKER_CONFIG_ENGINE_BULLSEYE)_DEPENDS += $(LIBSWSSCOMMON) \ $(LIBYANG) \ $(LIBYANG_CPP) \ $(LIBYANG_PY3) \ - $(PYTHON3_SWSSCOMMON) + $(PYTHON3_SWSSCOMMON) \ + $(SONIC_DB_CLI) $(DOCKER_CONFIG_ENGINE_BULLSEYE)_PYTHON_WHEELS += $(SWSSSDK_PY3) $(DOCKER_CONFIG_ENGINE_BULLSEYE)_PYTHON_WHEELS += $(SONIC_PY_COMMON_PY3) \ $(SONIC_YANG_MGMT_PY3) \ diff --git a/rules/docker-config-engine-buster.mk b/rules/docker-config-engine-buster.mk index f3df95c36d74..079fc6dd074c 100644 --- a/rules/docker-config-engine-buster.mk +++ b/rules/docker-config-engine-buster.mk @@ -7,7 +7,8 @@ $(DOCKER_CONFIG_ENGINE_BUSTER)_DEPENDS += $(LIBSWSSCOMMON) \ $(LIBYANG) \ $(LIBYANG_CPP) \ $(LIBYANG_PY3) \ - $(PYTHON3_SWSSCOMMON) + $(PYTHON3_SWSSCOMMON) \ + $(SONIC_DB_CLI) $(DOCKER_CONFIG_ENGINE_BUSTER)_PYTHON_WHEELS += $(SWSSSDK_PY3) $(DOCKER_CONFIG_ENGINE_BUSTER)_PYTHON_WHEELS += $(SONIC_PY_COMMON_PY3) \ $(SONIC_YANG_MGMT_PY3) \ diff --git a/rules/docker-config-engine-stretch.mk b/rules/docker-config-engine-stretch.mk index 7e90c1587a9d..8644102abed3 100644 --- a/rules/docker-config-engine-stretch.mk +++ b/rules/docker-config-engine-stretch.mk @@ -2,7 +2,9 @@ DOCKER_CONFIG_ENGINE_STRETCH = docker-config-engine-stretch.gz $(DOCKER_CONFIG_ENGINE_STRETCH)_PATH = $(DOCKERS_PATH)/docker-config-engine-stretch -$(DOCKER_CONFIG_ENGINE_STRETCH)_DEPENDS += $(LIBSWSSCOMMON) $(PYTHON_SWSSCOMMON) +$(DOCKER_CONFIG_ENGINE_STRETCH)_DEPENDS += $(LIBSWSSCOMMON) \ + $(PYTHON_SWSSCOMMON) \ + $(SONIC_DB_CLI) $(DOCKER_CONFIG_ENGINE_STRETCH)_PYTHON_WHEELS += $(SWSSSDK_PY2) $(DOCKER_CONFIG_ENGINE_STRETCH)_PYTHON_WHEELS += $(SONIC_PY_COMMON_PY2) $(DOCKER_CONFIG_ENGINE_STRETCH)_PYTHON_WHEELS += $(SONIC_CONFIG_ENGINE_PY2) diff --git a/rules/docker-config-engine.mk b/rules/docker-config-engine.mk index 518e73415a6b..3923a970b4d6 100644 --- a/rules/docker-config-engine.mk +++ b/rules/docker-config-engine.mk @@ -2,6 +2,8 @@ DOCKER_CONFIG_ENGINE = docker-config-engine.gz $(DOCKER_CONFIG_ENGINE)_PATH = $(DOCKERS_PATH)/docker-config-engine +$(DOCKER_CONFIG_ENGINE)_DEPENDS += $(LIBSWSSCOMMON) \ + $(SONIC_DB_CLI) $(DOCKER_CONFIG_ENGINE)_PYTHON_WHEELS += $(SWSSSDK_PY2) $(DOCKER_CONFIG_ENGINE)_PYTHON_WHEELS += $(SONIC_PY_COMMON_PY2) $(DOCKER_CONFIG_ENGINE)_PYTHON_WHEELS += $(SONIC_CONFIG_ENGINE_PY2) diff --git a/rules/docker-database.mk b/rules/docker-database.mk index 707adc2d64cb..b66583b9bd2c 100644 --- a/rules/docker-database.mk +++ b/rules/docker-database.mk @@ -4,6 +4,9 @@ DOCKER_DATABASE_STEM = docker-database DOCKER_DATABASE = $(DOCKER_DATABASE_STEM).gz DOCKER_DATABASE_DBG = $(DOCKER_DATABASE_STEM)-$(DBG_IMAGE_MARK).gz +$(DOCKER_DATABASE)_DEPENDS += $(LIBSWSSCOMMON) \ + $(SONIC_DB_CLI) + $(DOCKER_DATABASE)_PATH = $(DOCKERS_PATH)/$(DOCKER_DATABASE_STEM) $(DOCKER_DATABASE)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_DEPENDS) diff --git a/rules/swss-common.mk b/rules/swss-common.mk index bbc37a8d632f..9ab49b672b6c 100644 --- a/rules/swss-common.mk +++ b/rules/swss-common.mk @@ -32,6 +32,9 @@ $(LIBSWSSCOMMON_DBG)_DEPENDS += $(LIBSWSSCOMMON) $(LIBSWSSCOMMON_DBG)_RDEPENDS += $(LIBSWSSCOMMON) $(eval $(call add_derived_package,$(LIBSWSSCOMMON),$(LIBSWSSCOMMON_DBG))) +SONIC_DB_CLI = sonic-db-cli_$(LIBSWSSCOMMON_VERSION)_$(CONFIGURED_ARCH).deb +$(eval $(call add_derived_package,$(LIBSWSSCOMMON),$(SONIC_DB_CLI))) + # The .c, .cpp, .h & .hpp files under src/{$DBG_SRC_ARCHIVE list} # are archived into debug one image to facilitate debugging. # diff --git a/slave.mk b/slave.mk index 79e8fa7eb234..76274b21b39e 100644 --- a/slave.mk +++ b/slave.mk @@ -1050,6 +1050,7 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ $(OPENSSH_SERVER) \ $(PYTHON_SWSSCOMMON) \ $(PYTHON3_SWSSCOMMON) \ + $(SONIC_DB_CLI) \ $(SONIC_UTILITIES_DATA) \ $(SONIC_HOST_SERVICES_DATA) \ $(BASH) \ From 25e48f9a12bc57d515d3e04acb451a1e634215d0 Mon Sep 17 00:00:00 2001 From: DavidZagury <32644413+DavidZagury@users.noreply.github.com> Date: Mon, 15 Aug 2022 11:47:56 +0300 Subject: [PATCH 204/259] [Mellanox] Add support for Service Port in SN5600 (#11609) - Why I did it SN5600 has an additional service interface with a different parameters than other interfaces. - How I did it Added the etp65 interface with the correct parameters. - How to verify it Run platform test on SN5600 platform. Check the service port can startup correctly. --- .../ACS-SN5600/hwsku.json | 3 +++ .../ACS-SN5600/port_config.ini | 1 + .../ACS-SN5600/sai_5600.xml | 11 +++++++++-- .../x86_64-nvidia_sn5600_simx-r0/platform.json | 7 +++++++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/device/mellanox/x86_64-nvidia_sn5600_simx-r0/ACS-SN5600/hwsku.json b/device/mellanox/x86_64-nvidia_sn5600_simx-r0/ACS-SN5600/hwsku.json index 9eaac1e2cf86..3593da62c767 100644 --- a/device/mellanox/x86_64-nvidia_sn5600_simx-r0/ACS-SN5600/hwsku.json +++ b/device/mellanox/x86_64-nvidia_sn5600_simx-r0/ACS-SN5600/hwsku.json @@ -191,6 +191,9 @@ }, "Ethernet504": { "default_brkout_mode": "1x800G[400G,200G,100G,50G,40G,25G,10G]" + }, + "Ethernet512": { + "default_brkout_mode": "1x25G[10G]" } } } diff --git a/device/mellanox/x86_64-nvidia_sn5600_simx-r0/ACS-SN5600/port_config.ini b/device/mellanox/x86_64-nvidia_sn5600_simx-r0/ACS-SN5600/port_config.ini index 591fe2a7d428..6ba6991bd002 100644 --- a/device/mellanox/x86_64-nvidia_sn5600_simx-r0/ACS-SN5600/port_config.ini +++ b/device/mellanox/x86_64-nvidia_sn5600_simx-r0/ACS-SN5600/port_config.ini @@ -79,3 +79,4 @@ Ethernet480 480,481,482,483,484,485,486,487 etp61 61 Ethernet488 488,489,490,491,492,493,494,495 etp62 62 Ethernet496 496,497,498,499,500,501,502,503 etp63 63 Ethernet504 504,505,506,507,508,509,510,511 etp64 64 +Ethernet512 512 etp65 65 diff --git a/device/mellanox/x86_64-nvidia_sn5600_simx-r0/ACS-SN5600/sai_5600.xml b/device/mellanox/x86_64-nvidia_sn5600_simx-r0/ACS-SN5600/sai_5600.xml index b9ef3af7a82a..7fe318fc0808 100644 --- a/device/mellanox/x86_64-nvidia_sn5600_simx-r0/ACS-SN5600/sai_5600.xml +++ b/device/mellanox/x86_64-nvidia_sn5600_simx-r0/ACS-SN5600/sai_5600.xml @@ -25,7 +25,7 @@ 1 - 64 + 65 @@ -306,7 +306,7 @@ 153 8 - 26 + 26 3 1536 @@ -489,6 +489,13 @@ 3 1536 + + 257 + 1 + 64 + 0 + 64 + diff --git a/device/mellanox/x86_64-nvidia_sn5600_simx-r0/platform.json b/device/mellanox/x86_64-nvidia_sn5600_simx-r0/platform.json index fdc689855c80..a3bd96c7cd74 100644 --- a/device/mellanox/x86_64-nvidia_sn5600_simx-r0/platform.json +++ b/device/mellanox/x86_64-nvidia_sn5600_simx-r0/platform.json @@ -1277,6 +1277,13 @@ "4x200G[100G,50G,25G,10G]": ["etp64a", "etp64b", "etp64c", "etp64d"], "8x100G[50G,25G,10G]": ["etp64a", "etp64b", "etp64c", "etp64d", "etp64e", "etp64f", "etp64g", "etp64h"] } + }, + "Ethernet512": { + "index": "65", + "lanes": "512", + "breakout_modes": { + "1x25G[10G]": ["etp65"] + } } } } From f9bfa47e8f9cec9bf31ba35cf7a8aacd9435e1c0 Mon Sep 17 00:00:00 2001 From: arlakshm <55814491+arlakshm@users.noreply.github.com> Date: Fri, 12 Aug 2022 11:55:18 -0700 Subject: [PATCH 205/259] [Chassis] parse 400g zr port config from minigraph (#11616) Signed-off-by: Arvindsrinivasan Lakshmi Narasimhan arlakshm@microsoft.com Why I did it Generate the port configuration required 400G ZR port from minigraph. How I did it Add parse logic to get tx_power and laser_freq from LinkMetadata section of the minigraph. Add UT for packet-chassis and voq chassis How to verify it UT Signed-off-by: Arvindsrinivasan Lakshmi Narasimhan --- src/sonic-config-engine/minigraph.py | 20 ++++++++++++++++++- .../tests/sample-chassis-packet-lc-graph.xml | 19 ++++++++++++++++++ .../tests/sample-voq-graph.xml | 14 +++++++++++++ src/sonic-config-engine/tests/test_cfggen.py | 14 +++++++++++++ 4 files changed, 66 insertions(+), 1 deletion(-) diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index b8bb02d8285d..b9f9c7340b4f 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -972,7 +972,8 @@ def parse_linkmeta(meta, hname): lower_tor_hostname = '' auto_negotiation = None macsec_enabled = False - + tx_power = None + laser_freq = None properties = linkmeta.find(str(QName(ns1, "Properties"))) for device_property in properties.findall(str(QName(ns1, "DeviceProperty"))): name = device_property.find(str(QName(ns1, "Name"))).text @@ -989,6 +990,10 @@ def parse_linkmeta(meta, hname): auto_negotiation = value elif name == "MacSecEnabled": macsec_enabled = value + elif name == "TxPower": + tx_power = value + elif name == "Frequency": + laser_freq = value linkmetas[port] = {} if fec_disabled: @@ -1002,6 +1007,11 @@ def parse_linkmeta(meta, hname): linkmetas[port]["AutoNegotiation"] = auto_negotiation if macsec_enabled: linkmetas[port]["MacSecEnabled"] = macsec_enabled + if tx_power: + linkmetas[port]["tx_power"] = tx_power + # Convert the freq in GHz + if laser_freq: + linkmetas[port]["laser_freq"] = int(float(laser_freq)*1000) return linkmetas def parse_macsec_profile(val_string): @@ -1613,6 +1623,14 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw if macsec_enabled and 'PrimaryKey' in macsec_profile: port['macsec'] = macsec_profile['PrimaryKey'] + tx_power = linkmetas.get(alias, {}).get('tx_power') + if tx_power: + port['tx_power'] = tx_power + + laser_freq = linkmetas.get(alias, {}).get('laser_freq') + if laser_freq: + port['laser_freq'] = laser_freq + # set port description if parsed from deviceinfo for port_name in port_descriptions: # ignore port not in port_config.ini diff --git a/src/sonic-config-engine/tests/sample-chassis-packet-lc-graph.xml b/src/sonic-config-engine/tests/sample-chassis-packet-lc-graph.xml index ac83d87b96ca..6b22d30336c7 100644 --- a/src/sonic-config-engine/tests/sample-chassis-packet-lc-graph.xml +++ b/src/sonic-config-engine/tests/sample-chassis-packet-lc-graph.xml @@ -222,6 +222,25 @@ + + + + + + + Frequency + 131 + + + TxPower + 7.5 + + + str2-8808-lc2-1:Eth1/1/13;ARISTA01-RH:Ethernet1/1 + + + + diff --git a/src/sonic-config-engine/tests/sample-voq-graph.xml b/src/sonic-config-engine/tests/sample-voq-graph.xml index f1fa43620345..a43e64cf6599 100644 --- a/src/sonic-config-engine/tests/sample-voq-graph.xml +++ b/src/sonic-config-engine/tests/sample-voq-graph.xml @@ -79,6 +79,20 @@ linecard-1:Ethernet1/1;ARISTA01-RH:Ethernet1/1 + + + + + Frequency + 195.875 + + + TxPower + -10 + + + linecard-1:Ethernet2/1;ARISTA01-RH:Ethernet1/1 + diff --git a/src/sonic-config-engine/tests/test_cfggen.py b/src/sonic-config-engine/tests/test_cfggen.py index 232fded47eb5..1190ef9680e5 100644 --- a/src/sonic-config-engine/tests/test_cfggen.py +++ b/src/sonic-config-engine/tests/test_cfggen.py @@ -1008,3 +1008,17 @@ def test_minigraph_bgp_packet_chassis_vlan_subintf(self): utils.to_dict(output.strip()), utils.to_dict("{('PortChannel32.2', '192.168.1.4/24'): {}, 'PortChannel32.2': {'admin_status': 'up'}, ('PortChannel33.2', '192.168.2.4/24'): {}, 'PortChannel33.2': {'admin_status': 'up'}}") ) + + def test_minigraph_voq_400g_zr_port_config(self): + argument = "-j {} -m {} -p {} -v \"PORT[\'Ethernet4\']\"".format(self.macsec_profile, self.sample_graph_voq, self.voq_port_config) + output = self.run_script(argument) + output_dict = utils.to_dict(output.strip()) + self.assertEqual(output_dict['tx_power'], '-10') + self.assertEqual(output_dict['laser_freq'], 195875) + + def test_minigraph_packet_chassis_400g_zr_port_config(self): + argument = "-m {} -p {} -n asic1 -v \"PORT[\'Ethernet13\']\"".format(self.packet_chassis_graph, self.packet_chassis_port_ini) + output = self.run_script(argument) + output_dict = utils.to_dict(output.strip()) + self.assertEqual(output_dict['tx_power'], '7.5') + self.assertEqual(output_dict['laser_freq'], 131000) \ No newline at end of file From f63dc738f9cacc8e198f75d47d8e1265685bee3f Mon Sep 17 00:00:00 2001 From: Nikola Dancejic <26731235+Ndancejic@users.noreply.github.com> Date: Fri, 12 Aug 2022 11:34:10 -0700 Subject: [PATCH 206/259] [swss] Adding conditional for bgp when on multi ASIC platform (#11691) bgp should be a per-asic service, and runs for each namespace on multi-asic platforms. However, putting bgp in MULTI_INST_DEPENDENT causes swss to be restarted as well as bgp. this is causing issues after #11000 Issue: #11653 This fix: removes bgp from dependents list adds a conditional that either adds bgp, or bgp@$DEV to separate between single and multi-asic platforms --- files/scripts/swss.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/files/scripts/swss.sh b/files/scripts/swss.sh index 61315acc149f..93b1a3811c19 100755 --- a/files/scripts/swss.sh +++ b/files/scripts/swss.sh @@ -9,7 +9,9 @@ LOCKFILE="/tmp/swss-syncd-lock$DEV" NAMESPACE_PREFIX="asic" ETC_SONIC_PATH="/etc/sonic/" -DEPENDENT="radv bgp" +# DEPENDENT initially contains namespace independent services +# namespace specific services are added later in this script. +DEPENDENT="radv" MULTI_INST_DEPENDENT="teamd" . /usr/local/bin/asic_status.sh @@ -309,9 +311,11 @@ function check_peer_gbsyncd() if [ "$DEV" ]; then NET_NS="$NAMESPACE_PREFIX$DEV" #name of the network namespace SONIC_DB_CLI="sonic-db-cli -n $NET_NS" + DEPENDENT+=" bgp@${DEV}" else NET_NS="" SONIC_DB_CLI="sonic-db-cli" + DEPENDENT+=" bgp" fi check_peer_gbsyncd From fc09ae01d4e21f047609223bb5578784ba737a89 Mon Sep 17 00:00:00 2001 From: jingwenxie Date: Wed, 17 Aug 2022 14:17:46 +0800 Subject: [PATCH 207/259] Add yang_config_validation in device_info (#11715) Why I did it Put yang_config_validation in common lib and make it reusabe How I did it Move the definition to device_info.py --- src/sonic-py-common/sonic_py_common/device_info.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/sonic-py-common/sonic_py_common/device_info.py b/src/sonic-py-common/sonic_py_common/device_info.py index d57e08b3b5cb..f98fa2df1e2e 100644 --- a/src/sonic-py-common/sonic_py_common/device_info.py +++ b/src/sonic-py-common/sonic_py_common/device_info.py @@ -404,6 +404,10 @@ def get_chassis_info(): return chassis_info_dict + +def is_yang_config_validation_enabled(config_db): + return get_localhost_info('yang_config_validation', config_db) == 'enable' + # # Multi-NPU functionality # From 91b7018910322ab276c56af6039b4b572283f9ec Mon Sep 17 00:00:00 2001 From: bingwang-ms <66248323+bingwang-ms@users.noreply.github.com> Date: Tue, 16 Aug 2022 07:50:04 +0800 Subject: [PATCH 208/259] Disable tunnel qos remap on KVM (#11735) --- src/sonic-config-engine/minigraph.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index b9f9c7340b4f..b67595247db3 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -1459,7 +1459,9 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw # Enable tunnel_qos_remap if downstream_redundancy_types(T1) or redundancy_type(T0) = Gemini/Libra enable_tunnel_qos_map = False - if results['DEVICE_METADATA']['localhost']['type'].lower() == 'leafrouter' and ('gemini' in str(downstream_redundancy_types).lower() or 'libra' in str(downstream_redundancy_types).lower()): + if platform and 'kvm' in platform: + enable_tunnel_qos_map = False + elif results['DEVICE_METADATA']['localhost']['type'].lower() == 'leafrouter' and ('gemini' in str(downstream_redundancy_types).lower() or 'libra' in str(downstream_redundancy_types).lower()): enable_tunnel_qos_map = True elif results['DEVICE_METADATA']['localhost']['type'].lower() == 'torrouter' and ('gemini' in str(redundancy_type).lower() or 'libra' in str(redundancy_type).lower()): enable_tunnel_qos_map = True From 9ee2724992d5835227ef57907932ed51bc56bca3 Mon Sep 17 00:00:00 2001 From: bingwang-ms <66248323+bingwang-ms@users.noreply.github.com> Date: Wed, 17 Aug 2022 08:58:35 +0800 Subject: [PATCH 209/259] Update Yang for pfc_enable field (#11747) Why I did it This PR is to update Yang model for pfc_enable and pfcwd_sw_enable fields to support more than 2 queues, like 2,3,4,6. Before this change, the regex "[0-7](,[0-7])?" accepts only no more than 2 queues. How I did it Update the regex pattern for pfc_enable and pfcwd_sw_enable, from "[0-7](,[0-7])?" to "[0-7](,[0-7])* How to verify it The change is verified by UT. The test input is updated to cover the change. collected 3 items tests/test_sonic_yang_models.py .. [ 66%] tests/yang_model_tests/test_yang_model.py . --- .../tests/yang_model_tests/tests_config/qosmaps.json | 4 ++-- src/sonic-yang-models/yang-models/sonic-port-qos-map.yang | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/qosmaps.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/qosmaps.json index a05d80631f1f..0992f8776df8 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/qosmaps.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/qosmaps.json @@ -669,8 +669,8 @@ "pfc_to_pg_map": "map1", "dscp_to_tc_map": "map1", "dot1p_to_tc_map": "map1", - "pfc_enable": "3,4", - "pfcwd_sw_enable" : "3,4" + "pfc_enable": "2,3,4,6", + "pfcwd_sw_enable" : "2,3,4,6" } ] } diff --git a/src/sonic-yang-models/yang-models/sonic-port-qos-map.yang b/src/sonic-yang-models/yang-models/sonic-port-qos-map.yang index 53ef7f48f5b7..09dcb7ce9c39 100644 --- a/src/sonic-yang-models/yang-models/sonic-port-qos-map.yang +++ b/src/sonic-yang-models/yang-models/sonic-port-qos-map.yang @@ -82,13 +82,13 @@ module sonic-port-qos-map { leaf pfc_enable { type string { - pattern "[0-7](,[0-7])?"; + pattern "[0-7](,[0-7])*"; } } leaf pfcwd_sw_enable { type string { - pattern "[0-7](,[0-7])?"; + pattern "[0-7](,[0-7])*"; } description "Specify the queue(s) on which software pfc watchdog are enabled."; From 91f3502539c4827e529268a4222515c0460acf51 Mon Sep 17 00:00:00 2001 From: Prince George <45705344+prgeor@users.noreply.github.com> Date: Sun, 12 Jun 2022 09:14:35 -0700 Subject: [PATCH 210/259] Yang model for xcvr tx power and frequency configuration (#11053) * Yang model for xcvr tx power and frequency configuration * Add unit test cases * Addressed review comments --- src/sonic-yang-models/doc/Configuration.md | 12 +++- .../tests/files/sample_config_db.json | 8 ++- .../tests/yang_model_tests/tests/port.json | 16 +++++ .../yang_model_tests/tests_config/port.json | 68 +++++++++++++++++++ .../yang-models/sonic-port.yang | 12 ++++ 5 files changed, 111 insertions(+), 5 deletions(-) diff --git a/src/sonic-yang-models/doc/Configuration.md b/src/sonic-yang-models/doc/Configuration.md index 3a3cdcc883a4..991ed091c8dc 100644 --- a/src/sonic-yang-models/doc/Configuration.md +++ b/src/sonic-yang-models/doc/Configuration.md @@ -1196,7 +1196,9 @@ optional attributes. "mtu": "9100", "alias": "fortyGigE1/1/1", "speed": "40000", - "link_training": "off" + "link_training": "off", + "laser_freq": "191300", + "tx_power": "-27.3" }, "Ethernet1": { "index": "1", @@ -1206,7 +1208,9 @@ optional attributes. "alias": "fortyGigE1/1/2", "admin_status": "up", "speed": "40000", - "link_training": "on" + "link_training": "on", + "laser_freq": "191300", + "tx_power": "-27.3" }, "Ethernet63": { "index": "63", @@ -1214,7 +1218,9 @@ optional attributes. "description": "fortyGigE1/4/16", "mtu": "9100", "alias": "fortyGigE1/4/16", - "speed": "40000" + "speed": "40000", + "laser_freq": "191300", + "tx_power": "-27.3" } } } diff --git a/src/sonic-yang-models/tests/files/sample_config_db.json b/src/sonic-yang-models/tests/files/sample_config_db.json index 0be6f6cb16ad..db613c23bcd2 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -447,7 +447,9 @@ "asic_port_name": "Eth0-ASIC1", "role": "Ext", "macsec": "test", - "link_training": "off" + "link_training": "off", + "laser_freq": "191600", + "tx_power": "-26.6" }, "Ethernet1": { "alias": "Eth1/2", @@ -459,7 +461,9 @@ "autoneg": "on", "adv_speeds": "100000,50000", "adv_interface_types": "CR,CR4", - "link_training": "on" + "link_training": "on", + "laser_freq": "191300", + "tx_power": "-27.3" }, "Ethernet2": { "alias": "Eth1/3", diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/port.json b/src/sonic-yang-models/tests/yang_model_tests/tests/port.json index 0d67a73148b3..3b94cedab4d9 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/port.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/port.json @@ -69,6 +69,22 @@ "desc": "PORT_INVALID_ADVTYPES_TEST_2 must condition failure.", "eStrKey" : "Must" }, + "PORT_VALID_XCVR_FREQ_TEST": { + "desc": "PORT_VALID_XCVR_FREQ_TEST no failure" + }, + "PORT_VALID_XCVR_TX_POWER_TEST": { + "desc": "PORT_VALID_XCVR_TX_POWER_TEST no failure" + }, + "PORT_INVALID_XCVR_FREQ_TEST": { + "desc": "PORT_INVALID_XCVR_FREQ_TEST non-integer value, expect failure", + "eStrKey": "InvalidValue", + "eStr": ["laser_freq"] + }, + "PORT_INVALID_XCVR_TX_POWER_TEST": { + "desc": "PORT_INVALID_XCVR_TX_POWER_TEST non-float value, expect failure", + "eStrKey": "InvalidValue", + "eStr": ["tx_power"] + }, "PORT_VALID_LINK_TRAINING_TEST_1": { "desc": "PORT_VALID_LINK_TRAINING_TEST_1 no failure." }, diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/port.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/port.json index 7f5c91230df8..b6ccf9ec8780 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/port.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/port.json @@ -311,6 +311,74 @@ } }, + "PORT_VALID_XCVR_FREQ_TEST": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "name": "Ethernet8", + "alias": "eth8", + "lanes": "65", + "speed": 25000, + "tpid": "0x8100", + "laser_freq": 193100 + } + ] + } + } + }, + + "PORT_VALID_XCVR_TX_POWER_TEST": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "name": "Ethernet8", + "alias": "eth8", + "lanes": "65", + "speed": 25000, + "tpid": "0x8100", + "tx_power": "27.3" + } + ] + } + } + }, + + "PORT_INVALID_XCVR_FREQ_TEST": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "name": "Ethernet8", + "alias": "eth8", + "lanes": "65", + "speed": 25000, + "tpid": "0x8100", + "laser_freq": "27.3" + } + ] + } + } + }, + + "PORT_INVALID_XCVR_TX_POWER_TEST": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "name": "Ethernet8", + "alias": "eth8", + "lanes": "65", + "speed": 25000, + "tpid": "0x8100", + "tx_power": "27/4" + } + ] + } + } + }, + "PORT_VALID_LINK_TRAINING_TEST_1": { "sonic-port:sonic-port": { "sonic-port:PORT": { diff --git a/src/sonic-yang-models/yang-models/sonic-port.yang b/src/sonic-yang-models/yang-models/sonic-port.yang index 6921613624ff..6e03f777a859 100644 --- a/src/sonic-yang-models/yang-models/sonic-port.yang +++ b/src/sonic-yang-models/yang-models/sonic-port.yang @@ -171,6 +171,18 @@ module sonic-port{ } } + leaf tx_power { + description "Target output power(dBm) for the 400G ZR transceiver"; + type decimal64 { + fraction-digits 1; + } + } + + leaf laser_freq { + description "Target laser frequency(GHz) for the 400G ZR transceiver"; + type int32; + } + } /* end of list PORT_LIST */ } /* end of container PORT */ From 492e64724018bf71483c4818ab8d9f47c7008ed9 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Thu, 18 Aug 2022 08:29:55 -0700 Subject: [PATCH 211/259] [202205] address multiple linux-kernel submodule entries issue (#11765) Signed-off-by: Ying Xie --- .gitmodules | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index 33f79b5f9e87..6f1a611a1ea0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,6 +5,7 @@ [submodule "sonic-linux-kernel"] path = src/sonic-linux-kernel url = https://github.com/Azure/sonic-linux-kernel + branch = 202205 [submodule "sonic-sairedis"] path = src/sonic-sairedis url = https://github.com/Azure/sonic-sairedis @@ -35,10 +36,6 @@ path = src/sonic-utilities url = https://github.com/Azure/sonic-utilities branch = 202205 -[submodule "src/sonic-linux-kernel"] - path = src/sonic-linux-kernel - url = https://github.com/sonic-net/sonic-linux-kernel - branch = 202205 [submodule "platform/broadcom/sonic-platform-modules-arista"] path = platform/broadcom/sonic-platform-modules-arista url = https://github.com/aristanetworks/sonic From ddf3110f366dd1a96e65354ebdb7475bf7781e1d Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Fri, 19 Aug 2022 07:24:43 -0700 Subject: [PATCH 212/259] [202205][linkmgrd][swss][sairedis][platform-daemon][swsssdk] advance submodule head (#11761) linkmgrd: * 476f85e 2022-08-17 | Update linkmgr health after getting default route update (#117) (HEAD -> 202205, github/202205) [Longxiang Lyu] * fc589e9 2022-08-17 | Use `table` to toggle peer forwarding state (#108) (#120) [Longxiang Lyu] * bcb5a56 2022-08-17 | Fix azure pipeline (#118) (#121) [Longxiang Lyu] swss: * ef3a601 2022-08-17 | [muxorch] Returning true if nbr in skip_neighbor_ in isNeighborActive() (#2415) (HEAD -> 202205) [Nikola Dancejic] sairedis: * aed01cd 2022-08-12 | Fix: missing sonic-db-cli in docker-sonic-vs image (#1072) (#1104) (github/202205) [Hua Liu] platform-daemon: * 5a68073 2022-08-01 | Xcvrd changes to support 400G ZR configuration (#270) (HEAD -> 202205) [Prince George] swsssdk: * ca785a2 2022-06-01 | Remove sonic-db-cli (#122) (HEAD -> 202205, origin/202205) [Hua Liu] Signed-off-by: Ying Xie Signed-off-by: Ying Xie --- src/linkmgrd | 2 +- src/sonic-platform-daemons | 2 +- src/sonic-py-swsssdk | 2 +- src/sonic-sairedis | 2 +- src/sonic-swss | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/linkmgrd b/src/linkmgrd index cf1ba2b45357..476f85e2333d 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit cf1ba2b4535728f769d913567bc9153a99a16ef0 +Subproject commit 476f85e2333d34f6469f8914245dfcad2348af89 diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index 767cfb60d297..5a68073b66bf 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit 767cfb60d2978f38a935825ada62fd9ffc73820a +Subproject commit 5a68073b66bf721f0e1c84033b32c209b6f60b7d diff --git a/src/sonic-py-swsssdk b/src/sonic-py-swsssdk index 653bdba51750..ca785a2cc6a8 160000 --- a/src/sonic-py-swsssdk +++ b/src/sonic-py-swsssdk @@ -1 +1 @@ -Subproject commit 653bdba51750cac95feb3dd47904bf4de2353fec +Subproject commit ca785a2cc6a8a06fdb1145d5f4ff50ec7c5d25a6 diff --git a/src/sonic-sairedis b/src/sonic-sairedis index c62a45351da4..aed01cd320f1 160000 --- a/src/sonic-sairedis +++ b/src/sonic-sairedis @@ -1 +1 @@ -Subproject commit c62a45351da491b7144996c19ea1cda6a494b7b4 +Subproject commit aed01cd320f1e6eece7186aef026fe8a5635d892 diff --git a/src/sonic-swss b/src/sonic-swss index 3f69944d8be7..facc3a4454ed 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 3f69944d8be7893c79b2c0e96972190cad9c3b38 +Subproject commit facc3a4454ed8ad42d831dc5affa767505d2c1ba From dd42d828a409f4cfce11127701bbeb39b3c9ced1 Mon Sep 17 00:00:00 2001 From: Mai Bui Date: Wed, 17 Aug 2022 17:30:58 -0400 Subject: [PATCH 213/259] Replace strtok in systemd-sonic-generator (#11710) Signed-off-by: maipbui #### Why I did it Replace unsafe functions to safe functions #### How I did it Replace `strtok()` by `strtok_r()` #### How to verify it #### Which release branch to backport (provide reason below if selected) - [ ] 201811 - [ ] 201911 - [ ] 202006 - [ ] 202012 - [ ] 202106 - [ ] 202111 - [ ] 202205 #### Description for the changelog #### Link to config_db schema for YANG module changes #### A picture of a cute animal (not mandatory but encouraged) --- .../systemd-sonic-generator.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/systemd-sonic-generator/systemd-sonic-generator.c b/src/systemd-sonic-generator/systemd-sonic-generator.c index 96193b9fe3e3..0c419893c35b 100644 --- a/src/systemd-sonic-generator/systemd-sonic-generator.c +++ b/src/systemd-sonic-generator/systemd-sonic-generator.c @@ -121,6 +121,7 @@ static int get_install_targets_from_line(char* target_string, char* install_type ***/ char* token; char* target; + char* saveptr; char final_target[PATH_MAX]; int num_targets = 0; @@ -135,8 +136,8 @@ static int get_install_targets_from_line(char* target_string, char* install_type strip_trailing_newline(target); if (strstr(target, "%") != NULL) { - char* prefix = strtok(target, "."); - char* suffix = strtok(NULL, "."); + char* prefix = strtok_r(target, ".", &saveptr); + char* suffix = strtok_r(NULL, ".", &saveptr); int prefix_len = strlen(prefix); strncpy(final_target, prefix, prefix_len - 2); @@ -516,6 +517,7 @@ int get_num_of_asic() { char *line = NULL; char* token; char* platform; + char* saveptr; size_t len = 0; ssize_t nread; bool ans; @@ -534,8 +536,8 @@ int get_num_of_asic() { while ((nread = getline(&line, &len, fp)) != -1) { if ((strstr(line, "onie_platform") != NULL) || (strstr(line, "aboot_platform") != NULL)) { - token = strtok(line, "="); - platform = strtok(NULL, "="); + token = strtok_r(line, "=", &saveptr); + platform = strtok_r(NULL, "=", &saveptr); strip_trailing_newline(platform); break; } @@ -547,8 +549,8 @@ int get_num_of_asic() { if (fp != NULL) { while ((nread = getline(&line, &len, fp)) != -1) { if (strstr(line, "NUM_ASIC") != NULL) { - token = strtok(line, "="); - str_num_asic = strtok(NULL, "="); + token = strtok_r(line, "=", &saveptr); + str_num_asic = strtok_r(NULL, "=", &saveptr); strip_trailing_newline(str_num_asic); if (str_num_asic != NULL){ sscanf(str_num_asic, "%d",&num_asic); @@ -571,6 +573,7 @@ int ssg_main(int argc, char **argv) { char* unit_instance; char* prefix; char* suffix; + char* saveptr; int num_unit_files; int num_targets; int r; @@ -589,8 +592,8 @@ int ssg_main(int argc, char **argv) { for (int i = 0; i < num_unit_files; i++) { unit_instance = strdup(unit_files[i]); if ((num_asics == 1) && strstr(unit_instance, "@") != NULL) { - prefix = strtok(unit_instance, "@"); - suffix = strtok(NULL, "@"); + prefix = strtok_r(unit_instance, "@", &saveptr); + suffix = strtok_r(NULL, "@", &saveptr); strcpy(unit_instance, prefix); strcat(unit_instance, suffix); From 75844e6b2abca029998df0c7ab79126275acc7a6 Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox <57339448+Junchao-Mellanox@users.noreply.github.com> Date: Thu, 18 Aug 2022 18:07:38 +0800 Subject: [PATCH 214/259] [Mellanox] Fix issue: set lpmode by platform API does not work (#11732) - Why I did it Fix issue: set lpmode by platform API does not work - How I did it Fix miss return value in code - How to verify it Manual test --- platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py | 4 +++- platform/mellanox/mlnx-platform-api/tests/test_sfp.py | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py index 3ee8b348ce00..617b4f33d636 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py @@ -53,6 +53,8 @@ SX_PORT_MODULE_STATUS_UNPLUGGED = 2 SX_PORT_MODULE_STATUS_PLUGGED_WITH_ERROR = 3 SX_PORT_MODULE_STATUS_PLUGGED_DISABLED = 4 + SX_PORT_ADMIN_STATUS_UP = True + SX_PORT_ADMIN_STATUS_DOWN = False except KeyError: pass @@ -571,7 +573,7 @@ def _fetch_port_status(cls, sdk_handle, log_port): @classmethod def is_port_admin_status_up(cls, sdk_handle, log_port): _, admin_state = cls._fetch_port_status(sdk_handle, log_port); - admin_state == SX_PORT_ADMIN_STATUS_UP + return admin_state == SX_PORT_ADMIN_STATUS_UP @classmethod diff --git a/platform/mellanox/mlnx-platform-api/tests/test_sfp.py b/platform/mellanox/mlnx-platform-api/tests/test_sfp.py index b932856fa38c..f599e0241d25 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_sfp.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_sfp.py @@ -111,3 +111,11 @@ def test_sfp_read_eeprom(self): sfp = SFP(0) assert output_sfp.y_cable_part_number == sfp.read_eeprom(offset, 16).decode() MlxregManager.read_mlxred_eeprom.assert_called_with(132, 4, 16) + + @mock.patch('sonic_platform.sfp.SFP._fetch_port_status') + def test_is_port_admin_status_up(self, mock_port_status): + mock_port_status.return_value = (0, True) + assert SFP.is_port_admin_status_up(None, None) + + mock_port_status.return_value = (0, False) + assert not SFP.is_port_admin_status_up(None, None) From 0355caf20bb19bf39aca5f1059b0f509d71a7e09 Mon Sep 17 00:00:00 2001 From: abdosi <58047199+abdosi@users.noreply.github.com> Date: Wed, 17 Aug 2022 14:02:21 -0700 Subject: [PATCH 215/259] Added support to add gbsyncd in Feature Table of Host Config DB (#11754) Why I did: In case of multi-asic platforms gbsyncd is not getting added to Feature Table of Host Config DB. Without this container_checker complains of not needed gbsyncd container's are running. How I did: Update Both Host and Namespace config db when gbsyncd docker is starting. How I verify: Verified on Multi-asic platforms. --- files/scripts/gbsyncd.sh | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/files/scripts/gbsyncd.sh b/files/scripts/gbsyncd.sh index 0990de5d8257..a7eaaced0cd6 100755 --- a/files/scripts/gbsyncd.sh +++ b/files/scripts/gbsyncd.sh @@ -3,11 +3,15 @@ . /usr/local/bin/syncd_common.sh function startplatform() { - # Add gbsyncd to FEATURE table, if not in. It did have same config as syncd. - if [ -z $($SONIC_DB_CLI CONFIG_DB HGET 'FEATURE|gbsyncd' state) ]; then - local CMD="local r=redis.call('DUMP', KEYS[1]); redis.call('RESTORE', KEYS[2], 0, r)" - $SONIC_DB_CLI CONFIG_DB EVAL "$CMD" 2 'FEATURE|syncd' 'FEATURE|gbsyncd' - fi + + declare -a DbCliArray=($SONIC_DB_CLI $SONIC_DB_NS_CLI) + for DB_CLI in ${DbCliArray[@]}; do + # Add gbsyncd to FEATURE table, if not in. It did have same config as syncd. + if [ -z $($DB_CLI CONFIG_DB HGET 'FEATURE|gbsyncd' state) ]; then + local CMD="local r=redis.call('DUMP', KEYS[1]); redis.call('RESTORE', KEYS[2], 0, r)" + $DB_CLI CONFIG_DB EVAL "$CMD" 2 'FEATURE|syncd' 'FEATURE|gbsyncd' + fi + done } function waitplatform() { @@ -30,12 +34,11 @@ PEER="swss" DEBUGLOG="/tmp/swss-$SERVICE-debug$DEV.log" LOCKFILE="/tmp/swss-$SERVICE-lock$DEV" NAMESPACE_PREFIX="asic" +SONIC_DB_CLI="sonic-db-cli" +SONIC_DB_NS_CLI="sonic-db-cli" if [ "$DEV" ]; then NET_NS="$NAMESPACE_PREFIX$DEV" #name of the network namespace - SONIC_DB_CLI="sonic-db-cli -n $NET_NS" -else - NET_NS="" - SONIC_DB_CLI="sonic-db-cli" + SONIC_DB_NS_CLI="sonic-db-cli -n $NET_NS" fi case "$1" in From 42c96feb9b5a11e978ab1242db83cba24d5b1d73 Mon Sep 17 00:00:00 2001 From: Kebo Liu Date: Sat, 20 Aug 2022 01:59:36 +0800 Subject: [PATCH 216/259] update Mellanox SDK/FW to 4.5.2318 2010.2318 (#11788) Why I did it Update SDK/FW version - 4.5.2318/2010_2318 to pick up new fixes: Cr space timeout on Hold and Release GW - at warm boot SPC-1 Port in stuck PHY_UP after peer side rebooted memory leak in sx_api_router_ecmp_update_set How I did it update the make file with the new version number update submodule Switch-SDK-drivers pointer How to verify it run sonic regression Signed-off-by: Kebo Liu --- platform/mellanox/fw.mk | 6 +++--- platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers | 2 +- platform/mellanox/sdk.mk | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/platform/mellanox/fw.mk b/platform/mellanox/fw.mk index 0dc3800155ea..f6beeb990bd7 100644 --- a/platform/mellanox/fw.mk +++ b/platform/mellanox/fw.mk @@ -27,17 +27,17 @@ else FW_FROM_URL = n endif -MLNX_SPC_FW_VERSION = 13.2010.2262 +MLNX_SPC_FW_VERSION = 13.2010.2318 MLNX_SPC_FW_FILE = fw-SPC-rel-$(subst .,_,$(MLNX_SPC_FW_VERSION))-EVB.mfa $(MLNX_SPC_FW_FILE)_PATH = $(MLNX_FW_BASE_PATH) $(MLNX_SPC_FW_FILE)_URL = $(MLNX_FW_BASE_URL)/$(MLNX_SPC_FW_FILE) -MLNX_SPC2_FW_VERSION = 29.2010.2262 +MLNX_SPC2_FW_VERSION = 29.2010.2318 MLNX_SPC2_FW_FILE = fw-SPC2-rel-$(subst .,_,$(MLNX_SPC2_FW_VERSION))-EVB.mfa $(MLNX_SPC2_FW_FILE)_PATH = $(MLNX_FW_BASE_PATH) $(MLNX_SPC2_FW_FILE)_URL = $(MLNX_FW_BASE_URL)/$(MLNX_SPC2_FW_FILE) -MLNX_SPC3_FW_VERSION = 30.2010.2262 +MLNX_SPC3_FW_VERSION = 30.2010.2318 MLNX_SPC3_FW_FILE = fw-SPC3-rel-$(subst .,_,$(MLNX_SPC3_FW_VERSION))-EVB.mfa $(MLNX_SPC3_FW_FILE)_PATH = $(MLNX_FW_BASE_PATH) $(MLNX_SPC3_FW_FILE)_URL = $(MLNX_FW_BASE_URL)/$(MLNX_SPC3_FW_FILE) diff --git a/platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers b/platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers index e9fa9a843702..7d4071a89f34 160000 --- a/platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers +++ b/platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers @@ -1 +1 @@ -Subproject commit e9fa9a843702aa55b13c8eb01c7a1f188e4a16a9 +Subproject commit 7d4071a89f34dc1dce4a9e832a0fd27c26acb485 diff --git a/platform/mellanox/sdk.mk b/platform/mellanox/sdk.mk index 2412cf0ca705..076b81d91407 100644 --- a/platform/mellanox/sdk.mk +++ b/platform/mellanox/sdk.mk @@ -16,7 +16,7 @@ # MLNX_SDK_BASE_PATH = $(PLATFORM_PATH)/sdk-src/sx-kernel/Switch-SDK-drivers/bin/ MLNX_SDK_PKG_BASE_PATH = $(MLNX_SDK_BASE_PATH)/$(BLDENV)/$(CONFIGURED_ARCH)/ -MLNX_SDK_VERSION = 4.5.2262 +MLNX_SDK_VERSION = 4.5.2318 MLNX_SDK_ISSU_VERSION = 101 MLNX_SDK_DEB_VERSION = $(subst -,.,$(subst _,.,$(MLNX_SDK_VERSION))) From 1d627f73c85fe68d980c3367fac4db91a00937ae Mon Sep 17 00:00:00 2001 From: Sambath Kumar Balasubramanian <63021927+skbarista@users.noreply.github.com> Date: Fri, 19 Aug 2022 16:15:12 -0700 Subject: [PATCH 217/259] [Chassis][Voq] Update bcm config file system_ref_core_clock_khz param for j2cplus linecards. (#11760) Update the bcm config file system_ref_core_clock_khz param to handlesystems with J2cplus linecards. We need system_ref_core_clock_khz to be set to 1600000 for supporting j2 and j2cplus linecards on the same chassis. --- .../Arista-7804R3-FM/0/ramon-a7800-7804r3-fm.config.bcm | 1 + .../Arista-7804R3-FM/1/ramon-a7800-7804r3-fm.config.bcm | 1 + .../Arista-7804R3-FM/10/ramon-a7800-7804r3-fm.config.bcm | 1 + .../Arista-7804R3-FM/11/ramon-a7800-7804r3-fm.config.bcm | 1 + .../Arista-7804R3-FM/2/ramon-a7800-7804r3-fm.config.bcm | 1 + .../Arista-7804R3-FM/3/ramon-a7800-7804r3-fm.config.bcm | 1 + .../Arista-7804R3-FM/4/ramon-a7800-7804r3-fm.config.bcm | 1 + .../Arista-7804R3-FM/5/ramon-a7800-7804r3-fm.config.bcm | 1 + .../Arista-7804R3-FM/6/ramon-a7800-7804r3-fm.config.bcm | 1 + .../Arista-7804R3-FM/7/ramon-a7800-7804r3-fm.config.bcm | 1 + .../Arista-7804R3-FM/8/ramon-a7800-7804r3-fm.config.bcm | 1 + .../Arista-7804R3-FM/9/ramon-a7800-7804r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/0/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/1/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/10/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/11/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/12/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/13/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/14/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/15/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/16/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/17/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/2/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/3/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/4/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/5/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/6/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/7/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/8/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3-FM/9/ramon-a7800-7808r3-fm.config.bcm | 1 + .../Arista-7808R3A-FM/0/ramon-a7800-7808r3a-fm.config.bcm | 1 + .../Arista-7808R3A-FM/1/ramon-a7800-7808r3a-fm.config.bcm | 1 + .../Arista-7808R3A-FM/10/ramon-a7800-7808r3a-fm.config.bcm | 1 + .../Arista-7808R3A-FM/11/ramon-a7800-7808r3a-fm.config.bcm | 1 + .../Arista-7808R3A-FM/2/ramon-a7800-7808r3a-fm.config.bcm | 1 + .../Arista-7808R3A-FM/3/ramon-a7800-7808r3a-fm.config.bcm | 1 + .../Arista-7808R3A-FM/4/ramon-a7800-7808r3a-fm.config.bcm | 1 + .../Arista-7808R3A-FM/5/ramon-a7800-7808r3a-fm.config.bcm | 1 + .../Arista-7808R3A-FM/6/ramon-a7800-7808r3a-fm.config.bcm | 1 + .../Arista-7808R3A-FM/7/ramon-a7800-7808r3a-fm.config.bcm | 1 + .../Arista-7808R3A-FM/8/ramon-a7800-7808r3a-fm.config.bcm | 1 + .../Arista-7808R3A-FM/9/ramon-a7800-7808r3a-fm.config.bcm | 1 + .../Arista-7800R3-48CQ2-C48/jr2-a7280cr3-32d4-40x100G.config.bcm | 1 + .../0/j2p-a7800r3a-36d-36x400G.config.bcm | 1 + src/sonic-device-data/tests/permitted_list | 1 + 45 files changed, 45 insertions(+) diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/0/ramon-a7800-7804r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/0/ramon-a7800-7804r3-fm.config.bcm index e5e17e3b6ae9..5cb0d250f3ab 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/0/ramon-a7800-7804r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/0/ramon-a7800-7804r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=300 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/1/ramon-a7800-7804r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/1/ramon-a7800-7804r3-fm.config.bcm index 256a1703954b..c6f3ccc0bfa6 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/1/ramon-a7800-7804r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/1/ramon-a7800-7804r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=301 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/10/ramon-a7800-7804r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/10/ramon-a7800-7804r3-fm.config.bcm index 9017f8bfec8f..45df9ea89f42 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/10/ramon-a7800-7804r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/10/ramon-a7800-7804r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=310 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/11/ramon-a7800-7804r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/11/ramon-a7800-7804r3-fm.config.bcm index 1cefd991316e..de756a7feb41 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/11/ramon-a7800-7804r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/11/ramon-a7800-7804r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=311 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/2/ramon-a7800-7804r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/2/ramon-a7800-7804r3-fm.config.bcm index 2312bc47e2d0..5b9d0fd741ae 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/2/ramon-a7800-7804r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/2/ramon-a7800-7804r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=302 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/3/ramon-a7800-7804r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/3/ramon-a7800-7804r3-fm.config.bcm index b8fbf3041af3..871f154a10fc 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/3/ramon-a7800-7804r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/3/ramon-a7800-7804r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=303 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/4/ramon-a7800-7804r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/4/ramon-a7800-7804r3-fm.config.bcm index 55772daf4c40..ae10492b703f 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/4/ramon-a7800-7804r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/4/ramon-a7800-7804r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=304 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/5/ramon-a7800-7804r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/5/ramon-a7800-7804r3-fm.config.bcm index 5e3505ccacb8..22f1106dff0c 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/5/ramon-a7800-7804r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/5/ramon-a7800-7804r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=305 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/6/ramon-a7800-7804r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/6/ramon-a7800-7804r3-fm.config.bcm index 6be28dd404f6..89e7c0cb54af 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/6/ramon-a7800-7804r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/6/ramon-a7800-7804r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=306 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/7/ramon-a7800-7804r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/7/ramon-a7800-7804r3-fm.config.bcm index 6c88175d329b..48a685a0b26d 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/7/ramon-a7800-7804r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/7/ramon-a7800-7804r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=307 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/8/ramon-a7800-7804r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/8/ramon-a7800-7804r3-fm.config.bcm index c4f8ee04da71..29447d393bcc 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/8/ramon-a7800-7804r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/8/ramon-a7800-7804r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=308 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/9/ramon-a7800-7804r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/9/ramon-a7800-7804r3-fm.config.bcm index 7b93cf10159e..b5bdef729fa6 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/9/ramon-a7800-7804r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7804R3-FM/9/ramon-a7800-7804r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=309 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/0/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/0/ramon-a7800-7808r3-fm.config.bcm index 470130f1b654..cdb16f58ba2a 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/0/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/0/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=300 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/1/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/1/ramon-a7800-7808r3-fm.config.bcm index da6bd74f39c7..2776e67b5813 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/1/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/1/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=301 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/10/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/10/ramon-a7800-7808r3-fm.config.bcm index 2d8151106648..bb5036077d8a 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/10/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/10/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=310 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/11/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/11/ramon-a7800-7808r3-fm.config.bcm index 6ed6bac4ef83..ce67659354ce 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/11/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/11/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=311 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/12/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/12/ramon-a7800-7808r3-fm.config.bcm index 28f304845048..3b6ffba4d1ff 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/12/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/12/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=312 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/13/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/13/ramon-a7800-7808r3-fm.config.bcm index 18cd196ce7a4..a49289333d0a 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/13/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/13/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=313 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/14/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/14/ramon-a7800-7808r3-fm.config.bcm index e8046fa39a74..acacc0e2a960 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/14/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/14/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=314 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/15/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/15/ramon-a7800-7808r3-fm.config.bcm index 381a34753801..4054797541b6 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/15/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/15/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=315 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/16/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/16/ramon-a7800-7808r3-fm.config.bcm index f3ca3801d121..b87db6fcd484 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/16/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/16/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=316 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/17/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/17/ramon-a7800-7808r3-fm.config.bcm index 35ec8049d7ec..7566a13b3a1c 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/17/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/17/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=317 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/2/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/2/ramon-a7800-7808r3-fm.config.bcm index dd03f42dc90e..8eb45b6dec32 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/2/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/2/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=302 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/3/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/3/ramon-a7800-7808r3-fm.config.bcm index 8a90ad23c656..40ca2d753f1c 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/3/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/3/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=303 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/4/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/4/ramon-a7800-7808r3-fm.config.bcm index 6563663be874..e81c4906a20f 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/4/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/4/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=304 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/5/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/5/ramon-a7800-7808r3-fm.config.bcm index 3b063fdc0838..645783d29c25 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/5/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/5/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=305 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/6/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/6/ramon-a7800-7808r3-fm.config.bcm index 6363c9a4e5b3..856f607b9f75 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/6/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/6/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=306 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/7/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/7/ramon-a7800-7808r3-fm.config.bcm index c8e3d0655565..5d01b2381620 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/7/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/7/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=307 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/8/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/8/ramon-a7800-7808r3-fm.config.bcm index f941e2d6c008..d201b4af9444 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/8/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/8/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=308 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/9/ramon-a7800-7808r3-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/9/ramon-a7800-7808r3-fm.config.bcm index 44911e45d40b..359ea39c227b 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/9/ramon-a7800-7808r3-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3-FM/9/ramon-a7800-7808r3-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=309 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/0/ramon-a7800-7808r3a-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/0/ramon-a7800-7808r3a-fm.config.bcm index 05d64a051002..01b653e52a83 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/0/ramon-a7800-7808r3a-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/0/ramon-a7800-7808r3a-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=300 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/1/ramon-a7800-7808r3a-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/1/ramon-a7800-7808r3a-fm.config.bcm index da6bd74f39c7..2776e67b5813 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/1/ramon-a7800-7808r3a-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/1/ramon-a7800-7808r3a-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=301 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/10/ramon-a7800-7808r3a-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/10/ramon-a7800-7808r3a-fm.config.bcm index ff78061473a1..5467983f8f50 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/10/ramon-a7800-7808r3a-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/10/ramon-a7800-7808r3a-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=310 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/11/ramon-a7800-7808r3a-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/11/ramon-a7800-7808r3a-fm.config.bcm index d9b56745a313..066dd04c288e 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/11/ramon-a7800-7808r3a-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/11/ramon-a7800-7808r3a-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=311 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/2/ramon-a7800-7808r3a-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/2/ramon-a7800-7808r3a-fm.config.bcm index b8364c931151..ec0d99829a6e 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/2/ramon-a7800-7808r3a-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/2/ramon-a7800-7808r3a-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=302 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/3/ramon-a7800-7808r3a-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/3/ramon-a7800-7808r3a-fm.config.bcm index f2b392c4f341..929ab1ab6381 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/3/ramon-a7800-7808r3a-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/3/ramon-a7800-7808r3a-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=303 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/4/ramon-a7800-7808r3a-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/4/ramon-a7800-7808r3a-fm.config.bcm index 04f53d298aa2..73bf6dcae666 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/4/ramon-a7800-7808r3a-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/4/ramon-a7800-7808r3a-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=304 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/5/ramon-a7800-7808r3a-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/5/ramon-a7800-7808r3a-fm.config.bcm index 05dcb837b81a..332c1b57ba5a 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/5/ramon-a7800-7808r3a-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/5/ramon-a7800-7808r3a-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=305 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/6/ramon-a7800-7808r3a-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/6/ramon-a7800-7808r3a-fm.config.bcm index 607772474b13..cd79977d24bf 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/6/ramon-a7800-7808r3a-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/6/ramon-a7800-7808r3a-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=306 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/7/ramon-a7800-7808r3a-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/7/ramon-a7800-7808r3a-fm.config.bcm index c8e3d0655565..5d01b2381620 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/7/ramon-a7800-7808r3a-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/7/ramon-a7800-7808r3a-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=307 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/8/ramon-a7800-7808r3a-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/8/ramon-a7800-7808r3a-fm.config.bcm index 7c3350573170..7b96a3b05262 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/8/ramon-a7800-7808r3a-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/8/ramon-a7800-7808r3a-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=308 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/9/ramon-a7800-7808r3a-fm.config.bcm b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/9/ramon-a7800-7808r3a-fm.config.bcm index 2d1eed939047..a13ce4c460af 100644 --- a/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/9/ramon-a7800-7808r3a-fm.config.bcm +++ b/device/arista/x86_64-arista_7800_sup/Arista-7808R3A-FM/9/ramon-a7800-7808r3a-fm.config.bcm @@ -1,4 +1,5 @@ appl_param_module_id=309 +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db port_init_cl72=1 diff --git a/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/jr2-a7280cr3-32d4-40x100G.config.bcm b/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/jr2-a7280cr3-32d4-40x100G.config.bcm index abbe4c368742..f20ea81049fb 100644 --- a/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/jr2-a7280cr3-32d4-40x100G.config.bcm +++ b/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/jr2-a7280cr3-32d4-40x100G.config.bcm @@ -1,4 +1,5 @@ soc_family.BCM8869X=BCM8869X +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db custom_feature_ucode_path=u_code_db2pem.txt diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/j2p-a7800r3a-36d-36x400G.config.bcm b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/j2p-a7800r3a-36d-36x400G.config.bcm index 529c0266e790..e32603e1da0c 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/j2p-a7800r3a-36d-36x400G.config.bcm +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/j2p-a7800r3a-36d-36x400G.config.bcm @@ -1,4 +1,5 @@ soc_family=BCM8885X +system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db diff --git a/src/sonic-device-data/tests/permitted_list b/src/sonic-device-data/tests/permitted_list index c9543521c00e..b4ec08bed928 100644 --- a/src/sonic-device-data/tests/permitted_list +++ b/src/sonic-device-data/tests/permitted_list @@ -317,3 +317,4 @@ sai_verify_incoming_chksum phy_an_lt_msft xflow_macsec_secure_chan_to_num_secure_assoc_encrypt xflow_macsec_secure_chan_to_num_secure_assoc_decrypt +system_ref_core_clock_khz From f6562a52794e33cfbe46749f9d31ba11dbcebd69 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Fri, 19 Aug 2022 18:34:35 -0700 Subject: [PATCH 218/259] [202205][linkmgrd][platform-daemon][swss] advance submodule head (#11790) linkmgrd: * e20e402 2022-08-18 | Update `handleMuxConfigNotification` logic (#125) (HEAD -> 202205) [Jing Zhang] * 8a54c06 2022-08-17 | [active-active] post mux metrics events (#123) [Jing Zhang] platform-daemon: * 1a833f6 2022-08-18 | [ycabled] enable telemetry for 'active-active'; fix gRPC portid ordering (#284) (HEAD -> 202205) [vdahiya12] utilities: * 4bacc1c 2022-08-19 | Fix issue: exception in is_rj45_port in multi ASIC env (#2313) (HEAD -> 202205) [Stephen Sun] swss: * 4085d3f 2022-07-25 | Revert hwinfo count change (#2383) (HEAD -> 202205) [andywongarista] Signed-off-by: Ying Xie Signed-off-by: Ying Xie --- src/linkmgrd | 2 +- src/sonic-platform-daemons | 2 +- src/sonic-swss | 2 +- src/sonic-utilities | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/linkmgrd b/src/linkmgrd index 476f85e2333d..e20e40205462 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit 476f85e2333d34f6469f8914245dfcad2348af89 +Subproject commit e20e40205462b61afc772613d4541c52bfd610d2 diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index 5a68073b66bf..1a833f6f372c 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit 5a68073b66bf721f0e1c84033b32c209b6f60b7d +Subproject commit 1a833f6f372c17a1f2d8792271bf05f15d093f2c diff --git a/src/sonic-swss b/src/sonic-swss index facc3a4454ed..4085d3f61087 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit facc3a4454ed8ad42d831dc5affa767505d2c1ba +Subproject commit 4085d3f61087619ea11bbcb0173c1a0903e51f8d diff --git a/src/sonic-utilities b/src/sonic-utilities index fbf82b93b7c5..4bacc1cb7824 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit fbf82b93b7c5812bc87664b76dca98eb8ed465ab +Subproject commit 4bacc1cb7824defd0f9c796244dc0ca80ce2a31c From 491beaf7f1285fb0b0f5778c0d14a377cb63977f Mon Sep 17 00:00:00 2001 From: Saikrishna Arcot Date: Fri, 19 Aug 2022 11:20:00 -0700 Subject: [PATCH 219/259] [snmpd]: Update to 5.9+dfsg-4+deb11u1 to match Debian version (#11763) * [snmpd]: Update to 5.9+dfsg-4+deb11u1 to match Debian version This brings in some security fixes. Signed-off-by: Saikrishna Arcot * Update snmpd makefile Signed-off-by: Saikrishna Arcot * Remove binNMU for snmpd Signed-off-by: Saikrishna Arcot Signed-off-by: Saikrishna Arcot --- rules/snmpd.mk | 2 +- src/snmpd/Makefile | 14 -------------- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/rules/snmpd.mk b/rules/snmpd.mk index 52be51d1c549..e9e498556c5e 100644 --- a/rules/snmpd.mk +++ b/rules/snmpd.mk @@ -2,7 +2,7 @@ ifeq ($(BLDENV),bullseye) SNMPD_VERSION = 5.9+dfsg -SNMPD_VERSION_FULL = $(SNMPD_VERSION)-3+b1 +SNMPD_VERSION_FULL = $(SNMPD_VERSION)-4+deb11u1 else SNMPD_VERSION = 5.7.3+dfsg SNMPD_VERSION_FULL = $(SNMPD_VERSION)-5 diff --git a/src/snmpd/Makefile b/src/snmpd/Makefile index 35fc1d38ce9f..0c6d5bbbf34c 100644 --- a/src/snmpd/Makefile +++ b/src/snmpd/Makefile @@ -31,27 +31,13 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : rm -rf net-snmp-$(SNMPD_VERSION) # download debian net-snmp -ifneq (,$(findstring 5.9,$(SNMPD_VERSION))) - dget -u https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_$(SNMPD_VERSION)-3.dsc -else dget -u https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_$(SNMPD_VERSION_FULL).dsc -endif pushd net-snmp-$(SNMPD_VERSION) git init git add -f * git commit -m "unmodified snmpd source" -ifneq (,$(findstring 5.9,$(SNMPD_VERSION))) - # Looks like Debian did a binNMU (binary non-maintainer upload), so the latest dsc - # file that we can get doesn't actually have the exact version number that Debian's - # repos have. - DEBEMAIL="$(shell git config --get user.name) <$(shell git config --get user.email)>" dch --bin-nmu "Rebuild against perl 5.32.0" - dch -r "" - git add debian/changelog - git commit -m "fix package version" -endif - # Apply patches stg init stg import -s ../patch-$(SNMPD_VERSION)/series From 5fb294cbc3fa0c3456faf1f611e7cbdd55622a60 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Sat, 20 Aug 2022 18:09:04 -0700 Subject: [PATCH 220/259] [arping] install arping utility in the base image (#11791) Signed-off-by: Ying Xie Signed-off-by: Ying Xie --- build_debian.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/build_debian.sh b/build_debian.sh index a4c1fddca1b8..19cd10a0b497 100755 --- a/build_debian.sh +++ b/build_debian.sh @@ -309,6 +309,7 @@ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y in python3-apt \ traceroute \ iputils-ping \ + arping \ net-tools \ bsdmainutils \ ca-certificates \ From 91e9db005a7415133eb4bf0f21ed8426f3cd820d Mon Sep 17 00:00:00 2001 From: Saikrishna Arcot Date: Sun, 21 Aug 2022 15:23:44 -0700 Subject: [PATCH 221/259] [202205]: Update package versions (#11801) This was done manually, to try to get past a build error due to changing package versions in Debian. Signed-off-by: Saikrishna Arcot Signed-off-by: Saikrishna Arcot --- .../versions-deb-bullseye | 40 +++++++++++-------- .../versions-deb-bullseye-arm64 | 3 -- .../versions-deb-bullseye-armhf | 3 -- .../build-sonic-slave-bullseye/versions-git | 6 +-- .../build-sonic-slave-bullseye/versions-py3 | 8 +++- .../versions-py3-all-arm64 | 5 --- .../versions-py3-all-armhf | 5 --- .../build-sonic-slave-bullseye/versions-web | 21 +++++++--- .../versions-deb-buster | 12 +++--- .../versions-deb-buster-arm64 | 4 -- .../versions-deb-buster-armhf | 4 -- .../build-sonic-slave-buster/versions-py2 | 2 +- .../versions-py2-all-arm64 | 1 - .../versions-py2-all-armhf | 1 - .../build-sonic-slave-buster/versions-py3 | 29 ++------------ .../versions-py3-all-arm64 | 3 -- .../versions-py3-all-armhf | 3 -- .../build-sonic-slave-buster/versions-web | 15 +------ .../build-sonic-slave-stretch/versions-web | 4 +- files/build/versions/default/versions-git | 11 ++--- files/build/versions/default/versions-web | 22 +++++----- .../versions-deb-bullseye | 3 +- .../versions-py3 | 2 +- .../versions-deb-buster | 1 + .../docker-config-engine-buster/versions-py3 | 2 +- .../docker-gbsyncd-credo/versions-deb-buster | 23 ----------- .../dockers/docker-lldp/versions-deb-buster | 31 -------------- .../docker-orchagent/versions-deb-bullseye | 2 +- .../versions-deb-bullseye | 20 +++++----- .../docker-platform-monitor/versions-py3 | 2 +- .../docker-sonic-mgmt-framework/versions-py3 | 4 +- .../docker-syncd-brcm-dnx/versions-deb-buster | 28 ------------- .../docker-syncd-brcm/versions-deb-buster | 29 -------------- .../versions-deb-buster-arm64 | 4 +- .../docker-syncd-mlnx-rpc/versions-py2 | 2 +- .../docker-syncd-mlnx/versions-deb-bullseye | 38 +++++++++--------- .../dockers/docker-syncd-mlnx/versions-py3 | 2 +- .../versions-deb-buster-armhf | 4 +- .../versions-deb-bullseye | 20 +++++----- .../versions-deb-bullseye-arm64 | 7 ++-- .../versions-deb-bullseye-armhf | 7 ++-- .../dockers/sonic-slave-bullseye/versions-git | 2 +- .../dockers/sonic-slave-bullseye/versions-py3 | 2 +- .../dockers/sonic-slave-bullseye/versions-web | 2 +- .../sonic-slave-buster/versions-deb-buster | 9 +++-- .../dockers/sonic-slave-buster/versions-git | 2 +- .../dockers/sonic-slave-buster/versions-py3 | 2 +- .../dockers/sonic-slave-buster/versions-web | 2 +- .../dockers/sonic-slave-stretch/versions-git | 2 +- .../dockers/sonic-slave-stretch/versions-web | 2 +- .../versions/host-image/versions-deb-bullseye | 8 ++-- files/build/versions/host-image/versions-py3 | 7 ++-- .../host-image/versions-py3-all-arm64 | 1 - .../host-image/versions-py3-all-armhf | 3 +- 54 files changed, 164 insertions(+), 313 deletions(-) delete mode 100644 files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-arm64 delete mode 100644 files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-armhf delete mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-arm64 delete mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-armhf delete mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-py2-all-arm64 delete mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-py2-all-armhf delete mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-py3-all-arm64 delete mode 100644 files/build/versions/build/build-sonic-slave-buster/versions-py3-all-armhf delete mode 100644 files/build/versions/dockers/docker-gbsyncd-credo/versions-deb-buster delete mode 100644 files/build/versions/dockers/docker-lldp/versions-deb-buster delete mode 100644 files/build/versions/dockers/docker-syncd-brcm-dnx/versions-deb-buster delete mode 100644 files/build/versions/dockers/docker-syncd-brcm/versions-deb-buster delete mode 100644 files/build/versions/host-image/versions-py3-all-arm64 diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye index 62b2ca30f3c9..37068e0197e6 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye @@ -1,10 +1,11 @@ -applibs==1.mlnx.4.5.2262 -applibs-dev==1.mlnx.4.5.2262 -iproute2-dev==1.mlnx.4.5.2262 +applibs==1.mlnx.4.5.2318 +applibs-dev==1.mlnx.4.5.2318 +iproute2-dev==1.mlnx.4.5.2318 isc-dhcp-relay==4.4.1-2.3 kernel-mft-dkms==4.20.0-34 libhiredis-dev==0.14.0-3~bpo9+1 libhiredis0.14==0.14.0-3~bpo9+1 +libnl-3-200==3.5.0-1 libnl-3-dev==3.5.0-1 libnl-cli-3-200==3.5.0-1 libnl-cli-3-dev==3.5.0-1 @@ -12,7 +13,10 @@ libnl-genl-3-200==3.5.0-1 libnl-genl-3-dev==3.5.0-1 libnl-nf-3-200==3.5.0-1 libnl-nf-3-dev==3.5.0-1 +libnl-route-3-200==3.5.0-1 libnl-route-3-dev==3.5.0-1 +libsaibcm==7.1.7.1 +libsaibcm-dev==7.1.7.1 libsaimetadata==1.0.0 libsaimetadata-dev==1.0.0 libsairedis==1.0.0 @@ -34,6 +38,7 @@ libyang-cpp==1.0.73 libyang-dev==1.0.73 linux-headers-5.10.0-12-2-amd64==5.10.103-1 linux-headers-5.10.0-12-2-common==5.10.103-1 +lldpd==1.0.4-1 lm-sensors==1:3.6.0-7 mft==4.20.0-34 net-tools==1.60+git20181103.0eebece-1 @@ -48,20 +53,21 @@ sonic-mgmt-common-codegen==1.0.0 sonic-platform-pddf==1.1 sonic-platform-pddf-sym==1.1 swss==1.0.0 -sx-acl-helper==1.mlnx.4.5.2262 -sx-acl-helper-dev==1.mlnx.4.5.2262 -sx-complib==1.mlnx.4.5.2262 -sx-complib-dev==1.mlnx.4.5.2262 -sx-examples==1.mlnx.4.5.2262 -sx-examples-dev==1.mlnx.4.5.2262 -sx-gen-utils==1.mlnx.4.5.2262 -sx-gen-utils-dev==1.mlnx.4.5.2262 -sx-scew==1.mlnx.4.5.2262 -sx-scew-dev==1.mlnx.4.5.2262 -sxd-libs==1.mlnx.4.5.2262 -sxd-libs-dev==1.mlnx.4.5.2262 +sx-acl-helper==1.mlnx.4.5.2318 +sx-acl-helper-dev==1.mlnx.4.5.2318 +sx-complib==1.mlnx.4.5.2318 +sx-complib-dev==1.mlnx.4.5.2318 +sx-examples==1.mlnx.4.5.2318 +sx-examples-dev==1.mlnx.4.5.2318 +sx-gen-utils==1.mlnx.4.5.2318 +sx-gen-utils-dev==1.mlnx.4.5.2318 +sx-scew==1.mlnx.4.5.2318 +sx-scew-dev==1.mlnx.4.5.2318 +sxd-libs==1.mlnx.4.5.2318 +sxd-libs-dev==1.mlnx.4.5.2318 syncd==1.0.0 +syncd-vs==1.0.0 thrift-compiler==0.11.0-4 -wjh-libs==1.mlnx.4.5.2262 -wjh-libs-dev==1.mlnx.4.5.2262 +wjh-libs==1.mlnx.4.5.2318 +wjh-libs-dev==1.mlnx.4.5.2318 wpasupplicant==2:2.9.0-14 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-arm64 b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-arm64 index bc1ef0d76cb3..c6852b20c6b7 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-arm64 +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-arm64 @@ -1,4 +1 @@ -libnl-3-200==3.5.0-1 -libnl-route-3-200==3.5.0-1 -libsnmp-base==5.9+dfsg-3+b1 linux-headers-5.10.0-12-2-arm64==5.10.103-1 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-armhf b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-armhf index c7c8c1394d61..470ec8271062 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-armhf +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-armhf @@ -1,4 +1 @@ -libnl-3-200==3.5.0-1 -libnl-route-3-200==3.5.0-1 -libsnmp-base==5.9+dfsg-3+b1 linux-headers-5.10.0-12-2-armmp==5.10.103-1 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-git b/files/build/versions/build/build-sonic-slave-bullseye/versions-git index 6198befa025e..db0d0620e6be 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-git +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-git @@ -1,8 +1,8 @@ https://github.com/CESNET/libyang.git==0c609c35080f523c9696db48976de8257d174102 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b -https://github.com/flashrom/flashrom.git==02f43e89bae6bcdd7505af0ccd361e6eb3d3c74c -https://github.com/FreeRADIUS/freeradius-server.git==aad788744b7f2df8182a5ecdd6b470c250aa4020 +https://github.com/flashrom/flashrom.git==66b34f8ba30026b0cf7db1ce58c8990ebbf6ad48 +https://github.com/FreeRADIUS/freeradius-server.git==98c5f1e95959169a3fcb9b0115194dbd63e70d63 https://github.com/FreeRADIUS/pam_radius.git==272f6420c5c01f9bdb27c98e5edb44de406f4631 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 @@ -11,4 +11,4 @@ https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b6136 https://salsa.debian.org/kernel-team/ethtool/==5ead2b58847600ea0ccd0aa76b5bedce678f17ee https://salsa.debian.org/kernel-team/initramfs-tools.git==dd16eade69ef76b304a369fac2f6c0de508b855b https://salsa.debian.org/sk-guest/monit.git==c9da7ebb1f35dfba17b50b5969a6e75e29cbec0d -https://salsa.debian.org/ssh-team/openssh.git==de790f931452a2dcb4490d074d5a16ab8456a523 \ No newline at end of file +https://salsa.debian.org/ssh-team/openssh.git==dd1e52af266a53671b162ddd95e4f6b01513e8e5 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 index 4e672aada23e..2f60fc489926 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 @@ -1,7 +1,10 @@ +bitarray==1.5.3 blessed==1.19.1 +charset-normalizer==2.1.1 +click==7.0 click-log==0.4.0 colorful==0.5.4 -docker==5.0.3 +docker==6.0.0 docker-image-py==0.1.12 enlighten==1.10.2 filelock==3.8.0 @@ -11,6 +14,7 @@ jsondiff==2.0.0 jsonpatch==1.32 jsonpointer==2.3 jsonschema==2.6.0 +lxml==4.6.5 natsort==6.2.1 netaddr==0.8.0 netifaces==0.11.0 @@ -19,6 +23,8 @@ prefixed==0.3.2 prettyprinter==0.18.0 pycairo==1.21.0 pyroute2==0.5.19 +redis==3.5.3 +requests==2.28.1 semantic-version==2.10.0 systemd-python==234 tabulate==0.8.2 diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-arm64 b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-arm64 deleted file mode 100644 index bc236e03f7ee..000000000000 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-arm64 +++ /dev/null @@ -1,5 +0,0 @@ -bitarray==1.5.3 -click==7.0 -filelock==3.7.1 -lxml==4.6.5 -redis==3.5.3 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-armhf b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-armhf deleted file mode 100644 index bc236e03f7ee..000000000000 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-armhf +++ /dev/null @@ -1,5 +0,0 @@ -bitarray==1.5.3 -click==7.0 -filelock==3.7.1 -lxml==4.6.5 -redis==3.5.3 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-web b/files/build/versions/build/build-sonic-slave-bullseye/versions-web index a13096572821..ebf67665c0ae 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-web +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-web @@ -13,7 +13,7 @@ https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.dsc==d https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.tar.gz==b959c7ac01839e9b96a733d27b19e59e https://deb.debian.org/debian/pool/main/k/kdump-tools/kdump-tools_1.6.8.4.dsc==f96a03bb090ab03d484e5d232161fafe https://deb.debian.org/debian/pool/main/k/kdump-tools/kdump-tools_1.6.8.4.tar.xz==26bcae7c27b729d614a4a85e2a01cb64 -https://github.com/aristanetworks/sonic-firmware/raw/d227160f981f27df020ab50b9e0f16b1bd9166ea/phy/phy-credo_1.0_amd64.deb==525369d65ff7b40869d05adfc9027a8b +https://github.com/aristanetworks/sonic-firmware/raw/e89a1696954fd381e1e95edf208cffc97caf15d4/phy/phy-credo_1.0_amd64.deb==fc197598098d030526c08d55cdd3910f https://github.com/CumulusNetworks/ifupdown2/archive/3.0.0-1.tar.gz==755459b3a58fbc11625336846cea7420 https://launchpad.net/debian/+archive/primary/+sourcefiles/bash/5.1-2/bash_5.1-2.debian.tar.xz==9d0cbd5f463f461c840c95f62a64d61b https://launchpad.net/debian/+archive/primary/+sourcefiles/bash/5.1-2/bash_5.1-2.dsc==be44c5a9fc12fb567a486f54b842dd9e @@ -21,15 +21,25 @@ https://launchpad.net/debian/+archive/primary/+sourcefiles/bash/5.1-2/bash_5.1.o https://sonicstorage.blob.core.windows.net/debian-security/pool/updates/main/l/linux/linux_5.10.103-1.debian.tar.xz==1d191449cd0468cc525d9ee9ff786027 https://sonicstorage.blob.core.windows.net/debian-security/pool/updates/main/l/linux/linux_5.10.103-1.dsc==0217f16a0e3874a072418b419d39ebd9 https://sonicstorage.blob.core.windows.net/debian-security/pool/updates/main/l/linux/linux_5.10.103.orig.tar.xz==f27bcdb9bf9435fc4a4dde9876c38cd1 +https://sonicstorage.blob.core.windows.net/debian/pool/main/l/lldpd/lldpd_1.0.4-1.debian.tar.xz==0a529cf8d1717b5c3dbe0c61b3512aa1 +https://sonicstorage.blob.core.windows.net/debian/pool/main/l/lldpd/lldpd_1.0.4-1.dsc==b88b922d96688c948e90987fcaa3a2de +https://sonicstorage.blob.core.windows.net/debian/pool/main/l/lldpd/lldpd_1.0.4.orig.tar.gz==33e8d58623f99184e4e709cbbfe45db3 https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang/libyang2_2.0.112-6.debian.tar.xz==aa798a069f506a243d337c18600477e5 https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang/libyang2_2.0.112-6.dsc==da4924086edc4911c6fca21ca46fdb1d https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang/libyang2_2.0.112.orig.tar.gz==4ac414ef27f3c4d14f96c2f49c58c2be -https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.9+dfsg-3.debian.tar.xz==8757281c6b6ff9c0a36fc552dd276a3c -https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.9+dfsg-3.dsc==4afc4c6302ad4d1e6ebea1daf43dffa8 +https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.9+dfsg-4+deb11u1.debian.tar.xz==a3e626b1ed5adc26430e1727d81641df +https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.9+dfsg-4+deb11u1.dsc==a36ed553b5034b7400d9e9a8d529b27e https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.9+dfsg.orig.tar.xz==6c2d346ce3320e8999500497e9bacc99 +https://sonicstorage.blob.core.windows.net/packages/20190307/bcmcmd?sv=2015-04-05&sr=b&sig=sUdbU7oVbh5exbXXHVL5TDFBTWDDBASHeJ8Cp0B0TIc%3D&se=2038-05-06T22%3A34%3A19Z&sp=r==b8aefc751bdf93218716bca6797460ff +https://sonicstorage.blob.core.windows.net/packages/20190307/dsserve?sv=2015-04-05&sr=b&sig=lk7BH3DtW%2F5ehc0Rkqfga%2BUCABI0UzQmDamBsZH9K6w%3D&se=2038-05-06T22%3A34%3A45Z&sp=r==f9d4b815ebb9be9f755dedca8a51170d +https://sonicstorage.blob.core.windows.net/packages/credosai/libsaicredo-owl_0.7.5_amd64.deb?sv=2020-10-02&st=2022-04-14T02%3A23%3A22Z&se=2100-04-15T02%3A23%3A00Z&sr=b&sp=r&sig=58z6E2nPcLIGjqAoxRAo7du%2FzjIBZkFdoXfSzw96Kxc%3D==b02c8664535fc6f9c02a89c5a6930578 +https://sonicstorage.blob.core.windows.net/packages/credosai/libsaicredo_0.7.5_amd64.deb?sv=2020-10-02&st=2022-04-14T02%3A21%3A31Z&se=2100-04-15T02%3A21%3A00Z&sr=b&sp=r&sig=iDv9Fprntpw9iVBFYVjW8iygy4qcSWT8O90nAXdXR0A%3D==e62bdf009e1a81e2ce8a38073305450c https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1-3.debian.tar.xz?sv=2020-04-08&st=2021-12-14T08%3A00%3A00Z&se=2030-12-14T18%3A18%3A00Z&sr=b&sp=r&sig=C8aYSvaQgMJ58Z13kFY0Wr0J0QF6i7WCeET9%2BpF%2BAxc%3D==e8d1e99b4b9e93f5dde860f6d55f42e3 https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1-3.dsc?sv=2020-04-08&st=2021-12-14T00%3A00%3A00Z&se=2050-12-15T00%3A00%3A00Z&sr=b&sp=r&sig=fIy6dVz3s59K0TiMkTlwSWN8lCzRl3i76ruAtROhfWA%3D==df3ed0dd965589fd09bf6a2920bc273e https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1.orig.tar.gz?sv=2020-04-08&st=2021-12-14T00%3A00%3A00Z&se=2050-12-15T00%3A00%3A00Z&sr=b&sp=r&sig=gpihyZv%2Fr0bVrCUKCKwpS4bIoqiPpdd%2BgCfuUGNHOUc%3D==780d14908dc1a6aa2790de376ab56b7a +https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0-4.debian.tar.xz?sv=2015-04-05&sr=b&sig=dj9uJ5YjUNupcmuxSX6%2F5IS9NqaGAyM9iF2h%2F2rROZA%3D&se=2156-02-02T17%3A19%3A34Z&sp=r==52ad383b97ad051f4d1d25b54aaad569 +https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0-4.dsc?sv=2015-04-05&sr=b&sig=pWfg55owvQ2jZtZ6ylHp0OP8uZyfc9sxO6H%2BP4Ez7w4%3D&se=2156-02-02T17%3A20%3A05Z&sp=r==6917fe7b3ada9313be94713dd50fee7b +https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0.orig.tar.gz?sv=2015-04-05&sr=b&sig=%2BrAjWESiSNRCMN7NGqEqVGceLefpwwS%2FWPKEfJpPLSQ%3D&se=2156-02-02T17%3A17%3A20Z&sp=r==0be59730ebce071eceaf6bfdb8d3a20e https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==eafff1fa77d5e770bc73e06ff8840cb6 https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/golang-1.15-go_1.15.15-1~deb11u4+fips_amd64.deb==b60f6db62805696b47ab422ab798fe56 https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/golang-1.15-src_1.15.15-1~deb11u4+fips_amd64.deb==1c920937aa49b602a1bfec3c49747131 @@ -48,5 +58,6 @@ https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/openss https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/python3.9-minimal_3.9.2-1+fips_amd64.deb==3cf85ae8651d33ebb97d651833c9a631 https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/python3.9_3.9.2-1+fips_amd64.deb==a0caf3616afdf36c3480b94d496c58df https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/amd64/symcrypt-openssl_0.2_amd64.deb==6728693e1131c1a230499a6b5a856284 -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-6/libsaibcm-dev_7.1.0.0-6_amd64.deb==dc4d2c529376a4948463485005d78c86 -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-6/libsaibcm_7.1.0.0-6_amd64.deb==7666e5d02364e0c176a6931edc597ea9 \ No newline at end of file +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.7.1/libsaibcm-dev_7.1.7.1_amd64.deb==c933da0fd0352cf0843f7b96ec07369f +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.7.1/libsaibcm_7.1.7.1_amd64.deb==8df551cb4002712e973ea98a5cbb9199 +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.7.1/libsaibcm_dnx_7.1.7.1_amd64.deb==b922ac3b400ac1829826e4a50a54e62d \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster index 20db24042380..72197ac65262 100644 --- a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster +++ b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster @@ -1,34 +1,34 @@ bfnplatform==1.0.0 libhiredis-dev==0.14.0-3~bpo9+1 libhiredis0.14==0.14.0-3~bpo9+1 +libnl-3-200==3.5.0-1 +libnl-3-dev==3.5.0-1 libnl-cli-3-200==3.5.0-1 libnl-cli-3-dev==3.5.0-1 libnl-genl-3-200==3.5.0-1 libnl-genl-3-dev==3.5.0-1 libnl-nf-3-200==3.5.0-1 libnl-nf-3-dev==3.5.0-1 +libnl-route-3-200==3.5.0-1 +libnl-route-3-dev==3.5.0-1 libsaimetadata==1.0.0 libsaimetadata-dev==1.0.0 libsairedis==1.0.0 libsairedis-dev==1.0.0 libsaithrift-dev==0.9.4 libsaivs==1.0.0 -libsaivs-dev==1.0.0 libswsscommon==1.0.0 libswsscommon-dev==1.0.0 libteam-dev==1.30-1 libteam-utils==1.30-1 libteam5==1.30-1 libteamdctl0==1.30-1 -libthrift-0.11.0==0.11.0-4 -libthrift-dev==0.11.0-4 +libthrift-dev==0.14.1 libthrift0==0.14.1 libyang==1.0.73 libyang-cpp==1.0.73 libyang-dev==1.0.73 -lldpd==1.0.4-1 python-swsscommon==1.0.0 -python-thrift==0.11.0-4 python3-swsscommon==1.0.0 python3-thrift==0.14.1 python3-yang==1.0.73 @@ -38,4 +38,4 @@ sonic-mgmt-framework==1.0-01 swss==1.0.0 syncd==1.0.0 syncd-vs==1.0.0 -thrift-compiler==0.11.0-4 \ No newline at end of file +thrift-compiler==0.14.1 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-arm64 b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-arm64 deleted file mode 100644 index 11fd3b48e9af..000000000000 --- a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-arm64 +++ /dev/null @@ -1,4 +0,0 @@ -libnl-3-200==3.5.0-1 -libnl-3-dev==3.5.0-1 -libnl-route-3-200==3.5.0-1 -libnl-route-3-dev==3.5.0-1 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-armhf b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-armhf deleted file mode 100644 index 11fd3b48e9af..000000000000 --- a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-armhf +++ /dev/null @@ -1,4 +0,0 @@ -libnl-3-200==3.5.0-1 -libnl-3-dev==3.5.0-1 -libnl-route-3-200==3.5.0-1 -libnl-route-3-dev==3.5.0-1 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-py2 b/files/build/versions/build/build-sonic-slave-buster/versions-py2 index 2da8bacb13ef..7cb6f491ccff 100644 --- a/files/build/versions/build/build-sonic-slave-buster/versions-py2 +++ b/files/build/versions/build/build-sonic-slave-buster/versions-py2 @@ -2,10 +2,10 @@ bitarray==1.5.3 contextlib2==0.6.0.post1 future==0.18.2 importlib-resources==3.3.1 +ipaddress==1.0.23 natsort==6.2.1 netaddr==0.8.0 pyang==2.5.3 pyangbind==0.6.0 redis==3.5.3 -thrift==0.11.0 zipp==1.2.0 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-py2-all-arm64 b/files/build/versions/build/build-sonic-slave-buster/versions-py2-all-arm64 deleted file mode 100644 index 5d5fdc227c5c..000000000000 --- a/files/build/versions/build/build-sonic-slave-buster/versions-py2-all-arm64 +++ /dev/null @@ -1 +0,0 @@ -ipaddress==1.0.23 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-py2-all-armhf b/files/build/versions/build/build-sonic-slave-buster/versions-py2-all-armhf deleted file mode 100644 index 5d5fdc227c5c..000000000000 --- a/files/build/versions/build/build-sonic-slave-buster/versions-py2-all-armhf +++ /dev/null @@ -1 +0,0 @@ -ipaddress==1.0.23 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-py3 b/files/build/versions/build/build-sonic-slave-buster/versions-py3 index 48d552cff651..902c9d1b5b3b 100644 --- a/files/build/versions/build/build-sonic-slave-buster/versions-py3 +++ b/files/build/versions/build/build-sonic-slave-buster/versions-py3 @@ -1,33 +1,12 @@ -blessed==1.19.1 -charset-normalizer==2.1.0 -click==7.0 -click-log==0.4.0 -colorful==0.5.4 -dbus-python==1.2.18 -docker==5.0.3 -docker-image-py==0.1.12 -enlighten==1.10.2 -filelock==3.8.0 +bitarray==1.5.3 ijson==2.6.1 ipaddress==1.0.23 jsondiff==2.0.0 -jsonpatch==1.32 -jsonpointer==2.3 natsort==6.2.1 netaddr==0.8.0 -netifaces==0.11.0 -prefixed==0.3.2 -prettyprinter==0.18.0 psutil==5.9.1 -pycairo==1.21.0 -pyroute2==0.5.19 python-arptable==0.0.2 -semantic-version==2.10.0 -systemd-python==234 -tabulate==0.8.2 +redis==3.5.3 thrift==0.14.1 -toposort==1.6 -wcwidth==0.2.5 -websocket-client==1.3.3 -www-authenticate==0.9.2 -xmltodict==0.12.0 \ No newline at end of file +xmltodict==0.12.0 +zipp==1.2.0 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-py3-all-arm64 b/files/build/versions/build/build-sonic-slave-buster/versions-py3-all-arm64 deleted file mode 100644 index ff92ab3c064b..000000000000 --- a/files/build/versions/build/build-sonic-slave-buster/versions-py3-all-arm64 +++ /dev/null @@ -1,3 +0,0 @@ -bitarray==1.5.3 -redis==3.5.3 -zipp==1.2.0 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-py3-all-armhf b/files/build/versions/build/build-sonic-slave-buster/versions-py3-all-armhf deleted file mode 100644 index ff92ab3c064b..000000000000 --- a/files/build/versions/build/build-sonic-slave-buster/versions-py3-all-armhf +++ /dev/null @@ -1,3 +0,0 @@ -bitarray==1.5.3 -redis==3.5.3 -zipp==1.2.0 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-web b/files/build/versions/build/build-sonic-slave-buster/versions-web index be481d0c9e8d..92ca31f321bb 100644 --- a/files/build/versions/build/build-sonic-slave-buster/versions-web +++ b/files/build/versions/build/build-sonic-slave-buster/versions-web @@ -5,25 +5,14 @@ http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0-3~bpo9+1.debian http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0-3~bpo9+1.dsc==be4ce11ef67268e59e4b6be587327c40 http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0.orig.tar.gz==6d565680a4af0d2e261abbc3e3431b2b https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.5/swagger-codegen-cli-2.4.5.jar==219f1453ff22482d9e080effbfa7fa81 -https://sonicstorage.blob.core.windows.net/debian/pool/main/l/lldpd/lldpd_1.0.4-1.debian.tar.xz==0a529cf8d1717b5c3dbe0c61b3512aa1 -https://sonicstorage.blob.core.windows.net/debian/pool/main/l/lldpd/lldpd_1.0.4-1.dsc==b88b922d96688c948e90987fcaa3a2de -https://sonicstorage.blob.core.windows.net/debian/pool/main/l/lldpd/lldpd_1.0.4.orig.tar.gz==33e8d58623f99184e4e709cbbfe45db3 https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang/libyang2_2.0.112-6.debian.tar.xz==aa798a069f506a243d337c18600477e5 https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang/libyang2_2.0.112-6.dsc==da4924086edc4911c6fca21ca46fdb1d https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang/libyang2_2.0.112.orig.tar.gz==4ac414ef27f3c4d14f96c2f49c58c2be https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.7.3+dfsg-5.debian.tar.xz==ad957e90207d0669beb2109e4e325def https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.7.3+dfsg-5.dsc==2443e4dffbdb020e7ab4f947a7904912 https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.7.3+dfsg.orig.tar.xz==6391ae27eb1ae34ff5530712bb1c4209 -https://sonicstorage.blob.core.windows.net/packages/20190307/bcmcmd?sv=2015-04-05&sr=b&sig=sUdbU7oVbh5exbXXHVL5TDFBTWDDBASHeJ8Cp0B0TIc%3D&se=2038-05-06T22%3A34%3A19Z&sp=r==b8aefc751bdf93218716bca6797460ff -https://sonicstorage.blob.core.windows.net/packages/20190307/dsserve?sv=2015-04-05&sr=b&sig=lk7BH3DtW%2F5ehc0Rkqfga%2BUCABI0UzQmDamBsZH9K6w%3D&se=2038-05-06T22%3A34%3A45Z&sp=r==f9d4b815ebb9be9f755dedca8a51170d -https://sonicstorage.blob.core.windows.net/packages/credosai/libsaicredo-owl_0.7.5_amd64.deb?sv=2020-10-02&st=2022-04-14T02%3A23%3A22Z&se=2100-04-15T02%3A23%3A00Z&sr=b&sp=r&sig=58z6E2nPcLIGjqAoxRAo7du%2FzjIBZkFdoXfSzw96Kxc%3D==b02c8664535fc6f9c02a89c5a6930578 -https://sonicstorage.blob.core.windows.net/packages/credosai/libsaicredo_0.7.5_amd64.deb?sv=2020-10-02&st=2022-04-14T02%3A21%3A31Z&se=2100-04-15T02%3A21%3A00Z&sr=b&sp=r&sig=iDv9Fprntpw9iVBFYVjW8iygy4qcSWT8O90nAXdXR0A%3D==e62bdf009e1a81e2ce8a38073305450c https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1-3.debian.tar.xz?sv=2020-04-08&st=2021-12-14T08%3A00%3A00Z&se=2030-12-14T18%3A18%3A00Z&sr=b&sp=r&sig=C8aYSvaQgMJ58Z13kFY0Wr0J0QF6i7WCeET9%2BpF%2BAxc%3D==e8d1e99b4b9e93f5dde860f6d55f42e3 https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1-3.dsc?sv=2020-04-08&st=2021-12-14T00%3A00%3A00Z&se=2050-12-15T00%3A00%3A00Z&sr=b&sp=r&sig=fIy6dVz3s59K0TiMkTlwSWN8lCzRl3i76ruAtROhfWA%3D==df3ed0dd965589fd09bf6a2920bc273e https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1.orig.tar.gz?sv=2020-04-08&st=2021-12-14T00%3A00%3A00Z&se=2050-12-15T00%3A00%3A00Z&sr=b&sp=r&sig=gpihyZv%2Fr0bVrCUKCKwpS4bIoqiPpdd%2BgCfuUGNHOUc%3D==780d14908dc1a6aa2790de376ab56b7a -https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0-4.debian.tar.xz?sv=2015-04-05&sr=b&sig=dj9uJ5YjUNupcmuxSX6%2F5IS9NqaGAyM9iF2h%2F2rROZA%3D&se=2156-02-02T17%3A19%3A34Z&sp=r==52ad383b97ad051f4d1d25b54aaad569 -https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0-4.dsc?sv=2015-04-05&sr=b&sig=pWfg55owvQ2jZtZ6ylHp0OP8uZyfc9sxO6H%2BP4Ez7w4%3D&se=2156-02-02T17%3A20%3A05Z&sp=r==6917fe7b3ada9313be94713dd50fee7b -https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0.orig.tar.gz?sv=2015-04-05&sr=b&sig=%2BrAjWESiSNRCMN7NGqEqVGceLefpwwS%2FWPKEfJpPLSQ%3D&se=2156-02-02T17%3A17%3A20Z&sp=r==0be59730ebce071eceaf6bfdb8d3a20e -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-1/libsaibcm_dnx_7.1.0.0-1_amd64.deb==e84a66a741f04aebe7085b0ae970f4e3 -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-6/libsaibcm-dev_7.1.0.0-6_amd64.deb==dc4d2c529376a4948463485005d78c86 -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-6/libsaibcm_7.1.0.0-6_amd64.deb==7666e5d02364e0c176a6931edc597ea9 \ No newline at end of file +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.7.1/libsaibcm-dev_7.1.7.1_amd64.deb==c933da0fd0352cf0843f7b96ec07369f +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.7.1/libsaibcm_7.1.7.1_amd64.deb==8df551cb4002712e973ea98a5cbb9199 \ No newline at end of file diff --git a/files/build/versions/build/build-sonic-slave-stretch/versions-web b/files/build/versions/build/build-sonic-slave-stretch/versions-web index 3a05aff056b4..31e6b210228a 100644 --- a/files/build/versions/build/build-sonic-slave-stretch/versions-web +++ b/files/build/versions/build/build-sonic-slave-stretch/versions-web @@ -1,2 +1,2 @@ -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-6/libsaibcm-dev_7.1.0.0-6_amd64.deb==dc4d2c529376a4948463485005d78c86 -https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.0.0-6/libsaibcm_7.1.0.0-6_amd64.deb==7666e5d02364e0c176a6931edc597ea9 \ No newline at end of file +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.7.1/libsaibcm-dev_7.1.7.1_amd64.deb==c933da0fd0352cf0843f7b96ec07369f +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.7.1/libsaibcm_7.1.7.1_amd64.deb==8df551cb4002712e973ea98a5cbb9199 \ No newline at end of file diff --git a/files/build/versions/default/versions-git b/files/build/versions/default/versions-git index 4ea077bc73b6..ce9fabb4e23f 100644 --- a/files/build/versions/default/versions-git +++ b/files/build/versions/default/versions-git @@ -1,18 +1,15 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==5da65ec20db9b17b03420d928240092e5955a769 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==44b73307ee51f90f632088f6d08c56cd3cabf8df https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f https://github.com/CESNET/libyang.git==0c609c35080f523c9696db48976de8257d174102 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b -https://github.com/dyninc/OpenBFDD.git==e35f43ad8d2b3f084e96a84c392528a90d05a287 -https://github.com/flashrom/flashrom.git==02f43e89bae6bcdd7505af0ccd361e6eb3d3c74c -https://github.com/FreeRADIUS/freeradius-server.git==aad788744b7f2df8182a5ecdd6b470c250aa4020 +https://github.com/flashrom/flashrom.git==66b34f8ba30026b0cf7db1ce58c8990ebbf6ad48 +https://github.com/FreeRADIUS/freeradius-server.git==98c5f1e95959169a3fcb9b0115194dbd63e70d63 https://github.com/FreeRADIUS/pam_radius.git==272f6420c5c01f9bdb27c98e5edb44de406f4631 https://github.com/jeroennijhof/pam_tacplus.git==453c7b6fc78eceeaaf39a59b6b87c124628f2fe8 https://github.com/jpirko/libteam.git==69a7494bb77dc10bb27076add07b380dbd778592 -https://github.com/lguohan/gnxi.git==f2b11e45b16ab13485ae14933f30c18ee6336499 https://github.com/Marvell-switching/mrvl-prestera.git==9dbae444204a2c27b33be698ce497d55926b8893 https://github.com/Mellanox/libpsample.git==62bb27d9a49424e45191eee81df7ce0d8c74e774 -https://github.com/p4lang/scapy-vxlan.git==85ffe83da156568ee47a0750f638227e6e1d7479 https://github.com/sflow/host-sflow==4ff2a940848fa9244a289f9c96fd9681d31a0264 https://github.com/sflow/sflowtool==5307b19399ffb0a1a873c9d09e78cb5011deaf6f https://github.com/thom311/libnl==3399f520bae2231c5b6a6c2adce52b383292c520 @@ -20,4 +17,4 @@ https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b6136 https://salsa.debian.org/kernel-team/ethtool/==5ead2b58847600ea0ccd0aa76b5bedce678f17ee https://salsa.debian.org/kernel-team/initramfs-tools.git==dd16eade69ef76b304a369fac2f6c0de508b855b https://salsa.debian.org/sk-guest/monit.git==c9da7ebb1f35dfba17b50b5969a6e75e29cbec0d -https://salsa.debian.org/ssh-team/openssh.git==de790f931452a2dcb4490d074d5a16ab8456a523 \ No newline at end of file +https://salsa.debian.org/ssh-team/openssh.git==dd1e52af266a53671b162ddd95e4f6b01513e8e5 \ No newline at end of file diff --git a/files/build/versions/default/versions-web b/files/build/versions/default/versions-web index abdd2c2555bb..5872769b4945 100644 --- a/files/build/versions/default/versions-web +++ b/files/build/versions/default/versions-web @@ -34,15 +34,13 @@ https://deb.nodesource.com/node_10.x/dists/stretch/Release==22738118af583db3bfad https://deb.nodesource.com/node_14.x/dists/bullseye/Release==e5d99d3f369b50a7b0290811926de82a https://deb.nodesource.com/node_14.x/dists/buster/Release==2c6b9d29a3e20816e0ed35475d52e0d3 https://deb.nodesource.com/setup_10.x==6742c0148159980e8f6e886df1f8bbe1 -https://deb.nodesource.com/setup_14.x==badb28cf0604d9ff24c5fc3396b594d4 +https://deb.nodesource.com/setup_14.x==b692a224c718ad6e1cbd17eda8aaa673 https://download.docker.com/linux/debian/gpg==1afae06b34a13c1b3d9cb61a26285a15 +https://github.com/aristanetworks/sonic-firmware/raw/e89a1696954fd381e1e95edf208cffc97caf15d4/phy/phy-credo_1.0_amd64.deb==fc197598098d030526c08d55cdd3910f https://github.com/barefootnetworks/sonic-release-pkgs/raw/dev/bfnplatform_20220408_sai_1.9.1_deb10.deb==890a53ca1374dfcf8c12091d74fd2ef8 https://github.com/barefootnetworks/sonic-release-pkgs/raw/dev/bfnsdk_20220408_sai_1.9.1_deb10.deb==a54c351ee84ddb63837085272a1c4eae -https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==bfd21cd7274888c066d39fe95b88a442 -https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-arm64==fd883cc3e0900a7137c49722e29576bf -https://github.com/CentecNetworks/sonic-binaries/raw/master/amd64/sai/libsai_1.9.1-0_amd64.deb==08e1a82bd42ca1cba08fd6deec43c02a -https://github.com/CentecNetworks/sonic-binaries/raw/master/amd64/third_party/advantech/_Susi4.so==5e1b8daef522c9da00af400abe25810b -https://github.com/CentecNetworks/sonic-binaries/raw/master/amd64/third_party/advantech/libSUSI-4.00.so.1==393a94b0abba146777e276e1febe0cb0 +https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==beb7abb07eb7c08d48f3a48fc1e58569 +https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-arm64==b31a9884a677446492486f3fa70a4ed7 https://github.com/CentecNetworks/sonic-binaries/raw/master/arm64/sai/libsai_1.9.1-0_arm64.deb==c354c766cc763a5af621a88637b9e126 https://github.com/CumulusNetworks/ifupdown2/archive/3.0.0-1.tar.gz==755459b3a58fbc11625336846cea7420 https://github.com/Marvell-switching/sonic-marvell-binaries/raw/master/armhf/sai-plugin/mrvllibsai_1.10.2-1_armhf.deb==6d75ab5ec102247fd42aed43b4bf5da6 @@ -64,13 +62,17 @@ https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang/libyang https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.7.3+dfsg-5.debian.tar.xz==ad957e90207d0669beb2109e4e325def https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.7.3+dfsg-5.dsc==2443e4dffbdb020e7ab4f947a7904912 https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.7.3+dfsg.orig.tar.xz==6391ae27eb1ae34ff5530712bb1c4209 -https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.9+dfsg-3.debian.tar.xz==8757281c6b6ff9c0a36fc552dd276a3c -https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.9+dfsg-3.dsc==4afc4c6302ad4d1e6ebea1daf43dffa8 +https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.9+dfsg-4+deb11u1.debian.tar.xz==a3e626b1ed5adc26430e1727d81641df +https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.9+dfsg-4+deb11u1.dsc==a36ed553b5034b7400d9e9a8d529b27e https://sonicstorage.blob.core.windows.net/debian/pool/main/n/net-snmp/net-snmp_5.9+dfsg.orig.tar.xz==6c2d346ce3320e8999500497e9bacc99 +https://sonicstorage.blob.core.windows.net/packages/20190307/bcmcmd?sv=2015-04-05&sr=b&sig=sUdbU7oVbh5exbXXHVL5TDFBTWDDBASHeJ8Cp0B0TIc%3D&se=2038-05-06T22%3A34%3A19Z&sp=r==b8aefc751bdf93218716bca6797460ff +https://sonicstorage.blob.core.windows.net/packages/20190307/dsserve?sv=2015-04-05&sr=b&sig=lk7BH3DtW%2F5ehc0Rkqfga%2BUCABI0UzQmDamBsZH9K6w%3D&se=2038-05-06T22%3A34%3A45Z&sp=r==f9d4b815ebb9be9f755dedca8a51170d https://sonicstorage.blob.core.windows.net/packages/cmake/cmake-data_3.13.2-1_bpo9%2B1_all.deb?st=2020-03-27T02%3A22%3A24Z&se=2100-03-26T19%3A00%3A00Z&sp=rl&sv=2018-03-28&sr=b&sig=Xby%2Bm3OZOjPB%2FSlDbHD65yDcPzAgoys%2FA3vK8RB4BzA%3D==147cf42f3a68f6d6f1e53d95a599a1af https://sonicstorage.blob.core.windows.net/packages/cmake/cmake_3.13.2-1_bpo9%2B1_amd64.deb?st=2020-03-27T02%3A27%3A21Z&se=2100-03-26T19%3A00%3A00Z&sp=rl&sv=2018-03-28&sr=b&sig=4MvmmDBQuicFEJYakLm7xCNU19yJ8GIP4ankFSnITKY%3D==e75c741e8b6918b8f03625e456fa0275 https://sonicstorage.blob.core.windows.net/packages/cmake/cmake_3.13.2-1_bpo9%2B1_arm64.deb?st=2020-03-27T02%3A28%3A38Z&se=2100-03-26T19%3A00%3A00Z&sp=rl&sv=2018-03-28&sr=b&sig=rrHMkLi29aI8yH6s52ILCY8VcEbNFrzYT2DmC5RwOgs%3D==9bcc989e6ed168717f67c07e79177d4a https://sonicstorage.blob.core.windows.net/packages/cmake/cmake_3.13.2-1_bpo9%2B1_armhf.deb?st=2020-03-27T02%3A29%3A41Z&se=2100-03-26T19%3A00%3A00Z&sp=rl&sv=2018-03-28&sr=b&sig=sWt7kxrFumn020d2GeutGJ716cuQsFwmAmgU%2BJ0kqnk%3D==b5625da7ac620a2ae869653b9e5318ed +https://sonicstorage.blob.core.windows.net/packages/credosai/libsaicredo-owl_0.7.5_amd64.deb?sv=2020-10-02&st=2022-04-14T02%3A23%3A22Z&se=2100-04-15T02%3A23%3A00Z&sr=b&sp=r&sig=58z6E2nPcLIGjqAoxRAo7du%2FzjIBZkFdoXfSzw96Kxc%3D==b02c8664535fc6f9c02a89c5a6930578 +https://sonicstorage.blob.core.windows.net/packages/credosai/libsaicredo_0.7.5_amd64.deb?sv=2020-10-02&st=2022-04-14T02%3A21%3A31Z&se=2100-04-15T02%3A21%3A00Z&sr=b&sp=r&sig=iDv9Fprntpw9iVBFYVjW8iygy4qcSWT8O90nAXdXR0A%3D==e62bdf009e1a81e2ce8a38073305450c https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1-3.debian.tar.xz?sv=2020-04-08&st=2021-12-14T08%3A00%3A00Z&se=2030-12-14T18%3A18%3A00Z&sr=b&sp=r&sig=C8aYSvaQgMJ58Z13kFY0Wr0J0QF6i7WCeET9%2BpF%2BAxc%3D==e8d1e99b4b9e93f5dde860f6d55f42e3 https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1-3.dsc?sv=2020-04-08&st=2021-12-14T00%3A00%3A00Z&se=2050-12-15T00%3A00%3A00Z&sr=b&sp=r&sig=fIy6dVz3s59K0TiMkTlwSWN8lCzRl3i76ruAtROhfWA%3D==df3ed0dd965589fd09bf6a2920bc273e https://sonicstorage.blob.core.windows.net/packages/debian/socat_1.7.4.1.orig.tar.gz?sv=2020-04-08&st=2021-12-14T00%3A00%3A00Z&se=2050-12-15T00%3A00%3A00Z&sr=b&sp=r&sig=gpihyZv%2Fr0bVrCUKCKwpS4bIoqiPpdd%2BgCfuUGNHOUc%3D==780d14908dc1a6aa2790de376ab56b7a @@ -80,7 +82,6 @@ https://sonicstorage.blob.core.windows.net/packages/debian/thrift_0.11.0.orig.ta https://sonicstorage.blob.core.windows.net/packages/onie/onie-recovery-x86_64-kvm_x86_64-r0.iso?sv=2015-04-05&sr=b&sig=XMAk1cttBFM369CMbihe5oZgXwe4uaDVfwg4CTLT%2F5U%3D&se=2155-10-13T10%3A40%3A13Z&sp=r==54e11e450a461b1f4ae39c3ce3f15eff https://sonicstorage.blob.core.windows.net/packages/onie/onie-recovery-x86_64-kvm_x86_64_4_asic-r0.iso?sv=2020-04-08&st=2021-08-27T22%3A41%3A07Z&se=2030-08-28T22%3A41%3A00Z&sr=b&sp=r&sig=zyaX7rHnE5jXldpgrnWq1nvsfmMTrVCSuESZqrIxDLc%3D==1d8b8d3fa37f842d0184b5205be22be9 https://sonicstorage.blob.core.windows.net/packages/onie/onie-recovery-x86_64-kvm_x86_64_6_asic-r0.iso?sv=2020-04-08&st=2021-08-27T22%3A42%3A24Z&se=2030-08-28T22%3A42%3A00Z&sr=b&sp=r&sig=RqbtHJt8Hvy7j78jt3TgXo27T7zjdUDfSxqmOID1YUU%3D==58494305d4ac201daedf9364a1018a1b -https://sonicstorage.blob.core.windows.net/packages/redis/redis-server_6.0.6-1~bpo10+1_amd64.deb?sv=2015-04-05&sr=b&sig=2Ketg7BmkZEaTxR%2FgvAFVmhjn7ywdmkc7l2T2rsL57o%3D&se=2030-09-06T19%3A45%3A20Z&sp=r==09af97c096f4c854d238f91614a3415b https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1_bpo10+1_arm64.deb?sv=2015-04-05&sr=b&sig=GbkJV2wWln3hoz27zKi5erdk3NDKrAFrQriA97bcRCY%3D&se=2030-10-24T04%3A22%3A21Z&sp=r==282b4766cc9ac7d8bb70622bd69d9f5c https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1_bpo10+1_armhf.deb?sv=2015-04-05&sr=b&sig=67vHAMxsl%2BS3X1KsqhdYhakJkGdg5FKSPgU8kUiw4as%3D&se=2030-10-24T04%3A22%3A40Z&sp=r==62f287117afab6caaec564232ebbb5de https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1~bpo10+1_amd64.deb?sv=2015-04-05&sr=b&sig=73zbmjkf3pi%2Bn0R8Hy7CWT2EUvOAyzM5aLYJWCLySGM%3D&se=2030-09-06T19%3A44%3A59Z&sp=r==2d58c3c3358290c04d5e0ba70f297f18 @@ -124,6 +125,9 @@ https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/openss https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/python3.9-minimal_3.9.2-1+fips_arm64.deb==203627e9d8f79bc78fad3b6321fbc24a https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/python3.9_3.9.2-1+fips_arm64.deb==45c9fe276c0c50a7cd9368f9c03d0296 https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.2/arm64/symcrypt-openssl_0.2_arm64.deb==8a61d4d4617985f5e3247ec2010d956c +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.7.1/libsaibcm-dev_7.1.7.1_amd64.deb==c933da0fd0352cf0843f7b96ec07369f +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.7.1/libsaibcm_7.1.7.1_amd64.deb==8df551cb4002712e973ea98a5cbb9199 +https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0/7.1.7.1/libsaibcm_dnx_7.1.7.1_amd64.deb==b922ac3b400ac1829826e4a50a54e62d https://storage.googleapis.com/golang/go1.14.2.linux-amd64.tar.gz==856d248e3ea8a287d13e5f6afd086282 https://storage.googleapis.com/golang/go1.14.2.linux-arm64.tar.gz==e5f79b403701e00f20d13f0ea561b064 https://storage.googleapis.com/golang/go1.14.2.linux-armv6l.tar.gz==04467414e783b18de4278e9f24baf4be \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye b/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye index 0c89f8e65b5e..aada0e871a53 100644 --- a/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye @@ -51,12 +51,13 @@ libtsan0==10.2.1-6 libubsan1==10.2.1-6 libyang==1.0.73 libyang-cpp==1.0.73 -linux-libc-dev==5.10.127-2 +linux-libc-dev==5.10.136-1 make==4.3-4.1 patch==2.7.6-7 python3-dev==3.9.2-3 python3-swsscommon==1.0.0 python3-yang==1.0.73 python3.9-dev==3.9.2-1 +sonic-db-cli==1.0.0 xz-utils==5.2.5-2.1~deb11u1 zlib1g-dev==1:1.2.11.dfsg-2+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 b/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 index 37b2533c408a..d2b42f0a1949 100644 --- a/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 +++ b/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 @@ -10,6 +10,6 @@ pyangbind==0.8.1 pyyaml==5.4.1 redis==3.5.3 redis-dump-load==1.1 -regex==2022.7.25 +regex==2022.8.17 six==1.16.0 xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster b/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster index f4ec90a97161..ec458d882ad3 100644 --- a/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster +++ b/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster @@ -51,4 +51,5 @@ python3-dev==3.7.3-1 python3-swsscommon==1.0.0 python3-yang==1.0.73 python3.7-dev==3.7.3-2+deb10u3 +sonic-db-cli==1.0.0 xz-utils==5.2.4-1+deb10u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-config-engine-buster/versions-py3 b/files/build/versions/dockers/docker-config-engine-buster/versions-py3 index 37b2533c408a..d2b42f0a1949 100644 --- a/files/build/versions/dockers/docker-config-engine-buster/versions-py3 +++ b/files/build/versions/dockers/docker-config-engine-buster/versions-py3 @@ -10,6 +10,6 @@ pyangbind==0.8.1 pyyaml==5.4.1 redis==3.5.3 redis-dump-load==1.1 -regex==2022.7.25 +regex==2022.8.17 six==1.16.0 xmltodict==0.12.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-gbsyncd-credo/versions-deb-buster b/files/build/versions/dockers/docker-gbsyncd-credo/versions-deb-buster deleted file mode 100644 index 5ac2cb7c4163..000000000000 --- a/files/build/versions/dockers/docker-gbsyncd-credo/versions-deb-buster +++ /dev/null @@ -1,23 +0,0 @@ -gdb==8.2.1-2+b3 -gdbserver==8.2.1-2+b3 -libbabeltrace1==1.5.6-2+deb10u1 -libbsd0==0.9.1-2+deb10u1 -libdw1==0.176-1.1 -libedit2==3.1-20181209-1 -libglib2.0-0==2.58.3-2+deb10u3 -libgpm2==1.20.7-5 -libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 -libipt2==2.0-2 -libpopt0==1.16-12 -libsaicredo==0.7.5 -libsaicredo-owl==0.7.5 -libsaimetadata==1.0.0 -libsairedis==1.0.0 -libswsscommon-dbg==1.0.0 -libunwind8==1.2.1-10~deb10u1 -openssh-client==1:7.9p1-10+deb10u2 -sshpass==1.06-1 -strace==4.26-0.2 -syncd==1.0.0 -vim==2:8.1.0875-5+deb10u2 -vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-lldp/versions-deb-buster b/files/build/versions/dockers/docker-lldp/versions-deb-buster deleted file mode 100644 index a1fbf6d0d00a..000000000000 --- a/files/build/versions/dockers/docker-lldp/versions-deb-buster +++ /dev/null @@ -1,31 +0,0 @@ -gdb==8.2.1-2+b3 -gdbserver==8.2.1-2+b3 -libbabeltrace1==1.5.6-2+deb10u1 -libbsd0==0.9.1-2+deb10u1 -libdw1==0.176-1.1 -libedit2==3.1-20181209-1 -libevent-2.1-6==2.1.8-stable-4 -libglib2.0-0==2.58.3-2+deb10u3 -libgpm2==1.20.7-5 -libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 -libicu63==63.1-6+deb10u3 -libipt2==2.0-2 -libmariadb3==1:10.3.34-0+deb10u1 -libpci3==1:3.5.2-1 -libpopt0==1.16-12 -libsensors-config==1:3.5.0-3 -libsensors5==1:3.5.0-3 -libsnmp-base==5.7.3+dfsg-5 -libsnmp30==5.7.3+dfsg-5 -libswsscommon-dbg==1.0.0 -libunwind8==1.2.1-10~deb10u1 -libxml2==2.9.4+dfsg1-7+deb10u4 -lldpd==1.0.4-1 -lldpd-dbgsym==1.0.4-1 -mariadb-common==1:10.3.34-0+deb10u1 -mysql-common==5.8+1.0.5 -openssh-client==1:7.9p1-10+deb10u2 -sshpass==1.06-1 -strace==4.26-0.2 -vim==2:8.1.0875-5+deb10u2 -vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye b/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye index 3b0cc386a7f7..1ae12157b83b 100644 --- a/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye @@ -66,7 +66,7 @@ libtirpc-dev==1.3.1-1+deb11u1 libtsan0==10.2.1-6 libubsan1==10.2.1-6 libunwind8==1.3.2-2 -linux-libc-dev==5.10.127-2 +linux-libc-dev==5.10.136-1 make==4.3-4.1 ndisc6==1.0.4-2 ndppd==0.2.5-6 diff --git a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye index 06652b678622..6f35a1e247a1 100644 --- a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye @@ -1,5 +1,5 @@ -applibs==1.mlnx.4.5.2262 -applibs-dev==1.mlnx.4.5.2262 +applibs==1.mlnx.4.5.2318 +applibs-dev==1.mlnx.4.5.2318 binutils==2.35.2-2 binutils-common==2.35.2-2 binutils-x86-64-linux-gnu==2.35.2-2 @@ -101,7 +101,7 @@ libxdmcp6==1:1.1.2-3 libxext6==2:1.3.3-1.1 libxml2==2.9.10+dfsg-6.7+deb11u2 libxrender1==1:0.9.10-1 -linux-libc-dev==5.10.127-2 +linux-libc-dev==5.10.136-1 lm-sensors==1:3.6.0-7 lm-sensors-dbgsym==1:3.6.0-7 make==4.3-4.1 @@ -110,7 +110,7 @@ openssh-client==1:8.4p1-5+deb11u1 patch==2.7.6-7 pci.ids==0.0~2021.02.08-1 psmisc==23.4-2 -python-sdk-api==1.mlnx.4.5.2262 +python-sdk-api==1.mlnx.4.5.2318 python3-attr==20.3.0-1 python3-dev==3.9.2-3 python3-importlib-metadata==1.6.0-2 @@ -129,12 +129,12 @@ sensord==1:3.6.0-7 sensord-dbgsym==1:3.6.0-7 sshpass==1.09-1+b1 strace==5.10-1 -sx-complib==1.mlnx.4.5.2262 -sx-complib-dev==1.mlnx.4.5.2262 -sx-gen-utils==1.mlnx.4.5.2262 -sx-gen-utils-dev==1.mlnx.4.5.2262 -sxd-libs==1.mlnx.4.5.2262 -sxd-libs-dev==1.mlnx.4.5.2262 +sx-complib==1.mlnx.4.5.2318 +sx-complib-dev==1.mlnx.4.5.2318 +sx-gen-utils==1.mlnx.4.5.2318 +sx-gen-utils-dev==1.mlnx.4.5.2318 +sxd-libs==1.mlnx.4.5.2318 +sxd-libs-dev==1.mlnx.4.5.2318 ucf==3.0043 udev==247.3-7 vim==2:8.2.2434-3+deb11u1 diff --git a/files/build/versions/dockers/docker-platform-monitor/versions-py3 b/files/build/versions/dockers/docker-platform-monitor/versions-py3 index 0a94d51f227f..d61e92262845 100644 --- a/files/build/versions/dockers/docker-platform-monitor/versions-py3 +++ b/files/build/versions/dockers/docker-platform-monitor/versions-py3 @@ -6,6 +6,6 @@ jsonschema==2.6.0 more-itertools==4.2.0 protobuf==3.20.1 pyrsistent==0.15.5 -python_sdk_api==4.5.2262 +python_sdk_api==4.5.2318 thrift==0.13.0 zipp==1.0.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 index 456819069211..339dc27f573c 100644 --- a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 +++ b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 @@ -1,6 +1,6 @@ attrs==22.1.0 certifi==2017.4.17 -charset-normalizer==2.1.0 +charset-normalizer==2.1.1 click==8.1.3 clickclick==20.10.2 connexion==2.7.0 @@ -12,7 +12,7 @@ importlib-metadata==4.12.0 importlib-resources==5.9.0 inflection==0.5.1 itsdangerous==2.1.2 -jsonschema==4.9.1 +jsonschema==4.13.0 openapi-schema-validator==0.2.3 openapi-spec-validator==0.4.0 pkgutil_resolve_name==1.3.10 diff --git a/files/build/versions/dockers/docker-syncd-brcm-dnx/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm-dnx/versions-deb-buster deleted file mode 100644 index 9f0247c817d3..000000000000 --- a/files/build/versions/dockers/docker-syncd-brcm-dnx/versions-deb-buster +++ /dev/null @@ -1,28 +0,0 @@ -ethtool==1:4.19-1 -gdb==8.2.1-2+b3 -gdbserver==8.2.1-2+b3 -kmod==26-1 -libbabeltrace1==1.5.6-2+deb10u1 -libbsd0==0.9.1-2+deb10u1 -libdw1==0.176-1.1 -libedit2==3.1-20181209-1 -libglib2.0-0==2.58.3-2+deb10u3 -libgpm2==1.20.7-5 -libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 -libipt2==2.0-2 -libkmod2==26-1 -libpopt0==1.16-12 -libsaibcm==7.1.0.0-1 -libsaimetadata==1.0.0 -libsaimetadata-dbg==1.0.0 -libsairedis==1.0.0 -libsairedis-dbg==1.0.0 -libswsscommon-dbg==1.0.0 -libunwind8==1.2.1-10~deb10u1 -openssh-client==1:7.9p1-10+deb10u2 -sshpass==1.06-1 -strace==4.26-0.2 -syncd==1.0.0 -syncd-dbg==1.0.0 -vim==2:8.1.0875-5+deb10u2 -vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-brcm/versions-deb-buster b/files/build/versions/dockers/docker-syncd-brcm/versions-deb-buster deleted file mode 100644 index 0890405f5df4..000000000000 --- a/files/build/versions/dockers/docker-syncd-brcm/versions-deb-buster +++ /dev/null @@ -1,29 +0,0 @@ -ethtool==1:4.19-1 -gdb==8.2.1-2+b3 -gdbserver==8.2.1-2+b3 -kmod==26-1 -libbabeltrace1==1.5.6-2+deb10u1 -libbsd0==0.9.1-2+deb10u1 -libdw1==0.176-1.1 -libedit2==3.1-20181209-1 -libglib2.0-0==2.58.3-2+deb10u3 -libgpm2==1.20.7-5 -libhiredis0.14-dbgsym==0.14.0-3~bpo9+1 -libipt2==2.0-2 -libkmod2==26-1 -libpopt0==1.16-12 -libsaibcm==7.1.0.0-6 -libsaimetadata==1.0.0 -libsaimetadata-dbg==1.0.0 -libsairedis==1.0.0 -libsairedis-dbg==1.0.0 -libswsscommon-dbg==1.0.0 -libunwind8==1.2.1-10~deb10u1 -libyaml-0-2==0.2.1-1 -openssh-client==1:7.9p1-10+deb10u2 -sshpass==1.06-1 -strace==4.26-0.2 -syncd==1.0.0 -syncd-dbg==1.0.0 -vim==2:8.1.0875-5+deb10u2 -vim-runtime==2:8.1.0875-5+deb10u2 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-centec/versions-deb-buster-arm64 b/files/build/versions/dockers/docker-syncd-centec/versions-deb-buster-arm64 index e13071edf35e..ad85b9e20885 100644 --- a/files/build/versions/dockers/docker-syncd-centec/versions-deb-buster-arm64 +++ b/files/build/versions/dockers/docker-syncd-centec/versions-deb-buster-arm64 @@ -18,8 +18,8 @@ libpython2.7-stdlib==2.7.16-2+deb10u1 libsensors-config==1:3.5.0-3 libsensors4-dev==1:3.5.0-3 libsensors5==1:3.5.0-3 -libtirpc-common==1.1.4-0.4 -libtirpc3==1.1.4-0.4 +libtirpc-common==1.1.4-0.4+deb10u1 +libtirpc3==1.1.4-0.4+deb10u1 nfs-common==1:1.3.4-2.5+deb10u1 python==2.7.16-1 python-dev==2.7.16-1 diff --git a/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-py2 b/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-py2 index a5b2ed3215dd..6448b57b9069 100644 --- a/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-py2 +++ b/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-py2 @@ -2,5 +2,5 @@ cffi==1.7.0 nnpy==1.4.2 ptf==0.9.1 pycparser==2.21 -python-sdk-api==4.5.2262 +python-sdk-api==4.5.2318 scapy==2.4.0 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye index 2366de808e5b..dd53a27a918a 100644 --- a/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye @@ -1,8 +1,8 @@ -applibs==1.mlnx.4.5.2262 -applibs-dev==1.mlnx.4.5.2262 +applibs==1.mlnx.4.5.2318 +applibs-dev==1.mlnx.4.5.2318 gdb==10.1-1.7 gdbserver==10.1-1.7 -iproute2-dev==1.mlnx.4.5.2262 +iproute2-dev==1.mlnx.4.5.2318 libbabeltrace1==1.5.8-1+b3 libboost-regex1.74.0==1.74.0-9 libc-dev-bin==2.31-13+deb11u3 @@ -37,13 +37,13 @@ libswsscommon-dbg==1.0.0 libtirpc-dev==1.3.1-1+deb11u1 libunwind8==1.3.2-2 libxml2==2.9.10+dfsg-6.7+deb11u2 -linux-libc-dev==5.10.127-2 +linux-libc-dev==5.10.136-1 mft==4.20.0-34 mlnx-sai==1.mlnx.SAIRel1.21.2.0 openssh-client==1:8.4p1-5+deb11u1 python-is-python3==3.9.2-1 python-pip-whl==20.3.4-4+deb11u1 -python-sdk-api==1.mlnx.4.5.2262 +python-sdk-api==1.mlnx.4.5.2318 python3-dev==3.9.2-3 python3-pip==20.3.4-4+deb11u1 python3-pkg-resources==52.0.0-4 @@ -52,22 +52,22 @@ python3-wheel==0.34.2-1 python3.9-dev==3.9.2-1 sshpass==1.09-1+b1 strace==5.10-1 -sx-acl-helper==1.mlnx.4.5.2262 -sx-acl-helper-dev==1.mlnx.4.5.2262 -sx-complib==1.mlnx.4.5.2262 -sx-complib-dev==1.mlnx.4.5.2262 -sx-examples==1.mlnx.4.5.2262 -sx-examples-dev==1.mlnx.4.5.2262 -sx-gen-utils==1.mlnx.4.5.2262 -sx-gen-utils-dev==1.mlnx.4.5.2262 -sx-scew==1.mlnx.4.5.2262 -sx-scew-dev==1.mlnx.4.5.2262 -sxd-libs==1.mlnx.4.5.2262 -sxd-libs-dev==1.mlnx.4.5.2262 +sx-acl-helper==1.mlnx.4.5.2318 +sx-acl-helper-dev==1.mlnx.4.5.2318 +sx-complib==1.mlnx.4.5.2318 +sx-complib-dev==1.mlnx.4.5.2318 +sx-examples==1.mlnx.4.5.2318 +sx-examples-dev==1.mlnx.4.5.2318 +sx-gen-utils==1.mlnx.4.5.2318 +sx-gen-utils-dev==1.mlnx.4.5.2318 +sx-scew==1.mlnx.4.5.2318 +sx-scew-dev==1.mlnx.4.5.2318 +sxd-libs==1.mlnx.4.5.2318 +sxd-libs-dev==1.mlnx.4.5.2318 syncd==1.0.0 syncd-dbg==1.0.0 vim==2:8.2.2434-3+deb11u1 vim-runtime==2:8.2.2434-3+deb11u1 -wjh-libs==1.mlnx.4.5.2262 -wjh-libs-dev==1.mlnx.4.5.2262 +wjh-libs==1.mlnx.4.5.2318 +wjh-libs-dev==1.mlnx.4.5.2318 zlib1g-dev==1:1.2.11.dfsg-2+deb11u1 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mlnx/versions-py3 b/files/build/versions/dockers/docker-syncd-mlnx/versions-py3 index 585326d2ef8c..73eea649d6a2 100644 --- a/files/build/versions/dockers/docker-syncd-mlnx/versions-py3 +++ b/files/build/versions/dockers/docker-syncd-mlnx/versions-py3 @@ -1 +1 @@ -python_sdk_api==4.5.2262 \ No newline at end of file +python_sdk_api==4.5.2318 \ No newline at end of file diff --git a/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-buster-armhf b/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-buster-armhf index 0e5655940cd3..6e2489b47190 100644 --- a/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-buster-armhf +++ b/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-buster-armhf @@ -20,8 +20,8 @@ libsairedis==1.0.0 libsensors-config==1:3.5.0-3 libsensors4-dev==1:3.5.0-3 libsensors5==1:3.5.0-3 -libtirpc-common==1.1.4-0.4 -libtirpc3==1.1.4-0.4 +libtirpc-common==1.1.4-0.4+deb10u1 +libtirpc3==1.1.4-0.4+deb10u1 mrvllibsai==1.10.2-1 nfs-common==1:1.3.4-2.5+deb10u1 python==2.7.16-1 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye index d90331f1a46a..e3dfa55eed98 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye @@ -834,7 +834,7 @@ libnet-ssleay-perl==1.88-3+b1 libnetfilter-conntrack-dev==1.0.8-3 libnetfilter-conntrack3==1.0.8-3 libnetpbm10==2:10.0-15.4 -libnetsnmptrapd40==5.9+dfsg-3+b1 +libnetsnmptrapd40==5.9+dfsg-4+deb11u1 libnewt-dev==0.52.21-4+b3 libnewt0.52==0.52.21-4+b3 libnfnetlink-dev==1.0.1-3+b1 @@ -1060,9 +1060,9 @@ libsnappy-java==1.1.8.3-1 libsnappy-jni==1.1.8.3-1 libsnappy1v5==1.1.8-1 libsndfile1==1.0.31-2 -libsnmp-base==5.9+dfsg-3 -libsnmp-dev==5.9+dfsg-3+b1 -libsnmp40==5.9+dfsg-3+b1 +libsnmp-base==5.9+dfsg-4+deb11u1 +libsnmp-dev==5.9+dfsg-4+deb11u1 +libsnmp40==5.9+dfsg-4+deb11u1 libsoap-lite-perl==1.27-1 libsodium-dev==1.0.18-1 libsodium23==1.0.18-1 @@ -1343,12 +1343,12 @@ libzvbi0==0.2.35-18 libzzip-0-13==0.13.62-3.3+deb11u1 licensecheck==3.1.1-2 lintian==2.104.0 -linux-compiler-gcc-10-x86==5.10.127-2 -linux-headers-5.10.0-16-amd64==5.10.127-2 -linux-headers-5.10.0-16-common==5.10.127-2 -linux-headers-amd64==5.10.127-2 -linux-kbuild-5.10==5.10.127-2 -linux-libc-dev==5.10.127-2 +linux-compiler-gcc-10-x86==5.10.136-1 +linux-headers-5.10.0-17-amd64==5.10.136-1 +linux-headers-5.10.0-17-common==5.10.136-1 +linux-headers-amd64==5.10.136-1 +linux-kbuild-5.10==5.10.136-1 +linux-libc-dev==5.10.136-1 linuxdoc-tools==0.9.82-1 llvm-11==1:11.0.1-2 llvm-11-dev==1:11.0.1-2 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 index 27741eecce56..968dc30aa14b 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-arm64 @@ -17,6 +17,7 @@ libgomp1-armhf-cross==10.2.1-6cross1 libstdc++6-armhf-cross==10.2.1-6cross1 libubsan1-armhf-cross==10.2.1-6cross1 libxslt1-dev==1.1.34-4 -linux-headers-5.10.0-16-arm64==5.10.127-2 -linux-headers-arm64==5.10.127-2 -nodejs==14.20.0-deb-1nodesource1 \ No newline at end of file +linux-headers-5.10.0-17-arm64==5.10.136-1 +linux-headers-arm64==5.10.136-1 +nodejs==14.20.0-deb-1nodesource1 +tzdata==2021a-1+deb11u5 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf index 468d8e36c579..a7997da8a169 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf @@ -43,9 +43,9 @@ libxapian-dev==1.4.18-3 libxslt1-dev==1.1.34-4 libxstring-perl==0.005-1+b1 libyaml-tiny-perl==1.73-1 -linux-compiler-gcc-10-arm==5.10.127-2 -linux-headers-5.10.0-16-armmp==5.10.127-2 -linux-headers-armmp==5.10.127-2 +linux-compiler-gcc-10-arm==5.10.136-1 +linux-headers-5.10.0-17-armmp==5.10.136-1 +linux-headers-armmp==5.10.136-1 mat2==0.12.1-2+deb11u1 nodejs==14.20.0-deb-1nodesource1 ps2eps==1.68+binaryfree-3 @@ -58,4 +58,5 @@ sassc==3.6.1+20201027-1 texlive-extra-utils==2020.20210202-3 texlive-font-utils==2020.20210202-3 texlive-luatex==2020.20210202-3 +tzdata==2021a-1+deb11u5 yui-compressor==2.4.8-2.1 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-git b/files/build/versions/dockers/sonic-slave-bullseye/versions-git index 169e67dab005..3341dbe19724 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-git +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==5da65ec20db9b17b03420d928240092e5955a769 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==44b73307ee51f90f632088f6d08c56cd3cabf8df https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 index 60aea4709497..a8c9f809d9d6 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 @@ -85,7 +85,7 @@ pytz==2021.1 pyxdg==0.27 pyyaml==5.4.1 redis==4.3.4 -regex==2022.7.25 +regex==2022.8.17 requests==2.25.1 roman==2.0.0 service-identity==18.1.0 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-web b/files/build/versions/dockers/sonic-slave-bullseye/versions-web index cc5c809a69a6..bf771d6e4495 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-web +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-web @@ -1,4 +1,4 @@ https://download.docker.com/linux/debian/gpg==1afae06b34a13c1b3d9cb61a26285a15 -https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==bfd21cd7274888c066d39fe95b88a442 +https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==beb7abb07eb7c08d48f3a48fc1e58569 https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-go_1.15.15-1~deb11u4%2Bfips_amd64.deb==b60f6db62805696b47ab422ab798fe56 https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-src_1.15.15-1~deb11u4%2Bfips_amd64.deb==1c920937aa49b602a1bfec3c49747131 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster index 2aae3de762eb..7c931fd82f82 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster +++ b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster @@ -575,10 +575,11 @@ libgme0==0.6.2-1 libgmock-dev==1.8.1-3 libgmp-dev==2:6.1.2+dfsg-4+deb10u1 libgmpxx4ldbl==2:6.1.2+dfsg-4+deb10u1 -libgnutls-dane0==3.6.7-4+deb10u7 -libgnutls-openssl27==3.6.7-4+deb10u7 -libgnutls28-dev==3.6.7-4+deb10u7 -libgnutlsxx28==3.6.7-4+deb10u7 +libgnutls-dane0==3.6.7-4+deb10u9 +libgnutls-openssl27==3.6.7-4+deb10u9 +libgnutls28-dev==3.6.7-4+deb10u9 +libgnutls30==3.6.7-4+deb10u9 +libgnutlsxx28==3.6.7-4+deb10u9 libgomp1==8.3.0-6 libgoogle-perftools4==2.7-1 libgpgme11==1.12.0-6 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-git b/files/build/versions/dockers/sonic-slave-buster/versions-git index 169e67dab005..3341dbe19724 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-git +++ b/files/build/versions/dockers/sonic-slave-buster/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==5da65ec20db9b17b03420d928240092e5955a769 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==44b73307ee51f90f632088f6d08c56cd3cabf8df https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-py3 b/files/build/versions/dockers/sonic-slave-buster/versions-py3 index 87abe3b3b415..419bd6cd90e9 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-py3 +++ b/files/build/versions/dockers/sonic-slave-buster/versions-py3 @@ -65,7 +65,7 @@ pytz==2019.1 pyxdg==0.25 pyyaml==5.4.1 redis==4.3.4 -regex==2022.7.25 +regex==2022.8.17 requests==2.21.0 roman==2.0.0 secretstorage==2.3.1 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-web b/files/build/versions/dockers/sonic-slave-buster/versions-web index dc09b65272c9..0ef2fc08ee49 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-web +++ b/files/build/versions/dockers/sonic-slave-buster/versions-web @@ -1,3 +1,3 @@ https://download.docker.com/linux/debian/gpg==1afae06b34a13c1b3d9cb61a26285a15 -https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==bfd21cd7274888c066d39fe95b88a442 +https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==beb7abb07eb7c08d48f3a48fc1e58569 https://storage.googleapis.com/golang/go1.14.2.linux-amd64.tar.gz==856d248e3ea8a287d13e5f6afd086282 \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-git b/files/build/versions/dockers/sonic-slave-stretch/versions-git index 169e67dab005..3341dbe19724 100644 --- a/files/build/versions/dockers/sonic-slave-stretch/versions-git +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-git @@ -1,2 +1,2 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==5da65ec20db9b17b03420d928240092e5955a769 +https://chromium.googlesource.com/chromium/tools/depot_tools.git==44b73307ee51f90f632088f6d08c56cd3cabf8df https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f \ No newline at end of file diff --git a/files/build/versions/dockers/sonic-slave-stretch/versions-web b/files/build/versions/dockers/sonic-slave-stretch/versions-web index 6736362ed739..9e606813d66e 100644 --- a/files/build/versions/dockers/sonic-slave-stretch/versions-web +++ b/files/build/versions/dockers/sonic-slave-stretch/versions-web @@ -1,5 +1,5 @@ https://download.docker.com/linux/debian/gpg==1afae06b34a13c1b3d9cb61a26285a15 -https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==bfd21cd7274888c066d39fe95b88a442 +https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64==beb7abb07eb7c08d48f3a48fc1e58569 https://sonicstorage.blob.core.windows.net/packages/cmake/cmake-data_3.13.2-1_bpo9%2B1_all.deb?st=2020-03-27T02%3A22%3A24Z&se=2100-03-26T19%3A00%3A00Z&sp=rl&sv=2018-03-28&sr=b&sig=Xby%2Bm3OZOjPB%2FSlDbHD65yDcPzAgoys%2FA3vK8RB4BzA%3D==147cf42f3a68f6d6f1e53d95a599a1af https://sonicstorage.blob.core.windows.net/packages/cmake/cmake_3.13.2-1_bpo9%2B1_amd64.deb?st=2020-03-27T02%3A27%3A21Z&se=2100-03-26T19%3A00%3A00Z&sp=rl&sv=2018-03-28&sr=b&sig=4MvmmDBQuicFEJYakLm7xCNU19yJ8GIP4ankFSnITKY%3D==e75c741e8b6918b8f03625e456fa0275 https://storage.googleapis.com/golang/go1.14.2.linux-amd64.tar.gz==856d248e3ea8a287d13e5f6afd086282 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-deb-bullseye b/files/build/versions/host-image/versions-deb-bullseye index 5cd6c127244b..783cbcf016ba 100644 --- a/files/build/versions/host-image/versions-deb-bullseye +++ b/files/build/versions/host-image/versions-deb-bullseye @@ -71,7 +71,7 @@ grub2-common==2.04-20 haveged==1.9.14-1 hdparm==9.60+ds-1 hping3==3.a2.ds2-10 -hw-management==1.mlnx.7.0020.2004 +hw-management==1.mlnx.7.0020.3006 i2c-tools==4.2-1+b1 ifmetric==0.3-5 ifupdown2==3.0.0-1 @@ -301,7 +301,7 @@ libyang==1.0.73 libyang-cpp==1.0.73 linux-base==4.6 linux-image-5.10.0-12-2-amd64-unsigned==5.10.103-1 -linux-libc-dev==5.10.127-2 +linux-libc-dev==5.10.136-1 locales==2.31-13+deb11u3 logrotate==3.18.0-2+deb11u1 lsb-release==11.1.0 @@ -369,16 +369,16 @@ screen==4.8.0-6 sensible-utils==0.0.14 smartmontools==7.2-1 software-properties-common==0.96.20.2-2.1 +sonic-db-cli==1.0.0 sonic-device-data==1.0-1 sonic-host-services-data==1.0-1 -sonic-platform-pddf==1.1 sonic-utilities-data==1.0-1 sqlite3==3.34.1-3 squashfs-tools==1:4.4-2+deb11u2 sudo==1.9.5p2-3 swig==4.0.2-1 swig4.0==4.0.2-1 -sx-kernel==1.mlnx.4.5.2262 +sx-kernel==1.mlnx.4.5.2318 symcrypt-openssl==0.1 sysfsutils==2.1.0+repack-7 systemd==247.3-7 diff --git a/files/build/versions/host-image/versions-py3 b/files/build/versions/host-image/versions-py3 index 174bde8fc234..7c3e33fb551f 100644 --- a/files/build/versions/host-image/versions-py3 +++ b/files/build/versions/host-image/versions-py3 @@ -5,7 +5,7 @@ bitarray==1.5.3 blessed==1.19.1 certifi==2022.6.15 cffi==1.15.1 -charset-normalizer==2.1.0 +charset-normalizer==2.1.1 click==7.0 click-log==0.4.0 colorful==0.5.4 @@ -34,7 +34,6 @@ natsort==6.2.1 netaddr==0.8.0 netifaces==0.11.0 pathtools==0.1.2 -pddf-platform==1.0 pexpect==4.8.0 prefixed==0.3.2 prettyprinter==0.18.0 @@ -46,14 +45,14 @@ pyangbind==0.8.1 pycairo==1.21.0 pycparser==2.21 pycurl==7.43.0.6 -pygments==2.12.0 +pygments==2.13.0 pygobject==3.42.2 pyroute2==0.5.19 python-apt==2.2.1 python-dateutil==2.8.2 pyyaml==5.4.1 redis==3.5.3 -regex==2022.7.25 +regex==2022.8.17 requests==2.28.1 scapy==2.4.4 semantic-version==2.10.0 diff --git a/files/build/versions/host-image/versions-py3-all-arm64 b/files/build/versions/host-image/versions-py3-all-arm64 deleted file mode 100644 index 9745a2e2d48a..000000000000 --- a/files/build/versions/host-image/versions-py3-all-arm64 +++ /dev/null @@ -1 +0,0 @@ -filelock==3.7.1 \ No newline at end of file diff --git a/files/build/versions/host-image/versions-py3-all-armhf b/files/build/versions/host-image/versions-py3-all-armhf index 7065fdf06d1b..431dc5a43838 100644 --- a/files/build/versions/host-image/versions-py3-all-armhf +++ b/files/build/versions/host-image/versions-py3-all-armhf @@ -1,2 +1 @@ -cryptography==3.3.1 -filelock==3.7.1 \ No newline at end of file +cryptography==3.3.1 \ No newline at end of file From 9d00c5643920b6e1bfb30d1e5a1b447097d2acfb Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Sun, 21 Aug 2022 17:30:03 -0700 Subject: [PATCH 222/259] [202205][swss][sairedis] advance submodule head (#11800) swss: * 7db9ddb 2022-08-20 | Handle dual ToR neighbor miss scenario (#2151) (HEAD -> 202205, github/202205) [Lawrence Lee] sairedis: * 87d5a3e 2022-08-20 | [202205][SAI] advance SAI version to 1.10 to pick up saithrift and build changes (#1108) (HEAD -> 202205, github/202205) [Ying Xie] Signed-off-by: Ying Xie Signed-off-by: Ying Xie --- src/sonic-sairedis | 2 +- src/sonic-swss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sonic-sairedis b/src/sonic-sairedis index aed01cd320f1..87d5a3ea3e87 160000 --- a/src/sonic-sairedis +++ b/src/sonic-sairedis @@ -1 +1 @@ -Subproject commit aed01cd320f1e6eece7186aef026fe8a5635d892 +Subproject commit 87d5a3ea3e877f2e311f711bf418123814256fc6 diff --git a/src/sonic-swss b/src/sonic-swss index 4085d3f61087..7db9ddbc0778 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 4085d3f61087619ea11bbcb0173c1a0903e51f8d +Subproject commit 7db9ddbc07781c4b6fa124f0ed7ecc01118cd98e From d9192b5f7d5325485c2d2057191314ce8f4e5103 Mon Sep 17 00:00:00 2001 From: Hua Liu <58683130+liuh-80@users.noreply.github.com> Date: Mon, 22 Aug 2022 09:58:04 +0800 Subject: [PATCH 223/259] Update swsssdk submodule (#10996) (#11714) Cherry pick PR ttps://github.com/sonic-net/sonic-buildimage/pull/10996 to 202205 branch Updating sonic-utilities sub module with the following commits ca785a2 Remove sonic-db-cli #### Why I did it To fix sonic-db-cli high CPU usage on SONiC startup issue: https://github.com/sonic-net/sonic-buildimage/issues/10218 sonic-db-cli re-write with c++ and move to sonic-swss-common repo. #### How I did it #### How to verify it #### Which release branch to backport (provide reason below if selected) #### Description for the changelog ca785a2 Remove sonic-db-cli #### A picture of a cute animal (not mandatory but encouraged) From 001177110d3d0bb723e643278de3b640011535c5 Mon Sep 17 00:00:00 2001 From: Volodymyr Samotiy Date: Wed, 24 Aug 2022 11:48:43 +0300 Subject: [PATCH 224/259] [202205] [Mellanox] Update MFT to v4.21.0-100 (#11759) - Why I did it To update MFT package to the latest version. - How I did it Updated MFT_VERSION & MFT_REVISION in platform/mellanox/mft.mk. - How to verify it Run regression testing using tests from sonic-mgmt Signed-off-by: Volodymyr Samotiy --- platform/mellanox/mft.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/mellanox/mft.mk b/platform/mellanox/mft.mk index c3ebdac356e7..092645dafb12 100644 --- a/platform/mellanox/mft.mk +++ b/platform/mellanox/mft.mk @@ -16,8 +16,8 @@ # # Mellanox SAI -MFT_VERSION = 4.20.0 -MFT_REVISION = 34 +MFT_VERSION = 4.21.0 +MFT_REVISION = 100 export MFT_VERSION MFT_REVISION From a5171349a7a1bc8caacdec74b9b71dd528d523ef Mon Sep 17 00:00:00 2001 From: saksarav-nokia Date: Wed, 24 Aug 2022 18:53:50 -0400 Subject: [PATCH 225/259] [NOKIA][DEVICE]Updated BCM config file to disable the cmic dma abort during cold boot and recycle port setting (#11825) Signed-off-by: Sakthivadivu Saravanaraj --- .../0/jr2cp-nokia-18x100g-4x25g-config.bcm | 4 ++-- .../1/jr2cp-nokia-18x100g-4x25g-config.bcm | 4 ++-- .../Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm | 5 +++-- .../Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm | 5 +++-- src/sonic-device-data/tests/permitted_list | 1 + 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/jr2cp-nokia-18x100g-4x25g-config.bcm b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/jr2cp-nokia-18x100g-4x25g-config.bcm index 0fae0269330b..72c101facb35 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/jr2cp-nokia-18x100g-4x25g-config.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/jr2cp-nokia-18x100g-4x25g-config.bcm @@ -1496,7 +1496,7 @@ tm_port_header_type_in_202.BCM8885X=INJECTED_2_PP tm_port_header_type_in_203.BCM8885X=INJECTED_2_PP tm_port_header_type_in_232.BCM8885X=INJECTED_2 tm_port_header_type_in_19.BCM8885X=ETH -tm_port_header_type_in_20.BCM8885X=INJECTED_2 +tm_port_header_type_in_20.BCM8885X=ETH tm_port_header_type_out_0.BCM8885X=CPU tm_port_header_type_out_200.BCM8885X=ETH tm_port_header_type_out_201.BCM8885X=ETH @@ -1504,7 +1504,7 @@ tm_port_header_type_out_202.BCM8885X=ETH tm_port_header_type_out_203.BCM8885X=ETH tm_port_header_type_out_232.BCM8885X=CPU tm_port_header_type_out_19.BCM8885X=ETH -tm_port_header_type_out_20.BCM8885X=RAW +tm_port_header_type_out_20.BCM8885X=ETH tslam_intr_enable.BCM8885X=0 tslam_timeout_usec.BCM8885X=1000000 ucode_port_0.BCM8885X=CPU.0:core_0.0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/jr2cp-nokia-18x100g-4x25g-config.bcm b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/jr2cp-nokia-18x100g-4x25g-config.bcm index 33af71fd8abf..cc6d41ea3da6 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/jr2cp-nokia-18x100g-4x25g-config.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/jr2cp-nokia-18x100g-4x25g-config.bcm @@ -1515,7 +1515,7 @@ tm_port_header_type_in_202.BCM8885X=INJECTED_2_PP tm_port_header_type_in_203.BCM8885X=INJECTED_2_PP tm_port_header_type_in_232.BCM8885X=INJECTED_2 tm_port_header_type_in_19.BCM8885X=ETH -tm_port_header_type_in_20.BCM8885X=INJECTED_2 +tm_port_header_type_in_20.BCM8885X=ETH tm_port_header_type_out_0.BCM8885X=CPU tm_port_header_type_out_200.BCM8885X=ETH tm_port_header_type_out_201.BCM8885X=ETH @@ -1523,7 +1523,7 @@ tm_port_header_type_out_202.BCM8885X=ETH tm_port_header_type_out_203.BCM8885X=ETH tm_port_header_type_out_232.BCM8885X=CPU tm_port_header_type_out_19.BCM8885X=ETH -tm_port_header_type_out_20.BCM8885X=RAW +tm_port_header_type_out_20.BCM8885X=ETH tslam_intr_enable.BCM8885X=0 tslam_timeout_usec.BCM8885X=1000000 ucode_port_0.BCM8885X=CPU.0:core_0.0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm index 264cfb30a310..5303bb263ba2 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm @@ -1515,7 +1515,7 @@ tm_port_header_type_in_202.BCM8885X=INJECTED_2_PP tm_port_header_type_in_203.BCM8885X=INJECTED_2_PP tm_port_header_type_in_232.BCM8885X=INJECTED_2 tm_port_header_type_in_19.BCM8885X=ETH -tm_port_header_type_in_20.BCM8885X=INJECTED_2 +tm_port_header_type_in_20.BCM8885X=ETH tm_port_header_type_out_0.BCM8885X=CPU tm_port_header_type_out_200.BCM8885X=ETH tm_port_header_type_out_201.BCM8885X=ETH @@ -1523,7 +1523,7 @@ tm_port_header_type_out_202.BCM8885X=ETH tm_port_header_type_out_203.BCM8885X=ETH tm_port_header_type_out_232.BCM8885X=CPU tm_port_header_type_out_19.BCM8885X=ETH -tm_port_header_type_out_20.BCM8885X=RAW +tm_port_header_type_out_20.BCM8885X=ETH tslam_intr_enable.BCM8885X=0 tslam_timeout_usec.BCM8885X=1000000 ucode_port_0.BCM8885X=CPU.0:core_0.0 @@ -2055,3 +2055,4 @@ modreg IPS_FORCE_LOCAL_OR_FABRIC FORCE_FABRIC=1 xflow_macsec_secure_chan_to_num_secure_assoc_encrypt=2 xflow_macsec_secure_chan_to_num_secure_assoc_decrypt=4 +cmic_dma_abort_in_cold_boot=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm index 733ab75004e4..eb58c1ca42e1 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm @@ -1515,7 +1515,7 @@ tm_port_header_type_in_202.BCM8885X=INJECTED_2_PP tm_port_header_type_in_203.BCM8885X=INJECTED_2_PP tm_port_header_type_in_232.BCM8885X=INJECTED_2 tm_port_header_type_in_19.BCM8885X=ETH -tm_port_header_type_in_20.BCM8885X=INJECTED_2 +tm_port_header_type_in_20.BCM8885X=ETH tm_port_header_type_out_0.BCM8885X=CPU tm_port_header_type_out_200.BCM8885X=ETH tm_port_header_type_out_201.BCM8885X=ETH @@ -1523,7 +1523,7 @@ tm_port_header_type_out_202.BCM8885X=ETH tm_port_header_type_out_203.BCM8885X=ETH tm_port_header_type_out_232.BCM8885X=CPU tm_port_header_type_out_19.BCM8885X=ETH -tm_port_header_type_out_20.BCM8885X=RAW +tm_port_header_type_out_20.BCM8885X=ETH tslam_intr_enable.BCM8885X=0 tslam_timeout_usec.BCM8885X=1000000 ucode_port_0.BCM8885X=CPU.0:core_0.0 @@ -2057,3 +2057,4 @@ modreg IPS_FORCE_LOCAL_OR_FABRIC FORCE_FABRIC=1 xflow_macsec_secure_chan_to_num_secure_assoc_encrypt=2 xflow_macsec_secure_chan_to_num_secure_assoc_decrypt=4 +cmic_dma_abort_in_cold_boot=0 diff --git a/src/sonic-device-data/tests/permitted_list b/src/sonic-device-data/tests/permitted_list index b4ec08bed928..a753dca8d083 100644 --- a/src/sonic-device-data/tests/permitted_list +++ b/src/sonic-device-data/tests/permitted_list @@ -318,3 +318,4 @@ phy_an_lt_msft xflow_macsec_secure_chan_to_num_secure_assoc_encrypt xflow_macsec_secure_chan_to_num_secure_assoc_decrypt system_ref_core_clock_khz +cmic_dma_abort_in_cold_boot From a2bed2ae4aa4217d6a1164cb5fd8c7306a041935 Mon Sep 17 00:00:00 2001 From: anamehra <54692434+anamehra@users.noreply.github.com> Date: Mon, 22 Aug 2022 10:08:29 -0700 Subject: [PATCH 226/259] container_checker on supervisor should check containers based on asic presence (#11442) Why I did it On a supervisor card in a chassis, syncd/teamd/swss/lldp etc dockers are created for each Switch Fabric card. However, not all chassis would have all the switch fabric cards present. In this case, only dockers for Switch Fabrics present would be created. The monit 'container_checker' fails in this scenario as it is expecting dockers for all Switch Fabrics (based on NUM_ASIC defined in asic.conf file). --- files/image_config/monit/container_checker | 22 ++++++++++--- .../sonic_py_common/multi_asic.py | 31 ++++++++++++++++++- 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/files/image_config/monit/container_checker b/files/image_config/monit/container_checker index a67a96a0c18c..c6271d26c8b1 100755 --- a/files/image_config/monit/container_checker +++ b/files/image_config/monit/container_checker @@ -23,7 +23,6 @@ import swsssdk from sonic_py_common import multi_asic, device_info from swsscommon import swsscommon - def get_expected_running_containers(): """ @summary: This function will get the expected running & always-enabled containers by following the rule: @@ -41,7 +40,19 @@ def get_expected_running_containers(): expected_running_containers = set() always_running_containers = set() - + + # Get current asic presence list. For multi_asic system, multi instance containers + # should be checked only for asics present. + asics_id_presence = multi_asic.get_asic_presence_list() + + # Some services may run all the instances irrespective of asic presence. + # Add those to exception list. + # database service: Currently services have dependency on all database services to + # be up irrespective of asic presence. + # bgp service: Currently bgp runs all instances. Once this is fixed to be config driven, + # it will be removed from exception list. + run_all_instance_list = ['database', 'bgp'] + for container_name in feature_table.keys(): if feature_table[container_name]["state"] not in ["disabled", "always_disabled"]: if multi_asic.is_multi_asic(): @@ -50,7 +61,8 @@ def get_expected_running_containers(): if feature_table[container_name]["has_per_asic_scope"] == "True": num_asics = multi_asic.get_num_asics() for asic_id in range(num_asics): - expected_running_containers.add(container_name + str(asic_id)) + if asic_id in asics_id_presence or container_name in run_all_instance_list: + expected_running_containers.add(container_name + str(asic_id)) else: expected_running_containers.add(container_name) if feature_table[container_name]["state"] == 'always_enabled': @@ -60,9 +72,11 @@ def get_expected_running_containers(): if feature_table[container_name]["has_per_asic_scope"] == "True": num_asics = multi_asic.get_num_asics() for asic_id in range(num_asics): - always_running_containers.add(container_name + str(asic_id)) + if asic_id in asics_id_presence or container_name in run_all_instance_list: + always_running_containers.add(container_name + str(asic_id)) else: always_running_containers.add(container_name) + if device_info.is_supervisor(): always_running_containers.add("database-chassis") return expected_running_containers, always_running_containers diff --git a/src/sonic-py-common/sonic_py_common/multi_asic.py b/src/sonic-py-common/sonic_py_common/multi_asic.py index 8ba409165f8b..e08746be0367 100644 --- a/src/sonic-py-common/sonic_py_common/multi_asic.py +++ b/src/sonic-py-common/sonic_py_common/multi_asic.py @@ -22,7 +22,8 @@ NEIGH_DEVICE_METADATA_CFG_DB_TABLE = 'DEVICE_NEIGHBOR_METADATA' DEFAULT_NAMESPACE = '' PORT_ROLE = 'role' - +CHASSIS_STATE_DB='CHASSIS_STATE_DB' +CHASSIS_ASIC_INFO_TABLE='CHASSIS_ASIC_TABLE' # Dictionary to cache config_db connection handle per namespace # to prevent duplicate connections from being opened @@ -451,3 +452,31 @@ def validate_namespace(namespace): return True else: return False + +def get_asic_presence_list(): + """ + @summary: This function will get the asic presence list. On Supervisor, the list includes only the asics + for inserted and detected fabric cards. For non-supervisor cards, e.g. line card, the list should + contain all supported asics by the card. The function gets the asic list from CHASSIS_ASIC_TABLE from + CHASSIS_STATE_DB. The function assumes that the first N asic ids (asic0 to asic(N-1)) in + CHASSIS_ASIC_TABLE belongs to the supervisor, where N is the max number of asics supported by the Chassis + @return: List of asics present + """ + asics_list = [] + if is_multi_asic(): + if not is_supervisor(): + # This is not supervisor, all asics should be present. Assuming that asics + # are not removable entity on Line Cards. Add all asics, 0 - num_asics to the list. + asics_list = list(range(0, get_num_asics())) + else: + # This is supervisor card. Some fabric cards may not be inserted. + # Get asic list from CHASSIS_ASIC_TABLE which lists only the asics + # present based on Fabric card detection by the platform. + db = swsscommon.DBConnector(CHASSIS_STATE_DB, 0, True) + asic_table = swsscommon.Table(db, CHASSIS_ASIC_INFO_TABLE) + if asic_table: + asics_presence_list = list(asic_table.getKeys()) + for asic in asics_presence_list: + # asic is asid id: asic0, asic1.... asicN. Get the numeric value. + asics_list.append(int(get_asic_id_from_name(asic))) + return asics_list From 5654524a3e3286eef8f3715c589acb259a316ce4 Mon Sep 17 00:00:00 2001 From: Vivek Date: Wed, 24 Aug 2022 01:55:33 -0700 Subject: [PATCH 227/259] [Mellanox] [4700] Update platform capability file to support new breakout mode (#11614) - Why I did it This new breakout mode is required when a QSFP cable is used on the QSFP-DD supported 4700 port. since QSFP only uses the first 4 lanes, this mode is required to restrict the child ports to only use the first four lanes - How I did it Updated the platfrom.json file with the extended data - How to verify it Tested on one port: root@msn-4700:/home/admin# show int status Interface Lanes Speed MTU FEC Alias Vlan Oper Admin Type Asym PFC ----------- ------------------------------- ------- ----- ----- ------- ------ ------ ------- ----------------------------------------------- ---------- Ethernet0 0 25G 9100 N/A etp1a routed up up QSFP28 or later N/A Ethernet1 1 25G 9100 N/A etp1b routed down up N/A N/A Ethernet2 2 25G 9100 N/A etp1c routed down up N/A N/A Ethernet3 3 25G 9100 N/A etp1d routed down up N/A N/A Signed-off-by: Vivek Reddy Karri --- .../x86_64-mlnx_msn4700-r0/platform.json | 98 ++++++++++++------- 1 file changed, 65 insertions(+), 33 deletions(-) diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/platform.json b/device/mellanox/x86_64-mlnx_msn4700-r0/platform.json index 58fd5d08c6e1..49211914ec54 100644 --- a/device/mellanox/x86_64-mlnx_msn4700-r0/platform.json +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/platform.json @@ -413,7 +413,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp1"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp1a", "etp1b"], - "4x100G[50G,25G,10G,1G]": ["etp1a", "etp1b", "etp1c", "etp1d"] + "4x100G[50G,25G,10G,1G]": ["etp1a", "etp1b", "etp1c", "etp1d"], + "4x25G(4)[10G,1G]": ["etp1a", "etp1b", "etp1c", "etp1d"] } }, "Ethernet8": { @@ -422,7 +423,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp2"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp2a", "etp2b"], - "4x100G[50G,25G,10G,1G]": ["etp2a", "etp2b", "etp2c", "etp2d"] + "4x100G[50G,25G,10G,1G]": ["etp2a", "etp2b", "etp2c", "etp2d"], + "4x25G(4)[10G,1G]": ["etp2a", "etp2b", "etp2c", "etp2d"] } }, "Ethernet16": { @@ -431,7 +433,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp3"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp3a", "etp3b"], - "4x100G[50G,25G,10G,1G]": ["etp3a", "etp3b", "etp3c", "etp3d"] + "4x100G[50G,25G,10G,1G]": ["etp3a", "etp3b", "etp3c", "etp3d"], + "4x25G(4)[10G,1G]": ["etp3a", "etp3b", "etp3c", "etp3d"] } }, "Ethernet24": { @@ -440,7 +443,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp4"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp4a", "etp4b"], - "4x100G[50G,25G,10G,1G]": ["etp4a", "etp4b", "etp4c", "etp4d"] + "4x100G[50G,25G,10G,1G]": ["etp4a", "etp4b", "etp4c", "etp4d"], + "4x25G(4)[10G,1G]": ["etp4a", "etp4b", "etp4c", "etp4d"] } }, "Ethernet32": { @@ -449,7 +453,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp5"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp5a", "etp5b"], - "4x100G[50G,25G,10G,1G]": ["etp5a", "etp5b", "etp5c", "etp5d"] + "4x100G[50G,25G,10G,1G]": ["etp5a", "etp5b", "etp5c", "etp5d"], + "4x25G(4)[10G,1G]": ["etp5a", "etp5b", "etp5c", "etp5d"] } }, "Ethernet40": { @@ -458,7 +463,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp6"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp6a", "etp6b"], - "4x100G[50G,25G,10G,1G]": ["etp6a", "etp6b", "etp6c", "etp6d"] + "4x100G[50G,25G,10G,1G]": ["etp6a", "etp6b", "etp6c", "etp6d"], + "4x25G(4)[10G,1G]": ["etp6a", "etp6b", "etp6c", "etp6d"] } }, "Ethernet48": { @@ -467,7 +473,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp7"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp7a", "etp7b"], - "4x100G[50G,25G,10G,1G]": ["etp7a", "etp7b", "etp7c", "etp7d"] + "4x100G[50G,25G,10G,1G]": ["etp7a", "etp7b", "etp7c", "etp7d"], + "4x25G(4)[10G,1G]": ["etp7a", "etp7b", "etp7c", "etp7d"] } }, "Ethernet56": { @@ -476,7 +483,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp8"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp8a", "etp8b"], - "4x100G[50G,25G,10G,1G]": ["etp8a", "etp8b", "etp8c", "etp8d"] + "4x100G[50G,25G,10G,1G]": ["etp8a", "etp8b", "etp8c", "etp8d"], + "4x25G(4)[10G,1G]": ["etp8a", "etp8b", "etp8c", "etp8d"] } }, "Ethernet64": { @@ -485,7 +493,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp9"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp9a", "etp9b"], - "4x100G[50G,25G,10G,1G]": ["etp9a", "etp9b", "etp9c", "etp9d"] + "4x100G[50G,25G,10G,1G]": ["etp9a", "etp9b", "etp9c", "etp9d"], + "4x25G(4)[10G,1G]": ["etp9a", "etp9b", "etp9c", "etp9d"] } }, "Ethernet72": { @@ -494,16 +503,18 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp10"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp10a", "etp10b"], - "4x100G[50G,25G,10G,1G]": ["etp10a", "etp10b", "etp10c", "etp10d"] + "4x100G[50G,25G,10G,1G]": ["etp10a", "etp10b", "etp10c", "etp10d"], + "4x25G(4)[10G,1G]": ["etp10a", "etp10b", "etp10c", "etp10d"] } - }, + }, "Ethernet80": { "index": "11,11,11,11,11,11,11,11", "lanes": "80,81,82,83,84,85,86,87", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp11"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp11a", "etp11b"], - "4x100G[50G,25G,10G,1G]": ["etp11a", "etp11b", "etp11c", "etp11d"] + "4x100G[50G,25G,10G,1G]": ["etp11a", "etp11b", "etp11c", "etp11d"], + "4x25G(4)[10G,1G]": ["etp11a", "etp11b", "etp11c", "etp11d"] } }, "Ethernet88": { @@ -512,7 +523,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp12"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp12a", "etp12b"], - "4x100G[50G,25G,10G,1G]": ["etp12a", "etp12b", "etp12c", "etp12d"] + "4x100G[50G,25G,10G,1G]": ["etp12a", "etp12b", "etp12c", "etp12d"], + "4x25G(4)[10G,1G]": ["etp12a", "etp12b", "etp12c", "etp12d"] } }, "Ethernet96": { @@ -521,7 +533,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp13"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp13a", "etp13b"], - "4x100G[50G,25G,10G,1G]": ["etp13a", "etp13b", "etp13c", "etp13d"] + "4x100G[50G,25G,10G,1G]": ["etp13a", "etp13b", "etp13c", "etp13d"], + "4x25G(4)[10G,1G]": ["etp13a", "etp13b", "etp13c", "etp13d"] } }, "Ethernet104": { @@ -530,7 +543,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp14"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp14a", "etp14b"], - "4x100G[50G,25G,10G,1G]": ["etp14a", "etp14b", "etp14c", "etp14d"] + "4x100G[50G,25G,10G,1G]": ["etp14a", "etp14b", "etp14c", "etp14d"], + "4x25G(4)[10G,1G]": ["etp14a", "etp14b", "etp14c", "etp14d"] } }, "Ethernet112": { @@ -539,7 +553,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp15"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp15a", "etp15b"], - "4x100G[50G,25G,10G,1G]": ["etp15a", "etp15b", "etp15c", "etp15d"] + "4x100G[50G,25G,10G,1G]": ["etp15a", "etp15b", "etp15c", "etp15d"], + "4x25G(4)[10G,1G]": ["etp15a", "etp15b", "etp15c", "etp15d"] } }, "Ethernet120": { @@ -548,7 +563,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp16"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp16a", "etp16b"], - "4x100G[50G,25G,10G,1G]": ["etp16a", "etp16b", "etp16c", "etp16d"] + "4x100G[50G,25G,10G,1G]": ["etp16a", "etp16b", "etp16c", "etp16d"], + "4x25G(4)[10G,1G]": ["etp16a", "etp16b", "etp16c", "etp16d"] } }, "Ethernet128": { @@ -557,7 +573,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp17"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp17a", "etp17b"], - "4x100G[50G,25G,10G,1G]": ["etp17a", "etp17b", "etp17c", "etp17d"] + "4x100G[50G,25G,10G,1G]": ["etp17a", "etp17b", "etp17c", "etp17d"], + "4x25G(4)[10G,1G]": ["etp17a", "etp17b", "etp17c", "etp17d"] } }, "Ethernet136": { @@ -566,7 +583,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp18"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp18a", "etp18b"], - "4x100G[50G,25G,10G,1G]": ["etp18a", "etp18b", "etp18c", "etp18d"] + "4x100G[50G,25G,10G,1G]": ["etp18a", "etp18b", "etp18c", "etp18d"], + "4x25G(4)[10G,1G]": ["etp18a", "etp18b", "etp18c", "etp18d"] } }, "Ethernet144": { @@ -575,7 +593,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp19"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp19a", "etp19b"], - "4x100G[50G,25G,10G,1G]": ["etp19a", "etp19b", "etp19c", "etp19d"] + "4x100G[50G,25G,10G,1G]": ["etp19a", "etp19b", "etp19c", "etp19d"], + "4x25G(4)[10G,1G]": ["etp19a", "etp19b", "etp19c", "etp19d"] } }, "Ethernet152": { @@ -584,7 +603,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp20"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp20a", "etp20b"], - "4x100G[50G,25G,10G,1G]": ["etp20a", "etp20b", "etp20c", "etp20d"] + "4x100G[50G,25G,10G,1G]": ["etp20a", "etp20b", "etp20c", "etp20d"], + "4x25G(4)[10G,1G]": ["etp20a", "etp20b", "etp20c", "etp20d"] } }, "Ethernet160": { @@ -593,7 +613,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp21"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp21a", "etp21b"], - "4x100G[50G,25G,10G,1G]": ["etp21a", "etp21b", "etp21c", "etp21d"] + "4x100G[50G,25G,10G,1G]": ["etp21a", "etp21b", "etp21c", "etp21d"], + "4x25G(4)[10G,1G]": ["etp21a", "etp21b", "etp21c", "etp21d"] } }, "Ethernet168": { @@ -602,7 +623,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp22"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp22a", "etp22b"], - "4x100G[50G,25G,10G,1G]": ["etp22a", "etp22b", "etp22c", "etp22d"] + "4x100G[50G,25G,10G,1G]": ["etp22a", "etp22b", "etp22c", "etp22d"], + "4x25G(4)[10G,1G]": ["etp22a", "etp22b", "etp22c", "etp22d"] } }, "Ethernet176": { @@ -611,7 +633,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp23"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp23a", "etp23b"], - "4x100G[50G,25G,10G,1G]": ["etp23a", "etp23b", "etp23c", "etp23d"] + "4x100G[50G,25G,10G,1G]": ["etp23a", "etp23b", "etp23c", "etp23d"], + "4x25G(4)[10G,1G]": ["etp23a", "etp23b", "etp23c", "etp23d"] } }, "Ethernet184": { @@ -620,7 +643,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp24"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp24a", "etp24b"], - "4x100G[50G,25G,10G,1G]": ["etp24a", "etp24b", "etp24c", "etp24d"] + "4x100G[50G,25G,10G,1G]": ["etp24a", "etp24b", "etp24c", "etp24d"], + "4x25G(4)[10G,1G]": ["etp24a", "etp24b", "etp24c", "etp24d"] } }, "Ethernet192": { @@ -629,7 +653,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp25"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp25a", "etp25b"], - "4x100G[50G,25G,10G,1G]": ["etp25a", "etp25b", "etp25c", "etp25d"] + "4x100G[50G,25G,10G,1G]": ["etp25a", "etp25b", "etp25c", "etp25d"], + "4x25G(4)[10G,1G]": ["etp25a", "etp25b", "etp25c", "etp25d"] } }, "Ethernet200": { @@ -638,7 +663,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp26"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp26a", "etp26b"], - "4x100G[50G,25G,10G,1G]": ["etp26a", "etp26b", "etp26c", "etp26d"] + "4x100G[50G,25G,10G,1G]": ["etp26a", "etp26b", "etp26c", "etp26d"], + "4x25G(4)[10G,1G]": ["etp26a", "etp26b", "etp26c", "etp26d"] } }, "Ethernet208": { @@ -647,7 +673,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp27"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp27a", "etp27b"], - "4x100G[50G,25G,10G,1G]": ["etp27a", "etp27b", "etp27c", "etp27d"] + "4x100G[50G,25G,10G,1G]": ["etp27a", "etp27b", "etp27c", "etp27d"], + "4x25G(4)[10G,1G]": ["etp27a", "etp27b", "etp27c", "etp27d"] } }, "Ethernet216": { @@ -656,7 +683,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp28"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp28a", "etp28b"], - "4x100G[50G,25G,10G,1G]": ["etp28a", "etp28b", "etp28c", "etp28d"] + "4x100G[50G,25G,10G,1G]": ["etp28a", "etp28b", "etp28c", "etp28d"], + "4x25G(4)[10G,1G]": ["etp28a", "etp28b", "etp28c", "etp28d"] } }, "Ethernet224": { @@ -665,7 +693,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp29"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp29a", "etp29b"], - "4x100G[50G,25G,10G,1G]": ["etp29a", "etp29b", "etp29c", "etp29d"] + "4x100G[50G,25G,10G,1G]": ["etp29a", "etp29b", "etp29c", "etp29d"], + "4x25G(4)[10G,1G]": ["etp29a", "etp29b", "etp29c", "etp29d"] } }, "Ethernet232": { @@ -674,7 +703,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp30"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp30a", "etp30b"], - "4x100G[50G,25G,10G,1G]": ["etp30a", "etp30b", "etp30c", "etp30d"] + "4x100G[50G,25G,10G,1G]": ["etp30a", "etp30b", "etp30c", "etp30d"], + "4x25G(4)[10G,1G]": ["etp30a", "etp30b", "etp30c", "etp30d"] } }, "Ethernet240": { @@ -683,7 +713,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp31"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp31a", "etp31b"], - "4x100G[50G,25G,10G,1G]": ["etp31a", "etp31b", "etp31c", "etp31d"] + "4x100G[50G,25G,10G,1G]": ["etp31a", "etp31b", "etp31c", "etp31d"], + "4x25G(4)[10G,1G]": ["etp31a", "etp31b", "etp31c", "etp31d"] } }, "Ethernet248": { @@ -692,7 +723,8 @@ "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp32"], "2x200G[100G,50G,40G,25G,10G,1G]": ["etp32a", "etp32b"], - "4x100G[50G,25G,10G,1G]": ["etp32a", "etp32b", "etp32c", "etp32d"] + "4x100G[50G,25G,10G,1G]": ["etp32a", "etp32b", "etp32c", "etp32d"], + "4x25G(4)[10G,1G]": ["etp32a", "etp32b", "etp32c", "etp32d"] } } } From 2eb6c3d03ced5f87e76bc623d585c6024c4fe4fd Mon Sep 17 00:00:00 2001 From: vmittal-msft <46945843+vmittal-msft@users.noreply.github.com> Date: Mon, 22 Aug 2022 16:24:51 -0700 Subject: [PATCH 228/259] PFCWD fix for multi port multi priority scenario for HWSKU Dell Z9332 (#11640) PFCWD fix for multi port multi priority scenario for HWSKU Dell Z9332 --- .../th3-z9332f-16x400G-64x100G.config.bcm | 4 ++++ .../DellEMC-Z9332f-O32/th3-z9332f-32x400G.config.bcm | 4 ++++ src/sonic-device-data/tests/permitted_list | 2 ++ 3 files changed, 10 insertions(+) diff --git a/device/dell/x86_64-dellemc_z9332f_d1508-r0/DellEMC-Z9332f-M-O16C64/th3-z9332f-16x400G-64x100G.config.bcm b/device/dell/x86_64-dellemc_z9332f_d1508-r0/DellEMC-Z9332f-M-O16C64/th3-z9332f-16x400G-64x100G.config.bcm index 1433de4d3b6c..cef161ded3cb 100644 --- a/device/dell/x86_64-dellemc_z9332f_d1508-r0/DellEMC-Z9332f-M-O16C64/th3-z9332f-16x400G-64x100G.config.bcm +++ b/device/dell/x86_64-dellemc_z9332f_d1508-r0/DellEMC-Z9332f-M-O16C64/th3-z9332f-16x400G-64x100G.config.bcm @@ -53,6 +53,10 @@ l2xlrn_intr_en=0 sai_optimized_mmu=1 mmu_init_config="TH3-MSFT-T0" +hybrid_pfc_deadlock_enable=1 +pfc_deadlock_seq_control=1 +sai_pfc_dlr_init_capability=1 + pbmp_xport_xe=0xffffffFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE phy_an_c73=3 diff --git a/device/dell/x86_64-dellemc_z9332f_d1508-r0/DellEMC-Z9332f-O32/th3-z9332f-32x400G.config.bcm b/device/dell/x86_64-dellemc_z9332f_d1508-r0/DellEMC-Z9332f-O32/th3-z9332f-32x400G.config.bcm index a46ac765bb66..59d767df3104 100644 --- a/device/dell/x86_64-dellemc_z9332f_d1508-r0/DellEMC-Z9332f-O32/th3-z9332f-32x400G.config.bcm +++ b/device/dell/x86_64-dellemc_z9332f_d1508-r0/DellEMC-Z9332f-O32/th3-z9332f-32x400G.config.bcm @@ -53,6 +53,10 @@ l2xlrn_intr_en=0 sai_optimized_mmu=1 mmu_init_config="TH3-MSFT-T1" +hybrid_pfc_deadlock_enable=1 +pfc_deadlock_seq_control=1 +sai_pfc_dlr_init_capability=1 + pbmp_xport_xe=0xffffffFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE phy_an_c73=3 diff --git a/src/sonic-device-data/tests/permitted_list b/src/sonic-device-data/tests/permitted_list index a753dca8d083..3ceff4511fdc 100644 --- a/src/sonic-device-data/tests/permitted_list +++ b/src/sonic-device-data/tests/permitted_list @@ -319,3 +319,5 @@ xflow_macsec_secure_chan_to_num_secure_assoc_encrypt xflow_macsec_secure_chan_to_num_secure_assoc_decrypt system_ref_core_clock_khz cmic_dma_abort_in_cold_boot +hybrid_pfc_deadlock_enable +sai_pfc_dlr_init_capability From c60d78dd1fb1a1160240caae06dcbaa0c6bbf97f Mon Sep 17 00:00:00 2001 From: Stepan Blyshchak <38952541+stepanblyschak@users.noreply.github.com> Date: Mon, 15 Aug 2022 23:35:34 +0300 Subject: [PATCH 229/259] [syncd.sh] 'sxdkernel start' => 'sxdkernel restart' (#11718) Change `sxdkernel start` to `sxdkernel restart`. If `syncd` service crashes in `ExecStartPre` systemd will not call `ExecStop` and thus will not call `sxdkernel stop`. Use of `sxdkernel restart` is more robust in terms of guarantees to restore the system after unexpected crashes. Signed-off-by: Stepan Blyschak Signed-off-by: Stepan Blyschak --- files/scripts/syncd.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/scripts/syncd.sh b/files/scripts/syncd.sh index 10535a8ff448..812cf30e4001 100755 --- a/files/scripts/syncd.sh +++ b/files/scripts/syncd.sh @@ -24,7 +24,7 @@ function startplatform() { debug "Starting Firmware update procedure" /usr/bin/mst start --with_i2cdev /usr/bin/mlnx-fw-upgrade.sh - /etc/init.d/sxdkernel start + /etc/init.d/sxdkernel restart debug "Firmware update procedure ended" fi From 322f14136af6f68995812976dd74aab75d41bd3a Mon Sep 17 00:00:00 2001 From: Junhua Zhai Date: Tue, 23 Aug 2022 04:34:04 +0000 Subject: [PATCH 230/259] [BRCM SAI 7.1.7.2] catch up CS00012257483 patch (#11768) Why I did it It solves a swss orchagent crash issue on PikeZ device, due to link-training setting of external PHY port. How I did it Catch up the fix for CS00012257483 in version 7.1.7.2. --- platform/broadcom/sai.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/broadcom/sai.mk b/platform/broadcom/sai.mk index 8d78a89a97a5..6de969a662bc 100644 --- a/platform/broadcom/sai.mk +++ b/platform/broadcom/sai.mk @@ -1,5 +1,5 @@ -LIBSAIBCM_XGS_VERSION = 7.1.7.1 -LIBSAIBCM_DNX_VERSION = 7.1.7.1 +LIBSAIBCM_XGS_VERSION = 7.1.7.2 +LIBSAIBCM_DNX_VERSION = 7.1.7.2 LIBSAIBCM_BRANCH_NAME = REL_7.0 LIBSAIBCM_XGS_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/$(LIBSAIBCM_BRANCH_NAME)/$(LIBSAIBCM_XGS_VERSION)" LIBSAIBCM_DNX_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/$(LIBSAIBCM_BRANCH_NAME)/$(LIBSAIBCM_DNX_VERSION)" From df36ef0e4b9f9555c20a26202e7976474bb73057 Mon Sep 17 00:00:00 2001 From: Hasan Naqvi <56742004+hasan-brcm@users.noreply.github.com> Date: Sun, 21 Aug 2022 17:04:47 -0700 Subject: [PATCH 231/259] Bullseye frr (#11777) Why I did it Migrate FRR to bullseye How I did it Makefile and docker config changes to refer to bullseye instead of buster. How to verify it Build bullseye frr docker. Co-authored-by: Rajendra Dendukuri --- dockers/docker-fpm-frr/Dockerfile.j2 | 3 +-- rules/docker-fpm-frr.mk | 10 +++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/dockers/docker-fpm-frr/Dockerfile.j2 b/dockers/docker-fpm-frr/Dockerfile.j2 index f885180c37d4..ad665e71ceae 100644 --- a/dockers/docker-fpm-frr/Dockerfile.j2 +++ b/dockers/docker-fpm-frr/Dockerfile.j2 @@ -1,5 +1,5 @@ {% from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %} -FROM docker-swss-layer-buster-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} +FROM docker-swss-layer-bullseye-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} ARG docker_container_name ARG frr_user_uid @@ -16,7 +16,6 @@ RUN apt-get update && \ apt-get install -y \ libc-ares2 \ iproute2 \ - libjson-c3 \ logrotate \ libunwind8 diff --git a/rules/docker-fpm-frr.mk b/rules/docker-fpm-frr.mk index ff594288419c..861e1d8e8b41 100644 --- a/rules/docker-fpm-frr.mk +++ b/rules/docker-fpm-frr.mk @@ -8,13 +8,13 @@ $(DOCKER_FPM_FRR)_PATH = $(DOCKERS_PATH)/$(DOCKER_FPM_FRR_STEM) $(DOCKER_FPM_FRR)_PYTHON_WHEELS += $(SONIC_BGPCFGD) $(SONIC_FRR_MGMT_FRAMEWORK) $(DOCKER_FPM_FRR)_DEPENDS += $(FRR) $(FRR_SNMP) $(SWSS) $(LIBYANG2) -$(DOCKER_FPM_FRR)_DBG_DEPENDS = $($(DOCKER_SWSS_LAYER_BUSTER)_DBG_DEPENDS) +$(DOCKER_FPM_FRR)_DBG_DEPENDS = $($(DOCKER_SWSS_LAYER_BULLSEYE)_DBG_DEPENDS) $(DOCKER_FPM_FRR)_DBG_DEPENDS += $(SWSS_DBG) $(LIBSWSSCOMMON_DBG) \ $(FRR_DBG) $(FRR_SNMP_DBG) $(LIBYANG2_DBG) -$(DOCKER_FPM_FRR)_DBG_IMAGE_PACKAGES = $($(DOCKER_SWSS_LAYER_BUSTER)_DBG_IMAGE_PACKAGES) +$(DOCKER_FPM_FRR)_DBG_IMAGE_PACKAGES = $($(DOCKER_SWSS_LAYER_BULLSEYE)_DBG_IMAGE_PACKAGES) -$(DOCKER_FPM_FRR)_LOAD_DOCKERS += $(DOCKER_SWSS_LAYER_BUSTER) +$(DOCKER_FPM_FRR)_LOAD_DOCKERS += $(DOCKER_SWSS_LAYER_BULLSEYE) $(DOCKER_FPM_FRR)_VERSION = 1.0.0 $(DOCKER_FPM_FRR)_PACKAGE_NAME = fpm-frr @@ -40,5 +40,5 @@ $(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += TSB:/usr/bin/TSB $(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += TSC:/usr/bin/TSC $(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += TS:/usr/bin/TS -SONIC_BUSTER_DOCKERS += $(DOCKER_FPM_FRR) -SONIC_BUSTER_DBG_DOCKERS += $(DOCKER_FPM_FRR_DBG) +SONIC_BULLSEYE_DOCKERS += $(DOCKER_FPM_FRR) +SONIC_BULLSEYE_DBG_DOCKERS += $(DOCKER_FPM_FRR_DBG) From 3b04792887a1629e23ea257225a5b9a4d3770e2f Mon Sep 17 00:00:00 2001 From: SuvarnaMeenakshi <50386592+SuvarnaMeenakshi@users.noreply.github.com> Date: Thu, 25 Aug 2022 12:39:52 -0700 Subject: [PATCH 232/259] Add support to get fabric asic namespaces list. (#11793) Why I did it VoQ chassis supervisor will have Fabric asics and the sub_role for fabric asics will be "Fabric". The fabric asics namespaces are not being returned in get_all_namespaces() and is required in caclmgrd to add right cacl to allow internal docker traffic from fabric asic namespaces. test_cacl_application fails on VoQ chassis Supervisor with the error: Failed: Missing expected iptables rules: set(['-A INPUT -s 240.127.1.1/32 -d 240.127.1.1/32 -j ACCEPT', '-A INPUT -s 240.127.1.3/32 -d 240.127.1.1/32 -j ACCEPT', '-A INPUT -s 240.127.1.2/32 -d 240.127.1.1/32 -j ACCEPT']) How I did it Update get_all_namespaces to return fabric namespaces list. How to verify it Verified on VoQ chassis. --- src/sonic-py-common/sonic_py_common/multi_asic.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/sonic-py-common/sonic_py_common/multi_asic.py b/src/sonic-py-common/sonic_py_common/multi_asic.py index e08746be0367..b74dc6816ce4 100644 --- a/src/sonic-py-common/sonic_py_common/multi_asic.py +++ b/src/sonic-py-common/sonic_py_common/multi_asic.py @@ -13,6 +13,7 @@ ASIC_CONF_FILENAME = 'asic.conf' FRONTEND_ASIC_SUB_ROLE = 'FrontEnd' BACKEND_ASIC_SUB_ROLE = 'BackEnd' +FABRIC_ASIC_SUB_ROLE = 'Fabric' EXTERNAL_PORT = 'Ext' INTERNAL_PORT = 'Int' PORT_CHANNEL_CFG_DB_TABLE = 'PORTCHANNEL' @@ -208,6 +209,7 @@ def get_all_namespaces(): """ front_ns = [] back_ns = [] + fabric_ns = [] num_asics = get_num_asics() if is_multi_asic(): @@ -222,8 +224,10 @@ def get_all_namespaces(): front_ns.append(namespace) elif metadata['localhost']['sub_role'] == BACKEND_ASIC_SUB_ROLE: back_ns.append(namespace) + elif metadata['localhost']['sub_role'] == FABRIC_ASIC_SUB_ROLE: + fabric_ns.append(namespace) - return {'front_ns': front_ns, 'back_ns': back_ns} + return {'front_ns': front_ns, 'back_ns': back_ns, 'fabric_ns': fabric_ns} def get_namespace_list(namespace=None): From 1b89648c18e21439d7e2953e6f130606515b21fa Mon Sep 17 00:00:00 2001 From: abdosi <58047199+abdosi@users.noreply.github.com> Date: Fri, 26 Aug 2022 08:04:00 -0700 Subject: [PATCH 233/259] New API to support runtime metadata needed for Feature Table field jinja rendering. (#11795) Added new API to return runtime metadata dictionary as needed during Feature Table field rendering by hostcfgd. --- src/sonic-py-common/sonic_py_common/device_info.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/sonic-py-common/sonic_py_common/device_info.py b/src/sonic-py-common/sonic_py_common/device_info.py index f98fa2df1e2e..8bff16fdf0fa 100644 --- a/src/sonic-py-common/sonic_py_common/device_info.py +++ b/src/sonic-py-common/sonic_py_common/device_info.py @@ -433,7 +433,7 @@ def is_multi_npu(): def is_voq_chassis(): switch_type = get_platform_info().get('switch_type') - return True if switch_type and switch_type == 'voq' else False + return True if switch_type and (switch_type == 'voq' or switch_type == 'fabric') else False def is_packet_chassis(): @@ -460,6 +460,14 @@ def is_supervisor(): return True return False +def get_device_runtime_metadata(): + chassis_metadata = {} + if is_chassis(): + chassis_metadata = {'CHASSIS_METADATA': {'module_type' : 'supervisor' if is_supervisor() else 'linecard', + 'chassis_type': 'voq' if is_voq_chassis() else 'packet'}} + + port_metadata = {'ETHERNET_PORTS_PRESENT': True if get_path_to_port_config_file(hwsku=None, asic="0" if is_multi_npu() else None) else False} + return {'DEVICE_RUNTIME_METADATA': chassis_metadata | port_metadata } def get_npu_id_from_name(npu_name): if npu_name.startswith(NPU_NAME_PREFIX): From 9551ca20e7b14bc5dc99dfd3cf5f2ac04a6c3528 Mon Sep 17 00:00:00 2001 From: Saikrishna Arcot Date: Wed, 24 Aug 2022 11:42:15 -0700 Subject: [PATCH 234/259] Build the Broadcom DNX RPC container as part of the official build (#11829) With the Broadcom syncd containers getting upgraded to Bullseye, the DNX RPC container is no longer automatically built. Explicitly add a make command to build it. Signed-off-by: Saikrishna Arcot Signed-off-by: Saikrishna Arcot --- .azure-pipelines/azure-pipelines-build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.azure-pipelines/azure-pipelines-build.yml b/.azure-pipelines/azure-pipelines-build.yml index 73cf108df668..8125db1949ec 100644 --- a/.azure-pipelines/azure-pipelines-build.yml +++ b/.azure-pipelines/azure-pipelines-build.yml @@ -131,6 +131,9 @@ jobs: fi if [ $(docker_syncd_rpc_image) == yes ]; then make $BUILD_OPTIONS ENABLE_SYNCD_RPC=y target/docker-syncd-$(platform_rpc)-rpc.gz + if [ $(GROUP_NAME) == broadcom ]; then + make $BUILD_OPTIONS ENABLE_SYNCD_RPC=y target/docker-syncd-$(platform_rpc)-dnx-rpc.gz + fi fi if [ $(syncd_rpc_image) == yes ]; then make $BUILD_OPTIONS ENABLE_SYNCD_RPC=y target/sonic-$(GROUP_NAME).bin From b722d5f7de908712d893b847fda5be00965c8527 Mon Sep 17 00:00:00 2001 From: Junhua Zhai Date: Fri, 26 Aug 2022 14:00:45 +0000 Subject: [PATCH 235/259] Mount directory warmboot in docker gbsyncd (#11852) Why I did it The directory /var/warmboot as top directory for warmboot feature is also needed in docker gbsyncd. Some vendor SAI might save data under it. Without it, the SAI init/creation API failure has happened on PikeZ platform. How I did it Mount host directory /host/warmboot as /var/warmboot in docker gbsyncd, which is same as what it has done on docker syncd. --- platform/components/docker-gbsyncd-broncos.mk | 1 + platform/template/docker-gbsyncd-base.mk | 1 + 2 files changed, 2 insertions(+) diff --git a/platform/components/docker-gbsyncd-broncos.mk b/platform/components/docker-gbsyncd-broncos.mk index 6e280ee5a655..c0bd4cc6be3e 100644 --- a/platform/components/docker-gbsyncd-broncos.mk +++ b/platform/components/docker-gbsyncd-broncos.mk @@ -27,6 +27,7 @@ $(DOCKER_GBSYNCD_BRONCOS)_CONTAINER_NAME = gbsyncd $(DOCKER_GBSYNCD_BRONCOS)_RUN_OPT += --privileged -t $(DOCKER_GBSYNCD_BRONCOS)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf $(DOCKER_GBSYNCD_BRONCOS)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro +$(DOCKER_GBSYNCD_BRONCOS)_RUN_OPT += -v /host/warmboot:/var/warmboot SONIC_ONLINE_DEBS += $(LIBSAI_BRONCOS) diff --git a/platform/template/docker-gbsyncd-base.mk b/platform/template/docker-gbsyncd-base.mk index 712554405080..404b7513a980 100644 --- a/platform/template/docker-gbsyncd-base.mk +++ b/platform/template/docker-gbsyncd-base.mk @@ -27,3 +27,4 @@ $(DOCKER_GBSYNCD_BASE)_CONTAINER_NAME = gbsyncd $(DOCKER_GBSYNCD_BASE)_RUN_OPT += --privileged -t $(DOCKER_GBSYNCD_BASE)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf $(DOCKER_GBSYNCD_BASE)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro +$(DOCKER_GBSYNCD_BASE)_RUN_OPT += -v /host/warmboot:/var/warmboot From 76fde840865307d0aee5925a5ca08ec22bd70b31 Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Sun, 28 Aug 2022 19:27:00 -0700 Subject: [PATCH 236/259] [202205][linkmgrd][utilities][swss-common][sairedis][platform-common] advance submodule head (#11859) linkmgrd: * 9a993b2 2022-08-23 | [active-active] Remove unnecessary mux wait timeout logs (#122) (HEAD -> 202205) [Jing Zhang] utilities: * ec4b09f 2022-08-26 | Handle non-front-panel ports in is_rj45_port (#2327) (HEAD -> 202205, github/202205) [Stephen Sun] * 4adf897 2022-08-20 | Fix issue: port_type is referenced before initialized (#2323) [Stephen Sun] * 314bafd 2022-08-25 | [service_mgmt]: Fix fetch MULTI_INST_DEPENDENT bug in service_mgmt.sh.j2 (#2319) [Ze Gan] * e0166a0 2022-08-25 | portconfig option to configure Tx power and laser frequency of ZR transceiver module (#2197) (#2330) [Prince George] swss-common: * af80c12 2022-06-30 | [select] break the select loop if interrupt_on_signal flag is set (#624) (HEAD -> 202205, github/202205) [Stepan Blyshchak] sairedis: * a1796a5 2022-07-28 | Add support of mdio IPC server class using sai switch api and unix socket (#1080) (HEAD -> 202205) [Jiahua Wang] platform-common: * c1ee4b1 2022-08-20 | [CMIS] Catch Exception to avoid CMIS code crash (#299) (HEAD -> 202205) [Kebo Liu] * 638d225 2022-07-13 | Fix Cmis memmap field offset (#290) [Prince George] Signed-off-by: Ying Xie Signed-off-by: Ying Xie --- src/linkmgrd | 2 +- src/sonic-platform-common | 2 +- src/sonic-sairedis | 2 +- src/sonic-swss-common | 2 +- src/sonic-utilities | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/linkmgrd b/src/linkmgrd index e20e40205462..9a993b271bc7 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit e20e40205462b61afc772613d4541c52bfd610d2 +Subproject commit 9a993b271bc713b0decd49a6cae8c536ee944db8 diff --git a/src/sonic-platform-common b/src/sonic-platform-common index f223b3fe552b..c1ee4b1e2b00 160000 --- a/src/sonic-platform-common +++ b/src/sonic-platform-common @@ -1 +1 @@ -Subproject commit f223b3fe552b84477b5fdaa6d281257e0b24428b +Subproject commit c1ee4b1e2b007adc0f91b75a9cc847a66da01228 diff --git a/src/sonic-sairedis b/src/sonic-sairedis index 87d5a3ea3e87..a1796a53cc7a 160000 --- a/src/sonic-sairedis +++ b/src/sonic-sairedis @@ -1 +1 @@ -Subproject commit 87d5a3ea3e877f2e311f711bf418123814256fc6 +Subproject commit a1796a53cc7ad87fe715e49e70dc4cda6a838863 diff --git a/src/sonic-swss-common b/src/sonic-swss-common index 749cd6f6badc..af80c12955ef 160000 --- a/src/sonic-swss-common +++ b/src/sonic-swss-common @@ -1 +1 @@ -Subproject commit 749cd6f6badc0c41251c08d413b33481d6e9ac4c +Subproject commit af80c12955ef0aafcce816fd58783a4edf979266 diff --git a/src/sonic-utilities b/src/sonic-utilities index 4bacc1cb7824..ec4b09fc575c 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 4bacc1cb7824defd0f9c796244dc0ca80ce2a31c +Subproject commit ec4b09fc575c5f9e3119df572d48c6aba516c5d6 From e2cade3ca0fb0b3d7d3c8dd470f5196c72130c97 Mon Sep 17 00:00:00 2001 From: Samuel Angebault Date: Mon, 29 Aug 2022 17:01:10 +0200 Subject: [PATCH 237/259] [202205][Arista] Update platform submodules (#11854) Backport platform code for Arista products from master. This most notably improve: PikeZ platform support Chassis fixes and improvements --- platform/barefoot/sonic-platform-modules-arista | 2 +- platform/broadcom/sonic-platform-modules-arista | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/barefoot/sonic-platform-modules-arista b/platform/barefoot/sonic-platform-modules-arista index e4940f0937c1..b65a69a9e1c2 160000 --- a/platform/barefoot/sonic-platform-modules-arista +++ b/platform/barefoot/sonic-platform-modules-arista @@ -1 +1 @@ -Subproject commit e4940f0937c1425c5ba8248e524a5d753c223aca +Subproject commit b65a69a9e1c2c876ba5210ce8b2a1cc9b5c8b18f diff --git a/platform/broadcom/sonic-platform-modules-arista b/platform/broadcom/sonic-platform-modules-arista index e4940f0937c1..b65a69a9e1c2 160000 --- a/platform/broadcom/sonic-platform-modules-arista +++ b/platform/broadcom/sonic-platform-modules-arista @@ -1 +1 @@ -Subproject commit e4940f0937c1425c5ba8248e524a5d753c223aca +Subproject commit b65a69a9e1c2c876ba5210ce8b2a1cc9b5c8b18f From 4910298f7e8d1e328d8a32ebe92a2093d556cf60 Mon Sep 17 00:00:00 2001 From: Vivek Date: Mon, 29 Aug 2022 08:57:45 -0700 Subject: [PATCH 238/259] [202205] [sonic_py_common] Cache Static Information in device_info to speed up CLI response (#11866) * [sonic_py_common] Cache Static Information in device_info to speed up CLI response (#11696) - Why I did it Profiled the execution for the following cmd intfutil -c status - How I did it Cached the following information: 1. get_sonic_version_info() 2. get_platform_info() None of the API exposed to the user libraries (for eg: sonic-utilities) has been modified These methods involve reading text files or from redis. Thus, caching helped to improve the execution time - How to verify it Added UT's. Verified on the device Signed-off-by: Vivek Reddy Karri * Removed UT since libswsscommom dep is missing in <=202205 Signed-off-by: Vivek Reddy Signed-off-by: Vivek Reddy Karri Signed-off-by: Vivek Reddy --- .../sonic_py_common/device_info.py | 22 +++++-- src/sonic-py-common/tests/device_info_test.py | 58 +++++++++++++++++++ 2 files changed, 74 insertions(+), 6 deletions(-) diff --git a/src/sonic-py-common/sonic_py_common/device_info.py b/src/sonic-py-common/sonic_py_common/device_info.py index 8bff16fdf0fa..1ca725cf8996 100644 --- a/src/sonic-py-common/sonic_py_common/device_info.py +++ b/src/sonic-py-common/sonic_py_common/device_info.py @@ -40,6 +40,10 @@ CHASSIS_INFO_MODEL_FIELD = 'model' CHASSIS_INFO_REV_FIELD = 'revision' +# Cacheable Objects +sonic_ver_info = {} +hw_info_dict = {} + def get_localhost_info(field, config_db=None): try: # TODO: enforce caller to provide config_db explicitly and remove its default value @@ -334,14 +338,17 @@ def get_sonic_version_info(): if not os.path.isfile(SONIC_VERSION_YAML_PATH): return None - data = {} + global sonic_ver_info + if sonic_ver_info: + return sonic_ver_info + with open(SONIC_VERSION_YAML_PATH) as stream: if yaml.__version__ >= "5.1": - data = yaml.full_load(stream) + sonic_ver_info = yaml.full_load(stream) else: - data = yaml.load(stream) + sonic_ver_info = yaml.load(stream) - return data + return sonic_ver_info def get_sonic_version_file(): if not os.path.isfile(SONIC_VERSION_YAML_PATH): @@ -355,9 +362,12 @@ def get_platform_info(config_db=None): """ This function is used to get the HW info helper function """ - from .multi_asic import get_num_asics + global hw_info_dict - hw_info_dict = {} + if hw_info_dict: + return hw_info_dict + + from .multi_asic import get_num_asics version_info = get_sonic_version_info() diff --git a/src/sonic-py-common/tests/device_info_test.py b/src/sonic-py-common/tests/device_info_test.py index bb7af40ad970..73012445f557 100644 --- a/src/sonic-py-common/tests/device_info_test.py +++ b/src/sonic-py-common/tests/device_info_test.py @@ -52,6 +52,32 @@ 'onie_kernel_version': '4.10.11' } +SONIC_VERISON_YML = """\ +--- +build_version: 'test_branch.1-a8fbac59d' +debian_version: '11.4' +kernel_version: '5.10.0-12-2-amd64' +asic_type: mellanox +asic_subtype: 'mellanox' +commit_id: 'a8fbac59d' +branch: 'test_branch' +release: 'master' +libswsscommon: 1.0.0 +sonic_utilities: 1.2""" + +SONIC_VERISON_YML_RESULT = { + 'build_version': 'test_branch.1-a8fbac59d', + 'debian_version': '11.4', + 'kernel_version': '5.10.0-12-2-amd64', + 'asic_type': 'mellanox', + 'asic_subtype': 'mellanox', + 'commit_id': 'a8fbac59d', + 'branch': 'test_branch', + 'release': 'master', + 'libswsscommon': '1.0.0', + 'sonic_utilities': 1.2 +} + class TestDeviceInfo(object): @pytest.fixture(scope="class", autouse=True) def sanitize_environment(self): @@ -83,6 +109,38 @@ def test_get_chassis_info(self): "revision": SonicV2Connector.TEST_REV} assert result == truth + @mock.patch("os.path.isfile") + def test_get_sonic_version(self, mock_isfile): + mock_isfile.return_value = True + open_mocked = mock.mock_open(read_data=SONIC_VERISON_YML) + with mock.patch("{}.open".format(BUILTINS), open_mocked): + for _ in range(0,5): + assert device_info.get_sonic_version_info() == SONIC_VERISON_YML_RESULT + # Assert the file was read only once + open_mocked.assert_called_once_with(device_info.SONIC_VERSION_YAML_PATH) + + @mock.patch("sonic_py_common.device_info.get_platform_info") + def test_is_chassis(self, mock_platform_info): + mock_platform_info.return_value = {"switch_type": "npu"} + assert device_info.is_chassis() == False + assert device_info.is_voq_chassis() == False + assert device_info.is_packet_chassis() == False + + mock_platform_info.return_value = {"switch_type": "voq"} + assert device_info.is_voq_chassis() == True + assert device_info.is_packet_chassis() == False + assert device_info.is_chassis() == True + + mock_platform_info.return_value = {"switch_type": "chassis-packet"} + assert device_info.is_voq_chassis() == False + assert device_info.is_packet_chassis() == True + assert device_info.is_chassis() == True + + mock_platform_info.return_value = {} + assert device_info.is_voq_chassis() == False + assert device_info.is_packet_chassis() == False + assert device_info.is_chassis() == False + @classmethod def teardown_class(cls): print("TEARDOWN") From e069c520acd2fa97644f8f53a004c77c09b040c8 Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Tue, 30 Aug 2022 02:15:42 +0800 Subject: [PATCH 239/259] [Build] Increase the size of the installer image (#11869) #### Why I did it Fix the build failure caused by the installer image size too small. The installer image is only used during the build, not impact the final images. See https://dev.azure.com/mssonic/build/_build/results?buildId=139926&view=logs&j=cef3d8a9-152e-5193-620b-567dc18af272&t=359769c4-8b5e-5976-a793-85da132e0a6f ``` + fallocate -l 2048M ./sonic-installer.img + mkfs.vfat ./sonic-installer.img mkfs.fat 4.2 (2021-01-31) ++ mktemp -d + tmpdir=/tmp/tmp.TqdDSc00Cn + mount -o loop ./sonic-installer.img /tmp/tmp.TqdDSc00Cn + cp target/sonic-vs.bin /tmp/tmp.TqdDSc00Cn/onie-installer.bin cp: error writing '/tmp/tmp.TqdDSc00Cn/onie-installer.bin': No space left on device [ FAIL LOG END ] [ target/sonic-vs.img.gz ] ``` #### How I did it Increase the size from 2048M to 4096M. Why not increase to 16G like qcow2 image? The qcow2 supports the sparse disk, although a big disk size allocated, but it will not consume the real disk size. The falocate does not support the sparse disk. We do not want to allocate a very big disk, but no use at all. It will require more space to build. --- scripts/build_kvm_image.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build_kvm_image.sh b/scripts/build_kvm_image.sh index 6e5fd7dec742..44009ed013f4 100755 --- a/scripts/build_kvm_image.sh +++ b/scripts/build_kvm_image.sh @@ -36,7 +36,7 @@ create_disk() prepare_installer_disk() { - fallocate -l 2048M $INSTALLER_DISK + fallocate -l 4096M $INSTALLER_DISK mkfs.vfat $INSTALLER_DISK From a30daf0248410293f2d47e1b6f21858238ccbd9e Mon Sep 17 00:00:00 2001 From: "Richard.Yu" Date: Tue, 30 Aug 2022 09:59:53 +0800 Subject: [PATCH 240/259] [202205][SAIServer] support saiserver v2 in bullseye (#11870) * [SAIServer] support saiserver v2 in bullseye Support build saiserverv2 in bullseye Add dependencies for building saiserverv2 Upgrade libboost-atomic1.71 to libboost-atomic1.74 Test done: Local builded with NOSTRETCH=y NOJESSIE=y NOBUSTER=y SAITHRIFT_V2=y make target/docker-saiserverv2-brcm.gz * update libboost-atomic from 1.71 to 1.74 for bullseye --- platform/broadcom/docker-saiserver-brcm/Dockerfile.j2 | 2 +- platform/mellanox/docker-saiserver-mlnx/Dockerfile.j2 | 2 +- sonic-slave-bullseye/Dockerfile.j2 | 7 +++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/platform/broadcom/docker-saiserver-brcm/Dockerfile.j2 b/platform/broadcom/docker-saiserver-brcm/Dockerfile.j2 index 782320a4b39b..92914d7abbf8 100644 --- a/platform/broadcom/docker-saiserver-brcm/Dockerfile.j2 +++ b/platform/broadcom/docker-saiserver-brcm/Dockerfile.j2 @@ -11,7 +11,7 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update \ && apt-get -y install \ gdb \ - libboost-atomic1.71.0 + libboost-atomic1.74.0 COPY \ {% for deb in docker_saiserver_brcm_debs.split(' ') -%} diff --git a/platform/mellanox/docker-saiserver-mlnx/Dockerfile.j2 b/platform/mellanox/docker-saiserver-mlnx/Dockerfile.j2 index 20f966eb3e83..0f6745d580ab 100644 --- a/platform/mellanox/docker-saiserver-mlnx/Dockerfile.j2 +++ b/platform/mellanox/docker-saiserver-mlnx/Dockerfile.j2 @@ -27,7 +27,7 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update \ && apt-get -y install \ gdb \ - libboost-atomic1.71.0 + libboost-atomic1.74.0 COPY \ {% for deb in docker_saiserver_mlnx_debs.split(' ') -%} diff --git a/sonic-slave-bullseye/Dockerfile.j2 b/sonic-slave-bullseye/Dockerfile.j2 index edac99af113e..b55888da880a 100644 --- a/sonic-slave-bullseye/Dockerfile.j2 +++ b/sonic-slave-bullseye/Dockerfile.j2 @@ -117,6 +117,13 @@ RUN apt-get update && apt-get install -y \ libxml-simple-perl \ graphviz \ aspell \ +# For SAI meta rpc build - make rpc + libgetopt-long-descriptive-perl \ + libconst-fast-perl \ + libtemplate-perl \ + libnamespace-autoclean-perl \ + libmoose-perl \ + libmoosex-aliases-perl \ # For linux build bc \ fakeroot \ From 0adfd724e6cb9889ff74a3ee3aade76b6d4c9842 Mon Sep 17 00:00:00 2001 From: andywongarista <78833093+andywongarista@users.noreply.github.com> Date: Mon, 29 Aug 2022 21:39:26 -0700 Subject: [PATCH 241/259] [202205][Arista] Add initial support for 720DT-48S (#10656) (#11860) Added initial set of config files to allow for booting and partial traffic testing in SONiC on the 720DT-48S. How to verify it - Switch boots - show interfaces status shows links up on interfaces Ethernet24-51 - Traffic flows with no errors on interfaces Ethernet24-51 --- .../Arista-720DT-48S/hwsku.json | 208 ++++++ .../Arista-720DT-48S/port_config.ini | 53 ++ .../Arista-720DT-48S/sai.profile | 1 + .../x86_64-arista_720dt_48s/default_sku | 1 + .../x86_64-arista_720dt_48s/platform.json | 647 ++++++++++++++++++ .../x86_64-arista_720dt_48s/platform_asic | 1 + .../x86_64-arista_720dt_48s/platform_reboot | 1 + device/arista/x86_64-arista_720dt_48s/plugins | 1 + .../pmon_daemon_control.json | 1 + .../system_health_monitoring_config.json | 1 + .../td3x2-a720dt-48s-flex.config.bcm | 302 ++++++++ .../thermal_policy.json | 1 + files/Aboot/boot0.j2 | 12 + files/initramfs-tools/arista-convertfs.j2 | 2 +- 14 files changed, 1231 insertions(+), 1 deletion(-) create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/hwsku.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/port_config.ini create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/sai.profile create mode 100644 device/arista/x86_64-arista_720dt_48s/default_sku create mode 100644 device/arista/x86_64-arista_720dt_48s/platform.json create mode 100644 device/arista/x86_64-arista_720dt_48s/platform_asic create mode 120000 device/arista/x86_64-arista_720dt_48s/platform_reboot create mode 120000 device/arista/x86_64-arista_720dt_48s/plugins create mode 120000 device/arista/x86_64-arista_720dt_48s/pmon_daemon_control.json create mode 120000 device/arista/x86_64-arista_720dt_48s/system_health_monitoring_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/td3x2-a720dt-48s-flex.config.bcm create mode 120000 device/arista/x86_64-arista_720dt_48s/thermal_policy.json diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/hwsku.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/hwsku.json new file mode 100644 index 000000000000..e0dc3fc5e55c --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/hwsku.json @@ -0,0 +1,208 @@ +{ + "interfaces": { + "Ethernet0": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet1": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet2": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet3": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet4": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet5": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet6": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet7": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet8": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet9": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet10": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet11": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet12": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet13": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet14": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet15": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet16": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet17": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet18": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet19": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet20": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet21": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet22": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet23": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet24": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet25": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet26": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet27": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet28": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet29": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet30": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet31": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet32": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet33": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet34": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet35": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet36": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet37": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet38": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet39": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet40": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet41": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet42": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet43": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet44": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet45": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet46": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet47": { + "default_brkout_mode": "1x1G", + "port_type": "RJ45" + }, + "Ethernet48": { + "default_brkout_mode": "1x10G" + }, + "Ethernet49": { + "default_brkout_mode": "1x10G" + }, + "Ethernet50": { + "default_brkout_mode": "1x10G" + }, + "Ethernet51": { + "default_brkout_mode": "1x10G" + } + } +} \ No newline at end of file diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/port_config.ini b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/port_config.ini new file mode 100644 index 000000000000..938f5588c59e --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/port_config.ini @@ -0,0 +1,53 @@ +# name lanes alias index speed +Ethernet0 25 Ethernet1 1 1000 +Ethernet1 26 Ethernet2 2 1000 +Ethernet2 27 Ethernet3 3 1000 +Ethernet3 28 Ethernet4 4 1000 +Ethernet4 29 Ethernet5 5 1000 +Ethernet5 30 Ethernet6 6 1000 +Ethernet6 31 Ethernet7 7 1000 +Ethernet7 32 Ethernet8 8 1000 +Ethernet8 33 Ethernet9 9 1000 +Ethernet9 34 Ethernet10 10 1000 +Ethernet10 35 Ethernet11 11 1000 +Ethernet11 36 Ethernet12 12 1000 +Ethernet12 37 Ethernet13 13 1000 +Ethernet13 38 Ethernet14 14 1000 +Ethernet14 39 Ethernet15 15 1000 +Ethernet15 40 Ethernet16 16 1000 +Ethernet16 41 Ethernet17 17 1000 +Ethernet17 42 Ethernet18 18 1000 +Ethernet18 43 Ethernet19 19 1000 +Ethernet19 44 Ethernet20 20 1000 +Ethernet20 45 Ethernet21 21 1000 +Ethernet21 46 Ethernet22 22 1000 +Ethernet22 47 Ethernet23 23 1000 +Ethernet23 48 Ethernet24 24 1000 +Ethernet24 1 Ethernet25 25 1000 +Ethernet25 2 Ethernet26 26 1000 +Ethernet26 3 Ethernet27 27 1000 +Ethernet27 4 Ethernet28 28 1000 +Ethernet28 5 Ethernet29 29 1000 +Ethernet29 6 Ethernet30 30 1000 +Ethernet30 7 Ethernet31 31 1000 +Ethernet31 8 Ethernet32 32 1000 +Ethernet32 9 Ethernet33 33 1000 +Ethernet33 10 Ethernet34 34 1000 +Ethernet34 11 Ethernet35 35 1000 +Ethernet35 12 Ethernet36 36 1000 +Ethernet36 13 Ethernet37 37 1000 +Ethernet37 14 Ethernet38 38 1000 +Ethernet38 15 Ethernet39 39 1000 +Ethernet39 16 Ethernet40 40 1000 +Ethernet40 17 Ethernet41 41 1000 +Ethernet41 18 Ethernet42 42 1000 +Ethernet42 19 Ethernet43 43 1000 +Ethernet43 20 Ethernet44 44 1000 +Ethernet44 21 Ethernet45 45 1000 +Ethernet45 22 Ethernet46 46 1000 +Ethernet46 23 Ethernet47 47 1000 +Ethernet47 24 Ethernet48 48 1000 +Ethernet48 61 Ethernet49 49 10000 +Ethernet49 62 Ethernet50 50 10000 +Ethernet50 63 Ethernet51 51 10000 +Ethernet51 64 Ethernet52 52 10000 diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/sai.profile b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/sai.profile new file mode 100644 index 000000000000..6a6d4789cef7 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/sai.profile @@ -0,0 +1 @@ +SAI_INIT_CONFIG_FILE=/usr/share/sonic/platform/td3x2-a720dt-48s-flex.config.bcm diff --git a/device/arista/x86_64-arista_720dt_48s/default_sku b/device/arista/x86_64-arista_720dt_48s/default_sku new file mode 100644 index 000000000000..dc550de2463c --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/default_sku @@ -0,0 +1 @@ +Arista-720DT-48S t1 diff --git a/device/arista/x86_64-arista_720dt_48s/platform.json b/device/arista/x86_64-arista_720dt_48s/platform.json new file mode 100644 index 000000000000..add21ae911bc --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/platform.json @@ -0,0 +1,647 @@ +{ + "chassis": { + "name": "CCS-720DT-48S", + "components": [], + "fans": [], + "fan_drawers": [], + "psus": [ + { + "name": "psu1", + "fans": [] + }, + { + "name": "psu2", + "fans": [] + } + ], + "thermals": [], + "sfps": [ + { + "name": "ethernet1" + }, + { + "name": "ethernet2" + }, + { + "name": "ethernet3" + }, + { + "name": "ethernet4" + }, + { + "name": "ethernet5" + }, + { + "name": "ethernet6" + }, + { + "name": "ethernet7" + }, + { + "name": "ethernet8" + }, + { + "name": "ethernet9" + }, + { + "name": "ethernet10" + }, + { + "name": "ethernet11" + }, + { + "name": "ethernet12" + }, + { + "name": "ethernet13" + }, + { + "name": "ethernet14" + }, + { + "name": "ethernet15" + }, + { + "name": "ethernet16" + }, + { + "name": "ethernet17" + }, + { + "name": "ethernet18" + }, + { + "name": "ethernet19" + }, + { + "name": "ethernet20" + }, + { + "name": "ethernet21" + }, + { + "name": "ethernet22" + }, + { + "name": "ethernet23" + }, + { + "name": "ethernet24" + }, + { + "name": "ethernet25" + }, + { + "name": "ethernet26" + }, + { + "name": "ethernet27" + }, + { + "name": "ethernet28" + }, + { + "name": "ethernet29" + }, + { + "name": "ethernet30" + }, + { + "name": "ethernet31" + }, + { + "name": "ethernet32" + }, + { + "name": "ethernet33" + }, + { + "name": "ethernet34" + }, + { + "name": "ethernet35" + }, + { + "name": "ethernet36" + }, + { + "name": "ethernet37" + }, + { + "name": "ethernet38" + }, + { + "name": "ethernet39" + }, + { + "name": "ethernet40" + }, + { + "name": "ethernet41" + }, + { + "name": "ethernet42" + }, + { + "name": "ethernet43" + }, + { + "name": "ethernet44" + }, + { + "name": "ethernet45" + }, + { + "name": "ethernet46" + }, + { + "name": "ethernet47" + }, + { + "name": "ethernet48" + }, + { + "name": "sfp49" + }, + { + "name": "sfp50" + }, + { + "name": "sfp51" + }, + { + "name": "sfp52" + } + ] + }, + "interfaces": { + "Ethernet0": { + "index": "1", + "lanes": "25", + "breakout_modes": { + "1x1G": [ + "Ethernet1" + ] + } + }, + "Ethernet1": { + "index": "2", + "lanes": "26", + "breakout_modes": { + "1x1G": [ + "Ethernet2" + ] + } + }, + "Ethernet2": { + "index": "3", + "lanes": "27", + "breakout_modes": { + "1x1G": [ + "Ethernet3" + ] + } + }, + "Ethernet3": { + "index": "4", + "lanes": "28", + "breakout_modes": { + "1x1G": [ + "Ethernet4" + ] + } + }, + "Ethernet4": { + "index": "5", + "lanes": "29", + "breakout_modes": { + "1x1G": [ + "Ethernet5" + ] + } + }, + "Ethernet5": { + "index": "6", + "lanes": "30", + "breakout_modes": { + "1x1G": [ + "Ethernet6" + ] + } + }, + "Ethernet6": { + "index": "7", + "lanes": "31", + "breakout_modes": { + "1x1G": [ + "Ethernet7" + ] + } + }, + "Ethernet7": { + "index": "8", + "lanes": "32", + "breakout_modes": { + "1x1G": [ + "Ethernet8" + ] + } + }, + "Ethernet8": { + "index": "9", + "lanes": "33", + "breakout_modes": { + "1x1G": [ + "Ethernet9" + ] + } + }, + "Ethernet9": { + "index": "10", + "lanes": "34", + "breakout_modes": { + "1x1G": [ + "Ethernet10" + ] + } + }, + "Ethernet10": { + "index": "11", + "lanes": "35", + "breakout_modes": { + "1x1G": [ + "Ethernet11" + ] + } + }, + "Ethernet11": { + "index": "12", + "lanes": "36", + "breakout_modes": { + "1x1G": [ + "Ethernet12" + ] + } + }, + "Ethernet12": { + "index": "13", + "lanes": "37", + "breakout_modes": { + "1x1G": [ + "Ethernet13" + ] + } + }, + "Ethernet13": { + "index": "14", + "lanes": "38", + "breakout_modes": { + "1x1G": [ + "Ethernet14" + ] + } + }, + "Ethernet14": { + "index": "15", + "lanes": "39", + "breakout_modes": { + "1x1G": [ + "Ethernet15" + ] + } + }, + "Ethernet15": { + "index": "16", + "lanes": "40", + "breakout_modes": { + "1x1G": [ + "Ethernet16" + ] + } + }, + "Ethernet16": { + "index": "17", + "lanes": "41", + "breakout_modes": { + "1x1G": [ + "Ethernet17" + ] + } + }, + "Ethernet17": { + "index": "18", + "lanes": "42", + "breakout_modes": { + "1x1G": [ + "Ethernet18" + ] + } + }, + "Ethernet18": { + "index": "19", + "lanes": "43", + "breakout_modes": { + "1x1G": [ + "Ethernet19" + ] + } + }, + "Ethernet19": { + "index": "20", + "lanes": "44", + "breakout_modes": { + "1x1G": [ + "Ethernet20" + ] + } + }, + "Ethernet20": { + "index": "21", + "lanes": "45", + "breakout_modes": { + "1x1G": [ + "Ethernet21" + ] + } + }, + "Ethernet21": { + "index": "22", + "lanes": "46", + "breakout_modes": { + "1x1G": [ + "Ethernet22" + ] + } + }, + "Ethernet22": { + "index": "23", + "lanes": "47", + "breakout_modes": { + "1x1G": [ + "Ethernet23" + ] + } + }, + "Ethernet23": { + "index": "24", + "lanes": "48", + "breakout_modes": { + "1x1G": [ + "Ethernet24" + ] + } + }, + "Ethernet24": { + "index": "25", + "lanes": "1", + "breakout_modes": { + "1x1G": [ + "Ethernet25" + ] + } + }, + "Ethernet25": { + "index": "26", + "lanes": "2", + "breakout_modes": { + "1x1G": [ + "Ethernet26" + ] + } + }, + "Ethernet26": { + "index": "27", + "lanes": "3", + "breakout_modes": { + "1x1G": [ + "Ethernet27" + ] + } + }, + "Ethernet27": { + "index": "28", + "lanes": "4", + "breakout_modes": { + "1x1G": [ + "Ethernet28" + ] + } + }, + "Ethernet28": { + "index": "29", + "lanes": "5", + "breakout_modes": { + "1x1G": [ + "Ethernet29" + ] + } + }, + "Ethernet29": { + "index": "30", + "lanes": "6", + "breakout_modes": { + "1x1G": [ + "Ethernet30" + ] + } + }, + "Ethernet30": { + "index": "31", + "lanes": "7", + "breakout_modes": { + "1x1G": [ + "Ethernet31" + ] + } + }, + "Ethernet31": { + "index": "32", + "lanes": "8", + "breakout_modes": { + "1x1G": [ + "Ethernet32" + ] + } + }, + "Ethernet32": { + "index": "33", + "lanes": "9", + "breakout_modes": { + "1x1G": [ + "Ethernet33" + ] + } + }, + "Ethernet33": { + "index": "34", + "lanes": "10", + "breakout_modes": { + "1x1G": [ + "Ethernet34" + ] + } + }, + "Ethernet34": { + "index": "35", + "lanes": "11", + "breakout_modes": { + "1x1G": [ + "Ethernet35" + ] + } + }, + "Ethernet35": { + "index": "36", + "lanes": "12", + "breakout_modes": { + "1x1G": [ + "Ethernet36" + ] + } + }, + "Ethernet36": { + "index": "37", + "lanes": "13", + "breakout_modes": { + "1x1G": [ + "Ethernet37" + ] + } + }, + "Ethernet37": { + "index": "38", + "lanes": "14", + "breakout_modes": { + "1x1G": [ + "Ethernet38" + ] + } + }, + "Ethernet38": { + "index": "39", + "lanes": "15", + "breakout_modes": { + "1x1G": [ + "Ethernet39" + ] + } + }, + "Ethernet39": { + "index": "40", + "lanes": "16", + "breakout_modes": { + "1x1G": [ + "Ethernet40" + ] + } + }, + "Ethernet40": { + "index": "41", + "lanes": "17", + "breakout_modes": { + "1x1G": [ + "Ethernet41" + ] + } + }, + "Ethernet41": { + "index": "42", + "lanes": "18", + "breakout_modes": { + "1x1G": [ + "Ethernet42" + ] + } + }, + "Ethernet42": { + "index": "43", + "lanes": "19", + "breakout_modes": { + "1x1G": [ + "Ethernet43" + ] + } + }, + "Ethernet43": { + "index": "44", + "lanes": "20", + "breakout_modes": { + "1x1G": [ + "Ethernet44" + ] + } + }, + "Ethernet44": { + "index": "45", + "lanes": "21", + "breakout_modes": { + "1x1G": [ + "Ethernet45" + ] + } + }, + "Ethernet45": { + "index": "46", + "lanes": "22", + "breakout_modes": { + "1x1G": [ + "Ethernet46" + ] + } + }, + "Ethernet46": { + "index": "47", + "lanes": "23", + "breakout_modes": { + "1x1G": [ + "Ethernet47" + ] + } + }, + "Ethernet47": { + "index": "48", + "lanes": "24", + "breakout_modes": { + "1x1G": [ + "Ethernet48" + ] + } + }, + "Ethernet48": { + "index": "49", + "lanes": "61", + "breakout_modes": { + "1x10G": [ + "Ethernet49" + ] + } + }, + "Ethernet49": { + "index": "50", + "lanes": "62", + "breakout_modes": { + "1x10G": [ + "Ethernet50" + ] + } + }, + "Ethernet50": { + "index": "51", + "lanes": "63", + "breakout_modes": { + "1x10G": [ + "Ethernet51" + ] + } + }, + "Ethernet51": { + "index": "52", + "lanes": "64", + "breakout_modes": { + "1x10G": [ + "Ethernet52" + ] + } + } + } +} diff --git a/device/arista/x86_64-arista_720dt_48s/platform_asic b/device/arista/x86_64-arista_720dt_48s/platform_asic new file mode 100644 index 000000000000..960467652765 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/platform_asic @@ -0,0 +1 @@ +broadcom diff --git a/device/arista/x86_64-arista_720dt_48s/platform_reboot b/device/arista/x86_64-arista_720dt_48s/platform_reboot new file mode 120000 index 000000000000..7f94a49e38b0 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/platform_reboot @@ -0,0 +1 @@ +../x86_64-arista_common/platform_reboot \ No newline at end of file diff --git a/device/arista/x86_64-arista_720dt_48s/plugins b/device/arista/x86_64-arista_720dt_48s/plugins new file mode 120000 index 000000000000..789a45fcace9 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/plugins @@ -0,0 +1 @@ +../x86_64-arista_common/plugins \ No newline at end of file diff --git a/device/arista/x86_64-arista_720dt_48s/pmon_daemon_control.json b/device/arista/x86_64-arista_720dt_48s/pmon_daemon_control.json new file mode 120000 index 000000000000..51d5ab7b0059 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/pmon_daemon_control.json @@ -0,0 +1 @@ +../x86_64-arista_common/pmon_daemon_control.json \ No newline at end of file diff --git a/device/arista/x86_64-arista_720dt_48s/system_health_monitoring_config.json b/device/arista/x86_64-arista_720dt_48s/system_health_monitoring_config.json new file mode 120000 index 000000000000..1185f771fa8e --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/system_health_monitoring_config.json @@ -0,0 +1 @@ +../x86_64-arista_common/system_health_monitoring_config.json \ No newline at end of file diff --git a/device/arista/x86_64-arista_720dt_48s/td3x2-a720dt-48s-flex.config.bcm b/device/arista/x86_64-arista_720dt_48s/td3x2-a720dt-48s-flex.config.bcm new file mode 100644 index 000000000000..7469c6dbca21 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/td3x2-a720dt-48s-flex.config.bcm @@ -0,0 +1,302 @@ +PHY_AN_ALLOW_PLL_CHANGE=1 +arl_clean_timeout_usec=15000000 +asf_mem_profile.0=0 +bcm_num_cos.0=9 +bcm_stat_flags=1 +bcm_stat_jumbo.0=9236 +cdma_timeout_usec.0=15000000 +disable_pcie_firmware_check.0=1 +dma_desc_timeout_usec.0=15000000 +fpem_mem_entries.0=0 +higig2_hdr_mode.0=1 +ifp_inports_support_enable.0=1 +l2xmsg_mode.0=1 +l2_mem_entries.0=65536 +l3_mem_entries.0=32768 +max_vp_lags.0=0 +mem_scan_enable.0=1 +miim_intr_enable.0=0 +module_64ports.0=1 +multicast_l2_range.0=4095 +multicast_l3_range.0=0 +os=unix +oversubscribe_mode=2 +pbmp_xport_xe.0=0x1e1fffffffffffe +phy_an_c37_53.0=2 +phy_an_c37_54.0=2 +phy_an_c37_55.0=2 +phy_an_c37_56.0=2 +phy_an_c73_1.0=1 +phy_an_c73_10.0=1 +phy_an_c73_11.0=1 +phy_an_c73_12.0=1 +phy_an_c73_13.0=1 +phy_an_c73_14.0=1 +phy_an_c73_15.0=1 +phy_an_c73_16.0=1 +phy_an_c73_17.0=1 +phy_an_c73_18.0=1 +phy_an_c73_19.0=1 +phy_an_c73_2.0=1 +phy_an_c73_20.0=1 +phy_an_c73_21.0=1 +phy_an_c73_22.0=1 +phy_an_c73_23.0=1 +phy_an_c73_24.0=1 +phy_an_c73_3.0=1 +phy_an_c73_4.0=1 +phy_an_c73_5.0=1 +phy_an_c73_53.0=0 +phy_an_c73_54.0=0 +phy_an_c73_55.0=0 +phy_an_c73_56.0=0 +phy_an_c73_6.0=1 +phy_an_c73_7.0=1 +phy_an_c73_8.0=1 +phy_an_c73_9.0=1 +phy_chain_rx_lane_map_physical{1.0}=0x3210 +phy_chain_rx_lane_map_physical{5.0}=0x3210 +phy_chain_rx_lane_map_physical{9.0}=0x3210 +phy_chain_rx_lane_map_physical{13.0}=0x3210 +phy_chain_rx_lane_map_physical{17.0}=0x3210 +phy_chain_rx_lane_map_physical{21.0}=0x3210 +phy_chain_rx_lane_map_physical{25.0}=0x3210 +phy_chain_rx_lane_map_physical{41.0}=0x3120 +phy_chain_rx_lane_map_physical{61.0}=0x1032 +phy_chain_rx_polarity_flip_physical{1.0}=0x0 +phy_chain_rx_polarity_flip_physical{2.0}=0x0 +phy_chain_rx_polarity_flip_physical{3.0}=0x0 +phy_chain_rx_polarity_flip_physical{4.0}=0x0 +phy_chain_rx_polarity_flip_physical{5.0}=0x0 +phy_chain_rx_polarity_flip_physical{6.0}=0x0 +phy_chain_rx_polarity_flip_physical{7.0}=0x0 +phy_chain_rx_polarity_flip_physical{8.0}=0x0 +phy_chain_rx_polarity_flip_physical{9.0}=0x0 +phy_chain_rx_polarity_flip_physical{10.0}=0x0 +phy_chain_rx_polarity_flip_physical{11.0}=0x0 +phy_chain_rx_polarity_flip_physical{12.0}=0x0 +phy_chain_rx_polarity_flip_physical{13.0}=0x0 +phy_chain_rx_polarity_flip_physical{14.0}=0x0 +phy_chain_rx_polarity_flip_physical{15.0}=0x0 +phy_chain_rx_polarity_flip_physical{16.0}=0x0 +phy_chain_rx_polarity_flip_physical{17.0}=0x0 +phy_chain_rx_polarity_flip_physical{18.0}=0x0 +phy_chain_rx_polarity_flip_physical{19.0}=0x0 +phy_chain_rx_polarity_flip_physical{20.0}=0x0 +phy_chain_rx_polarity_flip_physical{21.0}=0x0 +phy_chain_rx_polarity_flip_physical{22.0}=0x0 +phy_chain_rx_polarity_flip_physical{23.0}=0x0 +phy_chain_rx_polarity_flip_physical{24.0}=0x0 +phy_chain_rx_polarity_flip_physical{25.0}=0x0 +phy_chain_rx_polarity_flip_physical{29.0}=0x0 +phy_chain_rx_polarity_flip_physical{33.0}=0x0 +phy_chain_rx_polarity_flip_physical{37.0}=0x0 +phy_chain_rx_polarity_flip_physical{41.0}=0x0 +phy_chain_rx_polarity_flip_physical{45.0}=0x0 +phy_chain_rx_polarity_flip_physical{61.0}=0x0 +phy_chain_rx_polarity_flip_physical{62.0}=0x0 +phy_chain_rx_polarity_flip_physical{63.0}=0x0 +phy_chain_rx_polarity_flip_physical{64.0}=0x0 +phy_chain_tx_lane_map_physical{1.0}=0x3210 +phy_chain_tx_lane_map_physical{5.0}=0x3210 +phy_chain_tx_lane_map_physical{9.0}=0x3210 +phy_chain_tx_lane_map_physical{13.0}=0x3210 +phy_chain_tx_lane_map_physical{17.0}=0x3210 +phy_chain_tx_lane_map_physical{21.0}=0x3210 +phy_chain_tx_lane_map_physical{25.0}=0x3210 +phy_chain_tx_lane_map_physical{41.0}=0x3120 +phy_chain_tx_lane_map_physical{61.0}=0x1032 +phy_chain_tx_polarity_flip_physical{1.0}=0x0 +phy_chain_tx_polarity_flip_physical{2.0}=0x0 +phy_chain_tx_polarity_flip_physical{3.0}=0x0 +phy_chain_tx_polarity_flip_physical{4.0}=0x0 +phy_chain_tx_polarity_flip_physical{5.0}=0x0 +phy_chain_tx_polarity_flip_physical{6.0}=0x0 +phy_chain_tx_polarity_flip_physical{7.0}=0x0 +phy_chain_tx_polarity_flip_physical{8.0}=0x0 +phy_chain_tx_polarity_flip_physical{9.0}=0x0 +phy_chain_tx_polarity_flip_physical{10.0}=0x0 +phy_chain_tx_polarity_flip_physical{11.0}=0x0 +phy_chain_tx_polarity_flip_physical{12.0}=0x0 +phy_chain_tx_polarity_flip_physical{13.0}=0x0 +phy_chain_tx_polarity_flip_physical{14.0}=0x0 +phy_chain_tx_polarity_flip_physical{15.0}=0x0 +phy_chain_tx_polarity_flip_physical{16.0}=0x0 +phy_chain_tx_polarity_flip_physical{17.0}=0x0 +phy_chain_tx_polarity_flip_physical{18.0}=0x0 +phy_chain_tx_polarity_flip_physical{19.0}=0x0 +phy_chain_tx_polarity_flip_physical{20.0}=0x0 +phy_chain_tx_polarity_flip_physical{21.0}=0x0 +phy_chain_tx_polarity_flip_physical{22.0}=0x0 +phy_chain_tx_polarity_flip_physical{23.0}=0x0 +phy_chain_tx_polarity_flip_physical{24.0}=0x0 +phy_chain_tx_polarity_flip_physical{25.0}=0x0 +phy_chain_tx_polarity_flip_physical{29.0}=0x0 +phy_chain_tx_polarity_flip_physical{33.0}=0x0 +phy_chain_tx_polarity_flip_physical{37.0}=0x0 +phy_chain_tx_polarity_flip_physical{41.0}=0x0 +phy_chain_tx_polarity_flip_physical{45.0}=0x0 +phy_chain_tx_polarity_flip_physical{61.0}=0x0 +phy_chain_tx_polarity_flip_physical{62.0}=0x0 +phy_chain_tx_polarity_flip_physical{63.0}=0x0 +phy_chain_tx_polarity_flip_physical{64.0}=0x0 +phy_port_primary_and_offset_25=0x0100 +phy_port_primary_and_offset_26=0x0101 +phy_port_primary_and_offset_27=0x0102 +phy_port_primary_and_offset_28=0x0103 +phy_port_primary_and_offset_29=0x0104 +phy_port_primary_and_offset_30=0x0105 +phy_port_primary_and_offset_31=0x0106 +phy_port_primary_and_offset_32=0x0107 +phy_port_primary_and_offset_33=0x0900 +phy_port_primary_and_offset_34=0x0901 +phy_port_primary_and_offset_35=0x0902 +phy_port_primary_and_offset_36=0x0903 +phy_port_primary_and_offset_37=0x0904 +phy_port_primary_and_offset_38=0x0905 +phy_port_primary_and_offset_39=0x0906 +phy_port_primary_and_offset_40=0x0907 +phy_port_primary_and_offset_41=0x1100 +phy_port_primary_and_offset_42=0x1101 +phy_port_primary_and_offset_43=0x1102 +phy_port_primary_and_offset_44=0x1103 +phy_port_primary_and_offset_45=0x1104 +phy_port_primary_and_offset_46=0x1105 +phy_port_primary_and_offset_47=0x1106 +phy_port_primary_and_offset_48=0x1107 +portmap_1.0=25:1 +portmap_2.0=26:1 +portmap_3.0=27:1 +portmap_4.0=28:1 +portmap_5.0=29:1 +portmap_6.0=30:1 +portmap_7.0=31:1 +portmap_8.0=32:1 +portmap_9.0=33:1 +portmap_10.0=34:1 +portmap_11.0=35:1 +portmap_12.0=36:1 +portmap_13.0=37:1 +portmap_14.0=38:1 +portmap_15.0=39:1 +portmap_16.0=40:1 +portmap_17.0=41:1 +portmap_18.0=42:1 +portmap_19.0=43:1 +portmap_20.0=44:1 +portmap_21.0=45:1 +portmap_22.0=46:1 +portmap_23.0=47:1 +portmap_24.0=48:1 +portmap_25.0=1:1 +portmap_26.0=2:1 +portmap_27.0=3:1 +portmap_28.0=4:1 +portmap_29.0=5:1 +portmap_30.0=6:1 +portmap_31.0=7:1 +portmap_32.0=8:1 +portmap_33.0=9:1 +portmap_34.0=10:1 +portmap_35.0=11:1 +portmap_36.0=12:1 +portmap_37.0=13:1 +portmap_38.0=14:1 +portmap_39.0=15:1 +portmap_40.0=16:1 +portmap_41.0=17:1 +portmap_42.0=18:1 +portmap_43.0=19:1 +portmap_44.0=20:1 +portmap_45.0=21:1 +portmap_46.0=22:1 +portmap_47.0=23:1 +portmap_48.0=24:1 +portmap_53.0=61:10 +portmap_54.0=62:10 +portmap_55.0=63:10 +portmap_56.0=64:10 +port_flex_enable.0=1 +port_gmii_mode{25}=1 +port_gmii_mode{41}=1 +port_init_autoneg_1.0=0 +port_init_autoneg_2.0=0 +port_init_autoneg_3.0=0 +port_init_autoneg_4.0=0 +port_init_autoneg_5.0=0 +port_init_autoneg_6.0=0 +port_init_autoneg_7.0=0 +port_init_autoneg_8.0=0 +port_init_autoneg_9.0=0 +port_init_autoneg_10.0=0 +port_init_autoneg_11.0=0 +port_init_autoneg_12.0=0 +port_init_autoneg_13.0=0 +port_init_autoneg_14.0=0 +port_init_autoneg_15.0=0 +port_init_autoneg_16.0=0 +port_init_autoneg_17.0=0 +port_init_autoneg_18.0=0 +port_init_autoneg_19.0=0 +port_init_autoneg_20.0=0 +port_init_autoneg_21.0=0 +port_init_autoneg_22.0=0 +port_init_autoneg_23.0=0 +port_init_autoneg_24.0=0 +port_init_autoneg_53.0=0 +port_init_autoneg_54.0=0 +port_init_autoneg_55.0=0 +port_init_autoneg_56.0=0 +port_phy_addr_1.0=0xff +port_phy_addr_2.0=0xff +port_phy_addr_3.0=0xff +port_phy_addr_4.0=0xff +port_phy_addr_5.0=0xff +port_phy_addr_6.0=0xff +port_phy_addr_7.0=0xff +port_phy_addr_8.0=0xff +port_phy_addr_9.0=0xff +port_phy_addr_10.0=0xff +port_phy_addr_11.0=0xff +port_phy_addr_12.0=0xff +port_phy_addr_13.0=0xff +port_phy_addr_14.0=0xff +port_phy_addr_15.0=0xff +port_phy_addr_16.0=0xff +port_phy_addr_17.0=0xff +port_phy_addr_18.0=0xff +port_phy_addr_19.0=0xff +port_phy_addr_20.0=0xff +port_phy_addr_21.0=0xff +port_phy_addr_22.0=0xff +port_phy_addr_23.0=0xff +port_phy_addr_24.0=0xff +port_phy_addr_53.0=0xff +port_phy_addr_54.0=0xff +port_phy_addr_55.0=0xff +port_phy_addr_56.0=0xff +robust_hash_disable_egress_vlan.0=1 +robust_hash_disable_mpls.0=1 +robust_hash_disable_vlan.0=1 +serdes_core_rx_polarity_flip_physical{1}=0x0 +serdes_core_rx_polarity_flip_physical{5}=0x0 +serdes_core_rx_polarity_flip_physical{9}=0x0 +serdes_core_rx_polarity_flip_physical{13}=0x0 +serdes_core_rx_polarity_flip_physical{17}=0x0 +serdes_core_rx_polarity_flip_physical{21}=0x0 +serdes_core_rx_polarity_flip_physical{25}=0x0 +serdes_core_rx_polarity_flip_physical{41}=0x0 +serdes_core_rx_polarity_flip_physical{61}=0x0 +serdes_core_tx_polarity_flip_physical{1}=0x0 +serdes_core_tx_polarity_flip_physical{5}=0x0 +serdes_core_tx_polarity_flip_physical{9}=0x0 +serdes_core_tx_polarity_flip_physical{13}=0x0 +serdes_core_tx_polarity_flip_physical{17}=0x0 +serdes_core_tx_polarity_flip_physical{21}=0x0 +serdes_core_tx_polarity_flip_physical{25}=0x0 +serdes_core_tx_polarity_flip_physical{41}=0x0 +serdes_core_tx_polarity_flip_physical{61}=0x0 +sram_scan_enable.0=0 +stable_size=0x5500000 +tdma_timeout_usec.0=15000000 +tslam_timeout_usec.0=15000000 diff --git a/device/arista/x86_64-arista_720dt_48s/thermal_policy.json b/device/arista/x86_64-arista_720dt_48s/thermal_policy.json new file mode 120000 index 000000000000..0991dc7f3638 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/thermal_policy.json @@ -0,0 +1 @@ +../x86_64-arista_common/thermal_policy.json \ No newline at end of file diff --git a/files/Aboot/boot0.j2 b/files/Aboot/boot0.j2 index e6dac1101fb3..48e29aaf33be 100644 --- a/files/Aboot/boot0.j2 +++ b/files/Aboot/boot0.j2 @@ -537,6 +537,15 @@ write_platform_specific_cmdline() { aboot_machine=arista_7060dx4_32 flash_size=28000 fi + if in_array "$sid" "PikeIslandZ" "PikeIslandZ-F" "PikeIslandZ-2F" "PikeIslandZ-R" "PikeIslandZ-2R"; then + aboot_machine=arista_720dt_48s + fi + if [ "$sid" = "BlackhawkT4O" ]; then + aboot_machine=arista_7050px4_32s + fi + if [ "$sid" = "BlackhawkT4DD" ]; then + aboot_machine=arista_7050dx4_32s + fi if [ "$sid" = "Smartsville" ]; then aboot_machine=arista_7280cr3_32p4 fi @@ -615,6 +624,9 @@ write_platform_specific_cmdline() { cmdline_add reassign_prefmem read_system_eeprom fi + if in_array "$platform" "prairieisland"; then + read_system_eeprom + fi if [ $flash_size -ge 28000 ]; then varlog_size=4096 diff --git a/files/initramfs-tools/arista-convertfs.j2 b/files/initramfs-tools/arista-convertfs.j2 index 9af44f221fe9..ff9922d9c4f9 100644 --- a/files/initramfs-tools/arista-convertfs.j2 +++ b/files/initramfs-tools/arista-convertfs.j2 @@ -31,7 +31,7 @@ wait_get_flash_dev() { if [ -n "$is_mmc" ]; then continue fi - local devid=$(realpath "/sys/block/$dev/device") + local devid="$(realpath "/sys/block/$dev/device")/" local is_device=$(echo "$devid" | grep '^/sys/devices/' | cat) local is_flash=$(echo "$devid" | grep "$block_flash" | cat) if [ -n "$is_device" -a -n "$is_flash" ]; then From d46d69f3d6a44c59da0d8dba42a40351ee39596a Mon Sep 17 00:00:00 2001 From: Liu Shilong Date: Wed, 31 Aug 2022 16:32:08 +0800 Subject: [PATCH 242/259] [actions] Update github actions label and automerge. (#11736) (#11910) 1. Add auto approve step when adding label to version upgrading PR. 2. Use mssonicbld TOKEN to merge version upgrading PR instead of 'github actions' --- .github/workflows/automerge.yml | 2 +- .github/workflows/label.yml | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/automerge.yml b/.github/workflows/automerge.yml index 502f5d8987d9..ee27244bfb1f 100644 --- a/.github/workflows/automerge.yml +++ b/.github/workflows/automerge.yml @@ -15,7 +15,7 @@ jobs: - name: automerge uses: 'pascalgn/automerge-action@v0.13.1' env: - GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}' + GITHUB_TOKEN: '${{ secrets.TOKEN }}' MERGE_LABELS: 'automerge' MERGE_METHOD: 'squash' MERGE_FILTER_AUTHOR: 'mssonicbld' diff --git a/.github/workflows/label.yml b/.github/workflows/label.yml index 5f8c0279b7e1..307cbd86f871 100644 --- a/.github/workflows/label.yml +++ b/.github/workflows/label.yml @@ -22,6 +22,13 @@ jobs: label: runs-on: ubuntu-latest steps: + - name: approve + run: | + set -e + echo ${{ secrets.GITHUB_TOKEN }} | gh auth login --with-token + url=$(echo $GITHUB_CONTEXT | jq -r '.event.pull_request._links.html.href') + echo PR: $url + gh pr review $url --approve - uses: actions/labeler@main with: repo-token: "${{ secrets.GITHUB_TOKEN }}" From 921b04097b6cbe48f8f4727ccfdab0bae72a6d3d Mon Sep 17 00:00:00 2001 From: "Richard.Yu" Date: Wed, 31 Aug 2022 18:04:37 +0800 Subject: [PATCH 243/259] [202205][sairedis]advance submodule head (#11861) update sai module with commit - 566d4a8ef2 2022-08-11 | [SAI-PTF] Enable saiserverv2 with syncd-rpc and fix saithriftv2 build (#1552) (#1533) (#1514) (#1492) (#1558) (#1557) [Richard.Yu] - a1796a53cc 2022-08-11 | Add support of mdio IPC server class using sai switch api and unix socket Signed-off-by: richardyu-ms Signed-off-by: richardyu-ms --- src/sonic-sairedis | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-sairedis b/src/sonic-sairedis index a1796a53cc7a..7172bb803911 160000 --- a/src/sonic-sairedis +++ b/src/sonic-sairedis @@ -1 +1 @@ -Subproject commit a1796a53cc7ad87fe715e49e70dc4cda6a838863 +Subproject commit 7172bb80391156a216e695a5fa2c9b49e5e9083a From 1885e565eb8bf5e1bf3ba797276559290d8f1246 Mon Sep 17 00:00:00 2001 From: andywongarista <78833093+andywongarista@users.noreply.github.com> Date: Wed, 31 Aug 2022 03:44:40 -0700 Subject: [PATCH 244/259] [Arista] Add missing configs for 720DT-48S (#11898) Backport of #11362 --- .../Arista-720DT-48S/context_config.json | 130 +++++ .../Arista-720DT-48S/gearbox_config.json | 486 ++++++++++++++++++ .../Arista-720DT-48S/phy0_config.json | 38 ++ .../Arista-720DT-48S/phy10_config.json | 38 ++ .../Arista-720DT-48S/phy11_config.json | 38 ++ .../Arista-720DT-48S/phy12_config.json | 38 ++ .../Arista-720DT-48S/phy13_config.json | 38 ++ .../Arista-720DT-48S/phy14_config.json | 38 ++ .../Arista-720DT-48S/phy15_config.json | 38 ++ .../Arista-720DT-48S/phy16_config.json | 38 ++ .../Arista-720DT-48S/phy18_config.json | 38 ++ .../Arista-720DT-48S/phy19_config.json | 38 ++ .../Arista-720DT-48S/phy1_config.json | 38 ++ .../Arista-720DT-48S/phy20_config.json | 38 ++ .../Arista-720DT-48S/phy21_config.json | 38 ++ .../Arista-720DT-48S/phy22_config.json | 38 ++ .../Arista-720DT-48S/phy23_config.json | 38 ++ .../Arista-720DT-48S/phy24_config.json | 38 ++ .../Arista-720DT-48S/phy25_config.json | 38 ++ .../Arista-720DT-48S/phy2_config.json | 38 ++ .../Arista-720DT-48S/phy3_config.json | 38 ++ .../Arista-720DT-48S/phy4_config.json | 38 ++ .../Arista-720DT-48S/phy5_config.json | 38 ++ .../Arista-720DT-48S/phy6_config.json | 38 ++ .../Arista-720DT-48S/phy7_config.json | 38 ++ .../Arista-720DT-48S/phy9_config.json | 38 ++ .../Arista-720DT-48S/pikez.bcm | 85 +++ .../Arista-720DT-48S/psai.profile | 1 + .../x86_64-arista_720dt_48s/gbsyncd.ini | 1 + .../arista/x86_64-arista_720dt_48s/pcie.yaml | 148 ++++++ .../x86_64-arista_720dt_48s/platform.json | 42 +- .../x86_64-arista_720dt_48s/sensors.conf | 18 + .../td3x2-a720dt-48s-flex.config.bcm | 48 +- 33 files changed, 1843 insertions(+), 28 deletions(-) create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/context_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/gearbox_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy0_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy10_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy11_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy12_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy13_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy14_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy15_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy16_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy18_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy19_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy1_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy20_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy21_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy22_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy23_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy24_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy25_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy2_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy3_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy4_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy5_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy6_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy7_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy9_config.json create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/pikez.bcm create mode 100644 device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/psai.profile create mode 100644 device/arista/x86_64-arista_720dt_48s/gbsyncd.ini create mode 100644 device/arista/x86_64-arista_720dt_48s/pcie.yaml create mode 100644 device/arista/x86_64-arista_720dt_48s/sensors.conf diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/context_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/context_config.json new file mode 100644 index 000000000000..5316220b01e0 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/context_config.json @@ -0,0 +1,130 @@ +{ + "CONTEXTS": [ + { + "guid" : 0, + "name" : "asic0", + "dbAsic" : "ASIC_DB", + "dbCounters" : "COUNTERS_DB", + "dbFlex": "FLEX_COUNTER_DB", + "dbState" : "STATE_DB", + "zmq_enable" : false, + "zmq_endpoint": "tcp://127.0.0.1:5555", + "zmq_ntf_endpoint": "tcp://127.0.0.1:5556", + "switches": [ + { + "index" : 0, + "hwinfo" : "" + } + ] + }, + { + "guid" : 1, + "name" : "phys", + "dbAsic" : "GB_ASIC_DB", + "dbCounters" : "GB_COUNTERS_DB", + "dbFlex": "GB_FLEX_COUNTER_DB", + "dbState" : "STATE_DB", + "zmq_enable" : false, + "zmq_endpoint": "tcp://127.0.0.1:5565", + "zmq_ntf_endpoint": "tcp://127.0.0.1:5566", + "switches": [ + { + "index" : 0, + "hwinfo" : "0" + }, + { + "index" : 1, + "hwinfo" : "1" + }, + { + "index" : 2, + "hwinfo" : "2" + }, + { + "index" : 3, + "hwinfo" : "3" + }, + { + "index" : 4, + "hwinfo" : "4" + }, + { + "index" : 5, + "hwinfo" : "5" + }, + { + "index" : 6, + "hwinfo" : "6" + }, + { + "index" : 7, + "hwinfo" : "7" + }, + { + "index" : 8, + "hwinfo" : "9" + }, + { + "index" : 9, + "hwinfo" : "10" + }, + { + "index" : 10, + "hwinfo" : "11" + }, + { + "index" : 11, + "hwinfo" : "12" + }, + { + "index" : 12, + "hwinfo" : "13" + }, + { + "index" : 13, + "hwinfo" : "14" + }, + { + "index" : 14, + "hwinfo" : "15" + }, + { + "index" : 15, + "hwinfo" : "16" + }, + { + "index" : 16, + "hwinfo" : "18" + }, + { + "index" : 17, + "hwinfo" : "19" + }, + { + "index" : 18, + "hwinfo" : "20" + }, + { + "index" : 19, + "hwinfo" : "21" + }, + { + "index" : 20, + "hwinfo" : "22" + }, + { + "index" : 21, + "hwinfo" : "23" + }, + { + "index" : 22, + "hwinfo" : "24" + }, + { + "index" : 23, + "hwinfo" : "25" + } + ] + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/gearbox_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/gearbox_config.json new file mode 100644 index 000000000000..3b3c2b4761b7 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/gearbox_config.json @@ -0,0 +1,486 @@ +{ + "phys": [ + { + "phy_id": 0, + "name": "phy0", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy0_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "0" + }, + { + "phy_id": 1, + "name": "phy1", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy1_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "1" + }, + { + "phy_id": 2, + "name": "phy2", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy2_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "2" + }, + { + "phy_id": 3, + "name": "phy3", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy3_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "3" + }, + { + "phy_id": 4, + "name": "phy4", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy4_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "4" + }, + { + "phy_id": 5, + "name": "phy5", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy5_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "5" + }, + { + "phy_id": 6, + "name": "phy6", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy6_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "6" + }, + { + "phy_id": 7, + "name": "phy7", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy7_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "7" + }, + { + "phy_id": 9, + "name": "phy9", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy9_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "9" + }, + { + "phy_id": 10, + "name": "phy10", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy10_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "10" + }, + { + "phy_id": 11, + "name": "phy11", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy11_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "11" + }, + { + "phy_id": 12, + "name": "phy12", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy12_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "12" + }, + { + "phy_id": 13, + "name": "phy13", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy13_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "13" + }, + { + "phy_id": 14, + "name": "phy14", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy14_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "14" + }, + { + "phy_id": 15, + "name": "phy15", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy15_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "15" + }, + { + "phy_id": 16, + "name": "phy16", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy16_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "16" + }, + { + "phy_id": 18, + "name": "phy18", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy18_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "18" + }, + { + "phy_id": 19, + "name": "phy19", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy19_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "19" + }, + { + "phy_id": 20, + "name": "phy20", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy20_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "20" + }, + { + "phy_id": 21, + "name": "phy21", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy21_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "21" + }, + { + "phy_id": 22, + "name": "phy22", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy22_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "22" + }, + { + "phy_id": 23, + "name": "phy23", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy23_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "23" + }, + { + "phy_id": 24, + "name": "phy24", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy24_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "24" + }, + { + "phy_id": 25, + "name": "phy25", + "address": "255", + "lib_name": "", + "firmware_path": "", + "config_file": "/usr/share/sonic/hwsku/phy25_config.json", + "sai_init_config_file": "", + "phy_access": "mdio", + "bus_id": 0, + "context_id": 1, + "hwinfo": "25" + } + ], + "interfaces": [ + { + "name": "Ethernet0", + "index": 1, + "phy_id": 0, + "system_lanes": [1], + "line_lanes": [0] + }, + { + "name": "Ethernet1", + "index": 2, + "phy_id": 1, + "system_lanes": [3], + "line_lanes": [2] + }, + { + "name": "Ethernet2", + "index": 3, + "phy_id": 2, + "system_lanes": [5], + "line_lanes": [4] + }, + { + "name": "Ethernet3", + "index": 4, + "phy_id": 3, + "system_lanes": [7], + "line_lanes": [6] + }, + { + "name": "Ethernet4", + "index": 5, + "phy_id": 4, + "system_lanes": [9], + "line_lanes": [8] + }, + { + "name": "Ethernet5", + "index": 6, + "phy_id": 5, + "system_lanes": [11], + "line_lanes": [10] + }, + { + "name": "Ethernet6", + "index": 7, + "phy_id": 6, + "system_lanes": [13], + "line_lanes": [12] + }, + { + "name": "Ethernet7", + "index": 8, + "phy_id": 7, + "system_lanes": [15], + "line_lanes": [14] + }, + { + "name": "Ethernet8", + "index": 9, + "phy_id": 9, + "system_lanes": [17], + "line_lanes": [16] + }, + { + "name": "Ethernet9", + "index": 10, + "phy_id": 10, + "system_lanes": [19], + "line_lanes": [18] + }, + { + "name": "Ethernet10", + "index": 11, + "phy_id": 11, + "system_lanes": [21], + "line_lanes": [20] + }, + { + "name": "Ethernet11", + "index": 12, + "phy_id": 12, + "system_lanes": [23], + "line_lanes": [22] + }, + { + "name": "Ethernet12", + "index": 13, + "phy_id": 13, + "system_lanes": [25], + "line_lanes": [24] + }, + { + "name": "Ethernet13", + "index": 14, + "phy_id": 14, + "system_lanes": [27], + "line_lanes": [26] + }, + { + "name": "Ethernet14", + "index": 15, + "phy_id": 15, + "system_lanes": [29], + "line_lanes": [28] + }, + { + "name": "Ethernet15", + "index": 16, + "phy_id": 16, + "system_lanes": [31], + "line_lanes": [30] + }, + { + "name": "Ethernet16", + "index": 17, + "phy_id": 18, + "system_lanes": [33], + "line_lanes": [32] + }, + { + "name": "Ethernet17", + "index": 18, + "phy_id": 19, + "system_lanes": [35], + "line_lanes": [34] + }, + { + "name": "Ethernet18", + "index": 19, + "phy_id": 20, + "system_lanes": [37], + "line_lanes": [36] + }, + { + "name": "Ethernet19", + "index": 20, + "phy_id": 21, + "system_lanes": [39], + "line_lanes": [38] + }, + { + "name": "Ethernet20", + "index": 21, + "phy_id": 22, + "system_lanes": [41], + "line_lanes": [40] + }, + { + "name": "Ethernet21", + "index": 22, + "phy_id": 23, + "system_lanes": [43], + "line_lanes": [42] + }, + { + "name": "Ethernet22", + "index": 23, + "phy_id": 24, + "system_lanes": [45], + "line_lanes": [44] + }, + { + "name": "Ethernet23", + "index": 24, + "phy_id": 25, + "system_lanes": [47], + "line_lanes": [46] + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy0_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy0_config.json new file mode 100644 index 000000000000..2b5b785d008f --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy0_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 1, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy10_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy10_config.json new file mode 100644 index 000000000000..7e2d6d25ad6a --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy10_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 10, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy11_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy11_config.json new file mode 100644 index 000000000000..31f7a5dd8e9b --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy11_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 11, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy12_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy12_config.json new file mode 100644 index 000000000000..4afd547b10d1 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy12_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 12, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy13_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy13_config.json new file mode 100644 index 000000000000..c5734b9d77ac --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy13_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 13, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy14_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy14_config.json new file mode 100644 index 000000000000..1f7c841984fa --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy14_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 14, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy15_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy15_config.json new file mode 100644 index 000000000000..0de2ef9b3095 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy15_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 200, + "local_lane_id": 0, + "system_side": true, + "tx_polarity": 0, + "rx_polarity": 0, + "line_tx_lanemap": 0, + "line_rx_lanemap": 0, + "line_to_system_lanemap": 0, + "mdio_addr": "0x00" + } + ], + "ports": [ + { + "index": 15, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy16_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy16_config.json new file mode 100644 index 000000000000..6b6dc2b03fdf --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy16_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 16, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy18_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy18_config.json new file mode 100644 index 000000000000..a11c2e5663ae --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy18_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 17, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy19_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy19_config.json new file mode 100644 index 000000000000..203365ff0e29 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy19_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 18, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy1_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy1_config.json new file mode 100644 index 000000000000..f697ad669a8e --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy1_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 2, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy20_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy20_config.json new file mode 100644 index 000000000000..94d38584a751 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy20_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 19, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy21_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy21_config.json new file mode 100644 index 000000000000..ed4dce3b4a28 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy21_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 20, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy22_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy22_config.json new file mode 100644 index 000000000000..6b21533a6531 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy22_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 21, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy23_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy23_config.json new file mode 100644 index 000000000000..2a781875b0b2 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy23_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 22, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy24_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy24_config.json new file mode 100644 index 000000000000..2a781875b0b2 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy24_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 22, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy25_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy25_config.json new file mode 100644 index 000000000000..9215ffcf4688 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy25_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 24, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy2_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy2_config.json new file mode 100644 index 000000000000..74e55878ea89 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy2_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 3, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy3_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy3_config.json new file mode 100644 index 000000000000..078398a4ff45 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy3_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 4, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy4_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy4_config.json new file mode 100644 index 000000000000..26b9f8f1bdaa --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy4_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 5, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy5_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy5_config.json new file mode 100644 index 000000000000..0681725b7c9e --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy5_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 6, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy6_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy6_config.json new file mode 100644 index 000000000000..0ece0526456d --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy6_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 7, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy7_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy7_config.json new file mode 100644 index 000000000000..4cc38410efe0 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy7_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 8, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy9_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy9_config.json new file mode 100644 index 000000000000..2ed59839a977 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy9_config.json @@ -0,0 +1,38 @@ +{ + "lanes": [ + { + "index": 255, + "local_lane_id": 255, + "system_side": true, + "tx_polarity": 255, + "rx_polarity": 255, + "line_tx_lanemap": 255, + "line_rx_lanemap": 255, + "line_to_system_lanemap": 255, + "mdio_addr": "" + } + ], + "ports": [ + { + "index": 9, + "mdio_addr": "", + "system_speed": 1000, + "system_fec": "none", + "system_auto_neg": false, + "system_loopback": "none", + "system_training": false, + "line_speed": 1000, + "line_fec": "none", + "line_auto_neg": false, + "line_loopback": "none", + "line_training": false, + "line_media_type": "copper", + "line_intf_type": "none", + "line_adver_speed": [], + "line_adver_fec": [], + "line_adver_auto_neg": false, + "line_adver_asym_pause": false, + "line_adver_media_type": "copper" + } + ] +} diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/pikez.bcm b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/pikez.bcm new file mode 100644 index 000000000000..7e97462c4c78 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/pikez.bcm @@ -0,0 +1,85 @@ +### PHY CONFIGURATION FILE +### Please refer to config_file_format.txt in the top level folder for configuration file format + +### PHY CONFIGURATIONS +phy_init_config_chip_id:0 = 54182 +phy_init_config_chip_id:1 = 54182 +phy_init_config_chip_id:2 = 54182 +phy_init_config_chip_id:3 = 54182 +phy_init_config_chip_id:4 = 54182 +phy_init_config_chip_id:5 = 54182 +phy_init_config_chip_id:6 = 54182 +phy_init_config_chip_id:7 = 54182 +phy_init_config_chip_id:9 = 54182 +phy_init_config_chip_id:10 = 54182 +phy_init_config_chip_id:11 = 54182 +phy_init_config_chip_id:12 = 54182 +phy_init_config_chip_id:13 = 54182 +phy_init_config_chip_id:14 = 54182 +phy_init_config_chip_id:15 = 54182 +phy_init_config_chip_id:16 = 54182 +phy_init_config_chip_id:18 = 54182 +phy_init_config_chip_id:19 = 54182 +phy_init_config_chip_id:20 = 54182 +phy_init_config_chip_id:21 = 54182 +phy_init_config_chip_id:22 = 54182 +phy_init_config_chip_id:23 = 54182 +phy_init_config_chip_id:24 = 54182 +phy_init_config_chip_id:25 = 54182 + +### LANE CONFIGURATIONS +# Line side lanes +phy_lane_property:0 = 0, 0, 0, 0, 0, 0, 0 +phy_lane_property:2 = 1, 0, 1, 0, 0, 0, 0 +phy_lane_property:4 = 2, 0, 2, 0, 0, 0, 0 +phy_lane_property:6 = 3, 0, 3, 0, 0, 0, 0 +phy_lane_property:8 = 4, 0, 4, 0, 0, 0, 0 +phy_lane_property:10 = 5, 0, 5, 0, 0, 0, 0 +phy_lane_property:12 = 6, 0, 6, 0, 0, 0, 0 +phy_lane_property:14 = 7, 0, 7, 0, 0, 0, 0 + +phy_lane_property:16 = 9, 0, 0, 0, 0, 0, 0 +phy_lane_property:18 = 10, 0, 1, 0, 0, 0, 0 +phy_lane_property:20 = 11, 0, 2, 0, 0, 0, 0 +phy_lane_property:22 = 12, 0, 3, 0, 0, 0, 0 +phy_lane_property:24 = 13, 0, 4, 0, 0, 0, 0 +phy_lane_property:26 = 14, 0, 5, 0, 0, 0, 0 +phy_lane_property:28 = 15, 0, 6, 0, 0, 0, 0 +phy_lane_property:30 = 16, 0, 7, 0, 0, 0, 0 + +phy_lane_property:32 = 18, 0, 0, 0, 0, 0, 0 +phy_lane_property:34 = 19, 0, 1, 0, 0, 0, 0 +phy_lane_property:36 = 20, 0, 2, 0, 0, 0, 0 +phy_lane_property:38 = 21, 0, 3, 0, 0, 0, 0 +phy_lane_property:40 = 22, 0, 4, 0, 0, 0, 0 +phy_lane_property:42 = 23, 0, 5, 0, 0, 0, 0 +phy_lane_property:44 = 24, 0, 6, 0, 0, 0, 0 +phy_lane_property:46 = 25, 0, 7, 0, 0, 0, 0 + +# System side lanes +phy_lane_property:1 = 0, 1, 0, 0, 0, 0, 0 +phy_lane_property:3 = 1, 1, 1, 0, 0, 0, 0 +phy_lane_property:5 = 2, 1, 2, 0, 0, 0, 0 +phy_lane_property:7 = 3, 1, 3, 0, 0, 0, 0 +phy_lane_property:9 = 4, 1, 4, 0, 0, 0, 0 +phy_lane_property:11 = 5, 1, 5, 0, 0, 0, 0 +phy_lane_property:13 = 6, 1, 6, 0, 0, 0, 0 +phy_lane_property:15 = 7, 1, 7, 0, 0, 0, 0 + +phy_lane_property:17 = 9, 1, 0, 0, 0, 0, 0 +phy_lane_property:19 = 10, 1, 1, 0, 0, 0, 0 +phy_lane_property:21 = 11, 1, 2, 0, 0, 0, 0 +phy_lane_property:23 = 12, 1, 3, 0, 0, 0, 0 +phy_lane_property:25 = 13, 1, 4, 0, 0, 0, 0 +phy_lane_property:27 = 14, 1, 5, 0, 0, 0, 0 +phy_lane_property:29 = 15, 1, 6, 0, 0, 0, 0 +phy_lane_property:31 = 16, 1, 7, 0, 0, 0, 0 + +phy_lane_property:33 = 18, 1, 0, 0, 0, 0, 0 +phy_lane_property:35 = 19, 1, 1, 0, 0, 0, 0 +phy_lane_property:37 = 20, 1, 2, 0, 0, 0, 0 +phy_lane_property:39 = 21, 1, 3, 0, 0, 0, 0 +phy_lane_property:41 = 22, 1, 4, 0, 0, 0, 0 +phy_lane_property:43 = 23, 1, 5, 0, 0, 0, 0 +phy_lane_property:45 = 24, 1, 6, 0, 0, 0, 0 +phy_lane_property:47 = 25, 1, 7, 0, 0, 0, 0 diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/psai.profile b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/psai.profile new file mode 100644 index 000000000000..b6f9a712c833 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/psai.profile @@ -0,0 +1 @@ +SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/pikez.bcm diff --git a/device/arista/x86_64-arista_720dt_48s/gbsyncd.ini b/device/arista/x86_64-arista_720dt_48s/gbsyncd.ini new file mode 100644 index 000000000000..c3fc11f91114 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/gbsyncd.ini @@ -0,0 +1 @@ +platform=gbsyncd-broncos diff --git a/device/arista/x86_64-arista_720dt_48s/pcie.yaml b/device/arista/x86_64-arista_720dt_48s/pcie.yaml new file mode 100644 index 000000000000..bda6ac688c7a --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/pcie.yaml @@ -0,0 +1,148 @@ +- bus: '00' + dev: '00' + fn: '0' + id: 15d0 + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Root Complex' +- bus: '00' + dev: '00' + fn: '2' + id: 15d1 + name: 'IOMMU: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 IOMMU' +- bus: '00' + dev: '01' + fn: '0' + id: '1452' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) + PCIe Dummy Host Bridge' +- bus: '00' + dev: '01' + fn: '1' + id: 15d3 + name: 'PCI bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 PCIe GPP Bridge + [6:0]' +- bus: '00' + dev: 08 + fn: '0' + id: '1452' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) + PCIe Dummy Host Bridge' +- bus: '00' + dev: 08 + fn: '1' + id: 15db + name: 'PCI bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Internal PCIe + GPP Bridge 0 to Bus A' +- bus: '00' + dev: 08 + fn: '2' + id: 15dc + name: 'PCI bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Internal PCIe + GPP Bridge 0 to Bus B' +- bus: '00' + dev: '14' + fn: '0' + id: 790b + name: 'SMBus: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller (rev 61)' +- bus: '00' + dev: '14' + fn: '3' + id: 790e + name: 'ISA bridge: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge (rev 51)' +- bus: '00' + dev: '18' + fn: '0' + id: 15e8 + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Device 24: Function + 0' +- bus: '00' + dev: '18' + fn: '1' + id: 15e9 + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Device 24: Function + 1' +- bus: '00' + dev: '18' + fn: '2' + id: 15ea + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Device 24: Function + 2' +- bus: '00' + dev: '18' + fn: '3' + id: 15eb + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Device 24: Function + 3' +- bus: '00' + dev: '18' + fn: '4' + id: 15ec + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Device 24: Function + 4' +- bus: '00' + dev: '18' + fn: '5' + id: 15ed + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Device 24: Function + 5' +- bus: '00' + dev: '18' + fn: '6' + id: 15ee + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Device 24: Function + 6' +- bus: '00' + dev: '18' + fn: '7' + id: '0001' + name: 'Host bridge: Arista Networks, Inc. Device 0001' +- bus: '01' + dev: '00' + fn: '0' + id: b274 + name: 'Ethernet controller: Broadcom Inc. and subsidiaries Device b274 (rev 02)' +- bus: '02' + dev: '00' + fn: '0' + id: 145a + name: 'Non-Essential Instrumentation [1300]: Advanced Micro Devices, Inc. [AMD] + Zeppelin/Raven/Raven2 PCIe Dummy Function' +- bus: '02' + dev: '00' + fn: '2' + id: 15df + name: 'Encryption controller: Advanced Micro Devices, Inc. [AMD] Family 17h (Models + 10h-1fh) Platform Security Processor' +- bus: '02' + dev: '00' + fn: '3' + id: 15e5 + name: 'USB controller: Advanced Micro Devices, Inc. [AMD] Raven2 USB 3.1' +- bus: '02' + dev: '00' + fn: '5' + id: 15e2 + name: 'Multimedia controller: Advanced Micro Devices, Inc. [AMD] Raven/Raven2/FireFlight/Renoir + Audio Processor' +- bus: '02' + dev: '00' + fn: '6' + id: 15e3 + name: 'Audio device: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) + HD Audio Controller' +- bus: '02' + dev: '00' + fn: '7' + id: 15e6 + name: 'Non-VGA unclassified device: Advanced Micro Devices, Inc. [AMD] Raven/Raven2/Renoir + Non-Sensor Fusion Hub KMDF driver' +- bus: '03' + dev: '00' + fn: '0' + id: 145a + name: 'Non-Essential Instrumentation [1300]: Advanced Micro Devices, Inc. [AMD] + Zeppelin/Raven/Raven2 PCIe Dummy Function (rev 51)' +- bus: '03' + dev: '00' + fn: '1' + id: '1458' + name: 'Ethernet controller: Advanced Micro Devices, Inc. [AMD] Device 1458' diff --git a/device/arista/x86_64-arista_720dt_48s/platform.json b/device/arista/x86_64-arista_720dt_48s/platform.json index add21ae911bc..90fa1ea1f57c 100644 --- a/device/arista/x86_64-arista_720dt_48s/platform.json +++ b/device/arista/x86_64-arista_720dt_48s/platform.json @@ -2,19 +2,53 @@ "chassis": { "name": "CCS-720DT-48S", "components": [], - "fans": [], + "fans": [ + { + "name": "fan1" + }, + { + "name": "fan2" + } + ], "fan_drawers": [], "psus": [ { "name": "psu1", - "fans": [] + "current": false, + "fans": [], + "max_power": false, + "power": false, + "temperature": false, + "voltage": false, + "voltage_high_threshold": false, + "voltage_low_threshold": false }, { "name": "psu2", - "fans": [] + "current": false, + "fans": [], + "max_power": false, + "power": false, + "temperature": false, + "voltage": false, + "voltage_high_threshold": false, + "voltage_low_threshold": false + } + ], + "thermals": [ + { + "name": "Cpu temp sensor" + }, + { + "name": "Psu temp sensor" + }, + { + "name": "SFP+ connector temp sensor" + }, + { + "name": "MAC external temp sensor" } ], - "thermals": [], "sfps": [ { "name": "ethernet1" diff --git a/device/arista/x86_64-arista_720dt_48s/sensors.conf b/device/arista/x86_64-arista_720dt_48s/sensors.conf new file mode 100644 index 000000000000..bca200a4a469 --- /dev/null +++ b/device/arista/x86_64-arista_720dt_48s/sensors.conf @@ -0,0 +1,18 @@ +# autogenerated by arista + +bus "i2c-1" "Synopsys DesignWare I2C adapter" + +chip "k10temp-pci-00c3" + label temp1 "Cpu temp sensor" + +chip "tmp75-i2c-1-4a" + label temp1 "Psu temp sensor" + set temp1_max 75 + +chip "tmp75-i2c-1-4b" + label temp1 "SFP+ connector temp sensor" + set temp1_max 75 + +chip "tmp75-i2c-1-4c" + label temp1 "MAC external temp sensor" + set temp1_max 75 diff --git a/device/arista/x86_64-arista_720dt_48s/td3x2-a720dt-48s-flex.config.bcm b/device/arista/x86_64-arista_720dt_48s/td3x2-a720dt-48s-flex.config.bcm index 7469c6dbca21..a89c3e442753 100644 --- a/device/arista/x86_64-arista_720dt_48s/td3x2-a720dt-48s-flex.config.bcm +++ b/device/arista/x86_64-arista_720dt_48s/td3x2-a720dt-48s-flex.config.bcm @@ -219,30 +219,30 @@ portmap_56.0=64:10 port_flex_enable.0=1 port_gmii_mode{25}=1 port_gmii_mode{41}=1 -port_init_autoneg_1.0=0 -port_init_autoneg_2.0=0 -port_init_autoneg_3.0=0 -port_init_autoneg_4.0=0 -port_init_autoneg_5.0=0 -port_init_autoneg_6.0=0 -port_init_autoneg_7.0=0 -port_init_autoneg_8.0=0 -port_init_autoneg_9.0=0 -port_init_autoneg_10.0=0 -port_init_autoneg_11.0=0 -port_init_autoneg_12.0=0 -port_init_autoneg_13.0=0 -port_init_autoneg_14.0=0 -port_init_autoneg_15.0=0 -port_init_autoneg_16.0=0 -port_init_autoneg_17.0=0 -port_init_autoneg_18.0=0 -port_init_autoneg_19.0=0 -port_init_autoneg_20.0=0 -port_init_autoneg_21.0=0 -port_init_autoneg_22.0=0 -port_init_autoneg_23.0=0 -port_init_autoneg_24.0=0 +port_init_autoneg_1.0=1 +port_init_autoneg_2.0=1 +port_init_autoneg_3.0=1 +port_init_autoneg_4.0=1 +port_init_autoneg_5.0=1 +port_init_autoneg_6.0=1 +port_init_autoneg_7.0=1 +port_init_autoneg_8.0=1 +port_init_autoneg_9.0=1 +port_init_autoneg_10.0=1 +port_init_autoneg_11.0=1 +port_init_autoneg_12.0=1 +port_init_autoneg_13.0=1 +port_init_autoneg_14.0=1 +port_init_autoneg_15.0=1 +port_init_autoneg_16.0=1 +port_init_autoneg_17.0=1 +port_init_autoneg_18.0=1 +port_init_autoneg_19.0=1 +port_init_autoneg_20.0=1 +port_init_autoneg_21.0=1 +port_init_autoneg_22.0=1 +port_init_autoneg_23.0=1 +port_init_autoneg_24.0=1 port_init_autoneg_53.0=0 port_init_autoneg_54.0=0 port_init_autoneg_55.0=0 From ba020dfac795ad7b1fc160eb0e040c81ad5d1a5b Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox <57339448+Junchao-Mellanox@users.noreply.github.com> Date: Wed, 31 Aug 2022 22:59:16 +0800 Subject: [PATCH 245/259] [202205] Add linux perf tool to sonic image (#11817) --- build_debian.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build_debian.sh b/build_debian.sh index 19cd10a0b497..462aaeb5589f 100755 --- a/build_debian.sh +++ b/build_debian.sh @@ -351,7 +351,8 @@ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y in fdisk \ gpg \ jq \ - auditd + auditd \ + linux-perf # Have systemd create the auditd log directory sudo mkdir -p ${FILESYSTEM_ROOT}/etc/systemd/system/auditd.service.d From 875328bf8a67778e54e9922448fb69a818fe651d Mon Sep 17 00:00:00 2001 From: Ying Xie Date: Wed, 31 Aug 2022 16:53:33 -0700 Subject: [PATCH 246/259] [202205] Update BRCM KNET modules to support new psample definitions from sflow (#11890) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [202205][linux-kernel] advance submodule head linux-kernel: * 3fe00d4 2022-06-24 | [sflow + dropmon] added missing patch for the sFlow + dropmon feature. (#281) (HEAD -> 202205) [Vadym Hlushko] * ca727d6 2022-04-21 | [sflow + dropmon] added patches for the sFlow + dropmon feature. (#276) [Vadym Hlushko] Signed-off-by: Ying Xie * Update BRCM KNET modules to support new psample definitions from sflow… (#11709) * Update BRCM KNET module to support new psample definitions from sflow dropmon feature * Update BRCM KNET module to support new psample definitions from sflow dropmon feature * Advance saibcm-modules-dnx Signed-off-by: Ying Xie Co-authored-by: Michael Li <52540620+michaelli10@users.noreply.github.com> --- platform/broadcom/saibcm-modules-dnx | 2 +- .../debian/opennsl-modules.init | 11 +- .../broadcom/saibcm-modules/sdklt/Makefile | 17 +- .../sdklt/linux/include/net/psample.h | 24 -- .../sdklt/linux/include/uapi/linux/psample.h | 35 -- .../sdklt/linux/knetcb/psample-cb.c | 10 +- .../saibcm-modules/sdklt/linux/psample/Kbuild | 18 -- .../sdklt/linux/psample/Makefile | 21 -- .../sdklt/linux/psample/psample.c | 302 ----------------- .../kernel/modules/include/net/psample.h | 24 -- .../modules/include/uapi/linux/psample.h | 35 -- .../linux/kernel/modules/knet-cb/Makefile | 6 - .../linux/kernel/modules/knet-cb/psample-cb.c | 12 +- .../linux/kernel/modules/psample/Makefile | 64 ---- .../linux/kernel/modules/psample/psample.c | 304 ------------------ .../systems/linux/user/common/Makefile | 16 +- src/sonic-linux-kernel | 2 +- 17 files changed, 22 insertions(+), 881 deletions(-) delete mode 100644 platform/broadcom/saibcm-modules/sdklt/linux/include/net/psample.h delete mode 100644 platform/broadcom/saibcm-modules/sdklt/linux/include/uapi/linux/psample.h delete mode 100644 platform/broadcom/saibcm-modules/sdklt/linux/psample/Kbuild delete mode 100644 platform/broadcom/saibcm-modules/sdklt/linux/psample/Makefile delete mode 100644 platform/broadcom/saibcm-modules/sdklt/linux/psample/psample.c delete mode 100644 platform/broadcom/saibcm-modules/systems/linux/kernel/modules/include/net/psample.h delete mode 100644 platform/broadcom/saibcm-modules/systems/linux/kernel/modules/include/uapi/linux/psample.h delete mode 100644 platform/broadcom/saibcm-modules/systems/linux/kernel/modules/psample/Makefile delete mode 100644 platform/broadcom/saibcm-modules/systems/linux/kernel/modules/psample/psample.c diff --git a/platform/broadcom/saibcm-modules-dnx b/platform/broadcom/saibcm-modules-dnx index 8771baa40be8..65bce4ea8315 160000 --- a/platform/broadcom/saibcm-modules-dnx +++ b/platform/broadcom/saibcm-modules-dnx @@ -1 +1 @@ -Subproject commit 8771baa40be8392c2cf662648fc166929efa4b64 +Subproject commit 65bce4ea8315a7cd0875b3ea2f5c35423f32f868 diff --git a/platform/broadcom/saibcm-modules/debian/opennsl-modules.init b/platform/broadcom/saibcm-modules/debian/opennsl-modules.init index 62274eaa36aa..e8e9e23f2815 100755 --- a/platform/broadcom/saibcm-modules/debian/opennsl-modules.init +++ b/platform/broadcom/saibcm-modules/debian/opennsl-modules.init @@ -45,17 +45,14 @@ function create_devices() function load_kernel_modules() { if [[ $is_ltsw_chip -eq 1 ]]; then - insmod /lib/modules/$(uname -r)/extra/psample.ko + modprobe psample modprobe linux_ngbde modprobe linux_ngknet modprobe linux_ngknetcb else modprobe linux-kernel-bde dmasize=$dmasize maxpayload=128 debug=4 dma_debug=1 usemsi=$usemsi modprobe linux-user-bde - - # Using insmod with absolute path for psample to make sure bcm psample is loaded. - # There is a different psample.ko module getting created at net/psample/psample.ko - insmod /lib/modules/$(uname -r)/extra/psample.ko + modprobe psample modprobe linux-bcm-knet use_rx_skb=1 rx_buffer_size=9238 debug=0x5020 default_mtu=9100 modprobe linux-knet-cb @@ -69,9 +66,9 @@ function remove_kernel_modules() rmmod linux_ngknetcb rmmod linux_ngknet rmmod linux_ngbde - rmmod psample.ko + rmmod psample else - rmmod psample.ko + rmmod psample rmmod linux-knet-cb rmmod linux-bcm-knet rmmod linux-user-bde diff --git a/platform/broadcom/saibcm-modules/sdklt/Makefile b/platform/broadcom/saibcm-modules/sdklt/Makefile index 83a77ebcd1e0..1ce04c788a32 100644 --- a/platform/broadcom/saibcm-modules/sdklt/Makefile +++ b/platform/broadcom/saibcm-modules/sdklt/Makefile @@ -44,12 +44,7 @@ export CROSS_COMPILE override SDK := $(CURDIR) -ifeq ($(BUILD_PSAMPLE),1) -PSAMPLE=psample -PSAMPLE_SYMVERS=$(SDK)/linux/psample/Module.symvers -endif - -kmod: bde knet knetcb $(PSAMPLE) +kmod: bde knet knetcb bde: $(MAKE) -C $(SDK)/linux/bde SDK=$(SDK) \ @@ -62,20 +57,12 @@ knet: bde $(TARGET) ln -sf $(SDK)/linux/knet/*.ko -knetcb: knet $(PSAMPLE) +knetcb: knet $(MAKE) -C $(SDK)/linux/knetcb SDK=$(SDK) \ KBUILD_EXTRA_SYMBOLS=$(SDK)/linux/knet/Module.symvers \ - KBUILD_EXTRA_SYMBOLS+=$(PSAMPLE_SYMVERS) \ $(TARGET) ln -sf $(SDK)/linux/knetcb/*.ko -ifeq ($(BUILD_PSAMPLE),1) -$(PSAMPLE): - $(MAKE) -C $(SDK)/linux/psample SDK=$(SDK) \ - $(TARGET) - ln -sf $(SDK)/linux/psample/*.ko -endif - clean: $(MAKE) kmod TARGET=clean rm -f *.ko diff --git a/platform/broadcom/saibcm-modules/sdklt/linux/include/net/psample.h b/platform/broadcom/saibcm-modules/sdklt/linux/include/net/psample.h deleted file mode 100644 index 64188c95daeb..000000000000 --- a/platform/broadcom/saibcm-modules/sdklt/linux/include/net/psample.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef __NET_PSAMPLE_H -#define __NET_PSAMPLE_H - -#include -#include -#include -#include - -struct psample_group { - struct list_head list; - struct net *net; - u32 group_num; - u32 refcount; - u32 seq; -}; - -extern struct psample_group *psample_group_get(struct net *net, u32 group_num); -extern void psample_group_put(struct psample_group *group); - -extern void psample_sample_packet(struct psample_group *group, struct sk_buff *skb, - u32 trunc_size, int in_ifindex, int out_ifindex, - u32 sample_rate); - -#endif /* __NET_PSAMPLE_H */ diff --git a/platform/broadcom/saibcm-modules/sdklt/linux/include/uapi/linux/psample.h b/platform/broadcom/saibcm-modules/sdklt/linux/include/uapi/linux/psample.h deleted file mode 100644 index ed48996ec0e8..000000000000 --- a/platform/broadcom/saibcm-modules/sdklt/linux/include/uapi/linux/psample.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef __UAPI_PSAMPLE_H -#define __UAPI_PSAMPLE_H - -enum { - /* sampled packet metadata */ - PSAMPLE_ATTR_IIFINDEX, - PSAMPLE_ATTR_OIFINDEX, - PSAMPLE_ATTR_ORIGSIZE, - PSAMPLE_ATTR_SAMPLE_GROUP, - PSAMPLE_ATTR_GROUP_SEQ, - PSAMPLE_ATTR_SAMPLE_RATE, - PSAMPLE_ATTR_DATA, - - /* commands attributes */ - PSAMPLE_ATTR_GROUP_REFCOUNT, - - __PSAMPLE_ATTR_MAX -}; - -enum psample_command { - PSAMPLE_CMD_SAMPLE, - PSAMPLE_CMD_GET_GROUP, - PSAMPLE_CMD_NEW_GROUP, - PSAMPLE_CMD_DEL_GROUP, -}; - -/* Can be overridden at runtime by module option */ -#define PSAMPLE_ATTR_MAX (__PSAMPLE_ATTR_MAX - 1) - -#define PSAMPLE_NL_MCGRP_CONFIG_NAME "config" -#define PSAMPLE_NL_MCGRP_SAMPLE_NAME "packets" -#define PSAMPLE_GENL_NAME "psample" -#define PSAMPLE_GENL_VERSION 1 - -#endif diff --git a/platform/broadcom/saibcm-modules/sdklt/linux/knetcb/psample-cb.c b/platform/broadcom/saibcm-modules/sdklt/linux/knetcb/psample-cb.c index a35c21cf37f4..142357134ff1 100644 --- a/platform/broadcom/saibcm-modules/sdklt/linux/knetcb/psample-cb.c +++ b/platform/broadcom/saibcm-modules/sdklt/linux/knetcb/psample-cb.c @@ -251,6 +251,7 @@ psample_task(struct work_struct *work) unsigned long flags; struct list_head *list_ptr, *list_next; psample_pkt_t *pkt; + struct psample_metadata md = {0}; spin_lock_irqsave(&psample_work->lock, flags); list_for_each_safe(list_ptr, list_next, &psample_work->pkt_list) { @@ -267,12 +268,13 @@ psample_task(struct work_struct *work) pkt->meta.trunc_size, pkt->meta.src_ifindex, pkt->meta.dst_ifindex, pkt->meta.sample_rate); + md.trunc_size = pkt->meta.trunc_size; + md.in_ifindex = pkt->meta.src_ifindex; + md.out_ifindex = pkt->meta.dst_ifindex; psample_sample_packet(pkt->group, pkt->skb, - pkt->meta.trunc_size, - pkt->meta.src_ifindex, - pkt->meta.dst_ifindex, - pkt->meta.sample_rate); + pkt->meta.sample_rate, + &md); g_psample_stats.pkts_f_psample_mod++; dev_kfree_skb_any(pkt->skb); diff --git a/platform/broadcom/saibcm-modules/sdklt/linux/psample/Kbuild b/platform/broadcom/saibcm-modules/sdklt/linux/psample/Kbuild deleted file mode 100644 index 0049e399076b..000000000000 --- a/platform/broadcom/saibcm-modules/sdklt/linux/psample/Kbuild +++ /dev/null @@ -1,18 +0,0 @@ -# -*- Kbuild -*- -# -# Linux psample module. -# -# $Copyright: (c) 2020 Broadcom. -# Broadcom Proprietary and Confidential. All rights reserved.$ -# - -obj-m := linux_psample.o - -ccflags-y := $(LKM_CFLAGS) \ - -I$(SDK)/shr/include \ - -I$(SDK)/bcmdrd/include \ - -I$(SDK)/linux/include \ - -I$(SDK)/linux/knet/include \ - -I$(SDK)/linux/knet - -linux_psample-y := psample.o diff --git a/platform/broadcom/saibcm-modules/sdklt/linux/psample/Makefile b/platform/broadcom/saibcm-modules/sdklt/linux/psample/Makefile deleted file mode 100644 index b37b8ebb1c29..000000000000 --- a/platform/broadcom/saibcm-modules/sdklt/linux/psample/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# -*- Makefile -*- -# -# Linux psample module. -# -# $Copyright: (c) 2020 Broadcom. -# Broadcom Proprietary and Confidential. All rights reserved.$ -# - -include Kbuild - -ifeq ($(KERNELRELEASE),) - -MOD_NAME = linux_psample - -include $(SDK)/make/lkm.mk - -endif - -.PHONY: distclean - -distclean: diff --git a/platform/broadcom/saibcm-modules/sdklt/linux/psample/psample.c b/platform/broadcom/saibcm-modules/sdklt/linux/psample/psample.c deleted file mode 100644 index f0c9beab5784..000000000000 --- a/platform/broadcom/saibcm-modules/sdklt/linux/psample/psample.c +++ /dev/null @@ -1,302 +0,0 @@ -/* - * net/psample/psample.c - Netlink channel for packet sampling - * Copyright (c) 2017 Yotam Gigi - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define PSAMPLE_MAX_PACKET_SIZE 0xffff - -static LIST_HEAD(psample_groups_list); -static DEFINE_SPINLOCK(psample_groups_lock); - -/* multicast groups */ -enum psample_nl_multicast_groups { - PSAMPLE_NL_MCGRP_CONFIG, - PSAMPLE_NL_MCGRP_SAMPLE, -}; - -static const struct genl_multicast_group psample_nl_mcgrps[] = { - [PSAMPLE_NL_MCGRP_CONFIG] = { .name = PSAMPLE_NL_MCGRP_CONFIG_NAME }, - [PSAMPLE_NL_MCGRP_SAMPLE] = { .name = PSAMPLE_NL_MCGRP_SAMPLE_NAME }, -}; - -static struct genl_family psample_nl_family; - -static int psample_group_nl_fill(struct sk_buff *msg, - struct psample_group *group, - enum psample_command cmd, u32 portid, u32 seq, - int flags) -{ - void *hdr; - int ret; - - hdr = genlmsg_put(msg, portid, seq, &psample_nl_family, flags, cmd); - if (!hdr) - return -EMSGSIZE; - - ret = nla_put_u32(msg, PSAMPLE_ATTR_SAMPLE_GROUP, group->group_num); - if (ret < 0) - goto error; - - ret = nla_put_u32(msg, PSAMPLE_ATTR_GROUP_REFCOUNT, group->refcount); - if (ret < 0) - goto error; - - ret = nla_put_u32(msg, PSAMPLE_ATTR_GROUP_SEQ, group->seq); - if (ret < 0) - goto error; - - genlmsg_end(msg, hdr); - return 0; - -error: - genlmsg_cancel(msg, hdr); - return -EMSGSIZE; -} - -static int psample_nl_cmd_get_group_dumpit(struct sk_buff *msg, - struct netlink_callback *cb) -{ - struct psample_group *group; - int start = cb->args[0]; - int idx = 0; - int err; - - spin_lock(&psample_groups_lock); - list_for_each_entry(group, &psample_groups_list, list) { - if (!net_eq(group->net, sock_net(msg->sk))) - continue; - if (idx < start) { - idx++; - continue; - } - err = psample_group_nl_fill(msg, group, PSAMPLE_CMD_NEW_GROUP, - NETLINK_CB(cb->skb).portid, - cb->nlh->nlmsg_seq, NLM_F_MULTI); - if (err) - break; - idx++; - } - - spin_unlock(&psample_groups_lock); - cb->args[0] = idx; - return msg->len; -} - -static const struct genl_ops psample_nl_ops[] = { - { - .cmd = PSAMPLE_CMD_GET_GROUP, - .dumpit = psample_nl_cmd_get_group_dumpit, - /* can be retrieved by unprivileged users */ - } -}; - -static struct genl_family psample_nl_family = { - .name = PSAMPLE_GENL_NAME, - .version = PSAMPLE_GENL_VERSION, - .maxattr = PSAMPLE_ATTR_MAX, - .netnsok = true, - .module = THIS_MODULE, - .mcgrps = psample_nl_mcgrps, - .ops = psample_nl_ops, - .n_ops = ARRAY_SIZE(psample_nl_ops), - .n_mcgrps = ARRAY_SIZE(psample_nl_mcgrps), -}; - -static void psample_group_notify(struct psample_group *group, - enum psample_command cmd) -{ - struct sk_buff *msg; - int err; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC); - if (!msg) - return; - - err = psample_group_nl_fill(msg, group, cmd, 0, 0, NLM_F_MULTI); - if (!err) - genlmsg_multicast_netns(&psample_nl_family, group->net, msg, 0, - PSAMPLE_NL_MCGRP_CONFIG, GFP_ATOMIC); - else - nlmsg_free(msg); -} - -static struct psample_group *psample_group_create(struct net *net, - u32 group_num) -{ - struct psample_group *group; - - group = kzalloc(sizeof(*group), GFP_ATOMIC); - if (!group) - return NULL; - - group->net = net; - group->group_num = group_num; - list_add_tail(&group->list, &psample_groups_list); - - psample_group_notify(group, PSAMPLE_CMD_NEW_GROUP); - return group; -} - -static void psample_group_destroy(struct psample_group *group) -{ - psample_group_notify(group, PSAMPLE_CMD_DEL_GROUP); - list_del(&group->list); - kfree(group); -} - -static struct psample_group * -psample_group_lookup(struct net *net, u32 group_num) -{ - struct psample_group *group; - - list_for_each_entry(group, &psample_groups_list, list) - if ((group->group_num == group_num) && (group->net == net)) - return group; - return NULL; -} - -struct psample_group *psample_group_get(struct net *net, u32 group_num) -{ - struct psample_group *group; - - spin_lock(&psample_groups_lock); - - group = psample_group_lookup(net, group_num); - if (!group) { - group = psample_group_create(net, group_num); - if (!group) - goto out; - } - group->refcount++; - -out: - spin_unlock(&psample_groups_lock); - return group; -} -EXPORT_SYMBOL_GPL(psample_group_get); - -void psample_group_put(struct psample_group *group) -{ - spin_lock(&psample_groups_lock); - - if (--group->refcount == 0) - psample_group_destroy(group); - - spin_unlock(&psample_groups_lock); -} -EXPORT_SYMBOL_GPL(psample_group_put); - -void psample_sample_packet(struct psample_group *group, struct sk_buff *skb, - u32 trunc_size, int in_ifindex, int out_ifindex, - u32 sample_rate) -{ - struct sk_buff *nl_skb; - int data_len; - int meta_len; - void *data; - int ret; - - meta_len = (in_ifindex ? nla_total_size(sizeof(u16)) : 0) + - (out_ifindex ? nla_total_size(sizeof(u16)) : 0) + - nla_total_size(sizeof(u32)) + /* sample_rate */ - nla_total_size(sizeof(u32)) + /* orig_size */ - nla_total_size(sizeof(u32)) + /* group_num */ - nla_total_size(sizeof(u32)); /* seq */ - - data_len = min(skb->len, trunc_size); - if (meta_len + nla_total_size(data_len) > PSAMPLE_MAX_PACKET_SIZE) - data_len = PSAMPLE_MAX_PACKET_SIZE - meta_len - NLA_HDRLEN - - NLA_ALIGNTO; - - nl_skb = genlmsg_new(meta_len + nla_total_size(data_len), GFP_ATOMIC); - if (unlikely(!nl_skb)) - return; - - data = genlmsg_put(nl_skb, 0, 0, &psample_nl_family, 0, - PSAMPLE_CMD_SAMPLE); - if (unlikely(!data)) - goto error; - - if (in_ifindex) { - ret = nla_put_u16(nl_skb, PSAMPLE_ATTR_IIFINDEX, in_ifindex); - if (unlikely(ret < 0)) - goto error; - } - - if (out_ifindex) { - ret = nla_put_u16(nl_skb, PSAMPLE_ATTR_OIFINDEX, out_ifindex); - if (unlikely(ret < 0)) - goto error; - } - - ret = nla_put_u32(nl_skb, PSAMPLE_ATTR_SAMPLE_RATE, sample_rate); - if (unlikely(ret < 0)) - goto error; - - ret = nla_put_u32(nl_skb, PSAMPLE_ATTR_ORIGSIZE, skb->len); - if (unlikely(ret < 0)) - goto error; - - ret = nla_put_u32(nl_skb, PSAMPLE_ATTR_SAMPLE_GROUP, group->group_num); - if (unlikely(ret < 0)) - goto error; - - ret = nla_put_u32(nl_skb, PSAMPLE_ATTR_GROUP_SEQ, group->seq++); - if (unlikely(ret < 0)) - goto error; - - if (data_len) { - int nla_len = nla_total_size(data_len); - struct nlattr *nla; - - nla = (struct nlattr *)skb_put(nl_skb, nla_len); - nla->nla_type = PSAMPLE_ATTR_DATA; - nla->nla_len = nla_attr_size(data_len); - - if (skb_copy_bits(skb, 0, nla_data(nla), data_len)) - goto error; - } - - genlmsg_end(nl_skb, data); - genlmsg_multicast_netns(&psample_nl_family, group->net, nl_skb, 0, - PSAMPLE_NL_MCGRP_SAMPLE, GFP_ATOMIC); - - return; -error: - pr_err_ratelimited("Could not create psample log message\n"); - nlmsg_free(nl_skb); -} -EXPORT_SYMBOL_GPL(psample_sample_packet); - -static int __init psample_module_init(void) -{ - return genl_register_family(&psample_nl_family); -} - -static void __exit psample_module_exit(void) -{ - genl_unregister_family(&psample_nl_family); -} - -module_init(psample_module_init); -module_exit(psample_module_exit); - -MODULE_AUTHOR("Yotam Gigi "); -MODULE_DESCRIPTION("netlink channel for packet sampling"); -MODULE_LICENSE("GPL v2"); diff --git a/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/include/net/psample.h b/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/include/net/psample.h deleted file mode 100644 index 57c000785e9c..000000000000 --- a/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/include/net/psample.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef __NET_PSAMPLE_H -#define __NET_PSAMPLE_H - -#include -#include -#include -#include - -struct psample_group { - struct list_head list; - struct net *net; - u32 group_num; - u32 refcount; - u32 seq; -}; - -extern struct psample_group *psample_group_get(struct net *net, u32 group_num); -extern void psample_group_put(struct psample_group *group); - -extern void psample_sample_packet(struct psample_group *group, struct sk_buff *skb, - u32 trunc_size, int in_ifindex, int out_ifindex, - u32 sample_rate); - -#endif /* __NET_PSAMPLE_H */ diff --git a/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/include/uapi/linux/psample.h b/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/include/uapi/linux/psample.h deleted file mode 100644 index ed48996ec0e8..000000000000 --- a/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/include/uapi/linux/psample.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef __UAPI_PSAMPLE_H -#define __UAPI_PSAMPLE_H - -enum { - /* sampled packet metadata */ - PSAMPLE_ATTR_IIFINDEX, - PSAMPLE_ATTR_OIFINDEX, - PSAMPLE_ATTR_ORIGSIZE, - PSAMPLE_ATTR_SAMPLE_GROUP, - PSAMPLE_ATTR_GROUP_SEQ, - PSAMPLE_ATTR_SAMPLE_RATE, - PSAMPLE_ATTR_DATA, - - /* commands attributes */ - PSAMPLE_ATTR_GROUP_REFCOUNT, - - __PSAMPLE_ATTR_MAX -}; - -enum psample_command { - PSAMPLE_CMD_SAMPLE, - PSAMPLE_CMD_GET_GROUP, - PSAMPLE_CMD_NEW_GROUP, - PSAMPLE_CMD_DEL_GROUP, -}; - -/* Can be overridden at runtime by module option */ -#define PSAMPLE_ATTR_MAX (__PSAMPLE_ATTR_MAX - 1) - -#define PSAMPLE_NL_MCGRP_CONFIG_NAME "config" -#define PSAMPLE_NL_MCGRP_SAMPLE_NAME "packets" -#define PSAMPLE_GENL_NAME "psample" -#define PSAMPLE_GENL_VERSION 1 - -#endif diff --git a/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/knet-cb/Makefile b/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/knet-cb/Makefile index d888820fafba..52b776f82b6c 100644 --- a/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/knet-cb/Makefile +++ b/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/knet-cb/Makefile @@ -48,9 +48,6 @@ build: $(MODULE) $(KMODULE) endif KBUILD_EXTRA_SYMBOLS := ${BLDDIR}/../bcm-knet/kernel_module/Module.symvers -ifeq ($(BUILD_PSAMPLE),1) -KBUILD_EXTRA_SYMBOLS += ${BLDDIR}/../psample/kernel_module/Module.symvers -endif # BCM Network Device @@ -61,9 +58,6 @@ $(KMODULE): $(MODULE) rm -fr $(BLDDIR)/$(KERNEL_MODULE_DIR) mkdir $(BLDDIR)/$(KERNEL_MODULE_DIR) cp ${SDK}/make/Makefile.linux-kmodule $(BLDDIR)/$(KERNEL_MODULE_DIR)/Makefile -ifeq ($(BUILD_PSAMPLE),1) - sed -i 's/0x......../0x00000000/' ${BLDDIR}/../psample/kernel_module/Module.symvers -endif cat ${KBUILD_EXTRA_SYMBOLS} > $(BLDDIR)/$(KERNEL_MODULE_DIR)/Module.symvers MOD_NAME=$(THIS_MOD_NAME) KBUILD_EXTRA_SYMBOLS="${KBUILD_EXTRA_SYMBOLS}" $(MAKE) -C $(BLDDIR)/$(KERNEL_MODULE_DIR) $(THIS_MOD_NAME).ko endif diff --git a/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/knet-cb/psample-cb.c b/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/knet-cb/psample-cb.c index 628ee1780c09..2228eb44d5d3 100644 --- a/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/knet-cb/psample-cb.c +++ b/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/knet-cb/psample-cb.c @@ -394,6 +394,7 @@ psample_task(struct work_struct *work) unsigned long flags; struct list_head *list_ptr, *list_next; psample_pkt_t *pkt; + struct psample_metadata md = {0}; spin_lock_irqsave(&psample_work->lock, flags); list_for_each_safe(list_ptr, list_next, &psample_work->pkt_list) { @@ -410,12 +411,13 @@ psample_task(struct work_struct *work) pkt->meta.trunc_size, pkt->meta.src_ifindex, pkt->meta.dst_ifindex, pkt->meta.sample_rate); + md.trunc_size = pkt->meta.trunc_size; + md.in_ifindex = pkt->meta.src_ifindex; + md.out_ifindex = pkt->meta.dst_ifindex; psample_sample_packet(pkt->group, - pkt->skb, - pkt->meta.trunc_size, - pkt->meta.src_ifindex, - pkt->meta.dst_ifindex, - pkt->meta.sample_rate); + pkt->skb, + pkt->meta.sample_rate, + &md); g_psample_stats.pkts_f_psample_mod++; dev_kfree_skb_any(pkt->skb); diff --git a/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/psample/Makefile b/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/psample/Makefile deleted file mode 100644 index 53293a7ac93b..000000000000 --- a/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/psample/Makefile +++ /dev/null @@ -1,64 +0,0 @@ -# -# Copyright 2017 Broadcom -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License, version 2, as -# published by the Free Software Foundation (the "GPL"). -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License version 2 (GPLv2) for more details. -# -# You should have received a copy of the GNU General Public License -# version 2 (GPLv2) along with this source code. -# -# -*- Makefile -*- -# $Id: Makefile,v 1.3 Broadcom SDK $ -# $Copyright: (c) 2005 Broadcom Corp. -# All Rights Reserved.$ -# -LOCALDIR = systems/linux/kernel/modules/psample - -include ${SDK}/make/Make.config - -LIBS = $(LIBDIR)/libkern.a - -ifeq ($(kernel_version),2_4) -MODULE = $(LIBDIR)/psample.o -else -KERNEL_MODULE_DIR = kernel_module - -THIS_MOD_NAME := psample -MODULE = $(LIBDIR)/$(THIS_MOD_NAME).o -KMODULE = $(LIBDIR)/$(THIS_MOD_NAME).ko - -build: $(MODULE) $(KMODULE) -endif - -KBUILD_EXTRA_SYMBOLS := ${BLDDIR}/../bcm-knet/kernel_module/Module.symvers - -# BCM Network Device - -$(MODULE): $(BLDDIR)/.tree $(BOBJS) $(LIBS) - $(LD) $(MODULE_LDFLAGS) -r -d $(BOBJS) $(LIBS) -o $@ -ifneq ($(kernel_version),2_4) -$(KMODULE): $(MODULE) - rm -fr $(BLDDIR)/$(KERNEL_MODULE_DIR) - mkdir $(BLDDIR)/$(KERNEL_MODULE_DIR) - cp ${SDK}/make/Makefile.linux-kmodule $(BLDDIR)/$(KERNEL_MODULE_DIR)/Makefile - cat ${KBUILD_EXTRA_SYMBOLS} > $(BLDDIR)/$(KERNEL_MODULE_DIR)/Module.symvers - MOD_NAME=$(THIS_MOD_NAME) KBUILD_EXTRA_SYMBOLS="${KBUILD_EXTRA_SYMBOLS}" $(MAKE) -C $(BLDDIR)/$(KERNEL_MODULE_DIR) $(THIS_MOD_NAME).ko -endif - -# Make.depend is before clean:: so that Make.depend's clean:: runs first. - -include ${SDK}/make/Make.depend - -clean:: - $(RM) $(BLDDIR)/version.c $(BLDDIR)/version.o - $(RM) $(BOBJS) $(MODULE) - -ifneq ($(kernel_version),2_4) -.PHONY: build -endif diff --git a/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/psample/psample.c b/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/psample/psample.c deleted file mode 100644 index 46a84c7f7c4a..000000000000 --- a/platform/broadcom/saibcm-modules/systems/linux/kernel/modules/psample/psample.c +++ /dev/null @@ -1,304 +0,0 @@ -/* - * net/psample/psample.c - Netlink channel for packet sampling - * Copyright (c) 2017 Yotam Gigi - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define PSAMPLE_MAX_PACKET_SIZE 0xffff - -static LIST_HEAD(psample_groups_list); -static DEFINE_SPINLOCK(psample_groups_lock); - -/* multicast groups */ -enum psample_nl_multicast_groups { - PSAMPLE_NL_MCGRP_CONFIG, - PSAMPLE_NL_MCGRP_SAMPLE, -}; - -static const struct genl_multicast_group psample_nl_mcgrps[] = { - [PSAMPLE_NL_MCGRP_CONFIG] = { .name = PSAMPLE_NL_MCGRP_CONFIG_NAME }, - [PSAMPLE_NL_MCGRP_SAMPLE] = { .name = PSAMPLE_NL_MCGRP_SAMPLE_NAME }, -}; - -static struct genl_family psample_nl_family; - -static int psample_group_nl_fill(struct sk_buff *msg, - struct psample_group *group, - enum psample_command cmd, u32 portid, u32 seq, - int flags) -{ - void *hdr; - int ret; - - hdr = genlmsg_put(msg, portid, seq, &psample_nl_family, flags, cmd); - if (!hdr) - return -EMSGSIZE; - - ret = nla_put_u32(msg, PSAMPLE_ATTR_SAMPLE_GROUP, group->group_num); - if (ret < 0) - goto error; - - ret = nla_put_u32(msg, PSAMPLE_ATTR_GROUP_REFCOUNT, group->refcount); - if (ret < 0) - goto error; - - ret = nla_put_u32(msg, PSAMPLE_ATTR_GROUP_SEQ, group->seq); - if (ret < 0) - goto error; - - genlmsg_end(msg, hdr); - return 0; - -error: - genlmsg_cancel(msg, hdr); - return -EMSGSIZE; -} - -static int psample_nl_cmd_get_group_dumpit(struct sk_buff *msg, - struct netlink_callback *cb) -{ - struct psample_group *group; - int start = cb->args[0]; - int idx = 0; - int err; - - spin_lock(&psample_groups_lock); - list_for_each_entry(group, &psample_groups_list, list) { - if (!net_eq(group->net, sock_net(msg->sk))) - continue; - if (idx < start) { - idx++; - continue; - } - err = psample_group_nl_fill(msg, group, PSAMPLE_CMD_NEW_GROUP, - NETLINK_CB(cb->skb).portid, - cb->nlh->nlmsg_seq, NLM_F_MULTI); - if (err) - break; - idx++; - } - - spin_unlock(&psample_groups_lock); - cb->args[0] = idx; - return msg->len; -} - -static const struct genl_ops psample_nl_ops[] = { - { - .cmd = PSAMPLE_CMD_GET_GROUP, - .dumpit = psample_nl_cmd_get_group_dumpit, - /* can be retrieved by unprivileged users */ - } -}; - -static struct genl_family psample_nl_family = { - .name = PSAMPLE_GENL_NAME, - .version = PSAMPLE_GENL_VERSION, - .maxattr = PSAMPLE_ATTR_MAX, - .netnsok = true, - .module = THIS_MODULE, - .mcgrps = psample_nl_mcgrps, - .ops = psample_nl_ops, - .n_ops = ARRAY_SIZE(psample_nl_ops), - .n_mcgrps = ARRAY_SIZE(psample_nl_mcgrps), -}; - -static void psample_group_notify(struct psample_group *group, - enum psample_command cmd) -{ - struct sk_buff *msg; - int err; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC); - if (!msg) - return; - - err = psample_group_nl_fill(msg, group, cmd, 0, 0, NLM_F_MULTI); - if (!err) - genlmsg_multicast_netns(&psample_nl_family, group->net, msg, 0, - PSAMPLE_NL_MCGRP_CONFIG, GFP_ATOMIC); - else - nlmsg_free(msg); -} - -static struct psample_group *psample_group_create(struct net *net, - u32 group_num) -{ - struct psample_group *group; - - group = kzalloc(sizeof(*group), GFP_ATOMIC); - if (!group) - return NULL; - - group->net = net; - group->group_num = group_num; - list_add_tail(&group->list, &psample_groups_list); - - psample_group_notify(group, PSAMPLE_CMD_NEW_GROUP); - return group; -} - -static void psample_group_destroy(struct psample_group *group) -{ - psample_group_notify(group, PSAMPLE_CMD_DEL_GROUP); - list_del(&group->list); - kfree(group); -} - -static struct psample_group * -psample_group_lookup(struct net *net, u32 group_num) -{ - struct psample_group *group; - - list_for_each_entry(group, &psample_groups_list, list) - if ((group->group_num == group_num) && (group->net == net)) - return group; - return NULL; -} - -struct psample_group *psample_group_get(struct net *net, u32 group_num) -{ - struct psample_group *group; - - spin_lock(&psample_groups_lock); - - group = psample_group_lookup(net, group_num); - if (!group) { - group = psample_group_create(net, group_num); - if (!group) - goto out; - } - group->refcount++; - -out: - spin_unlock(&psample_groups_lock); - return group; -} -EXPORT_SYMBOL_GPL(psample_group_get); - -void psample_group_put(struct psample_group *group) -{ - spin_lock(&psample_groups_lock); - - if (--group->refcount == 0) - psample_group_destroy(group); - - spin_unlock(&psample_groups_lock); -} -EXPORT_SYMBOL_GPL(psample_group_put); - -#if IS_ENABLED(CONFIG_PSAMPLE) /* FIXUP:- Remove after GTS kernel is recompiled with change in CONFIG_PSAMPLE flag */ -void psample_sample_packet(struct psample_group *group, struct sk_buff *skb, - u32 trunc_size, int in_ifindex, int out_ifindex, - u32 sample_rate) -{ - struct sk_buff *nl_skb; - int data_len; - int meta_len; - void *data; - int ret; - - meta_len = (in_ifindex ? nla_total_size(sizeof(u16)) : 0) + - (out_ifindex ? nla_total_size(sizeof(u16)) : 0) + - nla_total_size(sizeof(u32)) + /* sample_rate */ - nla_total_size(sizeof(u32)) + /* orig_size */ - nla_total_size(sizeof(u32)) + /* group_num */ - nla_total_size(sizeof(u32)); /* seq */ - - data_len = min(skb->len, trunc_size); - if (meta_len + nla_total_size(data_len) > PSAMPLE_MAX_PACKET_SIZE) - data_len = PSAMPLE_MAX_PACKET_SIZE - meta_len - NLA_HDRLEN - - NLA_ALIGNTO; - - nl_skb = genlmsg_new(meta_len + nla_total_size(data_len), GFP_ATOMIC); - if (unlikely(!nl_skb)) - return; - - data = genlmsg_put(nl_skb, 0, 0, &psample_nl_family, 0, - PSAMPLE_CMD_SAMPLE); - if (unlikely(!data)) - goto error; - - if (in_ifindex) { - ret = nla_put_u16(nl_skb, PSAMPLE_ATTR_IIFINDEX, in_ifindex); - if (unlikely(ret < 0)) - goto error; - } - - if (out_ifindex) { - ret = nla_put_u16(nl_skb, PSAMPLE_ATTR_OIFINDEX, out_ifindex); - if (unlikely(ret < 0)) - goto error; - } - - ret = nla_put_u32(nl_skb, PSAMPLE_ATTR_SAMPLE_RATE, sample_rate); - if (unlikely(ret < 0)) - goto error; - - ret = nla_put_u32(nl_skb, PSAMPLE_ATTR_ORIGSIZE, skb->len); - if (unlikely(ret < 0)) - goto error; - - ret = nla_put_u32(nl_skb, PSAMPLE_ATTR_SAMPLE_GROUP, group->group_num); - if (unlikely(ret < 0)) - goto error; - - ret = nla_put_u32(nl_skb, PSAMPLE_ATTR_GROUP_SEQ, group->seq++); - if (unlikely(ret < 0)) - goto error; - - if (data_len) { - int nla_len = nla_total_size(data_len); - struct nlattr *nla; - - nla = (struct nlattr *)skb_put(nl_skb, nla_len); - nla->nla_type = PSAMPLE_ATTR_DATA; - nla->nla_len = nla_attr_size(data_len); - - if (skb_copy_bits(skb, 0, nla_data(nla), data_len)) - goto error; - } - - genlmsg_end(nl_skb, data); - genlmsg_multicast_netns(&psample_nl_family, group->net, nl_skb, 0, - PSAMPLE_NL_MCGRP_SAMPLE, GFP_ATOMIC); - - return; -error: - pr_err_ratelimited("Could not create psample log message\n"); - nlmsg_free(nl_skb); -} -EXPORT_SYMBOL_GPL(psample_sample_packet); -#endif - -static int __init psample_module_init(void) -{ - return genl_register_family(&psample_nl_family); -} - -static void __exit psample_module_exit(void) -{ - genl_unregister_family(&psample_nl_family); -} - -module_init(psample_module_init); -module_exit(psample_module_exit); - -MODULE_AUTHOR("Yotam Gigi "); -MODULE_DESCRIPTION("netlink channel for packet sampling"); -MODULE_LICENSE("GPL v2"); diff --git a/platform/broadcom/saibcm-modules/systems/linux/user/common/Makefile b/platform/broadcom/saibcm-modules/systems/linux/user/common/Makefile index 7a342f6ef60e..a72dba96f6e2 100644 --- a/platform/broadcom/saibcm-modules/systems/linux/user/common/Makefile +++ b/platform/broadcom/saibcm-modules/systems/linux/user/common/Makefile @@ -106,9 +106,6 @@ KNET_CB := $(DEST_DIR)/$(KNET_CB_LOCAL) BCM_KNET_LOCAL :=linux-bcm-knet.$(KOBJ) BCM_KNET=$(DEST_DIR)/$(BCM_KNET_LOCAL) -PSAMPLE_LOCAL := psample.$(KOBJ) -PSAMPLE := $(DEST_DIR)/$(PSAMPLE_LOCAL) - ifeq (,$(findstring DELIVER,$(MAKECMDGOALS))) .DEFAULT_GOAL := all all_targets := kernel_modules $(KERNEL_BDE) $(USER_BDE) @@ -145,7 +142,6 @@ endif endif ifdef BUILD_PSAMPLE -all_targets += $(PSAMPLE) ADD_TO_CFLAGS += -DPSAMPLE_SUPPORT endif ADD_TO_CFLAGS += -I$(SDK)/systems/linux/kernel/modules/include @@ -178,10 +174,6 @@ kernel_modules: ifeq ($(BUILD_KNET),1) $(MAKE) -C $(SDK)/systems/linux/kernel/modules kernel_version=$(kernel_version) \ subdirs="shared bcm-knet" override-target=linux-$(platform) CFLAGS="$(CFLAGS)" -ifdef BUILD_PSAMPLE - $(MAKE) -C $(SDK)/systems/linux/kernel/modules kernel_version=$(kernel_version) \ - subdirs="psample" override-target=linux-$(platform) CFLAGS="$(CFLAGS)" -endif ifdef BUILD_KNET_CB $(MAKE) -C $(SDK)/systems/linux/kernel/modules kernel_version=$(kernel_version) \ subdirs="knet-cb" override-target=linux-$(platform) CFLAGS="$(CFLAGS)" @@ -201,11 +193,6 @@ $(BCM_KNET): $(KERN_BLDROOT)/linux-bcm-knet.$(KOBJ) $(KNET_CB): $(KERN_BLDROOT)/linux-knet-cb.$(KOBJ) $(OBJCOPY) --strip-debug $< $@ -$(PSAMPLE): $(KERN_BLDROOT)/psample.$(KOBJ) - $(OBJCOPY) --strip-debug $< $@ - - - ifeq ($(NO_LOCAL_TARGETS),) $(foreach targ,$(LOCAL_TARGETS),$(eval $(call LOCAL_TARGET_DEF,$(targ)))) endif @@ -214,7 +201,7 @@ clean:: $(MAKE) -C $(SDK)/systems/bde/linux/kernel $@ $(MAKE) -C $(SDK)/systems/bde/linux/user/kernel $@ $(MAKE) -C $(SDK)/systems/linux/kernel/modules \ - subdirs="shared bcm-knet knet-cb psample" \ + subdirs="shared bcm-knet knet-cb" \ override-target=linux-$(platform) $@ $(RM) $(KERNEL_BDE) $(USER_BDE) $(RM) $(BCM_KNET) $(KNET_CB) $(PSAMPLE) @@ -222,7 +209,6 @@ clean:: $(RM) $(KERN_BLDROOT)/linux-user-bde.$(KOBJ) $(RM) $(KERN_BLDROOT)/linux-bcm-knet.$(KOBJ) $(RM) $(KERN_BLDROOT)/linux-knet-cb.$(KOBJ) - $(RM) $(KERN_BLDROOT)/psample.$(KOBJ) $(RM) $(LOCAL_TARGETS) distclean:: clean diff --git a/src/sonic-linux-kernel b/src/sonic-linux-kernel index 86c4b66a63f0..3fe00d489e0d 160000 --- a/src/sonic-linux-kernel +++ b/src/sonic-linux-kernel @@ -1 +1 @@ -Subproject commit 86c4b66a63f0e76054bd35a4c6a2a2c39b67d08a +Subproject commit 3fe00d489e0da43cd6799dab2b4dfdb3822f449d From 2ff3b84ae8db0e6c97704c3988d785c87ce089a3 Mon Sep 17 00:00:00 2001 From: Junhua Zhai Date: Wed, 17 Aug 2022 04:48:40 +0000 Subject: [PATCH 247/259] Correct port index in Arista-720DT-48S/phy24_config.json (#11699) Port index 22 is associated with phy23_config.json, then same port index 22 in phy24_config.json may cause gearbox port creation error. Port Ethernet22 maps to index 23. --- .../x86_64-arista_720dt_48s/Arista-720DT-48S/phy24_config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy24_config.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy24_config.json index 2a781875b0b2..31b86a0bc5cb 100644 --- a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy24_config.json +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/phy24_config.json @@ -14,7 +14,7 @@ ], "ports": [ { - "index": 22, + "index": 23, "mdio_addr": "", "system_speed": 1000, "system_fec": "none", From 1e91ad314ba60201f6847677385ca96b8ba9ea37 Mon Sep 17 00:00:00 2001 From: andywongarista <78833093+andywongarista@users.noreply.github.com> Date: Thu, 25 Aug 2022 18:30:11 -0700 Subject: [PATCH 248/259] Enable AN for Ethernet24-47 (#11839) Enable port AN ON explicitly and then port will become (oper status) UP. Somehow those ports AN are not default ON in bcm sdk. --- .../Arista-720DT-48S/hwsku.json | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/hwsku.json b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/hwsku.json index e0dc3fc5e55c..44f0a20457e1 100644 --- a/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/hwsku.json +++ b/device/arista/x86_64-arista_720dt_48s/Arista-720DT-48S/hwsku.json @@ -98,98 +98,122 @@ }, "Ethernet24": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet25": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet26": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet27": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet28": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet29": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet30": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet31": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet32": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet33": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet34": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet35": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet36": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet37": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet38": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet39": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet40": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet41": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet42": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet43": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet44": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet45": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet46": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet47": { "default_brkout_mode": "1x1G", + "autoneg": "on", "port_type": "RJ45" }, "Ethernet48": { @@ -205,4 +229,4 @@ "default_brkout_mode": "1x10G" } } -} \ No newline at end of file +} From f8a4ff04a6bca93363eda91acfeb634780e26cde Mon Sep 17 00:00:00 2001 From: Junhua Zhai Date: Tue, 23 Aug 2022 04:38:08 +0000 Subject: [PATCH 249/259] [gbsyncd] Build docker-gbsyncd-broncos image (#11748) The libsaibroncos debian package is published at $(LIBSAI_BRONCOS)_URL. Enable building docker-gbsyncd-broncos image on PLATFORM broadcom. --- platform/broadcom/rules.dep | 2 -- platform/broadcom/rules.mk | 2 -- platform/components/docker-gbsyncd-broncos.mk | 7 +++++-- platform/components/docker-gbsyncd-broncos/Dockerfile.j2 | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/platform/broadcom/rules.dep b/platform/broadcom/rules.dep index 220ee8019943..075636a8dedd 100644 --- a/platform/broadcom/rules.dep +++ b/platform/broadcom/rules.dep @@ -30,6 +30,4 @@ include $(PLATFORM_PATH)/libsaithrift-dev.dep include $(PLATFORM_PATH)/docker-syncd-brcm-dnx.dep include $(PLATFORM_PATH)/docker-syncd-brcm-dnx-rpc.dep include $(PLATFORM_PATH)/../components/docker-gbsyncd-credo.dep -ifeq ($(INCLUDE_GBSYNCD_BRONCOS), y) include $(PLATFORM_PATH)/../components/docker-gbsyncd-broncos.dep -endif diff --git a/platform/broadcom/rules.mk b/platform/broadcom/rules.mk index 0b46bb1c8ec4..c43a66ee43e3 100644 --- a/platform/broadcom/rules.mk +++ b/platform/broadcom/rules.mk @@ -29,9 +29,7 @@ include $(PLATFORM_PATH)/libsaithrift-dev.mk include $(PLATFORM_PATH)/docker-syncd-brcm-dnx.mk include $(PLATFORM_PATH)/docker-syncd-brcm-dnx-rpc.mk include $(PLATFORM_PATH)/../components/docker-gbsyncd-credo.mk -ifeq ($(INCLUDE_GBSYNCD_BRONCOS), y) include $(PLATFORM_PATH)/../components/docker-gbsyncd-broncos.mk -endif BCMCMD = bcmcmd $(BCMCMD)_URL = "https://sonicstorage.blob.core.windows.net/packages/20190307/bcmcmd?sv=2015-04-05&sr=b&sig=sUdbU7oVbh5exbXXHVL5TDFBTWDDBASHeJ8Cp0B0TIc%3D&se=2038-05-06T22%3A34%3A19Z&sp=r" diff --git a/platform/components/docker-gbsyncd-broncos.mk b/platform/components/docker-gbsyncd-broncos.mk index c0bd4cc6be3e..56ec6806b6b1 100644 --- a/platform/components/docker-gbsyncd-broncos.mk +++ b/platform/components/docker-gbsyncd-broncos.mk @@ -1,5 +1,8 @@ -LIBSAI_BRONCOS = libsaibroncos_0.0.1_amd64.deb -$(LIBSAI_BRONCOS)_URL = +LIBSAI_BRONCOS_VERSION = 3.8 +LIBSAI_BRONCOS_BRANCH_NAME = REL_3.8 +LIBSAI_BRONCOS_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/bcmpai/$(LIBSAI_BRONCOS_BRANCH_NAME)/$(LIBSAI_BRONCOS_VERSION)" +LIBSAI_BRONCOS = libsaibroncos_$(LIBSAI_BRONCOS_VERSION)_amd64.deb +$(LIBSAI_BRONCOS)_URL = "$(LIBSAI_BRONCOS_URL_PREFIX)/$(LIBSAI_BRONCOS)" ifneq ($($(LIBSAI_BRONCOS)_URL),) diff --git a/platform/components/docker-gbsyncd-broncos/Dockerfile.j2 b/platform/components/docker-gbsyncd-broncos/Dockerfile.j2 index f114679c6888..154c7735ce97 100644 --- a/platform/components/docker-gbsyncd-broncos/Dockerfile.j2 +++ b/platform/components/docker-gbsyncd-broncos/Dockerfile.j2 @@ -1,4 +1,4 @@ -FROM docker-config-engine-bullseye +FROM docker-config-engine-bullseye-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} ARG docker_container_name RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%syslogtag%/;" /etc/rsyslog.conf From 31b208ecfca02f153b0a71dc32c70415f436de02 Mon Sep 17 00:00:00 2001 From: Samuel Angebault Date: Mon, 29 Aug 2022 04:45:24 +0200 Subject: [PATCH 250/259] [Arista] Fix content of platform.json for DCS-720DT-48S (#11855) Why I did it Content of platform.json was outdated and some platform_tests/api of sonic-mgmt were failing. How I did it Added the necessary values to platform.json How to verify it Running platform_tests/api of sonic-mgmt should yield 100% passrate. --- .../x86_64-arista_720dt_48s/platform.json | 59 +++++++++++++++---- 1 file changed, 46 insertions(+), 13 deletions(-) diff --git a/device/arista/x86_64-arista_720dt_48s/platform.json b/device/arista/x86_64-arista_720dt_48s/platform.json index 90fa1ea1f57c..625e64335278 100644 --- a/device/arista/x86_64-arista_720dt_48s/platform.json +++ b/device/arista/x86_64-arista_720dt_48s/platform.json @@ -2,15 +2,38 @@ "chassis": { "name": "CCS-720DT-48S", "components": [], - "fans": [ - { - "name": "fan1" - }, - { - "name": "fan2" + "fan_drawers": [ + { + "name": "fixed1", + "status_led": { + "controllable": false, + "available": false + }, + "fans": [ + { + "name": "fan1", + "status_led": { + "available": false + } + } + ] + }, + { + "name": "fixed2", + "status_led": { + "controllable": false, + "available": false + }, + "fans": [ + { + "name": "fan2", + "status_led": { + "available": false + } + } + ] } ], - "fan_drawers": [], "psus": [ { "name": "psu1", @@ -21,7 +44,10 @@ "temperature": false, "voltage": false, "voltage_high_threshold": false, - "voltage_low_threshold": false + "voltage_low_threshold": false, + "status_led": { + "controllable": false + } }, { "name": "psu2", @@ -32,21 +58,28 @@ "temperature": false, "voltage": false, "voltage_high_threshold": false, - "voltage_low_threshold": false + "voltage_low_threshold": false, + "status_led": { + "controllable": false + } } ], "thermals": [ { - "name": "Cpu temp sensor" + "name": "Cpu temp sensor", + "controllable": false }, { - "name": "Psu temp sensor" + "name": "Psu temp sensor", + "controllable": false }, { - "name": "SFP+ connector temp sensor" + "name": "SFP+ connector temp sensor", + "controllable": false }, { - "name": "MAC external temp sensor" + "name": "MAC external temp sensor", + "controllable": false } ], "sfps": [ From 5f385de2b76434c12f7c60a92cd3fcf8d11bf9da Mon Sep 17 00:00:00 2001 From: saksarav-nokia Date: Tue, 30 Aug 2022 23:23:17 -0400 Subject: [PATCH 251/259] [Nokia][Nokia-IXR7250E-36x100G & Nokia-IXR7250E-36x400G] Update BCM (#11577) config to support ERSPAN egress mirror and also set flag to preserve ECN --- .../0/jr2cp-nokia-18x100g-4x25g-config.bcm | 44 +++++++++++++++++-- .../0/sai_postinit_cmd.soc | 37 +--------------- .../1/jr2cp-nokia-18x100g-4x25g-config.bcm | 44 +++++++++++++++++-- .../1/sai_postinit_cmd.soc | 7 +-- .../0/jr2cp-nokia-18x400g-config.bcm | 43 ++++++++++++++++-- .../0/sai_postinit_cmd.soc | 2 + .../1/jr2cp-nokia-18x400g-config.bcm | 43 ++++++++++++++++-- .../1/sai_postinit_cmd.soc | 2 + 8 files changed, 168 insertions(+), 54 deletions(-) diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/jr2cp-nokia-18x100g-4x25g-config.bcm b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/jr2cp-nokia-18x100g-4x25g-config.bcm index 72c101facb35..3eb3ba20a424 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/jr2cp-nokia-18x100g-4x25g-config.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/jr2cp-nokia-18x100g-4x25g-config.bcm @@ -8,7 +8,7 @@ dma_desc_aggregator_chain_length_max.BCM8885X=1000 dma_desc_aggregator_enable_specific_MDB_LPM.BCM8885X=1 dma_desc_aggregator_timeout_usec.BCM8885X=1000 dport_map_direct.BCM8885X=1 - +sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc dtm_flow_mapping_mode_region_64.BCM8885X=3 dtm_flow_mapping_mode_region_65.BCM8885X=3 dtm_flow_mapping_mode_region_66.BCM8885X=3 @@ -1532,12 +1532,50 @@ ucode_port_15.BCM8885X=CGE6:core_0.15 ucode_port_16.BCM8885X=CGE4:core_0.16 ucode_port_17.BCM8885X=CGE2:core_0.17 ucode_port_18.BCM8885X=CGE0:core_0.18 - - ucode_port_19.BCM8885X=RCY0:core_0.19 ucode_port_20.BCM8885X=RCY1:core_1.20 ucode_port_21.BCM8885X=OLP:core_1.21 +ucode_port_100.BCM8885X=RCY_MIRROR.0:core_0.100 +ucode_port_101.BCM8885X=RCY_MIRROR.1:core_0.101 +ucode_port_102.BCM8885X=RCY_MIRROR.2:core_0.102 +ucode_port_103.BCM8885X=RCY_MIRROR.3:core_0.103 +ucode_port_104.BCM8885X=RCY_MIRROR.4:core_0.104 +ucode_port_105.BCM8885X=RCY_MIRROR.5:core_0.105 +ucode_port_106.BCM8885X=RCY_MIRROR.6:core_0.106 +ucode_port_107.BCM8885X=RCY_MIRROR.7:core_0.107 +ucode_port_108.BCM8885X=RCY_MIRROR.8:core_0.108 +ucode_port_109.BCM8885X=RCY_MIRROR.9:core_0.109 +ucode_port_110.BCM8885X=RCY_MIRROR.10:core_0.110 +ucode_port_111.BCM8885X=RCY_MIRROR.11:core_0.111 +ucode_port_112.BCM8885X=RCY_MIRROR.12:core_0.112 +ucode_port_113.BCM8885X=RCY_MIRROR.13:core_0.113 +ucode_port_114.BCM8885X=RCY_MIRROR.14:core_0.114 +ucode_port_115.BCM8885X=RCY_MIRROR.15:core_0.115 +ucode_port_116.BCM8885X=RCY_MIRROR.16:core_0.116 +ucode_port_117.BCM8885X=RCY_MIRROR.17:core_0.117 +ucode_port_118.BCM8885X=RCY_MIRROR.18:core_0.118 +ucode_port_119.BCM8885X=RCY_MIRROR.19:core_0.119 +ucode_port_120.BCM8885X=RCY_MIRROR.0:core_1.120 +ucode_port_121.BCM8885X=RCY_MIRROR.1:core_1.121 +ucode_port_122.BCM8885X=RCY_MIRROR.2:core_1.122 +ucode_port_123.BCM8885X=RCY_MIRROR.3:core_1.123 +ucode_port_124.BCM8885X=RCY_MIRROR.4:core_1.124 +ucode_port_125.BCM8885X=RCY_MIRROR.5:core_1.125 +ucode_port_126.BCM8885X=RCY_MIRROR.6:core_1.126 +ucode_port_127.BCM8885X=RCY_MIRROR.7:core_1.127 +ucode_port_128.BCM8885X=RCY_MIRROR.8:core_1.128 +ucode_port_129.BCM8885X=RCY_MIRROR.9:core_1.129 +ucode_port_130.BCM8885X=RCY_MIRROR.10:core_1.130 +ucode_port_131.BCM8885X=RCY_MIRROR.11:core_1.131 +ucode_port_132.BCM8885X=RCY_MIRROR.12:core_1.132 +ucode_port_133.BCM8885X=RCY_MIRROR.13:core_1.133 +ucode_port_134.BCM8885X=RCY_MIRROR.14:core_1.134 +ucode_port_135.BCM8885X=RCY_MIRROR.15:core_1.135 +ucode_port_136.BCM8885X=RCY_MIRROR.16:core_1.136 +ucode_port_137.BCM8885X=RCY_MIRROR.17:core_1.137 +ucode_port_138.BCM8885X=RCY_MIRROR.18:core_1.138 +ucode_port_139.BCM8885X=RCY_MIRROR.19:core_1.139 port_init_speed_1.BCM8885X=100000 port_init_speed_2.BCM8885X=100000 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/sai_postinit_cmd.soc b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/sai_postinit_cmd.soc index 26466f89ae44..20e19b8faebe 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/sai_postinit_cmd.soc +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/sai_postinit_cmd.soc @@ -1,36 +1 @@ -phy set 3 reg=0xd134 data=-8 lane=0 -phy set 3 reg=0xd135 data=132 lane=0 -phy set 3 reg=0xd136 data=-8 lane=0 -phy set 3 reg=0xd137 data=0 lane=0 -phy set 3 reg=0xd138 data=0 lane=0 -phy set 3 reg=0xd133 data=0x1802 lane=0 - -phy set 3 reg=0xd134 data=-8 lane=1 -phy set 3 reg=0xd135 data=132 lane=1 -phy set 3 reg=0xd136 data=-12 lane=1 -phy set 3 reg=0xd137 data=0 lane=1 -phy set 3 reg=0xd138 data=0 lane=1 -phy set 3 reg=0xd133 data=0x1800 lane=1 - -phy set 3 reg=0xd134 data=-8 lane=7 -phy set 3 reg=0xd135 data=132 lane=7 -phy set 3 reg=0xd136 data=-8 lane=7 -phy set 3 reg=0xd137 data=0 lane=7 -phy set 3 reg=0xd138 data=0 lane=7 -phy set 3 reg=0xd133 data=0x1804 lane=7 - - -phy set 6 reg=0xd134 data=-8 lane=1 -phy set 6 reg=0xd135 data=132 lane=1 -phy set 6 reg=0xd136 data=-8 lane=1 -phy set 6 reg=0xd137 data=0 lane=1 -phy set 6 reg=0xd138 data=0 lane=1 -phy set 6 reg=0xd133 data=0x1802 lane=1 - - -phy set 8 reg=0xd134 data=-8 lane=1 -phy set 8 reg=0xd135 data=132 lane=1 -phy set 8 reg=0xd136 data=-8 lane=1 -phy set 8 reg=0xd137 data=0 lane=1 -phy set 8 reg=0xd138 data=0 lane=1 -phy set 8 reg=0xd133 data=0x1802 lane=1 +mod ETPPC_MAP_FWD_QOS_DP_TO_TYPE_FWD 0 128 TYPE_FWD_KEEP_ECN_BITS=1 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/jr2cp-nokia-18x100g-4x25g-config.bcm b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/jr2cp-nokia-18x100g-4x25g-config.bcm index cc6d41ea3da6..57e966b35315 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/jr2cp-nokia-18x100g-4x25g-config.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/jr2cp-nokia-18x100g-4x25g-config.bcm @@ -8,7 +8,7 @@ dma_desc_aggregator_chain_length_max.BCM8885X=1000 dma_desc_aggregator_enable_specific_MDB_LPM.BCM8885X=1 dma_desc_aggregator_timeout_usec.BCM8885X=1000 dport_map_direct.BCM8885X=1 - +sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc dtm_flow_mapping_mode_region_64.BCM8885X=3 dtm_flow_mapping_mode_region_65.BCM8885X=3 dtm_flow_mapping_mode_region_66.BCM8885X=3 @@ -1551,12 +1551,50 @@ ucode_port_15.BCM8885X=CGE6:core_0.15 ucode_port_16.BCM8885X=CGE4:core_0.16 ucode_port_17.BCM8885X=CGE2:core_0.17 ucode_port_18.BCM8885X=CGE0:core_0.18 - - ucode_port_19.BCM8885X=RCY0:core_0.19 ucode_port_20.BCM8885X=RCY1:core_1.20 ucode_port_21.BCM8885X=OLP:core_1.21 +ucode_port_100.BCM8885X=RCY_MIRROR.0:core_0.100 +ucode_port_101.BCM8885X=RCY_MIRROR.1:core_0.101 +ucode_port_102.BCM8885X=RCY_MIRROR.2:core_0.102 +ucode_port_103.BCM8885X=RCY_MIRROR.3:core_0.103 +ucode_port_104.BCM8885X=RCY_MIRROR.4:core_0.104 +ucode_port_105.BCM8885X=RCY_MIRROR.5:core_0.105 +ucode_port_106.BCM8885X=RCY_MIRROR.6:core_0.106 +ucode_port_107.BCM8885X=RCY_MIRROR.7:core_0.107 +ucode_port_108.BCM8885X=RCY_MIRROR.8:core_0.108 +ucode_port_109.BCM8885X=RCY_MIRROR.9:core_0.109 +ucode_port_110.BCM8885X=RCY_MIRROR.10:core_0.110 +ucode_port_111.BCM8885X=RCY_MIRROR.11:core_0.111 +ucode_port_112.BCM8885X=RCY_MIRROR.12:core_0.112 +ucode_port_113.BCM8885X=RCY_MIRROR.13:core_0.113 +ucode_port_114.BCM8885X=RCY_MIRROR.14:core_0.114 +ucode_port_115.BCM8885X=RCY_MIRROR.15:core_0.115 +ucode_port_116.BCM8885X=RCY_MIRROR.16:core_0.116 +ucode_port_117.BCM8885X=RCY_MIRROR.17:core_0.117 +ucode_port_118.BCM8885X=RCY_MIRROR.18:core_0.118 +ucode_port_119.BCM8885X=RCY_MIRROR.19:core_0.119 +ucode_port_120.BCM8885X=RCY_MIRROR.0:core_1.120 +ucode_port_121.BCM8885X=RCY_MIRROR.1:core_1.121 +ucode_port_122.BCM8885X=RCY_MIRROR.2:core_1.122 +ucode_port_123.BCM8885X=RCY_MIRROR.3:core_1.123 +ucode_port_124.BCM8885X=RCY_MIRROR.4:core_1.124 +ucode_port_125.BCM8885X=RCY_MIRROR.5:core_1.125 +ucode_port_126.BCM8885X=RCY_MIRROR.6:core_1.126 +ucode_port_127.BCM8885X=RCY_MIRROR.7:core_1.127 +ucode_port_128.BCM8885X=RCY_MIRROR.8:core_1.128 +ucode_port_129.BCM8885X=RCY_MIRROR.9:core_1.129 +ucode_port_130.BCM8885X=RCY_MIRROR.10:core_1.130 +ucode_port_131.BCM8885X=RCY_MIRROR.11:core_1.131 +ucode_port_132.BCM8885X=RCY_MIRROR.12:core_1.132 +ucode_port_133.BCM8885X=RCY_MIRROR.13:core_1.133 +ucode_port_134.BCM8885X=RCY_MIRROR.14:core_1.134 +ucode_port_135.BCM8885X=RCY_MIRROR.15:core_1.135 +ucode_port_136.BCM8885X=RCY_MIRROR.16:core_1.136 +ucode_port_137.BCM8885X=RCY_MIRROR.17:core_1.137 +ucode_port_138.BCM8885X=RCY_MIRROR.18:core_1.138 +ucode_port_139.BCM8885X=RCY_MIRROR.19:core_1.139 port_init_speed_1.BCM8885X=100000 port_init_speed_2.BCM8885X=100000 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/sai_postinit_cmd.soc b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/sai_postinit_cmd.soc index db5ad5ebb264..20e19b8faebe 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/sai_postinit_cmd.soc +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/sai_postinit_cmd.soc @@ -1,6 +1 @@ -phy set 8 reg=0xd134 data=-8 lane=1 -phy set 8 reg=0xd135 data=132 lane=1 -phy set 8 reg=0xd136 data=-8 lane=1 -phy set 8 reg=0xd137 data=0 lane=1 -phy set 8 reg=0xd138 data=0 lane=1 -phy set 8 reg=0xd133 data=0x1802 lane=1 +mod ETPPC_MAP_FWD_QOS_DP_TO_TYPE_FWD 0 128 TYPE_FWD_KEEP_ECN_BITS=1 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm index 5303bb263ba2..1da65733155a 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm @@ -1551,13 +1551,50 @@ ucode_port_15.BCM8885X=CDGE3:core_0.15 ucode_port_16.BCM8885X=CDGE2:core_0.16 ucode_port_17.BCM8885X=CDGE1:core_0.17 ucode_port_18.BCM8885X=CDGE0:core_0.18 - - ucode_port_19.BCM8885X=RCY0:core_0.19 ucode_port_20.BCM8885X=RCY1:core_1.20 ucode_port_21.BCM8885X=OLP:core_1.21 - +ucode_port_100.BCM8885X=RCY_MIRROR.0:core_0.100 +ucode_port_101.BCM8885X=RCY_MIRROR.1:core_0.101 +ucode_port_102.BCM8885X=RCY_MIRROR.2:core_0.102 +ucode_port_103.BCM8885X=RCY_MIRROR.3:core_0.103 +ucode_port_104.BCM8885X=RCY_MIRROR.4:core_0.104 +ucode_port_105.BCM8885X=RCY_MIRROR.5:core_0.105 +ucode_port_106.BCM8885X=RCY_MIRROR.6:core_0.106 +ucode_port_107.BCM8885X=RCY_MIRROR.7:core_0.107 +ucode_port_108.BCM8885X=RCY_MIRROR.8:core_0.108 +ucode_port_109.BCM8885X=RCY_MIRROR.9:core_0.109 +ucode_port_110.BCM8885X=RCY_MIRROR.10:core_0.110 +ucode_port_111.BCM8885X=RCY_MIRROR.11:core_0.111 +ucode_port_112.BCM8885X=RCY_MIRROR.12:core_0.112 +ucode_port_113.BCM8885X=RCY_MIRROR.13:core_0.113 +ucode_port_114.BCM8885X=RCY_MIRROR.14:core_0.114 +ucode_port_115.BCM8885X=RCY_MIRROR.15:core_0.115 +ucode_port_116.BCM8885X=RCY_MIRROR.16:core_0.116 +ucode_port_117.BCM8885X=RCY_MIRROR.17:core_0.117 +ucode_port_118.BCM8885X=RCY_MIRROR.18:core_0.118 +ucode_port_119.BCM8885X=RCY_MIRROR.19:core_0.119 +ucode_port_120.BCM8885X=RCY_MIRROR.0:core_1.120 +ucode_port_121.BCM8885X=RCY_MIRROR.1:core_1.121 +ucode_port_122.BCM8885X=RCY_MIRROR.2:core_1.122 +ucode_port_123.BCM8885X=RCY_MIRROR.3:core_1.123 +ucode_port_124.BCM8885X=RCY_MIRROR.4:core_1.124 +ucode_port_125.BCM8885X=RCY_MIRROR.5:core_1.125 +ucode_port_126.BCM8885X=RCY_MIRROR.6:core_1.126 +ucode_port_127.BCM8885X=RCY_MIRROR.7:core_1.127 +ucode_port_128.BCM8885X=RCY_MIRROR.8:core_1.128 +ucode_port_129.BCM8885X=RCY_MIRROR.9:core_1.129 +ucode_port_130.BCM8885X=RCY_MIRROR.10:core_1.130 +ucode_port_131.BCM8885X=RCY_MIRROR.11:core_1.131 +ucode_port_132.BCM8885X=RCY_MIRROR.12:core_1.132 +ucode_port_133.BCM8885X=RCY_MIRROR.13:core_1.133 +ucode_port_134.BCM8885X=RCY_MIRROR.14:core_1.134 +ucode_port_135.BCM8885X=RCY_MIRROR.15:core_1.135 +ucode_port_136.BCM8885X=RCY_MIRROR.16:core_1.136 +ucode_port_137.BCM8885X=RCY_MIRROR.17:core_1.137 +ucode_port_138.BCM8885X=RCY_MIRROR.18:core_1.138 +ucode_port_139.BCM8885X=RCY_MIRROR.19:core_1.139 serdes_lane_config_dfe_1.BCM8885X=on serdes_lane_config_dfe_2.BCM8885X=on diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/sai_postinit_cmd.soc b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/sai_postinit_cmd.soc index 650134e7e589..fd18216d3c84 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/sai_postinit_cmd.soc +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/sai_postinit_cmd.soc @@ -35,3 +35,5 @@ phy set 17 reg=0xd136 data=-16 lane=2 phy set 17 reg=0xd137 data=0 lane=2 phy set 17 reg=0xd138 data=0 lane=2 phy set 17 reg=0xd133 data=0x1804 lane=2 + +mod ETPPC_MAP_FWD_QOS_DP_TO_TYPE_FWD 0 128 TYPE_FWD_KEEP_ECN_BITS=1 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm index eb58c1ca42e1..4d6790d5398b 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm @@ -1551,13 +1551,50 @@ ucode_port_15.BCM8885X=CDGE3:core_0.15 ucode_port_16.BCM8885X=CDGE2:core_0.16 ucode_port_17.BCM8885X=CDGE1:core_0.17 ucode_port_18.BCM8885X=CDGE0:core_0.18 - - ucode_port_19.BCM8885X=RCY0:core_0.19 ucode_port_20.BCM8885X=RCY1:core_1.20 ucode_port_21.BCM8885X=OLP:core_1.21 - +ucode_port_100.BCM8885X=RCY_MIRROR.0:core_0.100 +ucode_port_101.BCM8885X=RCY_MIRROR.1:core_0.101 +ucode_port_102.BCM8885X=RCY_MIRROR.2:core_0.102 +ucode_port_103.BCM8885X=RCY_MIRROR.3:core_0.103 +ucode_port_104.BCM8885X=RCY_MIRROR.4:core_0.104 +ucode_port_105.BCM8885X=RCY_MIRROR.5:core_0.105 +ucode_port_106.BCM8885X=RCY_MIRROR.6:core_0.106 +ucode_port_107.BCM8885X=RCY_MIRROR.7:core_0.107 +ucode_port_108.BCM8885X=RCY_MIRROR.8:core_0.108 +ucode_port_109.BCM8885X=RCY_MIRROR.9:core_0.109 +ucode_port_110.BCM8885X=RCY_MIRROR.10:core_0.110 +ucode_port_111.BCM8885X=RCY_MIRROR.11:core_0.111 +ucode_port_112.BCM8885X=RCY_MIRROR.12:core_0.112 +ucode_port_113.BCM8885X=RCY_MIRROR.13:core_0.113 +ucode_port_114.BCM8885X=RCY_MIRROR.14:core_0.114 +ucode_port_115.BCM8885X=RCY_MIRROR.15:core_0.115 +ucode_port_116.BCM8885X=RCY_MIRROR.16:core_0.116 +ucode_port_117.BCM8885X=RCY_MIRROR.17:core_0.117 +ucode_port_118.BCM8885X=RCY_MIRROR.18:core_0.118 +ucode_port_119.BCM8885X=RCY_MIRROR.19:core_0.119 +ucode_port_120.BCM8885X=RCY_MIRROR.0:core_1.120 +ucode_port_121.BCM8885X=RCY_MIRROR.1:core_1.121 +ucode_port_122.BCM8885X=RCY_MIRROR.2:core_1.122 +ucode_port_123.BCM8885X=RCY_MIRROR.3:core_1.123 +ucode_port_124.BCM8885X=RCY_MIRROR.4:core_1.124 +ucode_port_125.BCM8885X=RCY_MIRROR.5:core_1.125 +ucode_port_126.BCM8885X=RCY_MIRROR.6:core_1.126 +ucode_port_127.BCM8885X=RCY_MIRROR.7:core_1.127 +ucode_port_128.BCM8885X=RCY_MIRROR.8:core_1.128 +ucode_port_129.BCM8885X=RCY_MIRROR.9:core_1.129 +ucode_port_130.BCM8885X=RCY_MIRROR.10:core_1.130 +ucode_port_131.BCM8885X=RCY_MIRROR.11:core_1.131 +ucode_port_132.BCM8885X=RCY_MIRROR.12:core_1.132 +ucode_port_133.BCM8885X=RCY_MIRROR.13:core_1.133 +ucode_port_134.BCM8885X=RCY_MIRROR.14:core_1.134 +ucode_port_135.BCM8885X=RCY_MIRROR.15:core_1.135 +ucode_port_136.BCM8885X=RCY_MIRROR.16:core_1.136 +ucode_port_137.BCM8885X=RCY_MIRROR.17:core_1.137 +ucode_port_138.BCM8885X=RCY_MIRROR.18:core_1.138 +ucode_port_139.BCM8885X=RCY_MIRROR.19:core_1.139 serdes_lane_config_dfe_1.BCM8885X=on serdes_lane_config_dfe_2.BCM8885X=on diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/sai_postinit_cmd.soc b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/sai_postinit_cmd.soc index b22dde093132..109b18ecaaf2 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/sai_postinit_cmd.soc +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/sai_postinit_cmd.soc @@ -12,3 +12,5 @@ phy set 8 reg=0xd136 data=-8 lane=1 phy set 8 reg=0xd137 data=0 lane=1 phy set 8 reg=0xd138 data=0 lane=1 phy set 8 reg=0xd133 data=0x1802 lane=1 + +mod ETPPC_MAP_FWD_QOS_DP_TO_TYPE_FWD 0 128 TYPE_FWD_KEEP_ECN_BITS=1 From f24a73b9bd28d7472003bfed8e349fe58eb7afe3 Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Tue, 30 Aug 2022 09:19:58 +0800 Subject: [PATCH 252/259] Fix vs check install login timeout issue (#11727) Why I did it Fix a build not stable issue: #11620 The vs vm has started successfully, but failed to wait for the message "sonic login:". There were 55 builds failed caused by the issue in the last 30 days. AzurePipelineBuildLogs | where startTime > ago(30d) | where type =~ "task" | where result =~ "failed" | where name =~ "Build sonic image" | where content contains "Timeout exceeded" | where content contains "re.compile('sonic login:')" | project-away content | extend branchName=case(reason=~"pullRequest", tostring(todynamic(parameters)['system.pullRequest.targetBranch']), replace("refs/heads/", "", sourceBranch)) | summarize FailedCount=dcount(buildId) by branchName branchName FailedCount master 37 202012 9 202106 4 202111 2 202205 1 201911 1 It is caused by the login message mixed with the output message of the /etc/rc.local, one of the examples as below: (see the message rc.local[307]: sonic+ onie_disco_subnet=255.255.255.0 login: ) The check_install.py was waiting for the message "sonic login:", and Linux console was waiting for the username input (the login message has already printed in the console). https://dev.azure.com/mssonic/build/_build/results?buildId=123294&view=logs&j=cef3d8a9-152e-5193-620b-567dc18af272&t=359769c4-8b5e-5976-a793-85da132e0a6f 2022-07-17T15:00:58.9198877Z [ 25.493855] rc.local[307]: + onie_disco_opt53=05 2022-07-17T15:00:58.9199330Z [ 25.595054] rc.local[307]: + onie_disco_router=10.0.2.2 2022-07-17T15:00:58.9199781Z [ 25.699409] rc.local[307]: + onie_disco_serverid=10.0.2.2 2022-07-17T15:00:58.9200252Z [ 25.789891] rc.local[307]: + onie_disco_siaddr=10.0.2.2 2022-07-17T15:00:58.9200622Z [ 25.880920] 2022-07-17T15:00:58.9200745Z 2022-07-17T15:00:58.9201019Z Debian GNU/Linux 10 sonic ttyS0 2022-07-17T15:00:58.9201201Z 2022-07-17T15:00:58.9201542Z rc.local[307]: sonic+ onie_disco_subnet=255.255.255.0 login: 2022-07-17T15:00:58.9202309Z [ 26.079767] rc.local[307]: + onie_exec_url=file://dev/vdb/onie-installer.bin How I did it Input a newline when finished to run the script /etc/rc.local. If entering a newline, the message "sonic login:" will prompt again. --- check_install.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/check_install.py b/check_install.py index ecd3a8ee9a3b..b8fc3936f751 100755 --- a/check_install.py +++ b/check_install.py @@ -19,6 +19,7 @@ def main(): passwd_prompt = 'Password:' cmd_prompt = "{}@sonic:~\$ $".format(args.u) grub_selection = "The highlighted entry will be executed" + firsttime_prompt = 'firsttime_exit' i = 0 while True: @@ -38,13 +39,17 @@ def main(): # bootup sonic image while True: - i = p.expect([login_prompt, passwd_prompt, cmd_prompt]) + i = p.expect([login_prompt, passwd_prompt, firsttime_prompt, cmd_prompt]) if i == 0: # send user name p.sendline(args.u) elif i == 1: # send password p.sendline(args.P) + elif i == 2: + # fix a login timeout issue, caused by the login_prompt message mixed with the output message of the rc.local + time.sleep(1) + p.sendline() else: break From 1f9321a1a9ffb6426ceb8fc8a933321e41314679 Mon Sep 17 00:00:00 2001 From: arlakshm <55814491+arlakshm@users.noreply.github.com> Date: Tue, 23 Aug 2022 13:40:54 -0700 Subject: [PATCH 253/259] [Chassis]: filter inband and recirc ports as internal ports (#11764) Why I did it Currently the CLI commands show interface status show interface counters and show interface description displays Ethernet-IB and Ethernet-Rec ports in the output. These are internal ports should only be displayed when the option -d all is used for the above mentioned CLI commands How I did it Add the port roles Inb and Rec when classifing a port as internal port. How to verify it Verify the CLI output of the command show interface status doesnt display the Ethenet-IB and Ethernet-Rec port when -d all option in not present Before Signed-off-by: Arvindsrinivasan Lakshmi Narasimhan --- src/sonic-py-common/sonic_py_common/multi_asic.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/sonic-py-common/sonic_py_common/multi_asic.py b/src/sonic-py-common/sonic_py_common/multi_asic.py index b74dc6816ce4..d63c698392e4 100644 --- a/src/sonic-py-common/sonic_py_common/multi_asic.py +++ b/src/sonic-py-common/sonic_py_common/multi_asic.py @@ -16,6 +16,8 @@ FABRIC_ASIC_SUB_ROLE = 'Fabric' EXTERNAL_PORT = 'Ext' INTERNAL_PORT = 'Int' +INBAND_PORT = 'Inb' +RECIRC_PORT ='Rec' PORT_CHANNEL_CFG_DB_TABLE = 'PORTCHANNEL' PORT_CFG_DB_TABLE = 'PORT' BGP_NEIGH_CFG_DB_TABLE = 'BGP_NEIGHBOR' @@ -327,7 +329,7 @@ def is_port_internal(port_name, namespace=None): role = get_port_role(port_name, namespace) - if role == INTERNAL_PORT: + if role in [INTERNAL_PORT, INBAND_PORT, RECIRC_PORT]: return True return False From d7f049ebf0fff0e40a0a8ef5b348d4fb4a89b839 Mon Sep 17 00:00:00 2001 From: Longxiang Lyu <35479537+lolyu@users.noreply.github.com> Date: Thu, 1 Sep 2022 04:10:22 +0800 Subject: [PATCH 254/259] [mux] Exit to write `standby` state to `active-active` ports (#11821) [mux] Exit to write standby state to `active-active` ports Signed-off-by: Longxiang Lyu --- files/build_templates/mux.service.j2 | 2 +- files/scripts/write_standby.py | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/files/build_templates/mux.service.j2 b/files/build_templates/mux.service.j2 index abc04ab30d18..ee1f8ce75389 100644 --- a/files/build_templates/mux.service.j2 +++ b/files/build_templates/mux.service.j2 @@ -14,7 +14,7 @@ ExecStartPre=/usr/local/bin/mark_dhcp_packet.py ExecStartPre=/usr/bin/{{docker_container_name}}.sh start ExecStart=/usr/bin/{{docker_container_name}}.sh wait ExecStop=/usr/bin/{{docker_container_name}}.sh stop -ExecStopPost=/usr/local/bin/write_standby.py +ExecStopPost=/usr/local/bin/write_standby.py --shutdown mux Restart=always RestartSec=30 diff --git a/files/scripts/write_standby.py b/files/scripts/write_standby.py index 86d50737b1c5..85b6ee8b04e8 100755 --- a/files/scripts/write_standby.py +++ b/files/scripts/write_standby.py @@ -178,6 +178,12 @@ def apply_mux_config(self): parser.add_argument('-s', '--active_standby', help='state: intial state for "auto" and/or "manual" config in active-standby mode, default "standby"', type=str, required=False, default='standby') + parser.add_argument('--shutdown', help='write mux state after shutdown other services, supported: mux', + type=str, required=False, choices=['mux']) args = parser.parse_args() - mux_writer = MuxStateWriter(activeactive=args.active_active, activestandby=args.active_standby) + active_active_state = args.active_active + active_standby_state = args.active_standby + if args.shutdown == 'mux': + active_active_state = "standby" + mux_writer = MuxStateWriter(activeactive=active_active_state, activestandby=active_standby_state) mux_writer.apply_mux_config() From 72852cdd02dc8f7ea5a81a834c6903af56621905 Mon Sep 17 00:00:00 2001 From: abdosi <58047199+abdosi@users.noreply.github.com> Date: Mon, 29 Aug 2022 08:19:28 -0700 Subject: [PATCH 255/259] Address Review Comment to define SONIC_GLOBAL_DB_CLI in gbsyncd.sh (#11857) As part of PR #11754 Change was added to use variable SONIC_DB_NS_CLI for namespace but that will not work since ./files/scripts/syncd_common.sh uses SONIC_DB_CLI. So revert back to use SONIC_DB_CLI and define new variable for SONIC_GLOBAL_DB_CLI for global/host db cli access Also fixed DB_CLI not working for namespace. --- files/scripts/gbsyncd.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/files/scripts/gbsyncd.sh b/files/scripts/gbsyncd.sh index a7eaaced0cd6..0948aaadc199 100755 --- a/files/scripts/gbsyncd.sh +++ b/files/scripts/gbsyncd.sh @@ -4,8 +4,8 @@ function startplatform() { - declare -a DbCliArray=($SONIC_DB_CLI $SONIC_DB_NS_CLI) - for DB_CLI in ${DbCliArray[@]}; do + declare -A DbCliArray=([0]=$SONIC_GLOBAL_DB_CLI [1]=$SONIC_DB_CLI) + for DB_CLI in "${DbCliArray[@]}"; do # Add gbsyncd to FEATURE table, if not in. It did have same config as syncd. if [ -z $($DB_CLI CONFIG_DB HGET 'FEATURE|gbsyncd' state) ]; then local CMD="local r=redis.call('DUMP', KEYS[1]); redis.call('RESTORE', KEYS[2], 0, r)" @@ -34,11 +34,11 @@ PEER="swss" DEBUGLOG="/tmp/swss-$SERVICE-debug$DEV.log" LOCKFILE="/tmp/swss-$SERVICE-lock$DEV" NAMESPACE_PREFIX="asic" +SONIC_GLOBAL_DB_CLI="sonic-db-cli" SONIC_DB_CLI="sonic-db-cli" -SONIC_DB_NS_CLI="sonic-db-cli" if [ "$DEV" ]; then NET_NS="$NAMESPACE_PREFIX$DEV" #name of the network namespace - SONIC_DB_NS_CLI="sonic-db-cli -n $NET_NS" + SONIC_DB_CLI="sonic-db-cli -n $NET_NS" fi case "$1" in From 3d8d5160339b38d1e157c805d1b5a6905c690390 Mon Sep 17 00:00:00 2001 From: abdosi <58047199+abdosi@users.noreply.github.com> Date: Wed, 31 Aug 2022 10:48:15 -0700 Subject: [PATCH 256/259] Align API get_device_runtime_metadata() for python version < 3.9 (#11900) Why I did it: API get_device_runtime_metadata() added by #11795 uses merge operator for dict but that is supported only for python version >=3.9. This API will be be used by scrips eg:hostcfgd which is still build for buster which does not have python 3.9 support. --- src/sonic-py-common/sonic_py_common/device_info.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/sonic-py-common/sonic_py_common/device_info.py b/src/sonic-py-common/sonic_py_common/device_info.py index 1ca725cf8996..f8c892bb9e96 100644 --- a/src/sonic-py-common/sonic_py_common/device_info.py +++ b/src/sonic-py-common/sonic_py_common/device_info.py @@ -477,7 +477,10 @@ def get_device_runtime_metadata(): 'chassis_type': 'voq' if is_voq_chassis() else 'packet'}} port_metadata = {'ETHERNET_PORTS_PRESENT': True if get_path_to_port_config_file(hwsku=None, asic="0" if is_multi_npu() else None) else False} - return {'DEVICE_RUNTIME_METADATA': chassis_metadata | port_metadata } + runtime_metadata = {} + runtime_metadata.update(chassis_metadata) + runtime_metadata.update(port_metadata) + return {'DEVICE_RUNTIME_METADATA': runtime_metadata } def get_npu_id_from_name(npu_name): if npu_name.startswith(NPU_NAME_PREFIX): From 648ddee39c269c58e83e34178544bb8056793199 Mon Sep 17 00:00:00 2001 From: Dev Ojha <47282568+developfast@users.noreply.github.com> Date: Wed, 31 Aug 2022 11:08:32 -0700 Subject: [PATCH 257/259] [Arista7050cx3] TD3 SKU changes for pg headroom value after interop testing with cisco 8102 (#11901) Why I did it After PFC interop testing between 8102 and 7050cx3, data packet losses were observed on the Rx ports of the 7050cx3 (inflow from 8102) during testing. This was primarily due to the slower response times to react to PFC pause packets for the 8102, when receiving such frames from neighboring devices. To solve for the packet drops, the 7050cx3 pg headroom size has to be increased to 160kB. How I did it Modified the xoff threshold value to 160kB in the pg_profile file to allow for the buffer manager to read that value when building the image, and configuring the device How to verify it run "mmuconfig -l" once image is built Signed-off-by: dojha --- .../Arista-7050CX3-32S-C32/pg_profile_lookup.ini | 12 ++++++------ .../Arista-7050CX3-32S-D48C8/pg_profile_lookup.ini | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/pg_profile_lookup.ini b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/pg_profile_lookup.ini index dd405301f720..5b4482bc74c7 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/pg_profile_lookup.ini +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/pg_profile_lookup.ini @@ -1,8 +1,8 @@ # PG lossless profiles. # speed cable size xon xoff threshold xon_offset - 50000 5m 4608 4608 33792 0 4608 - 100000 5m 4608 4608 49408 0 4608 - 50000 40m 4608 4608 36352 0 4608 - 100000 40m 4608 4608 54528 0 4608 - 50000 300m 4608 4608 55296 0 4608 - 100000 300m 4608 4608 92672 0 4608 + 50000 5m 4608 4608 160000 0 4608 + 100000 5m 4608 4608 160000 0 4608 + 50000 40m 4608 4608 160000 0 4608 + 100000 40m 4608 4608 160000 0 4608 + 50000 300m 4608 4608 160000 0 4608 + 100000 300m 4608 4608 160000 0 4608 diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/pg_profile_lookup.ini b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/pg_profile_lookup.ini index 8ee7a6714b1e..5b4482bc74c7 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/pg_profile_lookup.ini +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-D48C8/pg_profile_lookup.ini @@ -1,8 +1,8 @@ # PG lossless profiles. # speed cable size xon xoff threshold xon_offset - 50000 5m 4608 4608 79872 0 4608 - 100000 5m 4608 4608 54528 0 4608 - 50000 40m 4608 4608 39936 0 4608 - 100000 40m 4608 4608 60416 0 4608 - 50000 300m 4608 4608 61440 0 4608 - 100000 300m 4608 4608 103680 0 4608 + 50000 5m 4608 4608 160000 0 4608 + 100000 5m 4608 4608 160000 0 4608 + 50000 40m 4608 4608 160000 0 4608 + 100000 40m 4608 4608 160000 0 4608 + 50000 300m 4608 4608 160000 0 4608 + 100000 300m 4608 4608 160000 0 4608 From fa21a82d227713e7e2dd7ba035a65a9b85d6f8a8 Mon Sep 17 00:00:00 2001 From: Jiahua Wang Date: Wed, 31 Aug 2022 18:21:59 -0700 Subject: [PATCH 258/259] Add sai_mdio_access_clause22=1 in td3x2-a720dt-48s-flex.config.bcm (#11899) Back port #11303 to 202205 branch manually --- .../x86_64-arista_720dt_48s/td3x2-a720dt-48s-flex.config.bcm | 1 + src/sonic-device-data/tests/permitted_list | 1 + 2 files changed, 2 insertions(+) diff --git a/device/arista/x86_64-arista_720dt_48s/td3x2-a720dt-48s-flex.config.bcm b/device/arista/x86_64-arista_720dt_48s/td3x2-a720dt-48s-flex.config.bcm index a89c3e442753..033a19a9f06d 100644 --- a/device/arista/x86_64-arista_720dt_48s/td3x2-a720dt-48s-flex.config.bcm +++ b/device/arista/x86_64-arista_720dt_48s/td3x2-a720dt-48s-flex.config.bcm @@ -300,3 +300,4 @@ sram_scan_enable.0=0 stable_size=0x5500000 tdma_timeout_usec.0=15000000 tslam_timeout_usec.0=15000000 +sai_mdio_access_clause22=1 diff --git a/src/sonic-device-data/tests/permitted_list b/src/sonic-device-data/tests/permitted_list index 3ceff4511fdc..5fff42e5099f 100644 --- a/src/sonic-device-data/tests/permitted_list +++ b/src/sonic-device-data/tests/permitted_list @@ -317,6 +317,7 @@ sai_verify_incoming_chksum phy_an_lt_msft xflow_macsec_secure_chan_to_num_secure_assoc_encrypt xflow_macsec_secure_chan_to_num_secure_assoc_decrypt +sai_mdio_access_clause22 system_ref_core_clock_khz cmic_dma_abort_in_cold_boot hybrid_pfc_deadlock_enable From 95282c8400b9ac7ead852d59bcc946375c1ae180 Mon Sep 17 00:00:00 2001 From: shilongliu Date: Thu, 1 Sep 2022 13:22:46 +0800 Subject: [PATCH 259/259] fix --- files/build/versions/default/versions-git | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/files/build/versions/default/versions-git b/files/build/versions/default/versions-git index ce9fabb4e23f..48bc4285d300 100644 --- a/files/build/versions/default/versions-git +++ b/files/build/versions/default/versions-git @@ -16,5 +16,6 @@ https://github.com/thom311/libnl==3399f520bae2231c5b6a6c2adce52b383292c520 https://salsa.debian.org/debian/libteam.git==f8808df228b00873926b5e7b998ad8b61368d4c5 https://salsa.debian.org/kernel-team/ethtool/==5ead2b58847600ea0ccd0aa76b5bedce678f17ee https://salsa.debian.org/kernel-team/initramfs-tools.git==dd16eade69ef76b304a369fac2f6c0de508b855b +testHHHHH https://salsa.debian.org/sk-guest/monit.git==c9da7ebb1f35dfba17b50b5969a6e75e29cbec0d -https://salsa.debian.org/ssh-team/openssh.git==dd1e52af266a53671b162ddd95e4f6b01513e8e5 \ No newline at end of file +https://salsa.debian.org/ssh-team/openssh.git==dd1e52af266a53671b162ddd95e4f6b01513e8e5

abxfAqKSN_G1RzGuFDuSI-+`>w!R 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 %%htS`j9`N<^boy9?H|g(B5BQnS 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 aWq&?^`sfzq%OSpcbR6>a)JM1c?EeAn=@01u literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_4.8.0/bcm56770_a0_cmh.pkg b/dockers/docker-pde/cancun_files/cancun_4.8.0/bcm56770_a0_cmh.pkg new file mode 100644 index 0000000000000000000000000000000000000000..b037e12f3cbaca679956ef4ef855e55a66b6652e GIT binary patch literal 4324 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 X`e3Qeo!pVyOzd z*jRSaM*+Jq9J??ayD%KPFdVxu9J??ayD%KPFdVxu9J??ayD%KPFdVxu9J??ayD%KP zFdVxu9J??ayD%KPFdVxu9J??ayD%KPFdVxu9J??ayD%KPFdVxu9J??ayD%KPFdVxu z9J??ayD%KPFdVxu9J?^Q)8SJbE){n1L65cJgPzKs&i#w|q2o{Kx}N^JejlB3`wO`8 z-l(m&`zg+TW20&ERkFb)&&jeGW3+eG6<#ZoJ%;6h&VIwEpBB~#&bpsp5gU!9*_?mzFBkMOMcEvtPJMKcQsb#>yLGz;oCWUn!{UrUsrtF+V(YM zUs5nw@9!R2JE?Z0@Kps*D}7XL49&@P_f5q&uT8D7Kc#KoQ2fKS&GK~e^RDltZ0p>J zrj6I0ap#)+*QH8P`vuEOzFV`~^EmR2R3G%sHBj{bhgAQ&nG8%}3BgJlkgw{GKqdd9 z_RP$7&-X^qo>BcP*H+8xN2X;}{)B9OlJfg3gB4#zPjTlAqAjiX2Kg5wisy#= zwdA5bLlnOvyESy;_i_CZC}SC=-<{o)$I;=+ihnk{yup8*+JA5MM4tYn8t_xK zfBF0=pW<1i9raXs?9)Zvhfhi;lWO^4M{Xyr`j9qN^`+wJ`*i7ux zXai=0M~QccpsJ7KnDBj!UB^CsO8Qy1HZeDeMbW1_{6EyE6QobVg7ztX<%8a*tnHcC zKPbMKaZu%pnX{|Lan-nulbY!t}zW3ZY--kpeeakw}$uDNv zWpAeC{Fx3iSPN1XGJR72`m09r6F#l@3Tm;%w->F7=a@ElKGO!zI&JWLsSO@vM~7Tj zRG+naE`WaZ&jrwTr4X6zQ5BaVCkA+|l*H#&$kbP;LjB+}4Lq){((E^=@WXKwww1W~SA zRWZEKhYH55Tgyi4&*UDVI2;z|id2C?EN;SFU%Tm}UR@dV0L^PCD(Q z-n9knMOLYG)HqK>4))(hgKw~4n4=jVd+o@#QGzxxL0dIib1Baia&Ur!|DzttMpnu& zKwjh|zNujFd%<`S@xfJ~+ggdp$pM zgO9Hq;;V=F8X>M|m;CgHFORjbkLPot(-(c}(>cfTan2TfT+?osIO{>5&fe3<)m2^M z145j++Ve9n`#9%#KF&Q@A7`%i@rfbM`MFQuJH%&(_?{uYTZr!-;_HX_dLhnQ#@9bC z#K(mA*bv9YeSXG;kF%fgamJsIv!3?xokD!a5Z@uhw+r!UAwDC-r-wLeGhhGc5bp@_ zVIjU&h;ugX%VUl0<0C_SM2HU$ar0N~XUrd=b9!-?RM>XA4#iw*9k>`eak(@J{bvoH=|$H^lhn7Vk|wB>e1Si+AC9uZiyv zo~bzRg7EIm^UC`*@$fv*$3>?;tB2==-p_ixkH+_VAB_(x^US6ZbxvxcAY-y^kjDeKc``Zyz)t_dc35@1u!( zA5Gl*XyV>S6ZbxvxcAY-y^kjDeKc|JqltSTP2Brv;@(FS_dc4q_tC_?k0$PYG;!~v ziF+SS-1}(a-bWMnKAO1q(Zs!vChmPSaqpvvdml~Q`)J~fJKvw)N0aV-G;!~viF+SS z-1}(a-bWMnKAO1q(Zs!vChmPSaqpvvdml~Q`)J}F0^h!2A?|%N{N6_s_dc4q_tC_? zk0w4`;Oj%bn+fu~$4j5*r1#nrW%%ZYv8gw%)<2ate~Y2B=!5xd71!-sq@l~QeCV|- z4I65ttyiyaU~$EM%F?iUI()XncX9Y<9sab#A96VU$;$t(!=H2b_Z|K{ zhri(P=Nte-Ei#PaO~Z1?A>te-Ei#PaO~Z1?A>te-Ei#PaO~Z1?A>te-Ei#P zaO~Z1?A>te-Ei#PaO~Z1?A>te-Ei#PaO~Z1?A>te-Ei#PaO~Z1?A>te-Ei#PaO@rV zmJlqzq~6z&AuwO`QJndYbb`O9wyfgu44&tZ`iTzzS&8(c60{={G};o&J~lz4ZIO@r zX~+#s5X_QHn`9prR>*ap;v460Y!~r$+Ta;8rQoGq=p)w2Jq79`y(5u6GC_lv@r=%S zwrkGlVotSkNC#(b9i=PrYX!^n?UVhz_TM#2zcN9)K0&)KLAxPAyDCAOp~_;t(-Sm3 zrqqpZ;{rBw5BxqYFXxk)c zJWUkko0OpGamQ|a;}Y$-IzhW8LEA7<-bM);>-8ufYxYRPUL%b$5NRV4G*z4L8*N-{ z_VcDMA`Kw;_YdjAI40qvzbS|JH27^3eA?2A`*KKUoH4HZ3fKqW!~WXYQ4K6z4} zk96dVG};S6;$;BIrq%_ltSTjC)%KKjj?;)c{~Cv6Qt8bG*8_GWEdPVp$q@(Ei11Z_ZqMjg!A$iR6g=ak4`^_dK$V@LBkoBa#V z2jy9+D!Ki$REt|~_66vZ--7bv*7v#TJNii0Mbq^rJdEg(Q6V=E^oH2^d_?;wv8!0u8c-NV7EdSVb`efg)eLr82E2E}b9iSfjXc&5 zpVQ{S^3ujX3>M#wMY*dej&7O19udv-17F@?UGM5BaN^MUrsD+tS^EE}NQck*4x7LZ zs7K_y4EAgA08a}19^3NGe<{nZ+q3H#>NBBU`^Gcn(C^l+rEW~G1F6^gopt)2Du2~J ztM(y3VLxri@2uTj!-rGWC_xp^xHfn;XoCkCh6$_<%T%-he%8dBoTv48pQRdYU_Bpc zBN8DVlAL(Sees=eBu&vHpkmUj3u} zyt~HxYS;{M)=;Dq$iuf>jixTm?UQeuT7dT>C3N}%dyf2*OXwSy&^awhm9t3+o%5O$ zKj%;>`lJ&2#1cB+aHZV*q`8oP#v@g%g-} zZWg5Ia-mJSEB~4jI&!DVq5o5K>>x$=YwwlB6W87%<@Zoibo{f?;UiH03W5~Op9>NK`2{scLeNTuAy9@By<~x3*cuF@vD4}Z#Y48ip1G@X6AXUyQ zC3MU;#V=RZpbO0d<-aOO@juql)Wf=tC(o#VU+W!VvmFQ=13 zOQ&5YiZ(`1jTkM~ae~r2^c04bVPzWsNlITwPo-F#_Qx_7R?aU-50sA{fJI$C_OYnT zyuL0o7KY3X`>C)AWNDX|vY!>88^*<7OUA`b{|mC*TenqY`XG!g?+aFyOmS@8UzeA@ z`G0wAc^|ZTLQl8UZ3jI8i+Y^AA7c+2>=bb29Dsd4^M#`MSmF6k(tw$QHCFGFP1Jk# ztd*G8px-30eKl)z!|!tV-46eX!@unCdmR4n4xi)juR8o;hu`M#uQ~ithd<`2 zwiMtS`hH*ERII<(NZi^kG+Rb(W)6jZwqV77WZ8|iTk`L0&^Jd<&$8LIIgR)^ZSZ{D z@z|Q%%CY#lj)(fOE#tBHd5*{CZR4>x)33>Fw8%qyX$#jMz1iG96Sw`frE^wh`)kte zS!>(ZV^5qPnLWW1?dezg7RRL8r2L%K=i}_D-F)o5Xb<1)<~!Zwv-VLZfj(P83pC=u z1i?SvVC}b}z8zA;*&mapVO;R&Uc(AJu=3n3Sd~CGN8OzGB{W0$& z8xL~-_Jmsge)2DLMINh*a}wi&Zu++L9YebH7i$;fryj~gKg1~mApE(b;2}OtQ0yt1 z>1!rv@S;1);vLWaV~X?dl? z=+hkCmrpyqj?jOVjyjYl>S(P54c(ZI9_WFNwpPAp=jfUA+Q|GJQ)~qt?NvhGw}ie; z34Om3I{V>Ny=G&)BkOID_hr!^V~{IrD@$iQ|NeW$9)#b(<~y@5$YJpvXWlDbc6PB2 z<6inZ*VMAPw`BQy%#>sGeJ<3;`La*HB9V^HM`;jq9;iLQ7(D#6Te><49^M`P&mJ)nZX6cDX+;(o^oE^C5HnTA&C3? z>*{+UWLi#e)Njz&;QSspc75|{$i7CSoqPR?cN?1DOM0?izO{ojbbqybzVcG%sThq) zJW&5n5`44HPuYZ1q^zY?GkQV?mVcmd%CP)L2|r$7XXjSmQ}yzYpJ3&IQ=a8NK=^S2 z%P%ySkLTX3EXG9C54w)D4mlCp2AtDKFXD>kXFry{fsmO0!sxeIF9!}=pY zn<|L3JrXp|nIhj49nHNqI*E0s+K4QX4<9=~bmUn(kv=*>8syFmFkXp63<+lVGU6rL}+Uh{m@Ao|vPxc5ScPYD!~F z4O05awKHnW0R;Qr8}g9;2i;pbJFlted;8Yb!Ae7?{##*`VRPm%;c{o0ec$ZwsyCaf z@h1z4?K~wxJ6&yPw{6Huu(qu#9NFXdi(=cV+7fkRZNr~;Y1@B@Ft_Ws+Z4@C6W1@* zALnKl<-SX#Mt>kPeGu!g@9W|JunjMxqWO0y_?{kV%z^gpHhddlrEBypo9wzAM+e>> zAbK59M(p2pWDncuZ6N&1(E@ApFyRFI#uIs$5cvN6yYyh+ubZp1Cj}=a`u2nb?W6>4 zW`cH@=8o9L*arLNAnPvt^*FWZ>)Cg*e=MarL||>)Nolmv`sioEnPY6sj1|t>W4DAH z=csR^eOft`L9lYr)eu4K>u8_W_v9sy?|asHajaQ8;ivzjUds9&yKB|=%p>@2>wB|z z>suvZ?t15Jg>Jevov^+kl<8z`rEw46+KfEdytSG6nP6?kw-Bt&oNqFQy!}%~nGW7l z8o}&;x^Tviw}oRAw>FOuE?3*IcXUAcX74Bfdp|s38^P2($*$qWRGXIOB)DfK59v&dD}Ia zt&Q6&J^CEVvpE*|unX_wNVhh>OqyVOw^p(?+4!Z+^riI^>u=g%ZK8e1*wZ#y8|dfQ z2IkyWZJ&6&i}anfk#$0BBerO5TvNCozt+#z z#)FjpmSCFtsVBDCs*UucZzKJVOuip!leHn$PreOiYvyNDZJ4X_j!5{CBNMd!rEwc) z_zr@t1)}euEv%2Mf8yG=opFXu$8l1oYsLe?j{*8G`YNwGe1WYE@I?gcfATVimg#P; z(w-FTm+(!kbc9{|am$*=WVZfV7@aXr7q-n&=VtRys%*l6@-}|0!TQ_UOuD!6XcwcE z&K{<$jpWD1&HoZ-ooI6keofUi?1Fx3wN8$9Ve@t?9qp|$%`Vt)_%T&w7h=!-!T~LO zpUGr8tD1+gQ*>r_!kmR1WjbVRp+nOdeh*tNYcq3}Z?nzIRb$~`^>mpXVAllm57D2m ztu)%?eH;AN@2R~3?TEHn<`0-738piAB|0n90rNrBfk+L1zlDS=-VJG+l^Lg#IG3q#u|9ula&$mfcHvECLxy%l*?bQX=W@JVO?Y0q{s9KNV zb8I|EKW{#_tj%+k_esH_iGH;<+juS;3svKrv4C8rgECw7I`QKh9W%fBe(uRSd#>`b zmRUP7=kw*)xX1Wdg4WSu-|?c#CYXL^2?uOk(EonUh`xfg!~lWmhd!gdQ6IJ!%WncG zlj#F}?jtZ87$F>=UN*NsskFI*QNh1OnZ?r5zfp(zXnaqUnf$H%9d;etlNni1l>13|bUKWgOG4`!a->=G2sw2k!0D;NK*eCA$Rnbx%m5u$VGqVHc zx!7jP_c|qR{%$U5f)VPu*d`nMwE0g0zouIhd$F=MOjlj84fuH92JFJOK~a4Tsd=u) zdM(;=tMSLYM8CAMW$%yZNBSnVp(nP=+Q9mac`LS=v1RKM=4IMkX1h-+?JdEv3BR?s zT2>~Pts$)M@w2V;gr6ELFnh*Nv5xWQX2|L7+v^RTF$S&O^mUxOe7kM#YSr$!Dr2ui zyZ3Q6ZF98QH0_Qy%{tiHwJ6RPV!NrZP}l}%r>Y_ayoPhu~ucekz0s4@O151Ta_ zdPBeTU!2cKGd|MEOPP@mJBu{Rj5PW%((ZKkpjk`Wa{|l>)JL0*Mm^N8VVYmBe6jhA z1oZe!!&MdOSC^!3r?RleXHL}IRPij1RGrJhShVp#UiMzJcgGU?4kh%xOXypc(6=g~ z;}=r$OfR8x4=lyc{gD(MebYv+H#$AicK>`AYdm;(#|%2pk0_e!_seDjei!_<>?`@VFAZmHX*g#x#?P2G zJojz&a`N?9y_``lFYDAx=JH+5vDw>BhUMx!S7x{7_g5$rob`s`*ty}1RqzM0Z{=gu z=-4~>DcJ@2m@ph4YB+siIDK%OjE^hN?Y#WkLhr=U4M5=j`bb?V=Tw3H1`XqkVEwKp z<^J3Jpj4mVbC16*W&ZmJr5_|{%yTqS75U$+5v9xTgAq4>jfHSu;1r#bm&r7S3<~Ya zbewn(7Q}UBm5jDF#t-42{BN2m+EwN`%qdGY^fp%MRUHa=Pnvib{@p|VBRv_RrMeI^sni1BjNOM)a9;=unv2kCe|@?5!NwNZ5WcRH1>nra# zfsK3S$LWG7llc|=FMgs*#&HXwmnkZL^Mnjlbz0w?q`c<{m{)tM7t_P0%KKqKnI7<$ z_}6x2I$yll3w~ljW!g-6KO$IEGMW7x<@$;-)RS?<-WEMCtV~C%4AVzm66x z>^M7eA!Jxz^|L=*SQ!pi84EhrXDaXTMIeLC71lS$EQDUl)_*;<(PI}vhO+f~Pi2^~ z2-kvTbHnsSSVx&n?z9N&C>wi>1+(K9h4*CM{HXXhS%h|clFDMuGuqiuPi5Lg`Pp(W z?D$?vWz+<>O8|TCi#TVR%*A^OxN@HJ%5R(JIndxEaGtY_uEeJc;#n(al#zz~k+y4s z#(E+0ab_54$QfzO1(C+NVx;lj4QC>>=}>`)lRt$R3J*v^JBDF45t>D;9Lr2F<>uA~X;C>p!rc;H-zT ztTX?0sXVDs9glzS zw2fR+qNkMo9wu8`Ccn!=uXeTHqm(u{f9kh;ntea1Na>o-##zdK?Yl~;F>#3M!$UA0 z34To2SSnHqpKG{{CHydfc7g+ks?4RdPO{*~Cphyte&`J6r|?JkD&sXjWj@M$mW@-! zC&9+3$;wzJkPdG4Oa4KEp60i)Pkz=gHugCuB5W#PtvTv7V*T>Afw8uMKlRh=FkpDy#s{k!-7=BL{6|I80P_1|W{_|=sb zAis@$^5fHO>@SS}zbU)DrT<6H1@ZrnC|}-A{cZ%moy&R=9|YLEO1l5v9?zGUk6L~H zK*h>KzW#K{{e>@R-dnXiKo(>}2Kx;YlauR5^_`av{TWT9Y?5fpC(hYg{Z|G%__wsMw1Tlq#>JUe-~qj?6w*%i+>P0^_jXI6&q>Tu2*jJ~tO zIRi5KbceH=rS8Yw`2{i|hkc)nwH*De#zYK=StX$(Xlndu_MDN-*DP# zICU6~A2)m%hu?Q&*XQ@p8&8~4CTm%)gZ8Uszn)j@a}~{L$UeA^BNu(cb8*A!IM3;jy?<@=y2L$bYwRi z*$qc_!;u|6uAJ%lb861_pd%YszM<#a295E|71%&PxvS_-IPtz}JniSZXMDdbHO}~L z8P?_ST`RcaYMqtq3k>8ZT&{RlQ^;fbW}>cDJYQ&ohu^8JD(A*F$~m@ z3)|r7Y=dV?8$4UL!Lv;pJoxV_J>%D_c+PBthjCL?4)aVE&t7fVhJGHWvK)P;vy$he zHhA<2tIBdtXoKg(HhA<2_{zGDX@lpeHh7M1gXhXN`s=DTcrI^)hu_AnvW=75;5n;} zx|nmT>S9k?#WSr99?qt!%3*G=;+ftC4{N%ra+t5Gc$oL9cvxpt@$A?J4{N8YaA6jd^-n8sS-Z!hUPr)wAA#1%Q8@A=jv zJbT&qv(&g=R5-ycZ4c@OmD;P0aU*S(A{Lbz%ITA#0i8`ICyp zx(0lui@UDnc)x`mPy9}$<+b$~d2P)Njw}-d)XVQjPStORAqzadO{7!9yv`<_vGGCq zeY`5U{qN%~Zn@c;X(2GA?oZ2J(ElpQs(h{e3UT zC)$vM_oPe?_G>9Q;4wMiK?YyXMQzl>KGN#hQonhVss|pc2cB5Z#ckBX9@y&HMQVe1Vfron7*P=`O-6!ky5Vt-N+U0kpsU!NkSXWG^&Pb!~$pWtYcB9|tV|PoO+|~c_ zEED6TPYHd=5_;bf`k<52<*!siA6!BoQbMO)Hhyjjc8gE2Ga}=;Iq)!NM4np$&wxw2 z^UMxBsk&|rJgK^F3p`dAy|Au;_Hp**{TsB$I-1WcamHePi8B_%u{pz6cQ|J$Mj!5Q z$~C&s25xg6e$wVVaDUE(el4%*dQNDY_ak;j@llNj^Lf<&8*L(JyPZ++o156A&Fk>^ zZ-$Rk9Dm0+voc?~sB4+=cM2X3a;5t2tAQugcaH=f>pNsL9XuL%QguBRcv5ve9(b&- KJ0IJ=-~R`4Oy|k~ literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_6.8.0/bcm56870_a0_ceh.pkg b/dockers/docker-pde/cancun_files/cancun_6.8.0/bcm56870_a0_ceh.pkg new file mode 100644 index 0000000000000000000000000000000000000000..0f10291d3890b43e596da32cc5d1f8c64ce6d0a4 GIT binary patch literal 18020 zcmbuF3y@@0dB^V(MIP&d@)QJCz<{gZ%^Rw1dFkVF(qkTPtLSS280glH74rNEM4LRJzjNfh$`ok#cAXL@#) z;#8gK`@iS)o$q|lb7!v7tjxT#k}b=&+?5@$|FVz0CeyRZQLo&epJfl-bI%UFd+XPB z|Bb`^QQ59~y6XQPkY$@s$g*y&UDnrhJC(BC>h#L0gVk=&!(JzEcI$bsD7($Pm(`~7 zvfXJ-3Ko@Cvs$+EZntdY-Px?su6N5dWj&uP>g9%7Z>Fql$ZG9Ir5w!RIxZlm0XN0dYjsXSOIChmZt1gX2kZ@suQZ?s$<#o zWLvzi`oWH4wO-aKsjdS$IyEjDW3`zCts5Zu9(lXDWcf?4A^&sC>NiDECWHH%I+bKKRL8c`i) zRd-QVA;DR#DH5Ccq$qaFb~`gtkF46Qw99UP<|r`amIo4Ssx)14ySQ(yM| z!Jd)ohdAA>HK*ZEt14EBxQrc5l$Dve=4`ok2%R~E)(oLDhS0IU1cE3Ve2B!)ZqP z7R(1-Sv&8DrgFTTsuvr}nfXHeFJw(RMR%^=3%itPv^%xYVo+$jswFOEp+(O(I*T4QzefEf9Fn5GUORR~&oS&= zvgtxbq*f_66kRWP(sVhyVGH8qY_zpS<|X3m=Za1)b#@lH+G({hc(sc2Wtnw$u7le( zJgeg^oE^Ya8;?Sdy|~Pgh93qvnRf~?;SJ9|E$(y_?RVDP@kIKd`7#;UcHUfFqMT*1 zQNmpD?wJ5U^k#Xr>N-YmoDDO?okF84lOtg*i}jd^P9bi|wY8;cMMn$Onw6IP^0Zqe z5X^BIxeDjmo9i_5PHV0yw^?h%!^@m1HuHwgFt2DnVg|Wf1qtvm+5tI@(RRuouVaE^ z-P*vqPTr9y6XhtdSu9NQi>I3HhY@SEy-eV5eWb)mYre@TQ6~|V0qG)>o;R&#k;x{O zGm@Z+_9@r2zC5?+w6b%@{ig7Aob-@9a~f>b?$F6dl%Xs{1$~~o1NF99<31NkCy;id>v)>OF-DHXx(Yz7nVnM()h_;;Zl|%2e>g9N5(L~nUkT=?8%l+-i*>f5p zzVnO~E2kw|u*8|6`f51gxB(OEwT29rXRhNTJnt0k`lhVgnrw)ViU9V;xxV;hwQ2dL z)|?pcoPsoBI!KsdpOGb|H7x^gxPTQ^#RNY5To{+arp$#?kQ2ckIZbk>>N^b_QhmZ{i=tp-fzUD>-M$#dY;vyQyt`8!MM=X8k2*_tWRcEX zk-rnPdP`BU3+i2>B{wyXuadV;1jUQcNE7eG-&hrGB-ko+K%(sxBqU{-vKu!dF{aT; zqf5nnTee5Zfl?@S%erk@&xzILS&nV)sN59eVI58BrNV`3f%s_r%kJEyi%R0=5dfZL z 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 UN{N`*k!Sdn`kvL>FFxo00r?_QD*ylh literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_6.8.0/bcm56870_a0_cfh.pkg b/dockers/docker-pde/cancun_files/cancun_6.8.0/bcm56870_a0_cfh.pkg new file mode 100644 index 0000000000000000000000000000000000000000..7f8ac294e5b7d334be4a3b32efb1afb09323dec5 GIT binary patch literal 76828 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 L{H5D&e*FIdb5J3W literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_6.8.0/bcm56870_a0_cih.pkg b/dockers/docker-pde/cancun_files/cancun_6.8.0/bcm56870_a0_cih.pkg new file mode 100644 index 0000000000000000000000000000000000000000..3361d235bb0539d0fc945f9ab14305f52aa09d5c GIT binary patch literal 983556 zcmcG%36v#Qd7ydY?V0&9^X0x)W#m#-S&O8sMWQ4Xs+U!XC@qN6iV#Ai3IPIxEn&d2 z4N_#*qS96fZ3sz-EFoiBP19w&+l}3HPpTv%4lp#hu@7gC&rBj?BnA$X8u`qrnIo&_ zzc(V@i~HaE@)cI3jqx;!StyAp~h6)cwS&oP25B@g$*4ZrdLh16>UOws>fBXs`xmH(T zgZtT4ty4vqi1Qa#59i>k>aeqC-FL&%MhLCe;NB1k^h6MFOm9}^!|Z1 zW48V!@;H_xBZBIM43UH+7j zf3|7<`{Hr)zl{9V{P%gLpY3}8YRL2ao-qEf|N32A|90fB=6?V*{OZvAdm%39G4}63 z{%Zb*OEUZJ)ce<9$iFr|Zu~n__OCSY4}`<`*Zkw|zZK-K?!PspQBN20$Hy;TSU?x? zPgeePA^*dxhYP@~mp_N?%AaoJkINs`U#t&{8~^U6{yxw2v!{vw5g#0hzds^w{`V;U zFY)--k6&LmHTUQ1ZQ_62pDgrGTz>W<|0ApW<>T*$jMWPC>HVuA)YiWb`9HLJnAE>t z@9$Ch_apx=uD(R-Kcx2$^%;tPZG7DPA4=JOxQTzsHxBc^<{!8G8Akp`SNF^HxBTxj z_Q|kTQp3mY8EN7lROgKSN09%q)vR3p^Aj73ZnTO2gFajFkDEWEivNDO{M=+A53{ao z;xEoArQ@%^ykLCO`u{q`pEmyMoA^K6ApXJlrvB>{f7t~2aTy#!|y^2g_2K?__i zob0oVA8@lE}wkw07A&!fIu%-v?c0k$Il z@WfW|qaU^S*LtGAHtgSu{O?~acEQ9hZ$GT?_QRlp+Yr#?hjWmBcCf(=$+T;bbCCZ7 ztNZzHgWSK|Z0D&_8uvJ?cR#zKb*c>};YH8v5%~CNE?b5D_~94V-MJ@I-7vr^*SWL7 zwytUmsD=y3#N!`y9W#Em37?CBzcD|j@GDnNvs@;O&yhzvIG@Mo)LlGwjHg%pE+3E2 z{f+nqh3~tC{(MM^kNyDKaD|G9zrmmKj+f!P0-LmVJ3m}jB1z-=Q^fo%A^x~O-yOMN zexDx`rkSh-@sDbzu^H8h_*&MH9>#+7*Z#i7$hJ6qzD*7JWyBB4hn{PQ%7=D^FZQqQ zkZ-$xbtrrY=1+6i9whSbRQSUGnvienUqSr({`HGo55fM`gZTASyS3gc?Z1)HF?zcY zzwS>{K6Izd@5THh;-CxV+l#sXIoD@hz5xLpe=Aq+{@9W31HB9E;digQ^Yg4)8IQ!d z>hwj1n)miM;ZJ4k_ya1x%p`xtZ2Siizn(uYlH|X`Cib(r)+uq6f^fF3c0Sy~+~$Fe zJ%!9?Y_)Use-KpMg5_tCe}#F>^IBuuHJi|3Q&N1|R^bfQbDPbU;CGoXj#N%dg8A2; z)L}dJvjeSDyuQFIA+3|}F)vQqtCm%Nv0#U-m-#DWVm#yD^Y%+{m@DzyR>B5nV0-p_ zxZ&sX?9$dLo{>C0OOAK;Y|$&&o)`H+;MESq&j`Ntc~{71><;PvrR=;@|0&vMc>cxM z&HLHqty6hm@%XUU&YrC;p(DBgvwpa5Q}WO8MD=`D)nmDR;%}Md-+~sD!{IXc%EVhC z2l+3&wji!wWZ2thhmO_OBm^h^&LIDi>OZ&7TV^eW{+X2hv&g@q_%BUx|1LxSY|8#Q zQ|0Di>_RlVe{5S9~rtDur{v!V){(kn)E{Oa$@Gqt8 z--7%_{=4;J*xw6+@}JjTYF)hYzXkap{@4O9A*Ol$cNOgOzZLn5{C8`T4E)6&AoAb9 zzcpq5HsmkzU-FNX{|5eTDf^d^zsP^dKT`f1_?J`mZ%6(j|EppCgxMdI|NF!7aN$LJ zIjR18*w>Eyk9^GGRk<0S|9zL*=YI$C7x`ZemmX$+Q2rbEcckp!iTp+WNBpJo-@v~! zW&aBD7x^FYm&$(w|4PdKUC5vD(%FT-pbPf^hu7aG!?FB3-X73}{Exoo@um*4^1oZ> zU*&$h3+-nYgug-jyOIB~*H{+7WczQA&L5ptSE2qa{P{()gk2BvzxQJvCk*oPr{!2e zm}c@`oxeCy4JYRILHyw|L(;An`5*t7s9d?+zx{hjY3lTS$e)-0Ii8`l&d;G7&wsw< zgD&nlKp*md?A~!6^(yzLsQ>pPe_sC2Y5Yru{{1QY4LX0zncF%;j13be?B(O5nu@UKVBR^0<)5ppTo#s&3|rM^>F_4v2px| zQ}!Q0{%ZdF{y6{R`j4dSKZ^X-{P+EF{>SwnP1%1P@-Oo8znj~IU8MX+$FDf~vkv*+ zcdt_bvP*URT95qOc=@mK7x{1CzdmLEG34LF%YTi($bSR>v6TH?7iVW*JT>|Hc#OH5 zPm)pinbQlizc{t?_07#^jxj}6;V&*^Zhd!*Ipa-|Q}~(1eYbur-pnzk$}9ZC3z?I2 z{so1fUEFt)&cBHHEN|ba9f?~>;U6XCw;+Dr%PyRrf9>ZzXD%ezyWoBw%x6cJfBeR4 zsD&@G!U=oZ5WmQdR{uw`Tfo;`Vj1yU=~7cHw;l1b9&P@2D16%d@5FrK{I4i{+WhZA ze8`_Q^C9Vv-H1z4f5~2$FWD z1S9)Y{&I2lWCFt4llCM2J739?@&^!qEJK^0jD1?VKh3Wn`iB6=g>^4~6PjDY`nedt z3@!Dd%dSQm>>GyZ7U}-Fh2K264T)zZYlzhG6l76UV>O!2eA1W&fPkUtD1GK05+c6e<73_(b`iL;j1ud2#|0_b13={7V$5p>|fIPi!cYt7R~=!`zmiN zfXlTp;$K4khkxVodcWU3bIkr!qa}`i7=P>^BmY}c_HT{jALc*yj}iaYl>OV{_*=xk zEoJ{Q@)zw(UcI1oTuiw zM`N=8OS{Iu;??JJT<8z{&lvc(r|jRM@n;@52c6?WPbB`q=-Bb^K>m*h@xO*B{+$~C zwc?-DzcXe3ipD?k@J_uB#PdH}YgUOJ{|fRy`olq9|5@hspLGTM`cId}zfym=N%B8q z;NO+9f49cJt{-GenE%rKX~8i#n55BHH}dy>D6TJ%wa@ox{42FIk^RpY`1hpj->dPL z<3Gw=i}?2<{}Yk;I|SE9`ZWG>{OkTE@$XC7zaRPQuTO>N?y1p4B z+)4%yBmakfDDJOjBLD3VzidR~A3c4n2|@iKM!MG~4|_&Z_8&$5qWr0bOZUGWHz#X(j|Kj`{!HP& zUgs|#1fUMLFStJ>7Y$Y{|MkfK_-~#Z2goU2|LnVzKPqI`jp_WWGSeo1#*jaC{=&zl;2-^JiS=PnbXB$e%iYCUpK%n)7G}H}D z_McMy_iV^`a%lPX5cfx+@q3tmFqNm4hNh7JlRsom_sS-=56Yinp?Uc$!88LKbpHGd zJKFK{G44MZ9SQw0{5K%~uSETi*&n|)B7a{0agnAN6!BMnm{G={5gU>JgW%66;rGXi zJH^rTNe4H@^RM{%qtIastle!&*?(H+?pwjN z`Lo&3KUl-2{+p5iBY{7!|4{gEiRbS>pBUMH!#ZfQ_-{e}_Y=o|tD%1o|K(=>Tao{x z#PQ#T{GsabnUPGST>F+V^+f)QSEEar)6{<(@_*`wgS`H^Gz|Iko`QY-^PH6Z&q4kV z5c{9o%-;{U8h?L$)A*l@{KNS3`hPn?{Le%FaQu?<$I|~i6)T zK7ZE*+lDr}U5`xj|J=x`b1_)DNir(`^x<1GKV3Th@aU#z+ph?kfU3uJGshU0#rzoa zB$*_K_-%&^r?dZDdgIC)C$8K*;a(lQj@vjsd4*p*edMIm50Ls;Wfd$GmcN2!Y?i#Sz4&P zxO@Gc>=Vq*K3;eL>Nv*nDPunQ{o!)?)5hA_yWPxByl?I%DBT$A!2ZoDeE#-`{n?56 zuav4#O%UVad)-k{zqKzy9o0WW>F+S?zd-7rQT=n2{u#yJaVX=TRs9Q;{#nI;fz&^z z`iuO}5aoXk`JX!DWGLgGSN%o)Q~BqS|6iP0AoVY({v!XW{0qqcFV8qx%J>&mf06%G z{zc^fS7#PT{Y$F9$p0Ks{+E#de>&sjDC6Iv`iuOh@^3-@|M|=Useh~LFY=$tzZLoa z^%*Bm8UHrbU*tcPe;e}uFJ~4={mZJq$o~RS{+E&ecg{Ek%J{dd{v!XW{M(WL-<(+> z_3u#qMgCLycOd`2J>wK95L zzY+PbTAcs(D*g++LB>5ol>dD?|6H&FJpPuKQ2X@$j9=fU*nj&q{7<<*Y{2W03kDpm!-Ozq=T*TiP8yd1foxh0xdeQLX=Z{|s)n-c2 zGl={bf(ueq@gHjF4{b}e{5OyP5cY@o^Nz}YSmR#{FG2Y^toZxqzf{NH5$yk4#{B#b z@<*hodH#$b|Hp&;`8iSkk2ds&tx$_U+>mA1jbi^`|E2O@r|};KTbDP&1^#abwFr|{ zScm+dIJ4k%tn6j~8&Uk%H}r=MP2j&iW&g2;{%*wo8^-xFma@Ow(7zh-|DLhGo3j6S z1AlQ6Pmn+3$RCcs_53GzK5?R8u-ZCw6rOxb@^L;q<0{MgukQ_B9+4g9If&uQczmY*Vj2+GgR z4gG2IXLHK_TN?V)OXcdItTfG{f)6ZU=`rzOn^UOfB(k0 z8vn5QC#?S`k9vKMbCLh^Z;agqzb*;?e#^!&0G)^Zc}S}8$Gf-TnX*~G*Yxu|xb4XQ*c)ThFk7X<R$%9-*Nx2EQ;Z(n`8&_KmNv;p!?4k zSZ-Wc;7-;56D)Kl@ZYKWixwa%|6Qv8@4CXU5ajeq5bU^ z7Zv~)-b547xG3pX!d2qSPSTx^{O^A=TY&jzT*&|Y2~%p_;DQGJf7|Ym_+QY#ze?o) zjt2e^f7kIK_LlK~2lD?j;`r}w;1BU9@!#FRpDO+r>ii+@JpV=f7hoHlb&T`>LgfEV zKmJvh=TC=y{pX?v{yhIF{4Z+YFXB(&f3eP=*FP(4MU+2qxsAskwun)8G4g-GkN-gt z{}cA{-_yV!;!ongr-8qSKY{-{b^acNy26%3{Db^A3O>yAPUQdZi1YuF2L2F#68}pY z_*3Qo-Uj{<|7D8!??wL4634&Vz#rmI;$LmxPZj@Joxdycze;iZokji+`tc{L|Lkkv z5Ai4Q-`Bw3FMpt%w(R!n{P`IM{E7I(xq!{_cR%v~h97^|6~|wD|G5VK5PuT?xd#4z z{@eS%OXu&3_=fw+Q47LpWyuE-8%oApZ_BMc|ZQ9 zTl(F|{{cV$D=yFf6Q*0WKHq@`{yhIF{0}tn_v2spFzvfc=kJ$4RpD=0{#=Iq|D3q| zxx9ftFaIh0FK^&4;@@GKmG!N4MFW2*|6L0IE08~R`F~{te~3Sc|CJ5=sp9`0oxcY! zaQp$B|H6Uy?FD9a{CyAd{||2-=IuXK(f--7Xx;vKmCoPw{kgbp`^iiqruSr-05{=haj>JB3RuMy|Z)jEGy z=CTAhDR_=~{v`-g4n z|JNe_e;?F;{QUQ<_uuPu{t*8Y6`JGkb;$pzHxI)WW$r{@?&v8Qx4F86_KdANKd)`U}KgbROJ! z3-Pz<-iQ2y_>Cw~`1|+2+2_wZ_P5hj=AK9XUUUk3eK^y) zQhI-pZN5bHcz*`-y~|!Y&1-N(T^8}%{P(jF(HYAjexKK7os&_yJmPnGM?aif@}IGc zPG{O*K>W5>HdKKx9-@shBkzKXj&9mtMEoIQ{}SR;Z{HTgr}l3}{2+gpsNNsghWSk7 zCmFwt`Cc0@b;$Vb3ct+vFEW0I$|v>jMEuUCdrYzkx)DFff3o=WAU@>hESy#^?VI2H zox%Bz9i^v^Je2vEd6CzP_}kdy%ak$dL;St0f8htoLcHeG{VIQvzi^VO8$kR%);0^L zb*Cn7ANp?PQ0vZPPrcMWvB`Xa!2&dmJqj*h49ZO?5ouV}4T__XEcn8GiUmTxZNpX1T)zvGC%*Xw_ga{rxB`KKxO z-$}%8_lhrf{bJ};*n|}%TXjy#y7&WAh~Me8%x1?I@7!}&VOykBs2-1xl&0K(_)z|E zEZOm8W6JzZnD3WwWd74CpLGA)jQPaz--7wX^|!5-lT)r?>T4@-JAEzir!qCI203@@KXUS@L)5_#eq# z`^beqeg2cz?buPClLB8&Zr|1`7x*Z3%tv(51z2kpS;HZdBp-o82aZM_*aSi3mX4HbaE$Fhx-?GE4KEy0`mXr zo7tey;n$b#<6qSH&k_0;Q}!=m|D40Vr3}RAL-)18rC18Kfc^F z|I5h#IK1DU^8KjoI)5ep@NbH_zfyksHKOPm;r@2yPyK$>j#&P%LR$ak@$bO?5P!ao zRPRUa)cE5Vieba@vs3jaEk7$7|L-gL18V?-51Nh+93YT^QSLm|NdD1=K0f~vj2e2AGM!A z^!@mw#zZlm|F%Xqfc)BQjps~NxCP(1iy2>CC*!xO(;#moOf)8eZco(;$I_xSm{#@}mZFr2dgNId`L ztlodQng2-2{-g2y4>)>%d`MQd_bB%NEF4Rq+X(ryogjbK>HNhTyd;&X@K?t-^Z&y{_9nLAx-5!rt_CV9}MvPG3dsSfB1e*@qWdE0T9jNV*e#J zI*z&geBdp3*B?HA)SV|Ne7XJnp*K5u?L2rtA)44=a9rmfJ${9b+&_B!;^V{L)>!U1 zia+>sdhmRreg02i|J#8c-A{AOFC%&WM905;_G~tW{{-^?;v2sIKBE11Qsd%rxSL<2NJ!C*M4r zgZA6;o1y#}IK~fUcHI`_p9O#Mze#1R?;kyW`M)>y--7(TH?#aK)D_nsJLawPf2+p7 z6fHkPPso3K{s=!c_21gSUtE7A@ZYBKFBAH2Q~i0;2lWU0_@ATkm+A?A{9Td%2KjSN z%KqnK|Ib5k)cE`LPu1UFyEQ(~RsH!bQDpglp6dUZk!bxhbi?(}aD0>R^BVY5<^PQ8 zKmT}(M#|8CM)l`s5oGzl9r^R7+BtYCvUc36t;)Ya`*}v3#>6>pg|ltP{^1Y&doet` zL`Np;-+}zIKL>wT#{mCHc|5ODH0yRCfBt+f@8(7Q-~RZu6ZzMUxc*}5pFDq>>(-|a z`gS7!@Rb<-!e5y@@rYe1`|m>jUk(fhiTuw;{teFw<0OkFdgmkm@RfcUBL54p|8b23 zA7$u&0rG!1!29p#Z?LQcqu+u36U-ZD(sv+#FFKR`?hB>mRnqh6vr#@le+Kcpydp0& zm#Ci4%_4rgH_0pcm|rzrl^o*JKc6ngUp#+$==A*L^0=w8G+zPv`~1wU`drrsXfrXP0fCjPMs%*6~k& zPwQebvK{e*=Lt?_Zg2T+=}=+kk*7{SH2#_i*`KEa@dFYrAB-2!iTM8ZT{Pz587qiS z?cas?Bgam>R6Nwb{kiG)KQnX9@YWMgyaEp_n(xuwI{w5I;^VcBKis3?Z&P+IbN^n% zA3y%Zzbl{oMts30Q}!W#FgaO%_NUArNSQx~_&bk1!?!M3e1;Gop1&qNehnl3Eb;T# zBPyTt`Rh@{r+$CMI?Qjfza;&6J>s8-uVE$yD%0O3JwKKG4!mDZnFdDi_D`i;(oKlR z-6lOhv&f%8`wxGsm)y;H>@J=^_3{4caPy4HBLC;#JbYpI%Gq1}{HgQg<;5S$8T$K6 zXzrgw{(tu7;h=RA^1t8SKd<#?d?Q4@uH6vt32PYsNQOL=pKfym^?n&ciXDm!F5M zuYZ-0zu*2`m8`z|aX!e~pXKrXJ}gbD43v=nmx<%wg8Z{0e`?#+<3g^uV$1!*@&0!l z{}$xG_-0s$@%%}?J#m0qWB4y$&gU}oZ&m$+yL)N;+qC|*^A(Sq*W+Is&qv2<5^Y2N zPe$W^0V?JMHQ7fwhJQW&$^FZ!e?9&L{_R?Sxd!o;NOzt;Xnc$d8tusc@SBJ0M8eqmD^ANT%~PUQcUH?zSjPx$_8AO8yS z&-(t-HWCAI3QKh^sORJQbC`tS->;b=;ixX`59NR4{+S4k=T9yCk@0Kyb|L>GZ$|w8 zF*y$}tsD7^n{X6!$x_-9G| zhp<1qf97>v{u{=BNb#qQ|1kCsZ*al+7N@Ys^T6;h@;_dihUWM?g8dKh1-P}P)Ov(} zZTxa=e3PCLCvlo0NWdHj3 z+6wA>)}`#f9{XR(Jv>zg{Fim()hVSh>yiI)DSz;TLei|U2F5i0p3W2ey{s3D8J%b> zWq()WzpV4*@z;%y%4+)El>NuC{~nD5A0_g?!EbAf9!LK5;+dxWoWTBY{E}N4d^tz7 zpRXa>;HL@X5A_FeHcfT?Vp8M(yz1ha`cF3Sr@DSIh5c^_d0c*8 zhUNJ%Z$HtEUwhnE_vhWvT^n^Mk;WtyG8Z$tiHdovrfZt(rLwlc;&=cMd^ z4)R|j_CFW-^Y*t!@z;-EJ9OtF{}aUi=jr^lO8;h%{fwQ5{HgPQ2Kyh^${W|8XORD+ zQ9MEW|90&Ed~^Yke#7!}JMs_TU*WeuMEHiiJFx#!1CXKr4&?uI4Np^k?!^8zK26U~ z{kCl%5|6I7?K|cVrM>+<%xkO7{P=vN}HD|L4jneA@qilvnuh|HW?o zK3RMUnD1|3vh7<${H`NK-l(*+uyWw8>1zK(`H^GyW&Z_^X@*@1@dFGQzXkDWp1P>7 zY%AjTWJc>h67;npzIc8iLl^%t;`ii6SojPffj(=;{KAOSVV*9EQU~G(|F45A|2q+X zWbwp{#qsB74ozS9jC)P@*889MJAAwpsPM;6=U>fNdZs`Av)vyZ zY_|F_et%{^JJ>qKFAeddNcfJ)x5MYO9yDt=4;Sn(nLiRJuiqU`0k39mVQzgWSziY8 zr~UaQ{$_K27V`sdiGLaJmy>yiQ|AzWoi0AD=Kgui*TrXxIlqAUy7*jf9-kuOj|5en z^)q1vA%CDoQ6EaySHk>&B=N`1`7M|qcuV|Q^Z2wP{yJTJGUonmn6Hb^ggL*A`MUV* zGmlR@;`apmSAUSFJX_{1%AXF*5B4vKZ&ChqVt(K)@h!@q3gY+a;$u<%bYZ?OJ{ILq zH|Fc&V^RL}AbwAD)Pso{OQH~VE>Z%7UfSL<_F#q-=h5KNBllrd@RbJ0nFFM z$D;fh#C%Ne&vwKg3i4+#*baPcR!S^bD}UXReD1*fAb%wOv^jq#<_F#q{{ZlplUUcM z-G%u<{tO1&fls-@57UO-`IsM&B))6TzX0n1-xB0cDUv@+ zCBvNyX1fIQgZz>B!8ntp?8W@RTjC!8^0EmXUc`g>LH?8?`Lkq(7IV#FzU#vzelX7e zCE4db%n!UJeifL@$++Rv`w`y>@`pw8$F<0xIm{1pCCU%Sg;EK=--Y=hH~a>cYmq;f zVt$Z6(f=&sCh*0Rz8mvHSR_B)a2%dF#_$2m54qttFx)D9EW@8ccNyZ31dR1(#{9k~ zo!p8=`{Ct?zfQ-uXn(r`@p}S(f5d;@!v9Ld53av6iErWm9>foC=IV&}FFCM9_=SkSYvF$o@x{ZHuxyEM;eR#a2k)0=gAxA~2K7V3?i$1o z@Bges`12P0YY{(eDk(+yONQ=zw(AfdHf69iSNv}%A6yIm^(sFI(TZOHS@LgC`9W&{ z4gY;AKgdQJ{*5X>cxsb||9+KU@HZz7|0b0mzP-`g%NJz1eLtY#2OF4#f3t=kykL%m z|3M9({{uqkNcgvC`0Tj90QNR~TgLxGI{r85`13mc_v!ez>iDnI@ee6{&-LjmBK>XS z|6zsCg10`??7z3Ee8|i&K5z)I%pb;{mG19ySSAQi0rLM$kv-=?dFLz#N1I^5@xL4m z-=DkSjd8x{oMrzz`DaGM_fIh-zL%Wr&yiL6!2!77b=Lil_y^&m3d_lER1hi%3I! z`1bYVZ_IB|_z)k=xA1RO_)`V{AGrSNUa|jvqw_|{pCjW}Fjp)#;YXXopHTVCG3J*Q z{uE>4dd{yLc1ch^@cd_gnb6#yyj|hnM#}F{_!C~y<;(unLU9KCPZi;P`VN#2eyQYJ z#sBP7_@|j);ji&s8-7LQdx#Gk#N5A2<+D5(N8&SW!|zu4IR4O5WA5Lh@L$FLyKMNq zDj)m98=uVm`xHLp=ea@rFM)5KpB2tG>-rTwQ1KFiDg;{3>zf4<7c@fYVu zru+*OKIEtDFV2rl`R`Eq*dO)=^XyQ?pXTv5iBnzsOHh{v|3O`-}WEi+ino@T^Y^KI5Ak{a8~g89 z`OGg0YW_U`jrnsb-$Q(OW34&=T^c^xzI^{O_Pqkw$B^;U#alH zpOF6^g%AGz`5lS>RSF;c3Hk3;_~7r?|4IB0Dtz!K`_HH!6Ja zC*;3h;e$UeA1wTDQuyFc$p3)C2Y*~XSoq(p@WG#u|3QWSDrtV+qVP|X@;{{T!JjZc z=M_Hq6Y_6W_~1{NpNAAa_!II!tnk5~Fh6fo_~1{-|A@k$P>+wW|C%0uKdSH#k@7#L z@FD*A_-^5UyTXU~6Y@W<@FD*A_zwQ2^@mR=e270G|MwI=#GjD=NreybC**%h;pc+w z3%6Ml)IWb;#~1!G-*o%_fsQY(?*l))Kk8wA{%F?Sq2q7itO(!Y{;NAReE%7h;Qq{S zbPh7$-+IQG51(C0vL>I_@cn0yB>rQj{6AFq8K(Hd{f(yl&uI9HKinT^%Kxmw&oTd` zs}`T#JpL!A*^=L`k|g?!eNMw45D1BX#FYO>3O}RzL;OwocWL;FKa|g={6ALsQ2zXi z2MG4Bw`=FWFOTm}7WZ)KKhg0w2K=ym;P-zT^8ZxF7ym;`Dj$sR|NOj;KSk&N1sxw+ zBvJWh?0>h8FY3>7d>m%>&tUG+@kRZXhVSY4qW($4U(oU0ApTPOr&)X!75)^6^X^wr z%+>ZUJu4ru;AI__+SS`G(J@Jfh=I(fL2Bpeg@#l+!`VXsC69+z+VM*b8uKyE%K04%k z!PLpWPAYu3yx@n(+so@e&)wr?*z|I8vOmXjI{rTKTa@pa^1rU(2V2;GK3agMjQP)N z_@elStK#DMO~Icw=Kq<7FCH(J_}h&6-_Y>u?@tKxXU3TS=Nf+f{Rts|mofjFI{r7A z-_`0@yN&t(PRIW~=I=4)zo6s4PRIZEDnCg7NcjVIAewgHQu#pv9pS?bSf>2{pz?#` zyTlLHDfv>qt@1m3N`xOCa+2fOe^mLA_w$7LZvYNvIi>Q0Sg*i$$TtoT`wNvns>H`* zp6MF=rOIEg@ZtDt%Ks~s4<%&B>zvH>4eqT$rnx1WfA|j)lP`NH~}N!JIs^(@8BE3qw~)o{-H1M_|y4k z5&tfJ@FnyIm=vFn^7ym!Nn-Cq7A5|Tt7khed6+If87A|u;pe`j@ke}q?n}sbkpJ-N z+5h8H$LZq3*byoIpA`Eq-S%}5|5Dh#^QX*@Cphskh!64U^a%4ai}=@!@coyrd|>RD z6#r|xfX{Z|)ifS<5PxE|bET8?_#*qy67#dj|E|@d$7U$=|F{(Yxz)4xY;`E(FY~YA zt^b7kZ-&YIPeK0E9)D&2KE^s(jxIio-7m$T$HyztZC?lRh5s=+e}|pe&knRs@hZNk zzq!yee>orY%J5;^Wf1?GO+fTYWc)1Re|!TsK8K9Y5dWsvq1me1_7+^ctAy{uwTY3# z{zQ$x3q)vDVoUa0AcOcK{+wThKLUOh@%{J%+oj<%_RIb3rq(GQYo4FkIrxCHf@pV~ zuMOWK()b*E>+IPW|J?N_``P8KQ~cf`&VT5&v4fmF2Xkl3JdNx+Cx-un7XA)P*FO`( zA5MskWh|G;@I{EO>apBD_$x@|5BCoL z!YTFN1>}EX-F_bRhi`-UR|(3WBJwY}5F6EhuGP@Ln6iHf`Bz-FG@`Ujms0j` zLH@4Gre9F}r(c*b^lwSozZLn5{9lxFnePK4|Gnt=c=_Lo{J*$vUkUR64xaxr4*yQ zFM?xkqE3;HzwleVi&y?skpF$_vizir%)blyx4CfqRsH?)2Y#z}@%+0|_U}giJ^c8q z_y^^Wfq!?({yoTlk{^E+|DgOa@b5|4zZdz7{10xh2y>-&{57aQ_aguM*JU_mhVQ=> zg8F|S@)!B9`uq8B;NO?Be?RgU`LFl~`ETIgpR)e|@)!B9_y_rK;6ISE{~+?u!af?@ zpdY3`4n)}RNQ|W`qy4Fq%>DX;V+(kan|W_|7rYR2c;>^2C@o2 zv$$`(`W>n(U^#`qxVQ-X{bst#TzQ3`<^DgX@-Ha-!`%PpRQ^TGcaF|_JdudHlETmL zqvW?BetzNbLI$>P_VwU4Cd>6`#e63}>)qi$;cAH%v$r9Bk@HW{@ym$c>alSO?~u`s z_(Q?nZ{hE@-yMiAw(o@4zMl_n^s-t+C+0i({jhykuePGrXRaVVY~TH`eaZM;h~IjI z{o>H5xBPHsOk zwVd7ebLXw>T-kmfc9`l9H(1o192a^6|1$>u4olZRqw!xW{=tgHj(-OE|5*_K=b?T= z5&x{lf35f@_0Oj4pVRmU4_FFS$Azz2{+ANxe-8OSDdj(J>agqb8vly_fT#dFE_~JU zKe>NCW&eW4f35h7m0~P*{uhw{^HToX$G@oYUn~Ae{fjC4mo)z12u+B7=eY1)%YWu1 zE&of%|I1STD<_QpLKA$pX#AmitMxyVP43^4vVW__A68%MzY6|AXkzDoEAs!kl>hee zZ`1g%75}9EZ7KVgHU5$619Mz34)gyoToF%L|0yH?BU1j`p9i#S{3{+f2c6?WPgwpN z__wF*-=XneEB?W1#m@f@;7j9@~1Cl|9*{sG|OxKqWz&Z6uYM%`9E~h5iM9t;{MXun1&M$X#BO!tKbjy&&1t8 z%Kn4czp7VsZq~{}m2~ZH5c%_|q5a37X=?3x*M3be-!yYBE=tF2u90{Gq}#sKVUbF|2pKqB*ov}f4$b!1_^(I)Uy|Z) ze=%ds&_8bc$B_Tmr1;zWyE^}Rm}}cX#6L1VZv0*3e?p2sf9k`o8#nY1mfAG`$C3ZD zQvB`xCy+n8jqTZxapj=oVDPOh+>nOG!?VK8%Kr)E|K}&2%+&IG*%7G!be8S&XHw@s zA?u6!H20rG<74oLjKv?7(-F^rA7RaKisFHj6ox&kpF|iKiF#9(8LCV z8{+v_{QOZC09#<~ZbQoc8@2vbMGC4bkpK1Zam$~L$p49x+ZQS8Kbs8wgB5IA{%k`2 zUk&`J>Oa$3|9U+q+z@{J>*M3be;WBeF2&!z{;=85KW_XtBmZZl_}lw$(fYe#*lXW@ z{OjZ6#(xX)e@u$MefhuD&_7tQrun}W`9Cei-`;%nF^*4O;TKOIIq7sc7hbZb=ZV^d0OR-+5WmICzj$ov!%=su z{-VM^T0Oind*^L;^>1t0IM{V!S~Qv)$ET$7mk-Y`{$&369is!!=C24!1mpO$V7^r} z)R|imzwMR6a`x5ZtK}P|vdlO>Z3@4*d}L{%^5X9Gd$Lc|e2n8$#{75Jm?S;zn9thT zyO&`d#h<7> zL1OIRzc&Bs;29WW{s89JkB?WvKL!swWB%Y;{0Y~ZKeRUg>R<~P`wwG&z5I{9y~vn9 z(wKkc^ugNsoiTrOE&jydbWj`_^VhA-zqGW`D2avPaY)M zzHVdw+zi3?9bb$8+_d%fok09Z{dp36|}|nomz`O;Z6s4z#02* zSet+K;A3JBGv;r^e6PJqS-;wZ`LA?VPb~dobl)w*C%F*FU52zbjk;0{=|P z{#lLxjmUrXtalCSB(>>fczi(UDla`@~0y5$NprpsPh;31OEn~mOp+e6s}g1 z?;`SFIM<(>D*mO0{;-*A{^s#7VSk7}Ujr)t7L9)`zT96d&HVV)qWY5_zgn^XZyEFR zKgb{9Z=OG`$p0}vf2yY(UjEqUe_KO;*b24yuNd#YZP-89f2sV-8vkLib(vT5f7>yS ze;N5d{<~~;bon0kpNQh$-q0V;+=KYr__wF*-_g+Djrf1VIDa})_U~-yUyb;G&)B~+ zW&cV8e|W?u;%}b+732@c-$?#T*8rGF*VWLUCjYxq_U~@!??&Qpp8wq``}Z{TuSWdM z^S>u$|6c45=f9NYe=qV6%l{dN=J?y!&_9|#-!?9P`cn4qZ|EP*pC23h_owVX(7>On z{2W03VfpFjkA3+$*wCLQe+E;EG<|M0au+#mW~Gj%c72=aeS^0&|bQRL6|@w>!=;^ytMQ1cJ^4cB25`G4iLy(@rP zf*bPBX17^3E&*tr#y@PnV!|ILvgp3W(qK%7$ug$?~8WS$q-khlu@4h#zd< zrObTGcS`ex9l56#A97xc2qo-oL40ceR>Y^ypEk^AwE0=ae6P*E(iYi9?FygZrRNcT zhsr1Q??in2C+Z{e&|5+LwpU8k>>;S+5_R1=K4FA<5Putce3>#vy@rJv_dheXBGs>) zMe6%={t@4wQ{wmM^g1;6Cpa4ayTaJlt`C}DpLJNe{uzz`jmY2T{+5jD-vapRAW{6Y zI{&cV&*N{|1d-MIlU?7>Y5Z&Vhnxwo@0;JBkVF2*f0u2gygwwb^B3`l>-*ea#NYh- zS|0gR-yc$F=nn_^n!kDc3)mmx&v!4X`$LKv|8VyWua7fkUj7tSf70@^r17ua-v!#X z`)>*PdqHrh;@^V(k26;DCn$efQuc4f{&4)QT_5D}hq|22{S~dq|GwX4JNf+~yG8kL z-#*{g(BBnl@B5oyA8bq6zueHj8u2&3K3GoKzrBIKxIRdbKkdjLj$e`du|E;(Xy{Lq zKOHIicQ*8=$)C=Y{VO{EamFC}e*TC3eAu9?ApiRU2G#Y!E}ehae#`UU^7>#G@`uBV z=zM?s{O?BoY)7yF{sjfU?e(c{q*(a2l+o7_|Fje_ac8sj(@N; z^RHgye}90wP28Vv&JE}6!~W5fG_UrDcxYde&woSz9Fc!N_MfXQTHN0i88YhaNB$25 z6mflxApZxj|3pNSApQf$|3rYFBg+3l?0=9i04kll6aGQJKPK_#Ao718Ao%Y$E+yvS z8HRNJ)nF>_ANJ!JV-61?|L~H&?;kdF#Dr-k8^->cX>3LfBY!Unv)6}AIW4sx&PMqJ z{TamX@`?o3b+Ihsw|kSigs;};NYN<{VAiwFCso%f2mfa zDeMMHh(Akw{iQ|alU{#mMf@NdWY?G55WmYSknUe)%(vT|%G~XUPaU6*l=+=0^D8Oy zyAU6)50dV`-H1O+e0{J-<&$0?WbC)n|F47>+e3;*E9pFA=R9`T+3Z{Xqpy5K(7`pb zrXBn%-pgC3cr!mQH=p};vB#f<-~Va9D?3{Ms=tWZ=V0KE$2a$PnC$=cUl+T5EcXxI z{!m*^@}3Ox=l`N?j@9DgaiV)M|AaeEv*CFE8w~glYjzprzxeA&{etD$4}e_qbaxwk?zywrA$e?{CufTuL`Z%6*eeq9u$nV?7CaETWebGQTh zL;W+Si@#^)-+}zU`0L_WO^v|6Q{!LK`ga-SPp9e+H_ikdfqw=2-|Vp0wf^Hq{uR}q zH2z)K|8|HC_UFX}uj=c@hp}w%-G%(`e{F0ROzMisNA36DZk@kR7mKK!3UGfsK1T7^ zjr<>cZEOy}RRJGOULK42A|E|Ee=nFI>c{<~&2y5ngyF1^VA;n&7)gULKG>1Ygqh8Z2z*T_FQ5$`wj??e9HYh$0O zp$X34`>{XN-{8#^n(p7A{XsLj$*6whUwmtKVc zgwS~v)8A1MElHzY)evV>)fu!>v z#r{(K?futbe;$7wmd9T=zR6}-hx{Lp#{ZcnGspOOJ@)60I!{CY_1Hfee**t8-TUI~57ENu>IP!<{ zN7DFD==`-N;BU}PApd&(2VjlrDhZY|iT#iBnRUl6-dL*{-(*>n$p6vk^xL#MT6Bu0 z{Zm?hUHQ-bHRGEsVG8*_7M-4;{=5PE&+!Fl;wTeKh?Wk^fWCX$a!K3Hv`ET|lJYu>QOW`9B#!QtZFe*ncUyfJncg|1|P{I)bF| z-;Dhur$^C6F=keNZbtsp@!z8O%ht9-TadrR`<66hG~lq8rTgpP{;}DD!hTUZ_%AygyBs5-Gcdv32V>LiugU|siIv_ z8{&)iV`SLU!pecWrmOuE{kM$xJ*3fR@ZaL(@~6lClD-tD4#XGt$GS&P z?Yn*RcLxu3>^%O|%MVRhly9Aw?=PKf|EeH;{!s`bj&+5R_bm=ouUz`&!NX5(4^q|cYf|BlpU%IUuk=iR{AasAs=pGM zY>AaQcCdAd9~F7)%aCY-nP!7CoN@*pFJZYA##}yR(m71#cLn@Pgg8=@%{h$2=Nz8`}pS(-@iFFCadDITB;jK~uKR zUlQZYK8lEcGQhlzaOL`4U+9;$2TO?W=YOT1|EKKozeUR*tn**6m+E@9WH<)iojKOwd@c}2@d z@v-plLVUmchoy$)C+uJI%-p|Q%O9-sVgIt>_h|XB2MB*Zj5hpU%y&5x#m6;|PoI{L z;$y+@*YZ((EcgSMAM9UJ{#4EPFNlOx|LGEZ6dw!zkd}|)W5FLre82uvVYT`X>|aYf zr3||fEq}1ihy82Gkj-Zs)$-vId1U{x;jhDdmoF8?M~vg+lXvU2d=wuyIX9eROv^{{ zvEaLyAM9UJ{#2Q90W_}Vqxe|xC$xMN9}E5@;`{ag3ai!sVgIrSKbz9>q4qDf1Js{k z|FYq4(DGTG54|@0jcf7&4xKAL%|13^zJQ_lTPy(1grxG{5iAsc3;t#;p9S%UZ|GcC zd>MUg!TezVt>q8T&#L)0*sA5D_*n3_Y55Qeu^xU%Z2Zqbd~tpaE%a}nazwpSR%eM0~$}1L_YE{*vf7``Cr}eth8kF63Lb51fzqete*Q8{yAe z#ODIU_u~V{_XvMU^qYOW1M&U%!1-wew_@SH8}a@4@ET&ho44R!i1>bdWfO; zcM;;l{tNeiLUhiYh3DAp>kk*J{C-OQ9+eON5dF~KvVQeWl@I=O{7Y26fB&uU_cy1T zc&pZD*sJovA37p_RpmqZUkQ$naDcRo|E!ijSm#^TZyD>B>Tmw>eY(!KzJ4L|{o}jL zUlJR{>?4Ex{o}jLpSLJ~vWV{=-(|jQrY`2n>G&)pLizLK7%#zCWBGZ7Kj9Vk@ELx! zP`m`b{)yl3?i?}wk5>hS4+$glT^oK;<$H)fWy3G2e3qB}r)~HxDj&yx#)jXj@L$FL zyKMMvDj)kpw9NCTtneW}#rq9t^0QsxLw?G9tNiRx`5xk1<>#=%hx~+$5%~#`u|2+zD169InGZwe<^QP4_YmJI zKi8>zmY4ml@^ih)$MLty&oPA$`6>Hb<)^FivAh&>@`sNy=q40C zBZqDDJ@^Sp33DcavQQ<>=%Kp$qXU^ZG^07ZO zftd5B6+Yx=i6BK~`Dw~OU*%(ek)Njg z3l#oD@Dx4dCr{IV;_m}>Jk#U*J5;_WxIF)TeyWvnFIM>;;=@}e%=vpXe6)S}{$=d{PK6Kqm%M%X{$*>k;7`cEQsGai<%320(t8yCAyWQT3LpG&`C#GyUWE_- zg#3dFAN+CoVBvqY!Uums{xu38{9V4&M#={Z|7#UK_!IK4Q~0lvZr|$_{%KPF4GJIp z3AgY26h8P9@^4i5;E(G+7Wwmjg%AFO{F@X$_!H*m2NXW|6Y_6X_!H{!5#n!p{QaQ9 zKSavEMd3sI@$ucl|3eBN;!nt*SNITre0&Fg)B3}$3LoN6$Umg;A^wE?4=a3#KOz4% zg`W$yFTCjHZa9qb&Z7SL5glLn%Y4)A`%xWVwEqKNl+)nIP2A#)#WEg(-2MQnZycGC{<%7lX`%{G< z9%mzbi}vTwD}29ogRzzR{}E!F-wga6O850sm!(ZxGY) zvwKv&|NMf?4>yWfa*_{E z9pT0D{6}~Vcd1OU77qK}{wRMqQmnCM`z1JRRpO5bKCA=(UZLQ(?q~a2r})8&$48u+ z62v7$WSGqN@2v=bwf}ZlLGlkO5BA`I0RQb&;@2AmXcpnHT@wEXd_xd+a1(;WH?PU+ zr5v_T;(uR1neo^R;=gQ6($APhd`~}_@mPmlD#hngW0HQx4C3$8Pi8#UVSg$4)924$ zOMLqLk@?j5pE~|UnNJ@7 zlFTQMe^%bUj5_~wh)*5=yv!$$e?jJlX-oF)$lI4Z{u#ulj(=9>lgB?N^U2~Kg7R>^ zC0hPdSI`S7^PvJ7^?xt*2{zmPxoG>$(EP#OQ_)LbVH^#=vuxkzqW?c4(682R{#k}G zxru}O3>!Z3h(9ho57rL%2l;SjYVJ_@Vm0x5{Evc`KVReDVaYEce%1@!?iPI>57>%% zd|EJ{;{{pVT;T~mn>cu>Vf@pmiYZ>sS>&-*-E{x-zlT;tRDpNIJ4fzn$~oz=HXv_46wb-_M^@uvI@NmUI{2zVqhg z=T(UB$LCbd{|sM>1^>N>@5e{wo5trL;!kp4cqwxjpEE&xO!-$M{y8CTu^^wXZC`>J2$tlDE-R; zzE-iin-PDjn2V18LB#j>UphWq+>!R*^N9WD5kH7OEJf6xYsYuf?RzWY2k|H4A42>f z{$%_QBYqHnGX5tJ-;e(?+ zmHYqKPy81v?M%eaDE!-j?>J5sV#N79a1ZV%@b4G= z2cQ1gwTbvyJ-_bXgZ!71@pB6QVbb{I6+YD1at@h)LE*#0q5K~d9Sq|Cb%;IGaeFVn z{`&FD7Kffbm~8tNb^Iexc=BZB+xLNhUk&-$MBBHd@V^QEaIq-#e-!!uB-!?D(edXZ z{`VsPpCt2dMSN&`7V*!8`TuoRK?i+>y9X9GT~^Zoa681l=A&zK+on*XDc z|5u()xPP@Hem3CO{Q35U_%Po;F~39M{{)V`Rn`&4C!1Rl{J-V-x#O9qUrrYPPKE#d zCj4aiSyA{uf$~A){{yjqeI==Xm%{&k6Mi!PZiPP$@qzy~=*RyhDF2xQ+t-EifBdpc z;_|;okM;yOG{wcnHaelJ$e^}*<{Y&u|`)_jpkw$#%zij3| zs_^~tP4TbAKUw*(t`Q&m8^(XV%5M_?Wd37~_}Jet{;tCJ%g>5hej4px<0@a2510?- zrxAZb<%{wm;9HjulL}ugAL_^VJEQ!WM*J*O%O83BCfk2EH{#>?7;fJ!D!-Zr}41 zeiioLDihn6T>|Y7!SVP1gyYNo`{4N4lj!_zrV*d}NBJve{GAQ>0+0FkCHLReh|kOC z2tUW;W5B;y;j=u0_Mb`>@ZLS5{fF0|+3mo;9Q>D)#eYu&KAhD_{4(cXmYly=;h%#1 zhX<(q{|BE;u+8+|0|5kPUBS8ZhZ-2NV;LiknmaP6Z+lXHUu8v<#7XLYg z??L+jG@gX~EaVY?3&C{Yzx-E;_OEv};sesJ-vXb%uF4Jh$>MWB;Y0fdZ~x(4*#5(} zZ`CaRmo?&78}Jjx{|bc^om{q|elzWS5k z{C9b0qV4-0#D@(D<+CRi!Mq~yOI60ZRmLXx`Sp*uKW~(a*Im_sFCyggJwY<$zqbKj zFn#{A4gVnGXGMJ6ApSf)8Hg7w;r8nfiuip0(Oi=FT-}JzrG2GOT-4I6^}H-^1hM$7-JQtA73@ z*uL`$e@VoL(E9v^S7@D~ek13s)!lIwSe6h450!xxkfb^d&mAHV$n zIO4y=Wqm#`AL@K4AKnG|*_P1%6NvwHV*c+Vz9`PZ_#l6gp9%dL`_6du`F*a>JMng1 z<%8c0ovd>(|KRna`(Fxg@$j?P3v4+VQJy-3`N7YMx)_n%Ka2Pvf8F)h_Yu5T%NH%E zd=VdcEzO6DDf3|qE=2PuyTmL1-{Q3tzdO6i;8FP6U^qJd_b(Ts@2|+get}uG zP6Pki6qf!DL;f3S{WI8KoP51d(`UYaeK=uXCT0ID@-Hs6LH_It6DAkxlV`C% zasK2Q_y+>k{yFSVoIiQRzYOvJ3|aj1*q=E5g$Djq@h@P1;`kR8f1dxf_hVb(g`pXX}GW`zk5> zcOif8WC`M*$w4a<@BI8Jlv%AEG~o(#VgDK0{OLyi>^b4jsQkOJ|3$R^J;;CAkALXz ziTxMS)inM+*dMOtgw4+hH>Gy+UgXb~g7^nhuk!r2@bAU`#PJ_Q{#jA}RGn~Th5y^N z!Eki!??LPj*BU9~KZO04I$;0p4bQ(IaUlK{?I%OnpSb=r+`zvUU`zjD>`z?(8PWQ8 z*Ys`UKa#TlDE4O#Hgb?t{WKR#UHWd%xqxR@jR2jx#~eJ$e;H-kw2`61f)XSM#y z{##p}q&;x6gY3VK)<1{*i_CBT3_Qd3lcd_U>2t{c=pZXm<_}!Vl=7#@{PTAz|Geto zO6gxv{I%!5wRk4&DIkB?e@WwCRQ$E)ze%-g(-&2L()gEUf2=6@^pAEk|do8nKK|7|Jzmy!R2#OLp2|o9s`$ z|MnsOlI&l$Z9nY8`9r+__9Oosv421E{|IsZ4*;5JK%G~S@)z&V z6gQ!-Jzv~kbI3nS?4Q&4dxZWai3as9ER@n?koEyy2TKehI6(fCuw-(d%( z@`r~8z2WcfxVfmC&S6(d<>f-wodO30t*4`un;g8U&< zsuSQ?t$D88BMsKZ$LncH*}qlw2eB~xfg>7>XYNncnzDZx`Iq;1xp0SwIDv#)5TX76 z`BR3AZj6ojM#(|zk>WrvcGlyRFMBKiT%5fe~#F{3;F+)IDfj4KO^?_33~srTPOwjw>Be#z?=l{K-O;18MqH-A4{n!}S= z3_HmGZ~mUvKa(;)tMF;#lT-M#@yRQETK|H=r}ZzU%rB+PZ&CQP@o!c5wDE6K__Y3I zg-`3>o-)59Wqv2(SH9@6LeO|VTDhdKO-sgM-hMBD((I|$o^@8UEVsybDdw6<*%VK zO7w;^seH;sII4d`6O$h@Df6=`pL7%CRK7_V8qSkf`K0~@mEX|CNdl=+=1|Ey6%UW4FOQs(z*_zhHyMt3282;oV3 z_H1W3X#CxsGQTHfes9YBA;kCNPFF=4R{6%;Qa9sB%KTBx?>yUi_AF%`_l(qjI9{1; zy-v5HhT|ND`7f3Z9L)4Q6TD!>5L=rqr|>Cb!(XF<{b~6Hg-;uwV#@ps;#0RjXH(`6 zBL2m%(Qe-%#NYm9T7DVvsoOW&Q|5Q1%{Ggs_y_}qeZ>cQJo==%y(D1|9P;7@{%KVImF9pzYAe%CO zP~qF3Ge%c=C}n;b@xx{NIb^>s?J4s+Qs#H2%&(-(?@F29oie{CWqxnU{Jxa={VDSY zQszT>BR$`=xpwP+SQ6QN!`YU^-#S0rcJpdx@Z~Cc%E@ps@Gee?Pwfxa?Na4K6eK=% ze2OXa;YNSSpE~|6Df3$qpE~|+Df8i0lT_mm&(lbJ>iEFxASM2J_fogd$b92~Uxc1qU`MH$&`IPyEl=;P!`K6TkEh+Qi ze;qC2=OgTE4Po~4H>sq{(R!U_7aDf4qF^Ybb53n}x9Df3Gy^IKBpJFF@lfBzdn z&PNd$#E9o~3I3`SI&F?JeuK1YL44}?x2DW5BR+Nee|yUOj+FVGDf25S^Se^!cc;wnNtxf9 zGQTfnet*jRft2|U+auTiNlRyV8!G1i|Fqo;U>s$+KJag6H=9kGCYx&mw6HCq1SpV} zauHFc6-q$F6xv!UU|OJ7MF@z93b-w$1Vl{{u-=0gtaz&&yz4pJN=w08i|7Fr4PFpE z9u0{8ISSb~{+LUBdn>VLz@;3m$**K00W-V&)@+txT8ZNKDe8b2+Y`1AlCc>&L)nk531D_V`SI&mNyC@Y&-t4L*B( zX255UPZxal_*Ckf?^gYdJ^FLNcKgd6{pS5+k-p1%9w*vY8PXHP%lLZ3Ntx1Re3zmt z^&aqxuc{?Tf5EnXby{POc~^_se`8NE1-`4F$z?vv$=A!)55DBRc$&`&O<`pJ;LiR#yfd`G{fkC%Tc?CZDm@%#q#&G^aj{FwUr<$?9fCAFPm ziEH%!|6>23(f?Web&c0zD&TWp9WmR-%r$CRV~=^er0Jh~HXhv9q~FyyTMgA%xc6`e z{kI(Q&6xWB%wIjvNh*Q<#)EZ-FnOr13;i0C=-Yo8*8gqoKkLyq zO^7(X2YnSIFX2$dfCs^qxb&f)*rq38@2x-jcVC7>XODD{XG`8Kby{G zCnx6SuLXbTZ?`txsW_!oc0k{9T%|^O?oGQ7Wc7F26sG1#-z)?hlit}Xoy`0eGsH^f z_a@YGGt0I92>30LzA>lkXD0RABK<=Bu(2=HUot;fKjzaO=@;rRam>6ZKUhEdU6H;&DS&(73OS~9XxuYP?`?PtM1bP_*N(gnPy$>&o#e~Ns1%KAE= zQpY|)gs&#g=diNA&c}|%(twQb|Lf=e{K@kJwdik0uV=whZ$?`R`GUh`6twCRb|FS4w zuUg*tF+W{%VJ7fhJJa*^9%#OP^iPiR^ZC?SA>%pbGM|sPT=Mg$sQ=~QTg>yPxqNLt zWtZ68oWSD}9Won^)OuzunAf5jxeK6jv{uwP#~AAAMt*DJx- zp#EE3eNoBy?<<>+3%-|+=5;=&>&r}W{1oyzqjbJqzQyr_ve{_;J0N z;N$pQ3ch`iH~uRaKiRVRoCdzvA53krT$%o_pV$08-}j(@;_^K`($^2SzWJFk7iRL; z-~8W|u`{RY56hx_$JLKD^=I_Y!uTxlOXg28KF^5sHCw3PH8;#u;+vbUxybjo;`qVk z`|2p)>;Ec{bHH~sJiYwSj`U4oG3}cvV=wgu)SsU}MSpuul<&BjGrlou%m186U$ce! zU30@sP`_(uPSyXHNBLg<+wHnwm3-EA{WbeP{$%Fc{U80)wcE!u^tW@Pd`I6`#VG#D zDBsrKx;=XQOniT0!gRRljh|JKzJ9nezL_%iQeWirpZI=Y{uJZqby2?KYR>o>{S(KJ zssHfe{3+Jo)sen_c%gpR+%OZ=@7kGDjh_p`zHa;Gv9ZyZC+JI)_48gVcK_M`g+G4A z^b9w0{HzQ6`TfI%qp<&}>o=}>=kgi)=k%8E#o!x3<(BJR?Zr!GeoOwa zI6vR(|CcGpwdV(h;QYfS;CtJb0qyv{zUog&GvD{~Gd;gamGLhH-##j*ztvawhr{$` zCQ$z~dQOY#DV?9_)BCprW$RxLzE{5)lfJL7`craTU-SL^OwT`Cm8pM2q;DQuiJ#H? z=lzlSzX^O>)tI+@&HiE3^3~t@Tb%E$UuE-oGx#%RBn=jZ2p{t8v5{>vkM z^VpaQ`$KxZU%$DJo~-Zc%)2P#_nxOtF6VCq-$MEI_a=R#Ph~yZT)y;-zGzXK^<`ncw||U zQNH7ie=nbWo#sb={CoN2=X?2-9sk3TzIkj+g?(@QhyC*7|CW%yK`%Y)Z}7&ycS~=7 z?V>T8$NYxa`-M0DS1aY6-@yIzTSNZvlzzg0O7n9H|F)2y$#36dqrvl6*XFnHE#u}r zY?(6KcRYT7UzG2-T8NDX&kq>i%x@X5-`hXWmdPg<%x6*H{3PZx z66HItt}~V`lTR*~kMWD=C(++pk*}XtwN&Ka9_8D8=2*5)uf`ce+UZ)o{`To>ExG#A z`H9|@+s`wbgsk2F#Qy)m$$b5&jJ3^0iC;S3_ygtrJ0|l>>omUZ`sM3)BlmyqoXjt+ zv(zu0U#LIY|4^iF^3eI0I%V@QuMd{bXImw{pHJ!YCVW4-{trj`nF{LfS=oE8dHpvV zIetD;i62?N??>1F(I{V6WBOa2T@NzmhMr7+%jusjPg z|74W!^=F-rt7(7#)A;6@O#UVFZT;n6KN^kl9rJjTe@6e*O~Ovbcl9;nXY|kfeCrqc zGoGKkyCPq+75blw@(cMG&!0;3@#pEEQ!L+4NBNGcA87I^ohI|kFW=8Z`IZg&dTvht zXYwzZy!y+oU)v|~V|tusEoGLa>HlWZeqnyMzJ2n_>}q{T@8nGX|MGwve0}Qk)AEfQ zi@j4UgGOHSuHwOXl19%lH5Pi1Hotc(Z&n`e(k++x*RZlTXQf>zD8U_gCa=zC!Sd`hRu{PN598&SSxL%yDy)BpM7)80vMzwG!d zyMBFh62DCU&jtJcqDlMzx2ENrS_}QH#5euN_ua_;|Ly7d+9~S?`WtS)zB8GxtIq2G zp#R(PQw2w?cp1MCrRnygxY?@(pWx4*Dh^Grx@QxRL&@ zklz2cU7X$Kh628aXnxEi$MDIox=RAef_aXIr{Dq^?yI)@6-A4{0Bn*fUcA0 z?*?B7pqFFOS87<#GLu=p#e9nMZ9eAwaAZDvz>nKySnB)RFS9O{`u_aM^M7y>-xGYN z=zDKJ^ydeC><@dv*F_fc@q}SL%S^?5Jl~%m%m@94z>llmlJS|*<1p><_WY`!&*8=S zc6|1k*LNcGe>mjtEg7G+`#%Wz{UzhGcK?UqE0rzeuk3!vh@Vf%_&i+C^XHrV`^t{b zAAujY{a`>pKBk;ZM*mFf|IAbvKe_tS`6=s{&Hu;Xd;4p7-_2+@=;zG#y>xzha{nij z`Pnjl>HO}={e6@9rFG`>aVxBUe|g_k1pkpTzH656bo}D-9X~dr|Npd%Z^ut*&iQ<@ zCZE#zQ{?|>dEZr~PL=-8%J^B6&vg7L^7%RVCF_@~RCs)P+h4Q(`s>Bye>`DC*J`F>|Mz@Qo*`p!J(>E= zzKhvEnWg7u%uGG?t^C4(ef=@A|NmkVKcgRAbc*@(1m>IL_o9#W|8fdHSpT?|{r7K} zXE#%@e)NA8>8EuLF*l{^`H|ZfELU)V`J3fn2{*`v1EBVEs=|;hPcUP38R?C-MI@iLc#QpU;=npD3LV z^{3(d;h(4Qqv}V$w0`uTjr5J`?f)0gpO}1x^nYgkdY%5+tN%08$tyoUkZw|rmp}S{ z2VXxx?}zxl`8lfpGgGlYnDw_f|0M0(_eVvpzt4g1^@mbFV{knc*I&=i*ttqszcBu> z{(px2lzE)qM>P4E>-vYCjK4$AH~F;a_0IKX+x6Eq@1KdRKN-W%x0d*NEwHx={%*YgX{3-x3E4O939$6LN${ot3@ zkA8Ec?~k91PRCp~Q|b6Qwq*I5@!zN4f6^bhd|SZxwvWDV(#aWIPo?AEjGvsH>y1zQ z{;^0u4ZgSkQ0lvRr?mdk@oC2Ypn3mHq~8|l8#3m)dg&I&dC@;j|F$^aY#)o`e*pSh z`xJg~{TkP@|Nb;rUpJH4K9=`8z%R|;t3PLz()_*p{rP75Sj->m?*zXz|LNsp{X+ie zcTM3>osZf67MCyj^FqGa_S*4dbIBCe;A{2UTKZg*e?tGJIN!X#BCX%Qr+*c({XKL_ z-#(4LDDU^4m)7s!i}rga^K~~+QS}GrPhS6FQ~KsP%v4f8_>OlJ!vOnulN^5zc@cLslPbV&p&!v ze$NX1{uW0$Ze;z(NBYW}0y&sj(e)o`@^{=w|Aa_CqwF*-fAacIjP%X&U7|wYke4*| zPs9WB?fb{f_{rM(@%>|NSzmuX-88b&$@+SHmd@9{H$JnG{*p-Fpq`&GSN*BP&-nB7 z`=ciFmqz;L(bM(w`IpJ(Rgu2QUq@P+gQ>Tqesj~C{Csply8jPB|2ZwvH;?rEjE8ua zC4O6aOwcKs?hKHbRo2cBKlj~Jic`_syd&uITOk-mvL zV*Hf&CP6zD#%HvDPNbjF51p>>=O69AHqtLMK1=HNiZ_@3_{>I*&w)taJT7AVl=vBQ z7d!dmGumGs>1XsKr|bLqMEmDP`kHqgx3HbmHw%+~_qJKBGld!U{F45Do9N@0^QQ2N zP9BW#_4%=~{%Y{O??=_kH?DU>OQyp9gFdznwk7}ly{_%gBhY`=fFD;m9lRMo-c+>4 z^sYspooVJ3=4b8xmA>g(ANPM=AM#!8@cfHHzA3Tjn_J#wj=%a;PG1&kx4*FCe_gry zFP^qvPpWV~^RJPn)~tC-2{X!OP13b>>F!SFT*SLjSi?sT=*L zs_Ewp@Dt08ZhX$v1iq*9{Fz~&noo1sr{;46_kDnvK*TqxwISPFC_&FMU zcKyeKuk$y{H&)F5|B6>94)GVyw11u%_U&U!(2}c_FW`-`LMpE1>aM(OvfKmKX8l=&16`1*Ayy|2xi;^4cV<=I9`fUn;a-o<=|I`GdY z*PjGGM_#`5=z9miw21WglLyAX|EdA&3H0}q2mI1w7{+tx?F_|%n4 zKac)?@_-*at5H%&l~?umlL!3Zv453l$;0&blL!1v$?q6fQ{cM{w8UrtUy&C;Bl_e4 zGz0u@?**`uzp%Ee`X5UPEMISf~5cIRP#SwaR0`eg*Ufmyp^^=FE(%+#NSib!J z5cD&l1Z$g-g8JRsxX_~;z~}deU_OdGfM!7b?EcUMzRHFotZBwf^xc}c(1Vleo_T6T zV^5?0jp;oZHK?CXQ*+Tf7W#Fv5HUdHA4MQY9)J|2Qx04p#DSE z)ztCR1ogAW&rGP_8zJVkuHaPdKc_Vl>No#74m1De$of|Yi`TcRt-l%SH{VdltUsyl z3iP*2`zl{YLw{_^j0R!99{iqT&3ek48o@t$Xy=T;_e<9JR88Qs>z@fe`JXq}o7v#_ zVf#sS`#g14V~;uKX14FXYC z?~v=C1%8ies5Xi+k2~g!!1&~D9`)gL&>t#OMYXdXVLuMO{)4Df0(^Ep4Z?mS`0RXU zfIm)6-~1D6!STtie2X{s6iDH25yrZv~&7e@s0UIKOmg`f7au=5OoG zACq}uB9_(XXZou8%VO%cf#a{=>i)w#KjT3CnGCmnN4Wkt*5AjiKQ3H<0_!K|pAfFU z4(li9Ung9D66%lZ^J8z<>+fiBZGCQHqdmW>Ket}_l!W?slGoq*GWD1Axti*)7p^}A z^|Q}!r=b4*kAn@RLp;R%AcP%{lA*?!@>Ul+2fV^*sBs2W?am``V&_> zX8h~_`v-c@{mqX5T)o~|s(6|K`LpX!WBoe+#kzQ9UhwfIfBaWJoqfj7-@ZOo-S}^Z`oDc5cl>u?{l)R`uVgii{|@2$JE49ve*FHU z>}$>b>w}B+(x|-ubVB_JyZQT63p?*LAV*RS7{JWw4i*+o_V^Fj`0Us38o_r{ z+?a~yPeis2R9#@nak;K z9m0MW_$Td+r8n&uzG+dp4Mv6YyF>oQ=4)~{9{l`RRi`sT&mL3vgxBJeq+j7eoaFBH!hR~kuj)iVnZKbi!e_n%WrncdB<#-=_M3(Mw6NbQ z?6*bu%<1sxZ+=0-L(#3zcb1w zwzyeQeleb!kB{2b&jbCFz5m}K?9T%Ky{mhx8z^NS)vg|a^|#C&tDM~-?9W10zFD~A+P3jADlK1ueN zdi0-sCDm^T`6p0)rB?T=lFxtTsC&2OTef9=2mF8d?}{R&6c_dr;9tr8__BT{R51T{ zk^PzAkCMkvTG($E_M3$LR$;$I*zW|NJ^nj{{dVx@lGm>`VZRG}c7K>9>>mjJescdg z2>hRu{e!{ZP1$ z{#oSysnq;KOTS->{rMfG<{eu4{aUg7xkLTsQ5nV%ib4JU=NAl~e**9Oo$Ti~D}Vod z4C-GwJZ#F&O~i-inJcwU4%Bbnf4(@Ylv{xP_y3O<=2UXUf%@6`$D#gs@$(my&mYC1 zes=zKSbzTW7v}x*887IX#!ns8zvjaqeuHLd<0pyr7xVXz^lJM2OH#Q06x8p3{=#N& zd#OMEtNZ*&3hH;&kZbafk-i6|0qXZZe^IQzw$EQQl&in+@jm_6)G#$d{eJ#t{3}BK zjZlAT%=;ALP}rW=B<0lREv%kM0EnI&q)=&QagjV7D+pzu&_xm^6 zgzIm|`pNmX3)ipIKLfA-vOixF1E2l*AP0PQ{c-Tw^(Tb=I`E6{pX7YLDJksN3;RvN zezUOO0zUim%W3c{*>{@GeOrb7Ht^Y>Uv3xnm3kK5e=?!}1zX+}i|}iIS81_6C&Fje zACK^v^(Tb=x=6qH2Crh0)m=*p`}M+pld#_`?6(N}X<@%r*l!c|+lBo)^-^H}nf?CB zq_AHv>^BMf&BA_*u%8z8TZR2LVZUA2uT%em{j2J>v*jL@6!zW#*pZocyq_AHv>^BPgG36YJ|Go_K_%tr;CxrdF zNS}H98OKYo$*>xJuY6!z;>BlL%Idy>`7PYV0>!hR$A%#(*Y z(wOQBjDPm)J8@w@A?(+Izw9KZ?e-njjm4-(C58QZVSfhr?D5kCK0E)J;Ir#*2A^Gj z3-|-Wn>y|xj?XmsQDeB4d9A{J8~CT|Vwvl2yRaWqZLobb`);))9(-(E*iQ)ib&#qaaG)E{DyB}PmI{cOqa7*`$e+4aZ4XV)K7YpzkJHTIZMlQx0ueOu-y zf1hoxQ6>j{{jpQhp`)!YrY^Xqbo|WYyzRX3w>#h$enGktQx{#MmNoX6u3+*%_~Cc= zGV^i3zwf~x9L)4%YA`T3h6eoUArj88c!}(WziccC- z#|Zn2g#8nQ{ocU(byKV(Sxm3?YcaJz*zXhe7mNBzjRcNg_~T#JPec99wGWwq&}Q4jjl%wju)kH< z9|fQHFN1sAj=P2ZdiBM5rRN7$j4E^Z>#~kfli)vE`zA3U)PZ04CFzM0;1}{C9frl! zy@Ai)6?1nBe@ZP^9Po>0Z#lkFJB0T?W&MnB{d0wVSJ+=7><!udQS><>Ub?D4-`*ms5f zCBpuYuz#hnKPc?4754kUXZO#A!hS~BpDXNV!DsiMjl%wju)kH>$e+vBlWWPb! zZxr@t2>VUK{!H-Mn@-v<6HQr$k&F6?)J&(6P7*zW?Lo&PLhzZ-mZ{s##A2ZGPe{~%$1Hu&uP z=Lq`;gU`XXk%} zuzw`@?EH@s_7{N9&i`m({}}Mu`5!Cn_klm(Z+xVm3&GEjT%TD4KD++oz-QOL7<|&l z#{GEI@!+%TKLLDp{U?IYuKy(P+2iMB;Ir#L8GLsAF9)Ap|0&=frnu89z-QP0O7PkB zp9(&^ei!^+Zv1MAu)h@iW6AZuO4vUQe0Kh)3;WB!XXk&0u-^|pJO49<{jnv{;w7G2f*(m_s`|R{<+|vNUr}pVSfeq?EF^>`>Vib=l?oke>M2* z{LdHm*MQH?|MkND1>m#uzfjn}2z++_ZxHqe!9R)IKi3NT>%c#iT>r(w{w3hE^S@Ns zUk^Sz|2GQz8^CAh|0ZGo&ET{1e~Ykx8Tjn{-zw~14n8~oD}?T=850LxkR$>2k@Lxx+|AWH*9pJO`zf;)13w(C|9}@PrfzQtW!@~YY zz-QJ&(-Yx8Z3j8;a>;JT{{~7Sv`F~c}zXyDF z{+|=}w}a2l|MSBBz2LL+|AMgpMey1Ae@WQ?GWhKLzas4K0Dq9&KffyM-v|C1$@Tw- zuzx@J?EJqb?0+46cK+WG_P+@}JO6J9``-qio&R@){qKU$&i{MD{(pkc&i}uJ{T%ok z$o+Gtu)hoZE6DYKU)X;De0Ki3h5bF?v-5vY*xw62JO77-{fEJ4=l=s?|A*kS^Z${s z|6}mk`Ts=N-v|B>xqt2#_8$TN9pw6dD(pWBK0E)P3Hv_>pPm1I3;U0O&(8mGVgDE4 zv-AI@u>ULY+4(;q?Ee~kcK*K+_Q$}#f!sfz1pivH|6B0c_5TihcKyEx|2lF$e*m9d z|5M;EJ8?E0SupFMv51U|d|KZDP%|9`+|*Z&vruP2ZH{{^32|6jpp*Z(*0+4YZu zpC#x2jIjSK_&1a5|GTjN9Qf?~{~_%E6MT05|4-O|9(;EG|0nGK3w(C|{}%RN0H2-z zi^Bd(;Is3e5cX9p`2GLG?goy=U*r6C&6duUoY&Zz-Q;*AnZ4S z&(42_u-^neJO7!&elz&&{9A|YK(JO3+${UPw#`ClpQUj;rp|F;SISA);a|Lwy5HQ=-J ze}}MtE%@yG-zn_B3w(C|?-us21D~D$^}_xQ;Is38kFcKwpPm0kVSf|&?EG&O_BVsi z&i^K1e+&5R{BIWahrws(e~YkxEBNgE-z)6j20lCg_X+#&2cMn)2Za3*@Y(rq74~lj zpPl~)h5b9gXXk&Xuzwf$?EF6@>~8~~o&Sf0{f~gp&i|vr{>Q*)=l^kG{}bS|^Z%r< zKMFoO|GS0#Pl3v!Dr|H zC1L-|;Is4pim<-}e0Kg{7547~pPm1I2>bVg&(8mA!v5F6XXpP7VgH-pv-AI!u>WoF z+4+A**#9p0?EJqc?EfeD?EL>r*w2B_&VQ${zYBbJ{@)k&9{``7|88M_5BTi-9~AcY zg3r$XAz}Yv@Y(tQK-m8w`0V_DB<%kfe0Kgn5%%|i&(43pu>T17?EHT!>^}-VJO7^v z`#%Sto&SFe`;URo&i`>?{}`9C4-{~COD{=X6S$G~Uj|D>@0TkzTW z|4!KdJ^1YW{~+u?1wK3fKMMO#gU`Z{1&(8nv!v1sMv-AIlu>Vi++4=uJVgGsX+4=vUu>UXc+4=ul*na_hcK$C4 z`!9jd&VNGKuUCKFs8%=jG%2Oh`oB*sIPYNn!<*{zKO2?0Pv2p*H-9^w$X}WIM-qIM ziBJ8Y3j8|o$9j$L7phd&iFmpS`~>)eM{xZ(_{D0+9?F`9QZiMOzZ3TJ3vcWp<(A<3 zYBhcgd_8`C9kcA%LyP|4T~jrTpANNeqgvY7V!hWl;-zMyLfuG-F zplu~*fv-+k7_~=O_49S3pSF7`ReSirgV0ypJ%|I*&t|ZMnr_cVUv*RWuMS2(@x7Tf z6$}qP1pM^oR_gePslRMg=QQ@z>*wW;9PbZtz-O;taqy|(=szI={xpsrVF^xtvkv^} zAK6as`oB$r?;le8zpwRYJ^0C5L3n%$d^1j&Qv>+i?xysiXK?+ZHXj|t4Dj`#E_G@G ze+E@oY9{z_%Aw|GYX+a%oON|A;5XM?aS%v@-xB?XKw@Az;CU&;vmotep~R@ zHQ(w0zoU$}sLcGSXD_|6^!(B@Q$L`hd&HEi?+E*G@Sm*cub=wP3GmtZ*9rScVZR>y zyQhw{qI;yk-(S(Ar@nK8u-_=`&k**Tg#DS|v&T;}_^sp}^cL{h{UI&vw+j1h;Ir4? z4)B*xy~%d=5&OZtMRZpA9~H`OX2KJ^l|8_B+96?;myv`?G|7rJfDEzm9!=J0|R>h5c4x zKO^kV754jt{e{B5E9@^3_6LOh<--0T__He7dz$*rYlZzG@Y((IN?|_>{vlIGTG2f= z3i~7Av-967?2iijcMJPFg#E7y`#E8Mr?9_I*xxVgj|uxv3j5>2{xib9iV5%k3;Std zzg5`J2>Ww|{XSuTp|I}?`%8rV0bzf+us|5_O}ZA^{RPO z>F2NY!PP~#+as(|wf#1IGJ2qRxV2+J@w)kBbMaHorSpT=ok{#&^Wo?k{dm|97BHa7 zz2)7V&Ra1O=x3c^J|)jq$Y-G3yF^RwoWB}VO`A$Te=(h!!b3=wMG@u41U_> zzChjre$@*ys(3vw4L-X+w1H2KU$uvPZii?EKf5GdCduk%$G~SV-=wgg681a6ca~O{ zbGb)#fv;Td_&Egp^sedb)s(9?YJS_M()Yiyw_h!*eNR$)IQ?9UbU`-J_4!oDl) zFA??!g#G2h{-ChGR@fgB_OBH7v%>yHVShx}-zw~n3j22p`#XgFuL}D)VSlHvzfaiT zFYJ#A`%en{Ak+0oXm&sny$u= zsdV7{p-OPiZ#(Fhd$ly`)aEqi#nDf2zu_!_zGA<^d2%3s?%8Lhzdu>lcfe<#e~t_L z3GmtZ*9rSc@Y(s-3;QYX+4(mJ`;FkU^PeH?H-XR2f2OeC3_d&m7GXaPK6mS@RI9Mx z20r`qP3^*d2l(v#JB9r&@Y(s#685{nXXk%_uzw)KU{0|fM=Y!AA|8QZy7kqa9M+o~zg3r$XC}DpA z`0V_T7WR(;pPm1)!hRq4^DAlY)41whKq?D|gypIyHT zelItEwM5uo3jVR=`d=mNp9VfV|I>y2W#F^(KSS8>2cMn)nZo{A;Is38wXlCS`0V^& zBkZ38K0E){3i|`#_mTVOa$)~m@J}Syf1a?v0(^G|X>vJO4Kb`-9-0MDCw!h5dElpGvO(VqyOh@Y(raD(tTZpPm03 zh5ZfSv-5wGu>WT8+4;Xk*uM;XcK&Y__AdvYo&OcW{t);sxqn_M>|X``8RYukChT7g zK0E)n3;WlA&(8lH!v3}3v-5wau>UUb+4;X)*uM^ZcK+83`!|5k&i_5aeir~8}9wdDG56!tfR&(8lQVSfww?EG&Q_J_e|=YNZ^e=GRx{NF3=-v&NA|Mv;|?+2fq z{|AKq5%34d{d23Ze>?cEBiH{yVgC;B+4E|J}m=9`M=uKPc?)1)rV&L&E;U;Is4pfw2EW@Y(tQNZ9`|`0V_D zBJA%2e~8>a_Y3=vfd3A1{XZ4<9|fPC|IdW|pM%fN|G$O($G~Uj|G2RK3-Hn-w69-;NL**pHG5+E!qDq`0V^~1aJOBR^_WuPwJO6(R`!9gc&i_SW|0VF* z`A-P@Di-{H{$Xp8Z|FOb;ANZr>{<%=tUj+W=$n_s5 z>@ODfj|ZQ4o^Ld%De=_*&{9i8YpCatP0(|!JeI@wp{7)73UGUlY zED`pXg3r$XRl@#h!v5*tvzPBO@Y(sFA?){q&(7yeVgD@f+4;X(*gsp?e+~HT<$DhJ z?EGIV><@s?&S$x>e=hj!{Ld5iR|xwn!DlbuRp7Jpf1R+u8hmy>=L`F5z-Qb`MgQk ze>3>({NEz%UncCo6@2#cy&QaY{#OY5L*TRXxl-7_3Ve3{Zxi;f7WUr`K709I13o+d zcL@8}g3r$9ox=XRz-QcK$aC`Clsf3L8Ao3Q^r@Y&1v{ou3n|A4SR0zNyRt-}88 z;Is4pps;_3uzx4`?B#nG`0V^YBO9e+T&Ne7-8|-v>TB|Njv7?-%yJ20nZFejR*v{@)PxzX?7&pKl5K z-v*zZ|96D_?+W|h1E0No{}X(6{{JQH=fG#@vs2jL1wK3f?+g162>ZLiXD{D9;Is38 zP}tuKK0BX>g#CxXXXpO|VgHB1{*Sg#CYj&tAU&1fQM%{}c9~2cMnK{|Wp50-v4#zlHr5 zg#8!6XD{EEz-Q+_A?(+yRh!i6#-1jnR9gQxy5PJ|II34)Qx7lt+Yu`3=xdGUX33OJ zl-!v7Y7%^vi5DKQsBjIgRN&WvKlYd@*w+94qxCggKk%voKLP&W;|2dNh93uCm->oA zx%-M)73NiVC8kzvQs*@G)a%EY<;$KN@MGjBh=Xs^XHE(5Yfn5_T^;z-Uvq*^xm!u_ z>&o4+%K7!+C#!VIJuC&j8K=yt0sIsb*H$C=4P<`?_}GeTeYz&_XVeP9<7a|zwlmDB z8T^?{Tw5*RH9NPTHiFHujk9mdS?QpJT$lBkae8 z{e-YzC+sJM{d!?PCG0l{`;Ef>3}L@X*q7 z>K48e{S1{?UErt4J6N;8S1z~yZuGhFt3$v~E#uZ7Q}+h;-!d7l?||=2aQ!&=39_F6 zKS}oMz;7h`E#Uu!?8nr7f$?(=*>}J{o9wr!4cDkOjXmbLm)v^nKyMED5l2WhJn_ts zAF+Pb;5UW*2&_BeIj1?RMXiVYU3{c_1%^ge5Q;%OU z61ZJ@U*%NnYg~_~qMshWLjR*f#oGa1#Vhu`KeOaK`1loBrR$8I5*7OyyQqs^X8elb z@_t>#zOJ)^{FBxA`YDR_E0a&EQ7bUhwCr>djj=0RPO8QA)lPSZRZAP zd!unmKl~Uo2gf_!_8&E)N*|Xe-uC^bDSg+!YyPJWBDntcO}75dtk}=s`qekt`qf;q z4}Z=SH(M(A!{aAge*CB=b(KE9y4YX-U;hsI6^51S&60jhz5nvk^TYn%F-5G?{gAh^^6m1S#IIoa)<^lea#scXs+Vsn+g&x-!9)t{0f$DQ~tpd<)75VZ`8yS>ZME7#837A6BGN@#QutQ@f`3cu26?uPW0p82kO^lzeP=~ zZJJn{o><#4u~uJCOsq}m`xM5cF39 zQHM19`4Idh_@#gE#IgDMOJ`Piy?!$P1Nre&p;>zOnEGL0e3t%BU!VAmGx3CT@FmW~ zPxb$k6Z@Ts{T1!PJK#@T5f~da`*H9~>pw)7{T63pZS%z1wu!Y}6KnPL%Ess9 z`TWwEc-%Q8;Y|EM|35kLkTda6Mfuc0{Sz(0d}{TR;FsoOmap|;W+gZ4r||9gsRV@k z#?+4k<1^5IDE%|&^ZRGe57bZTpOg56{#FP1^ZRG8{?f(I>7SGMl>WIdFg{D`*Vk+A zZ;lH3{QepAOY7(K&+@*>r`G;fhxyR^=QQds4XwiK^-w=N+#5eIv$C64y<9D8>@kNZ zX8&`-PA|RV;TY*m-!1ysc4=GT{PX%ReXX+crnq;X>g!a?+6wh=N#^>dct}OR?gf81 zsTNiQOmXK7_%}Oa)cVul$Kshj+b}AQ?nlb#C*EI-`t#~ z`m?}i*MA`RS+gN?r!_RDb*FA&{~+|ui6G+gJwVuxsli!lRa@cw)soXptckd*&!LX& zoO9(Vj(eDX`;wbcs_*5?%u;$mU;k;9)n5nxVTEMR|NZ{cI{jO2MJFBnN9mtQ@MBJT!*;c~ z!QHHv@5S$1cua$veKM9VgyL41e|^aJp4|6us0Y8o@skSq>0WjB7Fzu=wQ82$zb$-z zt%8?UN>VO=HKxuD`0UR=#?*kYf3~Qv)S}MP{L3dD)VF*E+Jt^z9akVn8*X8d1L=FU~jei(f-{)zrB^v(ER zQAMF;9`YFYw*M2C?>_Kt|3AA-F;&do3%>3DL_Y_ zSAgGW`p)V+5kAUBi-O|R)XBhlW_a3UB z1;0z}X=CPpKKM}HP7 zkAQ#B*!p%gQYOqQX5S9}?9nalDq96q<{`I&KWFeBs;|GiF>rq7;LM(O=J|n-fq%%p zr`nn0{|@joBgqct_`ePOxdZd5{$}uBo?cJw&)0%KZ||}WW`7<6|Ip#}9nAfo4dD0m zZ=w2w;2)N{r-Qlw^Dgk`KfR}e*&nU~|M2Zkbuic8H-q21A=%0F*MWaT@BB{Y`NMyK zub$TZXLFfmTgB{W(chlzV4h$4Gx{6mQ~lqf-@B}Xd4A~y^dDQ_p>C@p=rRv^4*hLg zI+*8I|APMNd#L{J(eK{V!90KaJovW%6VDHigKzsk@%-M?;M@LB^vA%r{hxS#?>g|0 zd~8`KbN}RO@Q>QIzLUBCd>Qx)R&SyDmw3;_Nmvzsd#q7_ko#63x zEVpMibNw9v-^o5To4Nk>gCBR3bC|vhenQQk!#sZ627Y^P*&OEh83Df|yM7LH{0xKN z>29I=S@65mJ#(1j^D*%4>%Z5PX(m<7-Uq&Y{g=3ZyBB=>`Y+MXfp1^`CGOwG)VpS> zfwrEM&ept%@u=jQbdOryT}9N94{<_%n_AEmdDp6D#=$>2$@LT9H>j>^-%1+!_tk-a zcyd+S{R{flj=spdS3ENr;WL+SeaK(a#`IGmpSye;(63+Baep5#|HcTPna_-nzovuf zH-Udt%Jaw9Ry-6VA22iIo8|jFY4n@#FAes$qf=bJ1$@&VuA_BN)02bsuS~9Lx8L@AH8>H&U{#_ zwrO^RZ`R*|uMLhe)~`7s-`l>k{DVWjU4PH&+fiFC{-X~;zp#BDeR!w&qPZHUOoVUq z-#wUP5TDn0{VsiGupT-yZJ-4=6_;@Z}b1dpxX87+Vejt zG?_Mb10^tbE&P`hn}Q@}4C-;LeG$mbOy-{k*% z-}t9E^}iB)|M-sOp9;Qre0S{G*MFgx`}{P5T7cY2Y8#wWg2hpC0nt z(hC-_M!!z@IBL#nHbSH042<%RXPZA~vT|1(2AH=nb>Ke~y^Iw5} z*Q!PLU&hP-(g>fK&#I8WW)ahWUC8I=zZ(6vRY%@`0WbgaBYb8)YeN2-Bbol|Lq0eE z3&20B+gpFf*E04FmAWwGoBE$8?Hww05%@=UbNx4fZ??bJ(e^%-8U+8S4sZK4K9`gK z+K_MaA)UQdY907TcX0iS!MFMM^Y%bPug~V+f2F^~$aQ12FN4tQv-bT_`deQ!qglpZ z5qf==>_@#mn^4{90hdv|QtM&)7S2DD-kAJ^xI6f5Mx= z_w(m0U8UX<@=g9MUFnZv1&<%S{CWOc!8iHybR*s0s?KifF=$%QovPpv;0_Nn#PgRk>Xd*esv)8}1NpQ%3o6!BjjiD zp}Y|DuPLYc*Lj-2kEtey>ORrzpuXBR+_dBT%Q}YM^ zET^C9*TsYNpY04&{hPo)$JtBu>k`5G2b|PLsQH6`uG3HT>*|8_uW*K`{!QSoa`saF zx@55a)lTZ8)cnC;5@NNGm`VG*ZZT~0ww}5Z^KhbZ1 z{%rd{(Z2D}BH^cK+fuBkYe~mf*SAyT*Y(Jiv|4P`u()o-G zDqcSGq5ec-@1xBAc3{ZY>#ysteYO8QS=c`e{5t394rYHiAmr=q7jgZ4nXumozV6Ta z9wIJZJpMJ~Kl3E7za0bhv(G;-0^e@GXj>Qa{U^cm8*Kk*@Y(yHCxCDB&(z)*eBlQ0 z>l06pFwf6l55CQZxPSXD@Y(si6MT043&CgapU)KbSA&0JY%s09>5s13e{KL@#dL3b zzIN9au8s1E_4h~l+x%y*{paK0XPnd>nE~GZ&*O0ZaIVvPhfCbQeH_m3&2#!6oky(y zeAquU`3w^M$H70$+1{au{`qkJ?NDdKqZbbmmoNA|&hQECo zi1|MbzR72dSpVa2e$0$dwVbznw?cnNJE_|JpDnw?cntah~2kk63>z ztiL87{mnnLJu;;m`^d$E#QMQ+bNX-B-<(6srxp5xsedighxONt zpLN9iw}Nl-86(!e75al2pK1v&|0kmQ!v>-s)gStaepG)T)_)-m{gDju z{NA0=e{}sLF7f=sozQ=@zi%F~{!Zu*rv5>qe`naIo?q>R{$TRCSnG_*BI6&pV+%*yEQpZ~W|p{$P(^h_CPOg#KWU zUx@WDf%Vt!pAh|>;M@HZqQ3;zU%P+OM_j((+x-)wzXbY&J$_;Ou>RWp6Jq{5!MFP- z#QJwaf3U|dt-R&CJE}hr`{(Yc{*dFnzP3B6KM?Cb9oAplABg^L@NIt}`lrMCYx@In z`?VW<+aHMj=~4ZG>BIVK`vWom-Qe5)K&*dvRDU4uKfDP2!R((fk1t+?{$PCO@x_bK zAI$zC^Z4R=Sbt6Z%;Sp}!#?%+;(AzrO+L)yixKmKd3^C= z*ry&}ya@flj8EqA#eV1y_V|MM{^b48AMEi3@%^{^p+DH;3u67tVg0rH4@7@I_;&w+ z=r4!$*X}=z^Y-8NgKzgAi2icu5BB(i>BIVK_aBJ)?+4%RKM?ER5Bg)X#qZ?OkDi z-)^_|x_#j;$Vb<|?}3c}+uDEbg8J?F9ID;*gsOQJlgKz66_J>QsxAhaxpI-$&yZ$S|XV-rX__ltRF)}^l?cm$`iRZ`0 zz&|0e_bzuiul{lHPjsHX%e|ZDkAQDwVt*cu^0U19-6&rv?<<-KPZLwu%~AtxJt=MJ z&aYZi^P7H^em*wTlsVH~R{8{qM56TOG_O10ears_;;W~wfqI`G-~B*9-;Zqw-h8Qvc= z?aP_qv+Hjb_FIJgw6NbQ?6(Q~?ZSQs_$B@A&|JrpJ+TA)6{5QJw{uc|tY*J!GXIX> z)$Gp#zh142-nLZPAG*vwvtgf5*2Q|FPwbHTykf z{d*gKw&n1e{lm)nL!Y|!fi20J{rTV*`+t7_ZRPL@i8;Nx=T+DL4+q~Lp98zset*}- z`kL$S1wUN>?afEpO;~mH9|3-${!4$GsVk{o=Tp`G`H|p<>OW}HUEY3wb@d+we&qh= zWvf?rRayT6@Y(er4ZffMjTmFxzZu$11KV0x1UT*y@C!}f^{|mwQ^B<^N*SI@zQ>wMF2&&6}Q91v!YtMQh zxuv18b+(^RRqNMr;D^R%UAm_AYccqx>(|bXo4n)q8rH89z;7MCJoTbFIeACx2KYzC zsvAEig8z*hZ%}jM52qIgo10z+)h*w8@I(0*$4^z~PfnW3um8Zk-EU1*z5O}`e1H58 z^?j=Gfi0yWRhLgA`0>q!Kqyycpx;el3&=9?O+Foc8?G8j%w4)`VYVsO-f@q&mr`9m zX9)ZK!v2|2{@{j3Mjn{E>-&U!&WiGh`M)~K57vK|d&-&H4y>|2oE_y8>wis@5A~l` zL;dGO`NaBP8|6d&{Wa7-5ako=UmoRWH?(a%ZQia2yzzh6*)`OEZj?`~|GX$4>K~|~ z{uNO^vHq1&KGeUWhWb}U`NaBP7v)3!t81u#b(Bx6|NJO_bi=t@ADFjmcYgd|P(%G| zqI_cguaEMf{=pjRzaYvd)_-A?5A|PCL;V*;`NaC)5amPt8)~S3Fv4%@@68U4jo!M` zjL-A@e;c{F{kNF9B>3;2PJAT#{CQ!Iva%~q$lpfw<01c}R6h~&*Z42ER2D>;d)I~h z)l@%;ehVCymZ@vHv+L2HIM5%E(yL+uYreY;hi-PU8y0hpIamnh|WV=x!f z|4y1WbyUAdV&HF#@_VZH9q@NX`HQRf*QgOs$)xmbUenV$J$> ziSdY2Ol=7G`rp@}PBAqU@b^-6^G3j+{{Y#KscQrEFC+U7_)E$DYL)F&%i3&*v~OX_ z&F@pIc~3Hces)=(>gW0W=)3EwzKg!v(x*=1)xQS)v3vT|5YIms{n0&rYLMrjh5q1E zRDUV@ndCzKp*-4j0s8yqFI3mkc(nrkk!1^&*Yzn+ayI${>#6=}=%?48!0Zp((9f-3 z#LRyL{p^-S%>0MZckiM4S@hMOMa=wvfxhWKS5tO)n z3SK_HLf`bC>v;a7=$roI?bTAACyNqo4cZ zBIf5?x1yh|KaRP5zXg5waH_u%eRalh%>9RJ(cinC>JOnmyyZCN_}_qj|2u*<~zdgB_d3^U~^f%0>`s>i|UACBc{P-{QP5zsC`9F)k$)C7? z`)Bk`{zU(`=$rhB`?oKk|JeG)>NZ~f&!N9yKBXyzze@`rEf0uSR(O zz36Yahw6U{{oXytGxra_i~eIz9j~_Y^0^=VZOIeVHlF`Q^jFWP`kz6+d)W!h{=C`= zzWx=Sw|4QcqFG=VRb2bN-XKf4&cWbN-XKf4dibbN-X)=g>FjKZ*OdF?B=W`-P55 zu1WW()!nQP?S%X`wV;WmD-{R-=p@%qfZw3HN<#o4`LR<@w`lIpcF?$T!RP zdD7@tsu}#FQ(V6VeA6GUqjgX7p1NRvUYT6gbbp37KHDOE=J;s`-`~Cre0DI)cq?B= z$T!P(`_jHq&iL#E-`l?M{4Vg#_*rp4x67$ssafC`*I)hlnr!v&`}FJU4*A~t#ag}x zfbXxrEdN08z4e#3d=CQOAOGX`4Z4i+KRe``{I5N;FY7O%+J4Rf-y8ot|6uS<{@`8NOaS=+C}!T0;m!0y4^&L33&xdOkd^oD#>|MqkH za$|=v#{UuE=eNH!|48ud_IGag!1z`EUs&7EqrflrpV2?>bT`i`{RXmXo@qgZZ^r+? z&j!bK&Zxb=9Ubz${=@Q*3Hf&Xtm)e~b~7%5MHpt@-yw_%{DP460qP zu08*SA>Zpi10;V@$hY~g>l+)pl#%~&k$yEJJ^C?=!9S{NOQgwM?96!7)OQt;X5XK?*upPxAm>SyPV>+eza^%36rjb%_jJO4AlXXmff zmf-hGgf~Go&KVZ<9W@g8{H*==Yig{x^x;dvk0&;a8-h;(tFf){T%T75~8t@l6{cUQ@ew4o!w(!_< z!MEdwR=v_+2M`?p_TN_;<<-9g{6?q0RgLrf)1&+x&tD$p@8J1u;M?V!EiC?;ue5@1 z^Uv_c|0?ip{cg==7l4)E+xm&?*MZ=(>pup3_V#5_luzsr&ET{9&(Yws`_BpB+x#K6e%2B5-wM9TXN*|?*7{)mW_+q8y!?S%ed_fLrDZ+Aj}u*XNl^OHNFKiK0VV*N{C{k8iiM1LpvcK?LvFM;*f z?w|DW`om7}?fwbTUjqHX)W4SL!}@FYPl);N1mEtT5bNIw{lSb+)yiAGyQBI8v48H4 z>JK?yf7>0^ABgpz4(qS&4@7@A__jX~{nKInwf%v({n`z_?GHr%^r-&8^kMzA{ehVO zZt!h?AlAP-sy`6-A6|t1VD?X##}_X`e=t7t_~J$A4`%<6d3{E{~UWEQ&#wYXmVq;W)$nm!C z8>9NeDAAAV55)RoVSgmU^uzh26)~S!xc`g{66@a>_S1^!$HM(*-^F9Z@e}r`{XZ7f z--z|c!u@C8I%57C!}W8=Pq_Y(F=9R&qx$Dg-uQ`yed_qX9r|-qVtD`V(VE}3Q2=g- z{xdVNeg6a5!mn$-auL*@NDPnUh~E$PYw&G8duuMc0Q@>CA7cGoP(St7E0&-VNz(ccfgJwHkGm&5+EJwG{4T)yDj^OHn>Iqcus z*Dshp?BCk+lf?Y@gKy7I66@a&`?vP>i~YRiy9xS(-M(aMZfgZ#6Z8kWeJT95_A5@< zAIW8EcYR?1^0D)Y{W&4*cSQNbe0rjM;`VWIl<)dWr}m$xMfn4@yS}g@${+N9Tl>#T zqWq!SU0-mceDlwulBO~6I}*dUyUR(qX2!wqbhh8_-p%u4DjWFz)z;MfreCF>j}0|t z4h=p_B9RErnAR-^{BOi>P>J-m-htfc=a;l?PBlEJ7I|(Wm710qyi*+fV*P`S1ItS9 zTV4H$$^6^1w-ukEI=>Elc0NgAzh2l+3HuGgextBIL)dQuzhwQob%-$jXO{OH8Gdtl z|KTeM^|ye3V&VohJHG8xceIY)x_|Sg)ER{aQC)vXNBdW4|KWYfyBq3Shx5-+o!<(+ z=|8jMd(#7T>l$|_Zc4Ql>#wRmx0UlhyY{RHl3N-YTW9P2;O@{ZOG zjfK+fmFn{81pga1-k|2hA5Jf>3+hT$xBZH#yMo`(F!2%EzKN;O3HjToemvxVl|$ zU)+40kk8F09`X;O=AQ`p#4iumi?1%^vzKqKRV{7nF)OV(tuadNKBj-l`ZK^!R&$Uw z$!gLh>?gqQA=e)Ve?Hl71)n{B+Jyasz~4?D|Febt4q?At*jMV&cD1gp$LuGY{u9^V z2;@x}`(wzv`9k~!uWjFPjOzW%F-qlj9jQhyf6m+|qmpA2b7QWmw~q*3#6!MH=tt!%9qsoSKVs8S7v)=e3g4?g)1>P!__m_pMH2nOuk(If**_takIsMlF+=7~ zljc(&_Vee#^1e>KH2?IbSTX-|u5uG4`8yH$r_guxk%SpY`TLGT{VPhB@1o~2`o1Zr z%`RV+G!KKRA;R~bA!F}3m7i5k(LWe)eRD?GPn6bg2EGX>l)qWN$Gk1Sd@uQBU+cVB zRO@OA`}ra=_U8+be_{Na<@;rC`I_;QDKq|OqCaR^eUY(OCiQ=u_toGp&HZ)$p+BJ+ zeY#teA+MfACR&}IQ+mNYWB@fQ%M+B#q2;bX8X6zk{{tSD& z;G6sxJ@bdes2=~mpZ}XnpCKLgb^nQ~zs2+Y@oDm3^h_q3c6>h;Revk`R!QjZPtMqD zO^*Hx^azT-kk7~WO+L+US7v;w?)>gMc-Bwyl6+? zE?@HxjAiT{i~ZTl=ME?B^#@b`F;^*lPrv`@y4f!g^+KqA_lN}w>Q9%ie}2f<{qdU% zzFAzp-T?KtFM;Lz?B6rCKjizH6S00Bj=nO!83P$R5On9UD?p?_jq%fqzU~jRM`w=~ ze7#^xw~vMTP5*rMIbDB3_s_n^GkW_KRsRv_o2s>5@N2C9Nc7XHDWO|d(a*14`Tbk3 z{;VCJ+id=(e!cx_h_3&rkZ;!Cu&*})=8sZ^eDwJ59r;K0VtFQG z%x1g(dgDJ4;hz}km#=@s-~O6>&b`L-^W!JVKPl|%4n58K+n&w$pYrSP%Od^o_z5jv zvwzi`?{8h@{gcDKKE5ca-#h#YA79vfO#k=$k3PPL$p7VGUk}h}_@@4I|E{L;Pl@o& zE?;4MdiCp#j5j_D$1i68u+(piuKyKbU*}VP{1p7sd~E*F{wu+EmzdQmHJGp8?wtQy z_c(v~t|%R!djJ2n)-HYgsF!cd9KYy?!gMP5ao60T;OlK;{DsMVb9`FfcfmLH>wP9Y zWz5A3f7iZg(f;v8p?d&vgvFP!0 zMuczlDSf~Gj9wZ2@sqE~K0JTXAMz6_(V>6Ykumr1%h!vb-P~4%^~?B=JnJ;+E5p^kZgv-aYS;G@9udjik|&0R-l)o{eQpvJT54&y!{33gBQQtKK0{Q zZwcL;i#|OIeyIN$ir*cd5rcC3NRH1GLbkkf9{Lo!%8x&PWp&EQ&5s)2D5ll;WH3KH z=KP!=@!kB3g33~P`?{ikb|J>UAl_Hswd}k3H^(3AUuf`kh6=7P|C428^d}zaNz3}t zzM=ixhJMk{kL&9mkmp}&i2o+fSMLblTx9UW@vBvUA3yp|DxLFvL;M$`FY9NAjG>?c ziPpc|esssTY5kH@^?$cszo>VFZ!U@W-f&QJRw@*(tZ(m;;@pCXfT-`rd!M`lxchv0fso-B3@lR5%v!8#x-DQ`bIhE4T&3hvL zX*K(PehmJ5BR)pQ_n^(wo19=m^lY z5r4X7-;dwm&qe&THT!=2#b|=Ai})LA_Wk$`{`C=`_Gqav3hLITe)f3zSMLblydV8( z@A-oKV_uhMs6O@ht?Zx6{Zl)-s5iDl?q8t&chUU|A3$HRl2(6M`fC4$(Z3D-BDK#? zN?&yn)tXE9&vpMT+<*RgLH2)S|9mc^_K(OnhNjyMzJ7u7=Sg+@=YIQK&X2o)N6`M4 zVp`=VWXn4{&=)E9HLCj{4(q#q`yltv%HLO%`)8lJX@h)ip+hW`uFI(Xvylbtj#yt; zk?*^oD*btX|L@((7qtJ^_1#yM|GN`?FMM64M@lI{+ehW`VXBaFe%7lMsT$vq^Vpxl8ep)RFM`xfj3e zKi^LA%l-rPZ{yua^J#XpHaGPi*||{H^BS zkA8tZ`ziVPUjD<&m%n`!Y@f^ZA88*x2L1!fq%9}q-;c|0#Fxw0iSf(V$H9MgTdp2>D-28ovYn&zR%i1^zM2@$Uwo787@hsUNTX@#-hsen#r&ff(Pb|4928 zZvSO8!S*@g??K=1pTxv(^yAm>561Yl#UJl~BI;Le|AX=S?Pt9IN%RY};L5D}?L$oa zkL@!RhH3r#5c)-L`(5Y%HCTV)_O)!^X#4tmH}#pvPacl(z5FNjKZX9B$_dG#Z= zuz%xrbA|BZm*bP)xijsK59s&};{$(yev#IX)OCxCpFUXkPh|W5@;wtOKSPt>+p$EB zUqz=!Vtg-t$WL*=s~<~$Z`5~#aOdyu<@k2F{}yPUr-H{X#r04A1Ny34D{VLbYW+^5 z-0uDU$niybd|3I0{QpOTujR7;OBKJ~9`JpcA9;L{8lQ<@z8;PGw0xQ3m;01pd^K=< zQC$3=L*G%1e-r7Sd-GQ=zt8__j$W9{W%c%v-U9L8s{Z&R^!J9JuhEZ`=zl_A@$v{J zo&OHnJo=qlzVv;+e&q5MI6f*aKYwiSr5^A}m-Xq+UoSs${;n?{9~D=he}cZMPdP8$ z`cdthtWQ0E@%Shw6hp1fucflD>(lei$4AA*zYl#1Tpu6h`Ck7}`@!QA9((z^ z{j@7CzkP7>d)H?Qsa`ej!Z-WTFYx+LpkEC8uld_|@$uh8@!v`DM~aia%6~zh4$;t= zaq~m%kIujT-ogAl)ph;2Y#%n0e@naB{{s3&^5>+beeD0EFWdhu=jQbf0?;{z8v-4i>lDQ!)OppkEBf@6}JG{Hywj$)(05 z|4+xq7G(Z6_r&M_TM@r7IrVo_f9JJwvV9J=Kl$|h)LZoFwEudT@-y)W9Qt1$`<{b^NpIzZI!}S)b(7_R(V(Y+okV z?{0k>m)}>>7h%6b{Nl0OZ(Jt(Cza~|f1+<2Kh;0@#`ymk{rt#?I)0m4bvb$Qd)tP( z{hXKmhvCP5@#cig|DFYx;R3;p~E9Y0S&`1#S}C&u`H;l|%{cWnHxp|s~>;;^3(@}FMc^baKR3GapnCxZ=mlV|6i{EU(yy#xc*i9BOd$3kH%H~_fG5W7sK}Z4~;%$ z*;~J>?W3~4SM~p0|I0UM-`hSi_-{sh*}skY-WSlm?mth__Qm6S)8+oT!T(Xzr~YkC zez|{c@P8cj-SZ>L`49F_Xd$Kgbo>ALAM5yK{$>B!;Qu7*Q~ZJcA+-PG-|TN6X@6>Y z1^+Gdr@fv}IDTXO_}jm3{ixCo-~2SOY%~ul|M657+1K0?Y3qZ+uVs^85(t z%l+fjD4P6V8hm|zL~#BZ;+N~+|N6%Mz4`R?b~?Z5dO7}JsLx*+{rLFx@~isi;<3-% zpnW<17UTaKeL6fUG`{E7f4DyN@ehxE`Fc6NH@$sO$8Xxd^KV8U<1cUD`SHvC6~(W8 z9lyzc2YniE3~k>*`{~z@9KY>-L$#lqDgSEx&5-}!82xbk!S>&eU;1wQ?2qpm{NJKK zZ8`oX$LIa=LpT0#)1dDCJNmSI>GMb2`t--2)yu>CcP{>+zkRn|Zhsl#|DDkf=O?&) zJ?brAGC#N9pnclDi}R15FY8nC-uf}T{a%h==H~)$`*B+P>MMqCj-tO+ z$M@9uv!VW5(U<+hIZ0P)|HJW5R*1h1{jJJ3bAw<>;D#Fzb(==?2Z^!zQV`Rn%I_Wo$km|M_d`KmP~ul&YVY_56Np1;Ylwdp z`bFtS=WnEc?)5*ZeXiuMiTc$4x0}Cm`-SH3^i37EU)II@Rp&4D|DV{~OMZpzmt)YE z{S$S5dboWv<;RPEdxiL?(U<*0V}7FZSH@54M-~5_G236qpt*$Hjjl`dg(V_rUA3XkVk_yE3AD{F}f3<(sRgo_hJN!k*s1_?w~r z--Z5Wt<$ZV!O{=zfA{^D$-m$ZwSTSB_~c3G7iIjkSICY3h>V{;!K)wN_u{Aa&G!xQ zpKS1@PQJVm<@ojf!8l)yZ>V>KZ%#4z)C-*BivKk9Nw&(*Gw%GYlAqI!zD4|&{zmkR zGX8RX9`ftQkbkNlda;_nD*uN0J8STzPM@J>aI6pY88?478GH(fK0z;EvA(R&K>Rym z#>X}re5u>UPcJOjzkC}^=c7NTv+wzbw%=v^7XBsZPfJePzVEhg`hK8& z5Kn#P?t&w)Z$Q_th^x;_4ZfDpm!AvAmws7a|H1e5OG3Aoq3@2(1oBVu%kfWl`SS8F z$5(rQuH&yTetWsWmyrkk;PH*2G5E55tLnS)%l+5BFGGXry#`;# z@6~@KelI_=eUtT5CH|`nzS};lNMe22K2!Zvi~m}KPx~+Y_^EwxmtVL2@#2@`ljQ66 zCw}>zGx>r1c>7wBop7ytMN|N0(Y{#AZnSI5tY z-n+j=$Il4U@dNLR^ZQkP==?Q(eoaXpcqj8?xPFDazRFz2eEibQalV&-xBp+&k2(J5 z{Sn_ke@6ve-v3@P{@CM-Zi)9*KFYqj8<(G0|JE4aYu}Rkw;6n0L4N&H;DPO<@ci|! zf1-}RGPKXPqhFMH$ZqzRFPgvd2tIH7#cv;U`%LXau44P}L4z;#ps&tROR^n{*R8I+JE}l9M3o8=MIA(j$gLV<-@Ddm+||4C~|%0 zPV|d@{i_#X{rKm9$@tyt|H$jZ#2sIEm%$I$Pt5sct}okv-#6svZuARs{6U89)o1AZ zzViMx>07j)_kb_2eQULTQR~O*{qqljFPlky{Twg;@bN|cbo}sI`gZF2OUJ$LUq6TX z&+_^Yk?F$`-@AT}>;GOYTC{%D6V(qL9}>NO&fKZyLsC@T@l~AzL34|=f~jhj`-g7h3x%G^LJ0g&$*Rj z@B8tGGNbQ281cO|yS?wnUx@bLJ`wS!>yO{ye=_2G*B7cI{$eyi4@G?M`a<@;pMQh@ zaK!hnFJ$lUsn9b;NI| zpU*^ms?QpIKYoM%hY_FZvqt|(Z~hkPYs0iR;!}Oj$rst@$B(}#-xr=f8}X?==j3bb z{XJg%VOrfwiRM0Waqna+-BaDF$ZJZa$U`+ekVbz2-i-I*>1ucB^y5CUwRcixL&pEf z6kXDlE=t8UrK5hA5D%mT-EvGR@h^R1TkoXYT9@(5ts(iF0($yc>FYb`?(bgs8Qrhz zJ-Ph?ON(ti68vHog@`DrrwGUnivApT|>|9{m#e_O!+ z&M{~Iwsd6UzCHK9F!||Mbld-+tul%73};_}dJApnmjRPB4GF4E{S;m-dx*9wmF_@Ak=0xUc^F zbenvcf902ctNaA{&x8M+jsLs!&hP(a-&G$u`sts%^Rv=Eng9EqtULcb;LCK#{Ocw{ zw{NB2)jxlGV|?{F<(s!Ke_9S-|hS5_o)4O;V1N+>RNvdnfxQZe`Mb; zUnjr*_=gQX&EI`Tb{>7R^vh#t`KA2dcl0MeDDA8({zaAjBl{>Za{kuqF9!cR8_%ZY z_XqCsyOHMa4@$rP=#zE(OJaP=&uyi5$d~3D`Zu|Mc(mPb2JE^TmFn^bV zAIQ&bs(q6_<%d4DuK7C(J~@O9aa5@uhX3*{o4uf{rP*p%8y=uC78d6@~DyYq*MmakO?U-xg160Y-~r2n(p;H&Qtyh+eLtO5VuOXte=O|BnR zeeRQ=L+wA^*42KlMgQw^{iS?rf2jW{+qe6klxyL-{B`kux&2SzuLqwFCHh^t|FAA` z|KS+$!~OH0B<`P2ga7X_`TusE`9BtXSuW-N=g)NiGeP|v7vt0R5%nL)-%0h8z!zdm zPjGxj6=5;GUyr`gz0%?C`R>CBMx17Qg5y{8dzZqn8?>(4mv2fz{F%9K;T$aQCpcUZ z&c*~|St${Y{~zfy9dBo2-BFj{n2yBX#TtJa;y*UU8-E7l-$wpOApi7LPb+`jn*Yi` z{I8S1ng1q;-wkjfT=4bRe-p(2)f0qxoUwkIA%0c=+XMNh`cE=m+zjz^*MAGd@8v(d z$R6&jxp3S!v_Sma`OiW8nYm8kyv3LQ9K_F^|5j7{xAMi`+Ti%xBJuYKhcW&(i2qeu zd2uek?HIqV+Xb%rZ-@BDncM#kL;QOK>tFgh2a>cu9T2}Y=D!Q#KVcbf{N0B5_cO-d4e`G^!5e=b<9BE~Zl1F4PO|@*r2g{| z{|xi;+Yj-Jxs-5TEZ0xc{&PRX&)xqVh{T^}jeh{*=U)E~V*FG$!R;4O5(koOzYIeB zuTcGSuD?>^#L)KL$alTU=lMU4J`d|F8SwR4BL35f|7Zfg?v89sBrV|g#k{WGhv~yN^*-EbLv858tgYU z*l%gDpNsf)?x={FZLJOV+Zyb*NBo#CTIa(Z4fZ=DKJWbPiuiRVBIa$~5uZ2ye8eB) zT>Xlkh|e2;Z^VyDWStN9HQ4WOus;y-dGkNmU|)zcLfc2}b5#!zx^1FpL_eI z4dQR7{ezrS2lx)1E-cE!SBXEWv%!8B_&>Y%uTFjK6uu^|yTSfogMA@Rf&OjcSsDVG z8tk_;*l&yYyzOTP_@U%6-05tv-vz!rKBvATt;}DxyTSfogMA@x3LXEG*-uA46w|^x z{zvb>sQ>r}A+8UtA8Gu*ne+IKlqvpszW7rR|IeA@Ph_@^oUwdJKZ>Hhat$p5dI<8OobzL#3HOEiqHTVAdwL#O0y! zu@2__BPsCPzFRz4PafjllLntV{wDD2-jI&@0?iHfTfpbuzm@}k$wJH*t@Ghl@B{5~ zonrWHZQw6vKK`m5eD3%=8tivA*zanv-`!w84}M$m-caKouD06m^`Jley{Bqd;@{DW ze*8=8dS(FpCCuxWLGb_Wz))Rr#=U6>eD3yh7<}&a%Odc(+c)}!9N0h3x_gthL!*9R z+ahkZSwEgO_||W>cwtk-w|G+xFKKSD-_l?|7x8)Pr#0f&kX(zGwncp2_}e4CMNl=o zq@%%pXM_E&2K(I&_VW>6UogLhSy=IW%o(*CcslAmZ~bUxVoHOcHJM zy+i189{fWeH{4)KQlcpx<1;mHbp4HR z`~`L9SLy*SKMTH^y>!++*VGj8W#p|H({IVv^O?;tem$1yJuTpS`8U0`p2u?F>-;aO zhcdpW6@1nj-%G zHg_Gy@(Ilmzo6WC7F~#zh%e#7wp*F}9QwI}lINKGR`iP+=JGqySNzltuKaXG{Qa~F zE^KqZhW;`MZri~xxR&>S0$RPb8+;*T{qs%vh(FJ^ZkJJ}#9q1tYjFEf$6nO`CB97? ze6F@l2A47VPU5&dAd5ch(OrVtPsl&B-;BQgVobeH*?vO&Y&}~q(1`Djb9i$o+5fH4 z_#G0tx^FapkM`p7mFvjwW^m#{73gd?7gfPJ{ncmtboj2BUuWQ|T0&KNR(a zb1W2Dg1f^}zxyw*&#=WWP7!TlbMFR!wVO(__OHaLjrCJvv`@_TPRjL(9RL636$z4U zchxu5bgDf1)!oqOK-8P~c?e%vJbN8c%N&Vc3U{~NDA1%9b}aHqT$F4wdg{VraA zEBa%+{y7cy&u*~43Vr7JyDj4X5o`UNhyL5V^?y}^{j~<4v;DaOedhX4i5>mo(%wlq zC?MOnCjUTQqzk#-v>#(8zo#JR4|*zH5RQDXrYUXkxAlJ_74m&i`~JGle?0z= zjKMF*pHI)^b{ER;u08%N_+&-%<+@n^v2j$ep_^b}SB=Rad9QaOcU%%?BTN~`Rfqzleh-!O5dxQNB@ORY~Ue#B3HrVe1 zpF98E;D466{pkgtJN`cKovL%JwigV8&s{(L4fY2c><={9Ukv`X+GbzXS1)O>p9lZ5 zRU@kH1wG(@rM9sNjCAo$$<^C9rL>wg&hiYOp`oVE?)X`#T!!-vK`N^6P-lz5MQK zu)nv#{%0HP?{BdGM1%bU4fem%V1K^B{?p)dFTaPt=U#qW#CbizMZ7{xiIz?hD+f!S6BP^ibV?r&u4(k0_cyq0UG15noK-S*K-sTTg@i zZt&@})|4rZdLQcrpLzH}^hNz*y|J3!*AG6uX4dq&dLJ8z`o(%J)B6U&=Wc(7z^5a0 z#GEORIv-mCKGSK-el$zLXDxpElu_{6PKBmDu`QaZw3H#jfPec6NezC#+wg&ri4fc05*moN2?`^QZ zzrp^22K)03_764KZxOeK`~R7irY6?yqgz7TM=@(eXDsH4Y7eJH*pFGY*X?J(kJi@9DpO5$=T}K*X-_jfLi*vCruH%V5@G1Y} zbuh7S=?9-)D2E}~ra|zhNuFcVg%|=~(J>2gJs&$9^;!G>1L$WSVjUq^1U_B;r@*=W zvIKlNe>tbc;FHbz5hLg`ZyqfLpRqJmnn%Is-u@i}pS%B0D|c9b@y=f%Ru70PdMD*< zl?_{l{te2^=|mOjuLU_zK2HDYnNr}37lrsxzYtfb4-rMWT<1~QH}U;)^-kMd-K?uN0+9e7yrFc z->QDP(Ep}t-}Y`*ytuU_+qa{;e4Va7q3Xv;w>8_WO1oox_c8&ozR1}5c`M&5dHJPu z{I-4%_~K>V{tt)pL#?#F@B2=xUHrY^%k`IBzqr$_^uMZ4?*Tu4TEp4ozt7-bE`7ax zou>RzAwDwZeS&<5rc~R+dHS!4xBXFnlGZPKXZ5@87vjy**wH&q629-ZKiTsv+P8tI zFWU$5)!MbF>;DcR{0g1Y^(iv__gl0NgR#EKZY6)j#vcNI6XiwaU$;MN>F&`n%K!a- ze)`?`+oo*V=ixYCw?Dq`_8;iuYV#Mx`MUk_{c`*4`>So*|Ha^6qVrRbeL0%$_1d>` z{rGZi-bUjcqbh^$_}6sRa=|0+xCUs}KH zly~Jy$6tS?ZR&Gntgk%Ee=>gx{AGUp%BS`LeZPOZ*e3o};J4fRIU9d9_-pL_Q5$~^ z_%y!Z&fmEF`}rBP@z;V+^`o|5t`G(J0Y&o0d zH{{>X&!CNe9Qft-XHL%0BK-@tKXkWTKj&H0&+)Ooq-FiMzOEm-TbsWD{BrwKBun<+ z(D(CW)&86Se!2ar>RYuxCxTyYf2#Uc?a#ZwFSkF+H{{>Xk5&6~68LWYP<_q`n&gM* z?MJ=-qPyk!Yg3;m$NG}?>c?*%YW7b7->n~tU-@qR1bsh0R_)KJ;FsH6 zoBmr7e44+ueus@e13vve>{+lZIO1@S5a2EJ9e{FrM z_F*gdG=GCW&0oyFpC7CC;cW2b?~{h>KXp{q|3;NBn!mnpm7jCKr}ifpzux|p{ZCz= zHP_F%QD2Xrt8nG|E0iC4w6^x`Jn*UhgFe;|`F?(^+PCw;r~Idk`HwEYR_)IP;8XqE z#&6|c2tL)nt#8%7Z3Ca`Kj<6gub+Rb_U$6@Wql5+_D%lf_OIj~W?ldCF}mYU7X9;! z4Zd#Q)Nd3ONz(l{-`_)iA-!8U?8r>;MKWpP(8tbo!@#j^3 z9FfV{_?N}{Y5=-O9|HL~A zDC;Lh_0wT9f8P`9(@>kSKBv6;>9_IU8|%y8@iWzbZT?lUen*Udk{ADoP5f8K`s$aw zi}WE-|F!wo#QK5uEz~~v>qo2O2d*{v)PC;0S_JaHaL1I}{?JS>sQl3P>ODj&}^@;7+?VjKTDvrpScf%;q^(r-U&i~ssqKbW8T{TpKaKz)YduPr~@WBp+MgYnnq z-x%W$(=Qv-RHT1U{|-GQgpA6tK|&G_L*z?b72 zf%q%ckJa%H9|fQ4C+JtIA1nWU@a6c1W&BphS9}b7Ild9_E7gzH@f9BjU-tS3%k@*F zySjfxf4Gz1zIhK+`hTavKT);+>Rm;;CI9E%@sl-=@6qKX2E^sPlkEh_W5zPN`SoJV zFO=SX`|U2d)TxPlH4VG}SN$)Aeo?)J%}=8*`MK1ptk@*~%8P|ksWe9M@054dkCO{g zIGopqZ>q;C-egR^5ag>#`D64en(kC{ezImiJrnllGuL__q5j_*x>w;&Q;fe$zsHNe zZofIk9}oM5dgE`2@!bOQ;uqlODx@UzR4&ff9}wqT=fBnLJ1N~i^nJHJWo+rmoFhA4 zR#ThFpKFrMkerk+>pxRe_q`kI{Lq?kK)k1SQf`gv_F+zDhT?Z?eql_T{`Q@^>!h)}rdYpeRLIUul_?$TyJs3#@<*!R^mHcH@6~Uv;5!!aXJdWYQ>3Ya zFP7?;RJv`7_1pB@%sxHWK1vstsX8^s`f`m!Q$oKb)^}G?X1|!tQv7b|>Ojo5xmcgh zG?tUurzglS$QM+eT4R0pN-hcgwpic&@+RMz+?CCyMs3cdZjbfd;xPGiJvHS|RL+fj zwjv3}`~^{cI4$hTO((8<5Jes}X2@U6ueSao z-)*8Q`AcK{YU?lZE!JP7v3|AnS9a8~SbvSh`qkE76u-s#s}So~TYr&nvHlv5^{cJF z?Bbt@^{cJF$hTO3Edzgksah$epH{mcY4kyr=_h~aE^TtVYi|7M=BHE5=S?&pQ>ilb zbCWUtOjZBQ~zoDeVkvlzQ{JV0gk?U>z72qEl8!4m~{PB~+rQf|>db^8; zDa9G`6ZCdz@y(*slxh>l%7-dXD~*1$H$H>DjGy*uyh%45Z8pDiKLtLm6@&59_O&5? z`UDxjBR{Lkw94pbz4+1B@hdakCfr55(nqW|`hI>Y_#IaM8lx|c&FY}gcjxay(K(;; z;}4s~e}lC~KO5(}^LIgrt?4$$Vw7W@(HG+tK{{GN9KgSyVjyT_)zdy9j&v8b-%fh$I&+*{v zdF6bsNjQ4%FSnoCS8pZX zE#gX_asv4JwJLu7Zd3g8GXB;s$0Gg{!4Je=_KoqAZxR2yz<0M=K1=zL6SY5G3z7B9 zZr%R4Ya9K_nA?-Ums^bs2S4#}$lvF$zhr$*7oS}aVv5=yJ%?gs{qV^q|9Kmq)?XI> zDd6|fVGj!jyS(@hkIDRuh2j@t_v)04U#LScDuypkHTlom__Tak_@|*y;RNE>^B3cP zreGca=_bD%e+Azz{xiV8gbuq}IM`e{|IaK~*Uv_i|GbTFS3gDYeBYkJ8^1PMLZbe@{SoX0#wf{`P+CLk7**=JQ;pIoiKN`x95YO1>=N$0W`myZm z_`|+jey#I=F8cdvqhvns#gEGu<;Qtg%*>tZq*KCihX7?t5P`&sh2A8~laJ z?Zd;ge0|DEQ*m0<{{<$$a{D0twg=MG`LXaX1b==h9UMY^!>7aB@4@j0F|n&{muNnR z#viH=KyQojXR7+=()dGl|0481rpC=J;y=?W{);2NS^_NmEmr;|5nsn&JwIEm@^fj# z*YQ{P&$jX}17Eif<>gnk&*lD=Tz=*HQMC^?%kSj|e_?<6WVdT?YCoM?{C69CG2iRA zKhgNr`ccPkvHg36!C%;)trY)WKYk1UN|XO&Y<}eSh0KrYAKJ7J?=ksbu<`BsC+{`+ zPsZj)#xL`u`?nVD+f^q23pT!8|Kw_eFBXQ+ruvj6>elCPXtOmiJ~>b08*=>0-Ni?* zi=D2C_hs+K>^s^Q7XGzn{~Mw0)6nuupIU=IXY?0W_QjhjKl&7t*wm;et^?nF^&f}g zFOLrt+~=KL*-V=w>!`|fJ^1eULp7gNJO2joz4h-C;q_y1{9LYoXL70K*W0Wgx1;Z_ zAFKFJw^;f&Mtr?~sp6+>lzN6xIcN)fot{(niyf62z$NBRr zehYs`yf2rfIA83R`BxkJm7*8oj(GpL3Vu=gj)i|`yuYD>@2L3QUC@=j!CgjwOtwFA z{Z4~rq4A|a`%_6RKX-S$FZ(AI`~kYObJ>ae>z;UDj-*uZ2lI}F|DkxFwk0b0LwRA* z{(soy3nBCG$KO@%KLqmM)+O9dhKeKR=3emi%hdi6KYrN1vrycn+czPXz$(*y;Jf`3 z8GqR~#IM>eG-PYTqb7I)fFz!AIkL+1FR~WALecqxRpzzdzpBt*<$L zYTqb+i~Y+Vi}!WwV)m(hBVT{Riuw6?ysr=7GyBxOQGP7^o$!e$QfK(D(EN|_i!wF;FPHX{VHF@tdyT@Gx+ag^xMt8H$I@^AB)Dn z)i(YPqhEYjH_q~V%0qx6`MJW@A4Z?HdFI?kg7A4t`@)#~2%UfLW4FprwwV^0d>Wc{ zn-=BM-AujyV(^O;)LdnMgc`oBdgWRD8!Q3esqT-~;*WqoU)|5v;x7e1Ltk9yM}8A` z{*F@q_ouK+CvO%~ z;**&o)Td*y?JnP30Dsfc;sE(xeNyd@k?&-R8|ACjn9W4)q0ereRd=i3jDs(aX`ahC zWnV2{Azujci`8lMiV5&D%@jZFnsApd75|uwKbW7r_Wm;TMJPWidX=A`Uqk$p;H&(| z{ObfP5UcYa^lABZEa&fX@H3*gXs+y=a)lV?~lboCN%D?(dUJ3pt zSwAv<{Z>CeqU=x9(mqUqpUL%yd|H0xXN-i}2l?5S`CpAby)_WOlon+D1mc&EZIw4R z(;AZ>?w3*gpUjl6zpYejf33+^%hzTvJn||2jp}aA>&JBlpCp>U!OnO6{(6%?*F?S- zs$2x>_m4686n{2Q;L;zyHjtkh>VG=U5A2*+7^C?c&cAK`H{=7>&q8m z{DRJZw~qfrlV6VC?AH+gy9_>|RG*uqttM5U<@|S1{;k{RlfYN~2Nl0dQ~R&xZ@E6F z3J-nu=A!=Ss<$VDpK;gk?$Yb8-$U)^UVHx(^xgHl-#XAIye{jL3Y8}Pa1HUF3cjp= zny7x%B4fe^c5ocmk(LD51UN>T#D8&?~#t0)cU2oe9^_F4vQV$lU4rTZ1gjg{d*6K zLKWA0`b>i_+qWk1UhgHQ_HCqj|Xtov{0M0~IRUm^a&;jITO`?u#t ze2QPyPlfo&x6S|g2A{q^9o<%*4@=jEyy4Kj3U@9t z`!xPsv43Sfe=m;p%LjiL`ft|$r4hdP>-M;pU))CEg{h8n*sNNR6p+lLC{j!VWIa-TX#VPpEnVt{>c;Qh ztMFfQj6bR0gMMJULdIWxYBBoRxcF~%MeF!;F@8+^fo{KD{H@^c)eGjTgE>cr`esJv z|1+Z0tvd{|ezxtWiMzryW;$+`LXl6!9QS?pEG6sgtign%rQ;*7{79Uls{p!3hM!X+Ks=W z|MX^xf6&VBjqwl0*Z;Qt+PBJ2ANbqC`QIMD{AR7{vp>dn^JDVe<=4(1i1T%QdcI-# zwettT-w~d_o*!)A=JwCX`pH_&-=P@aoxdi3o9kQ6-(m3cG(&0g&Z2!*$N!oZsnBDK zV*Jfj+Xp*;ag2X3C*+&g|pZbtPFmR5k{&Da#v@4k=XR|x}Aa^gk-L>B-<&H8tF#CPX!eEx}- z@psBIP^(TWz@J~L<9|tSC(Zp%)qf~I^W#tFX#P&_&K^^h7c0^Kn5q<~x_^?DKNa!S zNl_O5$yWZVh_AN5Ec{cf{MG2Y`TvqR{~eTZmH(F11=lxOEKrq(-w-8#*)Htq8U@H2&i9O}7pkM^^21tSFgf~(%X4*30lrn;*7 zb+NZ6pkK81pRw^zM1RiOf5XOq7y6F1FRyS=bvgfI3jgMa@nfjl-X^ZAroEP!k?Njhede-Uwn=>o7PbX~r^TD6j{WRyGt{=?L z-Sjbs^!DirtL?7~BL1L^)WTnBiL-<;uS6lg)M0}n9>i!xl|I&!>whvYFv&_oBEXIE_?BDM$U-wdN$@-`5_qA`> zZwKGczxEU7|3>iVm+Jhyq}%@r!dkbHrDdO|XdHu7CCZh_Ca1e%1Wjt>15n_&Wd9eY^hE2O_@C ze|6uke|2lb*ZHsR+x4$*i}*VKUkc~n>;HKBN2vc}w|>7p;_LiZ_wD*uAB^}q|J8lF z{?(3%uk&Bsx9eZs0e(gwBIZ1(dm?WCq_j`(E|H72n&x*k4_)tek-W!@|KAC|vq_r-iOhyLiHxR^Qd=dJoeF4`VrPIZv0;Vq$t-fHvOx6z<<_l{|~xX=h4R}`28yxzg$03e!54URmPA* z4}J*zOzv*E+IBYU1C$qNd$PpU+xFrJAP(TA7A9=-w7W-b61YyPtS_u;^(XP z%*P_WZvQ8RBVS_j_mBUr_HB-z`FO~-bVEudT13gUn zv6!}stpj4VcajpSE~h8|=bSc!Z?nx%%jcg5zD=80i$4dxOgQJX9enq^4z`cD6@1HK zaqG|D2ENw-TLV>Icq#b0S*!A<8lJuie0TqT4MOFYz97yS5Sx1^W!=l3+YGH6)lyse zZPw2o1Ya)nDaImw5&TW$XBho?@QaimPJb)-)V?{K`PmG&x3z4<)@p`e;NEsD1J`= z8SuAJ{G9n&0Dm+2S;qYQEBI$pemMO%!QVphH!;Tl7WijT{G9$F@V8R@&5ZGX7yPp+ zeop@t@Xw+6TNvYi4g7N{eop^p@Z~Y7ImY<6gHQcihtr<}Uxwbw82_!{Q~%lF^sfM4 z4okK%#(ydJ)PHt3{cYgO{(n1T{8xcb{d0%Ye+Yc)pNl+W{CmKs{<*{HKLWn&pZ74v z?|@&V_&NQp;v)?ne+c`sf6h6b2l4ZdKZN6FoV6+qH$(h3=OomUzwO}jk8gzY!#}{FQ5Z_8jol*+(@Am0!FC{OWt0 zDtq|s1>mdWd+|jH?w<|*cmm7x)-%DMFuf?jW9NgvEP-Wu>kRk>(~A;3b{+VW2`tlF z-w*zB(~A;3b|d&J5?H3U-Uj|k(~A;3b`khf2`tlFuLR#>m#c}1ee5#uSI54xz9+5* ze@%T%?7KFBKOOtZ`kpu!{A255V&8QZ_!he?V=dDY7lMDh=|u@1+bZr4?Y~gt=Zu}W z&ETu?b4LF>@YVP^qyGZTO>>AwR0ITU{@WBjjye=fz(=`Vo4nc{C_jQ?N3Ka=9;^xp)33&r2g z82?+~pGEO=`m^B6@v-9=<39&{IX>3G=x+g^#>X5^{{ryk_*f@n{NDs$9>2lqKM%e< zexr*q{+Gd*$8T`@&wwwF-{9;Yo&)_WnSajy)fVt&{(Bkoe*yS1|D66T_%i=}jPY*+ zpVq$)r+)?bwEh+SjPYLzKCOQpPX8+KY5gk(7~`JE8-It$)Q3WBg}B`$qdm98UjC@Fyt#VaE8+2cPzjIGp|r_yvl85o7${0RK9QpVNO1 z{Oc+H#fzh{Ck>wknX{`0|?_0Q?gfImm^FJ+AXI#|9YDSl4>{ou>}v!jgh-w6H+il5WJ z4SczOc8oFpi@>M-vks?!CHQjxY=JTU%fP4ovks?!HTZJ>>^Nim-vj^s6hEi`eegd( z@lPe}jJ`#lMU({vUyV6UEQz{}lZ9QT&sP@t+Gm?SFST{jwh%lxlmjQ>LLW&Sz+P2kJ?uV#$@5%4n<|1_h&2Yl}BmxsVlQT)d;#{bvg zw^05${Q~$|@;Ub}Pc_(|1Yf3}bN}+%2K#yNx%XcWH`wn7pL_rHNQ3UH@bQwVP^^7eM8ln#6~Cg4b6OvVmiq zvf$?#ZArC&zl}Nm4ERN6|4i^5X8%F(=b8QIz!y!tGq@=guFoQ~e^Eh?@pHFt8SuH=hZgYJ+c(HRcl-}D*lz)!J3pUn zuzx1_-1V6fuZ)M*@2ssG?dw8ccF-B84EW#w1S3vV7JTOBhgOH-{P*yNPgg4q`#*Vz z_XFC%=hf+0#s>Qx;Ge~upHA?bALh-_V(>3y_J_ddjh^;pqR-qujDpYIKBUBV8{B?^ z&zzqO#Lu0dEcpEGXE;CH?PnXr&t3oR4fZ?0=WpM_`R8umh9G|K{4YhHdHEUzpL_XQ z3_f@JpB1l#+Bg2?H|%pSzs(Ro^Y8|ZFNNcm$5(Jpt>7QSiIbHApP8rre>gwf`OkpQ zo&PTIwmPt{uuc3_#DnDE#3^ZKl7DzSHZ+>Szh$e; z{}0~zSS!yLXaQfTRHR&+k*yKGpgv+p^`92E`hsoX-!i4^^IoR`*&w}5i`Wc$&L7G! z9Y~V_Kj-Y6;qCQ0D*rdL<-ZwyA>-$pS|a{D zSJSM5Oo`9*2kXn#%_<7r(Rp>MKKUbsA-2YsIK6C$bE&9y;|8?NY z{w-(yuScJG`|B9=nYX{D(P!TNO^JVrjQ>2%I0Mq?JEaV#p8;RCpYx3IXVItjlhbcP zpW07OzZrZv{==F77W8TT%jxI9cc}h3^V5nxwLhGG8~W7#aQf}&Q~Sf|cYseDe60ED zM4#5bobh*|PwQV!zZ-p8|8n|y@a6a$=knEqKINa&??s>T&*}G}Pxd2la(w20Gxk3V=u`gx52HVhKINa&pFp4T|3k+3mw_+qpELiH=riYkIr_}` zUx7a5|3{4ZUkSeKpZtW;pF*GdC!F(l75daa;jI7F=u`iM(_aI=?4NMve=YjdKjF;( zI`pZ3!kM4-=u`iM(?14$8h<##+5ewLUmPxR`p2R_Ut;x-LthBi{2UKHt$&Yj_J1~@ z@03cM{t4(){yF^<(Wm@#`tL%Y^3T~moD}g(CC=sdZImUqt_(dGkMm{t$2eXVL#>-u!O@KSlZBY~MCV zeBSo?Oz^4y#v173dz|^7L!ZW1IrD!V_=1+-7Z{hX8zO$U z;PkhHFOLuB93Q(Le211V&iHQxU$+08^Y}K_$&Np zc>c(Nzn+Knl~(Xi^q=ARqYeBscvxR)2S3BSfOUYs+y7*qKT_hyq4PUfFCIc6rqSQe z6St>iz~9p?ui(NrWxV4t%cb5_-|Kf}bsV&+z=;27c2v9@kUa z!Ec`Pp5ghw1N@d9Jg%p7f}eA|XL$ba0>72n?*{)I=H)97e)|EQym(3v_#N}!Gd%zI zg5PkorJNLZ-^=VT1%G6oH~vxZ|MVYu{W0)I7kK>w`1^j&>yLw9U>!XXVgmee zW`7y@Z!p*AB>0m>-Ywwe;4k0C>#qQR#T>7{68x1rc>O8xryO2?75J<6^7^a6U(H;f zYrtP~fH(fN;IEzM_1A&F?hvoP9{e>6y#6uZAHy7fM!YpHF6f<Z(CIO)lol%iT-E@{}quw-kDDo5}|=NcZ09$bN;d6OPZev zysG{`^Wc9>q;I(XyhS;#eE>b+bI0EcK6m^>;M3l(baC6U-FIhsen4mh{9lWijn1|X zwx9W2+F*Ya{DY~~2RY*(Yp`Dce`zY+%y|sKxXEYShcpTP=8f5Jbw54Q^PTP2ZMZsj z)`}PYY14r>XRbQ4-hx`*V1Gq*zy8LJ-np{6pC~_54fa%c!j@Wy{k)Mt%9CEgwvm-bG|9}SZI&+q4V zPm0}QIMpw*JtF&R(jQt%gFnDv1`8qs{_@gIc2U2*TLXWjSe&+qF<^od>I zKbLzpw{Z%BNN~3ue5(JKa?gw;ia8ig6ZpBuWfR9Y7rMdcZh!I(_Isj!{_#REgUSBx zZLr@5{+nX=Yk9800s89w;4f#ZOr6((sQ)p}j~F!i_pp7$F!(Qt>*OD=*S_=Xc*N(zoV!KY7N~lc%2) z^YyDfyu88w$_oD4{O-i@PgU?a^0TUf&k_G>@XPJbGnr36lS$S%(A-}G{(x%Ss+NWI z3)X_)DYC4q$aUaz$A3(N{b}%XB28UTYWZ`I&(j}?r(=!&tNGnbJ{_#RSj_fr@OI*i zTqC?c6UVNAwy@8O(1e8Xe$s$KMJ57k@-&xE7v#^x{8c2%d;8@OAur z$C$Q*{}s917XB}`E#PkS_eh^_`OSmBoVk7I0skv1e)kM5hW4iyd>ucZ-v_>`AMd8< z{Zaq_{gr%%Q~d@^exd$&@tuQ4pKtjZGWuV@FzUWP4E__3$_0RLS_Hn58T${5jXq!e zON{<=-ugFj2W15OCwS8@mYV#+N}Zr$@}pcvO+H`x#hA%wjK9%-0ph<-=BD75joj&( zaGC^v`B&e$=AmOh=bZfMdXIPr2ejPm@BJu~zrx^)!sq-=jc_!z-&<+$DL-uSPsRB6 zG395K*>_H5^4EZ0c;wEDGliRUq8WN|Ya8sZ1Ajaif9>TGdB^$&`_tg701A5s8JY$~ zrNrUT_WLbOxtYk9Oz=P&{IgdHhN>wClrj5G6Vr*bS@2(MQt>;trJZsR3I1vV|1H`z z^5dM?^$$#bGx&d?<4+KA_^mDAQ+{^;8)N(_@o%B}q~aM&+^GtDg*5ohM@#Lc(!-^l zf!8GYGbNfQXnb-~#w=G_+}Af~2fukPNwm@Troo>rL|>ESkxuZr&)@F?pZom%Ztz?8 zCdo$hy{+JLU!Nfle%tl^fg&wYJ^LGZuhZQCW8se$(nf!{aHxpov{82tXjfe&Z+a}oFh zMc()qgFnc8eS;yz#F9zrgIT1b_T6Z~Rl>PwiseycVm#U&Xxqt_FYg ze%|=kfX{z^dU*Se|NQi@&wqY;*k8ZEdj;iVApgf4=AFOO=!@k0EP~ydW5GXmn%6%L z{NtGYX7TT#^Y_2>>fHM`zp$jIwg73FN*XD&bB{EcBzBj z2K#;S{$HmU;_r|5XWvLA&(8q(pOZn)XA8!eRmX#a4fcn?*Y&fz^?+#c>Zh;e^*RD~ z-!dHUd-FGuzbM}K;(vEGLHvv3eJ}n*{s{Pn>l@Uce0t|n@Xt@pUgR9=E4-4;txL_G z?IgnK&7o=v?+IWYWA|k{uubTrDm^o4h-fJJd^-P^&i|?dig`;Ke2QP6pUxD23;5jUFXzBN_~>=HN3V5`$%p-i{+^d7Z6bPp zw|D;aHzMKG`am=IfBv<<6JqWx%`hC~PP-}^8b6&$8S*LqH?ni?+MOYO+6xl)Wo8O| z>o7XnB<#!l7j9?EKb`3q@)carJjX4iIOMDP@nDAh({J^K{J)TkSK*ca_dQJe!01H5 zkU!opeZFOwDlz1L<&UJ#)%%pc--JH(3>p1Sqwk)-?9Jx{|I^V9q5SY=UI#^&G7kBx z{>$J8(uFS07%!p5*n%z*mtM_~M^3`ah=GLQ^sMQnng=?)C4Q zh|jzJU2F9D*1zk(S9vcy`50FZWj**$s1M+~IR<<${^XUTW1KenlWbq$Sd%ZFd~6fb zCma{!&oCY4e!R(NJwN(r==@W8e)O-if@}7Qj0pQ}BZ-ESB6BSZ{!7f~|E5GX)c!Y% z1-9JCFOvrU#-pWEOQk1DrSFtBM!swv4`je!Q7ZjOsZ<9P^Og?LA3Fb+`~22U@N-T~ zAay>R0zZ{!>-wmO(h;9VJQ$}8_~`;$*HcBA1)ux;&?fM+MOwczPR-yqG5amxH*b>z z9DGv_{MI?zqG6m`Bfjn$a(zS__-%U&T(ol9BR*f>L4H72#HSuLw2m{ zhr#d9vv%L;_YuPVpMe6ezZm?%>62M!z>mvrjhh&fhHfn?(9Hhj9*fp#MgyvvA(GH|gC+=MO&f*@rLLe)0Bk8b_{cY65?j zIsQ)cnd5H;KX=ARdVqEcb4{)2@8#_uwxNF-cmFC}{{x>A=@nV0Rm}11fb53&>7*vs z`pkp>E9U(4fNwbeg?_(sV12!7on9-y{@)KB1V6WT_zq`&N#Sra&vtN&XqyQBej*+G z$$AJ}4tzSkU4H}}BE_)`r@9r#});9pFFcEIhd9hlyDq z=mdXcc41`C5Bsm->V|fK-?{4N{%3Ri(G5O#etN*?{(Yj}2K#;Bv;KGu&A|Ss&-(jr z14f^YlI18KGDg7H%P$>&$h7<}1^;}Jy;@{%6IrG#je;-s%!`Ni=jiv*n5Lfa@qx$o z9AG#qDiB+5*#GK7pZsLt*~EXQL~m&S!uQ3|dROJfSkmBM&Fp8u-@;b;`s-xDzvpP_ zc*flqbpBU3|KzVZvU8E+JYU+GJ-YGdNq53Dflv8Ki+SU$s_VgK@SBChT0bojzpgN2 z-;@J?kazbW{d`t<{+`I}w}F2-v)=*!=Zp6yxKm|3I2`D@ppkw zo4&LQa>yyYoOH?3->^I4J1aT;7SR=IpVg-_{(eW!=s)=w*Fu~EpUd^?D-FKRkN0fy z|1(CP@A~jr@SjK?a!6K{mtN{dFP`W1N5FqP&3EpOtpBCpFWtoJkAnaC2YCH4@b^8->leT;WO?@M%iPOp z9Q-FX^ZFCu5AWvnm!ba*uRjU?(hSpyM>_ptIrxvy^7<>l|H3DD{gvSV1+zZ|{!`5U zD)7JXJa2whgZ~%I{u=O~V)oa9zqW;K=s_(3>%d>f?5_uZJ+prd_R7g2>wQ9zX*Pj*`EP_hS{G5f0o(b z1pX#we>3<8U*N5uGr@n3+1~>G^UVHP;2+G<70(!_t>8b$?4J$(^UVG^;Ggvk-ugKg z{Z`)mp9lWdvw8jV(SMlNzX1FT9;7RVF-{kPe<8EK4g77)<0luP&pdu|G58lTkDpuu z{w4Fg*9W*1{8xB~2gGF!_AdvYvGf)7?gsl;fPY2XAnRAS68!I-!|SKSiqQE}^qUtc zF~j#2(h+}GiUxJrrcA`2`84Mt=-G%b^Yfs{GJQ%j_=|3yW6O<%TEPGG4pv^|z-KKU z3bi%jGZqi|ZRo4|f5{Qzu_8U4cxsRMvi_fQxcrWYFY8n2OT_1A26DTeOLVSHC-_3; zhp+y-zz?-Qj};Qt^E4u@3B_?qjk@V6C%D>KRomI z#5kX6{=O^D&*xZHlqW^}aQ!?kbo-P4(vG?ofs<`~S)YG>Z(aT=R{q|(yr^%zf2x&V zfBdIe`Sr(tx|J`Nuln+HM#T4)ub1cYw1_3`MQn`q38yABsb7rq373mlQhz4Sm&sv> ze>To%ihom_Psz#kk0;L0X7HislVHuIo0BuE`1P;3w7;c_U;mm*`)5_~Wrx4cW?AEO zyS0j6|CXKphzr1X`_GBC8U5htj|=1cWZiQABeq5S@cL10|0ejXi>mvHwlyw^__BR| z$-Bx;;(>@ujsA@yd)YO94wL+GnbFsm=#jxEZJ#eU`}y>3dWbuz|8Aqtgi~U#F#0bA z=I?_dNk{QYqfhy#S)A(_r!SK1T2Co4H6bqUos_%n^7Jo7r^hYqq(6@EoTrsW|8=@% z$Q=3eJlEgIfWJ#DjFEq&R4TE2fh_oe{PaIUA5zNvf^O(n$m*P$(HFcYh_*z0x}+E5 zl#BW_1Nf%asLy%@sW$Y>^?z%DzD9jpMdk0`j()lRZJ~O^;6S<>|$4`_R8v*8c-PPgMV1;0KnkauUVfz4WnlP2E*|ouAUvM@y8T zI;MQQfA@c*cGUU9cM`M?a{o?j`+Wb`O7sB8H~)Qh{(jn#Ti4W&{=yIH zn~^b}K7f9p{$=~0bPfzw@a6KA)E`3sb%_?)){n#Jm-BP~K3V@=zoM06K3(tfwWxys zSJMB?uM_!;qdx2UYYF-(R-RVo;r3xn_J8(gn0jyW{L`=>XrBY~_drU{-`SU`wl>Br zNHGtOM*W4cxxYO^y|jEnl+hSz{t%@-rUs$GraY ztzV}2o$SBS`sGk-z021G`sL;KUXJB=Sp}bC`JJrbm*cO$K9_?(%DjB706(yNvE+Yc z1)n4TQ|Oobw|jOoEMKe8FW2YV$7THo)-NZ%RBP)a#A@^*e&?lM)ADs-zTV|)4ft;T z{GM8fJq|;D)*AgA*!*?ikLA?*h0R}&e!KMf;=cg=RC)g1%2A(}#QXh^(dw}Dz%S`$ zpL3LMhrUBMHLezptKdIQTi9SnXq_|2{5`r(K_4?dm#=+zHP{5{|YmaoV98S>Lx!GDyY zedt4<`S;)Z!Jp6j`45y*{eKRC?=btcq%Ib-y&Jp*HeV>Ms6Sf6JJVr*|KED$X?Sft z4`sss)-RtpQ4bUQo^05UeO;YTq{K+*`p+-(ULKN)G3C@RzV(A3Iz>L(RO`e_jgl|M3=He-!-Bf0EZ9 z1Aia0UjTnUvp)|0_(Qz;nE-!+* z>96K@{{sU~!DhhcyRwJQMAqOlTz11xa})ZUIDJYE{lJw^=!b@%`>h{IeSfrq?_Qt8 z`xN>Jd5M+!Kcx+PIe&SsOrpPUGx&6IjF)oH&{YCn8s4=%pMLzjLvOvX_oW-Z`~5o0 zwHq9^A1^?&r_ zup4X?e7YLIFz5AE#ti8?W9lm!(S%Q1@$_@`AN~{^}^1(H>W{&#*RIZxMDg#1(A$34I7)~D!LN%#D$hvoTe^-OK((EB%%Tp8#cG94Y<@= z(R;IiTCs@&W0$dL?X;a0JGRs5I5SBAw{~U-ixpcPbga|qECt({>Da&WKj*&pCii{L zxe;=Hzx(;r21vf=d7t;3=RNOv-#70R-M}}^^9zvAXyH%!g}%QF_!%Sopbm&@s#y5x zcXc^-jp- zhbNdT0lur;umpPUZzi-m9UqxWxLDabEz__~Q+lwT_R)%yO!J4;pL zo$-`z#{W|${Mu>Q{#ow!lSO4I|KPPSO8D>T`?p(ke&*==+rOof-ffH)e%}4Jko()m z2ww-Bsx|j-m!zIV+<#jk{95q+?PH}sbpNw=?hQ~WeQ^9$!q*S<>oZ{BClS4WwX(MJ zFiTBy}$(9iaa)BLKcoF zE_}U^2mK_3KO3r>>0xyLV&6V!riW2~E;#;D;V%UHWx{U(`{lx43id|{|3a`oTKKcT z{utq7-#)8Uh44p%;~y*hW5Ir<@S(pvR>xW;{3JO3YT?fS`^O01@3-;T!HpCCTKikP z{-#FwcX?^{504lA<@UFD{mlg7FY?mtAD$@u>+Nsx`kP6@zt2mvfB0D8-*115*WXmC z*>&p5>Uwk6zgd5%0xw_b#U-jgk?bEQ{A$&b@=Cb);Ynn_O8DsgTPpnJ;Qmua_RGos zD6(HIe02XjhU||c`!!^LJlUT>_7|%wBlUSz`t7u8Z-SjhHVJ>F_Hnv-|4uaimFWN& zy;4cxuShq;a$^n!ONGBW-Pd;jxCdHxHlLA0S7- zBH`=&Yah1-mpgpq2$(B;o&Nwi0)8(1T>cxL5fh~m{&BDH!~COkrGDb@gLa(1L-;2D z(?Pj0DSboux%z|Jg5AOo>kmp->Q#rYfcftizNtUB=#_e1_~G#v*TOF0o8vD|SL$WU zNA`ZDdWF9tjqLqOJt_RvIzOsC8AH{$ZsD8#i_?{Q$npbV^!jEZ;jc_L!g6Ek&l2IU zPN&nz`A@U(S7m(M@ppm4N6vp5g}+kAkBeTZuL%FfZ2nPwv`6^i{zd6ZJ?!w2<2NmQ z(|>T$EA>_3->8o-rvIbbcwG45@g1cr^@zjAMX&VJzR~kLGk?HEuk?e&QD5g@&(CpN zuu1sg{1&$bk2-wh5uj7}X8w#k0^BS7@c3H`JBM!*zB&Hlbfs>#{Gc7_w+eq{dMYe8 z=Ji?KFek=T3 z|HtS`{fEOh{U7DOEBvtkqjaTyC;Z&;7uCW+;fKdxl&;h-EgzYE{nV}S&G8o(y;46E z{*9UShg#VDf1B{l{>AA^eaG@m{&Dl$t-@cW^N-V&`hxIt=f9{Ukp_t^qla+{fp9-`mVz_`A7B9r-g6&4^CI=N5a1;yZ(S` z<9osn=T|6QsXuo3$oxMed^3N;MX%Hg!q@rFtUsXIcwYG7{0gNj^`{OWc?5V?_-6iw zJOV6^Mc04A`A;Qmjk`(sX8wcI_5BZ)AG9O=r0`d!t6;e?>kqFBKbL>hRi0hK5A%=G z_4O~yH~Gi;y}~#7$Lad|m+*7>N3HR73qQ<1O4rxFEZ^iG=cj~k@{iM%YEnz<^6$T0 z-fl((?h_OK8t?-W3E{WLHkTuxq3R<0i6EMPc>H8P5hKS>_7g?q_{n}EPL7}KClciN z$$p}k96#All#t^m`(>g&cj)@x(}6pFJxun?M16+GPxi}1eTK(R_RB`L8YiYLd*OqVXhyh!eZ~5DbkmoNg zmfsCLIx2OZ`->&nI9KZ7{|NGGX-)#Atq2u>l%TGY#zgGCB|MUS{xJLM< z{~-O7g@0G3|G(XVs?o;^KOA2uU8$3V-%%jIzqTAZ|EVDRX9^!Zznw08z5Wb6 zzKkLJ4+wv4xr*bek5cP|-yTaq{riNEjz2E^<bW{z_fn zkXumi@RPtTcvkqPJ|}@&Fw^Nbz_#Fd;jhlb-vHZ!xdr@M&=%|v{*BrAYe8GEsGwg7 z*@C^oziBZ3O2`(h8pcH|NE#09$aE@bmM7h<~y0i(aZKX)Gy1P2cqMLDB0w zMK4V+nFI9iwfw2j`1cFHQ(xbC4!FXxUtAwCK5_+Uzqo$UrTwR?aV;zn*B9XVvHch_ z|4YR6g)l$37WTV*;1(D_c_G3>2N7#O`{;%WLKCb`wIO_v$g|f$4 zAAo*=`haSo${xRZ@1k_2dTd{hE}UQG8o$-J7J6Jha0{vm)CW|Cs_gNbIliF$9^22< z2bf==KA`+dMSY09gq&R|wM_VC{jh3o95#P@Q~2TW9oNE}&iV%Q3)DAM3(M^Kqw5<= zSL#jM*VO^%FLTu&UEfeGyy^0RTd=G^eM7~+%&tF~`iAn~wEawdgZTyO8_KT{^#Q#; zxmoz;{*VB;0=ik$ALAoea5szkW9sMA)wmXFM16qg$M$2${MU&35atKh!e*Bb+=3cW zf6(#Qi28u;Kbvh|*B@a1Mg7t7YaiGD`yBP*Y2Y0eeUAEoyaTJxSs!pMG}`009GV~7 zk0Jd=*Z8f*wb1ACfm_h%tPi;O8}0F{k1x3X(`Wm7{Nm#8bJho3{5u`>;W^md14`|5 z)Cc4plsldE0oTGjd;IG27u*%>owl!M|2Ti1Yy9f-7gP&7T|RIN<~i#FF8+D;_|2TZ z!181Jne!Kz@2n5F{{Nw)KHz3QN`2_454hQn_MPR_o@e4ga{m}NI=NBJ3>jSR;4>;-r^7+02M}0uvAvoZy54aYZ z?ePnJ{&B$eW61nByT)%du7v@Y58Q%gXMMoM-)xUxT_14$XTbJ#eZa*(;H(e0_|u|3 zpnrctTGR*Q!!GVpJ`Y8!2G1`_|5zZHonrLe(L;aAI7V|35i935#YKzE^@o{HgO7%P9$E`kV-w{7<^;xMG9r5E<_q6YbAGbQD)JKl^ zk^Sc*NBqeC^8q>j56JQFcEpc6J5p-5BYxc3k<#z4iQfOOpMR{z%}%s0;x|5ScA`|w z^0xtJCrZ60@)I7va8Hn5BhD|({R7VdpHQz9@#Bt+;a*G%zi&43wjid$>pTxzgcpD>?-8 z7YM&A)@8-7=EYTVga`dA9KMX-#}CxvIyJw#-aPSGnN9Iks;hlu*|vWwA^gv)qF(#E zM*cU8)s2zgpS-toc~`3I;JlHG(VuJ*{vPe)bo2iDX#9IR(@;Mt{N0_0V7W1wS}Oc~ zosBzNfqS4u_y?KAVjNeorTnoE|Z;rn>-Mqg(8oxRIBK=T$oA=j8<9{tX|3|g)xbVZ{J4!e2uaCxWd}RLHg>U8$xaiIM>!b1O{AcF>s5UkU zKb+s9bfq43_{bwbr|`}E7I_4?SNP%acPp&MwF%!Ge{s5be|@z7nBy4T>r=D=Kb|n{`K*9E9@NX9pQ)l9~HfMe|E`|Q(fD)c zzo;YR8sUfMzbM_jzdjm&c>as?mkZyV|KfD>{`zSAKh3T`p!(=@!VmW^N;mJXkH&9& zQ$JCC^l9On{fpDh`|G3e|1`V)fNJA=!Vl+HDBZljJ{rIAk@E`|Q(fphF57O@y{$8Db-Qll?MLpW*S7 z{W4LX;qjCGGEtx5@ss^BQJ>-Qll?%{=YirxwD{{k`PBc}!tbw0ZII8$ne!JVPdcn9 z+`PX@t-|C2e;5C_r%!#JXZf40`r{LSv*lltS9!ut;uHV5mcQB& z|H#*`t`)xNKZisMKF619gm3zf^nLPwvha79`c~4nA%D2~^#5apAC9kl-5eiBKE6&8 z{$5jmMEpManI!yh{6^#V@h=oUIzJZ(A02g=lmCh%@O|cQX9|CJF}D6sC;MZ_{sY4A zuV}OSrpbSAv?LvICtWA}-NkoXzR&UZKH(RNKY7FvN53&H{ORE9Yn{TMvA!4D!Z^!M zLj6s`KS$R$pSrL*nTlG|4YR6oiIPq7JTxv-{p%f@bQ<3>pST9mx${x=>D_c z_KOdR5$2Ph{o?wIj$iw@{@>%S50MJz6Mv7pKH&U9^&zhXpZKfn@oV;Oo^GyBjePyN z$M((Wg85ah@jE`+f>-=5Uu=PoUsb3+KiKlWp@3^)Hjs>rtN3y8_X|I-%x&ys1NA% z$<4wy_vfq;E1*8>pPNPfF}_^E_3}miG4=D%_-G40evPOP@ch_*F*5%(qCSNAiMHUA zpUo~`Y=MtoBkB)2{u)sq(EVq#?d$pj%)h8VI)3fr`hTCJKBUDR7C!s8&ru)b9dKU0 zvpz&y@bMe%@mm4SkL?#D{YKaL9UpDMCqI2IUu=Po-{`ClxcD3G@vDz7xc<{;`+EH1 z;_q|T2VDF+9rdBdnm>$u{b8r0K6E2}XMKpa;4^=oXOCZf{t~@d?c?vXeLeff`SV=k zSD(M+x8N1O%NJYV^yxnX&iW8-!N+g5$1n8x(*fHrM&`fS zHGaoOTky%xfXf$K;Nv$t>jN(SW_$eV`he>{1Gca011|mnXMMoMpBD82{rfA@qCOZu za&brh!KeQOwqKk-cQbAI_-Rpp%=+Y^@zE{t@dKAHw!q65^#{IxZC^z1m;XT2pD_Q? zJ?xX8w96M;;Nu6PzMjz9121W(@`Kg_>D#BZLT%D?t#dXi86-x7Yf zf1@pU`Of^{{P7}w^z#>6guh+)&*<5s$^XcoPv0W)WBlmZm!IG7h(Ege?CCq=kFGxZ z`7b)+?-A=uKK=7WNBrGD|075I$o}(@BYtH6`G6e%2juv7JK~R?9r^Xo-H!O9XGea1 zyNJJE*N5or#M2k?8$UWb@$+MrUn@qJpZ}W3Pk8(~6lue!K3pTtFUm&7K6OP`@|A`gC->#qkZ4l1|`5YhD3V%n&k3Qk&<1ZKf9{qf- zjNj+{YmM;tX8dUUKK_lu5A&0Z>;a$rtQLM4f7JJh|A6qTD|*+<9_kbSLCfD|{e~x> z_-loa9$yV)zm@E_k^MlmS?{mk4}5=p%;D?$mwH>A!{^t;qxrf>_`gv_y~z0E!at-+ zp?*U6CjO(@{*U|KV&R+kKkjFa=HE+%|7#UM^P?J6xtd))GdE`&C_b9#j^KNzll>XO zKZ1~s>RZkhJ~}_=k^N7Q{qu!?RLMPpZ$4M};QR;b{5mzay51bqEA{_!>o?^k0bk&$^P+V{{*r>h3wao{i$TXj_jXE_Up<1 zNo4S_;{v5JDm+a3Y`}4{EC1n3nvcG`r zFC_byk^Rfb{uN~ZO0s_y*>58I&1AoY>|agx7m@vI$o{ot|2ne2nCveh`%B6Gr^){H zWPcgizk%$3hU~YJ{pDnT1=(Lo_E(Yp)nxxhvVRlVznSdcLiTSZ`=2HIw~_tZ$^IQ= z|8r!&jqI->`)kSmon-$mvVS+(zlZF9p6uUC_P;>(?<4zPB>VT1{dHvj0kZ!f*-w%E zG}&(_`yFJzlk9hq{q_1HQA0hi+BKwb${f%V*F|z+o&{l6jmFOdDeCHsFz_Wz#j_mcfSvfoekx0C%HWPc~wf069JMD|}M z`>&AwSIPd5$^K8s{y&iYeap|Mz77|B?L< z$^J)V|1jAPRP^`%-=|8C=)D9-`b}}+uT`Uu^hb~A`-*Kp9+(#~fIcObKN%#4Ov3U< z|2Fd?2~aDgmJdvhj|aOr7nA)ZWPd5y|1{aZp6o9p`!|sN&yf9AvcH_{uORy? z$^I&`znbjdNcL|c`!|#QTgd*cWdE~d|2DFJJK4X3?0=5zw~_rdWPdH$zmx3WMfUF| z`}dIj&y)Ro$^I9}{(WTsi)8O4hKNeuGKlWNa_WG9!qSr4T3nt<& zj%X=q`L$3#W%<*fey`;>Kz$XH`9B}(Cx!pL;8Lic68;Z@HmF}A`hOjGe5v4i>h-&T z?8nG{5!sKE{RG)BCi^91zm)8kk^OSAKZ@*+Ci`Q^eg)YdOZF?teihlTCi};b{c&W! zhU||g`xD6iM6y4L>>o?^k0bk&$^P+V{{*r>h3wao{i$TXj_jXE_Up<1No4S_;{v5JDm+a3Y`}4{EC1n3nvcG`rFC_byk^Rfb z{uN~ZO0s_y*>58I&1AoY>|agx7m@vI$o{ot|2ne2nCveh`%B6Gr^){HWPcgizk%$3 zhU~YJ{pDnT1=(Lo_E(Yp)nxxhvVRlVznSdcLiTSZ`=2HIw~_tZ$^IQ=|8r!&jqI-> z`)kSmon-$mvVS+(zlZF9p6uUC_P;>(?<4zPB>VT1{dHvj0kZ!f*-w%EG}&(_`yFJz zlk9hq{q_1HQA0hi+BKwb${f%V*F|z+o&{l6jmFOdDeCHsFz_Wz#j_mcfSvfoekx0C%HWPc~wf069JMD|}M`>&AwSIPd5 z$^K8s{y&iYeap|Mz77|B?L<$^J)V|1jAP zRP^`%F9p9}ASV13V82NCO9SltLHaBo`+ksq;jaL{e`LGxmj<=a_fzx={|<2e6T)u^ z#zEsRCi^9pKN%W--10|5{W8nP_WyFSKg#lJq4_Dbd~E%x68?Pf_^KxR$5=kL|5RE& z_We`SEgu{I46=WYZ|1z?FIoZF0>|aUtuOj>T~gY18f?6;BqHDrG+*}s$Q-$nNCCj0l0{m+yA zd&&M6$o_p~|BGb*ezL!g>_0&EA0+!J;XekxzS(Q}z>AyaT1XJRe(@Oi{-vbl*Fvwr zq%0qM{j1mV8=n9TqAP`^a6-wQ5<#-9@Y4}vzRUncVN9ymYc!e1XK z=q1Qe!iVBI(-p%12wdOB3jaqzC3F*t)WwnOvtv{o>Yt{rjrb3$G_-$C7yec1VW>aD z@*joz=Lo-9l^<3y+%8C|6_NaZO%>sAlZhbej{^IFx+4<*e$@rde@ys4Q;$IX65;=g zYKQuz!q@qEFNnurZIs#mJ3%?lFBg6Qt`DPxkIw&S;qM3cpE1J!nffwp-x{bw`1{p& zq5fFm>+$toP>t(9mBQbzwnF`C%kTQt1(mq?j}gAk57Zwg{Qc?_X#KAderEqx;PNwG z_`1HmKM9!s3BuR$L;Z=u->?1zI=+q*zUe;!F#nT;ug4eEpKSTxhUVvZ;lBbtzMLTZ zAA|iV!v6=bUn~570{c^iKLGaYgue&upD6s_ly*S-XT9+Et7oD9NtTZtUng6B*RRTe z_4yRxXX;xFcYK*f_D^;A$o!mc`|kzCxcr(sT?^`o?ER{jHZdFUqqZiJ z_%jtwAGd!?E&u-P`EPr=UCl{$^!v@{rVsC@igx<>Gc12rF8*MSx31JVmVbXjrA!l< z{FoM!ogO2sc6i_9-^;K1I6oF|j8~7me~z*Iy!?Cj9;HTEzNl~2@v4zWuT-(+i~b*r zXZzF0S~=eGBk^|^)%e9f+45&4%u#-@eZpu2zILFW8**9^7Z&lRjFigdzk%He0O~6$ZC)Isq>tErat6+kLs_~CoKQ+xH>pE ze>3x|ZlC$j`Ig@l&m4b~>At`#@-U|tx%{mHo(_zhPH)%S`BPFL`H2sd<*4&A;(YeF!&Z#Q&W?obR0-r7p4j zZ2rUey<51{@`v(Y0+^vJu>7I?mjL?z!r^>C|G&)ghw`uE_s)Mp_|N5z?@IU15%+ z?wMiy+butvf75#aIeOXhv-weo>Z8;vmYe!}b5 zo?GyVVf@VXSx^6b%YPx4|J?O!uNE$_d~AL$wEUs?v)6yU;=jo9hvG-%f0pf=&TslZ z;OezfpS1j0IUjI!U#W{Ne=t9}_`U95`jq9*%Jt7MelOkJ1|rWdu=!~u`?D?I%+M^dC>%+@@;vAAR1akMG5q@tZ12#Cv@1 z-?+r(=Z=p?_sWh^Hx1{Tqr0bn^Kd>O{!1-i^nbGj)rq>WrXKx&7g&Cz|9k36Ewua> za^q|0`0KF+ms$Q`esc2@4_&D%oqlHiHdKE+u9IJ7`6mB^^TYm*l+WF(N-eeg>$CUg zY)owgtk0C%e%J|98;`y-I)38Qmaoq*GWpTx7l17&v;AEBNyHYETmH}UeE$}%xBNw` z=C>WAFV8;O`)K9Hrj6YjYaMAl;=dZ@^o#WR$)hTxd-kExmcMD$`Zn#Sbo_u8##sK| zRWBMp`6#4?3dqbA2RS-+rXqe+GA=(>KR=ef_RmAK^VK=nSVH#$Vp!t1Gq0@>|0puj@17bB*P1 z&H1{%`G2mp`~!Kue+$bjKXQI&&M&;4zqrBjSB3NQR8@bK$9YjMvnwor==xv<;QHgr zLVo7@S1yW?|NkwPk9~gOR@={=KMp;=;IYQ>Sv_D?qnfzTUs7 zYW;jr`MmO~ih;2sUfBru*&R+_*B_Pfy?aog7S*YR)%E6P3R5btGPJrkHf>zy3-brB zPfYmDbG(Usof3^s}d9Lws zpSbX^ieckV2p=8)nZifMUqkjMko{wYkIw&bWWP@M=<$0Z*`Go7&ldijneqE%5$gEZ zApE<*^=F0f(c^ce@X`JMcFV`rW+UA}_EWJN#Qm}Q{9>zKVglWNn0ER-CwFw|`x|>U z*Lr8m>FXn8YHZ)wo=X4ur_+Dj#BY4>E!gh#d#1Ga==?N4@$}}}EeEdi$WmV+e`D77 z()BV%A^+iw|F%!;rf-xKMf>M1GhPqRf7QO!X0;``#dH0n$nu}eo?jz$r4ogF6Tf%# z`Zu*${^DHx09~nAAs>+Y%-Fa5*34h4mw$9<=;Zm^0WC*KGEl&9iUijXpm5f65E{y1w~;Mp=F?|0aI_ z7A_Tj-ux%10UY5MTK?etB&Y$*fEEnr17>iSS^na%U+Vgw*#n+)xVe^}-M`x3=V_bX zH_!5i@~_Xpyjz$*oUi9UzH`J&EPp8fnKNL|7EO^t1U<`@Hkh<@B@ht9{+Rdtm+Wex+}I zHaLBA|ElSqCVtNrtohabx&9C6{d#@I_H+Fo(EIiJOkp3;`;~s%pq!uIuj9}3A059w z{(AP%xYN({e?afo^G~Ori67AW^=%r%`M!Nq_rMaTpXvXI-mh=1Xl->Hl3$KNCNs|F0j; z2lW39PT$-=390_-A*Ubazs76jCp>&S?DWI@*Yx-vef6&a7|yTq@1I|C`eFV}{Jt&p z316@OeE*e$I{$ioRnHH5uj}39b%g03&NuUOPk+1RFV2tOyMwk8ABdL22U*)VD&+%W28SLcm8YQ_g~*= z7QP-|dT{AaauehVPs?yVV146i%g>$vX5u&f(`zpe*nW2XJoJ6nxOWfd1Fitk8zXpBIPob$#>oU$XosYqsXa@7;oR{c%-T zZ+gdvb=0f+==A~1*Y|Ij>zjJ+<9FpZ3@ld2*Oe3D7g@f(e?|ntuK?bAMV@ zAL98J`~EcJSLt7$ul>jU?@w#D@{{LRZ>ja{KB}XT|8N+;ZwvPQW7+sOYQII_pXPc0 zSbw4TLw~B@-ET_S_t$0P@5#pRd4HXK|6A5K`EPl`|Nb|1YvlgS^hJxpE|bhY2khB_ z&Jup0vh^+b4Np1z@#(f7-k+A7(mn<7{92Rc=hknZ(kH3@pQ~+O*EhW|u>PqzQy!mE z=i9;!mcI&`pU+tSFT?nYzn(lH{Z!I-8(J;DHLU;Y>#3)_&fLSyF1P#x*_3DE_f5a< z?a}cSsMZ~iW{zKz`X&MT=jvhnuK?DUZnXWu{GR~uZ*%&3{YvTl_xQK)Ij66GKUmjs zvB{55KGAmvw+-j_O!gkXXQ|sF&nJfQK2(xa#lE43KmUk^=2p)%8P9xD!B$9N%W}nP z+Bh}8y55*(xCV#yM=A3^$frd5p$hXgcdVLSJu^2Mp9P6}2q{v%)!MH&zR3?V_okIV z_~toRBg5+tszV&Rv8{qe##?;%HiO3D5S!XJYSUR&j4|5&nLEBvwG{EQ;|CkY>L z$c2{xsp&K%-Zxg6v-?{0ZRrFB1MFuwO~`&k+6;aQtVI{j`y2AGsylqWPc{vKbP#ENA|A}K6-w5t?<$Fx2wtiV&S9bSDz6+dj4~p@X_;= z+l7ywKin&P^zr=*!bcz9+k}5Q`1pI5@Q(xgcMAVZu)jw5$AkS=;iKn2E6M&UvcH<_ zUoZTr;QhNy_}&YiBECC>f0Foj-#>m%_^0@S;^$8lK05x>gpZE@ZsDITw$JyE7m)og z3jb8!fW^-@lKmCJN7v7j$^PeskM2K7vLC2^{fhaa>kFz9a8WR?55=UP#QH_jPc`JV z?*C<6`nA~j6T;WO586NIJfT?lNo9VyH11O({FLg3`lZ5GY8x(iEtLsBPQ(_z>8p`gvP1P8iKVd1a)iqpNEdx*Yz{vPtW*=3*CI8EBDdGuWI!r=Dhn)Vzv44 z0=}L~_Up+0iCn)}?TGAO)AREB=NVylO2)$O^xLEEKY=LbXAu}R97Kgrfh^QEfQcMnECnX7waGyj&CC+q*eIE=3w5TA^% z!vALfsdjk(ez$MQp%#&IZP&(zSrb|3_RVF;NE$NOLE~F(G$n@dA8`BG*xaWw$?U&o z|F1Hrt&RRo-k%;E*3bLK!e45?wBWz$^|ul=zkKli-uamewEf9xz6bVfi+cSn;;Ur% z4=7)+zeW7cF#aZ#uh-uq{`@s2{{G|{p#13dH;12YK>7OoCE|Bx;!iiBe7*h_@pb>% zQLFQV%D-NJi}-r~8XvZQ_4-@H*YVG-1I8byA6Dd#udw&`Cntwrc>g!%^wSL}zsTw1 z;*UFhrBLxFY`@=(UzA^L`|Y}>!u&wpHY>mX;On#S8%>u?H=xFEk%%8(pQG`2He=&Y zi1@?$kF3uket3P3`uO@B_3`yN>f`IPx+i~p%~tWgWW2E{`&&@F>vN#W?@^bR*B5Ka zOgP8A@v3SoN>#^S4wP<1|6S6njhN-XrD}nGphi35S5x9IA1Xq`KTC}trxsP$muK@6 z)DEWOfINH2{!8kihYHVU2Y)*I#V4iTI`|!hd{tFdHTX>*_r=B1PY(V>AwTt%qlo`g z(jQWXz8Y*Y{G#qC;ty0yjk>hD-khmqPKee{OiV9rjKyDFK2A@xygz|j5%pJ;z7(jr zLHv=alMz$snDCR!jUSJp{6KX^*GlknC0OnzPsCYqYz`-!QjpIl>noga`NsEcdz z@89UCoH)0&a^BWyW(f* z*6K^Ny|DfnlYYxYeb`FE{37YEHJ6xi@yDg#qM-5XGxc%#&%c{rje-0G!Z)uDLVnI} I{pRogKd!dgj{pDw literal 0 HcmV?d00001 diff --git a/dockers/docker-pde/cancun_files/cancun_6.8.0/bcm56870_a0_cmh.pkg b/dockers/docker-pde/cancun_files/cancun_6.8.0/bcm56870_a0_cmh.pkg new file mode 100644 index 0000000000000000000000000000000000000000..91f36a3972241f199d0effb46bbc8056a4f7a057 GIT binary patch literal 4324 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