diff --git a/.azure-pipelines/azure-pipelines-UpgrateVersion.yml b/.azure-pipelines/azure-pipelines-UpgrateVersion.yml index 5cd85ab5520b..cc6135b045ef 100644 --- a/.azure-pipelines/azure-pipelines-UpgrateVersion.yml +++ b/.azure-pipelines/azure-pipelines-UpgrateVersion.yml @@ -18,29 +18,44 @@ schedules: - 202006 always: true +resources: + repositories: + - repository: buildimage + type: github + name: Azure/sonic-buildimage + ref: master + endpoint: build + pool: sonicbld +parameters: +- name: 'jobFilters' + type: object + default: + - vs + - barefoot + - broadcom + - centec + - centec-arm64 + - generic + - marvell-armhf + - mellanox + stages: - stage: Build variables: - CACHE_MODE: none - VERSION_CONTROL_OPTIONS: 'SONIC_VERSION_CONTROL_COMPONENTS=' + - name: CACHE_MODE + value: none + - name: VERSION_CONTROL_OPTIONS + value: 'SONIC_VERSION_CONTROL_COMPONENTS=' + - template: .azure-pipelines/template-variables.yml@buildimage jobs: - template: azure-pipelines-build.yml parameters: - buildOptions: '${{ variables.VERSION_CONTROL_OPTIONS }} SONIC_BUILD_JOBS=$(nproc) ENABLE_IMAGE_SIGNATURE=y' + jobFilters: ${{ parameters.jobFilters }} + buildOptions: '${{ variables.VERSION_CONTROL_OPTIONS }} ENABLE_DOCKER_BASE_PULL=n SONIC_BUILD_JOBS=$(nproc) ENABLE_IMAGE_SIGNATURE=y' preSteps: - - script: | - containers=$(docker container ls | grep "sonic-slave" | awk '{ print $1 }') - if [ ! -z "$containers" ]; then - docker container kill $containers || true - sleep 5 - fi - images=$(docker images 'sonic-slave-*' -a -q) - if [ ! -z "$images" ]; then - docker rmi -f $images - fi - displayName: 'Cleanup sonic slave' + - template: .azure-pipelines/template-clean-sonic-slave.yml@buildimage - stage: UpgradeVersions jobs: - job: UpgradeVersions @@ -64,14 +79,14 @@ stages: default_platform=broadcom artifacts=$(find $(Pipeline.Workspace) -maxdepth 1 -type d -name 'sonic-buildimage.*' | grep -v "sonic-buildimage.${default_platform}") echo "artifacts$artifacts" - cp -r $(Pipeline.Workspace)/sonic-buildimage.${default_platform}/versions target/ + cp -r $(Pipeline.Workspace)/sonic-buildimage.${default_platform}/target/versions target/ make freeze FREEZE_VERSION_OPTIONS=-r find files/build/versions ordered_artifacts=$(echo "$artifacts" | grep -v -E "arm64|armhf" && echo "$artifacts" | grep -E "arm64|armhf") for artifact in $ordered_artifacts do rm -rf target/versions - cp -r $artifact/versions target/ + cp -r $artifact/target/versions target/ OPTIONS="-a -d" [[ "$artifact" == *arm64* || "$artifact" == *armhf* ]] && OPTIONS="-d" make freeze FREEZE_VERSION_OPTIONS="$OPTIONS" diff --git a/.azure-pipelines/azure-pipelines-build.yml b/.azure-pipelines/azure-pipelines-build.yml index 7c312de85931..c84c91441806 100644 --- a/.azure-pipelines/azure-pipelines-build.yml +++ b/.azure-pipelines/azure-pipelines-build.yml @@ -50,6 +50,7 @@ jobs: swi_image: yes - name: broadcom + timeoutInMinutes: 1440 variables: dbg_image: yes swi_image: yes @@ -131,3 +132,4 @@ jobs: make $BUILD_OPTIONS target/sonic-$(GROUP_NAME).bin fi displayName: "Build sonic image" + - template: check-dirty-version.yml diff --git a/.azure-pipelines/azure-pipelines-download-certificate.yml b/.azure-pipelines/azure-pipelines-download-certificate.yml new file mode 100644 index 000000000000..3e1a58582f61 --- /dev/null +++ b/.azure-pipelines/azure-pipelines-download-certificate.yml @@ -0,0 +1,33 @@ +parameters: +- name: connectionName + type: string + default: sonic-dev-connection +- name: kevaultName + type: string + default: sonic-kv +- name: certificateName + type: string + default: sonic-secure-boot + +steps: +- task: AzureKeyVault@2 + inputs: + connectedServiceName: ${{ parameters.connectionName }} + keyVaultName: ${{ parameters.kevaultName }} + secretsFilter: ${{ parameters.certificateName }} + +- script: | + set -e + TMP_FILE=$(mktemp) + echo "$CERTIFICATE" | base64 -d > $TMP_FILE + sudo mkdir -p /etc/certificates + mkdir -p $(Build.StagingDirectory)/target + # Save the public key + openssl pkcs12 -in $TMP_FILE -clcerts --nokeys -nodes -passin pass: | sed -z -e "s/.*\(-----BEGIN CERTIFICATE\)/\1/" > $(SIGNING_CERT) + # Save the private key + openssl pkcs12 -in $TMP_FILE -nocerts -nodes -passin pass: | sed -z -e "s/.*\(-----BEGIN PRIVATE KEY\)/\1/" | sudo tee $(SIGNING_KEY) 1>/dev/null + ls -lt $(SIGNING_CERT) $(SIGNING_KEY) + rm $TMP_FILE + env: + CERTIFICATE: $(${{ parameters.certificateName }}) + displayName: "Save certificate" diff --git a/.azure-pipelines/azure-pipelines-image-template.yml b/.azure-pipelines/azure-pipelines-image-template.yml index 0a83c334074f..7f2874024740 100644 --- a/.azure-pipelines/azure-pipelines-image-template.yml +++ b/.azure-pipelines/azure-pipelines-image-template.yml @@ -28,7 +28,7 @@ jobs: - template: cleanup.yml - ${{ parameters.preSteps }} - script: | - if [ -n "$(CACHE_MODE)" ] && echo $(PLATFORM_AZP) | grep -E -q "^(vs|broadcom|mellanox)$"; then + if [ -n "$(CACHE_MODE)" ] && echo $(PLATFORM_AZP) | grep -E -q "^(vs|broadcom|mellanox|marvell-armhf)$"; then CACHE_OPTIONS="SONIC_DPKG_CACHE_METHOD=$(CACHE_MODE) SONIC_DPKG_CACHE_SOURCE=/nfs/dpkg_cache/$(PLATFORM_AZP)" BUILD_OPTIONS="$(BUILD_OPTIONS) $CACHE_OPTIONS" echo "##vso[task.setvariable variable=BUILD_OPTIONS]$BUILD_OPTIONS" diff --git a/.azure-pipelines/build-commonlib.yml b/.azure-pipelines/build-commonlib.yml new file mode 100644 index 000000000000..df9bcb25ae70 --- /dev/null +++ b/.azure-pipelines/build-commonlib.yml @@ -0,0 +1,19 @@ +pr: none +trigger: none +schedules: +- cron: "0 0 * * *" + displayName: Daily build + branches: + include: + - master + - 202??? +resources: + repositories: + - repository: buildimage + type: github + name: Azure/sonic-buildimage + ref: master + endpoint: build + +jobs: +- template: .azure-pipelines/template-commonlib.yml@buildimage diff --git a/.azure-pipelines/check-dirty-version.yml b/.azure-pipelines/check-dirty-version.yml new file mode 100644 index 000000000000..5d3909bd280e --- /dev/null +++ b/.azure-pipelines/check-dirty-version.yml @@ -0,0 +1,16 @@ +steps: +- script: | + . functions.sh + SONIC_VERSION=$(sonic_get_version) + echo "SONIC_VERSION=$SONIC_VERSION" + if [[ "$SONIC_VERSION" == *dirty* ]]; then + # Print the detail dirty info + git status --untracked-files=no -s --ignore-submodules + + # Exit with error, if it is a PR build + if [ "$(Build.Reason)" == "PullRequest" ]; then + echo "Build failed for the dirty version: $SONIC_VERSION" 1>&2 + exit 1 + fi + fi + displayName: "Check the dirty version" diff --git a/.azure-pipelines/docker-sonic-slave-arm64.yml b/.azure-pipelines/docker-sonic-slave-arm64.yml index 94c6143eed55..2a9af06c3d01 100644 --- a/.azure-pipelines/docker-sonic-slave-arm64.yml +++ b/.azure-pipelines/docker-sonic-slave-arm64.yml @@ -3,6 +3,13 @@ # Add steps that build, run tests, deploy, and more: # https://aka.ms/yaml # Build and push sonic-slave-[buster|jessie|stretch] images for amd64/armhf/arm64 +resources: + repositories: + - repository: buildimage + type: github + name: Azure/sonic-buildimage + ref: master + endpoint: build schedules: - cron: "0 8 * * *" @@ -23,6 +30,7 @@ pr: - sonic-slave-stretch - sonic-slave-buster - sonic-slave-bullseye + - .azure-pipelines parameters: - name: 'dists' diff --git a/.azure-pipelines/docker-sonic-slave-armhf.yml b/.azure-pipelines/docker-sonic-slave-armhf.yml index ab0cefebf61f..69e73479f342 100644 --- a/.azure-pipelines/docker-sonic-slave-armhf.yml +++ b/.azure-pipelines/docker-sonic-slave-armhf.yml @@ -3,6 +3,13 @@ # Add steps that build, run tests, deploy, and more: # https://aka.ms/yaml # Build and push sonic-slave-[buster|jessie|stretch] images for amd64/armhf/arm64 +resources: + repositories: + - repository: buildimage + type: github + name: Azure/sonic-buildimage + ref: master + endpoint: build schedules: - cron: "0 8 * * *" @@ -23,6 +30,7 @@ pr: - sonic-slave-stretch - sonic-slave-buster - sonic-slave-bullseye + - .azure-pipelines parameters: - name: 'dists' diff --git a/.azure-pipelines/docker-sonic-slave-template.yml b/.azure-pipelines/docker-sonic-slave-template.yml index a8b00fa576b7..2cf06638a4cc 100644 --- a/.azure-pipelines/docker-sonic-slave-template.yml +++ b/.azure-pipelines/docker-sonic-slave-template.yml @@ -3,7 +3,6 @@ # Add steps that build, run tests, deploy, and more: # https://aka.ms/yaml # Build and push sonic-slave-[buster|jessie|stretch] images for amd64/armhf/arm64 - parameters: - name: arch type: string @@ -38,6 +37,10 @@ jobs: pool: ${{ parameters.pool }} steps: - template: cleanup.yml + - ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: + - template: template-clean-sonic-slave.yml + - ${{ else }}: + - template: '/.azure-pipelines/template-clean-sonic-slave.yml@buildimage' - checkout: self clean: true submodules: recursive @@ -68,16 +71,6 @@ jobs: BUILD_OPTIONS = 'SONIC_VERSION_CONTROL_COMPONENTS=deb,py2,py3,web,git,docker' fi - containers=$(docker container ls | grep "sonic-slave" | awk '{ print $1 }') - if [ ! -z "$containers" ]; then - docker container kill $containers || true - sleep 5 - fi - images=$(docker images 'sonic-slave-*' -a -q) - if [ ! -z "$images" ]; then - docker rmi -f $images - fi - tmpfile=$(mktemp) echo ${{ parameters.arch }} > .arch @@ -90,6 +83,10 @@ jobs: docker tag $SLAVE_BASE_IMAGE:$SLAVE_BASE_TAG $REGISTRY_SERVER/$SLAVE_BASE_IMAGE_UPLOAD:latest docker tag $SLAVE_BASE_IMAGE:$SLAVE_BASE_TAG $REGISTRY_SERVER/$SLAVE_BASE_IMAGE_UPLOAD:$SLAVE_BASE_TAG + if [ "$SLAVE_BASE_IMAGE_UPLOAD" != "$SLAVE_DIR" ]; then + docker tag $SLAVE_BASE_IMAGE:$SLAVE_BASE_TAG $REGISTRY_SERVER/$SLAVE_DIR:latest-${{ parameters.arch }} + docker tag $SLAVE_BASE_IMAGE:$SLAVE_BASE_TAG $REGISTRY_SERVER/$SLAVE_DIR:$SLAVE_BASE_TAG + fi set +x echo "##vso[task.setvariable variable=VARIABLE_SLAVE_BASE_IMAGE]$SLAVE_BASE_IMAGE_UPLOAD" echo "##vso[task.setvariable variable=VARIABLE_SLAVE_BASE_TAG]$SLAVE_BASE_TAG" @@ -98,11 +95,26 @@ jobs: displayName: Build sonic-slave-${{ parameters.dist }}-${{ parameters.arch }} - task: Docker@2 + condition: ne(variables['Build.Reason'], 'PullRequest') displayName: Upload image inputs: containerRegistry: ${{ parameters.registry_conn }} repository: $(VARIABLE_SLAVE_BASE_IMAGE) command: push - tags: | - $(VARIABLE_SLAVE_BASE_TAG) - latest + ${{ if eq(variables['Build.SourceBranchName'], 'master') }}: + tags: | + $(VARIABLE_SLAVE_BASE_TAG) + latest + ${{ else }}: + tags: | + $(VARIABLE_SLAVE_BASE_TAG) + - ${{ if ne(parameters.arch, 'amd64') }}: + - task: Docker@2 + condition: ne(variables['Build.Reason'], 'PullRequest') + displayName: Upload image ${{ parameters.dist }} + inputs: + containerRegistry: ${{ parameters.registry_conn }} + repository: "sonic-slave-${{ parameters.dist }}" + command: push + tags: | + $(VARIABLE_SLAVE_BASE_TAG) diff --git a/.azure-pipelines/docker-sonic-slave.yml b/.azure-pipelines/docker-sonic-slave.yml index a0b156bfde19..3ae3f88f0154 100644 --- a/.azure-pipelines/docker-sonic-slave.yml +++ b/.azure-pipelines/docker-sonic-slave.yml @@ -3,6 +3,13 @@ # Add steps that build, run tests, deploy, and more: # https://aka.ms/yaml # Build and push sonic-slave-[buster|jessie|stretch] images for amd64/armhf/arm64 +resources: + repositories: + - repository: buildimage + type: github + name: Azure/sonic-buildimage + ref: master + endpoint: build schedules: - cron: "0 8 * * *" @@ -24,6 +31,7 @@ pr: - sonic-slave-buster - sonic-slave-bullseye - src/sonic-build-hooks + - .azure-pipelines parameters: - name: 'arches' @@ -52,8 +60,15 @@ stages: - ${{ each dist in parameters.dists }}: - ${{ if endswith(variables['Build.DefinitionName'], dist) }}: - ${{ each arch in parameters.arches }}: - - template: docker-sonic-slave-template.yml - parameters: - pool: sonicbld - arch: ${{ arch }} - dist: ${{ dist }} + - ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: + - template: docker-sonic-slave-template.yml + parameters: + pool: sonicbld + arch: ${{ arch }} + dist: ${{ dist }} + - ${{ else }}: + - template: '/.azure-pipelines/docker-sonic-slave-template.yml@buildimage' + parameters: + pool: sonicbld + arch: ${{ arch }} + dist: ${{ dist }} diff --git a/.azure-pipelines/official-build-cache.yml b/.azure-pipelines/official-build-cache.yml index 4019dbba4f97..94fd48ede501 100644 --- a/.azure-pipelines/official-build-cache.yml +++ b/.azure-pipelines/official-build-cache.yml @@ -37,3 +37,8 @@ stages: variables: docker_syncd_rpc_image: yes platform_rpc: mlnx + - name: marvell-armhf + pool: sonicbld-armhf + timeoutInMinutes: 1200 + variables: + PLATFORM_ARCH: armhf diff --git a/.azure-pipelines/official-build-cisco-8000.yml b/.azure-pipelines/official-build-cisco-8000.yml index aeec64a848a1..474d3e743ff7 100644 --- a/.azure-pipelines/official-build-cisco-8000.yml +++ b/.azure-pipelines/official-build-cisco-8000.yml @@ -22,6 +22,18 @@ resources: name: Cisco-8000-sonic/platform-cisco-8000 endpoint: cisco-connection + +variables: +- group: SONIC-AKV-STROAGE-1 +- name: StorageSASKey + value: $(sonicstorage-SasToken) +- name: SONIC_ENABLE_SECUREBOOT_SIGNATURE + value: y +- name: SIGNING_KEY + value: /etc/certificates/sonic-secure-boot-private.pem +- name: SIGNING_CERT + value: $(Build.StagingDirectory)/target/sonic-secure-boot-public.pem + stages: - stage: Build pool: sonic @@ -29,12 +41,14 @@ stages: CACHE_MODE: wcache SKIP_CHECKOUT: true TERM: '' + PACKAGE_URL: "https://sonicstorage.blob.core.windows.net/packages" jobs: - template: azure-pipelines-build.yml parameters: buildOptions: 'USERNAME=admin SONIC_BUILD_JOBS=$(nproc) ${{ variables.VERSION_CONTROL_OPTIONS }}' preSteps: + - template: azure-pipelines-download-certificate.yml - checkout: self submodules: recursive path: s @@ -60,5 +74,34 @@ stages: make PLATFORM=cisco-8000 platform/cisco-8000 tar xfz $(System.ArtifactsDirectory)/artifactory-*.tar.gz -C platform/cisco-8000 displayName: 'Setup cisco artifacts' + - script: | + set -ex + filename=$(find platform/cisco-8000/artifactory/sonic -name cisco-* -type f | head -n 1) + if [ -z "$filename" ]; then + echo "Cisco sai package not found" 1>&2 + exit 1 + fi + cd $(dirname $filename) + echo "PWD=$(pwd)" + ls -l *.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 + # See https://github.com/Cisco-8000-sonic/sdk/blob/master/azure-pipelines.yml + # The $PACKAGE_URL is only accessible for AZP + version=$(echo $package | awk -F_ '{print $(NF-1)}' | cut -d- -f1,2,4,5) + 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) + env: + StorageSASKey: $(StorageSASKey) + condition: ne(variables['Build.Reason'], 'PullRequest') + displayName: "Override cisco sai packages" + - script: | + echo "SONIC_ENABLE_SECUREBOOT_SIGNATURE := y" >> rules/config.user + echo "SIGNING_KEY := $(SIGNING_KEY)" >> rules/config.user + echo "SIGNING_CERT := $(SIGNING_CERT)" >> rules/config.user + displayName: "Enable secure boot signature" jobGroups: - name: cisco-8000 diff --git a/.azure-pipelines/official-build.yml b/.azure-pipelines/official-build.yml index f43c6521fc50..fb986cf67039 100644 --- a/.azure-pipelines/official-build.yml +++ b/.azure-pipelines/official-build.yml @@ -18,9 +18,20 @@ schedules: - 201911 - 201811 +resources: + repositories: + - repository: buildimage + type: github + name: Azure/sonic-buildimage + ref: master + endpoint: build + trigger: none pr: none +variables: +- template: .azure-pipelines/template-variables.yml@buildimage + stages: - stage: Build pool: sonicbld diff --git a/.azure-pipelines/run-test-template.yml b/.azure-pipelines/run-test-template.yml index d490873d15e1..2ab707287c7c 100644 --- a/.azure-pipelines/run-test-template.yml +++ b/.azure-pipelines/run-test-template.yml @@ -7,6 +7,9 @@ parameters: type: string - name: ptf_name type: string +- name: section + type: string + default: '' - name: image type: string default: sonic-vs.img.gz @@ -43,7 +46,7 @@ steps: - script: | rm -rf $(Build.ArtifactStagingDirectory)/* - docker exec sonic-mgmt bash -c "/data/sonic-mgmt/tests/kvmtest.sh -en -T ${{ parameters.tbtype }} ${{ parameters.tbname }} ${{ parameters.dut }}" + 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" - script: | @@ -75,17 +78,17 @@ steps: condition: succeededOrFailed() - publish: $(Build.ArtifactStagingDirectory)/kvmdump - artifact: sonic-buildimage.kvmtest.${{ parameters.tbtype}}.memdump@$(System.JobAttempt) + artifact: sonic-buildimage.kvmtest.${{ parameters.tbtype}}${{ parameters.section }}.memdump@$(System.JobAttempt) displayName: "Archive sonic kvm memdump" condition: failed() - publish: $(Build.ArtifactStagingDirectory)/logs - artifact: sonic-buildimage.kvmtest.${{ parameters.tbtype }}.log@$(System.JobAttempt) + artifact: sonic-buildimage.kvmtest.${{ parameters.tbtype }}${{ parameters.section }}.log@$(System.JobAttempt) displayName: "Archive sonic kvm logs" condition: succeededOrFailed() - task: PublishTestResults@2 inputs: testResultsFiles: '$(Build.ArtifactStagingDirectory)/logs/**/*.xml' - testRunTitle: kvmtest.${{ parameters.tbtype }} + testRunTitle: kvmtest.${{ parameters.tbtype }}${{ parameters.section }} condition: succeededOrFailed() diff --git a/.azure-pipelines/template-clean-sonic-slave.yml b/.azure-pipelines/template-clean-sonic-slave.yml new file mode 100644 index 000000000000..ddb8c8e48f6a --- /dev/null +++ b/.azure-pipelines/template-clean-sonic-slave.yml @@ -0,0 +1,10 @@ +steps: +- script: | + set -x + containers=$(docker container ls -aq) + [ -n "$containers" ] && docker container rm -f $containers + docker images | grep "^" | awk '{print$3}' | xargs -i docker rmi {} + images=$(docker images 'sonic-slave-*' -a -q) + [ -n "$images" ] && docker rmi -f $images + exit 0 + displayName: 'Cleanup sonic slave' diff --git a/.azure-pipelines/template-commonlib.yml b/.azure-pipelines/template-commonlib.yml new file mode 100644 index 000000000000..61a801e3f526 --- /dev/null +++ b/.azure-pipelines/template-commonlib.yml @@ -0,0 +1,40 @@ +jobs: +- job: Build + timeoutInMinutes: 120 + pool: sonicbld + variables: + - template: template-variables.yml + steps: + - checkout: self + clean: true + submodules: recursive + - script: | + set -ex + branch=$(Build.SourceBranchName) + # DIST_MASTER is set in variable. + BRANCH=DIST_${branch^^} + bldenvs=${!BRANCH} + [ "$bldenvs" == "" ] && bldenvs="$(COMMON_LIB_BUILD_ENVS)" + for bldenv in $bldenvs + do + BLDENV=$bldenv make -f Makefile.work configure PLATFORM=vs ENABLE_DOCKER_BASE_PULL=y + done + set +x + echo "##vso[task.setvariable variable=bldenvs;]$bldenvs" + displayName: Make configure + - script: | + set -ex + for bldenv in $(bldenvs) + do + LIBNL3_VERSION_BASE=$(grep "LIBNL3_VERSION_BASE =" rules/libnl3.mk | awk '{print$3}') + LIBNL3_VERSION=$(grep "LIBNL3_VERSION =" rules/libnl3.mk | awk '{print$3}' | sed -e "s/(//" -e "s/)//" -e "s/\\$//" -e "s/LIBNL3_VERSION_BASE/$LIBNL3_VERSION_BASE/") + SONIC_BUILD_JOBS=$(nproc) BLDENV=$bldenv make -f Makefile.work target/debs/$bldenv/libnl-3-200_${LIBNL3_VERSION}_amd64.deb ENABLE_DOCKER_BASE_PULL=y + + LIBYANG_VERSION_BASE=$(grep "LIBYANG_VERSION_BASE =" rules/libyang.mk | awk '{print$3}') + LIBYANG_VERSION=$(grep "LIBYANG_VERSION =" rules/libyang.mk | awk '{print$3}' | sed -e "s/\\$//" -e "s/(//" -e "s/)//" -e "s/LIBYANG_VERSION_BASE/$LIBYANG_VERSION_BASE/") + SONIC_BUILD_JOBS=$(nproc) BLDENV=$bldenv make -f Makefile.work target/debs/$bldenv/libyang_${LIBYANG_VERSION}_amd64.deb + done + mv target $(Build.ArtifactStagingDirectory) + displayName: Make common lib packages + - publish: $(Build.ArtifactStagingDirectory) + artifact: common-lib diff --git a/.azure-pipelines/template-variables.yml b/.azure-pipelines/template-variables.yml new file mode 100644 index 000000000000..9f192d35bd5e --- /dev/null +++ b/.azure-pipelines/template-variables.yml @@ -0,0 +1,3 @@ +variables: + DEFAULT_CONTAINER_REGISTRY: 'publicmirror.azurecr.io' + COMMON_LIB_BUILD_ENVS: 'bullseye' diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index c93809fc67c5..c02d193fbeb4 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -30,6 +30,7 @@ - [ ] 202006 - [ ] 202012 - [ ] 202106 +- [ ] 202111 #### Description for the changelog +#### Link to config_db schema for YANG module changes + #### A picture of a cute animal (not mandatory but encouraged) diff --git a/.gitmodules b/.gitmodules index b9cc221936c4..9194c8f4b7a2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -62,6 +62,9 @@ [submodule "src/redis-dump-load"] path = src/redis-dump-load url = https://github.com/p/redis-dump-load.git +[submodule "src/scapy"] + path = src/scapy + url = https://github.com/secdev/scapy.git [submodule "platform/mellanox/mlnx-sai/SAI-Implementation"] path = platform/mellanox/mlnx-sai/SAI-Implementation url = https://github.com/Mellanox/SAI-Implementation @@ -99,4 +102,4 @@ url = https://github.com/Azure/sonic-linkmgrd.git [submodule "src/sonic-p4rt/sonic-pins"] path = src/sonic-p4rt/sonic-pins - url = https://github.com/Azure/sonic-pins.git \ No newline at end of file + url = https://github.com/Azure/sonic-pins.git diff --git a/Makefile.work b/Makefile.work index 2ab0ae54d9f4..a5ecab1ab58b 100644 --- a/Makefile.work +++ b/Makefile.work @@ -115,6 +115,10 @@ rules/config.user: include rules/config -include rules/config.user +ifneq ($(DEFAULT_CONTAINER_REGISTRY),) +override DEFAULT_CONTAINER_REGISTRY := $(DEFAULT_CONTAINER_REGISTRY)/ +endif + ifeq ($(ENABLE_DOCKER_BASE_PULL),) override ENABLE_DOCKER_BASE_PULL = n endif @@ -139,9 +143,9 @@ $(shell SONIC_VERSION_CONTROL_COMPONENTS=$(SONIC_VERSION_CONTROL_COMPONENTS) \ scripts/generate_buildinfo_config.sh) # Generate the slave Dockerfile, and prepare build info for it -$(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) DOCKER_EXTRA_OPTS=$(DOCKER_EXTRA_OPTS) j2 $(SLAVE_DIR)/Dockerfile.j2 > $(SLAVE_DIR)/Dockerfile) +$(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) DOCKER_EXTRA_OPTS=$(DOCKER_EXTRA_OPTS) DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) j2 $(SLAVE_DIR)/Dockerfile.j2 > $(SLAVE_DIR)/Dockerfile) $(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) j2 $(SLAVE_DIR)/Dockerfile.user.j2 > $(SLAVE_DIR)/Dockerfile.user) -$(shell BUILD_SLAVE=y scripts/prepare_docker_buildinfo.sh $(SLAVE_BASE_IMAGE) $(SLAVE_DIR)/Dockerfile $(CONFIGURED_ARCH) "" $(BLDENV)) +$(shell BUILD_SLAVE=y DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) scripts/prepare_docker_buildinfo.sh $(SLAVE_BASE_IMAGE) $(SLAVE_DIR)/Dockerfile $(CONFIGURED_ARCH) "" $(BLDENV)) # Add the versions in the tag, if the version change, need to rebuild the slave SLAVE_BASE_TAG = $(shell cat $(SLAVE_DIR)/Dockerfile $(SLAVE_DIR)/buildinfo/versions/versions-* src/sonic-build-hooks/hooks/* | sha1sum | awk '{print substr($$1,0,11);}') @@ -184,6 +188,17 @@ ifneq ($(SONIC_DPKG_CACHE_SOURCE),) DOCKER_RUN += -v "$(SONIC_DPKG_CACHE_SOURCE):/dpkg_cache:rw" endif +ifeq ($(SONIC_ENABLE_SECUREBOOT_SIGNATURE), y) +ifneq ($(SIGNING_KEY),) + DOCKER_SIGNING_SOURCE := $(shell dirname $(SIGNING_KEY)) + DOCKER_RUN += -v "$(DOCKER_SIGNING_SOURCE):$(DOCKER_SIGNING_SOURCE):ro" +endif +ifneq ($(SIGNING_CERT),) + DOCKER_SIGNING_SOURCE := $(shell dirname $(SIGNING_CERT)) + DOCKER_RUN += -v "$(DOCKER_SIGNING_SOURCE):$(DOCKER_SIGNING_SOURCE):ro" +endif +endif + ifeq ($(SONIC_CONFIG_USE_NATIVE_DOCKERD_FOR_BUILD), y) ifneq ($(MULTIARCH_QEMU_ENVIRON), y) DOCKER_RUN += -v /var/run/docker.sock:/var/run/docker.sock @@ -270,6 +285,7 @@ SONIC_BUILD_INSTRUCTION := make \ SONIC_ENABLE_PFCWD_ON_START=$(ENABLE_PFCWD_ON_START) \ SONIC_ENABLE_SYNCD_RPC=$(ENABLE_SYNCD_RPC) \ SONIC_INSTALL_DEBUG_TOOLS=$(INSTALL_DEBUG_TOOLS) \ + SONIC_SAITHRIFT_V2=$(SAITHRIFT_V2) \ MDEBUG=$(MDEBUG) \ PASSWORD=$(PASSWORD) \ USERNAME=$(USERNAME) \ @@ -290,10 +306,13 @@ SONIC_BUILD_INSTRUCTION := make \ EXTRA_DOCKER_TARGETS=$(EXTRA_DOCKER_TARGETS) \ BUILD_LOG_TIMESTAMP=$(BUILD_LOG_TIMESTAMP) \ SONIC_ENABLE_IMAGE_SIGNATURE=$(ENABLE_IMAGE_SIGNATURE) \ + SONIC_ENABLE_SECUREBOOT_SIGNATURE=$(SONIC_ENABLE_SECUREBOOT_SIGNATURE) \ + SONIC_DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) \ ENABLE_HOST_SERVICE_ON_START=$(ENABLE_HOST_SERVICE_ON_START) \ SLAVE_DIR=$(SLAVE_DIR) \ ENABLE_AUTO_TECH_SUPPORT=$(ENABLE_AUTO_TECH_SUPPORT) \ BUILD_MULTIASIC_KVM=$(BUILD_MULTIASIC_KVM) \ + ENABLE_ASAN=$(ENABLE_ASAN) \ $(SONIC_OVERRIDE_BUILD_VARS) .PHONY: sonic-slave-build sonic-slave-bash init reset diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 6bf2370b1d80..27836a49b1ab 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -30,26 +30,51 @@ resources: type: github name: Azure/sonic-mgmt endpoint: build + - repository: buildimage + type: github + name: Azure/sonic-buildimage + endpoint: build + ref: master + +variables: +- template: .azure-pipelines/azure-pipelines-repd-build-variables.yml +- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: + - template: .azure-pipelines/template-variables.yml +- ${{ else }}: + - template: .azure-pipelines/template-variables.yml@buildimage +- name: CACHE_MODE + value: rcache stages: -- stage: Build +- stage: BuildVS pool: sonicbld - variables: - - template: .azure-pipelines/azure-pipelines-repd-build-variables.yml - - name: CACHE_MODE - value: rcache jobs: - template: .azure-pipelines/azure-pipelines-build.yml parameters: buildOptions: 'USERNAME=admin SONIC_BUILD_JOBS=$(nproc) ${{ variables.VERSION_CONTROL_OPTIONS }}' jobGroups: - name: vs + +- stage: Build + pool: sonicbld + dependsOn: [] + jobs: + - template: .azure-pipelines/azure-pipelines-build.yml + parameters: + buildOptions: 'USERNAME=admin SONIC_BUILD_JOBS=$(nproc) ${{ variables.VERSION_CONTROL_OPTIONS }}' + jobGroups: - name: broadcom variables: swi_image: yes - name: mellanox + - name: marvell-armhf + pool: sonicbld-armhf + timeoutInMinutes: 1200 + variables: + PLATFORM_ARCH: armhf - stage: Test + dependsOn: BuildVS variables: - name: inventory value: veos_vtb @@ -104,9 +129,9 @@ stages: testResultsFiles: '**/tr.xml' testRunTitle: vstest - - job: + - job: t0_part1 pool: sonictest - displayName: "kvmtest-t0" + displayName: "kvmtest-t0-part1" timeoutInMinutes: 360 steps: @@ -116,6 +141,43 @@ stages: tbname: vms-kvm-t0 ptf_name: ptf_vms6-1 tbtype: t0 + section: part-1 + + - job: t0_part2 + pool: sonictest + displayName: "kvmtest-t0-part2" + timeoutInMinutes: 360 + + steps: + - template: .azure-pipelines/run-test-template.yml + parameters: + dut: vlab-01 + tbname: vms-kvm-t0 + ptf_name: ptf_vms6-1 + tbtype: t0 + section: part-2 + + - job: + pool: sonictest + displayName: "kvmtest-t0" + timeoutInMinutes: 360 + dependsOn: + - t0_part1 + - t0_part2 + condition: always() + variables: + resultOfPart1: $[ dependencies.t0_part1.result ] + resultOfPart2: $[ dependencies.t0_part2.result ] + + steps: + - script: | + if [ $(resultOfPart1) == "Succeeded" ] && [ $(resultOfPart2) == "Succeeded" ]; then + echo "Both job kvmtest-t0-part1 and kvmtest-t0-part2 are passed." + exit 0 + else + echo "Either job kvmtest-t0-part1 or job kvmtest-t0-part2 failed! Please check the detailed information." + exit 1 + fi - job: pool: sonictest-t1-lag diff --git a/build_debian.sh b/build_debian.sh index 61f6912829e9..b3d692cdb28c 100755 --- a/build_debian.sh +++ b/build_debian.sh @@ -67,6 +67,9 @@ mkdir -p $FILESYSTEM_ROOT/$PLATFORM_DIR mkdir -p $FILESYSTEM_ROOT/$PLATFORM_DIR/x86_64-grub touch $FILESYSTEM_ROOT/$PLATFORM_DIR/firsttime +## ensure proc is mounted +sudo mount proc /proc -t proc || true + ## make / as a mountpoint in chroot env, needed by dockerd pushd $FILESYSTEM_ROOT sudo mount --bind . . @@ -110,6 +113,12 @@ sudo cp files/apt/apt.conf.d/{81norecommends,apt-{clean,gzip-indexes,no-language ## Note: set lang to prevent locale warnings in your chroot sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y update sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y upgrade + +echo '[INFO] Install and setup eatmydata' +sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install eatmydata +sudo LANG=C chroot $FILESYSTEM_ROOT ln -s /usr/bin/eatmydata /usr/local/bin/dpkg +echo 'Dir::Bin::dpkg "/usr/local/bin/dpkg";' | sudo tee $FILESYSTEM_ROOT/etc/apt/apt.conf.d/00image-install-eatmydata > /dev/null + echo '[INFO] Install packages for building image' sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install makedev psmisc @@ -140,6 +149,23 @@ if [[ $CONFIGURED_ARCH == amd64 ]]; then sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install dmidecode hdparm fi +## Sign the Linux kernel +if [ "$SONIC_ENABLE_SECUREBOOT_SIGNATURE" = "y" ]; then + if [ ! -f $SIGNING_KEY ]; then + echo "Error: SONiC linux kernel signing key missing" + exit 1 + fi + if [ ! -f $SIGNING_CERT ]; then + echo "Error: SONiC linux kernel signing certificate missing" + exit 1 + fi + + echo '[INFO] Signing SONiC linux kernel image' + K=$FILESYSTEM_ROOT/boot/vmlinuz-${LINUX_KERNEL_VERSION}-amd64 + sbsign --key $SIGNING_KEY --cert $SIGNING_CERT --output /tmp/${K##*/} ${K} + sudo cp -f /tmp/${K##*/} ${K} +fi + ## Update initramfs for booting with squashfs+overlay cat files/initramfs-tools/modules | sudo tee -a $FILESYSTEM_ROOT/etc/initramfs-tools/modules > /dev/null @@ -190,7 +216,7 @@ if [ -f platform/$CONFIGURED_PLATFORM/modules ]; then fi ## Add mtd and uboot firmware tools package -sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install u-boot-tools mtd-utils device-tree-compiler +sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install u-boot-tools libubootenv-tool mtd-utils device-tree-compiler ## Install docker echo '[INFO] Install docker' @@ -328,8 +354,13 @@ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y in jq \ auditd -# Change auditd log file path to fix auditd can't startup issue. -sudo LANG=C chroot $FILESYSTEM_ROOT /bin/bash -c "sudo sed -i 's/^\s*log_file\s*=.*/log_file = \/var\/log\/audit.log/g' /etc/audit/auditd.conf" +# Have systemd create the auditd log directory +sudo mkdir -p ${FILESYSTEM_ROOT}/etc/systemd/system/auditd.service.d +sudo tee ${FILESYSTEM_ROOT}/etc/systemd/system/auditd.service.d/log-directory.conf >/dev/null < > /new_device' method", + "CPLD": + [ + "i2c_cpld" + ], + "PSU": + [ + "psu_eeprom", + "psu_pmbus" + ], + "FAN": + [ + "fan_ctrl", + "fan_eeprom", + "fan_cpld" + ], + "PORT_MODULE": + [ + "pddf_xcvr" + ] + + }, + "std_kos": + [ + "i2c_dev", + "i2c_mux_pca954x", + "optoe" + ], + "description":"kernel modules are loaded while moving to pdf mode, but they should not be unloaded while moving to nonpddf mode.", + "std_perm_kos": + [ + "i2c-i801", + "i2c-ismt" + ], + + "pddf_kos": + [ + "pddf_client_module", + "pddf_cpld_module", + "pddf_cpld_driver", + "pddf_mux_module", + "pddf_xcvr_module", + "pddf_xcvr_driver_module", + "pddf_psu_driver_module", + "pddf_psu_module", + "pddf_fan_driver_module", + "pddf_fan_module", + "pddf_led_module" + ] + }, + + "SYSTEM": + { + "dev_info": {"device_type":"CPU", "device_name":"ROOT_COMPLEX", "device_parent":null}, + "i2c": + { + "CONTROLLERS": + [ + { "dev_name":"i2c-1", "dev":"SMBUS1" } + ] + } + }, + + "SMBUS1": + { + "dev_info": {"device_type": "SMBUS", "device_name": "SMBUS1", "device_parent": "SYSTEM"}, + "i2c": + { + "topo_info": {"dev_addr": "0x1"}, + "DEVICES": + [ + {"dev": "EEPROM1"}, + {"dev": "MUX1"} + ] + } + }, + + + "EEPROM1": + { + "dev_info": {"device_type": "EEPROM", "device_name": "EEPROM1", "device_parent": "SMBUS1"}, + "i2c": + { + "topo_info": {"parent_bus": "0x1", "dev_addr": "0x57", "dev_type": "24c02"}, + "dev_attr": {"access_mode": "BLOCK"}, + "attr_list": [ + {"attr_name": "eeprom"} + ] + } + }, + + "MUX1": + { + "dev_info": { "device_type":"MUX", "device_name":"MUX1", "device_parent":"SMBUS1"}, + "i2c": + { + "topo_info": { "parent_bus":"0x1", "dev_addr":"0x77", "dev_type":"pca9548"}, + "dev_attr": { "virt_bus":"0x2", "idle_state":"-2"}, + "channel": + [ + { "chn":"0", "dev":"MUX2" }, + { "chn":"1", "dev":"MUX3" }, + { "chn":"1", "dev":"CPLD1" }, + { "chn":"1", "dev":"FAN-CTRL" } + ] + } + }, + + "MUX2": + { + "dev_info": { "device_type":"MUX", "device_name":"MUX2", "device_parent":"MUX1"}, + "i2c": + { + "topo_info": { "parent_bus":"0x2", "dev_addr":"0x71", "dev_type":"pca9548"}, + "dev_attr": { "virt_bus":"0xa", "idle_state":"-2"}, + "channel": + [ + { "chn":"0", "dev":"PSU1" }, + { "chn":"1", "dev":"PSU2" }, + { "chn":"4", "dev":"TEMP1" } + ] + } + }, + + "TEMP1" : + { + "dev_info": { "device_type":"TEMP_SENSOR", "device_parent":"MUX2"}, + "dev_attr": { "display_name":"Temp_1"}, + "i2c": + { + "topo_info": { "parent_bus":"0xe", "dev_addr":"0x48", "dev_type":"lm77"}, + "attr_list": + [ + { "attr_name": "temp1_high_crit_threshold", "drv_attr_name":"temp1_crit"}, + { "attr_name": "temp1_crit_hyst"}, + { "attr_name": "temp1_crit_alarm"}, + { "attr_name": "temp1_max_alarm"}, + { "attr_name": "temp1_min_alarm"}, + { "attr_name": "temp1_input"}, + { "attr_name": "temp1_high_threshold", "drv_attr_name":"temp1_max"}, + { "attr_name": "temp1_low_threshold", "drv_attr_name":"temp1_min"}, + { "attr_name": "temp1_max_hyst"}, + { "attr_name": "temp1_min_hyst"} + ] + } + }, + + "MUX3": + { + "dev_info": { "device_type":"MUX", "device_name":"MUX3", "device_parent":"MUX1"}, + "i2c": + { + "topo_info": { "parent_bus":"0x3", "dev_addr":"0x70", "dev_type":"pca9548"}, + "dev_attr": { "virt_bus":"0x12", "idle_state":"-2"}, + "channel": + [ + { "chn":"0", "dev":"PORT49" }, + { "chn":"1", "dev":"PORT50" }, + { "chn":"2", "dev":"PORT51" }, + { "chn":"3", "dev":"PORT52" }, + { "chn":"4", "dev":"PORT53" }, + { "chn":"5", "dev":"PORT54" }, + { "chn":"6", "dev":"TEMP2" }, + { "chn":"7", "dev":"TEMP3" } + ] + } + }, + + + "TEMP2" : + { + "dev_info": { "device_type":"TEMP_SENSOR", "device_parent":"MUX3"}, + "dev_attr": { "display_name":"Temp_CPU"}, + + "i2c": + { + "topo_info": { "parent_bus":"0x18", "dev_addr":"0x4b", "dev_type":"lm75"}, + "attr_list": + [ + { "attr_name": "temp1_high_threshold", "drv_attr_name":"temp1_max"}, + { "attr_name": "temp1_max_hyst"}, + { "attr_name": "temp1_input"} + ] + } + }, + + + "TEMP3" : + { + "dev_info": { "device_type":"TEMP_SENSOR", "device_parent":"MUX3"}, + "dev_attr": { "display_name":"Temp_Fan"}, + "i2c": + { + "topo_info": { "parent_bus":"0x19", "dev_addr":"0x4a", "dev_type":"lm75"}, + "attr_list": + [ + { "attr_name": "temp1_high_threshold", "drv_attr_name":"temp1_max"}, + { "attr_name": "temp1_max_hyst"}, + { "attr_name": "temp1_input"} + ] + } + }, + + + "CPLD1": + { + "dev_info": { "device_type":"CPLD", "device_name":"CPLD1", "device_parent":"MUX1"}, + "i2c": + { + "topo_info": { "parent_bus":"0x3", "dev_addr":"0x60", "dev_type":"i2c_cpld"} + } + }, + + + "FAN-CTRL": + { + "dev_info": { "device_type":"FAN", "device_name":"FAN-CTRL", "device_parent":"MUX1"}, + "i2c": + { + "topo_info": { "parent_bus":"0x3", "dev_addr":"0x66", "dev_type":"fan_cpld"}, + "dev_attr": { "num_fantrays":"3"}, + "attr_list": + [ + { "attr_name":"fan1_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x87", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"fan2_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x87", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"fan3_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x87", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"fan1_direction", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x87", "attr_mask":"0x10", "attr_cmpval":"0x10", "attr_len":"1"}, + { "attr_name":"fan2_direction", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x87", "attr_mask":"0x20", "attr_cmpval":"0x20", "attr_len":"1"}, + { "attr_name":"fan3_direction", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x87", "attr_mask":"0x40", "attr_cmpval":"0x40", "attr_len":"1"}, + { "attr_name":"fan1_input", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x88", "attr_mask":"0xFF", "attr_len":"1", "attr_mult":"114", "attr_is_divisor":0}, + { "attr_name":"fan2_input", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x89", "attr_mask":"0xFF", "attr_len":"1", "attr_mult":"114" , "attr_is_divisor":0}, + { "attr_name":"fan3_input", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x8a", "attr_mask":"0xFF", "attr_len":"1", "attr_mult":"114", "attr_is_divisor":0}, + { "attr_name":"fan1_pwm", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x1a", "attr_mask":"0x1F", "attr_len":"1"}, + { "attr_name":"fan2_pwm", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x1a", "attr_mask":"0x1F", "attr_len":"1"}, + { "attr_name":"fan3_pwm", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x1b", "attr_mask":"0x1F", "attr_len":"1"} + ] + } + }, + + + "SYS_LED": + { + "dev_info": { "device_type":"LED", "device_name":"SYS_LED"}, + "dev_attr": { "index":"0"}, + "i2c" : { + "attr_list": + [ + {"attr_name":"STATUS_LED_COLOR_GREEN", "bits" : "7:5", "descr" : "", "value" : "0x1", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x30"}, + {"attr_name":"STATUS_LED_COLOR_GREEN_BLINK", "bits" : "7:5", "descr" : "", "value" : "0x3", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x30"}, + {"attr_name":"STATUS_LED_COLOR_AMBER", "bits" : "7:5", "descr" : "", "value" : "0x4", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x30"}, + {"attr_name":"STATUS_LED_COLOR_AMBER_BLINK", "bits" : "7:5", "descr" : "", "value" : "0x2", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x30"}, + {"attr_name":"STATUS_LED_COLOR_OFF", "bits" : "7:5", "descr" : "", "value" : "0x7", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x30"} + ] + } + }, + + + "PSU1_LED": + { + "dev_info": { "device_type":"LED", "device_name":"PSU_LED"}, + "dev_attr": { "index":"0"}, + "i2c" : { + "attr_list": + [ + {"attr_name":"STATUS_LED_COLOR_GREEN", "bits" : "1:0", "descr" : "", "value" : "0x1", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x30"}, + {"attr_name":"STATUS_LED_COLOR_AMBER", "bits" : "1:0", "descr" : "", "value" : "0x2", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x30"}, + {"attr_name":"STATUS_LED_COLOR_OFF", "bits" : "1:0", "descr" : "", "value" : "0x3", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x30"} + ] + } + }, + + "PSU2_LED": + { + "dev_info": { "device_type":"LED", "device_name":"PSU_LED"}, + "dev_attr": { "index":"1"}, + "i2c" : { + "attr_list": + [ + {"attr_name":"STATUS_LED_COLOR_GREEN", "bits" : "7:6", "descr" : "", "value" : "0x1", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x31"}, + {"attr_name":"STATUS_LED_COLOR_AMBER", "bits" : "7:6", "descr" : "", "value" : "0x2", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x31"}, + {"attr_name":"STATUS_LED_COLOR_OFF", "bits" : "7:6", "descr" : "", "value" : "0x3", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x31"} + ] + } + }, + + "FAN_LED": + { + "dev_info": { "device_type":"LED", "device_name":"FAN_LED"}, + "dev_attr": { "index":"0"}, + "i2c" : { + "attr_list": + [ + {"attr_name":"STATUS_LED_COLOR_GREEN", "bits" : "3:2", "descr" : "", "value" : "0x1", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x31"}, + {"attr_name":"STATUS_LED_COLOR_AMBER", "bits" : "3:2", "descr" : "", "value" : "0x2", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x31"}, + {"attr_name":"STATUS_LED_COLOR_OFF", "bits" : "3:2", "descr" : "", "value" : "0x3", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x31"} + ] + } + }, + + "PSU1": + { + "dev_info": { "device_type":"PSU", "device_name":"PSU1", "device_parent":"MUX2"}, + "dev_attr": { "dev_idx":"1", "num_psu_fans": "1"}, + "i2c": + { + "interface": + [ + { "itf":"pmbus", "dev":"PSU1-PMBUS" }, + { "itf":"eeprom", "dev":"PSU1-EEPROM" } + ] + + } + }, + + "PSU1-PMBUS": + { + "dev_info": { "device_type":"PSU-PMBUS", "device_name":"PSU1-PMBUS", "device_parent":"MUX2", "virt_parent":"PSU1"}, + "i2c": + { + "topo_info":{ "parent_bus":"0xa", "dev_addr":"0x58", "dev_type":"psu_pmbus"}, + "attr_list": + [ + { "attr_name":"psu_mfr_id", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" }, + { "attr_name":"psu_fan_dir", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0xc3", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"5"}, + { "attr_name":"psu_v_out", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x8b", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_i_out", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x8c", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_p_out", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x96", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_fan1_speed_rpm", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x90", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_temp1_input", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x8d", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"} + ] + } + }, + + "PSU1-EEPROM": + { + "dev_info": { "device_type":"PSU-EEPROM", "device_name":"PSU1-EEPROM", "device_parent":"MUX2", "virt_parent":"PSU1"}, + "i2c": + { + "topo_info":{ "parent_bus":"0xa", "dev_addr":"0x50", "dev_type":"psu_eeprom"}, + "attr_list": + [ + { "attr_name":"psu_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x22", "attr_mask":"0x20", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"psu_model_name", "attr_devaddr":"0x50", "attr_devtype":"eeprom", "attr_offset":"0x20", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"12" }, + { "attr_name":"psu_power_good", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x22", "attr_mask":"0x40", "attr_cmpval":"0x40", "attr_len":"1"}, + { "attr_name":"psu_serial_num", "attr_devaddr":"0x50", "attr_devtype":"eeprom", "attr_offset":"0x35", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"19" } + ] + } + }, + + + "PSU2": + { + "dev_info": { "device_type":"PSU", "device_name":"PSU2", "device_parent":"MUX2" }, + "dev_attr": { "dev_idx":"2", "num_psu_fans":"1"}, + "i2c": + { + "interface": + [ + { "itf":"pmbus", "dev":"PSU2-PMBUS"}, + { "itf":"eeprom", "dev":"PSU2-EEPROM"} + ] + } + + }, + + "PSU2-PMBUS": + { + "dev_info": {"device_type":"PSU-PMBUS", "device_name":"PSU2-PMBUS", "device_parent":"MUX2", "virt_parent":"PSU2"}, + "i2c": + { + "topo_info": { "parent_bus":"0xb", "dev_addr":"0x59", "dev_type":"psu_pmbus"}, + "attr_list": + [ + { "attr_name":"psu_mfr_id", "attr_devaddr":"0x59", "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" }, + { "attr_name":"psu_fan_dir", "attr_devaddr":"0x59", "attr_devtype":"pmbus", "attr_offset":"0xc3", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"5"}, + { "attr_name":"psu_v_out", "attr_devaddr":"0x59", "attr_devtype":"pmbus", "attr_offset":"0x8b", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_i_out", "attr_devaddr":"0x59", "attr_devtype":"pmbus", "attr_offset":"0x8c", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_p_out", "attr_devaddr":"0x59", "attr_devtype":"pmbus", "attr_offset":"0x96", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_fan1_speed_rpm", "attr_devaddr":"0x59", "attr_devtype":"pmbus", "attr_offset":"0x90", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_temp1_input", "attr_devaddr":"0x59", "attr_devtype":"pmbus", "attr_offset":"0x8d", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"} + ] + } + }, + + "PSU2-EEPROM": + { + "dev_info": {"device_type":"PSU-EEPROM", "device_name":"PSU2-EEPROM", "device_parent":"MUX2", "virt_parent":"PSU2"}, + "i2c": + { + "topo_info": { "parent_bus":"0xb", "dev_addr":"0x51", "dev_type":"psu_eeprom"}, + "attr_list": + [ + { "attr_name":"psu_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x22", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"psu_model_name", "attr_devaddr":"0x51", "attr_devtype":"eeprom", "attr_offset":"0x20", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"12" }, + { "attr_name":"psu_power_good", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x22", "attr_mask":"0x4", "attr_cmpval":"0x4", "attr_len":"1"}, + { "attr_name":"psu_serial_num", "attr_devaddr":"0x51", "attr_devtype":"eeprom", "attr_offset":"0x35", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"19" } + ] + } + }, + + "PORT49": + { + "dev_info": { "device_type":"SFP28", "device_name":"PORT49", "device_parent":"MUX3"}, + "dev_attr": { "dev_idx":"49"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT49-EEPROM" }, + { "itf":"control", "dev":"PORT49-CTRL" } + ] + } + }, + "PORT49-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT49-EEPROM", "device_parent":"MUX3", "virt_parent":"PORT49"}, + "i2c": + { + "topo_info": { "parent_bus":"0x12", "dev_addr":"0x50", "dev_type":"optoe2"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT49-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT49-CTRL", "device_parent":"MUX3", "virt_parent":"PORT49"}, + "i2c": + { + "topo_info": { "parent_bus":"0x12", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x05", "attr_mask":"0x6", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT50": + { + "dev_info": { "device_type":"SFP28", "device_name":"PORT50", "device_parent":"MUX3"}, + "dev_attr": { "dev_idx":"50"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT50-EEPROM" }, + { "itf":"control", "dev":"PORT50-CTRL" } + ] + } + }, + "PORT50-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT50-EEPROM", "device_parent":"MUX3", "virt_parent":"PORT50"}, + "i2c": + { + "topo_info": { "parent_bus":"0x13", "dev_addr":"0x50", "dev_type":"optoe2"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT50-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT50-CTRL", "device_parent":"MUX3", "virt_parent":"PORT50"}, + "i2c": + { + "topo_info": { "parent_bus":"0x13", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x05", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT51": + { + "dev_info": { "device_type":"SFP28", "device_name":"PORT51", "device_parent":"MUX3"}, + "dev_attr": { "dev_idx":"51"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT51-EEPROM" }, + { "itf":"control", "dev":"PORT51-CTRL" } + ] + } + }, + "PORT51-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT51-EEPROM", "device_parent":"MUX3", "virt_parent":"PORT51"}, + "i2c": + { + "topo_info": { "parent_bus":"0x14", "dev_addr":"0x50", "dev_type":"optoe2"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT51-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT51-CTRL", "device_parent":"MUX3", "virt_parent":"PORT51"}, + "i2c": + { + "topo_info": { "parent_bus":"0x14", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x06", "attr_mask":"0x6", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + "PORT52": + { + "dev_info": { "device_type":"SFP28", "device_name":"PORT52", "device_parent":"MUX3"}, + "dev_attr": { "dev_idx":"52"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT52-EEPROM" }, + { "itf":"control", "dev":"PORT52-CTRL" } + ] + } + }, + "PORT52-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT52-EEPROM", "device_parent":"MUX3", "virt_parent":"PORT52"}, + "i2c": + { + "topo_info": { "parent_bus":"0x15", "dev_addr":"0x50", "dev_type":"optoe2"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT52-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT52-CTRL", "device_parent":"MUX3", "virt_parent":"PORT52"}, + "i2c": + { + "topo_info": { "parent_bus":"0x15", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x06", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT53": + { + "dev_info": { "device_type":"QSFP28", "device_name":"PORT53", "device_parent":"MUX3"}, + "dev_attr": { "dev_idx":"53"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT53-EEPROM" }, + { "itf":"control", "dev":"PORT53-CTRL" } + ] + } + }, + "PORT53-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT53-EEPROM", "device_parent":"MUX3", "virt_parent":"PORT53"}, + "i2c": + { + "topo_info": { "parent_bus":"0x16", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT53-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT53-CTRL", "device_parent":"MUX3", "virt_parent":"PORT53"}, + "i2c": + { + "topo_info": { "parent_bus":"0x16", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x21", "attr_mask":"0x0", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT54": + { + "dev_info": { "device_type":"QSFP28", "device_name":"PORT54", "device_parent":"MUX3"}, + "dev_attr": { "dev_idx":"54"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT54-EEPROM" }, + { "itf":"control", "dev":"PORT54-CTRL" } + ] + } + }, + "PORT54-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT54-EEPROM", "device_parent":"MUX3", "virt_parent":"PORT54"}, + "i2c": + { + "topo_info": { "parent_bus":"0x17", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT54-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT54-CTRL", "device_parent":"MUX3", "virt_parent":"PORT54"}, + "i2c": + { + "topo_info": { "parent_bus":"0x17", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x21", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + } + +} diff --git a/files/image_config/apt/sources.list b/device/accton/x86_64-accton_as4630_54pe-r0/pddf_support similarity index 100% rename from files/image_config/apt/sources.list rename to device/accton/x86_64-accton_as4630_54pe-r0/pddf_support diff --git a/device/accton/x86_64-accton_as4630_54pe-r0/pmon_daemon_control.json b/device/accton/x86_64-accton_as4630_54pe-r0/pmon_daemon_control.json index 584a14b9d942..a3b204e20d8d 100644 --- a/device/accton/x86_64-accton_as4630_54pe-r0/pmon_daemon_control.json +++ b/device/accton/x86_64-accton_as4630_54pe-r0/pmon_daemon_control.json @@ -1,5 +1,5 @@ { "skip_ledd": true, - "skip_thermalctld": true + "skip_pcied": true } diff --git a/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/__init__.py b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/__init__.py new file mode 100644 index 000000000000..73a7720e8979 --- /dev/null +++ b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/__init__.py @@ -0,0 +1,2 @@ +__all__ = [ "platform", "chassis", "sfp", "eeprom", "component", "psu", "thermal", "fan", "fan_drawer" ] +from . import platform diff --git a/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/chassis.py b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/chassis.py new file mode 100644 index 000000000000..310d0433d8bc --- /dev/null +++ b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/chassis.py @@ -0,0 +1,255 @@ +############################################################################# +# Edgecore +# +# Module contains an implementation of SONiC Platform Base API and +# provides the Chassis information which are available in the platform +# +############################################################################# + +import os +import sys + +try: + from sonic_platform_base.chassis_base import ChassisBase + from .helper import APIHelper + from .event import SfpEvent +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +NUM_FAN_TRAY = 3 +NUM_FAN = 2 +NUM_PSU = 2 +NUM_THERMAL = 3 +PORT_START = 49 +PORT_END = 54 +NUM_COMPONENT = 2 +HOST_REBOOT_CAUSE_PATH = "/host/reboot-cause/" +PMON_REBOOT_CAUSE_PATH = "/usr/share/sonic/platform/api_files/reboot-cause/" +REBOOT_CAUSE_FILE = "reboot-cause.txt" +PREV_REBOOT_CAUSE_FILE = "previous-reboot-cause.txt" +HOST_CHK_CMD = "which systemctl > /dev/null 2>&1" +SYSLED_FNODE = "/sys/class/leds/diag/brightness" +SYSLED_MODES = { + "0" : "STATUS_LED_COLOR_OFF", + "1" : "STATUS_LED_COLOR_GREEN", + "2" : "STATUS_LED_COLOR_AMBER", + "5" : "STATUS_LED_COLOR_GREEN_BLINK" +} + + +class Chassis(ChassisBase): + """Platform-specific Chassis class""" + + def __init__(self): + ChassisBase.__init__(self) + self._api_helper = APIHelper() + self.is_host = self._api_helper.is_host() + + self.config_data = {} + + self.__initialize_fan() + self.__initialize_psu() + self.__initialize_thermals() + self.__initialize_components() + self.__initialize_sfp() + self.__initialize_eeprom() + + def __initialize_sfp(self): + from sonic_platform.sfp import Sfp + for index in range(0, PORT_END): + sfp = Sfp(index) + self._sfp_list.append(sfp) + self._sfpevent = SfpEvent(self._sfp_list) + self.sfp_module_initialized = True + + def __initialize_fan(self): + from sonic_platform.fan_drawer import FanDrawer + for fant_index in range(NUM_FAN_TRAY): + fandrawer = FanDrawer(fant_index) + self._fan_drawer_list.append(fandrawer) + self._fan_list.extend(fandrawer._fan_list) + + def __initialize_psu(self): + from sonic_platform.psu import Psu + for index in range(0, NUM_PSU): + psu = Psu(index) + self._psu_list.append(psu) + + def __initialize_thermals(self): + from sonic_platform.thermal import Thermal + for index in range(0, NUM_THERMAL): + thermal = Thermal(index) + self._thermal_list.append(thermal) + + def __initialize_eeprom(self): + from sonic_platform.eeprom import Tlv + self._eeprom = Tlv() + + def __initialize_components(self): + from sonic_platform.component import Component + for index in range(0, NUM_COMPONENT): + component = Component(index) + self._component_list.append(component) + + def __initialize_watchdog(self): + from sonic_platform.watchdog import Watchdog + self._watchdog = Watchdog() + + + def __is_host(self): + return os.system(HOST_CHK_CMD) == 0 + + def __read_txt_file(self, file_path): + try: + with open(file_path, 'r') as fd: + data = fd.read() + return data.strip() + except IOError: + pass + return None + + def get_name(self): + """ + Retrieves the name of the device + Returns: + string: The name of the device + """ + + return self._eeprom.get_product_name() + + def get_presence(self): + """ + Retrieves the presence of the Chassis + Returns: + bool: True if Chassis is present, False if not + """ + return True + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + return True + + def get_base_mac(self): + """ + Retrieves the base MAC address for the chassis + Returns: + A string containing the MAC address in the format + 'XX:XX:XX:XX:XX:XX' + """ + return self._eeprom.get_mac() + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + return self._eeprom.get_pn() + + def get_serial(self): + """ + Retrieves the hardware serial number for the chassis + Returns: + A string containing the hardware serial number for this chassis. + """ + return self._eeprom.get_serial() + + def get_system_eeprom_info(self): + """ + Retrieves the full content of system EEPROM information for the chassis + Returns: + A dictionary where keys are the type code defined in + OCP ONIE TlvInfo EEPROM format and values are their corresponding + values. + """ + return self._eeprom.get_eeprom() + + def get_reboot_cause(self): + """ + Retrieves the cause of the previous reboot + + Returns: + A tuple (string, string) where the first element is a string + containing the cause of the previous reboot. This string must be + one of the predefined strings in this class. If the first string + is "REBOOT_CAUSE_HARDWARE_OTHER", the second string can be used + to pass a description of the reboot cause. + """ + + reboot_cause_path = (HOST_REBOOT_CAUSE_PATH + REBOOT_CAUSE_FILE) + sw_reboot_cause = self._api_helper.read_txt_file( + reboot_cause_path) or "Unknown" + + + return ('REBOOT_CAUSE_NON_HARDWARE', sw_reboot_cause) + + def get_change_event(self, timeout=0): + # SFP event + if not self.sfp_module_initialized: + self.__initialize_sfp() + + return self._sfpevent.get_sfp_event(timeout) + + def get_sfp(self, index): + """ + Retrieves sfp represented by (1-based) index + Args: + index: An integer, the index (1-based) of the sfp to retrieve. + The index should be the sequence of a physical port in a chassis, + starting from 1. + For example, 1 for Ethernet0, 2 for Ethernet4 and so on. + Returns: + An object dervied from SfpBase representing the specified sfp + """ + sfp = None + if not self.sfp_module_initialized: + self.__initialize_sfp() + + try: + # The index will start from 1 + sfp = self._sfp_list[index-1] + except IndexError: + sys.stderr.write("SFP index {} out of range (1-{})\n".format( + index, len(self._sfp_list))) + return sfp + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return -1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return False + + + def initizalize_system_led(self): + return True + + def get_status_led(self): + val = self._api_helper.read_txt_file(SYSLED_FNODE) + return SYSLED_MODES[val] if val in SYSLED_MODES else "UNKNOWN" + + def set_status_led(self, color): + mode = None + for key, val in SYSLED_MODES.items(): + if val == color: + mode = key + break + if mode is None: + return False + else: + return self._api_helper.write_txt_file(SYSLED_FNODE, mode) + diff --git a/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/component.py b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/component.py new file mode 100644 index 000000000000..53a01c1f1475 --- /dev/null +++ b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/component.py @@ -0,0 +1,172 @@ +############################################################################# +# Edgecore +# +# Component contains an implementation of SONiC Platform Base API and +# provides the components firmware management function +# +############################################################################# + +import shlex +import subprocess + + +try: + from sonic_platform_base.component_base import ComponentBase + from .helper import APIHelper +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +CPLD_ADDR_MAPPING = { + "CPLD1": "3-0060" +} +SYSFS_PATH = "/sys/bus/i2c/devices/" +BIOS_VERSION_PATH = "/sys/class/dmi/id/bios_version" +COMPONENT_LIST= [ + ("CPLD1", "CPLD 1"), + ("BIOS", "Basic Input/Output System") + +] + +class Component(ComponentBase): + """Platform-specific Component class""" + + DEVICE_TYPE = "component" + + def __init__(self, component_index=0): + self._api_helper=APIHelper() + ComponentBase.__init__(self) + self.index = component_index + self.name = self.get_name() + + def __run_command(self, command): + # Run bash command and print output to stdout + try: + process = subprocess.Popen( + shlex.split(command), stdout=subprocess.PIPE) + while True: + output = process.stdout.readline() + if output == '' and process.poll() is not None: + break + rc = process.poll() + if rc != 0: + return False + except Exception: + return False + return True + + def __get_bios_version(self): + # Retrieves the BIOS firmware version + try: + with open(BIOS_VERSION_PATH, 'r') as fd: + bios_version = fd.read() + return bios_version.strip() + except Exception as e: + return None + + def __get_cpld_version(self): + # Retrieves the CPLD firmware version + cpld_version = dict() + for cpld_name in CPLD_ADDR_MAPPING: + try: + cpld_path = "{}{}{}".format(SYSFS_PATH, CPLD_ADDR_MAPPING[cpld_name], '/version') + cpld_version_raw= self._api_helper.read_txt_file(cpld_path) + cpld_version[cpld_name] = "{}".format(int(cpld_version_raw,16)) + except Exception as e: + print('Get exception when read cpld') + cpld_version[cpld_name] = 'None' + + return cpld_version + + def get_name(self): + """ + Retrieves the name of the component + Returns: + A string containing the name of the component + """ + return COMPONENT_LIST[self.index][0] + + def get_description(self): + """ + Retrieves the description of the component + Returns: + A string containing the description of the component + """ + return COMPONENT_LIST[self.index][1] + + + def get_firmware_version(self): + """ + Retrieves the firmware version of module + Returns: + string: The firmware versions of the module + """ + fw_version = None + if self.name == "BIOS": + fw_version = self.__get_bios_version() + elif "CPLD" in self.name: + cpld_version = self.__get_cpld_version() + fw_version = cpld_version.get(self.name) + + return fw_version + + def install_firmware(self, image_path): + """ + Install firmware to module + Args: + image_path: A string, path to firmware image + Returns: + A boolean, True if install successfully, False if not + """ + raise NotImplementedError + + def get_presence(self): + """ + Retrieves the presence of the device + Returns: + bool: True if device is present, False if not + """ + return True + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + return 'N/A' + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + return 'N/A' + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + return True + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + If the agent cannot determine the parent-relative position + for some reason, or if the associated value of + entPhysicalContainedIn is'0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device + or -1 if cannot determine the position + """ + return -1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return False diff --git a/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/eeprom.py b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/eeprom.py new file mode 100644 index 000000000000..64a484faf5cf --- /dev/null +++ b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/eeprom.py @@ -0,0 +1,134 @@ +try: + import os + import sys + import re + if sys.version_info[0] >= 3: + from io import StringIO + else: + from cStringIO import StringIO + + from sonic_platform_base.sonic_eeprom import eeprom_tlvinfo +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +CACHE_ROOT = '/var/cache/sonic/decode-syseeprom' +CACHE_FILE = 'syseeprom_cache' +NULL = 'N/A' + +class Tlv(eeprom_tlvinfo.TlvInfoDecoder): + + EEPROM_DECODE_HEADLINES = 6 + + def __init__(self): + self._eeprom_path = "/sys/bus/i2c/devices/1-0057/eeprom" + super(Tlv, self).__init__(self._eeprom_path, 0, '', True) + self._eeprom = self._load_eeprom() + + def __parse_output(self, decode_output): + decode_output.replace('\0', '') + lines = decode_output.split('\n') + lines = lines[self.EEPROM_DECODE_HEADLINES:] + _eeprom_info_dict = dict() + + for line in lines: + try: + match = re.search( + '(0x[0-9a-fA-F]{2})([\s]+[\S]+[\s]+)([\S]+)', line) + if match is not None: + idx = match.group(1) + value = match.group(3).rstrip('\0') + + _eeprom_info_dict[idx] = value + except Exception: + pass + + return _eeprom_info_dict + + def _load_eeprom(self): + original_stdout = sys.stdout + sys.stdout = StringIO() + try: + self.read_eeprom_db() + except Exception: + decode_output = sys.stdout.getvalue() + sys.stdout = original_stdout + return self.__parse_output(decode_output) + + status = self.check_status() + if 'ok' not in status: + return False + + if not os.path.exists(CACHE_ROOT): + try: + os.makedirs(CACHE_ROOT) + except Exception: + pass + + # + # only the eeprom classes that inherit from eeprom_base + # support caching. Others will work normally + # + try: + self.set_cache_name(os.path.join(CACHE_ROOT, CACHE_FILE)) + except Exception: + pass + + e = self.read_eeprom() + if e is None: + return 0 + + try: + self.update_cache(e) + except Exception: + pass + + self.decode_eeprom(e) + decode_output = sys.stdout.getvalue() + sys.stdout = original_stdout + + (is_valid, valid_crc) = self.is_checksum_valid(e) + if not is_valid: + return False + + return self.__parse_output(decode_output) + + def _valid_tlv(self, eeprom_data): + tlvinfo_type_codes_list = [ + self._TLV_CODE_PRODUCT_NAME, + self._TLV_CODE_PART_NUMBER, + self._TLV_CODE_SERIAL_NUMBER, + self._TLV_CODE_MAC_BASE, + self._TLV_CODE_MANUF_DATE, + self._TLV_CODE_DEVICE_VERSION, + self._TLV_CODE_LABEL_REVISION, + self._TLV_CODE_PLATFORM_NAME, + self._TLV_CODE_ONIE_VERSION, + self._TLV_CODE_MAC_SIZE, + self._TLV_CODE_MANUF_NAME, + self._TLV_CODE_MANUF_COUNTRY, + self._TLV_CODE_VENDOR_NAME, + self._TLV_CODE_DIAG_VERSION, + self._TLV_CODE_SERVICE_TAG, + self._TLV_CODE_VENDOR_EXT, + self._TLV_CODE_CRC_32 + ] + + for code in tlvinfo_type_codes_list: + code_str = "0x{:X}".format(code) + eeprom_data[code_str] = eeprom_data.get(code_str, NULL) + return eeprom_data + + def get_eeprom(self): + return self._valid_tlv(self._eeprom) + + def get_pn(self): + return self._eeprom.get('0x22', NULL) + + def get_serial(self): + return self._eeprom.get('0x23', NULL) + + def get_mac(self): + return self._eeprom.get('0x24', NULL) + + def get_product_name(self): + return self._eeprom.get('0x21', NULL) diff --git a/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/event.py b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/event.py new file mode 100644 index 000000000000..96f853402abb --- /dev/null +++ b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/event.py @@ -0,0 +1,63 @@ +try: + import time + from .helper import APIHelper + from sonic_py_common.logger import Logger +except ImportError as e: + raise ImportError(repr(e) + " - required module not found") + +POLL_INTERVAL_IN_SEC = 1 + +class SfpEvent: + ''' Listen to insert/remove sfp events ''' + + def __init__(self, sfp_list): + self._api_helper = APIHelper() + self._sfp_list = sfp_list + self._logger = Logger() + self._sfp_change_event_data = {'present': 0} + + def get_presence_bitmap(self): + bitmap = 0 + for sfp in self._sfp_list: + modpres = sfp.get_presence() + i=sfp.port_num-1 + if modpres: + bitmap = bitmap | (1 << i) + return bitmap + + def get_sfp_event(self, timeout=2000): + #now = time.time() + port_dict = {} + change_dict = {} + change_dict['sfp'] = port_dict + + if timeout < 1000: + cd_ms = 1000 + else: + cd_ms = timeout + + while cd_ms > 0: + bitmap = self.get_presence_bitmap() + changed_ports = self._sfp_change_event_data['present'] ^ bitmap + if changed_ports != 0: + break + time.sleep(POLL_INTERVAL_IN_SEC) + # timeout=0 means wait for event forever + if timeout != 0: + cd_ms = cd_ms - POLL_INTERVAL_IN_SEC * 1000 + + if changed_ports != 0: + for sfp in self._sfp_list: + i=sfp.port_num-1 + if (changed_ports & (1 << i)): + if (bitmap & (1 << i)) == 0: + port_dict[i+1] = '0' + else: + port_dict[i+1] = '1' + + + # Update the cache dict + self._sfp_change_event_data['present'] = bitmap + return True, change_dict + else: + return True, change_dict diff --git a/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/fan.py b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/fan.py new file mode 100644 index 000000000000..eb9d526217bb --- /dev/null +++ b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/fan.py @@ -0,0 +1,284 @@ +############################################################################# +# Edgecore +# +# Module contains an implementation of SONiC Platform Base API and +# provides the fan status which are available in the platform +# +############################################################################# + + + +try: + from sonic_platform_base.fan_base import FanBase + from .helper import APIHelper +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +PSU_FAN_MAX_RPM = 26688 +SPEED_TOLERANCE = 15 +CPLD_FAN_I2C_PATH = "/sys/bus/i2c/devices/3-0060/fan_" +I2C_PATH ="/sys/bus/i2c/devices/{}-00{}/" +PSU_HWMON_I2C_MAPPING = { + 0: { + "num": 10, + "addr": "58" + }, + 1: { + "num": 11, + "addr": "59" + }, +} + +PSU_CPLD_I2C_MAPPING = { + 0: { + "num": 10, + "addr": "50" + }, + 1: { + "num": 11, + "addr": "51" + }, +} + + +FAN_NAME_LIST = ["FAN-1F", "FAN-1R", "FAN-2F", "FAN-2R", + "FAN-3F", "FAN-3R"] + +class Fan(FanBase): + """Platform-specific Fan class""" + + def __init__(self, fan_tray_index, fan_index=0, is_psu_fan=False, psu_index=0): + self._api_helper=APIHelper() + self.fan_index = fan_index + self.fan_tray_index = fan_tray_index + self.is_psu_fan = is_psu_fan + + if self.is_psu_fan: + self.psu_index = psu_index + self.psu_i2c_num = PSU_HWMON_I2C_MAPPING[self.psu_index]['num'] + self.psu_i2c_addr = PSU_HWMON_I2C_MAPPING[self.psu_index]['addr'] + self.psu_hwmon_path = I2C_PATH.format( + self.psu_i2c_num, self.psu_i2c_addr) + + self.psu_i2c_num = PSU_CPLD_I2C_MAPPING[self.psu_index]['num'] + self.psu_i2c_addr = PSU_CPLD_I2C_MAPPING[self.psu_index]['addr'] + self.psu_cpld_path = I2C_PATH.format( + self.psu_i2c_num, self.psu_i2c_addr) + + FanBase.__init__(self) + + + def get_direction(self): + """ + Retrieves the direction of fan + Returns: + A string, either FAN_DIRECTION_INTAKE or FAN_DIRECTION_EXHAUST + depending on fan direction + """ + if not self.is_psu_fan: + dir_str = "{}{}{}".format(CPLD_FAN_I2C_PATH, 'direction_', self.fan_tray_index+1) + val=self._api_helper.read_txt_file(dir_str) + if val is not None: + if int(val, 10)==0:#F2B + direction=self.FAN_DIRECTION_EXHAUST + else: + direction=self.FAN_DIRECTION_INTAKE + else: + direction=self.FAN_DIRECTION_EXHAUST + + else: #For PSU + dir_str = "{}{}".format(self.psu_hwmon_path,'psu_fan_dir') + val=self._api_helper.read_txt_file(dir_str) + if val is not None: + if val=='F2B': + direction=self.FAN_DIRECTION_EXHAUST + else: + direction=self.FAN_DIRECTION_INTAKE + else: + direction=self.FAN_DIRECTION_EXHAUST + + return direction + + def get_speed(self): + """ + Retrieves the speed of fan as a percentage of full speed + Returns: + An integer, the percentage of full fan speed, in the range 0 (off) + to 100 (full speed) + + """ + speed = 0 + if self.is_psu_fan: + psu_fan_path= "{}{}".format(self.psu_hwmon_path, 'psu_fan1_speed_rpm') + fan_speed_rpm = self._api_helper.read_txt_file(psu_fan_path) + if fan_speed_rpm is not None: + speed = (int(fan_speed_rpm,10))*100/26688 + if speed > 100: + speed=100 + else: + return 0 + elif self.get_presence(): + speed_path = "{}{}".format(CPLD_FAN_I2C_PATH, 'duty_cycle_percentage') + speed=self._api_helper.read_txt_file(speed_path) + if speed is None: + return 0 + return int(speed) + + def get_target_speed(self): + """ + Retrieves the target (expected) speed of the fan + Returns: + An integer, the percentage of full fan speed, in the range 0 (off) + to 100 (full speed) + + Note: + speed_pc = pwm_target/255*100 + + 0 : when PWM mode is use + pwm : when pwm mode is not use + """ + return self.get_speed() + + def get_speed_tolerance(self): + """ + Retrieves the speed tolerance of the fan + Returns: + An integer, the percentage of variance from target speed which is + considered tolerable + """ + return SPEED_TOLERANCE + + def set_speed(self, speed): + """ + Sets the fan speed + Args: + speed: An integer, the percentage of full fan speed to set fan to, + in the range 0 (off) to 100 (full speed) + Returns: + A boolean, True if speed is set successfully, False if not + + """ + + if not self.is_psu_fan and self.get_presence(): + speed_path = "{}{}".format(CPLD_FAN_I2C_PATH, 'duty_cycle_percentage') + return self._api_helper.write_txt_file(speed_path, int(speed)) + + return False + + def set_status_led(self, color): + """ + Sets the state of the fan module status LED + Args: + color: A string representing the color with which to set the + fan module status LED + Returns: + bool: True if status LED state is set successfully, False if not + """ + return False #Not supported + + def get_status_led(self): + """ + Gets the state of the fan status LED + Returns: + A string, one of the predefined STATUS_LED_COLOR_* strings above + """ + status=self.get_presence() + if status is None: + return self.STATUS_LED_COLOR_OFF + + return { + 1: self.STATUS_LED_COLOR_GREEN, + 0: self.STATUS_LED_COLOR_RED + }.get(status, self.STATUS_LED_COLOR_OFF) + + def get_name(self): + """ + Retrieves the name of the device + Returns: + string: The name of the device + """ + fan_name = FAN_NAME_LIST[self.fan_tray_index*2 + self.fan_index] \ + if not self.is_psu_fan \ + else "PSU-{} FAN-{}".format(self.psu_index+1, self.fan_index+1) + + return fan_name + + def get_presence(self): + """ + Retrieves the presence of the FAN + Returns: + bool: True if FAN is present, False if not + """ + + + if self.is_psu_fan: + present_path="{}{}".format(self.psu_cpld_path, 'psu_present') + else: + present_path = "{}{}{}".format(CPLD_FAN_I2C_PATH, 'present_', self.fan_tray_index+1) + + val=self._api_helper.read_txt_file(present_path) + if val is not None: + return int(val, 10)==1 + else: + return False + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + if self.is_psu_fan: + psu_fan_path= "{}{}".format(self.psu_hwmon_path, 'psu_fan1_fault') + val=self._api_helper.read_txt_file(psu_fan_path) + if val is not None: + return int(val, 10)==0 + else: + return False + else: + path = "{}{}{}".format(CPLD_FAN_I2C_PATH, 'fault_', self.fan_tray_index+1) + val=self._api_helper.read_txt_file(path) + if val is not None: + return int(val, 10)==0 + else: + return False + + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + + return "N/A" + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + return "N/A" + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + If the agent cannot determine the parent-relative position + for some reason, or if the associated value of + entPhysicalContainedIn is'0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device + or -1 if cannot determine the position + """ + return (self.fan_index+1) \ + if not self.is_psu_fan else (self.psu_index+1) + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True if not self.is_psu_fan else False + diff --git a/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/fan_drawer.py b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/fan_drawer.py new file mode 100644 index 000000000000..17d339ee55f6 --- /dev/null +++ b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/fan_drawer.py @@ -0,0 +1,90 @@ +######################################################################## +# +# Module contains an implementation of SONiC Platform Base API and +# provides the Fan-Drawers' information available in the platform. +# +######################################################################## + +try: + from sonic_platform_base.fan_drawer_base import FanDrawerBase +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +FANS_PER_FANTRAY = 2 + + +class FanDrawer(FanDrawerBase): + """Platform-specific Fan class""" + + def __init__(self, fantray_index): + + FanDrawerBase.__init__(self) + # FanTray is 0-based in platforms + self.fantrayindex = fantray_index + self.__initialize_fan_drawer() + + + def __initialize_fan_drawer(self): + from sonic_platform.fan import Fan + for i in range(FANS_PER_FANTRAY): + self._fan_list.append(Fan(self.fantrayindex, i)) + + def get_name(self): + """ + Retrieves the fan drawer name + Returns: + string: The name of the device + """ + return "FanTray{}".format(self.fantrayindex+1) + + def get_presence(self): + """ + Retrieves the presence of the device + Returns: + bool: True if device is present, False if not + """ + return self._fan_list[0].get_presence() + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + return self._fan_list[0].get_model() + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + return self._fan_list[0].get_serial() + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + return self._fan_list[0].get_status() + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + If the agent cannot determine the parent-relative position + for some reason, or if the associated value of + entPhysicalContainedIn is'0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device + or -1 if cannot determine the position + """ + return (self.fantrayindex+1) + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True diff --git a/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/helper.py b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/helper.py new file mode 100644 index 000000000000..b124ca29f0df --- /dev/null +++ b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/helper.py @@ -0,0 +1,117 @@ +import os +import struct +import subprocess +from mmap import * +from sonic_py_common import device_info + +HOST_CHK_CMD = "docker > /dev/null 2>&1" +EMPTY_STRING = "" + + +class APIHelper(): + + def __init__(self): + (self.platform, self.hwsku) = device_info.get_platform_and_hwsku() + + def is_host(self): + return os.system(HOST_CHK_CMD) == 0 + + def pci_get_value(self, resource, offset): + status = True + result = "" + try: + fd = os.open(resource, os.O_RDWR) + mm = mmap(fd, 0) + mm.seek(int(offset)) + read_data_stream = mm.read(4) + result = struct.unpack('I', read_data_stream) + except Exception: + status = False + return status, result + + def run_command(self, cmd): + status = True + result = "" + try: + p = subprocess.Popen( + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + raw_data, err = p.communicate() + if err == '': + result = raw_data.strip() + except Exception: + status = False + return status, result + + def run_interactive_command(self, cmd): + try: + os.system(cmd) + except Exception: + return False + return True + + def read_txt_file(self, file_path): + try: + with open(file_path, 'r', errors='replace') as fd: + data = fd.read() + return data.strip() + except IOError: + pass + return None + + def write_txt_file(self, file_path, value): + try: + with open(file_path, 'w') as fd: + fd.write(str(value)) + except IOError: + return False + return True + + def ipmi_raw(self, netfn, cmd): + status = True + result = "" + try: + cmd = "ipmitool raw {} {}".format(str(netfn), str(cmd)) + p = subprocess.Popen( + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + raw_data, err = p.communicate() + if err == '': + result = raw_data.strip() + else: + status = False + except Exception: + status = False + return status, result + + def ipmi_fru_id(self, id, key=None): + status = True + result = "" + try: + cmd = "ipmitool fru print {}".format(str( + id)) if not key else "ipmitool fru print {0} | grep '{1}' ".format(str(id), str(key)) + + p = subprocess.Popen( + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + raw_data, err = p.communicate() + if err == '': + result = raw_data.strip() + else: + status = False + except Exception: + status = False + return status, result + + def ipmi_set_ss_thres(self, id, threshold_key, value): + status = True + result = "" + try: + cmd = "ipmitool sensor thresh '{}' {} {}".format(str(id), str(threshold_key), str(value)) + p = subprocess.Popen( + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + raw_data, err = p.communicate() + if err == '': + result = raw_data.strip() + else: + status = False + except Exception: + status = False + return status, result diff --git a/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/platform.py b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/platform.py new file mode 100644 index 000000000000..2f2c2a447fcf --- /dev/null +++ b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/platform.py @@ -0,0 +1,21 @@ +############################################################################# +# Edgecore +# +# Module contains an implementation of SONiC Platform Base API and +# provides the platform information +# +############################################################################# + +try: + from sonic_platform_base.platform_base import PlatformBase + from sonic_platform.chassis import Chassis +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class Platform(PlatformBase): + """Platform-specific Platform class""" + + def __init__(self): + PlatformBase.__init__(self) + self._chassis = Chassis() diff --git a/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/psu.py b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/psu.py new file mode 100644 index 000000000000..6f21de491b38 --- /dev/null +++ b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/psu.py @@ -0,0 +1,269 @@ +############################################################################# +# Edgecore +# +# Module contains an implementation of SONiC Platform Base API and +# provides the PSUs status which are available in the platform +# +############################################################################# + +#import sonic_platform + +try: + from sonic_platform_base.psu_base import PsuBase + from .helper import APIHelper +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +I2C_PATH ="/sys/bus/i2c/devices/{0}-00{1}/" + +PSU_NAME_LIST = ["PSU-1", "PSU-2"] +PSU_NUM_FAN = [1, 1] +PSU_HWMON_I2C_MAPPING = { + 0: { + "num": 10, + "addr": "58" + }, + 1: { + "num": 11, + "addr": "59" + }, +} + +PSU_CPLD_I2C_MAPPING = { + 0: { + "num": 10, + "addr": "50" + }, + 1: { + "num": 11, + "addr": "51" + }, +} + +class Psu(PsuBase): + """Platform-specific Psu class""" + + def __init__(self, psu_index=0): + PsuBase.__init__(self) + self.index = psu_index + self._api_helper = APIHelper() + + self.i2c_num = PSU_HWMON_I2C_MAPPING[self.index]["num"] + self.i2c_addr = PSU_HWMON_I2C_MAPPING[self.index]["addr"] + self.hwmon_path = I2C_PATH.format(self.i2c_num, self.i2c_addr) + + self.i2c_num = PSU_CPLD_I2C_MAPPING[self.index]["num"] + self.i2c_addr = PSU_CPLD_I2C_MAPPING[self.index]["addr"] + self.cpld_path = I2C_PATH.format(self.i2c_num, self.i2c_addr) + self.__initialize_fan() + + def __initialize_fan(self): + from sonic_platform.fan import Fan + for fan_index in range(0, PSU_NUM_FAN[self.index]): + fan = Fan(fan_index, 0, is_psu_fan=True, psu_index=self.index) + self._fan_list.append(fan) + + def get_voltage(self): + """ + Retrieves current PSU voltage output + Returns: + A float number, the output voltage in volts, + e.g. 12.1 + """ + vout_path = "{}{}".format(self.hwmon_path, 'psu_v_out') + vout_val=self._api_helper.read_txt_file(vout_path) + if vout_val is not None: + return float(vout_val)/ 1000 + else: + return 0 + + def get_current(self): + """ + Retrieves present electric current supplied by PSU + Returns: + A float number, the electric current in amperes, e.g 15.4 + """ + iout_path = "{}{}".format(self.hwmon_path, 'psu_i_out') + val=self._api_helper.read_txt_file(iout_path) + if val is not None: + return float(val)/1000 + else: + return 0 + + def get_power(self): + """ + Retrieves current energy supplied by PSU + Returns: + A float number, the power in watts, e.g. 302.6 + """ + pout_path = "{}{}".format(self.hwmon_path, 'psu_p_out') + val=self._api_helper.read_txt_file(pout_path) + if val is not None: + return float(val)/1000 + else: + return 0 + + def get_powergood_status(self): + """ + Retrieves the powergood status of PSU + Returns: + A boolean, True if PSU has stablized its output voltages and passed all + its internal self-tests, False if not. + """ + return self.get_status() + + def set_status_led(self, color): + """ + Sets the state of the PSU status LED + Args: + color: A string representing the color with which to set the PSU status LED + Note: Only support green and off + Returns: + bool: True if status LED state is set successfully, False if not + """ + + return False #Controlled by HW + + def get_status_led(self): + """ + Gets the state of the PSU status LED + Returns: + A string, one of the predefined STATUS_LED_COLOR_* strings above + """ + status=self.get_status() + if status is None: + return self.STATUS_LED_COLOR_OFF + + return { + 1: self.STATUS_LED_COLOR_GREEN, + 0: self.STATUS_LED_COLOR_RED + }.get(status, self.STATUS_LED_COLOR_OFF) + + + def get_temperature(self): + """ + Retrieves current temperature reading from PSU + Returns: + A float number of current temperature in Celsius up to nearest thousandth + of one degree Celsius, e.g. 30.125 + """ + temp_path = "{}{}".format(self.hwmon_path, 'psu_temp1_input') + val=self._api_helper.read_txt_file(temp_path) + if val is not None: + return float(val)/1000 + else: + return 0 + + def get_temperature_high_threshold(self): + """ + Retrieves the high threshold temperature of PSU + Returns: + A float number, the high threshold temperature of PSU in Celsius + up to nearest thousandth of one degree Celsius, e.g. 30.125 + """ + return False #Not supported + + def get_voltage_high_threshold(self): + """ + Retrieves the high threshold PSU voltage output + Returns: + A float number, the high threshold output voltage in volts, + e.g. 12.1 + """ + vout_path = "{}{}".format(self.hwmon_path, 'psu_mfr_vout_max') + vout_val=self._api_helper.read_txt_file(vout_path) + if vout_val is not None: + return float(vout_val)/ 1000 + else: + return 0 + + def get_voltage_low_threshold(self): + """ + Retrieves the low threshold PSU voltage output + Returns: + A float number, the low threshold output voltage in volts, + e.g. 12.1 + """ + vout_path = "{}{}".format(self.hwmon_path, 'psu_mfr_vout_min') + vout_val=self._api_helper.read_txt_file(vout_path) + if vout_val is not None: + return float(vout_val)/ 1000 + else: + return 0 + + def get_name(self): + """ + Retrieves the name of the device + Returns: + string: The name of the device + """ + return PSU_NAME_LIST[self.index] + + def get_presence(self): + """ + Retrieves the presence of the PSU + Returns: + bool: True if PSU is present, False if not + """ + presence_path="{}{}".format(self.cpld_path, 'psu_present') + val=self._api_helper.read_txt_file(presence_path) + if val is not None: + return int(val, 10) == 1 + else: + return 0 + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + power_path="{}{}".format(self.cpld_path, 'psu_power_good') + val=self._api_helper.read_txt_file(power_path) + if val is not None: + return int(val, 10) == 1 + else: + return 0 + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + model_path="{}{}".format(self.cpld_path, 'psu_model_name') + model=self._api_helper.read_txt_file(model_path) + if model is None: + return "N/A" + + return model + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + serial_path="{}{}".format(self.cpld_path, 'psu_serial_number') + serial=self._api_helper.read_txt_file(serial_path) + if serial is None: + return "N/A" + return serial + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return self.index+1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True diff --git a/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/sfp.py b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/sfp.py new file mode 100644 index 000000000000..c421761025cf --- /dev/null +++ b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/sfp.py @@ -0,0 +1,484 @@ +############################################################################# +# Edgecore +# +# Sfp contains an implementation of SONiC Platform Base API and +# provides the sfp device status which are available in the platform +# +############################################################################# + +import os +import time +import sys + +from ctypes import create_string_buffer + +try: + from sonic_platform_base.sonic_xcvr.sfp_optoe_base import SfpOptoeBase + from .helper import APIHelper +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +CPLD_I2C_PATH = "/sys/bus/i2c/devices/3-0060/" + +class Sfp(SfpOptoeBase): + """Platform-specific Sfp class""" + + # Port number + PORT_START = 49 + PORT_END = 54 + + # Path to sysfs + PLATFORM_ROOT_PATH = "/usr/share/sonic/device" + PMON_HWSKU_PATH = "/usr/share/sonic/hwsku" + HOST_CHK_CMD = "which systemctl > /dev/null 2>&1" + + PLATFORM = "x86_64-accton_as4630_54pe-r0" + HWSKU = "Accton-AS4630-54PE" + + _port_to_i2c_mapping = { + 49: 18, + 50: 19, + 51: 20, + 52: 21, + 53: 22, + 54: 23, + } + + def __init__(self, sfp_index=0): + SfpOptoeBase.__init__(self) + self._api_helper=APIHelper() + # Init index + self.index = sfp_index + self.port_num = self.index + 1 + # Init eeprom path + eeprom_path = '/sys/bus/i2c/devices/{0}-0050/eeprom' + self.port_to_eeprom_mapping = {} + for x in range(self.PORT_START, self.PORT_END + 1): + self.port_to_eeprom_mapping[x] = eeprom_path.format(self._port_to_i2c_mapping[x]) + + def get_eeprom_path(self): + return self.port_to_eeprom_mapping[self.port_num] + + def __is_host(self): + return os.system(self.HOST_CHK_CMD) == 0 + + def __get_path_to_port_config_file(self): + platform_path = "/".join([self.PLATFORM_ROOT_PATH, self.PLATFORM]) + hwsku_path = "/".join([platform_path, self.HWSKU] + ) if self.__is_host() else self.PMON_HWSKU_PATH + return "/".join([hwsku_path, "port_config.ini"]) + + def __read_eeprom_specific_bytes(self, offset, num_bytes): + sysfsfile_eeprom = None + eeprom_raw = [] + for i in range(0, num_bytes): + eeprom_raw.append("0x00") + + sysfs_sfp_i2c_client_eeprom_path = self.port_to_eeprom_mapping[self.port_num] + try: + sysfsfile_eeprom = open( + sysfs_sfp_i2c_client_eeprom_path, mode="rb", buffering=0) + sysfsfile_eeprom.seek(offset) + raw = sysfsfile_eeprom.read(num_bytes) + if sys.version_info[0] >= 3: + for n in range(0, num_bytes): + eeprom_raw[n] = hex(raw[n])[2:].zfill(2) + else: + for n in range(0, num_bytes): + eeprom_raw[n] = hex(ord(raw[n]))[2:].zfill(2) + except Exception: + pass + finally: + if sysfsfile_eeprom: + sysfsfile_eeprom.close() + + return eeprom_raw + + def get_reset_status(self): + """ + Retrieves the reset status of SFP + Returns: + A Boolean, True if reset enabled, False if disabled + """ + if self.port_num < 53: #Copper port and sfp ports are suported. + return False + + reset_path="{}{}{}".format(CPLD_I2C_PATH , "module_reset_" , str(self.port_num)) + val = self._api_helper.read_txt_file(reset_path) + + if val is not None: + return int(val, 10) == 1 + else: + return False + + def get_rx_los(self): + """ + Retrieves the RX LOS (lost-of-signal) status of SFP + Returns: + A Boolean, True if SFP has RX LOS, False if not. + Note : RX LOS status is latched until a call to get_rx_los or a reset. + """ + rx_los = False + + if self.port_num < 49: #Copper port, no sysfs + return False + + if self.port_num < 53: + rx_path = "{}{}{}".format(CPLD_I2C_PATH, '/module_rx_los_', self.port_num) + rx_los=self._api_helper.read_txt_file(rx_path) + if rx_los is None: + return False + else: + rx_los_list = [] + dom_channel_monitor_raw = self.__read_eeprom_specific_bytes( + QSFP_CHANNL_RX_LOS_STATUS_OFFSET, QSFP_CHANNL_RX_LOS_STATUS_WIDTH) if self.get_presence() else None + 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 & 0x01 != 0) + rx_los_list.append(rx_los_data & 0x02 != 0) + rx_los_list.append(rx_los_data & 0x04 != 0) + rx_los_list.append(rx_los_data & 0x08 != 0) + rx_los = rx_los_list[0] and rx_los_list[1] and rx_los_list[2] and rx_los_list[3] + return rx_los + + def get_tx_fault(self): + """ + Retrieves the TX fault status of SFP + Returns: + A Boolean, True if SFP has TX fault, False if not + Note : TX fault status is lached until a call to get_tx_fault or a reset. + """ + tx_fault = False + if self.port_num < 49: #Copper port, no sysfs + return False + + if self.port_num < 53: + tx_path = "{}{}{}".format(CPLD_I2C_PATH, '/module_tx_fault_', self.port_num) + tx_fault=self._api_helper.read_txt_file(tx_path) + if tx_fault is None: + return False + else: + tx_fault_list = [] + dom_channel_monitor_raw = self.__read_eeprom_specific_bytes( + QSFP_CHANNL_TX_FAULT_STATUS_OFFSET, QSFP_CHANNL_TX_FAULT_STATUS_WIDTH) if self.get_presence() else None + 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 & 0x01 != 0) + tx_fault_list.append(tx_fault_data & 0x02 != 0) + tx_fault_list.append(tx_fault_data & 0x04 != 0) + tx_fault_list.append(tx_fault_data & 0x08 != 0) + tx_fault = tx_fault_list[0] and tx_fault_list[1] and tx_fault_list[2] and tx_fault_list[3] + + return tx_fault + + def get_tx_disable(self): + """ + Retrieves the tx_disable status of this SFP + Returns: + A Boolean, True if tx_disable is enabled, False if disabled + """ + if self.port_num < 49: #Copper port, no sysfs + return False + + if self.port_num < 53: + tx_disable = False + + tx_path = "{}{}{}".format(CPLD_I2C_PATH, '/module_tx_disable_', self.port_num) + tx_disable=self._api_helper.read_txt_file(tx_path) + + if tx_disable is not None: + return tx_disable + else: + return False + + else: + tx_disable_list = [] + + sfpd_obj = sff8436Dom() + if sfpd_obj is None: + return False + + dom_control_raw = self.__read_eeprom_specific_bytes( + QSFP_CONTROL_OFFSET, QSFP_CONTROL_WIDTH) if self.get_presence() else None + if dom_control_raw is not None: + dom_control_data = sfpd_obj.parse_control_bytes(dom_control_raw, 0) + tx_disable_list.append( + 'On' == dom_control_data['data']['TX1Disable']['value']) + tx_disable_list.append( + 'On' == dom_control_data['data']['TX2Disable']['value']) + tx_disable_list.append( + 'On' == dom_control_data['data']['TX3Disable']['value']) + tx_disable_list.append( + 'On' == dom_control_data['data']['TX4Disable']['value']) + + return tx_disable_list + + def get_tx_disable_channel(self): + """ + Retrieves the TX disabled channels in this SFP + Returns: + A hex of 4 bits (bit 0 to bit 3 as channel 0 to channel 3) to represent + TX channels which have been disabled in this SFP. + As an example, a returned value of 0x5 indicates that channel 0 + and channel 2 have been disabled. + """ + if self.port_num < 53: + # SFP doesn't support this feature + return False + else: + tx_disable_list = self.get_tx_disable() + if tx_disable_list is None: + return 0 + tx_disabled = 0 + for i in range(len(tx_disable_list)): + if tx_disable_list[i]: + tx_disabled |= 1 << i + return tx_disabled + + 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 + """ + if self.port_num < 53: + # SFP doesn't support this feature + return False + else: + power_set=self.get_power_set() + power_override = self.get_power_override() + return power_set and power_override + + + def reset(self): + """ + Reset SFP and return all user module settings to their default srate. + Returns: + A boolean, True if successful, False if not + """ + # Check for invalid port_num + if self.port_num < 53: #Copper port and sfp ports are not supported. + return False + + reset_path = "{}{}{}".format(CPLD_I2C_PATH, 'module_reset_', self.port_num) + ret = self._api_helper.write_txt_file(reset_path, 1) + if ret is not True: + return ret + + time.sleep(0.01) + ret = self._api_helper.write_txt_file(reset_path, 0) + time.sleep(0.2) + + return ret + + def tx_disable(self, tx_disable): + """ + Disable SFP TX for all channels + Args: + tx_disable : A Boolean, True to enable tx_disable mode, False to disable + tx_disable mode. + Returns: + A boolean, True if tx_disable is set successfully, False if not + """ + if self.port_num < 49: #Copper port, no sysfs + return False + + if self.port_num < 53: + tx_path = "{}{}{}".format(CPLD_I2C_PATH, '/module_tx_disable_', self.port_num) + ret = self._api_helper.write_txt_file(tx_path, 1 if tx_disable else 0) + if ret is not None: + time.sleep(0.01) + return ret + else: + return False + + else: + if not self.get_presence(): + return False + sysfsfile_eeprom = None + try: + tx_disable_ctl = 0xf if tx_disable else 0x0 + buffer = create_string_buffer(1) + if sys.version_info[0] >= 3: + buffer[0] = tx_disable_ctl + else: + buffer[0] = chr(tx_disable_ctl) + # Write to eeprom + sysfsfile_eeprom = open( + self.port_to_eeprom_mapping[self.port_num], "r+b") + sysfsfile_eeprom.seek(QSFP_CONTROL_OFFSET) + + sysfsfile_eeprom.write(buffer[0]) + except IOError as e: + print ('Error: unable to open file: ',str(e)) + return False + finally: + if sysfsfile_eeprom is not None: + sysfsfile_eeprom.close() + time.sleep(0.01) + return True + + def tx_disable_channel(self, channel, disable): + """ + Sets the tx_disable for specified SFP channels + Args: + channel : A hex of 4 bits (bit 0 to bit 3) which represent channel 0 to 3, + e.g. 0x5 for channel 0 and channel 2. + disable : A boolean, True to disable TX channels specified in channel, + False to enable + Returns: + A boolean, True if successful, False if not + """ + + if self.port_num < 53: + return False # SFP doesn't support this feature + else: + if not self.get_presence(): + return False + + sysfsfile_eeprom = None + try: + channel_state = self.get_tx_disable_channel() + + for i in range(4): + channel_mask = (1 << i) + if not (channel & channel_mask): + continue + + if disable: + channel_state |= channel_mask + else: + channel_state &= ~channel_mask + + buffer = create_string_buffer(1) + if sys.version_info[0] >= 3: + buffer[0] = channel_state + else: + buffer[0] = chr(channel_state) + # Write to eeprom + sysfsfile_eeprom = open( + self.port_to_eeprom_mapping[self.port_num], "r+b") + sysfsfile_eeprom.seek(QSFP_CONTROL_OFFSET) + sysfsfile_eeprom.write(buffer[0]) + except IOError as e: + print ('Error: unable to open file: ', str(e)) + return False + finally: + if sysfsfile_eeprom is not None: + sysfsfile_eeprom.close() + time.sleep(0.01) + return True + + 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 + """ + if self.port_num < 53: + return False # SFP doesn't support this feature + else: + if lpmode is True: + self.set_power_override(True, True) + else: + self.set_power_override(False, False) + + return True + + def set_power_override(self, power_override, power_set): + """ + Sets SFP power level using power_override and power_set + Args: + power_override : + A Boolean, True to override set_lpmode and use power_set + to control SFP power, False to disable SFP power control + through power_override/power_set and use set_lpmode + to control SFP power. + power_set : + Only valid when power_override is True. + A Boolean, True to set SFP to low power mode, False to set + SFP to high power mode. + Returns: + A boolean, True if power-override and power_set are set successfully, + False if not + """ + if self.port_num < 53: + return False # SFP doesn't support this feature + else: + if not self.get_presence(): + return False + try: + power_override_bit = (1 << 0) if power_override else 0 + power_set_bit = (1 << 1) if power_set else (1 << 3) + + buffer = create_string_buffer(1) + if sys.version_info[0] >= 3: + buffer[0] = (power_override_bit | power_set_bit) + else: + buffer[0] = chr(power_override_bit | power_set_bit) + # Write to eeprom + with open(self.port_to_eeprom_mapping[self.port_num], "r+b") as fd: + fd.seek(QSFP_POWEROVERRIDE_OFFSET) + fd.write(buffer[0]) + time.sleep(0.01) + except IOError as e: + print ('Error: unable to open file: ', str(e)) + return False + return True + + def get_name(self): + """ + Retrieves the name of the device + Returns: + string: The name of the device + """ + name = None + sfputil_helper = SfpUtilHelper() + sfputil_helper.read_porttab_mappings( + self.__get_path_to_port_config_file()) + name = sfputil_helper.logical[self.index] or "Unknown" + return name + + def get_presence(self): + """ + Retrieves the presence of the device + Returns: + bool: True if device is present, False if not + """ + if self.port_num < 49: #Copper port, no sysfs + return False + + present_path = "{}{}{}".format(CPLD_I2C_PATH, '/module_present_', self.port_num) + val=self._api_helper.read_txt_file(present_path) + if val is not None: + return int(val, 10)==1 + else: + return False + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + return self.get_presence() + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return self.port_num + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True diff --git a/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/thermal.py b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/thermal.py new file mode 100644 index 000000000000..938afca80e9e --- /dev/null +++ b/device/accton/x86_64-accton_as4630_54pe-r0/sonic_platform/thermal.py @@ -0,0 +1,236 @@ +############################################################################# +# Edgecore +# +# Thermal contains an implementation of SONiC Platform Base API and +# provides the thermal device status which are available in the platform +# +############################################################################# + +import os +import os.path +import glob + +try: + from sonic_platform_base.thermal_base import ThermalBase +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +PSU_I2C_PATH = "/sys/bus/i2c/devices/{}-00{}/" +PSU_I2C_MAPPING = { + 0: { + "num": 10, + "addr": "58" + }, + 1: { + "num": 11, + "addr": "59" + }, +} + +PSU_CPLD_I2C_MAPPING = { + 0: { + "num": 10, + "addr": "50" + }, + 1: { + "num": 11, + "addr": "51" + }, +} + + +class Thermal(ThermalBase): + """Platform-specific Thermal class""" + + THERMAL_NAME_LIST = [] + PSU_THERMAL_NAME_LIST = [] + SYSFS_PATH = "/sys/bus/i2c/devices" + + def __init__(self, thermal_index=0, is_psu=False, psu_index=0): + self.index = thermal_index + self.is_psu = is_psu + self.psu_index = psu_index + + if self.is_psu: + psu_i2c_bus = PSU_I2C_MAPPING[psu_index]["num"] + psu_i2c_addr = PSU_I2C_MAPPING[psu_index]["addr"] + self.psu_hwmon_path = PSU_I2C_PATH.format(psu_i2c_bus, + psu_i2c_addr) + psu_i2c_bus = PSU_CPLD_I2C_MAPPING[psu_index]["num"] + psu_i2c_addr = PSU_CPLD_I2C_MAPPING[psu_index]["addr"] + self.cpld_path = PSU_I2C_PATH.format(psu_i2c_bus, psu_i2c_addr) + # Add thermal name + self.THERMAL_NAME_LIST.append("Temp sensor 1") + self.THERMAL_NAME_LIST.append("Temp sensor 2") + self.THERMAL_NAME_LIST.append("Temp sensor 3") + self.PSU_THERMAL_NAME_LIST.append("PSU-1 temp sensor 1") + self.PSU_THERMAL_NAME_LIST.append("PSU-2 temp sensor 1") + + # Set hwmon path + i2c_path = { + 0: "14-0048/hwmon/hwmon*/", + 1: "24-004b/hwmon/hwmon*/", + 2: "25-004a/hwmon/hwmon*/" + }.get(self.index, None) + + self.hwmon_path = "{}/{}".format(self.SYSFS_PATH, i2c_path) + self.ss_key = self.THERMAL_NAME_LIST[self.index] + self.ss_index = 1 + + def __read_txt_file(self, file_path): + for filename in glob.glob(file_path): + try: + with open(filename, 'r') as fd: + data =fd.readline().rstrip() + return data + except IOError as e: + pass + + return None + + def __get_temp(self, temp_file): + if not self.is_psu: + temp_file_path = os.path.join(self.hwmon_path, temp_file) + else: + temp_file_path = temp_file + raw_temp = self.__read_txt_file(temp_file_path) + if raw_temp is not None: + return float(raw_temp)/1000 + else: + return 0 + + def __set_threshold(self, file_name, temperature): + if self.is_psu: + return True + temp_file_path = os.path.join(self.hwmon_path, file_name) + for filename in glob.glob(temp_file_path): + try: + with open(filename, 'w') as fd: + fd.write(str(temperature)) + return True + except IOError as e: + print("IOError") + + + def get_temperature(self): + """ + Retrieves current temperature reading from thermal + Returns: + A float number of current temperature in Celsius up to nearest thousandth + of one degree Celsius, e.g. 30.125 + """ + if not self.is_psu: + temp_file = "temp{}_input".format(self.ss_index) + else: + temp_file = self.psu_hwmon_path + "psu_temp1_input" + + return self.__get_temp(temp_file) + + def get_high_threshold(self): + """ + Retrieves the high threshold temperature of thermal + Returns: + A float number, the high threshold temperature of thermal in Celsius + up to nearest thousandth of one degree Celsius, e.g. 30.125 + """ + if self.is_psu: + return 0 + + temp_file = "temp{}_max".format(self.ss_index) + return self.__get_temp(temp_file) + + def set_high_threshold(self, temperature): + """ + Sets the high threshold temperature of thermal + Args : + temperature: A float number up to nearest thousandth of one degree Celsius, + e.g. 30.125 + Returns: + A boolean, True if threshold is set successfully, False if not + """ + temp_file = "temp{}_max".format(self.ss_index) + temperature = temperature *1000 + self.__set_threshold(temp_file, temperature) + + return True + + def get_name(self): + """ + Retrieves the name of the thermal device + Returns: + string: The name of the thermal device + """ + if self.is_psu: + return self.PSU_THERMAL_NAME_LIST[self.psu_index] + else: + return self.THERMAL_NAME_LIST[self.index] + + def get_presence(self): + """ + Retrieves the presence of the Thermal + Returns: + bool: True if Thermal is present, False if not + """ + if self.is_psu: + val = self.__read_txt_file(self.cpld_path + "psu_present") + return int(val, 10) == 1 + temp_file = "temp{}_input".format(self.ss_index) + temp_file_path = os.path.join(self.hwmon_path, temp_file) + raw_txt = self.__read_txt_file(temp_file_path) + if raw_txt is not None: + return True + else: + return False + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + if self.is_psu: + temp_file = self.psu_hwmon_path + "psu_temp_fault" + return self.get_presence() and (not int( + self.__read_txt_file(temp_file))) + + file_str = "temp{}_input".format(self.ss_index) + file_path = os.path.join(self.hwmon_path, file_str) + raw_txt = self.__read_txt_file(file_path) + if raw_txt is None: + return False + else: + return int(raw_txt) != 0 + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + + return "N/A" + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + return "N/A" + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return self.index+1 + + def is_replaceable(self): + """ + Retrieves whether thermal module is replaceable + Returns: + A boolean value, True if replaceable, False if not + """ + return False diff --git a/device/accton/x86_64-accton_as4630_54pe-r0/system_health_monitoring_config.json b/device/accton/x86_64-accton_as4630_54pe-r0/system_health_monitoring_config.json new file mode 100644 index 000000000000..61f624ee34c6 --- /dev/null +++ b/device/accton/x86_64-accton_as4630_54pe-r0/system_health_monitoring_config.json @@ -0,0 +1,17 @@ +{ + "services_to_ignore": [], + "devices_to_ignore": [ + "asic", + "psu.voltage", + "psu.temperature", + "PSU1_FAN1.speed", + "PSU2_FAN1.speed" + ], + "user_defined_checkers": [], + "polling_interval": 60, + "led_color": { + "fault": "STATUS_LED_COLOR_AMBER", + "normal": "STATUS_LED_COLOR_GREEN", + "booting": "STATUS_LED_COLOR_GREEN_BLINK" + } +} diff --git a/device/accton/x86_64-accton_as4630_54te-r0/sonic_platform/sfp.py b/device/accton/x86_64-accton_as4630_54te-r0/sonic_platform/sfp.py index 67df4aad49b8..4529c2f0ac88 100644 --- a/device/accton/x86_64-accton_as4630_54te-r0/sonic_platform/sfp.py +++ b/device/accton/x86_64-accton_as4630_54te-r0/sonic_platform/sfp.py @@ -74,6 +74,7 @@ QSFP_CHANNL_TX_FAULT_STATUS_WIDTH = 1 QSFP_POWEROVERRIDE_OFFSET = 93 QSFP_POWEROVERRIDE_WIDTH = 1 +QSFP_PAGE03_OFFSET = 384 QSFP_MODULE_THRESHOLD_OFFSET = 128 QSFP_MODULE_THRESHOLD_WIDTH = 24 QSFP_CHANNEL_THRESHOLD_OFFSET = 176 @@ -152,7 +153,8 @@ def __init__(self, sfp_index=0): self.port_to_eeprom_mapping[x] = eeprom_path.format(self._port_to_i2c_mapping[x]) self.info_dict_keys = ['type', 'vendor_rev', 'serial', 'manufacturer', 'model', 'connector', 'encoding', 'ext_identifier', - 'ext_rateselect_compliance', 'cable_type', 'cable_length', 'nominal_bit_rate', 'specification_compliance', 'vendor_date', 'vendor_oui'] + 'ext_rateselect_compliance', 'cable_type', 'cable_length', 'nominal_bit_rate', 'specification_compliance', 'vendor_date', 'vendor_oui', + 'application_advertisement', 'type_abbrv_name'] self.dom_dict_keys = ['rx_los', 'tx_fault', 'reset_status', 'power_lpmode', 'tx_disable', 'tx_disable_channel', 'temperature', 'voltage', 'rx1power', 'rx2power', 'rx3power', 'rx4power', 'tx1bias', 'tx2bias', 'tx3bias', 'tx4bias', 'tx1power', 'tx2power', 'tx3power', 'tx4power'] @@ -247,6 +249,7 @@ def get_transceiver_info(self): 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 ======================================================================== """ # check present status @@ -442,7 +445,7 @@ def get_transceiver_bulk_status(self): qsfp_dom_capability_raw = self.__read_eeprom_specific_bytes( (offset_xcvr + XCVR_DOM_CAPABILITY_OFFSET), XCVR_DOM_CAPABILITY_WIDTH) if qsfp_dom_capability_raw is not None: - qspf_dom_capability_data = sfpi_obj.parse_qsfp_dom_capability( + qspf_dom_capability_data = sfpi_obj.parse_dom_capability( qsfp_dom_capability_raw, 0) else: return None @@ -598,10 +601,11 @@ def get_transceiver_threshold_info(self): if not self.get_presence() or not sfpd_obj: return {} + offset = QSFP_PAGE03_OFFSET transceiver_dom_threshold_dict = dict.fromkeys( self.threshold_dict_keys, 'N/A') dom_thres_raw = self.__read_eeprom_specific_bytes( - QSFP_MODULE_THRESHOLD_OFFSET, QSFP_MODULE_THRESHOLD_WIDTH) if self.get_presence() and sfpd_obj else None + offset + QSFP_MODULE_THRESHOLD_OFFSET, QSFP_MODULE_THRESHOLD_WIDTH) if self.get_presence() and sfpd_obj else None if dom_thres_raw: module_threshold_values = sfpd_obj.parse_module_threshold_values( @@ -618,7 +622,7 @@ def get_transceiver_threshold_info(self): transceiver_dom_threshold_dict['vcclowwarning'] = module_threshold_data['VccLowWarning']['value'] dom_thres_raw = self.__read_eeprom_specific_bytes( - QSFP_CHANNEL_THRESHOLD_OFFSET, QSFP_CHANNEL_THRESHOLD_WIDTH) if self.get_presence() and sfpd_obj else None + offset + QSFP_CHANNEL_THRESHOLD_OFFSET, QSFP_CHANNEL_THRESHOLD_WIDTH) if self.get_presence() and sfpd_obj else None channel_threshold_values = sfpd_obj.parse_channel_threshold_values( dom_thres_raw, 0) channel_threshold_data = channel_threshold_values.get('data') @@ -648,11 +652,16 @@ def get_reset_status(self): Returns: A Boolean, True if reset enabled, False if disabled """ - if self.port_num < 49: #Copper port, no sysfs + if self.port_num < 53: # non-QSFP ports don't support it. return False - return False # CPLD port doesn't support this feature + reset_path="{}{}{}".format(CPLD_I2C_PATH , "module_reset_" , str(self.port_num)) + val = self._api_helper.read_txt_file(reset_path) + if val is not None: + return int(val, 10) == 1 + else: + return False def get_rx_los(self): """ @@ -827,7 +836,7 @@ def get_power_set(self): return False dom_control_raw = self.__read_eeprom_specific_bytes( - QSFP_POWEROVERRIDE_OFFSET, QSFP_CONTROL_WIDTH) if self.get_presence() else None + QSFP_CONTROL_OFFSET, QSFP_CONTROL_WIDTH) if self.get_presence() else None if dom_control_raw is not None: dom_control_data = sfpd_obj.parse_control_bytes(dom_control_raw, 0) power_set = ( @@ -852,7 +861,7 @@ def get_power_override(self): return False dom_control_raw = self.__read_eeprom_specific_bytes( - QSFP_POWEROVERRIDE_OFFSET, QSFP_CONTROL_WIDTH) if self.get_presence() else None + QSFP_CONTROL_OFFSET, QSFP_CONTROL_WIDTH) if self.get_presence() else None if dom_control_raw is not None: dom_control_data = sfpd_obj.parse_control_bytes(dom_control_raw, 0) power_override = ( @@ -939,23 +948,19 @@ def reset(self): A boolean, True if successful, False if not """ # Check for invalid port_num - if self.port_num < 49: #Copper port, no sysfs + if self.port_num < 53: # non-QSFP ports don't support it. return False - ''' reset_path = "{}{}{}".format(CPLD_I2C_PATH, 'module_reset_', self.port_num) - ret = self.__write_txt_file(reset_path, 1) + ret = self._api_helper.write_txt_file(reset_path, 1) if ret is not True: return ret - + time.sleep(0.01) - ret = self.__write_txt_file(reset_path, 0) + ret = self._api_helper.write_txt_file(reset_path, 0) time.sleep(0.2) - - return ret - ''' - return False #CPLD doens't support this feature + return ret def tx_disable(self, tx_disable): """ @@ -1167,3 +1172,20 @@ def get_status(self): A boolean value, True if device is operating properly, False if not """ return self.get_presence() and self.get_transceiver_bulk_status() + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return self.port_num + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True diff --git a/device/accton/x86_64-accton_as5835_54t-r0/pmon_daemon_control.json b/device/accton/x86_64-accton_as5835_54t-r0/pmon_daemon_control.json index 584a14b9d942..a3b204e20d8d 100644 --- a/device/accton/x86_64-accton_as5835_54t-r0/pmon_daemon_control.json +++ b/device/accton/x86_64-accton_as5835_54t-r0/pmon_daemon_control.json @@ -1,5 +1,5 @@ { "skip_ledd": true, - "skip_thermalctld": true + "skip_pcied": true } diff --git a/device/accton/x86_64-accton_as5835_54x-r0/installer.conf b/device/accton/x86_64-accton_as5835_54x-r0/installer.conf index 925a32fc0c3a..735fa7992dbc 100644 --- a/device/accton/x86_64-accton_as5835_54x-r0/installer.conf +++ b/device/accton/x86_64-accton_as5835_54x-r0/installer.conf @@ -1,3 +1,4 @@ CONSOLE_PORT=0x3f8 CONSOLE_DEV=0 CONSOLE_SPEED=115200 +ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="intel_iommu=off modprobe.blacklist=i2c-ismt,i2c_ismt,i2c-i801,i2c_i801" diff --git a/device/accton/x86_64-accton_as5835_54x-r0/plugins/sfputil.py b/device/accton/x86_64-accton_as5835_54x-r0/plugins/sfputil.py index b18b15f3e68c..0c815452a7a4 100644 --- a/device/accton/x86_64-accton_as5835_54x-r0/plugins/sfputil.py +++ b/device/accton/x86_64-accton_as5835_54x-r0/plugins/sfputil.py @@ -148,7 +148,7 @@ def get_cage_num(self, port_num): cage_num = port_num if (port_num >= self.QSFP_PORT_START): cage_num = (port_num - self.QSFP_PORT_START)/4 - cage_num = cage_num + self.QSFP_PORT_START + cage_num = int(cage_num + self.QSFP_PORT_START) return cage_num diff --git a/device/accton/x86_64-accton_as5835_54x-r0/pmon_daemon_control.json b/device/accton/x86_64-accton_as5835_54x-r0/pmon_daemon_control.json index 584a14b9d942..a3b204e20d8d 100644 --- a/device/accton/x86_64-accton_as5835_54x-r0/pmon_daemon_control.json +++ b/device/accton/x86_64-accton_as5835_54x-r0/pmon_daemon_control.json @@ -1,5 +1,5 @@ { "skip_ledd": true, - "skip_thermalctld": true + "skip_pcied": true } diff --git a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/__init__.py b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/__init__.py index 43435472a423..73a7720e8979 100644 --- a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/__init__.py +++ b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/__init__.py @@ -1,2 +1,2 @@ -__all__ = ['chassis', 'eeprom', 'platform', 'psu', 'sfp', 'thermal', 'fan'] +__all__ = [ "platform", "chassis", "sfp", "eeprom", "component", "psu", "thermal", "fan", "fan_drawer" ] from . import platform diff --git a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/chassis.py b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/chassis.py index 49805d6d7858..dce9f3c150cd 100644 --- a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/chassis.py +++ b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/chassis.py @@ -28,7 +28,14 @@ PMON_REBOOT_CAUSE_PATH = "/usr/share/sonic/platform/api_files/reboot-cause/" REBOOT_CAUSE_FILE = "reboot-cause.txt" PREV_REBOOT_CAUSE_FILE = "previous-reboot-cause.txt" -HOST_CHK_CMD = "docker > /dev/null 2>&1" +HOST_CHK_CMD = "which systemctl > /dev/null 2>&1" +SYSLED_FNODE= "/sys/class/leds/as5835_54x_led::diag/brightness" + +SYSLED_MODES = { + "0" : "STATUS_LED_COLOR_OFF", + "1" : "STATUS_LED_COLOR_GREEN", + "3" : "STATUS_LED_COLOR_AMBER" +} class Chassis(ChassisBase): @@ -37,7 +44,6 @@ class Chassis(ChassisBase): def __init__(self): ChassisBase.__init__(self) self._api_helper = APIHelper() - self._api_helper = APIHelper() self.is_host = self._api_helper.is_host() self.config_data = {} @@ -54,15 +60,16 @@ def __initialize_sfp(self): for index in range(0, PORT_END): sfp = Sfp(index) self._sfp_list.append(sfp) + self._sfpevent = SfpEvent(self._sfp_list) self.sfp_module_initialized = True def __initialize_fan(self): - from sonic_platform.fan import Fan - for fant_index in range(0, NUM_FAN_TRAY): - for fan_index in range(0, NUM_FAN): - fan = Fan(fant_index, fan_index) - self._fan_list.append(fan) - + from sonic_platform.fan_drawer import FanDrawer + for fant_index in range(NUM_FAN_TRAY): + fandrawer = FanDrawer(fant_index) + self._fan_drawer_list.append(fandrawer) + self._fan_list.extend(fandrawer._fan_list) + def __initialize_psu(self): from sonic_platform.psu import Psu for index in range(0, NUM_PSU): @@ -84,12 +91,12 @@ def __initialize_components(self): for index in range(0, NUM_COMPONENT): component = Component(index) self._component_list.append(component) - + def __initialize_watchdog(self): from sonic_platform.watchdog import Watchdog self._watchdog = Watchdog() - + def __is_host(self): return os.system(HOST_CHK_CMD) == 0 @@ -101,23 +108,14 @@ def __read_txt_file(self, file_path): except IOError: pass return None - - def get_model(self): - """ - Retrieves the model number (or part number) of the device - Returns: - string: Model/part number of device - """ - return self._eeprom.get_pn() - + def get_name(self): """ Retrieves the name of the device Returns: string: The name of the device """ - - return self._api_helper.hwsku + return self._eeprom.get_product_name() def get_presence(self): """ @@ -144,7 +142,15 @@ def get_base_mac(self): """ return self._eeprom.get_mac() - def get_serial_number(self): + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + return self._eeprom.get_pn() + + def get_serial(self): """ Retrieves the hardware serial number for the chassis Returns: @@ -173,7 +179,7 @@ def get_reboot_cause(self): is "REBOOT_CAUSE_HARDWARE_OTHER", the second string can be used to pass a description of the reboot cause. """ - + reboot_cause_path = (HOST_REBOOT_CAUSE_PATH + REBOOT_CAUSE_FILE) sw_reboot_cause = self._api_helper.read_txt_file( reboot_cause_path) or "Unknown" @@ -185,10 +191,7 @@ def get_change_event(self, timeout=0): # SFP event if not self.sfp_module_initialized: self.__initialize_sfp() - - status, sfp_event = SfpEvent(self._sfp_list).get_sfp_event(timeout) - - return status, sfp_event + return self._sfpevent.get_sfp_event(timeout) def get_sfp(self, index): """ @@ -212,3 +215,40 @@ def get_sfp(self, index): sys.stderr.write("SFP index {} out of range (1-{})\n".format( index, len(self._sfp_list))) return sfp + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return -1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return False + + + def initizalize_system_led(self): + return True + + def get_status_led(self): + val = self._api_helper.read_txt_file(SYSLED_FNODE) + return SYSLED_MODES[val] if val in SYSLED_MODES else "UNKNOWN" + + def set_status_led(self, color): + mode = None + for key, val in SYSLED_MODES.items(): + if val == color: + mode = key + break + if mode is None: + return False + else: + return self._api_helper.write_txt_file(SYSLED_FNODE, mode) + diff --git a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/component.py b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/component.py index deebd5936d0d..f3c9b3cee754 100644 --- a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/component.py +++ b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/component.py @@ -1,5 +1,5 @@ ############################################################################# -# Celestica +# Edgecore # # Component contains an implementation of SONiC Platform Base API and # provides the components firmware management function @@ -67,14 +67,14 @@ def __get_bios_version(self): with open(BIOS_VERSION_PATH, 'r') as fd: bios_version = fd.read() return bios_version.strip() - except Exception as e: + except Exception as e: print('Get exception when read bios') return None def __get_cpld_version(self): # Retrieves the CPLD firmware version cpld_version = dict() - for cpld_name in CPLD_ADDR_MAPPING: + for cpld_name in CPLD_ADDR_MAPPING: try: cpld_path = "{}{}{}".format(SYSFS_PATH, CPLD_ADDR_MAPPING[cpld_name], '/version') cpld_version_raw= self._api_helper.read_txt_file(cpld_path) @@ -126,3 +126,55 @@ def install_firmware(self, image_path): A boolean, True if install successfully, False if not """ raise NotImplementedError + + def get_presence(self): + """ + Retrieves the presence of the device + Returns: + bool: True if device is present, False if not + """ + return True + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + return 'N/A' + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + return 'N/A' + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + return True + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + If the agent cannot determine the parent-relative position + for some reason, or if the associated value of + entPhysicalContainedIn is'0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device + or -1 if cannot determine the position + """ + return -1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return False diff --git a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/eeprom.py b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/eeprom.py index f3bdcbccad3f..bc9041d56b53 100644 --- a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/eeprom.py +++ b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/eeprom.py @@ -20,7 +20,7 @@ class Tlv(eeprom_tlvinfo.TlvInfoDecoder): EEPROM_DECODE_HEADLINES = 6 def __init__(self): - self._eeprom_path = "/sys/bus/i2c/devices/0-0057/eeprom" + self._eeprom_path = "/sys/bus/i2c/devices/1-0057/eeprom" super(Tlv, self).__init__(self._eeprom_path, 0, '', True) self._eeprom = self._load_eeprom() @@ -123,9 +123,12 @@ def get_eeprom(self): def get_pn(self): return self._eeprom.get('0x22', NULL) - + def get_serial(self): return self._eeprom.get('0x23', NULL) def get_mac(self): return self._eeprom.get('0x24', NULL) + + def get_product_name(self): + return self._eeprom.get('0x21', NULL) diff --git a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/event.py b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/event.py index d77ee8c29dc5..7ce2598732e2 100644 --- a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/event.py +++ b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/event.py @@ -1,42 +1,49 @@ try: import time - from .helper import APIHelper from sonic_py_common.logger import Logger except ImportError as e: raise ImportError(repr(e) + " - required module not found") +POLL_INTERVAL_IN_SEC = 1 class SfpEvent: ''' Listen to insert/remove sfp events ''' def __init__(self, sfp_list): - self._api_helper = APIHelper() self._sfp_list = sfp_list self._logger = Logger() + self._sfp_change_event_data = {'present': 0} - sfp_change_event_data = {'valid': 0, 'last': 0, 'present': 0} - def get_sfp_event(self, timeout=2000): - now = time.time() - port_dict = {} - change_dict = {} - change_dict['sfp'] = port_dict - - if timeout < 1000: - timeout = 1000 - timeout = timeout / float(1000) # Convert to secs - - if now < (self.sfp_change_event_data['last'] + timeout) and self.sfp_change_event_data['valid']: - return True, change_dict - + def get_presence_bitmap(self): bitmap = 0 for sfp in self._sfp_list: modpres = sfp.get_presence() i=sfp.port_num-1 if modpres: bitmap = bitmap | (1 << i) + return bitmap - changed_ports = self.sfp_change_event_data['present'] ^ bitmap - if changed_ports: + def get_sfp_event(self, timeout=2000): + port_dict = {} + change_dict = {} + change_dict['sfp'] = port_dict + + if timeout < 1000: + cd_ms = 1000 + else: + cd_ms = timeout + + while cd_ms > 0: + bitmap = self.get_presence_bitmap() + changed_ports = self._sfp_change_event_data['present'] ^ bitmap + if changed_ports != 0: + break + time.sleep(POLL_INTERVAL_IN_SEC) + # timeout=0 means wait for event forever + if timeout != 0: + cd_ms = cd_ms - POLL_INTERVAL_IN_SEC * 1000 + + if changed_ports != 0: for sfp in self._sfp_list: i=sfp.port_num-1 if (changed_ports & (1 << i)): @@ -47,9 +54,7 @@ def get_sfp_event(self, timeout=2000): # Update the cache dict - self.sfp_change_event_data['present'] = bitmap - self.sfp_change_event_data['last'] = now - self.sfp_change_event_data['valid'] = 1 + self._sfp_change_event_data['present'] = bitmap return True, change_dict else: return True, change_dict diff --git a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/fan.py b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/fan.py index cf698bf6d014..8cb1c17fdf72 100644 --- a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/fan.py +++ b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/fan.py @@ -15,9 +15,10 @@ raise ImportError(str(e) + "- required module not found") PSU_FAN_MAX_RPM = 26688 -CPLD_I2C_PATH = "/sys/bus/i2c/devices/3-0063/fan" -PSU_HWMON_I2C_PATH ="/sys/bus/i2c/devices/{}-00{}/" -PSU_I2C_MAPPING = { +SPEED_TOLERANCE = 15 +CPLD_FAN_I2C_PATH = "/sys/bus/i2c/devices/3-0063/fan" +I2C_PATH ="/sys/bus/i2c/devices/{}-00{}/" +PSU_HWMON_I2C_MAPPING = { 0: { "num": 11, "addr": "58" @@ -28,6 +29,20 @@ }, } + +PSU_CPLD_I2C_MAPPING = { + 0: { + "num": 11, + "addr": "50" + }, + 1: { + "num": 12, + "addr": "53" + }, +} + + + FAN_NAME_LIST = ["FAN-1F", "FAN-1R", "FAN-2F", "FAN-2R", "FAN-3F", "FAN-3R", "FAN-4F", "FAN-4R", "FAN-5F", "FAN-5R"] @@ -42,13 +57,18 @@ def __init__(self, fan_tray_index, fan_index=0, is_psu_fan=False, psu_index=0): self.is_psu_fan = is_psu_fan if self.is_psu_fan: self.psu_index = psu_index - self.psu_i2c_num = PSU_I2C_MAPPING[self.psu_index]['num'] - self.psu_i2c_addr = PSU_I2C_MAPPING[self.psu_index]['addr'] - self.psu_hwmon_path = PSU_HWMON_I2C_PATH.format( + self.psu_i2c_num = PSU_HWMON_I2C_MAPPING[self.psu_index]['num'] + self.psu_i2c_addr = PSU_HWMON_I2C_MAPPING[self.psu_index]['addr'] + self.psu_hwmon_path = I2C_PATH.format( self.psu_i2c_num, self.psu_i2c_addr) + self.psu_i2c_num = PSU_CPLD_I2C_MAPPING[self.psu_index]['num'] + self.psu_i2c_addr = PSU_CPLD_I2C_MAPPING[self.psu_index]['addr'] + self.psu_cpld_path = I2C_PATH.format( + self.psu_i2c_num, self.psu_i2c_addr) + FanBase.__init__(self) - + def get_direction(self): """ @@ -60,9 +80,9 @@ def get_direction(self): if not self.is_psu_fan: - dir_str = "{}{}{}".format(CPLD_I2C_PATH, self.fan_tray_index+1, '_direction') + dir_str = "{}{}{}".format(CPLD_FAN_I2C_PATH, self.fan_tray_index+1, '_direction') val=self._api_helper.read_txt_file(dir_str) - if val is not None: + if val is not None: if int(val, 10)==0: direction=self.FAN_DIRECTION_EXHAUST else: @@ -90,26 +110,26 @@ def get_speed(self): Returns: An integer, the percentage of full fan speed, in the range 0 (off) to 100 (full speed) - + """ speed = 0 if self.is_psu_fan: psu_fan_path= "{}{}".format(self.psu_hwmon_path, 'psu_fan1_speed_rpm') fan_speed_rpm = self._api_helper.read_txt_file(psu_fan_path) if fan_speed_rpm is not None: - speed = (int(fan_speed_rpm,10))*100/26688 + speed = (int(fan_speed_rpm,10))*100/26688 if speed > 100: speed=100 else: return 0 elif self.get_presence(): - speed_path = "{}{}".format(CPLD_I2C_PATH, '_duty_cycle_percentage') + speed_path = "{}{}".format(CPLD_FAN_I2C_PATH, '_duty_cycle_percentage') speed=self._api_helper.read_txt_file(speed_path) if speed is None: return 0 return int(speed) - + def get_target_speed(self): """ Retrieves the target (expected) speed of the fan @@ -123,7 +143,7 @@ def get_target_speed(self): 0 : when PWM mode is use pwm : when pwm mode is not use """ - return False #Not supported + return self.get_speed() def get_speed_tolerance(self): """ @@ -132,7 +152,7 @@ def get_speed_tolerance(self): An integer, the percentage of variance from target speed which is considered tolerable """ - return False #Not supported + return SPEED_TOLERANCE def set_speed(self, speed): """ @@ -146,7 +166,7 @@ def set_speed(self, speed): """ if not self.is_psu_fan and self.get_presence(): - speed_path = "{}{}".format(CPLD_I2C_PATH, '_duty_cycle_percentage') + speed_path = "{}{}".format(CPLD_FAN_I2C_PATH, '_duty_cycle_percentage') return self._api_helper.write_txt_file(speed_path, int(speed)) return False @@ -195,17 +215,18 @@ def get_presence(self): Returns: bool: True if FAN is present, False if not """ - present_path = "{}{}{}".format(CPLD_I2C_PATH, self.fan_tray_index+1, '_present') + + + if self.is_psu_fan: + present_path="{}{}".format(self.psu_cpld_path, 'psu_present') + else: + present_path = "{}{}{}".format(CPLD_FAN_I2C_PATH, self.fan_tray_index+1, '_present') + val=self._api_helper.read_txt_file(present_path) - - if not self.is_psu_fan: - if val is not None: - return int(val, 10)==1 - else: - return False - + if val is not None: + return int(val, 10)==1 else: - return True + return False def get_status(self): """ @@ -221,7 +242,7 @@ def get_status(self): else: return False else: - path = "{}{}{}".format(CPLD_I2C_PATH, self.fan_index+1, '_fault') + path = "{}{}{}".format(CPLD_FAN_I2C_PATH, self.fan_tray_index+1, '_fault') val=self._api_helper.read_txt_file(path) if val is not None: return int(val, 10)==0 @@ -245,3 +266,25 @@ def get_serial(self): string: Serial number of device """ return "N/A" + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + If the agent cannot determine the parent-relative position + for some reason, or if the associated value of + entPhysicalContainedIn is'0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device + or -1 if cannot determine the position + """ + return (self.fan_index+1) \ + if not self.is_psu_fan else (self.psu_index+1) + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True if not self.is_psu_fan else False + diff --git a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/fan_drawer.py b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/fan_drawer.py new file mode 100644 index 000000000000..17d339ee55f6 --- /dev/null +++ b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/fan_drawer.py @@ -0,0 +1,90 @@ +######################################################################## +# +# Module contains an implementation of SONiC Platform Base API and +# provides the Fan-Drawers' information available in the platform. +# +######################################################################## + +try: + from sonic_platform_base.fan_drawer_base import FanDrawerBase +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +FANS_PER_FANTRAY = 2 + + +class FanDrawer(FanDrawerBase): + """Platform-specific Fan class""" + + def __init__(self, fantray_index): + + FanDrawerBase.__init__(self) + # FanTray is 0-based in platforms + self.fantrayindex = fantray_index + self.__initialize_fan_drawer() + + + def __initialize_fan_drawer(self): + from sonic_platform.fan import Fan + for i in range(FANS_PER_FANTRAY): + self._fan_list.append(Fan(self.fantrayindex, i)) + + def get_name(self): + """ + Retrieves the fan drawer name + Returns: + string: The name of the device + """ + return "FanTray{}".format(self.fantrayindex+1) + + def get_presence(self): + """ + Retrieves the presence of the device + Returns: + bool: True if device is present, False if not + """ + return self._fan_list[0].get_presence() + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + return self._fan_list[0].get_model() + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + return self._fan_list[0].get_serial() + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + return self._fan_list[0].get_status() + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + If the agent cannot determine the parent-relative position + for some reason, or if the associated value of + entPhysicalContainedIn is'0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device + or -1 if cannot determine the position + """ + return (self.fantrayindex+1) + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True diff --git a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/helper.py b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/helper.py index 4cd60ac90611..b124ca29f0df 100644 --- a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/helper.py +++ b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/helper.py @@ -51,7 +51,7 @@ def run_interactive_command(self, cmd): def read_txt_file(self, file_path): try: - with open(file_path, 'r') as fd: + with open(file_path, 'r', errors='replace') as fd: data = fd.read() return data.strip() except IOError: diff --git a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/psu.py b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/psu.py index dd6058920667..c2baa2ebf26a 100644 --- a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/psu.py +++ b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/psu.py @@ -10,7 +10,7 @@ try: from sonic_platform_base.psu_base import PsuBase - #from sonic_platform.fan import Fan + from sonic_platform.thermal import Thermal from .helper import APIHelper except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -64,6 +64,8 @@ def __initialize_fan(self): for fan_index in range(0, PSU_NUM_FAN[self.index]): fan = Fan(fan_index, 0, is_psu_fan=True, psu_index=self.index) self._fan_list.append(fan) + + self._thermal_list.append(Thermal(is_psu=True, psu_index=self.index)) def get_voltage(self): """ @@ -154,7 +156,7 @@ def get_temperature(self): return float(val)/1000 else: return 0 - + def get_temperature_high_threshold(self): """ Retrieves the high threshold temperature of PSU @@ -251,3 +253,20 @@ def get_serial(self): if serial is None: return "N/A" return serial + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return self.index+1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True diff --git a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/sfp.py b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/sfp.py index f8f87532f085..ec16e80568f4 100644 --- a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/sfp.py +++ b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/sfp.py @@ -13,108 +13,14 @@ from ctypes import create_string_buffer try: - from sonic_platform_base.sfp_base import SfpBase - from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom - from sonic_platform_base.sonic_sfp.sff8436 import sff8436InterfaceId - from sonic_platform_base.sonic_sfp.sff8472 import sff8472Dom - from sonic_platform_base.sonic_sfp.sff8472 import sff8472InterfaceId - #from sonic_platform_base.sonic_sfp.sff8472 import sffbase - from sonic_platform_base.sonic_sfp.sfputilhelper import SfpUtilHelper + from sonic_platform_base.sonic_xcvr.sfp_optoe_base import SfpOptoeBase from .helper import APIHelper except ImportError as e: raise ImportError(str(e) + "- required module not found") CPLD_I2C_PATH = "/sys/bus/i2c/devices/" -QSFP_INFO_OFFSET = 128 -QSFP_DOM_OFFSET = 0 - -SFP_INFO_OFFSET = 0 -SFP_DOM_OFFSET = 256 - -XCVR_INTFACE_BULK_OFFSET = 0 -XCVR_INTFACE_BULK_WIDTH_QSFP = 20 -XCVR_INTFACE_BULK_WIDTH_SFP = 21 -XCVR_HW_REV_WIDTH_QSFP = 2 -XCVR_HW_REV_WIDTH_SFP = 4 -XCVR_CABLE_LENGTH_WIDTH_QSFP = 5 -XCVR_VENDOR_NAME_OFFSET = 20 -XCVR_VENDOR_NAME_WIDTH = 16 -XCVR_VENDOR_OUI_OFFSET = 37 -XCVR_VENDOR_OUI_WIDTH = 3 -XCVR_VENDOR_PN_OFFSET = 40 -XCVR_VENDOR_PN_WIDTH = 16 -XCVR_HW_REV_OFFSET = 56 -XCVR_HW_REV_WIDTH_OSFP = 2 -XCVR_HW_REV_WIDTH_SFP = 4 -XCVR_VENDOR_SN_OFFSET = 68 -XCVR_VENDOR_SN_WIDTH = 16 -XCVR_VENDOR_DATE_OFFSET = 84 -XCVR_VENDOR_DATE_WIDTH = 8 -XCVR_DOM_CAPABILITY_OFFSET = 92 -XCVR_DOM_CAPABILITY_WIDTH = 1 - -# Offset for values in QSFP eeprom -QSFP_DOM_REV_OFFSET = 1 -QSFP_DOM_REV_WIDTH = 1 -QSFP_TEMPE_OFFSET = 22 -QSFP_TEMPE_WIDTH = 2 -QSFP_VOLT_OFFSET = 26 -QSFP_VOLT_WIDTH = 2 -QSFP_CHANNL_MON_OFFSET = 34 -QSFP_CHANNL_MON_WIDTH = 16 -QSFP_CHANNL_MON_WITH_TX_POWER_WIDTH = 24 -QSFP_CONTROL_OFFSET = 86 -QSFP_CONTROL_WIDTH = 8 -QSFP_CHANNL_RX_LOS_STATUS_OFFSET = 3 -QSFP_CHANNL_RX_LOS_STATUS_WIDTH = 1 -QSFP_CHANNL_TX_FAULT_STATUS_OFFSET = 4 -QSFP_CHANNL_TX_FAULT_STATUS_WIDTH = 1 -QSFP_POWEROVERRIDE_OFFSET = 93 -QSFP_POWEROVERRIDE_WIDTH = 1 -QSFP_MODULE_THRESHOLD_OFFSET = 128 -QSFP_MODULE_THRESHOLD_WIDTH = 24 -QSFP_CHANNEL_THRESHOLD_OFFSET = 176 -QSFP_CHANNEL_THRESHOLD_WIDTH = 16 - -qsfp_cable_length_tup = ('Length(km)', 'Length OM3(2m)', - 'Length OM2(m)', 'Length OM1(m)', - 'Length Cable Assembly(m)') - -qsfp_compliance_code_tup = ('10/40G Ethernet Compliance Code', 'SONET Compliance codes', - 'SAS/SATA compliance codes', 'Gigabit Ethernet Compliant codes', - 'Fibre Channel link length/Transmitter Technology', - 'Fibre Channel transmission media', 'Fibre Channel Speed') - - -# Offset for values in SFP eeprom -SFP_TEMPE_OFFSET = 96 -SFP_TEMPE_WIDTH = 2 -SFP_VOLT_OFFSET = 98 -SFP_VOLT_WIDTH = 2 -SFP_CHANNL_MON_OFFSET = 100 -SFP_CHANNL_MON_WIDTH = 6 -SFP_MODULE_THRESHOLD_OFFSET = 0 -SFP_MODULE_THRESHOLD_WIDTH = 40 -SFP_CHANNL_THRESHOLD_OFFSET = 112 -SFP_CHANNL_THRESHOLD_WIDTH = 2 -SFP_STATUS_CONTROL_OFFSET = 110 -SFP_STATUS_CONTROL_WIDTH = 1 -SFP_TX_DISABLE_HARD_BIT = 7 -SFP_TX_DISABLE_SOFT_BIT = 6 - -sfp_cable_length_tup = ('LengthSMFkm-UnitsOfKm', 'LengthSMF(UnitsOf100m)', - 'Length50um(UnitsOf10m)', 'Length62.5um(UnitsOfm)', - 'LengthCable(UnitsOfm)', 'LengthOM3(UnitsOf10m)') - -sfp_compliance_code_tup = ('10GEthernetComplianceCode', 'InfinibandComplianceCode', - 'ESCONComplianceCodes', 'SONETComplianceCodes', - 'EthernetComplianceCodes', 'FibreChannelLinkLength', - 'FibreChannelTechnology', 'SFP+CableTechnology', - 'FibreChannelTransmissionMedia', 'FibreChannelSpeed') - - -class Sfp(SfpBase): +class Sfp(SfpOptoeBase): """Platform-specific Sfp class""" # Port number @@ -125,7 +31,7 @@ class Sfp(SfpBase): # Path to sysfs PLATFORM_ROOT_PATH = "/usr/share/sonic/device" PMON_HWSKU_PATH = "/usr/share/sonic/hwsku" - HOST_CHK_CMD = "docker > /dev/null 2>&1" + HOST_CHK_CMD = "which systemctl > /dev/null 2>&1" PLATFORM = "x86_64-accton_as5835_54x-r0" HWSKU = "Accton-AS5835-54X" @@ -194,6 +100,7 @@ class Sfp(SfpBase): } def __init__(self, sfp_index=0): + SfpOptoeBase.__init__(self) self._api_helper=APIHelper() # Init index self.index = sfp_index @@ -204,44 +111,15 @@ def __init__(self, sfp_index=0): self.port_to_eeprom_mapping = {} for x in range(self.PORT_START, self.PORT_END + 1): self.port_to_eeprom_mapping[x] = eeprom_path.format(self._port_to_i2c_mapping[x]) - - self.info_dict_keys = ['type', 'vendor_rev', 'serial', 'manufacturer', 'model', 'connector', 'encoding', 'ext_identifier', - 'ext_rateselect_compliance', 'cable_type', 'cable_length', 'nominal_bit_rate', 'specification_compliance', 'vendor_date', 'vendor_oui', - 'application_advertisement', 'type_abbrv_name'] - - self.dom_dict_keys = ['rx_los', 'tx_fault', 'reset_status', 'power_lpmode', 'tx_disable', 'tx_disable_channel', 'temperature', 'voltage', - 'rx1power', 'rx2power', 'rx3power', 'rx4power', 'tx1bias', 'tx2bias', 'tx3bias', 'tx4bias', 'tx1power', 'tx2power', 'tx3power', 'tx4power'] - - self.threshold_dict_keys = ['temphighalarm', 'temphighwarning', 'templowalarm', 'templowwarning', 'vcchighalarm', 'vcchighwarning', 'vcclowalarm', 'vcclowwarning', 'rxpowerhighalarm', 'rxpowerhighwarning', - 'rxpowerlowalarm', 'rxpowerlowwarning', 'txpowerhighalarm', 'txpowerhighwarning', 'txpowerlowalarm', 'txpowerlowwarning', 'txbiashighalarm', 'txbiashighwarning', 'txbiaslowalarm', 'txbiaslowwarning'] - SfpBase.__init__(self) - + def get_eeprom_path(self): + return self.port_to_eeprom_mapping[self.port_num] + # For cage 1~38 are at cpld2, others are at cpld3. def __get_cpld_num(self, port_num): return 1 if (port_num < 39) else 2 - def _convert_string_to_num(self, value_str): - if "-inf" in value_str: - return 'N/A' - elif "Unknown" in value_str: - return 'N/A' - elif 'dBm' in value_str: - t_str = value_str.rstrip('dBm') - return float(t_str) - elif 'mA' in value_str: - t_str = value_str.rstrip('mA') - return float(t_str) - elif 'C' in value_str: - t_str = value_str.rstrip('C') - return float(t_str) - elif 'Volts' in value_str: - t_str = value_str.rstrip('Volts') - return float(t_str) - else: - return 'N/A' - def __is_host(self): return os.system(self.HOST_CHK_CMD) == 0 @@ -277,422 +155,6 @@ def __read_eeprom_specific_bytes(self, offset, num_bytes): return eeprom_raw - def get_transceiver_info(self): - """ - Retrieves transceiver info of this SFP - 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 - nominal_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 - ======================================================================== - """ - # check present status - if self.port_num < 49: - sfpi_obj = sff8472InterfaceId() #SFP - else: - sfpi_obj = sff8436InterfaceId() #QSFP - if not self.get_presence() or not sfpi_obj: - return {} - - if self.port_num < 49: - offset = SFP_INFO_OFFSET - sfp_interface_bulk_raw = self.__read_eeprom_specific_bytes( - (offset + XCVR_INTFACE_BULK_OFFSET), XCVR_INTFACE_BULK_WIDTH_SFP) - else: - offset = QSFP_INFO_OFFSET - sfp_interface_bulk_raw = self.__read_eeprom_specific_bytes( - (offset + XCVR_INTFACE_BULK_OFFSET), XCVR_INTFACE_BULK_WIDTH_QSFP) - - sfp_interface_bulk_data = sfpi_obj.parse_sfp_info_bulk( - sfp_interface_bulk_raw, 0) - - sfp_vendor_name_raw = self.__read_eeprom_specific_bytes( - (offset + XCVR_VENDOR_NAME_OFFSET), XCVR_VENDOR_NAME_WIDTH) - sfp_vendor_name_data = sfpi_obj.parse_vendor_name( - sfp_vendor_name_raw, 0) - - sfp_vendor_pn_raw = self.__read_eeprom_specific_bytes( - (offset + XCVR_VENDOR_PN_OFFSET), XCVR_VENDOR_PN_WIDTH) - sfp_vendor_pn_data = sfpi_obj.parse_vendor_pn( - sfp_vendor_pn_raw, 0) - - if self.port_num < 49: - sfp_vendor_rev_raw = self.__read_eeprom_specific_bytes( - (offset + XCVR_HW_REV_OFFSET), XCVR_HW_REV_WIDTH_SFP) - else: - sfp_vendor_rev_raw = self.__read_eeprom_specific_bytes( - (offset + XCVR_HW_REV_OFFSET), XCVR_HW_REV_WIDTH_QSFP) - - sfp_vendor_rev_data = sfpi_obj.parse_vendor_rev( - sfp_vendor_rev_raw, 0) - - sfp_vendor_sn_raw = self.__read_eeprom_specific_bytes( - (offset + XCVR_VENDOR_SN_OFFSET), XCVR_VENDOR_SN_WIDTH) - sfp_vendor_sn_data = sfpi_obj.parse_vendor_sn( - sfp_vendor_sn_raw, 0) - - sfp_vendor_oui_raw = self.__read_eeprom_specific_bytes( - (offset + XCVR_VENDOR_OUI_OFFSET), XCVR_VENDOR_OUI_WIDTH) - if sfp_vendor_oui_raw is not None: - sfp_vendor_oui_data = sfpi_obj.parse_vendor_oui( - sfp_vendor_oui_raw, 0) - - sfp_vendor_date_raw = self.__read_eeprom_specific_bytes( - (offset + XCVR_VENDOR_DATE_OFFSET), XCVR_VENDOR_DATE_WIDTH) - sfp_vendor_date_data = sfpi_obj.parse_vendor_date( - sfp_vendor_date_raw, 0) - - transceiver_info_dict = dict.fromkeys(self.info_dict_keys, 'N/A') - compliance_code_dict = dict() - - if sfp_interface_bulk_data: - transceiver_info_dict['type'] = sfp_interface_bulk_data['data']['type']['value'] - transceiver_info_dict['connector'] = sfp_interface_bulk_data['data']['Connector']['value'] - transceiver_info_dict['encoding'] = sfp_interface_bulk_data['data']['EncodingCodes']['value'] - transceiver_info_dict['ext_identifier'] = sfp_interface_bulk_data['data']['Extended Identifier']['value'] - transceiver_info_dict['ext_rateselect_compliance'] = sfp_interface_bulk_data['data']['RateIdentifier']['value'] - transceiver_info_dict['type_abbrv_name'] = sfp_interface_bulk_data['data']['type_abbrv_name']['value'] - - transceiver_info_dict['manufacturer'] = sfp_vendor_name_data[ - 'data']['Vendor Name']['value'] if sfp_vendor_name_data else 'N/A' - transceiver_info_dict['model'] = sfp_vendor_pn_data['data']['Vendor PN']['value'] if sfp_vendor_pn_data else 'N/A' - transceiver_info_dict['vendor_rev'] = sfp_vendor_rev_data['data']['Vendor Rev']['value'] if sfp_vendor_rev_data else 'N/A' - transceiver_info_dict['serial'] = sfp_vendor_sn_data['data']['Vendor SN']['value'] if sfp_vendor_sn_data else 'N/A' - transceiver_info_dict['vendor_oui'] = sfp_vendor_oui_data['data']['Vendor OUI']['value'] if sfp_vendor_oui_data else 'N/A' - transceiver_info_dict['vendor_date'] = sfp_vendor_date_data[ - 'data']['VendorDataCode(YYYY-MM-DD Lot)']['value'] if sfp_vendor_date_data else 'N/A' - transceiver_info_dict['cable_type'] = "Unknown" - transceiver_info_dict['cable_length'] = "Unknown" - - if self.port_num < 49: - for key in sfp_cable_length_tup: - if key in sfp_interface_bulk_data['data']: - transceiver_info_dict['cable_type'] = key - transceiver_info_dict['cable_length'] = str( - sfp_interface_bulk_data['data'][key]['value']) - - for key in sfp_compliance_code_tup: - if key in sfp_interface_bulk_data['data']['Specification compliance']['value']: - compliance_code_dict[key] = sfp_interface_bulk_data['data']['Specification compliance']['value'][key]['value'] - - transceiver_info_dict['specification_compliance'] = str( - compliance_code_dict) - transceiver_info_dict['nominal_bit_rate'] = str( - sfp_interface_bulk_data['data']['NominalSignallingRate(UnitsOf100Mbd)']['value']) - else: - for key in qsfp_cable_length_tup: - if key in sfp_interface_bulk_data['data']: - transceiver_info_dict['cable_type'] = key - transceiver_info_dict['cable_length'] = str( - sfp_interface_bulk_data['data'][key]['value']) - - for key in qsfp_compliance_code_tup: - if key in sfp_interface_bulk_data['data']['Specification compliance']['value']: - compliance_code_dict[key] = sfp_interface_bulk_data['data']['Specification compliance']['value'][key]['value'] - - transceiver_info_dict['specification_compliance'] = str( - compliance_code_dict) - transceiver_info_dict['nominal_bit_rate'] = str( - sfp_interface_bulk_data['data']['Nominal Bit Rate(100Mbs)']['value']) - - - return transceiver_info_dict - - 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 loss-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 channels in hex, bits 0 to 3 represent channel 0 - | |to channel 3. - temperature |INT |module temperature in Celsius - voltage |INT |supply voltage in mV - txbias |INT |TX Bias Current in mA, n is the channel number, - | |for example, tx2bias stands for tx bias of channel 2. - rxpower |INT |received optical power in mW, n is the channel number, - | |for example, rx2power stands for rx power of channel 2. - txpower |INT |TX output power in mW, n is the channel number, - | |for example, tx2power stands for tx power of channel 2. - ======================================================================== - """ - # check present status - if self.port_num < 49: #SFP case - sfpd_obj = sff8472Dom() - if not self.get_presence() or not sfpd_obj: - return {} - - eeprom_ifraw = self.__read_eeprom_specific_bytes(0, SFP_DOM_OFFSET) - sfpi_obj = sff8472InterfaceId(eeprom_ifraw) - cal_type = sfpi_obj.get_calibration_type() - sfpd_obj._calibration_type = cal_type - - offset = SFP_DOM_OFFSET - transceiver_dom_info_dict = dict.fromkeys(self.dom_dict_keys, 'N/A') - dom_temperature_raw = self.__read_eeprom_specific_bytes( - (offset + SFP_TEMPE_OFFSET), SFP_TEMPE_WIDTH) - - if dom_temperature_raw is not None: - dom_temperature_data = sfpd_obj.parse_temperature( - dom_temperature_raw, 0) - transceiver_dom_info_dict['temperature'] = dom_temperature_data['data']['Temperature']['value'] - - dom_voltage_raw = self.__read_eeprom_specific_bytes( - (offset + SFP_VOLT_OFFSET), SFP_VOLT_WIDTH) - if dom_voltage_raw is not None: - dom_voltage_data = sfpd_obj.parse_voltage(dom_voltage_raw, 0) - transceiver_dom_info_dict['voltage'] = dom_voltage_data['data']['Vcc']['value'] - - dom_channel_monitor_raw = self.__read_eeprom_specific_bytes( - (offset + SFP_CHANNL_MON_OFFSET), SFP_CHANNL_MON_WIDTH) - if dom_channel_monitor_raw is not None: - dom_voltage_data = sfpd_obj.parse_channel_monitor_params( - dom_channel_monitor_raw, 0) - transceiver_dom_info_dict['tx1power'] = dom_voltage_data['data']['TXPower']['value'] - transceiver_dom_info_dict['rx1power'] = dom_voltage_data['data']['RXPower']['value'] - transceiver_dom_info_dict['tx1bias'] = dom_voltage_data['data']['TXBias']['value'] - - else: #QSFP case - sfpd_obj = sff8436Dom() - sfpi_obj = sff8436InterfaceId() - - if not self.get_presence() or not sfpi_obj or not sfpd_obj: - return {} - - transceiver_dom_info_dict = dict.fromkeys(self.dom_dict_keys, 'N/A') - offset = QSFP_DOM_OFFSET - offset_xcvr = QSFP_INFO_OFFSET - - # QSFP capability byte parse, through this byte can know whether it support tx_power or not. - # TODO: in the future when decided to migrate to support SFF-8636 instead of SFF-8436, - # need to add more code for determining the capability and version compliance - # in SFF-8636 dom capability definitions evolving with the versions. - qsfp_dom_capability_raw = self.__read_eeprom_specific_bytes( - (offset_xcvr + XCVR_DOM_CAPABILITY_OFFSET), XCVR_DOM_CAPABILITY_WIDTH) - if qsfp_dom_capability_raw is not None: - qspf_dom_capability_data = sfpi_obj.parse_dom_capability( - qsfp_dom_capability_raw, 0) - else: - return None - - dom_temperature_raw = self.__read_eeprom_specific_bytes( - (offset + QSFP_TEMPE_OFFSET), QSFP_TEMPE_WIDTH) - if dom_temperature_raw is not None: - dom_temperature_data = sfpd_obj.parse_temperature( - dom_temperature_raw, 0) - transceiver_dom_info_dict['temperature'] = dom_temperature_data['data']['Temperature']['value'] - - dom_voltage_raw = self.__read_eeprom_specific_bytes( - (offset + QSFP_VOLT_OFFSET), QSFP_VOLT_WIDTH) - if dom_voltage_raw is not None: - dom_voltage_data = sfpd_obj.parse_voltage(dom_voltage_raw, 0) - transceiver_dom_info_dict['voltage'] = dom_voltage_data['data']['Vcc']['value'] - - qsfp_dom_rev_raw = self.__read_eeprom_specific_bytes( - (offset + QSFP_DOM_REV_OFFSET), QSFP_DOM_REV_WIDTH) - if qsfp_dom_rev_raw is not None: - qsfp_dom_rev_data = sfpd_obj.parse_sfp_dom_rev(qsfp_dom_rev_raw, 0) - qsfp_dom_rev = qsfp_dom_rev_data['data']['dom_rev']['value'] - - # The tx_power monitoring is only available on QSFP which compliant with SFF-8636 - # and claimed that it support tx_power with one indicator bit. - dom_channel_monitor_data = {} - dom_channel_monitor_raw = None - qsfp_tx_power_support = qspf_dom_capability_data['data']['Tx_power_support']['value'] - if (qsfp_dom_rev[0:8] != 'SFF-8636' or (qsfp_dom_rev[0:8] == 'SFF-8636' and qsfp_tx_power_support != 'on')): - dom_channel_monitor_raw = self.__read_eeprom_specific_bytes( - (offset + QSFP_CHANNL_MON_OFFSET), QSFP_CHANNL_MON_WIDTH) - if dom_channel_monitor_raw is not None: - dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params( - dom_channel_monitor_raw, 0) - - else: - dom_channel_monitor_raw = self.__read_eeprom_specific_bytes( - (offset + QSFP_CHANNL_MON_OFFSET), QSFP_CHANNL_MON_WITH_TX_POWER_WIDTH) - if dom_channel_monitor_raw is not None: - dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params_with_tx_power( - dom_channel_monitor_raw, 0) - transceiver_dom_info_dict['tx1power'] = dom_channel_monitor_data['data']['TX1Power']['value'] - transceiver_dom_info_dict['tx2power'] = dom_channel_monitor_data['data']['TX2Power']['value'] - transceiver_dom_info_dict['tx3power'] = dom_channel_monitor_data['data']['TX3Power']['value'] - transceiver_dom_info_dict['tx4power'] = dom_channel_monitor_data['data']['TX4Power']['value'] - - if dom_channel_monitor_raw: - transceiver_dom_info_dict['rx1power'] = dom_channel_monitor_data['data']['RX1Power']['value'] - transceiver_dom_info_dict['rx2power'] = dom_channel_monitor_data['data']['RX2Power']['value'] - transceiver_dom_info_dict['rx3power'] = dom_channel_monitor_data['data']['RX3Power']['value'] - transceiver_dom_info_dict['rx4power'] = dom_channel_monitor_data['data']['RX4Power']['value'] - transceiver_dom_info_dict['tx1bias'] = dom_channel_monitor_data['data']['TX1Bias']['value'] - transceiver_dom_info_dict['tx2bias'] = dom_channel_monitor_data['data']['TX2Bias']['value'] - transceiver_dom_info_dict['tx3bias'] = dom_channel_monitor_data['data']['TX3Bias']['value'] - transceiver_dom_info_dict['tx4bias'] = dom_channel_monitor_data['data']['TX4Bias']['value'] - #End of else - - - for key in transceiver_dom_info_dict: - transceiver_dom_info_dict[key] = self._convert_string_to_num( - transceiver_dom_info_dict[key]) - - transceiver_dom_info_dict['rx_los'] = self.get_rx_los() - transceiver_dom_info_dict['tx_fault'] = self.get_tx_fault() - transceiver_dom_info_dict['reset_status'] = self.get_reset_status() - transceiver_dom_info_dict['lp_mode'] = self.get_lpmode() - - 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. - ======================================================================== - """ - # check present status - if self.port_num < 49: - sfpd_obj = sff8472Dom() - - if not self.get_presence() and not sfpd_obj: - return {} - - eeprom_ifraw = self.__read_eeprom_specific_bytes(0, SFP_DOM_OFFSET) - sfpi_obj = sff8472InterfaceId(eeprom_ifraw) - cal_type = sfpi_obj.get_calibration_type() - sfpd_obj._calibration_type = cal_type - - offset = SFP_DOM_OFFSET - transceiver_dom_threshold_info_dict = dict.fromkeys( - self.threshold_dict_keys, 'N/A') - dom_module_threshold_raw = self.__read_eeprom_specific_bytes( - (offset + SFP_MODULE_THRESHOLD_OFFSET), SFP_MODULE_THRESHOLD_WIDTH) - if dom_module_threshold_raw is not None: - dom_module_threshold_data = sfpd_obj.parse_alarm_warning_threshold( - dom_module_threshold_raw, 0) - - transceiver_dom_threshold_info_dict['temphighalarm'] = dom_module_threshold_data['data']['TempHighAlarm']['value'] - transceiver_dom_threshold_info_dict['templowalarm'] = dom_module_threshold_data['data']['TempLowAlarm']['value'] - transceiver_dom_threshold_info_dict['temphighwarning'] = dom_module_threshold_data['data']['TempHighWarning']['value'] - transceiver_dom_threshold_info_dict['templowwarning'] = dom_module_threshold_data['data']['TempLowWarning']['value'] - transceiver_dom_threshold_info_dict['vcchighalarm'] = dom_module_threshold_data['data']['VoltageHighAlarm']['value'] - transceiver_dom_threshold_info_dict['vcclowalarm'] = dom_module_threshold_data['data']['VoltageLowAlarm']['value'] - transceiver_dom_threshold_info_dict['vcchighwarning'] = dom_module_threshold_data[ - 'data']['VoltageHighWarning']['value'] - transceiver_dom_threshold_info_dict['vcclowwarning'] = dom_module_threshold_data['data']['VoltageLowWarning']['value'] - transceiver_dom_threshold_info_dict['txbiashighalarm'] = dom_module_threshold_data['data']['BiasHighAlarm']['value'] - transceiver_dom_threshold_info_dict['txbiaslowalarm'] = dom_module_threshold_data['data']['BiasLowAlarm']['value'] - transceiver_dom_threshold_info_dict['txbiashighwarning'] = dom_module_threshold_data['data']['BiasHighWarning']['value'] - transceiver_dom_threshold_info_dict['txbiaslowwarning'] = dom_module_threshold_data['data']['BiasLowWarning']['value'] - transceiver_dom_threshold_info_dict['txpowerhighalarm'] = dom_module_threshold_data['data']['TXPowerHighAlarm']['value'] - transceiver_dom_threshold_info_dict['txpowerlowalarm'] = dom_module_threshold_data['data']['TXPowerLowAlarm']['value'] - transceiver_dom_threshold_info_dict['txpowerhighwarning'] = dom_module_threshold_data['data']['TXPowerHighWarning']['value'] - transceiver_dom_threshold_info_dict['txpowerlowwarning'] = dom_module_threshold_data['data']['TXPowerLowWarning']['value'] - transceiver_dom_threshold_info_dict['rxpowerhighalarm'] = dom_module_threshold_data['data']['RXPowerHighAlarm']['value'] - transceiver_dom_threshold_info_dict['rxpowerlowalarm'] = dom_module_threshold_data['data']['RXPowerLowAlarm']['value'] - transceiver_dom_threshold_info_dict['rxpowerhighwarning'] = dom_module_threshold_data['data']['RXPowerHighWarning']['value'] - transceiver_dom_threshold_info_dict['rxpowerlowwarning'] = dom_module_threshold_data['data']['RXPowerLowWarning']['value'] - - for key in transceiver_dom_threshold_info_dict: - transceiver_dom_threshold_info_dict[key] = self._convert_string_to_num( - transceiver_dom_threshold_info_dict[key]) - - return transceiver_dom_threshold_info_dict - - - else: - sfpd_obj = sff8436Dom() - - if not self.get_presence() or not sfpd_obj: - return {} - - transceiver_dom_threshold_dict = dict.fromkeys( - self.threshold_dict_keys, 'N/A') - dom_thres_raw = self.__read_eeprom_specific_bytes( - QSFP_MODULE_THRESHOLD_OFFSET, QSFP_MODULE_THRESHOLD_WIDTH) if self.get_presence() and sfpd_obj else None - - if dom_thres_raw: - module_threshold_values = sfpd_obj.parse_module_threshold_values( - dom_thres_raw, 0) - module_threshold_data = module_threshold_values.get('data') - if module_threshold_data: - transceiver_dom_threshold_dict['temphighalarm'] = module_threshold_data['TempHighAlarm']['value'] - transceiver_dom_threshold_dict['templowalarm'] = module_threshold_data['TempLowAlarm']['value'] - transceiver_dom_threshold_dict['temphighwarning'] = module_threshold_data['TempHighWarning']['value'] - transceiver_dom_threshold_dict['templowwarning'] = module_threshold_data['TempLowWarning']['value'] - transceiver_dom_threshold_dict['vcchighalarm'] = module_threshold_data['VccHighAlarm']['value'] - transceiver_dom_threshold_dict['vcclowalarm'] = module_threshold_data['VccLowAlarm']['value'] - transceiver_dom_threshold_dict['vcchighwarning'] = module_threshold_data['VccHighWarning']['value'] - transceiver_dom_threshold_dict['vcclowwarning'] = module_threshold_data['VccLowWarning']['value'] - - dom_thres_raw = self.__read_eeprom_specific_bytes( - QSFP_CHANNEL_THRESHOLD_OFFSET, QSFP_CHANNEL_THRESHOLD_WIDTH) if self.get_presence() and sfpd_obj else None - channel_threshold_values = sfpd_obj.parse_channel_threshold_values( - dom_thres_raw, 0) - channel_threshold_data = channel_threshold_values.get('data') - if channel_threshold_data: - transceiver_dom_threshold_dict['rxpowerhighalarm'] = channel_threshold_data['RxPowerHighAlarm']['value'] - transceiver_dom_threshold_dict['rxpowerlowalarm'] = channel_threshold_data['RxPowerLowAlarm']['value'] - transceiver_dom_threshold_dict['rxpowerhighwarning'] = channel_threshold_data['RxPowerHighWarning']['value'] - transceiver_dom_threshold_dict['rxpowerlowwarning'] = channel_threshold_data['RxPowerLowWarning']['value'] - transceiver_dom_threshold_dict['txpowerhighalarm'] = "0.0dBm" - transceiver_dom_threshold_dict['txpowerlowalarm'] = "0.0dBm" - transceiver_dom_threshold_dict['txpowerhighwarning'] = "0.0dBm" - transceiver_dom_threshold_dict['txpowerlowwarning'] = "0.0dBm" - transceiver_dom_threshold_dict['txbiashighalarm'] = channel_threshold_data['TxBiasHighAlarm']['value'] - transceiver_dom_threshold_dict['txbiaslowalarm'] = channel_threshold_data['TxBiasLowAlarm']['value'] - transceiver_dom_threshold_dict['txbiashighwarning'] = channel_threshold_data['TxBiasHighWarning']['value'] - transceiver_dom_threshold_dict['txbiaslowwarning'] = channel_threshold_data['TxBiasLowWarning']['value'] - - for key in transceiver_dom_threshold_dict: - transceiver_dom_threshold_dict[key] = self._convert_string_to_num( - transceiver_dom_threshold_dict[key]) - - return transceiver_dom_threshold_dict - def get_reset_status(self): """ Retrieves the reset status of SFP @@ -725,8 +187,10 @@ def get_rx_los(self): rx_path = "{}{}{}{}".format(CPLD_I2C_PATH, cpld_path, '/module_rx_los_', self.port_num) rx_los=self._api_helper.read_txt_file(rx_path) - if rx_los is None: - return False + if int(rx_los, 10) == 1: + return [True] + else: + return [False] #status_control_raw = self.__read_eeprom_specific_bytes( # SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) #if status_control_raw: @@ -743,15 +207,18 @@ def get_rx_los(self): rx_los_list.append(rx_los_data & 0x02 != 0) rx_los_list.append(rx_los_data & 0x04 != 0) rx_los_list.append(rx_los_data & 0x08 != 0) - rx_los = rx_los_list[0] and rx_los_list[1] and rx_los_list[2] and rx_los_list[3] - - return rx_los + return rx_los_list + else: + return [False]*4 def get_tx_fault(self): """ Retrieves the TX fault status of SFP Returns: - A Boolean, True if SFP has TX fault, False if not + A list of boolean values, representing the TX fault status + of each available channel, value is True if SFP channel + has TX fault, False if not. + E.g., for a tranceiver with four channels: [False, False, True, False] Note : TX fault status is lached until a call to get_tx_fault or a reset. """ tx_fault = False @@ -761,8 +228,10 @@ def get_tx_fault(self): tx_path = "{}{}{}{}".format(CPLD_I2C_PATH, cpld_path, '/module_tx_fault_', self.port_num) tx_fault=self._api_helper.read_txt_file(tx_path) - if tx_fault is None: - return False + if int(tx_fault, 10) == 1: + return [True] + else: + return [False] #status_control_raw = self.__read_eeprom_specific_bytes( # SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) #if status_control_raw: @@ -778,15 +247,19 @@ def get_tx_fault(self): tx_fault_list.append(tx_fault_data & 0x02 != 0) tx_fault_list.append(tx_fault_data & 0x04 != 0) tx_fault_list.append(tx_fault_data & 0x08 != 0) - tx_fault = tx_fault_list[0] and tx_fault_list[1] and tx_fault_list[2] and tx_fault_list[3] + return tx_fault_list + else: + return [False]*4 - return tx_fault def get_tx_disable(self): """ Retrieves the tx_disable status of this SFP Returns: - A Boolean, True if tx_disable is enabled, False if disabled + A list of boolean values, representing the TX disable status + of each available channel, value is True if SFP channel + is TX disabled, False if not. + E.g., for a tranceiver with four channels: [False, False, True, False] """ if self.port_num < 49: tx_disable = False @@ -806,10 +279,11 @@ def get_tx_disable(self): # tx_disable_soft = (sffbase().test_bit( # data, SFP_TX_DISABLE_SOFT_BIT) != 0) # tx_disable = tx_disable_hard | tx_disable_soft - if tx_disable is not None: - return tx_disable + if int(tx_disable, 10)==0: + return [False] else: - return False + return [True] + else: tx_disable_list = [] @@ -829,8 +303,9 @@ def get_tx_disable(self): 'On' == dom_control_data['data']['TX3Disable']['value']) tx_disable_list.append( 'On' == dom_control_data['data']['TX4Disable']['value']) - - return tx_disable_list + return tx_disable_list + else: + return [False]*4 def get_tx_disable_channel(self): """ @@ -841,18 +316,14 @@ def get_tx_disable_channel(self): As an example, a returned value of 0x5 indicates that channel 0 and channel 2 have been disabled. """ - if self.port_num < 49: - # SFP doesn't support this feature - return False - else: - tx_disable_list = self.get_tx_disable() - if tx_disable_list is None: - return 0 - tx_disabled = 0 - for i in range(len(tx_disable_list)): - if tx_disable_list[i]: - tx_disabled |= 1 << i - return tx_disabled + tx_disable_list = self.get_tx_disable() + if tx_disable_list is None: + return 0 + tx_disabled = 0 + for i in range(len(tx_disable_list)): + if tx_disable_list[i]: + tx_disabled |= 1 << i + return tx_disabled def get_lpmode(self): """ @@ -915,78 +386,6 @@ def get_power_override(self): return power_override - def get_temperature(self): - """ - Retrieves the temperature of this SFP - Returns: - An integer number of current temperature in Celsius - """ - transceiver_dom_info_dict = self.get_transceiver_bulk_status() - return transceiver_dom_info_dict.get("temperature", "N/A") - - def get_voltage(self): - """ - Retrieves the supply voltage of this SFP - Returns: - An integer number of supply voltage in mV - """ - transceiver_dom_info_dict = self.get_transceiver_bulk_status() - return transceiver_dom_info_dict.get("voltage", "N/A") - - def get_tx_bias(self): - """ - Retrieves the TX bias current of this SFP - Returns: - A list of four integer numbers, representing TX bias in mA - for channel 0 to channel 4. - Ex. ['110.09', '111.12', '108.21', '112.09'] - """ - transceiver_dom_info_dict = self.get_transceiver_bulk_status() - - tx1_bs = transceiver_dom_info_dict.get("tx1bias", "N/A") - if self.port_num < 49: - return [tx1_bs, "N/A", "N/A", "N/A"] if transceiver_dom_info_dict else [] - - tx2_bs = transceiver_dom_info_dict.get("tx2bias", "N/A") - tx3_bs = transceiver_dom_info_dict.get("tx3bias", "N/A") - tx4_bs = transceiver_dom_info_dict.get("tx4bias", "N/A") - return [tx1_bs, tx2_bs, tx3_bs, tx4_bs] if transceiver_dom_info_dict else [] - - def get_rx_power(self): - """ - Retrieves the received optical power for this SFP - Returns: - A list of four integer numbers, representing received optical - power in mW for channel 0 to channel 4. - Ex. ['1.77', '1.71', '1.68', '1.70'] - """ - transceiver_dom_info_dict = self.get_transceiver_bulk_status() - - rx1_pw = transceiver_dom_info_dict.get("rx1power", "N/A") - if self.port_num < 49: - return [rx1_pw, "N/A", "N/A", "N/A"] if transceiver_dom_info_dict else [] - rx2_pw = transceiver_dom_info_dict.get("rx2power", "N/A") - rx3_pw = transceiver_dom_info_dict.get("rx3power", "N/A") - rx4_pw = transceiver_dom_info_dict.get("rx4power", "N/A") - return [rx1_pw, rx2_pw, rx3_pw, rx4_pw] if transceiver_dom_info_dict else [] - - def get_tx_power(self): - """ - Retrieves the TX power of this SFP - Returns: - A list of four integer numbers, representing TX power in mW - for channel 0 to channel 4. - Ex. ['1.86', '1.86', '1.86', '1.86'] - """ - transceiver_dom_info_dict = self.get_transceiver_bulk_status() - tx1_pw = transceiver_dom_info_dict.get("tx1power", "N/A") - if self.port_num < 49: - return [tx1_pw, "N/A", "N/A", "N/A"] if transceiver_dom_info_dict else [] - tx2_pw = transceiver_dom_info_dict.get("tx2power", "N/A") - tx3_pw = transceiver_dom_info_dict.get("tx3power", "N/A") - tx4_pw = transceiver_dom_info_dict.get("tx4power", "N/A") - return [tx1_pw, tx2_pw, tx3_pw, tx4_pw] - def reset(self): """ Reset SFP and return all user module settings to their default srate. @@ -1000,15 +399,15 @@ def reset(self): cpld_path = self._cpld_mapping[cpld_i] reset_path = "{}{}{}{}".format(CPLD_I2C_PATH, cpld_path, '/module_reset_', self.port_num) ret = self._api_helper.write_txt_file(reset_path, 1) - + if ret is not True: - time.sleep(0.01) - ret = self.self._api_helper.write_txt_file(reset_path, 0) - time.sleep(0.2) return ret - else: - return False + time.sleep(0.01) + ret = self._api_helper.write_txt_file(reset_path, 0) + time.sleep(0.2) + + return ret def tx_disable(self, tx_disable): """ @@ -1120,7 +519,7 @@ def set_lpmode(self, lpmode): if self.port_num < 49: return False # SFP doesn't support this feature else: - if lpmode is True: + if lpmode: self.set_power_override(True, True) else: self.set_power_override(False, False) @@ -1195,28 +594,27 @@ def get_presence(self): else: return False - def get_model(self): + def get_status(self): """ - Retrieves the model number (or part number) of the device + Retrieves the operational status of the device Returns: - string: Model/part number of device + A boolean value, True if device is operating properly, False if not """ - transceiver_dom_info_dict = self.get_transceiver_info() - return transceiver_dom_info_dict.get("model", "N/A") + return self.get_presence() - def get_serial(self): + def get_position_in_parent(self): """ - Retrieves the serial number of the device + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned Returns: - string: Serial number of device + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position """ - transceiver_dom_info_dict = self.get_transceiver_info() - return transceiver_dom_info_dict.get("serial", "N/A") + return self.port_num - def get_status(self): + def is_replaceable(self): """ - Retrieves the operational status of the device + Indicate whether this device is replaceable. Returns: - A boolean value, True if device is operating properly, False if not + bool: True if it is replaceable. """ - return self.get_presence() and self.get_transceiver_bulk_status() + return True diff --git a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/thermal.py b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/thermal.py index 46458d02a118..4d06ad170cba 100644 --- a/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/thermal.py +++ b/device/accton/x86_64-accton_as5835_54x-r0/sonic_platform/thermal.py @@ -15,22 +15,53 @@ except ImportError as e: raise ImportError(str(e) + "- required module not found") +PSU_I2C_PATH = "/sys/bus/i2c/devices/{}-00{}/" +PSU_HWMON_I2C_MAPPING = { + 0: { + "num": 11, + "addr": "58" + }, + 1: { + "num": 12, + "addr": "5b" + }, +} + +PSU_CPLD_I2C_MAPPING = { + 0: { + "num": 11, + "addr": "50" + }, + 1: { + "num": 12, + "addr": "53" + }, +} + +THERMAL_NAME_LIST = ["Temp sensor 1", "Temp sensor 2", + "Temp sensor 3", "Temp sensor 4"] + +PSU_THERMAL_NAME_LIST = ["PSU-1 temp sensor 1", "PSU-2 temp sensor 2"] + +SYSFS_PATH = "/sys/bus/i2c/devices" class Thermal(ThermalBase): """Platform-specific Thermal class""" - THERMAL_NAME_LIST = [] - SYSFS_PATH = "/sys/bus/i2c/devices" - - def __init__(self, thermal_index=0): + def __init__(self, thermal_index=0, is_psu=False, psu_index=0): self.index = thermal_index - - # Add thermal name - self.THERMAL_NAME_LIST.append("Temp sensor 1") - self.THERMAL_NAME_LIST.append("Temp sensor 2") - self.THERMAL_NAME_LIST.append("Temp sensor 3") - self.THERMAL_NAME_LIST.append("Temp sensor 4") - + self.is_psu = is_psu + self.psu_index = psu_index + + if self.is_psu: + psu_i2c_bus = PSU_HWMON_I2C_MAPPING[psu_index]["num"] + psu_i2c_addr = PSU_HWMON_I2C_MAPPING[psu_index]["addr"] + self.psu_hwmon_path = PSU_I2C_PATH.format(psu_i2c_bus, + psu_i2c_addr) + psu_i2c_bus = PSU_CPLD_I2C_MAPPING[psu_index]["num"] + psu_i2c_addr = PSU_CPLD_I2C_MAPPING[psu_index]["addr"] + self.cpld_path = PSU_I2C_PATH.format(psu_i2c_bus, psu_i2c_addr) + # Set hwmon path i2c_path = { 0: "18-004b/hwmon/hwmon*/", @@ -38,9 +69,9 @@ def __init__(self, thermal_index=0): 2: "20-0049/hwmon/hwmon*/", 3: "21-004a/hwmon/hwmon*/" }.get(self.index, None) - - self.hwmon_path = "{}/{}".format(self.SYSFS_PATH, i2c_path) - self.ss_key = self.THERMAL_NAME_LIST[self.index] + + self.hwmon_path = "{}/{}".format(SYSFS_PATH, i2c_path) + self.ss_key = THERMAL_NAME_LIST[self.index] self.ss_index = 1 def __read_txt_file(self, file_path): @@ -51,20 +82,23 @@ def __read_txt_file(self, file_path): return data except IOError as e: pass - + return None - def __get_temp(self, temp_file): - temp_file_path = os.path.join(self.hwmon_path, temp_file) + if not self.is_psu: + temp_file_path = os.path.join(self.hwmon_path, temp_file) + else: + temp_file_path = temp_file raw_temp = self.__read_txt_file(temp_file_path) if raw_temp is not None: return float(raw_temp)/1000 else: - return 0 - + return 0 def __set_threshold(self, file_name, temperature): + if self.is_psu: + return True temp_file_path = os.path.join(self.hwmon_path, file_name) for filename in glob.glob(temp_file_path): try: @@ -73,6 +107,8 @@ def __set_threshold(self, file_name, temperature): return True except IOError as e: print("IOError") + return False + def get_temperature(self): @@ -82,7 +118,11 @@ def get_temperature(self): A float number of current temperature in Celsius up to nearest thousandth of one degree Celsius, e.g. 30.125 """ - temp_file = "temp{}_input".format(self.ss_index) + if not self.is_psu: + temp_file = "temp{}_input".format(self.ss_index) + else: + temp_file = self.psu_hwmon_path + "psu_temp1_input" + return self.__get_temp(temp_file) def get_high_threshold(self): @@ -92,6 +132,9 @@ def get_high_threshold(self): A float number, the high threshold temperature of thermal in Celsius up to nearest thousandth of one degree Celsius, e.g. 30.125 """ + if self.is_psu: + return 80 + temp_file = "temp{}_max".format(self.ss_index) return self.__get_temp(temp_file) @@ -116,7 +159,10 @@ def get_name(self): Returns: string: The name of the thermal device """ - return self.THERMAL_NAME_LIST[self.index] + if self.is_psu: + return PSU_THERMAL_NAME_LIST[self.psu_index] + else: + return THERMAL_NAME_LIST[self.index] def get_presence(self): """ @@ -124,6 +170,9 @@ def get_presence(self): Returns: bool: True if Thermal is present, False if not """ + if self.is_psu: + val = self.__read_txt_file(self.cpld_path + "psu_present") + return int(val, 10) == 1 temp_file = "temp{}_input".format(self.ss_index) temp_file_path = os.path.join(self.hwmon_path, temp_file) raw_txt = self.__read_txt_file(temp_file_path) @@ -138,11 +187,49 @@ def get_status(self): Returns: A boolean value, True if device is operating properly, False if not """ + if self.is_psu: + temp_file = self.psu_hwmon_path + "psu_temp_fault" + return self.get_presence() and (not int( + self.__read_txt_file(temp_file))) file_str = "temp{}_input".format(self.ss_index) file_path = os.path.join(self.hwmon_path, file_str) raw_txt = self.__read_txt_file(file_path) if raw_txt is None: return False - else: + else: return int(raw_txt) != 0 + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + + return "N/A" + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + return "N/A" + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return self.index+1 + + def is_replaceable(self): + """ + Retrieves whether thermal module is replaceable + Returns: + A boolean value, True if replaceable, False if not + """ + return False diff --git a/device/accton/x86_64-accton_as5835_54x-r0/system_health_monitoring_config.json b/device/accton/x86_64-accton_as5835_54x-r0/system_health_monitoring_config.json new file mode 100644 index 000000000000..5f3b3b07e73f --- /dev/null +++ b/device/accton/x86_64-accton_as5835_54x-r0/system_health_monitoring_config.json @@ -0,0 +1,15 @@ +{ + "services_to_ignore": [], + "devices_to_ignore": [ + "asic", + "psu.temperature" + + ], + "user_defined_checkers": [], + "polling_interval": 60, + "led_color": { + "fault": "STATUS_LED_COLOR_AMBER", + "normal": "STATUS_LED_COLOR_GREEN", + "booting": "STATUS_LED_COLOR_GREEN" + } +} diff --git a/device/accton/x86_64-accton_as7326_56x-r0/Accton-AS7326-56X/td3-as7326-48x25G+8x100G.config.bcm b/device/accton/x86_64-accton_as7326_56x-r0/Accton-AS7326-56X/td3-as7326-48x25G+8x100G.config.bcm index 5da8cd015da1..21ca8a2fa576 100755 --- a/device/accton/x86_64-accton_as7326_56x-r0/Accton-AS7326-56X/td3-as7326-48x25G+8x100G.config.bcm +++ b/device/accton/x86_64-accton_as7326_56x-r0/Accton-AS7326-56X/td3-as7326-48x25G+8x100G.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ #polarity/lanemap is using TH2 style. core_clock_frequency=1525 dpp_clock_ratio=2:3 diff --git a/device/accton/x86_64-accton_as7326_56x-r0/pddf/pddf-device.json b/device/accton/x86_64-accton_as7326_56x-r0/pddf/pddf-device.json index 78be7f2b61c9..a8bd6d0c4043 100644 --- a/device/accton/x86_64-accton_as7326_56x-r0/pddf/pddf-device.json +++ b/device/accton/x86_64-accton_as7326_56x-r0/pddf/pddf-device.json @@ -49,6 +49,10 @@ "pddf_fan_module", "pddf_led_module", "pddf_sysstatus_module" + ], + "custom_kos": + [ + "pddf_custom_psu" ] }, @@ -108,7 +112,7 @@ "i2c": { "topo_info": { "parent_bus":"0x0", "dev_addr":"0x77", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x1"}, + "dev_attr": { "virt_bus":"0x1", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"MUX2" }, @@ -124,7 +128,7 @@ "i2c": { "topo_info": { "parent_bus":"0x1", "dev_addr":"0x70", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x9"}, + "dev_attr": { "virt_bus":"0x9", "idle_state":"-2"}, "channel": [ { "chn":"2", "dev":"FAN-CTRL" }, @@ -143,7 +147,7 @@ "i2c": { "topo_info": { "parent_bus":"0x1", "dev_addr":"0x71", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x11"}, + "dev_attr": { "virt_bus":"0x11", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PSU1" }, @@ -161,7 +165,7 @@ "i2c": { "topo_info": { "parent_bus":"0x2", "dev_addr":"0x70", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x21"}, + "dev_attr": { "virt_bus":"0x21", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"MUX5" }, @@ -181,7 +185,8 @@ { "interface": [ - { "itf":"pmbus", "dev":"PSU2-PMBUS"} + { "itf":"pmbus", "dev":"PSU2-PMBUS"}, + { "itf":"eeprom", "dev":"PSU2-EEPROM" } ] } }, @@ -195,10 +200,8 @@ "attr_list": [ { "attr_name":"psu_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x2", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, - { "attr_name":"psu_model_name", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x9a", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" }, { "attr_name":"psu_power_good", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x2", "attr_mask":"0x4", "attr_cmpval":"0x4", "attr_len":"1"}, { "attr_name":"psu_mfr_id", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" }, - { "attr_name":"psu_serial_num", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x9e", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"20" }, { "attr_name":"psu_fan_dir", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0xc3", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"5"}, { "attr_name":"psu_v_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8b", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, { "attr_name":"psu_i_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8c", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, @@ -208,7 +211,21 @@ ] } }, - + + "PSU2-EEPROM": + { + "dev_info": { "device_type":"PSU-EEPROM", "device_name":"PSU2-EEPROM", "device_parent":"MUX2", "virt_parent":"PSU2"}, + "i2c": + { + "topo_info":{ "parent_bus":"0xd", "dev_addr":"0x53", "dev_type":"psu_eeprom"}, + "attr_list": + [ + { "attr_name":"psu_model_name", "attr_devaddr":"0x53", "attr_devtype":"eeprom", "attr_offset":"0x15", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"11" }, + { "attr_name":"psu_serial_num", "attr_devaddr":"0x53", "attr_devtype":"eeprom", "attr_offset":"0x2e", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"17" } + + ] + } + }, "PSU1": { "dev_info": { "device_type":"PSU", "device_name":"PSU1", "device_parent":"MUX3" }, @@ -217,7 +234,8 @@ { "interface": [ - { "itf":"pmbus", "dev":"PSU1-PMBUS"} + { "itf":"pmbus", "dev":"PSU1-PMBUS"}, + { "itf":"eeprom", "dev":"PSU1-EEPROM" } ] } }, @@ -230,11 +248,9 @@ "topo_info": { "parent_bus":"0x11", "dev_addr":"0x59", "dev_type":"psu_pmbus"}, "attr_list": [ - { "attr_name":"psu_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x2", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, - { "attr_name":"psu_model_name", "attr_devaddr":"0x59", "attr_devtype":"pmbus", "attr_offset":"0x9a", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" }, + { "attr_name":"psu_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x2", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, { "attr_name":"psu_power_good", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x2", "attr_mask":"0x8", "attr_cmpval":"0x8", "attr_len":"1"}, { "attr_name":"psu_mfr_id", "attr_devaddr":"0x59", "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" }, - { "attr_name":"psu_serial_num", "attr_devaddr":"0x59", "attr_devtype":"pmbus", "attr_offset":"0x9e", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"20" }, { "attr_name":"psu_fan_dir", "attr_devaddr":"0x59", "attr_devtype":"pmbus", "attr_offset":"0xc3", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"5"}, { "attr_name":"psu_v_out", "attr_devaddr":"0x59", "attr_devtype":"pmbus", "attr_offset":"0x8b", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, { "attr_name":"psu_i_out", "attr_devaddr":"0x59", "attr_devtype":"pmbus", "attr_offset":"0x8c", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, @@ -244,7 +260,19 @@ ] } }, - + "PSU1-EEPROM": + { + "dev_info": { "device_type":"PSU-EEPROM", "device_name":"PSU1-EEPROM", "device_parent":"MUX2", "virt_parent":"PSU1"}, + "i2c": + { + "topo_info":{ "parent_bus":"0x11", "dev_addr":"0x51", "dev_type":"psu_eeprom"}, + "attr_list": + [ + { "attr_name":"psu_model_name", "attr_devaddr":"0x51", "attr_devtype":"eeprom", "attr_offset":"0x15", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"11" }, + { "attr_name":"psu_serial_num", "attr_devaddr":"0x51", "attr_devtype":"eeprom", "attr_offset":"0x2e", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"17" } + ] + } + }, "CPLD1": { "dev_info": { "device_type":"CPLD", "device_name":"CPLD1", "device_parent":"MUX3"}, @@ -474,7 +502,7 @@ "i2c": { "topo_info": { "parent_bus":"0x21", "dev_addr":"0x71", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x29"}, + "dev_attr": { "virt_bus":"0x29", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PORT2" }, @@ -494,7 +522,7 @@ "i2c": { "topo_info": { "parent_bus":"0x22", "dev_addr":"0x72", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x31"}, + "dev_attr": { "virt_bus":"0x31", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PORT10" }, @@ -514,7 +542,7 @@ "i2c": { "topo_info": { "parent_bus":"0x23", "dev_addr":"0x73", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x39"}, + "dev_attr": { "virt_bus":"0x39", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PORT18" }, @@ -534,7 +562,7 @@ "i2c": { "topo_info": { "parent_bus":"0x24", "dev_addr":"0x74", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x41"}, + "dev_attr": { "virt_bus":"0x41", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PORT27" }, @@ -554,7 +582,7 @@ "i2c": { "topo_info": { "parent_bus":"0x25", "dev_addr":"0x75", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x49"}, + "dev_attr": { "virt_bus":"0x49", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PORT34" }, @@ -574,7 +602,7 @@ "i2c": { "topo_info": { "parent_bus":"0x26", "dev_addr":"0x76", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x51"}, + "dev_attr": { "virt_bus":"0x51", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PORT41" }, @@ -594,7 +622,7 @@ "i2c": { "topo_info": { "parent_bus":"0x18", "dev_addr":"0x72", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x19"}, + "dev_attr": { "virt_bus":"0x19", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PORT49" }, @@ -887,7 +915,7 @@ { "attr_name":"xcvr_present", "attr_devaddr":"0x62", "attr_devtype":"cpld", "attr_devname":"CPLD2", "attr_offset":"0xF", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"}, { "attr_name":"xcvr_txfault", "attr_devaddr":"0x62", "attr_devtype":"cpld", "attr_devname":"CPLD2", "attr_offset":"0x3", "attr_mask":"0x4", "attr_cmpval":"0x10", "attr_len":"1"}, { "attr_name":"xcvr_txdisable", "attr_devaddr":"0x62", "attr_devtype":"cpld", "attr_devname":"CPLD2", "attr_offset":"0x7", "attr_mask":"0x4", "attr_cmpval":"0x10", "attr_len":"1"}, - { "attr_name":"xcvr_rxlos", "attr_devaddr":"0x62", "attr_devtype":"cpld", "attr_offset":"0xB", "attr_mask":"0x4", "attr_cmpval":"0x10", "attr_len":"1"} + { "attr_name":"xcvr_rxlos", "attr_devaddr":"0x62", "attr_devtype":"cpld", "attr_devname":"CPLD2","attr_offset":"0xB", "attr_mask":"0x4", "attr_cmpval":"0x10", "attr_len":"1"} ] } }, @@ -927,7 +955,7 @@ { "attr_name":"xcvr_present", "attr_devaddr":"0x62", "attr_devtype":"cpld", "attr_devname":"CPLD2", "attr_offset":"0x10", "attr_mask":"0x0", "attr_cmpval":"0x0", "attr_len":"1"}, { "attr_name":"xcvr_txfault", "attr_devaddr":"0x62", "attr_devtype":"cpld", "attr_devname":"CPLD2", "attr_offset":"0x4", "attr_mask":"0x0", "attr_cmpval":"0x1", "attr_len":"1"}, { "attr_name":"xcvr_txdisable", "attr_devaddr":"0x62", "attr_devtype":"cpld","attr_devname":"CPLD2", "attr_offset":"0x8", "attr_mask":"0x0", "attr_cmpval":"0x1", "attr_len":"1"}, - { "attr_name":"xcvr_rxlos", "attr_devaddr":"0x62", "attr_devtype":"cpld", "attr_offset":"0xC", "attr_mask":"0x0", "attr_cmpval":"0x1", "attr_len":"1"} + { "attr_name":"xcvr_rxlos", "attr_devaddr":"0x62", "attr_devtype":"cpld", "attr_devname":"CPLD2", "attr_offset":"0xC", "attr_mask":"0x0", "attr_cmpval":"0x1", "attr_len":"1"} ] } }, @@ -2381,10 +2409,10 @@ "topo_info": { "parent_bus":"0x54", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, "attr_list": [ - { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x11", "attr_devname":"CPLD1", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"}, - { "attr_name":"xcvr_txfault", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x1B","attr_devname":"CPLD1", "attr_mask":"0x4", "attr_cmpval":"0x10", "attr_len":"1"}, - { "attr_name":"xcvr_txdisable", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x15", "attr_devname":"CPLD1", "attr_mask":"0x4", "attr_cmpval":"0x10", "attr_len":"1"}, - { "attr_name":"xcvr_rxlos", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x18", "attr_devname":"CPLD1","attr_mask":"0x4", "attr_cmpval":"0x10", "attr_len":"1"} + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x11", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_txfault", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x1B", "attr_mask":"0x4", "attr_cmpval":"0x10", "attr_len":"1"}, + { "attr_name":"xcvr_txdisable", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x15", "attr_mask":"0x4", "attr_cmpval":"0x10", "attr_len":"1"}, + { "attr_name":"xcvr_rxlos", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x18", "attr_mask":"0x4", "attr_cmpval":"0x10", "attr_len":"1"} ] } }, @@ -2421,10 +2449,10 @@ "topo_info": { "parent_bus":"0x55", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, "attr_list": [ - { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_devname":"CPLD1", "attr_offset":"0x11", "attr_mask":"0x5", "attr_cmpval":"0x0", "attr_len":"1"}, - { "attr_name":"xcvr_txfault", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_devname":"CPLD1", "attr_offset":"0x1B", "attr_mask":"0x5", "attr_cmpval":"0x20", "attr_len":"1"}, - { "attr_name":"xcvr_txdisable", "attr_devaddr":"0x60", "attr_devtype":"cpld","attr_devname":"CPLD1", "attr_devname":"CPLD1", "attr_offset":"0x15", "attr_mask":"0x5", "attr_cmpval":"0x20", "attr_len":"1"}, - { "attr_name":"xcvr_rxlos", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_devname":"CPLD1", "attr_offset":"0x18", "attr_mask":"0x5", "attr_cmpval":"0x20", "attr_len":"1"} + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x11", "attr_mask":"0x5", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_txfault", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x1B", "attr_mask":"0x5", "attr_cmpval":"0x20", "attr_len":"1"}, + { "attr_name":"xcvr_txdisable", "attr_devaddr":"0x60", "attr_devtype":"cpld","attr_devname":"CPLD1","attr_offset":"0x15", "attr_mask":"0x5", "attr_cmpval":"0x20", "attr_len":"1"}, + { "attr_name":"xcvr_rxlos", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x18", "attr_mask":"0x5", "attr_cmpval":"0x20", "attr_len":"1"} ] } }, @@ -2461,10 +2489,10 @@ "topo_info": { "parent_bus":"0x56", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, "attr_list": [ - { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld","attr_devname":"CPLD1", "attr_devname":"CPLD1", "attr_offset":"0x12", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, - { "attr_name":"xcvr_txfault", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_devname":"CPLD1","attr_offset":"0x1C", "attr_mask":"0x1", "attr_cmpval":"0x2", "attr_len":"1"}, - { "attr_name":"xcvr_txdisable", "attr_devaddr":"0x60", "attr_devtype":"cpld","attr_devname":"CPLD1", "attr_devname":"CPLD1", "attr_offset":"0x16", "attr_mask":"0x1", "attr_cmpval":"0x2", "attr_len":"1"}, - { "attr_name":"xcvr_rxlos", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_devname":"CPLD1", "attr_offset":"0x19", "attr_mask":"0x1", "attr_cmpval":"0x2", "attr_len":"1"} + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld","attr_devname":"CPLD1", "attr_offset":"0x12", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_txfault", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x1C", "attr_mask":"0x1", "attr_cmpval":"0x2", "attr_len":"1"}, + { "attr_name":"xcvr_txdisable", "attr_devaddr":"0x60", "attr_devtype":"cpld","attr_devname":"CPLD1", "attr_offset":"0x16", "attr_mask":"0x1", "attr_cmpval":"0x2", "attr_len":"1"}, + { "attr_name":"xcvr_rxlos", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x19", "attr_mask":"0x1", "attr_cmpval":"0x2", "attr_len":"1"} ] } }, diff --git a/device/accton/x86_64-accton_as7326_56x-r0/plugins/eeprom.py b/device/accton/x86_64-accton_as7326_56x-r0/plugins/eeprom.py index 4241483d68eb..8139f856f973 100644 --- a/device/accton/x86_64-accton_as7326_56x-r0/plugins/eeprom.py +++ b/device/accton/x86_64-accton_as7326_56x-r0/plugins/eeprom.py @@ -16,5 +16,10 @@ class board(eeprom_tlvinfo.TlvInfoDecoder): _TLV_INFO_MAX_LEN = 256 def __init__(self, name, path, cpld_root, ro): - self.eeprom_path = "/sys/bus/i2c/devices/0-0056/eeprom" + exists = os.path.isfile('/sys/bus/i2c/devices/0-0056/eeprom') + if (exists is True): + self.eeprom_path = "/sys/bus/i2c/devices/0-0056/eeprom" + else: + self.eeprom_path = "/sys/bus/i2c/devices/0-0057/eeprom" + super(board, self).__init__(self.eeprom_path, 0, '', True) diff --git a/device/accton/x86_64-accton_as7326_56x-r0/pmon_daemon_control.json b/device/accton/x86_64-accton_as7326_56x-r0/pmon_daemon_control.json index 584a14b9d942..a3b204e20d8d 100644 --- a/device/accton/x86_64-accton_as7326_56x-r0/pmon_daemon_control.json +++ b/device/accton/x86_64-accton_as7326_56x-r0/pmon_daemon_control.json @@ -1,5 +1,5 @@ { "skip_ledd": true, - "skip_thermalctld": true + "skip_pcied": true } diff --git a/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/__init__.py b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/__init__.py new file mode 100644 index 000000000000..73a7720e8979 --- /dev/null +++ b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/__init__.py @@ -0,0 +1,2 @@ +__all__ = [ "platform", "chassis", "sfp", "eeprom", "component", "psu", "thermal", "fan", "fan_drawer" ] +from . import platform diff --git a/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/chassis.py b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/chassis.py new file mode 100644 index 000000000000..f32f381b7c21 --- /dev/null +++ b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/chassis.py @@ -0,0 +1,264 @@ +############################################################################# +# Edgecore +# +# Module contains an implementation of SONiC Platform Base API and +# provides the Chassis information which are available in the platform +# +############################################################################# + +import os +import sys + +try: + from sonic_platform_base.chassis_base import ChassisBase + from .event import SfpEvent + from sonic_py_common import device_info + +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +NUM_FAN_TRAY = 6 +NUM_PSU = 2 +NUM_THERMAL = 4 +NUM_PORT = 58 +NUM_COMPONENT = 4 + +HOST_REBOOT_CAUSE_PATH = "/host/reboot-cause/" +PMON_REBOOT_CAUSE_PATH = "/usr/share/sonic/platform/api_files/reboot-cause/" +REBOOT_CAUSE_FILE = "reboot-cause.txt" +PREV_REBOOT_CAUSE_FILE = "previous-reboot-cause.txt" +HOST_CHK_CMD = "which systemctl > /dev/null 2>&1" +SYSLED_FNODE= "/sys/class/leds/accton_as7326_56x_led::diag/brightness" +SYSLED_MODES = { + "0" : "STATUS_LED_COLOR_OFF", + "1" : "STATUS_LED_COLOR_GREEN", + "3" : "STATUS_LED_COLOR_RED", + "5" : "STATUS_LED_COLOR_GREEN_BLINK" +} + + +class Chassis(ChassisBase): + """Platform-specific Chassis class""" + + def __init__(self): + ChassisBase.__init__(self) + self.config_data = {} + (self.platform, self.hwsku) = device_info.get_platform_and_hwsku() + + self.__initialize_fan() + self.__initialize_psu() + self.__initialize_thermals() + self.__initialize_components() + self.__initialize_sfp() + self.__initialize_eeprom() + + def __initialize_sfp(self): + from sonic_platform.sfp import Sfp + for index in range(NUM_PORT): + sfp = Sfp(index) + self._sfp_list.append(sfp) + self._sfpevent = SfpEvent(self._sfp_list) + self.sfp_module_initialized = True + + def __initialize_fan(self): + from sonic_platform.fan_drawer import FanDrawer + for fant_index in range(NUM_FAN_TRAY): + fandrawer = FanDrawer(fant_index) + self._fan_drawer_list.append(fandrawer) + self._fan_list.extend(fandrawer._fan_list) + + def __initialize_psu(self): + from sonic_platform.psu import Psu + for index in range(NUM_PSU): + psu = Psu(index) + self._psu_list.append(psu) + + def __initialize_thermals(self): + from sonic_platform.thermal import Thermal + for index in range(NUM_THERMAL): + thermal = Thermal(index) + self._thermal_list.append(thermal) + + def __initialize_eeprom(self): + from sonic_platform.eeprom import Tlv + self._eeprom = Tlv() + + def __initialize_components(self): + from sonic_platform.component import Component + for index in range(NUM_COMPONENT): + component = Component(index) + self._component_list.append(component) + + def __initialize_watchdog(self): + self._watchdog = Watchdog() + + def __is_host(self): + return os.system(HOST_CHK_CMD) == 0 + + def __read_txt_file(self, file_path): + try: + with open(file_path, 'r') as fd: + return fd.read().strip() + except IOError: + pass + return None + + def __write_txt_file(self, file_path, value): + try: + with open(file_path, 'w') as fd: + fd.write(str(value)) + except Exception: + return False + return True + + def get_name(self): + """ + Retrieves the name of the device + Returns: + string: The name of the device + """ + return self._eeprom.get_product_name() + + def get_presence(self): + """ + Retrieves the presence of the Chassis + Returns: + bool: True if Chassis is present, False if not + """ + return True + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + return True + def get_base_mac(self): + """ + Retrieves the base MAC address for the chassis + Returns: + A string containing the MAC address in the format + 'XX:XX:XX:XX:XX:XX' + """ + return self._eeprom.get_mac() + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + return self._eeprom.get_pn() + + def get_serial(self): + """ + Retrieves the hardware serial number for the chassis + Returns: + A string containing the hardware serial number for this chassis. + """ + return self._eeprom.get_serial() + + def get_system_eeprom_info(self): + """ + Retrieves the full content of system EEPROM information for the chassis + Returns: + A dictionary where keys are the type code defined in + OCP ONIE TlvInfo EEPROM format and values are their corresponding + values. + """ + return self._eeprom.get_eeprom() + + def get_reboot_cause(self): + """ + Retrieves the cause of the previous reboot + Returns: + A tuple (string, string) where the first element is a string + containing the cause of the previous reboot. This string must be + one of the predefined strings in this class. If the first string + is "REBOOT_CAUSE_HARDWARE_OTHER", the second string can be used + to pass a description of the reboot cause. + """ + description = 'None' + + reboot_cause_path = (HOST_REBOOT_CAUSE_PATH + REBOOT_CAUSE_FILE) if self.__is_host( + ) else (PMON_REBOOT_CAUSE_PATH + REBOOT_CAUSE_FILE) + prev_reboot_cause_path = (HOST_REBOOT_CAUSE_PATH + PREV_REBOOT_CAUSE_FILE) if self.__is_host( + ) else (PMON_REBOOT_CAUSE_PATH + PREV_REBOOT_CAUSE_FILE) + + sw_reboot_cause = self.__read_txt_file(reboot_cause_path) or "Unknown" + prev_sw_reboot_cause = self.__read_txt_file(prev_reboot_cause_path) or "Unknown" + + if sw_reboot_cause != "Unknown": + reboot_cause = self.REBOOT_CAUSE_NON_HARDWARE + description = sw_reboot_cause + elif prev_reboot_cause_path != "Unknown": + reboot_cause = self.REBOOT_CAUSE_NON_HARDWARE + description = prev_sw_reboot_cause + + return (reboot_cause, description) + + def get_change_event(self, timeout=0): + # SFP event + if not self.sfp_module_initialized: + self.__initialize_sfp() + return self._sfpevent.get_sfp_event(timeout) + + def get_sfp(self, index): + """ + Retrieves sfp represented by (1-based) index + Args: + index: An integer, the index (1-based) of the sfp to retrieve. + The index should be the sequence of a physical port in a chassis, + starting from 1. + For example, 1 for Ethernet0, 2 for Ethernet4 and so on. + Returns: + An object dervied from SfpBase representing the specified sfp + """ + sfp = None + if not self.sfp_module_initialized: + self.__initialize_sfp() + + try: + # The index will start from 1 + sfp = self._sfp_list[index-1] + except IndexError: + sys.stderr.write("SFP index {} out of range (1-{})\n".format( + index, len(self._sfp_list))) + return sfp + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return -1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return False + + + def initizalize_system_led(self): + return True + + def get_status_led(self): + val = self.__read_txt_file(SYSLED_FNODE) + return SYSLED_MODES[val] if val in SYSLED_MODES else "UNKNOWN" + + def set_status_led(self, color): + mode = None + for key, val in SYSLED_MODES.items(): + if val == color: + mode = key + break + if mode is None: + return False + else: + return self.__write_txt_file(SYSLED_FNODE, mode) diff --git a/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/component.py b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/component.py new file mode 100644 index 000000000000..75c2d3b918d4 --- /dev/null +++ b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/component.py @@ -0,0 +1,161 @@ +############################################################################# +# Edgecore +# +# Component contains an implementation of SONiC Platform Base API and +# provides the components firmware management function +# +############################################################################# + +try: + from sonic_platform_base.component_base import ComponentBase +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +CPLD_ADDR_MAPPING = { + "CPLD-1": "18-0060", + "CPLD-2": "12-0062", + "CPLD-3": "19-0064", +} +SYSFS_PATH = "/sys/bus/i2c/devices/" +BIOS_VERSION_PATH = "/sys/class/dmi/id/bios_version" +COMPONENT_NAME_LIST = ["CPLD-1", "CPLD-2", "CPLD-3", "BIOS"] +COMPONENT_DES_LIST = [ + "CPLD-1", "CPLD-2", "CPLD-3", "Basic Input/Output System" +] + + +class Component(ComponentBase): + """Platform-specific Component class""" + + DEVICE_TYPE = "component" + + def __init__(self, component_index=0): + ComponentBase.__init__(self) + self.index = component_index + self.name = self.get_name() + + def __get_bios_version(self): + # Retrieves the BIOS firmware version + try: + with open(BIOS_VERSION_PATH, 'r') as fd: + bios_version = fd.read() + return bios_version.strip() + except Exception as e: + return None + + def __get_sysfs_value(self, addr, name): + # Retrieves the cpld register value + try: + with open(SYSFS_PATH + addr + '/' + name, 'r') as fd: + return fd.read().strip() + except Exception as e: + return None + + def __get_cpld_version(self): + # Retrieves the CPLD firmware version + cpld_version = dict() + for cpld_name in CPLD_ADDR_MAPPING: + try: + cpld_addr = CPLD_ADDR_MAPPING[cpld_name] + cpld_version_raw = self.__get_sysfs_value(cpld_addr, "version") + cpld_version[cpld_name] = "{}".format( + int(cpld_version_raw, 16)) + except Exception as e: + cpld_version[cpld_name] = 'None' + + return cpld_version + + def get_name(self): + """ + Retrieves the name of the component + Returns: + A string containing the name of the component + """ + return COMPONENT_NAME_LIST[self.index] + + def get_description(self): + """ + Retrieves the description of the component + Returns: + A string containing the description of the component + """ + return COMPONENT_DES_LIST[self.index] + + def get_firmware_version(self): + """ + Retrieves the firmware version of module + Returns: + string: The firmware versions of the module + """ + fw_version = None + + if self.name == "BIOS": + fw_version = self.__get_bios_version() + elif "CPLD" in self.name: + cpld_version = self.__get_cpld_version() + fw_version = cpld_version.get(self.name) + + return fw_version + + def install_firmware(self, image_path): + """ + Install firmware to module + Args: + image_path: A string, path to firmware image + Returns: + A boolean, True if install successfully, False if not + """ + raise NotImplementedError + + def get_presence(self): + """ + Retrieves the presence of the device + Returns: + bool: True if device is present, False if not + """ + return True + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + return 'N/A' + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + return 'N/A' + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + return True + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + If the agent cannot determine the parent-relative position + for some reason, or if the associated value of + entPhysicalContainedIn is'0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device + or -1 if cannot determine the position + """ + return -1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return False + diff --git a/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/eeprom.py b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/eeprom.py new file mode 100644 index 000000000000..d0bffe53a279 --- /dev/null +++ b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/eeprom.py @@ -0,0 +1,139 @@ +try: + import os + import sys + import re + from sonic_platform_base.sonic_eeprom import eeprom_tlvinfo + if sys.version_info[0] >= 3: + from io import StringIO + else: + from cStringIO import StringIO +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +CACHE_ROOT = '/var/cache/sonic/decode-syseeprom' +CACHE_FILE = 'syseeprom_cache' +NULL = 'N/A' + +class Tlv(eeprom_tlvinfo.TlvInfoDecoder): + + EEPROM_DECODE_HEADLINES = 6 + + def __init__(self): + #self._eeprom_path = "/sys/bus/i2c/devices/0-0056/eeprom" + exists = os.path.isfile('/sys/bus/i2c/devices/0-0056/eeprom') + if (exists is True): + self._eeprom_path = "/sys/bus/i2c/devices/0-0056/eeprom" + else: + self._eeprom_path = "/sys/bus/i2c/devices/0-0057/eeprom" + + super(Tlv, self).__init__(self._eeprom_path, 0, '', True) + self._eeprom = self._load_eeprom() + + def __parse_output(self, decode_output): + decode_output.replace('\0', '') + lines = decode_output.split('\n') + lines = lines[self.EEPROM_DECODE_HEADLINES:] + _eeprom_info_dict = dict() + + for line in lines: + try: + match = re.search('(0x[0-9a-fA-F]{2})([\s]+[\S]+[\s]+)([\S]+)', + line) + if match is not None: + idx = match.group(1) + value = match.group(3).rstrip('\0') + + _eeprom_info_dict[idx] = value + except Exception: + pass + + return _eeprom_info_dict + + def _load_eeprom(self): + original_stdout = sys.stdout + sys.stdout = StringIO() + try: + self.read_eeprom_db() + except Exception: + decode_output = sys.stdout.getvalue() + sys.stdout = original_stdout + return self.__parse_output(decode_output) + + status = self.check_status() + if 'ok' not in status: + return False + + if not os.path.exists(CACHE_ROOT): + try: + os.makedirs(CACHE_ROOT) + except Exception: + pass + + # + # only the eeprom classes that inherit from eeprom_base + # support caching. Others will work normally + # + try: + self.set_cache_name(os.path.join(CACHE_ROOT, CACHE_FILE)) + except Exception: + pass + + e = self.read_eeprom() + if e is None: + return 0 + + try: + self.update_cache(e) + except Exception: + pass + + self.decode_eeprom(e) + decode_output = sys.stdout.getvalue() + sys.stdout = original_stdout + + (is_valid, valid_crc) = self.is_checksum_valid(e) + if not is_valid: + return False + + return self.__parse_output(decode_output) + + def _valid_tlv(self, eeprom_data): + tlvinfo_type_codes_list = [ + self._TLV_CODE_PRODUCT_NAME, + self._TLV_CODE_PART_NUMBER, + self._TLV_CODE_SERIAL_NUMBER, + self._TLV_CODE_MAC_BASE, + self._TLV_CODE_MANUF_DATE, + self._TLV_CODE_DEVICE_VERSION, + self._TLV_CODE_LABEL_REVISION, + self._TLV_CODE_PLATFORM_NAME, + self._TLV_CODE_ONIE_VERSION, + self._TLV_CODE_MAC_SIZE, + self._TLV_CODE_MANUF_NAME, + self._TLV_CODE_MANUF_COUNTRY, + self._TLV_CODE_VENDOR_NAME, + self._TLV_CODE_DIAG_VERSION, + self._TLV_CODE_SERVICE_TAG, + self._TLV_CODE_VENDOR_EXT, + self._TLV_CODE_CRC_32 + ] + + for code in tlvinfo_type_codes_list: + code_str = "0x{:X}".format(code) + eeprom_data[code_str] = eeprom_data.get(code_str, NULL) + return eeprom_data + + def get_eeprom(self): + return self._valid_tlv(self._eeprom) + + def get_pn(self): + return self._eeprom.get('0x22', NULL) + + def get_serial(self): + return self._eeprom.get('0x23', NULL) + + def get_mac(self): + return self._eeprom.get('0x24', NULL) + + def get_product_name(self): + return self._eeprom.get('0x21', NULL) diff --git a/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/event.py b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/event.py new file mode 100644 index 000000000000..3d6f81518a26 --- /dev/null +++ b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/event.py @@ -0,0 +1,60 @@ +try: + import time + from sonic_py_common.logger import Logger +except ImportError as e: + raise ImportError(repr(e) + " - required module not found") + +POLL_INTERVAL_IN_SEC = 1 + +class SfpEvent: + ''' Listen to insert/remove sfp events ''' + + def __init__(self, sfp_list): + self._sfp_list = sfp_list + self._logger = Logger() + self._sfp_change_event_data = {'present': 0} + + def get_presence_bitmap(self): + bitmap = 0 + for sfp in self._sfp_list: + modpres = sfp.get_presence() + i=sfp.port_num-1 + if modpres: + bitmap = bitmap | (1 << i) + return bitmap + + def get_sfp_event(self, timeout=2000): + port_dict = {} + change_dict = {} + change_dict['sfp'] = port_dict + + if timeout < 1000: + cd_ms = 1000 + else: + cd_ms = timeout + + while cd_ms > 0: + bitmap = self.get_presence_bitmap() + changed_ports = self._sfp_change_event_data['present'] ^ bitmap + if changed_ports != 0: + break + time.sleep(POLL_INTERVAL_IN_SEC) + # timeout=0 means wait for event forever + if timeout != 0: + cd_ms = cd_ms - POLL_INTERVAL_IN_SEC * 1000 + + if changed_ports != 0: + for sfp in self._sfp_list: + i=sfp.port_num-1 + if (changed_ports & (1 << i)): + if (bitmap & (1 << i)) == 0: + port_dict[i+1] = '0' + else: + port_dict[i+1] = '1' + + + # Update the cache dict + self._sfp_change_event_data['present'] = bitmap + return True, change_dict + else: + return True, change_dict diff --git a/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/fan.py b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/fan.py new file mode 100644 index 000000000000..c64d953b758b --- /dev/null +++ b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/fan.py @@ -0,0 +1,270 @@ +############################################################################# +# Edgecore +# +# Module contains an implementation of SONiC Platform Base API and +# provides the fan status which are available in the platform +# +############################################################################# + +try: + from sonic_platform_base.fan_base import FanBase +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +FAN_MAX_RPM = 25500 +PSU_FAN_MAX_RPM = 25500 +SPEED_TOLERANCE = 15 +CPLD_I2C_PATH = "/sys/bus/i2c/devices/11-0066/fan" +PSU_I2C_PATH = "/sys/bus/i2c/devices/{}-00{}/" +PSU_HWMON_I2C_MAPPING = { + 0: { + "bus": 17, + "addr": "59" + }, + 1: { + "bus": 13, + "addr": "5b" + }, +} + +PSU_CPLD_I2C_MAPPING = { + 0: { + "bus": 17, + "addr": "51" + }, + 1: { + "bus": 13, + "addr": "53" + }, +} + +FAN_NAME_LIST = ["FAN-1F", "FAN-1R", "FAN-2F", "FAN-2R", + "FAN-3F", "FAN-3R", "FAN-4F", "FAN-4R", + "FAN-5F", "FAN-5R", "FAN-6F", "FAN-6R"] + +class Fan(FanBase): + """Platform-specific Fan class""" + + def __init__(self, + fan_tray_index, + fan_index=0, + is_psu_fan=False, + psu_index=0): + self.fan_index = fan_index + self.fan_tray_index = fan_tray_index + self.is_psu_fan = is_psu_fan + self.psu_index = psu_index + + if self.is_psu_fan: + psu_i2c_bus = PSU_HWMON_I2C_MAPPING[psu_index]["bus"] + psu_i2c_addr = PSU_HWMON_I2C_MAPPING[psu_index]["addr"] + self.psu_hwmon_path = PSU_I2C_PATH.format(psu_i2c_bus, + psu_i2c_addr) + psu_i2c_bus = PSU_CPLD_I2C_MAPPING[psu_index]["bus"] + psu_i2c_addr = PSU_CPLD_I2C_MAPPING[psu_index]["addr"] + self.cpld_path = PSU_I2C_PATH.format(psu_i2c_bus, psu_i2c_addr) + + FanBase.__init__(self) + + def __read_txt_file(self, file_path): + try: + with open(file_path, 'r') as fd: + return fd.read().strip() + except IOError: + pass + return "" + + def __write_txt_file(self, file_path, value): + try: + with open(file_path, 'w') as fd: + fd.write(str(value)) + except Exception: + return False + return True + + def get_direction(self): + """ + Retrieves the direction of fan + Returns: + A string, either FAN_DIRECTION_INTAKE or FAN_DIRECTION_EXHAUST + depending on fan direction + """ + if not self.is_psu_fan: + val = self.__read_txt_file( + CPLD_I2C_PATH + str(self.fan_tray_index+1) + "_direction") + direction = self.FAN_DIRECTION_EXHAUST if ( + val == "0") else self.FAN_DIRECTION_INTAKE + else: + val = self.__read_txt_file(self.psu_hwmon_path + "psu_fan_dir") + direction = self.FAN_DIRECTION_EXHAUST if ( + val == "F2B") else self.FAN_DIRECTION_INTAKE + return direction + + def get_speed(self): + """ + Retrieves the speed of fan as a percentage of full speed + Returns: + An integer, the percentage of full fan speed, in the range 0 (off) + to 100 (full speed) + """ + speed = 0 + if self.is_psu_fan: + speed = self.__read_txt_file( + self.psu_hwmon_path + "psu_fan1_speed_rpm") + speed = (int(speed, 10)) * 100 / PSU_FAN_MAX_RPM + speed = 100 if (speed > 100) else speed + elif self.get_presence(): + speed = self.__read_txt_file(CPLD_I2C_PATH + str( + self.fan_index * 10 + self.fan_tray_index + 1) + "_input") + speed = (int(speed, 10)) * 100 / FAN_MAX_RPM + speed = 100 if (speed > 100) else speed + return int(speed) + + def get_target_speed(self): + """ + Retrieves the target (expected) speed of the fan + Returns: + An integer, the percentage of full fan speed, in the range 0 (off) + to 100 (full speed) + Note: + speed_pc = pwm_target/255*100 + 0 : when PWM mode is use + pwm : when pwm mode is not use + """ + return self.get_speed() + + def get_speed_tolerance(self): + """ + Retrieves the speed tolerance of the fan + Returns: + An integer, the percentage of variance from target speed which is + considered tolerable + """ + return SPEED_TOLERANCE + + def set_speed(self, speed): + """ + Sets the fan speed + Args: + speed: An integer, the percentage of full fan speed to set fan to, + in the range 0 (off) to 100 (full speed) + Returns: + A boolean, True if speed is set successfully, False if not + """ + + if not self.is_psu_fan and self.get_presence(): + return self.__write_txt_file( + CPLD_I2C_PATH + "_duty_cycle_percentage", int(speed)) + + return False + + def set_status_led(self, color): + """ + Sets the state of the fan module status LED + Args: + color: A string representing the color with which to set the + fan module status LED + Returns: + bool: True if status LED state is set successfully, False if not + """ + return False #Not supported + + def get_status_led(self): + """ + Gets the state of the fan status LED + Returns: + A string, one of the predefined STATUS_LED_COLOR_* strings above + """ + status=self.get_presence() + if status is None: + return self.STATUS_LED_COLOR_OFF + + return { + 1: self.STATUS_LED_COLOR_GREEN, + 0: self.STATUS_LED_COLOR_RED + }.get(status, self.STATUS_LED_COLOR_OFF) + + def get_name(self): + """ + Retrieves the name of the device + Returns: + string: The name of the device + """ + fan_name = FAN_NAME_LIST[self.fan_tray_index*2 + self.fan_index] \ + if not self.is_psu_fan \ + else "PSU-{} FAN-{}".format(self.psu_index+1, self.fan_index+1) + + return fan_name + + def get_presence(self): + """ + Retrieves the presence of the PSU + Returns: + bool: True if PSU is present, False if not + """ + if self.is_psu_fan: + val = self.__read_txt_file(self.cpld_path + "psu_present") + return int(val, 10) == 1 + + val = self.__read_txt_file( + CPLD_I2C_PATH + str(self.fan_tray_index + 1) + "_present") + return int(val, 10)==1 + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + if self.is_psu_fan: + psu_fan_path= "{}{}".format(self.psu_hwmon_path, 'psu_fan1_fault') + val=self.__read_txt_file(psu_fan_path) + if val is not None: + return int(val, 10)==0 + else: + return False + else: + path = "{}{}{}".format(CPLD_I2C_PATH, self.fan_tray_index+1, '_fault') + val=self.__read_txt_file(path) + if val is not None: + return int(val, 10)==0 + else: + return False + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + + return "N/A" + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + return "N/A" + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + If the agent cannot determine the parent-relative position + for some reason, or if the associated value of + entPhysicalContainedIn is'0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device + or -1 if cannot determine the position + """ + return (self.fan_index+1) \ + if not self.is_psu_fan else (self.psu_index+1) + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True if not self.is_psu_fan else False diff --git a/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/fan_drawer.py b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/fan_drawer.py new file mode 100644 index 000000000000..e21163c106c1 --- /dev/null +++ b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/fan_drawer.py @@ -0,0 +1,90 @@ +######################################################################## +# +# Module contains an implementation of SONiC Platform Base API and +# provides the Fan-Drawers' information available in the platform. +# +######################################################################## + +try: + from sonic_platform_base.fan_drawer_base import FanDrawerBase +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +FANS_PER_FANTRAY = 2 + + +class FanDrawer(FanDrawerBase): + """Platform-specific Fan class""" + + def __init__(self, fantray_index): + + FanDrawerBase.__init__(self) + # FanTray is 0-based in platforms + self.fantrayindex = fantray_index + self.__initialize_fan_drawer() + + + def __initialize_fan_drawer(self): + from sonic_platform.fan import Fan + for i in range(FANS_PER_FANTRAY): + self._fan_list.append(Fan(self.fantrayindex, i)) + + def get_name(self): + """ + Retrieves the fan drawer name + Returns: + string: The name of the device + """ + return "FanTray{}".format(self.fantrayindex+1) + + def get_presence(self): + """ + Retrieves the presence of the device + Returns: + bool: True if device is present, False if not + """ + return self._fan_list[0].get_presence() + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + return self._fan_list[0].get_model() + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + return self._fan_list[0].get_serial() + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + return self._fan_list[0].get_status() + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + If the agent cannot determine the parent-relative position + for some reason, or if the associated value of + entPhysicalContainedIn is'0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device + or -1 if cannot determine the position + """ + return (self.fantrayindex+1) + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True diff --git a/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/platform.py b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/platform.py new file mode 100644 index 000000000000..2f2c2a447fcf --- /dev/null +++ b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/platform.py @@ -0,0 +1,21 @@ +############################################################################# +# Edgecore +# +# Module contains an implementation of SONiC Platform Base API and +# provides the platform information +# +############################################################################# + +try: + from sonic_platform_base.platform_base import PlatformBase + from sonic_platform.chassis import Chassis +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class Platform(PlatformBase): + """Platform-specific Platform class""" + + def __init__(self): + PlatformBase.__init__(self) + self._chassis = Chassis() diff --git a/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/psu.py b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/psu.py new file mode 100644 index 000000000000..44566aba1f3c --- /dev/null +++ b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/psu.py @@ -0,0 +1,264 @@ +############################################################################# +# Edgecore +# +# Module contains an implementation of SONiC Platform Base API and +# provides the PSUs status which are available in the platform +# +############################################################################# + +#import sonic_platform + +try: + from sonic_platform_base.psu_base import PsuBase + from sonic_platform.thermal import Thermal +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +I2C_PATH = "/sys/bus/i2c/devices/{}-00{}/" + +PSU_NAME_LIST = ["PSU-1", "PSU-2"] +PSU_NUM_FAN = [1, 1] +PSU_HWMON_I2C_MAPPING = { + 0: { + "bus": 17, + "addr": "59" + }, + 1: { + "bus": 13, + "addr": "5b" + }, +} + +PSU_CPLD_I2C_MAPPING = { + 0: { + "bus": 17, + "addr": "51" + }, + 1: { + "bus": 13, + "addr": "53" + }, +} + +NUM_FAN_TRAY = 6 + + +class Psu(PsuBase): + """Platform-specific Psu class""" + + def __init__(self, psu_index=0): + PsuBase.__init__(self) + self.index = psu_index + + bus = PSU_HWMON_I2C_MAPPING[self.index]["bus"] + addr = PSU_HWMON_I2C_MAPPING[self.index]["addr"] + self.hwmon_path = I2C_PATH.format(bus, addr) + + bus = PSU_CPLD_I2C_MAPPING[self.index]["bus"] + addr = PSU_CPLD_I2C_MAPPING[self.index]["addr"] + self.cpld_path = I2C_PATH.format(bus, addr) + self.__initialize_fan() + + def __initialize_fan(self): + from sonic_platform.fan import Fan + self._fan_list.append( + Fan(NUM_FAN_TRAY + self.index, + is_psu_fan=True, + psu_index=self.index)) + self._thermal_list.append(Thermal(is_psu=True, psu_index=self.index)) + + def __read_txt_file(self, file_path): + try: + with open(file_path, 'r') as fd: + return fd.read().strip() + except IOError: + pass + return None + + def get_voltage(self): + """ + Retrieves current PSU voltage output + Returns: + A float number, the output voltage in volts, + e.g. 12.1 + """ + val = self.__read_txt_file(self.hwmon_path + "psu_v_out") + if val is not None: + return float(val)/ 1000 + else: + return 0 + + def get_current(self): + """ + Retrieves present electric current supplied by PSU + Returns: + A float number, the electric current in amperes, e.g 15.4 + """ + val = self.__read_txt_file(self.hwmon_path + "psu_i_out") + if val is not None: + return float(val)/1000 + else: + return 0 + + def get_power(self): + """ + Retrieves current energy supplied by PSU + Returns: + A float number, the power in watts, e.g. 302.6 + """ + val = self.__read_txt_file(self.hwmon_path + "psu_p_out") + if val is not None: + return float(val)/1000 + else: + return 0 + + def get_powergood_status(self): + """ + Retrieves the powergood status of PSU + Returns: + A boolean, True if PSU has stablized its output voltages and passed all + its internal self-tests, False if not. + """ + return self.get_status() + + def set_status_led(self, color): + """ + Sets the state of the PSU status LED + Args: + color: A string representing the color with which to set the PSU status LED + Note: Only support green and off + Returns: + bool: True if status LED state is set successfully, False if not + """ + + return False #Controlled by HW + + def get_status_led(self): + """ + Gets the state of the PSU status LED + Returns: + A string, one of the predefined STATUS_LED_COLOR_* strings above + """ + status=self.get_status() + if status is None: + return self.STATUS_LED_COLOR_OFF + + return { + 1: self.STATUS_LED_COLOR_GREEN, + 0: self.STATUS_LED_COLOR_RED + }.get(status, self.STATUS_LED_COLOR_OFF) + + def get_temperature(self): + """ + Retrieves current temperature reading from PSU + Returns: + A float number of current temperature in Celsius up to nearest thousandth + of one degree Celsius, e.g. 30.125 + """ + return self._thermal_list[0].get_temperature() + + def get_temperature_high_threshold(self): + """ + Retrieves the high threshold temperature of PSU + Returns: + A float number, the high threshold temperature of PSU in Celsius + up to nearest thousandth of one degree Celsius, e.g. 30.125 + """ + return False #Not supported + + def get_voltage_high_threshold(self): + """ + Retrieves the high threshold PSU voltage output + Returns: + A float number, the high threshold output voltage in volts, + e.g. 12.1 + """ + val = self.__read_txt_file(self.hwmon_path + "psu_mfr_vout_max") + if val is not None: + return float(val)/ 1000 + else: + return 0 + + def get_voltage_low_threshold(self): + """ + Retrieves the low threshold PSU voltage output + Returns: + A float number, the low threshold output voltage in volts, + e.g. 12.1 + """ + val = self.__read_txt_file(self.hwmon_path + "psu_mfr_vout_min") + if val is not None: + return float(val)/ 1000 + else: + return 0 + + def get_name(self): + """ + Retrieves the name of the device + Returns: + string: The name of the device + """ + return PSU_NAME_LIST[self.index] + + def get_presence(self): + """ + Retrieves the presence of the PSU + Returns: + bool: True if PSU is present, False if not + """ + val = self.__read_txt_file(self.cpld_path + "psu_present") + if val is not None: + return int(val, 10) == 1 + else: + return 0 + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + val = self.__read_txt_file(self.cpld_path + "psu_power_good") + if val is not None: + return int(val, 10) == 1 + else: + return 0 + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + model = self.__read_txt_file(self.cpld_path + "psu_model_name") + if model is None: + return "N/A" + return model + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + serial = self.__read_txt_file(self.cpld_path + "psu_serial_number") + if serial is None: + return "N/A" + return serial + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return self.index+1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True diff --git a/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/sfp.py b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/sfp.py new file mode 100644 index 000000000000..95a54e554a01 --- /dev/null +++ b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/sfp.py @@ -0,0 +1,626 @@ +############################################################################# +# Edgecore +# +# Sfp contains an implementation of SONiC Platform Base API and +# provides the sfp device status which are available in the platform +# +############################################################################# + +import os +import time +import sys + +from ctypes import create_string_buffer + +try: + from sonic_platform_base.sonic_xcvr.sfp_optoe_base import SfpOptoeBase + from sonic_platform_base.sonic_sfp.sfputilhelper import SfpUtilHelper +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +CPLD_ADDR_MAPPING = { + 0: { + "bus": 18, + "addr": "60" + }, # port 31-56 + 1: { + "bus": 12, + "addr": "62" + }, # port 1-30 +} +CPLD_I2C_PATH = "/sys/bus/i2c/devices/{}-00{}/" + +class Sfp(SfpOptoeBase): + """Platform-specific Sfp class""" + + # Port number + PORT_START = 1 + PORT_END = 58 + + # Path to sysfs + PLATFORM_ROOT_PATH = "/usr/share/sonic/device" + PMON_HWSKU_PATH = "/usr/share/sonic/hwsku" + HOST_CHK_CMD = "which systemctl > /dev/null 2>&1" + + PLATFORM = "x86_64-accton_as7326_56x-r0" + HWSKU = "Accton-AS7326-56X" + + _port_to_i2c_mapping = { + 1: [42], + 2: [41], + 3: [44], + 4: [43], + 5: [47], + 6: [45], + 7: [46], + 8: [50], + 9: [48], + 10: [49], + 11: [52], + 12: [51], + 13: [53], + 14: [56], + 15: [55], + 16: [54], + 17: [58], + 18: [57], + 19: [60], + 20: [59], + 21: [61], + 22: [63], + 23: [62], + 24: [64], + 25: [66], + 26: [68], + 27: [65], + 28: [67], + 29: [69], + 30: [71], + 31: [72], + 32: [70], + 33: [74], + 34: [73], + 35: [76], + 36: [75], + 37: [77], + 38: [79], + 39: [78], + 40: [80], + 41: [81], + 42: [82], + 43: [84], + 44: [85], + 45: [83], + 46: [87], + 47: [88], + 48: [86], + 49: [25], + 50: [26], + 51: [27], + 52: [28], + 53: [29], + 54: [30], + 55: [31], + 56: [32], + 57: [22], + 58: [23] + } + + def __init__(self, sfp_index=0): + SfpOptoeBase.__init__(self) + # Init index + self.index = sfp_index + self.port_num = self.index + 1 + + cpld_idx = 0 if self.port_num > 30 else 1 + bus = CPLD_ADDR_MAPPING[cpld_idx]["bus"] + addr = CPLD_ADDR_MAPPING[cpld_idx]["addr"] + self.cpld_path = CPLD_I2C_PATH.format(bus, addr) + + # Init eeprom path + eeprom_path = '/sys/bus/i2c/devices/{0}-0050/eeprom' + self.port_to_eeprom_mapping = {} + for x in range(self.PORT_START, self.PORT_END + 1): + self.port_to_eeprom_mapping[x] = eeprom_path.format( + self._port_to_i2c_mapping[x][0]) + + def get_eeprom_path(self): + return self.port_to_eeprom_mapping[self.port_num] + + def __read_txt_file(self, file_path): + try: + with open(file_path, 'r') as fd: + return fd.read().strip() + except IOError: + pass + return "" + + def __write_txt_file(self, file_path, value): + try: + with open(file_path, 'w') as fd: + fd.write(str(value)) + except Exception: + return False + return True + + def __is_host(self): + return os.system(self.HOST_CHK_CMD) == 0 + + def __get_path_to_port_config_file(self): + platform_path = "/".join([self.PLATFORM_ROOT_PATH, self.PLATFORM]) + hwsku_path = "/".join( + [platform_path, + self.HWSKU]) if self.__is_host() else self.PMON_HWSKU_PATH + return "/".join([hwsku_path, "port_config.ini"]) + + def __read_eeprom_specific_bytes(self, offset, num_bytes): + sysfsfile_eeprom = None + eeprom_raw = [] + for i in range(0, num_bytes): + eeprom_raw.append("0x00") + + sysfs_sfp_i2c_client_eeprom_path = self.port_to_eeprom_mapping[ + self.port_num] + try: + sysfsfile_eeprom = open( + sysfs_sfp_i2c_client_eeprom_path, mode="rb", buffering=0) + sysfsfile_eeprom.seek(offset) + raw = sysfsfile_eeprom.read(num_bytes) + for n in range(0, num_bytes): + if sys.version_info[0] >= 3: + eeprom_raw[n] = hex(raw[n])[2:].zfill(2) + else: + eeprom_raw[n] = hex(ord(raw[n]))[2:].zfill(2) + except Exception: + pass + finally: + if sysfsfile_eeprom: + sysfsfile_eeprom.close() + + return eeprom_raw + + def get_reset_status(self): + """ + Retrieves the reset status of SFP + Returns: + A Boolean, True if reset enabled, False if disabled + """ + if self.port_num <= 48 or self.port_num >=57: + return False # SPF port doesn't support this feature + + val = self.__read_txt_file( + self.cpld_path + "module_reset_" + str(self.port_num)) + return int(val, 10) == 1 + + def get_rx_los(self): + """ + Retrieves the RX LOS (lost-of-signal) status of SFP + Returns: + A Boolean, True if SFP has RX LOS, False if not. + Note : RX LOS status is latched until a call to get_rx_los or a reset. + """ + if self.port_num <= 48 or self.port_num >=57: + rx_los = self.__read_txt_file( + self.cpld_path + "module_rx_los_" + str(self.port_num)) + if int(rx_los, 10) == 1: + return [True] + else: + return [False] + #status_control_raw = self.__read_eeprom_specific_bytes( + # SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) + #if status_control_raw: + # data = int(status_control_raw[0], 16) + # rx_los = (sffbase().test_bit(data, 1) != 0) + else: + rx_los_list = [] + dom_channel_monitor_raw = self.__read_eeprom_specific_bytes( + QSFP_CHANNL_RX_LOS_STATUS_OFFSET, + QSFP_CHANNL_RX_LOS_STATUS_WIDTH) if self.get_presence( + ) else None + 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 & 0x01 != 0) + rx_los_list.append(rx_los_data & 0x02 != 0) + rx_los_list.append(rx_los_data & 0x04 != 0) + rx_los_list.append(rx_los_data & 0x08 != 0) + return rx_los_list + else: + return [False]*4 + + def get_tx_fault(self): + """ + Retrieves the TX fault status of SFP + + Returns: + A list of boolean values, representing the TX fault status + of each available channel, value is True if SFP channel + has TX fault, False if not. + E.g., for a tranceiver with four channels: [False, False, True, False] + Note : TX fault status is lached until a call to get_tx_fault or a reset. + """ + tx_fault = False + if self.port_num <= 48 or self.port_num >=57: + tx_fault = self.__read_txt_file( + self.cpld_path + "module_tx_fault_" + str(self.port_num)) + if int(tx_fault, 10) == 1: + return [True] + else: + return [False] + #status_control_raw = self.__read_eeprom_specific_bytes( + # SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) + #if status_control_raw: + # data = int(status_control_raw[0], 16) + # tx_fault = (sffbase().test_bit(data, 2) != 0) + else: + tx_fault_list = [] + dom_channel_monitor_raw = self.__read_eeprom_specific_bytes( + QSFP_CHANNL_TX_FAULT_STATUS_OFFSET, + QSFP_CHANNL_TX_FAULT_STATUS_WIDTH) if self.get_presence( + ) else None + 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 & 0x01 != 0) + tx_fault_list.append(tx_fault_data & 0x02 != 0) + tx_fault_list.append(tx_fault_data & 0x04 != 0) + tx_fault_list.append(tx_fault_data & 0x08 != 0) + return tx_fault_list + else: + return [False]*4 + + + def get_tx_disable(self): + """ + Retrieves the tx_disable status of this SFP + Returns: + A list of boolean values, representing the TX disable status + of each available channel, value is True if SFP channel + is TX disabled, False if not. + E.g., for a tranceiver with four channels: [False, False, True, False] + """ + if self.port_num <= 48 or self.port_num >=57: + tx_disable = False + + status_control_raw = self.__read_eeprom_specific_bytes( + SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) + if status_control_raw: + cpld_val = self.__read_txt_file( + self.cpld_path + "module_tx_disable_" + str(self.port_num)) + tx_disable_hard = (int(cpld_val, 10) == 1) + data = int(status_control_raw[0], 16) + #tx_disable_hard = (sffbase().test_bit( + # data, SFP_TX_DISABLE_HARD_BIT) != 0) + tx_disable_soft = (sffbase().test_bit( + data, SFP_TX_DISABLE_SOFT_BIT) != 0) + tx_disable = tx_disable_hard | tx_disable_soft + if tx_disable==0: + return [False] + else: + return [True] + + else: + return [False] + + else: + tx_disable_list = [] + + sfpd_obj = sff8436Dom() + if sfpd_obj is None: + return [False] + + dom_control_raw = self.__read_eeprom_specific_bytes( + QSFP_CONTROL_OFFSET, + QSFP_CONTROL_WIDTH) if self.get_presence() else None + if dom_control_raw is not None: + dom_control_data = sfpd_obj.parse_control_bytes( + dom_control_raw, 0) + tx_disable_list.append( + 'On' == dom_control_data['data']['TX1Disable']['value']) + tx_disable_list.append( + 'On' == dom_control_data['data']['TX2Disable']['value']) + tx_disable_list.append( + 'On' == dom_control_data['data']['TX3Disable']['value']) + tx_disable_list.append( + 'On' == dom_control_data['data']['TX4Disable']['value']) + return tx_disable_list + else: + return [False]*4 + + def get_tx_disable_channel(self): + """ + Retrieves the TX disabled channels in this SFP + Returns: + A hex of 4 bits (bit 0 to bit 3 as channel 0 to channel 3) to represent + TX channels which have been disabled in this SFP. + As an example, a returned value of 0x5 indicates that channel 0 + and channel 2 have been disabled. + """ + tx_disable_list = self.get_tx_disable() + if tx_disable_list is None: + return 0 + tx_disabled = 0 + for i in range(len(tx_disable_list)): + if tx_disable_list[i]: + tx_disabled |= 1 << i + return tx_disabled + + 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 + """ + if self.port_num <= 48 or self.port_num >= 57: + # SFP doesn't support this feature + return False + + power_set = self.get_power_set() + power_override = self.get_power_override() + return power_set and power_override + + def get_power_set(self): + + if self.port_num <= 48 or self.port_num >= 57: + # SFP doesn't support this feature + return False + else: + power_set = False + + sfpd_obj = sff8436Dom() + if sfpd_obj is None: + return False + + dom_control_raw = self.__read_eeprom_specific_bytes( + QSFP_CONTROL_OFFSET, + QSFP_CONTROL_WIDTH) if self.get_presence() else None + if dom_control_raw is not None: + dom_control_data = sfpd_obj.parse_control_bytes( + dom_control_raw, 0) + power_set = ( + 'On' == dom_control_data['data']['PowerSet']['value']) + + return power_set + + def get_power_override(self): + """ + Retrieves the power-override status of this SFP + Returns: + A Boolean, True if power-override is enabled, False if disabled + """ + if self.port_num <= 48 or self.port_num >= 57: + return False # SFP doesn't support this feature + else: + power_override = False + + sfpd_obj = sff8436Dom() + if sfpd_obj is None: + return False + + dom_control_raw = self.__read_eeprom_specific_bytes( + QSFP_CONTROL_OFFSET, + QSFP_CONTROL_WIDTH) if self.get_presence() else None + if dom_control_raw is not None: + dom_control_data = sfpd_obj.parse_control_bytes( + dom_control_raw, 0) + power_override = ( + 'On' == dom_control_data['data']['PowerOverride']['value']) + + return power_override + + def reset(self): + """ + Reset SFP and return all user module settings to their default srate. + Returns: + A boolean, True if successful, False if not + """ + # Check for invalid port_num + if self.port_num <= 48 or self.port_num >=57: + return False # SFP doesn't support this feature + + ret = self.__write_txt_file( + self.cpld_path + "module_reset_" + str(self.port_num), 1) + if ret is not True: + return ret + + time.sleep(0.01) + ret = self.__write_txt_file( + self.cpld_path + "module_reset_" + str(self.port_num), 0) + time.sleep(0.2) + return ret + + def tx_disable(self, tx_disable): + """ + Disable SFP TX for all channels + Args: + tx_disable : A Boolean, True to enable tx_disable mode, False to disable + tx_disable mode. + Returns: + A boolean, True if tx_disable is set successfully, False if not + """ + if self.port_num <= 48 or self.port_num >=57: + ret = self.__write_txt_file( + self.cpld_path + "module_tx_disable_" + str(self.port_num), 1 + if tx_disable else 0) + time.sleep(0.01) + return ret + else: + if not self.get_presence(): + return False + + sysfsfile_eeprom = None + try: + tx_disable_ctl = 0xf if tx_disable else 0x0 + buffer = create_string_buffer(1) + if sys.version_info[0] >= 3: + buffer[0] = tx_disable_ctl + else: + buffer[0] = chr(tx_disable_ctl) + # Write to eeprom + sysfsfile_eeprom = open( + self.port_to_eeprom_mapping[self.port_num], "r+b") + sysfsfile_eeprom.seek(QSFP_CONTROL_OFFSET) + sysfsfile_eeprom.write(buffer[0]) + except IOError as e: + print("Error: unable to open file: %s" % str(e)) + return False + finally: + if sysfsfile_eeprom is not None: + sysfsfile_eeprom.close() + time.sleep(0.01) + return True + + def tx_disable_channel(self, channel, disable): + """ + Sets the tx_disable for specified SFP channels + Args: + channel : A hex of 4 bits (bit 0 to bit 3) which represent channel 0 to 3, + e.g. 0x5 for channel 0 and channel 2. + disable : A boolean, True to disable TX channels specified in channel, + False to enable + Returns: + A boolean, True if successful, False if not + """ + + if self.port_num <= 48 or self.port_num >=57: + return False # SFP doesn't support this feature + else: + if not self.get_presence(): + return False + + sysfsfile_eeprom = None + try: + channel_state = self.get_tx_disable_channel() + + for i in range(4): + channel_mask = (1 << i) + if not (channel & channel_mask): + continue + + if disable: + channel_state |= channel_mask + else: + channel_state &= ~channel_mask + + buffer = create_string_buffer(1) + if sys.version_info[0] >= 3: + buffer[0] = channel_state + else: + buffer[0] = chr(channel_state) + # Write to eeprom + sysfsfile_eeprom = open( + self.port_to_eeprom_mapping[self.port_num], "r+b") + sysfsfile_eeprom.seek(QSFP_CONTROL_OFFSET) + sysfsfile_eeprom.write(buffer[0]) + except IOError as e: + print("Error: unable to open file: %s" % str(e)) + return False + finally: + if sysfsfile_eeprom is not None: + sysfsfile_eeprom.close() + time.sleep(0.01) + return True + + 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 + """ + if self.port_num <= 48 or self.port_num >=57: + return False # SFP doesn't support this feature + + if lpmode: + return self.set_power_override(True, True) + else: + return self.set_power_override(True, False) + + def set_power_override(self, power_override, power_set): + """ + Sets SFP power level using power_override and power_set + Args: + power_override : + A Boolean, True to override set_lpmode and use power_set + to control SFP power, False to disable SFP power control + through power_override/power_set and use set_lpmode + to control SFP power. + power_set : + Only valid when power_override is True. + A Boolean, True to set SFP to low power mode, False to set + SFP to high power mode. + Returns: + A boolean, True if power-override and power_set are set successfully, + False if not + """ + if self.port_num <= 48 or self.port_num >=57: + return False # SFP doesn't support this feature + else: + if not self.get_presence(): + return False + try: + power_override_bit = (1 << 0) if power_override else 0 + power_set_bit = (1 << 1) if power_set else (1 << 3) + + buffer = create_string_buffer(1) + if sys.version_info[0] >= 3: + buffer[0] = (power_override_bit | power_set_bit) + else: + buffer[0] = chr(power_override_bit | power_set_bit) + # Write to eeprom + with open(self.port_to_eeprom_mapping[self.port_num], + "r+b") as fd: + fd.seek(QSFP_POWEROVERRIDE_OFFSET) + fd.write(buffer[0]) + time.sleep(0.01) + except Exception: + print("Error: unable to open file: %s" % str(e)) + return False + return True + + def get_name(self): + """ + Retrieves the name of the device + Returns: + string: The name of the device + """ + sfputil_helper = SfpUtilHelper() + sfputil_helper.read_porttab_mappings( + self.__get_path_to_port_config_file()) + name = sfputil_helper.logical[self.index] or "Unknown" + return name + + def get_presence(self): + """ + Retrieves the presence of the device + Returns: + bool: True if device is present, False if not + """ + val = self.__read_txt_file( + self.cpld_path + "module_present_" + str(self.port_num)) + return val == '1' + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + return self.get_presence() + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return self.port_num + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True diff --git a/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/thermal.py b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/thermal.py new file mode 100644 index 000000000000..b2233e7b5a72 --- /dev/null +++ b/device/accton/x86_64-accton_as7326_56x-r0/sonic_platform/thermal.py @@ -0,0 +1,232 @@ +############################################################################# +# Edgecore +# +# Thermal contains an implementation of SONiC Platform Base API and +# provides the thermal device status which are available in the platform +# +############################################################################# + +import os +import os.path +import glob + +try: + from sonic_platform_base.thermal_base import ThermalBase +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +PSU_I2C_PATH = "/sys/bus/i2c/devices/{}-00{}/" +PSU_HWMON_I2C_MAPPING = { + 0: { + "bus": 17, + "addr": "59" + }, + 1: { + "bus": 13, + "addr": "5b" + }, +} + +PSU_CPLD_I2C_MAPPING = { + 0: { + "bus": 17, + "addr": "51" + }, + 1: { + "bus": 13, + "addr": "53" + }, +} + + +class Thermal(ThermalBase): + """Platform-specific Thermal class""" + + THERMAL_NAME_LIST = [] + PSU_THERMAL_NAME_LIST = [] + SYSFS_PATH = "/sys/bus/i2c/devices" + + def __init__(self, thermal_index=0, is_psu=False, psu_index=0): + self.index = thermal_index + self.is_psu = is_psu + self.psu_index = psu_index + + if self.is_psu: + psu_i2c_bus = PSU_HWMON_I2C_MAPPING[psu_index]["bus"] + psu_i2c_addr = PSU_HWMON_I2C_MAPPING[psu_index]["addr"] + self.psu_hwmon_path = PSU_I2C_PATH.format(psu_i2c_bus, + psu_i2c_addr) + psu_i2c_bus = PSU_CPLD_I2C_MAPPING[psu_index]["bus"] + psu_i2c_addr = PSU_CPLD_I2C_MAPPING[psu_index]["addr"] + self.cpld_path = PSU_I2C_PATH.format(psu_i2c_bus, psu_i2c_addr) + + # Add thermal name + self.THERMAL_NAME_LIST.append("Temp sensor 1") + self.THERMAL_NAME_LIST.append("Temp sensor 2") + self.THERMAL_NAME_LIST.append("Temp sensor 3") + self.THERMAL_NAME_LIST.append("Temp sensor 4") + self.PSU_THERMAL_NAME_LIST.append("PSU-1 temp sensor 1") + self.PSU_THERMAL_NAME_LIST.append("PSU-2 temp sensor 1") + + # Set hwmon path + i2c_path = { + 0: "15-0048/hwmon/hwmon*/", + 1: "15-0049/hwmon/hwmon*/", + 2: "15-004a/hwmon/hwmon*/", + 3: "15-004b/hwmon/hwmon*/" + }.get(self.index, None) + + self.hwmon_path = "{}/{}".format(self.SYSFS_PATH, i2c_path) + self.ss_key = self.THERMAL_NAME_LIST[self.index] + self.ss_index = 1 + + def __read_txt_file(self, file_path): + for filename in glob.glob(file_path): + try: + with open(filename, 'r') as fd: + return fd.readline().rstrip() + except IOError as e: + pass + + def __get_temp(self, temp_file): + if not self.is_psu: + temp_file_path = os.path.join(self.hwmon_path, temp_file) + else: + temp_file_path = temp_file + + raw_temp = self.__read_txt_file(temp_file_path) + return float(raw_temp) / 1000 + + def __set_threshold(self, file_name, temperature): + if self.is_psu: + return True + + temp_file_path = os.path.join(self.hwmon_path, file_name) + try: + with open(temp_file_path, 'w') as fd: + fd.write(str(temperature)) + return True + except IOError: + return False + + def get_temperature(self): + """ + Retrieves current temperature reading from thermal + Returns: + A float number of current temperature in Celsius up to nearest thousandth + of one degree Celsius, e.g. 30.125 + """ + if not self.is_psu: + temp_file = "temp{}_input".format(self.ss_index) + else: + temp_file = self.psu_hwmon_path + "psu_temp1_input" + + return self.__get_temp(temp_file) + + def get_high_threshold(self): + """ + Retrieves the high threshold temperature of thermal + Returns: + A float number, the high threshold temperature of thermal in Celsius + up to nearest thousandth of one degree Celsius, e.g. 30.125 + """ + if self.is_psu: + return 0 + + temp_file = "temp{}_max".format(self.ss_index) + return self.__get_temp(temp_file) + + def set_high_threshold(self, temperature): + """ + Sets the high threshold temperature of thermal + Args : + temperature: A float number up to nearest thousandth of one degree Celsius, + e.g. 30.125 + Returns: + A boolean, True if threshold is set successfully, False if not + """ + temp_file = "temp{}_max".format(self.ss_index) + temperature = temperature *1000 + self.__set_threshold(temp_file, temperature) + + return True + + def get_name(self): + """ + Retrieves the name of the thermal device + Returns: + string: The name of the thermal device + """ + if self.is_psu: + return self.PSU_THERMAL_NAME_LIST[self.psu_index] + else: + return self.THERMAL_NAME_LIST[self.index] + + def get_presence(self): + """ + Retrieves the presence of the PSU + Returns: + bool: True if PSU is present, False if not + """ + if self.is_psu: + val = self.__read_txt_file(self.cpld_path + "psu_present") + return int(val, 10) == 1 + + temp_file = "temp{}_input".format(self.ss_index) + temp_file_path = os.path.join(self.hwmon_path, temp_file) + raw_txt = self.__read_txt_file(temp_file_path) + return raw_txt != None + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + if self.is_psu: + temp_file = self.psu_hwmon_path + "psu_temp_fault" + return self.get_presence() and (not int( + self.__read_txt_file(temp_file))) + + file_str = "temp{}_input".format(self.ss_index) + file_path = os.path.join(self.hwmon_path, file_str) + + raw_txt = self.__read_txt_file(file_path) + if raw_txt is None: + return False + else: + return int(raw_txt) != 0 + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + + return "N/A" + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + return "N/A" + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return self.index+1 + + def is_replaceable(self): + """ + Retrieves whether thermal module is replaceable + Returns: + A boolean value, True if replaceable, False if not + """ + return False diff --git a/device/accton/x86_64-accton_as7326_56x-r0/system_health_monitoring_config.json b/device/accton/x86_64-accton_as7326_56x-r0/system_health_monitoring_config.json new file mode 100644 index 000000000000..18d47b22a9d3 --- /dev/null +++ b/device/accton/x86_64-accton_as7326_56x-r0/system_health_monitoring_config.json @@ -0,0 +1,15 @@ +{ + "services_to_ignore": [], + "devices_to_ignore": [ + "asic", + "psu.temperature" + + ], + "user_defined_checkers": [], + "polling_interval": 60, + "led_color": { + "fault": "STATUS_LED_COLOR_RED", + "normal": "STATUS_LED_COLOR_GREEN", + "booting": "STATUS_LED_COLOR_GREEN_BLINK" + } +} diff --git a/device/accton/x86_64-accton_as7712_32x-r0/installer.conf b/device/accton/x86_64-accton_as7712_32x-r0/installer.conf index 14404194ef53..d0ed16575e73 100644 --- a/device/accton/x86_64-accton_as7712_32x-r0/installer.conf +++ b/device/accton/x86_64-accton_as7712_32x-r0/installer.conf @@ -1,3 +1,4 @@ CONSOLE_PORT=0x2f8 CONSOLE_DEV=1 CONSOLE_SPEED=115200 +ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="modprobe.blacklist=i2c-ismt,i2c_ismt,i2c-i801,i2c_i801" diff --git a/device/accton/x86_64-accton_as7712_32x-r0/pddf/pd-plugin.json b/device/accton/x86_64-accton_as7712_32x-r0/pddf/pd-plugin.json new file mode 100644 index 000000000000..7df46b922ec3 --- /dev/null +++ b/device/accton/x86_64-accton_as7712_32x-r0/pddf/pd-plugin.json @@ -0,0 +1,54 @@ +{ + "PSU": + { + "psu_present": + { + "i2c": + { + "valmap": { "1":true, "0":false } + } + }, + + "psu_power_good": + { + "i2c": + { + "valmap": { "1": true, "0":false } + } + }, + + "psu_fan_dir": + { + "i2c": + { + "valmap": { "F2B":"EXHAUST", "B2F":"INTAKE" } + } + }, + + "PSU_FAN_MAX_SPEED":"18000" + }, + + "FAN": + { + "direction": + { + "i2c": + { + "valmap": {"1":"EXHAUST", "0":"INTAKE"} + } + }, + + "present": + { + "i2c": + { + "valmap": {"1":true, "0":false} + } + }, + + "duty_cycle_to_pwm": "lambda dc: ((dc*100.0)/625 - 1)", + + "pwm_to_duty_cycle": "lambda pwm: (((pwm+1)*625.0)/100)" + } + +} diff --git a/device/accton/x86_64-accton_as7712_32x-r0/pddf/pddf-device.json b/device/accton/x86_64-accton_as7712_32x-r0/pddf/pddf-device.json new file mode 100644 index 000000000000..439a52ca9a59 --- /dev/null +++ b/device/accton/x86_64-accton_as7712_32x-r0/pddf/pddf-device.json @@ -0,0 +1,1792 @@ +{ + "PLATFORM": + { + "num_psus":2, + "num_fantrays":6, + "num_fans_pertray":2, + "num_ports":32, + "num_temps": 4, + "pddf_dev_types": + { + "description":"AS7712 - Below is the list of supported PDDF device types (chip names) for various components. If any component uses some other driver, we will create the client using 'echo > /new_device' method", + "CPLD": + [ + "i2c_cpld" + ], + "PSU": + [ + "psu_eeprom", + "psu_pmbus" + ], + "FAN": + [ + "fan_ctrl", + "fan_eeprom" + ], + "PORT_MODULE": + [ + "pddf_xcvr" + ] + + }, + "std_kos": + [ + "i2c-ismt", + "i2c-i801", + "i2c_dev", + "i2c_mux_pca954x", + "optoe" + ], + "pddf_kos": + [ + "pddf_client_module", + "pddf_cpld_module", + "pddf_cpld_driver", + "pddf_mux_module", + "pddf_xcvr_module", + "pddf_xcvr_driver_module", + "pddf_psu_driver_module", + "pddf_psu_module", + "pddf_fan_driver_module", + "pddf_fan_module", + "pddf_led_module", + "pddf_sysstatus_module" + ] + }, + + "SYSTEM": + { + "dev_info": {"device_type":"CPU", "device_name":"ROOT_COMPLEX", "device_parent":null}, + "i2c": + { + "CONTROLLERS": + [ + { "dev_name":"i2c-1", "dev":"SMBUS1" }, + { "dev_name":"i2c-0", "dev":"SMBUS0" } + ] + } + }, + + "SMBUS0": + { + "dev_info": {"device_type": "SMBUS", "device_name": "SMBUS0", "device_parent": "SYSTEM"}, + "i2c": + { + "topo_info": {"dev_addr": "0x0"}, + "DEVICES": + [ + {"dev": "EEPROM1"}, + {"dev": "MUX2"}, + {"dev": "MUX3"}, + {"dev": "MUX4"}, + {"dev": "MUX5"}, + {"dev": "MUX6"} + ] + } + }, + + "SMBUS1": + { + "dev_info": {"device_type": "SMBUS", "device_name": "SMBUS1", "device_parent": "SYSTEM"}, + "i2c": + { + "topo_info": {"dev_addr": "0x1"}, + "DEVICES": + [ + {"dev": "MUX1"} + ] + } + }, + "EEPROM1": + { + "dev_info": {"device_type": "EEPROM", "device_name": "EEPROM1", "device_parent": "SMBUS0"}, + "i2c": + { + "topo_info": {"parent_bus": "0x0", "dev_addr": "0x57", "dev_type": "24c02"}, + "dev_attr": {"access_mode": "BLOCK"}, + "attr_list": [ + {"attr_name": "eeprom"} + ] + } + }, + + "MUX1": + { + "dev_info": { "device_type":"MUX", "device_name":"MUX1", "device_parent":"SMBUS1"}, + "i2c": + { + "topo_info": { "parent_bus":"0x1", "dev_addr":"0x76", "dev_type":"pca9548"}, + "dev_attr": { "virt_bus":"0x2", "idle_state":"-2"}, + "channel": + [ + { "chn":"0", "dev":"FAN-CTRL" }, + { "chn":"1", "dev":"TEMP1" }, + { "chn":"1", "dev":"TEMP2" }, + { "chn":"1", "dev":"TEMP3" }, + { "chn":"1", "dev":"TEMP4" }, + { "chn":"2", "dev":"CPLD1" }, + { "chn":"3", "dev":"CPLD2" }, + { "chn":"4", "dev":"CPLD3" } + ] + } + }, + + "MUX2": + { + "dev_info": { "device_type":"MUX", "device_name":"MUX2", "device_parent":"SMBUS0"}, + "i2c": + { + "topo_info": { "parent_bus":"0x0", "dev_addr":"0x71", "dev_type":"pca9548"}, + "dev_attr": { "virt_bus":"0xa", "idle_state":"-2"}, + "channel": + [ + { "chn":"0", "dev":"PSU2" }, + { "chn":"1", "dev":"PSU1" } + ] + } + }, + + "FAN-CTRL": + { + "dev_info": { "device_type":"FAN", "device_name":"FAN-CTRL", "device_parent":"MUX1"}, + "i2c": + { + "topo_info": { "parent_bus":"0x2", "dev_addr":"0x66", "dev_type":"fan_ctrl"}, + "dev_attr": { "num_fantrays":"6"}, + "attr_list": + [ + { "attr_name":"fan1_present", "attr_devtype":"FAN-CTRL", "attr_offset":"0x0F", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"fan2_present", "attr_devtype":"FAN-CTRL", "attr_offset":"0x0F", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"fan3_present", "attr_devtype":"FAN-CTRL", "attr_offset":"0x0F", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"fan4_present", "attr_devtype":"FAN-CTRL", "attr_offset":"0x0F", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"fan5_present", "attr_devtype":"FAN-CTRL", "attr_offset":"0x0F", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"fan6_present", "attr_devtype":"FAN-CTRL", "attr_offset":"0x0F", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"fan7_present", "attr_devtype":"FAN-CTRL", "attr_offset":"0x0F", "attr_mask":"0x8", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"fan8_present", "attr_devtype":"FAN-CTRL", "attr_offset":"0x0F", "attr_mask":"0x8", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"fan9_present", "attr_devtype":"FAN-CTRL", "attr_offset":"0x0F", "attr_mask":"0x10", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"fan10_present", "attr_devtype":"FAN-CTRL", "attr_offset":"0x0F", "attr_mask":"0x10", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"fan11_present", "attr_devtype":"FAN-CTRL", "attr_offset":"0x0F", "attr_mask":"0x20", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"fan12_present", "attr_devtype":"FAN-CTRL", "attr_offset":"0x0F", "attr_mask":"0x20", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"fan1_direction", "attr_devtype":"FAN-CTRL", "attr_offset":"0x10", "attr_mask":"0x1", "attr_cmpval":"0x1", "attr_len":"1"}, + { "attr_name":"fan2_direction", "attr_devtype":"FAN-CTRL", "attr_offset":"0x10", "attr_mask":"0x1", "attr_cmpval":"0x1", "attr_len":"1"}, + { "attr_name":"fan3_direction", "attr_devtype":"FAN-CTRL", "attr_offset":"0x10", "attr_mask":"0x2", "attr_cmpval":"0x2", "attr_len":"1"}, + { "attr_name":"fan4_direction", "attr_devtype":"FAN-CTRL", "attr_offset":"0x10", "attr_mask":"0x2", "attr_cmpval":"0x2", "attr_len":"1"}, + { "attr_name":"fan5_direction", "attr_devtype":"FAN-CTRL", "attr_offset":"0x10", "attr_mask":"0x4", "attr_cmpval":"0x4", "attr_len":"1"}, + { "attr_name":"fan6_direction", "attr_devtype":"FAN-CTRL", "attr_offset":"0x10", "attr_mask":"0x4", "attr_cmpval":"0x4", "attr_len":"1"}, + { "attr_name":"fan7_direction", "attr_devtype":"FAN-CTRL", "attr_offset":"0x10", "attr_mask":"0x8", "attr_cmpval":"0x8", "attr_len":"1"}, + { "attr_name":"fan8_direction", "attr_devtype":"FAN-CTRL", "attr_offset":"0x10", "attr_mask":"0x8", "attr_cmpval":"0x8", "attr_len":"1"}, + { "attr_name":"fan9_direction", "attr_devtype":"FAN-CTRL", "attr_offset":"0x10", "attr_mask":"0x10", "attr_cmpval":"0x10", "attr_len":"1"}, + { "attr_name":"fan10_direction", "attr_devtype":"FAN-CTRL", "attr_offset":"0x10", "attr_mask":"0x10", "attr_cmpval":"0x10", "attr_len":"1"}, + { "attr_name":"fan11_direction", "attr_devtype":"FAN-CTRL", "attr_offset":"0x10", "attr_mask":"0x20", "attr_cmpval":"0x20", "attr_len":"1"}, + { "attr_name":"fan12_direction", "attr_devtype":"FAN-CTRL", "attr_offset":"0x10", "attr_mask":"0x20", "attr_cmpval":"0x20", "attr_len":"1"}, + { "attr_name":"fan1_input", "attr_devtype":"FAN-CTRL", "attr_offset":"0x12", "attr_mask":"0xFF", "attr_len":"1", "attr_mult":"100", "attr_is_divisor":0}, + { "attr_name":"fan2_input", "attr_devtype":"FAN-CTRL", "attr_offset":"0x22", "attr_mask":"0xFF", "attr_len":"1", "attr_mult":"100" , "attr_is_divisor":0}, + { "attr_name":"fan3_input", "attr_devtype":"FAN-CTRL", "attr_offset":"0x13", "attr_mask":"0xFF", "attr_len":"1", "attr_mult":"100", "attr_is_divisor":0}, + { "attr_name":"fan4_input", "attr_devtype":"FAN-CTRL", "attr_offset":"0x23", "attr_mask":"0xFF", "attr_len":"1", "attr_mult":"100" , "attr_is_divisor":0}, + { "attr_name":"fan5_input", "attr_devtype":"FAN-CTRL", "attr_offset":"0x14", "attr_mask":"0xFF", "attr_len":"1", "attr_mult":"100", "attr_is_divisor":0}, + { "attr_name":"fan6_input", "attr_devtype":"FAN-CTRL", "attr_offset":"0x24", "attr_mask":"0xFF", "attr_len":"1", "attr_mult":"100" , "attr_is_divisor":0}, + { "attr_name":"fan7_input", "attr_devtype":"FAN-CTRL", "attr_offset":"0x15", "attr_mask":"0xFF", "attr_len":"1", "attr_mult":"100", "attr_is_divisor":0}, + { "attr_name":"fan8_input", "attr_devtype":"FAN-CTRL", "attr_offset":"0x25", "attr_mask":"0xFF", "attr_len":"1", "attr_mult":"100" , "attr_is_divisor":0}, + { "attr_name":"fan9_input", "attr_devtype":"FAN-CTRL", "attr_offset":"0x16", "attr_mask":"0xFF", "attr_len":"1", "attr_mult":"100", "attr_is_divisor":0}, + { "attr_name":"fan10_input", "attr_devtype":"FAN-CTRL", "attr_offset":"0x26", "attr_mask":"0xFF", "attr_len":"1", "attr_mult":"100" , "attr_is_divisor":0}, + { "attr_name":"fan11_input", "attr_devtype":"FAN-CTRL", "attr_offset":"0x17", "attr_mask":"0xFF", "attr_len":"1", "attr_mult":"100", "attr_is_divisor":0}, + { "attr_name":"fan12_input", "attr_devtype":"FAN-CTRL", "attr_offset":"0x27", "attr_mask":"0xFF", "attr_len":"1", "attr_mult":"100" , "attr_is_divisor":0}, + { "attr_name":"fan1_pwm", "attr_devtype":"FAN-CTRL", "attr_offset":"0x11", "attr_mask":"0x0F", "attr_len":"1" }, + { "attr_name":"fan2_pwm", "attr_devtype":"FAN-CTRL", "attr_offset":"0x11", "attr_mask":"0x0F", "attr_len":"1" }, + { "attr_name":"fan3_pwm", "attr_devtype":"FAN-CTRL", "attr_offset":"0x11", "attr_mask":"0x0F", "attr_len":"1" }, + { "attr_name":"fan4_pwm", "attr_devtype":"FAN-CTRL", "attr_offset":"0x11", "attr_mask":"0x0F", "attr_len":"1" }, + { "attr_name":"fan5_pwm", "attr_devtype":"FAN-CTRL", "attr_offset":"0x11", "attr_mask":"0x0F", "attr_len":"1" }, + { "attr_name":"fan6_pwm", "attr_devtype":"FAN-CTRL", "attr_offset":"0x11", "attr_mask":"0x0F", "attr_len":"1" }, + { "attr_name":"fan7_pwm", "attr_devtype":"FAN-CTRL", "attr_offset":"0x11", "attr_mask":"0x0F", "attr_len":"1" }, + { "attr_name":"fan8_pwm", "attr_devtype":"FAN-CTRL", "attr_offset":"0x11", "attr_mask":"0x0F", "attr_len":"1" }, + { "attr_name":"fan9_pwm", "attr_devtype":"FAN-CTRL", "attr_offset":"0x11", "attr_mask":"0x0F", "attr_len":"1" }, + { "attr_name":"fan10_pwm", "attr_devtype":"FAN-CTRL", "attr_offset":"0x11", "attr_mask":"0x0F", "attr_len":"1" }, + { "attr_name":"fan11_pwm", "attr_devtype":"FAN-CTRL", "attr_offset":"0x11", "attr_mask":"0x0F", "attr_len":"1" }, + { "attr_name":"fan12_pwm", "attr_devtype":"FAN-CTRL", "attr_offset":"0x11", "attr_mask":"0x0F", "attr_len":"1" } + ] + } + }, + + "TEMP1" : + { + "dev_info": { "device_type":"TEMP_SENSOR", "device_name":"TEMP1", "device_parent":"MUX1"}, + "dev_attr": { "display_name":"Temp_1"}, + "i2c": + { + "topo_info": { "parent_bus":"0x3", "dev_addr":"0x48", "dev_type":"lm75"}, + "attr_list": + [ + { "attr_name": "temp1_high_threshold", "drv_attr_name":"temp1_max"}, + { "attr_name": "temp1_max_hyst"}, + { "attr_name": "temp1_input"} + ] + } + }, + + "TEMP2" : + { + "dev_info": { "device_type":"TEMP_SENSOR", "device_name":"TEMP2", "device_parent":"MUX1"}, + "dev_attr": { "display_name":"Temp_2"}, + "i2c": + { + "topo_info": { "parent_bus":"0x3", "dev_addr":"0x49", "dev_type":"lm75"}, + "attr_list": + [ + { "attr_name": "temp1_high_threshold", "drv_attr_name":"temp1_max"}, + { "attr_name": "temp1_max_hyst"}, + { "attr_name": "temp1_input"} + ] + } + }, + + "TEMP3" : + { + "dev_info": { "device_type":"TEMP_SENSOR", "device_name":"TEMP3", "device_parent":"MUX1"}, + "dev_attr": { "display_name":"Temp_3"}, + "i2c": + { + "topo_info": { "parent_bus":"0x3", "dev_addr":"0x4a", "dev_type":"lm75"}, + "attr_list": + [ + { "attr_name": "temp1_high_threshold", "drv_attr_name":"temp1_max"}, + { "attr_name": "temp1_max_hyst"}, + { "attr_name": "temp1_input"} + ] + } + }, + + "TEMP4" : + { + "dev_info": { "device_type":"TEMP_SENSOR", "device_name":"TEMP4", "device_parent":"MUX1"}, + "dev_attr": { "display_name":"Temp_CPU"}, + "i2c": + { + "topo_info": { "parent_bus":"0x3", "dev_addr":"0x4b", "dev_type":"lm75"}, + "attr_list": + [ + { "attr_name": "temp1_high_threshold", "drv_attr_name":"temp1_max"}, + { "attr_name": "temp1_max_hyst"}, + { "attr_name": "temp1_input"} + ] + } + }, + + "CPLD1": + { + "dev_info": { "device_type":"CPLD", "device_name":"CPLD1", "device_parent":"MUX1"}, + "i2c": + { + "topo_info": { "parent_bus":"0x4", "dev_addr":"0x60", "dev_type":"i2c_cpld"}, + "dev_attr":{} + } + }, + + "CPLD2": + { + "dev_info": { "device_type":"CPLD", "device_name":"CPLD2", "device_parent":"MUX1"}, + "i2c": + { + "topo_info": { "parent_bus":"0x5", "dev_addr":"0x62", "dev_type":"i2c_cpld"}, + "dev_attr": { } + } + }, + + "CPLD3": + { + "dev_info": { "device_type":"CPLD", "device_name":"CPLD3", "device_parent":"MUX1"}, + "i2c": + { + "topo_info": { "parent_bus":"0x6", "dev_addr":"0x64", "dev_type":"i2c_cpld"}, + "dev_attr": { } + } + }, + + "SYSSTATUS": + { + "dev_info":{ "device_type":"SYSSTAT", "device_name":"SYSSTATUS"}, + "dev_attr":{ }, + "attr_list": + [ + + { "attr_name":"board_info","attr_devaddr":"0x60", "attr_offset":"0x0","attr_mask":"0xf","attr_len":"0x1"}, + { "attr_name":"cpld1_version","attr_devaddr":"0x60","attr_offset":"0x1","attr_mask":"0xff","attr_len":"0x1"}, + { "attr_name":"power_module_status","attr_devaddr":"0x60","attr_offset":"0x2","attr_mask":"0x2f","attr_len":"0x1"}, + { "attr_name":"system_reset5","attr_devaddr":"0x60","attr_offset":"0x8","attr_mask":"0xff","attr_len":"0x1"}, + { "attr_name":"system_reset6","attr_devaddr":"0x60","attr_offset":"0x9","attr_mask":"0xff","attr_len":"0x1"}, + { "attr_name":"system_reset7","attr_devaddr":"0x60","attr_offset":"0xa","attr_mask":"0xff","attr_len":"0x1"}, + { "attr_name":"misc1","attr_devaddr":"0x60","attr_offset":"0x48","attr_mask":"0xff","attr_len":"0x1"}, + { "attr_name":"cpld2_version","attr_devaddr":"0x62","attr_offset":"0x1","attr_mask":"0xff","attr_len":"0x1"}, + { "attr_name":"cpld3_version","attr_devaddr":"0x64","attr_offset":"0x1","attr_mask":"0xff","attr_len":"0x1"} + + ] + }, + + + "PSU1": + { + "dev_info": { "device_type":"PSU", "device_name":"PSU1", "device_parent":"MUX2"}, + "dev_attr": { "dev_idx":"1", "num_psu_fans": "1"}, + "i2c": + { + "interface": + [ + { "itf":"pmbus", "dev":"PSU1-PMBUS" } + ] + + } + }, + + "PSU1-PMBUS": + { + "dev_info": { "device_type":"PSU-PMBUS", "device_name":"PSU1-PMBUS", "device_parent":"MUX2", "virt_parent":"PSU1"}, + "i2c": + { + "topo_info":{ "parent_bus":"0xb", "dev_addr":"0x5b", "dev_type":"psu_pmbus"}, + "attr_list": + [ + { "attr_name":"psu_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x2", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"psu_model_name", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x9a", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"9" }, + { "attr_name":"psu_power_good", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x2", "attr_mask":"0x28", "attr_cmpval":"0x28", "attr_len":"1"}, + { "attr_name":"psu_mfr_id", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" }, + { "attr_name":"psu_serial_num", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x9e", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"20" }, + { "attr_name":"psu_fan_dir", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0xc3", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"5"}, + { "attr_name":"psu_v_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8b", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_i_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8c", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_p_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x96", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_fan1_speed_rpm", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x90", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_temp1_input", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8d", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"} + ] + } + }, + + "PSU2": + { + "dev_info": { "device_type":"PSU", "device_name":"PSU2", "device_parent":"MUX2" }, + "dev_attr": { "dev_idx":"2", "num_psu_fans":"1"}, + "i2c": + { + "interface": + [ + { "itf":"pmbus", "dev":"PSU2-PMBUS"} + ] + } + + }, + + "PSU2-PMBUS": + { + "dev_info": {"device_type":"PSU-PMBUS", "device_name":"PSU2-PMBUS", "device_parent":"MUX2", "virt_parent":"PSU2"}, + "i2c": + { + "topo_info": { "parent_bus":"0xa", "dev_addr":"0x58", "dev_type":"psu_pmbus"}, + "attr_list": + [ + { "attr_name":"psu_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x2", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"psu_model_name", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x9a", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"9" }, + { "attr_name":"psu_power_good", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x2", "attr_mask":"0x14", "attr_cmpval":"0x14", "attr_len":"1"}, + { "attr_name":"psu_mfr_id", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" }, + { "attr_name":"psu_serial_num", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x9e", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"20" }, + { "attr_name":"psu_fan_dir", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0xc3", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"5"}, + { "attr_name":"psu_v_out", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x8b", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_i_out", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x8c", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_p_out", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x96", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_fan1_speed_rpm", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x90", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_temp1_input", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x8d", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"} + ] + } + }, + + "MUX3": + { + "dev_info": { "device_type":"MUX", "device_name":"MUX3", "device_parent":"SMBUS0"}, + "i2c": + { + "topo_info": { "parent_bus":"0x0", "dev_addr":"0x72", "dev_type":"pca9548"}, + "dev_attr": { "virt_bus":"0x12", "idle_state":"-2"}, + "channel": + [ + { "chn":"0", "dev":"PORT9" }, + { "chn":"1", "dev":"PORT10" }, + { "chn":"2", "dev":"PORT11" }, + { "chn":"3", "dev":"PORT12" }, + { "chn":"4", "dev":"PORT1" }, + { "chn":"5", "dev":"PORT2" }, + { "chn":"6", "dev":"PORT3" }, + { "chn":"7", "dev":"PORT4" } + ] + } + }, + + "MUX4": + { + "dev_info": { "device_type":"MUX", "device_name":"MUX4", "device_parent":"SMBUS0"}, + "i2c": + { + "topo_info": { "parent_bus":"0x0", "dev_addr":"0x73", "dev_type":"pca9548"}, + "dev_attr": { "virt_bus":"0x1a", "idle_state":"-2"}, + "channel": + [ + { "chn":"0", "dev":"PORT6" }, + { "chn":"1", "dev":"PORT5" }, + { "chn":"2", "dev":"PORT8" }, + { "chn":"3", "dev":"PORT7" }, + { "chn":"4", "dev":"PORT13" }, + { "chn":"5", "dev":"PORT14" }, + { "chn":"6", "dev":"PORT15" }, + { "chn":"7", "dev":"PORT16" } + ] + } + }, + + "MUX5": + { + "dev_info": { "device_type":"MUX", "device_name":"MUX5", "device_parent":"SMBUS0"}, + "i2c": + { + "topo_info": { "parent_bus":"0x0", "dev_addr":"0x74", "dev_type":"pca9548"}, + "dev_attr": { "virt_bus":"0x22", "idle_state":"-2"}, + "channel": + [ + { "chn":"0", "dev":"PORT17" }, + { "chn":"1", "dev":"PORT18" }, + { "chn":"2", "dev":"PORT19" }, + { "chn":"3", "dev":"PORT20" }, + { "chn":"4", "dev":"PORT25" }, + { "chn":"5", "dev":"PORT26" }, + { "chn":"6", "dev":"PORT27" }, + { "chn":"7", "dev":"PORT28" } + ] + } + }, + + "MUX6": + { + "dev_info": { "device_type":"MUX", "device_name":"MUX6", "device_parent":"SMBUS0"}, + "i2c": + { + "topo_info": { "parent_bus":"0x0", "dev_addr":"0x75", "dev_type":"pca9548"}, + "dev_attr": { "virt_bus":"0x2a", "idle_state":"-2"}, + "channel": + [ + { "chn":"0", "dev":"PORT29" }, + { "chn":"1", "dev":"PORT30" }, + { "chn":"2", "dev":"PORT31" }, + { "chn":"3", "dev":"PORT32" }, + { "chn":"4", "dev":"PORT21" }, + { "chn":"5", "dev":"PORT22" }, + { "chn":"6", "dev":"PORT23" }, + { "chn":"7", "dev":"PORT24" } + ] + } + }, + + "LOC_LED": + { + "dev_info": { "device_type":"LED", "device_name":"LOC_LED"}, + "dev_attr": { "index":"0"}, + "i2c" : { + "attr_list": + [ + {"attr_name":"STATUS_LED_COLOR_BLUE", "bits" : "7", "descr" : "", "value" : "0x0", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x41"}, + {"attr_name":"STATUS_LED_COLOR_OFF", "bits" : "7", "descr" : "", "value" : "0x1", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x41"} + ] + } + }, + + "DIAG_LED": + { + "dev_info": { "device_type":"LED", "device_name":"DIAG_LED"}, + "dev_attr": { "index":"0"}, + "i2c" : { + "attr_list": + [ + {"attr_name":"STATUS_LED_COLOR_GREEN", "bits" : "1:0", "descr" : "", "value" : "0x2", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x41"}, + {"attr_name":"STATUS_LED_COLOR_RED", "bits" : "1:0", "descr" : "", "value" : "0x1", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x41"}, + {"attr_name":"STATUS_LED_COLOR_OFF", "bits" : "1:0", "descr" : "", "value" : "0x3", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x41"} + ] + } + + }, + + + "PORT1": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT1", "device_parent":"MUX3"}, + "dev_attr": { "dev_idx":"1"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT1-EEPROM" }, + { "itf":"control", "dev":"PORT1-CTRL" } + ] + } + }, + "PORT1-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT1-EEPROM", "device_parent":"MUX3", "virt_parent":"PORT1"}, + "i2c": + { + "topo_info": { "parent_bus":"0x16", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT1-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT1-CTRL", "device_parent":"MUX3", "virt_parent":"PORT1"}, + "i2c": + { + "topo_info": { "parent_bus":"0x16", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x30", "attr_mask":"0x0", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x04", "attr_mask":"0x0", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x10", "attr_mask":"0x0", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT2": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT2", "device_parent":"MUX3"}, + "dev_attr": { "dev_idx":"2"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT2-EEPROM" }, + { "itf":"control", "dev":"PORT2-CTRL" } + ] + } + }, + "PORT2-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT2-EEPROM", "device_parent":"MUX3", "virt_parent":"PORT2"}, + "i2c": + { + "topo_info": { "parent_bus":"0x17", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT2-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT2-CTRL", "device_parent":"MUX3", "virt_parent":"PORT2"}, + "i2c": + { + "topo_info": { "parent_bus":"0x17", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x30", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x04", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x10", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT3": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT3", "device_parent":"MUX3"}, + "dev_attr": { "dev_idx":"3"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT3-EEPROM" }, + { "itf":"control", "dev":"PORT3-CTRL" } + ] + } + }, + "PORT3-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT3-EEPROM", "device_parent":"MUX3", "virt_parent":"PORT3"}, + "i2c": + { + "topo_info": { "parent_bus":"0x18", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT3-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT3-CTRL", "device_parent":"MUX3", "virt_parent":"PORT3"}, + "i2c": + { + "topo_info": { "parent_bus":"0x18", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x30", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x04", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x10", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT4": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT4", "device_parent":"MUX3"}, + "dev_attr": { "dev_idx":"4"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT4-EEPROM" }, + { "itf":"control", "dev":"PORT4-CTRL" } + ] + } + }, + "PORT4-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT4-EEPROM", "device_parent":"MUX3", "virt_parent":"PORT4"}, + "i2c": + { + "topo_info": { "parent_bus":"0x19", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT4-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT4-CTRL", "device_parent":"MUX3", "virt_parent":"PORT4"}, + "i2c": + { + "topo_info": { "parent_bus":"0x19", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x30", "attr_mask":"0x3", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x04", "attr_mask":"0x3", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x10", "attr_mask":"0x3", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT5": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT5", "device_parent":"MUX4"}, + "dev_attr": { "dev_idx":"5"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT5-EEPROM" }, + { "itf":"control", "dev":"PORT5-CTRL" } + ] + } + }, + "PORT5-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT5-EEPROM", "device_parent":"MUX4", "virt_parent":"PORT5"}, + "i2c": + { + "topo_info": { "parent_bus":"0x1b", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT5-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT5-CTRL", "device_parent":"MUX4", "virt_parent":"PORT5"}, + "i2c": + { + "topo_info": { "parent_bus":"0x1b", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x30", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x04", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x10", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT6": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT6", "device_parent":"MUX4"}, + "dev_attr": { "dev_idx":"6"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT6-EEPROM" }, + { "itf":"control", "dev":"PORT6-CTRL" } + ] + } + }, + "PORT6-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT6-EEPROM", "device_parent":"MUX4", "virt_parent":"PORT6"}, + "i2c": + { + "topo_info": { "parent_bus":"0x1a", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT6-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT6-CTRL", "device_parent":"MUX4", "virt_parent":"PORT6"}, + "i2c": + { + "topo_info": { "parent_bus":"0x1a", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x30", "attr_mask":"0x5", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x04", "attr_mask":"0x5", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x10", "attr_mask":"0x5", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT7": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT7", "device_parent":"MUX4"}, + "dev_attr": { "dev_idx":"7"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT7-EEPROM" }, + { "itf":"control", "dev":"PORT7-CTRL" } + ] + } + }, + "PORT7-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT7-EEPROM", "device_parent":"MUX4", "virt_parent":"PORT7"}, + "i2c": + { + "topo_info": { "parent_bus":"0x1d", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT7-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT7-CTRL", "device_parent":"MUX4", "virt_parent":"PORT7"}, + "i2c": + { + "topo_info": { "parent_bus":"0x1d", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x30", "attr_mask":"0x6", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x04", "attr_mask":"0x6", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x10", "attr_mask":"0x6", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT8": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT8", "device_parent":"MUX4"}, + "dev_attr": { "dev_idx":"8"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT8-EEPROM" }, + { "itf":"control", "dev":"PORT8-CTRL" } + ] + } + }, + "PORT8-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT8-EEPROM", "device_parent":"MUX4", "virt_parent":"PORT8"}, + "i2c": + { + "topo_info": { "parent_bus":"0x1c", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT8-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT8-CTRL", "device_parent":"MUX4", "virt_parent":"PORT8"}, + "i2c": + { + "topo_info": { "parent_bus":"0x1c", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x30", "attr_mask":"0x7", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x04", "attr_mask":"0x7", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x10", "attr_mask":"0x7", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT9": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT9", "device_parent":"MUX3"}, + "dev_attr": { "dev_idx":"9"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT9-EEPROM" }, + { "itf":"control", "dev":"PORT9-CTRL" } + ] + } + }, + "PORT9-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT9-EEPROM", "device_parent":"MUX3", "virt_parent":"PORT9"}, + "i2c": + { + "topo_info": { "parent_bus":"0x12", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT9-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT9-CTRL", "device_parent":"MUX3", "virt_parent":"PORT9"}, + "i2c": + { + "topo_info": { "parent_bus":"0x12", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x31", "attr_mask":"0x0", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x05", "attr_mask":"0x0", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x11", "attr_mask":"0x0", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT10": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT10", "device_parent":"MUX3"}, + "dev_attr": { "dev_idx":"10"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT10-EEPROM" }, + { "itf":"control", "dev":"PORT10-CTRL" } + ] + } + }, + "PORT10-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT10-EEPROM", "device_parent":"MUX3", "virt_parent":"PORT10"}, + "i2c": + { + "topo_info": { "parent_bus":"0x13", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT10-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT10-CTRL", "device_parent":"MUX3", "virt_parent":"PORT10"}, + "i2c": + { + "topo_info": { "parent_bus":"0x13", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x31", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x05", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x11", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT11": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT11", "device_parent":"MUX3"}, + "dev_attr": { "dev_idx":"11"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT11-EEPROM" }, + { "itf":"control", "dev":"PORT11-CTRL" } + ] + } + }, + "PORT11-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT11-EEPROM", "device_parent":"MUX3", "virt_parent":"PORT11"}, + "i2c": + { + "topo_info": { "parent_bus":"0x14", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT11-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT11-CTRL", "device_parent":"MUX3", "virt_parent":"PORT11"}, + "i2c": + { + "topo_info": { "parent_bus":"0x14", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x31", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x05", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x11", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT12": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT12", "device_parent":"MUX3"}, + "dev_attr": { "dev_idx":"12"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT12-EEPROM" }, + { "itf":"control", "dev":"PORT12-CTRL" } + ] + } + }, + "PORT12-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT12-EEPROM", "device_parent":"MUX3", "virt_parent":"PORT12"}, + "i2c": + { + "topo_info": { "parent_bus":"0x15", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT12-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT12-CTRL", "device_parent":"MUX3", "virt_parent":"PORT12"}, + "i2c": + { + "topo_info": { "parent_bus":"0x15", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x31", "attr_mask":"0x3", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x05", "attr_mask":"0x3", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x11", "attr_mask":"0x3", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT13": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT13", "device_parent":"MUX4"}, + "dev_attr": { "dev_idx":"13"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT13-EEPROM" }, + { "itf":"control", "dev":"PORT13-CTRL" } + ] + } + }, + "PORT13-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT13-EEPROM", "device_parent":"MUX4", "virt_parent":"PORT13"}, + "i2c": + { + "topo_info": { "parent_bus":"0x1e", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT13-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT13-CTRL", "device_parent":"MUX4", "virt_parent":"PORT13"}, + "i2c": + { + "topo_info": { "parent_bus":"0x1e", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x31", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x05", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x11", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT14": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT14", "device_parent":"MUX4"}, + "dev_attr": { "dev_idx":"14"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT14-EEPROM" }, + { "itf":"control", "dev":"PORT14-CTRL" } + ] + } + }, + "PORT14-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT14-EEPROM", "device_parent":"MUX4", "virt_parent":"PORT14"}, + "i2c": + { + "topo_info": { "parent_bus":"0x1f", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT14-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT14-CTRL", "device_parent":"MUX4", "virt_parent":"PORT14"}, + "i2c": + { + "topo_info": { "parent_bus":"0x1f", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x31", "attr_mask":"0x5", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x05", "attr_mask":"0x5", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x11", "attr_mask":"0x5", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT15": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT15", "device_parent":"MUX4"}, + "dev_attr": { "dev_idx":"15"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT15-EEPROM" }, + { "itf":"control", "dev":"PORT15-CTRL" } + ] + } + }, + "PORT15-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT15-EEPROM", "device_parent":"MUX4", "virt_parent":"PORT15"}, + "i2c": + { + "topo_info": { "parent_bus":"0x20", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT15-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT15-CTRL", "device_parent":"MUX4", "virt_parent":"PORT15"}, + "i2c": + { + "topo_info": { "parent_bus":"0x20", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x31", "attr_mask":"0x6", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x05", "attr_mask":"0x6", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x11", "attr_mask":"0x6", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT16": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT16", "device_parent":"MUX4"}, + "dev_attr": { "dev_idx":"16"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT16-EEPROM" }, + { "itf":"control", "dev":"PORT16-CTRL" } + ] + } + }, + "PORT16-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT16-EEPROM", "device_parent":"MUX4", "virt_parent":"PORT16"}, + "i2c": + { + "topo_info": { "parent_bus":"0x21", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT16-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT16-CTRL", "device_parent":"MUX4", "virt_parent":"PORT16"}, + "i2c": + { + "topo_info": { "parent_bus":"0x21", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x31", "attr_mask":"0x7", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x05", "attr_mask":"0x7", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x11", "attr_mask":"0x7", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT17": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT17", "device_parent":"MUX5"}, + "dev_attr": { "dev_idx":"17"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT17-EEPROM" }, + { "itf":"control", "dev":"PORT17-CTRL" } + ] + } + }, + "PORT17-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT17-EEPROM", "device_parent":"MUX5", "virt_parent":"PORT17"}, + "i2c": + { + "topo_info": { "parent_bus":"0x22", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT17-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT17-CTRL", "device_parent":"MUX5", "virt_parent":"PORT17"}, + "i2c": + { + "topo_info": { "parent_bus":"0x22", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x32", "attr_mask":"0x0", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x06", "attr_mask":"0x0", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x12", "attr_mask":"0x0", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT18": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT18", "device_parent":"MUX5"}, + "dev_attr": { "dev_idx":"18"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT18-EEPROM" }, + { "itf":"control", "dev":"PORT18-CTRL" } + ] + } + }, + "PORT18-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT18-EEPROM", "device_parent":"MUX5", "virt_parent":"PORT18"}, + "i2c": + { + "topo_info": { "parent_bus":"0x23", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT18-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT18-CTRL", "device_parent":"MUX5", "virt_parent":"PORT18"}, + "i2c": + { + "topo_info": { "parent_bus":"0x23", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x32", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x06", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x12", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT19": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT19", "device_parent":"MUX5"}, + "dev_attr": { "dev_idx":"19"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT19-EEPROM" }, + { "itf":"control", "dev":"PORT19-CTRL" } + ] + } + }, + "PORT19-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT19-EEPROM", "device_parent":"MUX5", "virt_parent":"PORT19"}, + "i2c": + { + "topo_info": { "parent_bus":"0x24", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT19-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT19-CTRL", "device_parent":"MUX5", "virt_parent":"PORT19"}, + "i2c": + { + "topo_info": { "parent_bus":"0x24", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x32", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x06", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x12", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT20": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT20", "device_parent":"MUX5"}, + "dev_attr": { "dev_idx":"20"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT20-EEPROM" }, + { "itf":"control", "dev":"PORT20-CTRL" } + ] + } + }, + "PORT20-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT20-EEPROM", "device_parent":"MUX5", "virt_parent":"PORT20"}, + "i2c": + { + "topo_info": { "parent_bus":"0x25", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT20-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT20-CTRL", "device_parent":"MUX5", "virt_parent":"PORT20"}, + "i2c": + { + "topo_info": { "parent_bus":"0x25", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x32", "attr_mask":"0x3", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x06", "attr_mask":"0x3", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x12", "attr_mask":"0x3", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT21": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT21", "device_parent":"MUX6"}, + "dev_attr": { "dev_idx":"21"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT21-EEPROM" }, + { "itf":"control", "dev":"PORT21-CTRL" } + ] + } + }, + "PORT21-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT21-EEPROM", "device_parent":"MUX6", "virt_parent":"PORT21"}, + "i2c": + { + "topo_info": { "parent_bus":"0x2e", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT21-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT21-CTRL", "device_parent":"MUX6", "virt_parent":"PORT21"}, + "i2c": + { + "topo_info": { "parent_bus":"0x2e", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x32", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x06", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x12", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT22": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT22", "device_parent":"MUX6"}, + "dev_attr": { "dev_idx":"22"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT22-EEPROM" }, + { "itf":"control", "dev":"PORT22-CTRL" } + ] + } + }, + "PORT22-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT22-EEPROM", "device_parent":"MUX6", "virt_parent":"PORT22"}, + "i2c": + { + "topo_info": { "parent_bus":"0x2f", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT22-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT22-CTRL", "device_parent":"MUX6", "virt_parent":"PORT22"}, + "i2c": + { + "topo_info": { "parent_bus":"0x2f", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x32", "attr_mask":"0x5", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x06", "attr_mask":"0x5", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x12", "attr_mask":"0x5", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT23": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT23", "device_parent":"MUX6"}, + "dev_attr": { "dev_idx":"23"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT23-EEPROM" }, + { "itf":"control", "dev":"PORT23-CTRL" } + ] + } + }, + "PORT23-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT23-EEPROM", "device_parent":"MUX6", "virt_parent":"PORT23"}, + "i2c": + { + "topo_info": { "parent_bus":"0x30", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT23-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT23-CTRL", "device_parent":"MUX6", "virt_parent":"PORT23"}, + "i2c": + { + "topo_info": { "parent_bus":"0x30", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x32", "attr_mask":"0x6", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x06", "attr_mask":"0x6", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x12", "attr_mask":"0x6", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT24": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT24", "device_parent":"MUX6"}, + "dev_attr": { "dev_idx":"24"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT24-EEPROM" }, + { "itf":"control", "dev":"PORT24-CTRL" } + ] + } + }, + "PORT24-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT24-EEPROM", "device_parent":"MUX6", "virt_parent":"PORT24"}, + "i2c": + { + "topo_info": { "parent_bus":"0x31", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT24-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT24-CTRL", "device_parent":"MUX6", "virt_parent":"PORT24"}, + "i2c": + { + "topo_info": { "parent_bus":"0x31", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x32", "attr_mask":"0x7", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x06", "attr_mask":"0x7", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x12", "attr_mask":"0x7", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT25": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT25", "device_parent":"MUX5"}, + "dev_attr": { "dev_idx":"25"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT25-EEPROM" }, + { "itf":"control", "dev":"PORT25-CTRL" } + ] + } + }, + "PORT25-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT25-EEPROM", "device_parent":"MUX5", "virt_parent":"PORT25"}, + "i2c": + { + "topo_info": { "parent_bus":"0x26", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT25-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT25-CTRL", "device_parent":"MUX5", "virt_parent":"PORT25"}, + "i2c": + { + "topo_info": { "parent_bus":"0x26", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x33", "attr_mask":"0x0", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x07", "attr_mask":"0x0", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x13", "attr_mask":"0x0", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT26": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT26", "device_parent":"MUX5"}, + "dev_attr": { "dev_idx":"26"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT26-EEPROM" }, + { "itf":"control", "dev":"PORT26-CTRL" } + ] + } + }, + "PORT26-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT26-EEPROM", "device_parent":"MUX5", "virt_parent":"PORT26"}, + "i2c": + { + "topo_info": { "parent_bus":"0x27", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT26-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT26-CTRL", "device_parent":"MUX5", "virt_parent":"PORT26"}, + "i2c": + { + "topo_info": { "parent_bus":"0x27", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x33", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x07", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x13", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT27": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT27", "device_parent":"MUX5"}, + "dev_attr": { "dev_idx":"27"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT27-EEPROM" }, + { "itf":"control", "dev":"PORT27-CTRL" } + ] + } + }, + "PORT27-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT27-EEPROM", "device_parent":"MUX5", "virt_parent":"PORT27"}, + "i2c": + { + "topo_info": { "parent_bus":"0x28", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT27-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT27-CTRL", "device_parent":"MUX5", "virt_parent":"PORT27"}, + "i2c": + { + "topo_info": { "parent_bus":"0x28", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x33", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x07", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x13", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT28": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT28", "device_parent":"MUX5"}, + "dev_attr": { "dev_idx":"28"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT28-EEPROM" }, + { "itf":"control", "dev":"PORT28-CTRL" } + ] + } + }, + "PORT28-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT28-EEPROM", "device_parent":"MUX5", "virt_parent":"PORT28"}, + "i2c": + { + "topo_info": { "parent_bus":"0x29", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT28-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT28-CTRL", "device_parent":"MUX5", "virt_parent":"PORT28"}, + "i2c": + { + "topo_info": { "parent_bus":"0x29", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x33", "attr_mask":"0x3", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x07", "attr_mask":"0x3", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x13", "attr_mask":"0x3", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT29": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT29", "device_parent":"MUX6"}, + "dev_attr": { "dev_idx":"29"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT29-EEPROM" }, + { "itf":"control", "dev":"PORT29-CTRL" } + ] + } + }, + "PORT29-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT29-EEPROM", "device_parent":"MUX6", "virt_parent":"PORT29"}, + "i2c": + { + "topo_info": { "parent_bus":"0x2a", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT29-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT29-CTRL", "device_parent":"MUX6", "virt_parent":"PORT29"}, + "i2c": + { + "topo_info": { "parent_bus":"0x2a", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x33", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x07", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x13", "attr_mask":"0x4", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT30": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT30", "device_parent":"MUX6"}, + "dev_attr": { "dev_idx":"30"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT30-EEPROM" }, + { "itf":"control", "dev":"PORT30-CTRL" } + ] + } + }, + "PORT30-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT30-EEPROM", "device_parent":"MUX6", "virt_parent":"PORT30"}, + "i2c": + { + "topo_info": { "parent_bus":"0x2b", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT30-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT30-CTRL", "device_parent":"MUX6", "virt_parent":"PORT30"}, + "i2c": + { + "topo_info": { "parent_bus":"0x2b", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x33", "attr_mask":"0x5", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x07", "attr_mask":"0x5", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x13", "attr_mask":"0x5", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT31": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT31", "device_parent":"MUX6"}, + "dev_attr": { "dev_idx":"31"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT31-EEPROM" }, + { "itf":"control", "dev":"PORT31-CTRL" } + ] + } + }, + "PORT31-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT31-EEPROM", "device_parent":"MUX6", "virt_parent":"PORT31"}, + "i2c": + { + "topo_info": { "parent_bus":"0x2c", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT31-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT31-CTRL", "device_parent":"MUX6", "virt_parent":"PORT31"}, + "i2c": + { + "topo_info": { "parent_bus":"0x2c", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x33", "attr_mask":"0x6", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x07", "attr_mask":"0x6", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x13", "attr_mask":"0x6", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + }, + + "PORT32": + { + "dev_info": { "device_type":"QSFP", "device_name":"PORT32", "device_parent":"MUX6"}, + "dev_attr": { "dev_idx":"32"}, + "i2c": + { + "interface": + [ + { "itf":"eeprom", "dev":"PORT32-EEPROM" }, + { "itf":"control", "dev":"PORT32-CTRL" } + ] + } + }, + "PORT32-EEPROM": + { + "dev_info": { "device_type":"", "device_name":"PORT32-EEPROM", "device_parent":"MUX6", "virt_parent":"PORT32"}, + "i2c": + { + "topo_info": { "parent_bus":"0x2d", "dev_addr":"0x50", "dev_type":"optoe1"}, + "attr_list": + [ + { "attr_name":"eeprom"} + ] + } + }, + "PORT32-CTRL": + { + "dev_info": { "device_type":"", "device_name":"PORT32-CTRL", "device_parent":"MUX6", "virt_parent":"PORT32"}, + "i2c": + { + "topo_info": { "parent_bus":"0x2d", "dev_addr":"0x53", "dev_type":"pddf_xcvr"}, + "attr_list": + [ + { "attr_name":"xcvr_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x33", "attr_mask":"0x7", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_reset", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x07", "attr_mask":"0x7", "attr_cmpval":"0x0", "attr_len":"1"}, + { "attr_name":"xcvr_intr_status", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_devname":"CPLD1", "attr_offset":"0x13", "attr_mask":"0x7", "attr_cmpval":"0x0", "attr_len":"1"} + ] + } + } + +} diff --git a/device/accton/x86_64-accton_as7712_32x-r0/pddf_support b/device/accton/x86_64-accton_as7712_32x-r0/pddf_support new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/device/accton/x86_64-accton_as7712_32x-r0/pmon_daemon_control.json b/device/accton/x86_64-accton_as7712_32x-r0/pmon_daemon_control.json index 584a14b9d942..a3b204e20d8d 100644 --- a/device/accton/x86_64-accton_as7712_32x-r0/pmon_daemon_control.json +++ b/device/accton/x86_64-accton_as7712_32x-r0/pmon_daemon_control.json @@ -1,5 +1,5 @@ { "skip_ledd": true, - "skip_thermalctld": true + "skip_pcied": true } diff --git a/device/accton/x86_64-accton_as7726_32x-r0/Accton-AS7726-32X/td3-as7726-32x100G.config.bcm b/device/accton/x86_64-accton_as7726_32x-r0/Accton-AS7726-32X/td3-as7726-32x100G.config.bcm index f88656bfd5cf..1dcd7e3ef5bb 100755 --- a/device/accton/x86_64-accton_as7726_32x-r0/Accton-AS7726-32X/td3-as7726-32x100G.config.bcm +++ b/device/accton/x86_64-accton_as7726_32x-r0/Accton-AS7726-32X/td3-as7726-32x100G.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ #polarity/lanemap is using TH2 style. core_clock_frequency=1525 dpp_clock_ratio=2:3 diff --git a/device/accton/x86_64-accton_as7726_32x-r0/pddf/pddf-device.json b/device/accton/x86_64-accton_as7726_32x-r0/pddf/pddf-device.json index 8a4caec27722..68a18fd5c018 100644 --- a/device/accton/x86_64-accton_as7726_32x-r0/pddf/pddf-device.json +++ b/device/accton/x86_64-accton_as7726_32x-r0/pddf/pddf-device.json @@ -50,6 +50,10 @@ "pddf_fan_module", "pddf_led_module", "pddf_sysstatus_module" + ], + "custom_kos": + [ + "pddf_custom_psu" ] }, @@ -1631,7 +1635,8 @@ { "interface": [ - { "itf":"pmbus", "dev":"PSU2-PMBUS"} + { "itf":"pmbus", "dev":"PSU2-PMBUS"}, + { "itf":"eeprom","dev":"PSU2-EEPROM" } ] } }, @@ -1644,19 +1649,31 @@ "topo_info": { "parent_bus":"0x31", "dev_addr":"0x58", "dev_type":"psu_pmbus"}, "attr_list": [ - { "attr_name":"psu_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x2", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, - { "attr_name":"psu_model_name", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x9a", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" }, + { "attr_name":"psu_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x2", "attr_mask":"0x1", "attr_cmpval":"0x0", "attr_len":"1"}, { "attr_name":"psu_power_good", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x2", "attr_mask":"0x14", "attr_cmpval":"0x14", "attr_len":"1"}, - { "attr_name":"psu_mfr_id", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" }, - { "attr_name":"psu_serial_num", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x9e", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"20" }, + { "attr_name":"psu_mfr_id", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" }, { "attr_name":"psu_fan_dir", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0xc3", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"5"}, { "attr_name":"psu_v_out", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x8b", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, { "attr_name":"psu_i_out", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x8c", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, { "attr_name":"psu_p_out", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x96", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, - { "attr_name":"psu_fan1_speed_rpm", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x90", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"} + { "attr_name":"psu_fan1_speed_rpm", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x90", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_temp1_input", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x8d", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"} ] } }, + "PSU2-EEPROM": + { + "dev_info": { "device_type":"PSU-EEPROM", "device_name":"PSU2-EEPROM", "device_parent":"MUX7", "virt_parent":"PSU2"}, + "i2c": + { + "topo_info":{ "parent_bus":"0x31", "dev_addr":"0x50", "dev_type":"psu_eeprom"}, + "attr_list": + [ + { "attr_name":"psu_model_name", "attr_devaddr":"0x50", "attr_devtype":"eeprom", "attr_offset":"0x15", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"11" }, + { "attr_name":"psu_serial_num", "attr_devaddr":"0x50", "attr_devtype":"eeprom", "attr_offset":"0x2e", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"17" } + ] + } + }, "PSU1": { @@ -1666,7 +1683,8 @@ { "interface": [ - { "itf":"pmbus", "dev":"PSU1-PMBUS" } + { "itf":"pmbus", "dev":"PSU1-PMBUS" }, + { "itf":"eeprom","dev":"PSU1-EEPROM" } ] } }, @@ -1679,20 +1697,31 @@ "topo_info":{ "parent_bus":"0x32", "dev_addr":"0x5b", "dev_type":"psu_pmbus"}, "attr_list": [ - { "attr_name":"psu_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x2", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, - { "attr_name":"psu_model_name", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x9a", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" }, + { "attr_name":"psu_present", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x2", "attr_mask":"0x2", "attr_cmpval":"0x0", "attr_len":"1"}, { "attr_name":"psu_power_good", "attr_devaddr":"0x60", "attr_devtype":"cpld", "attr_offset":"0x2", "attr_mask":"0x28", "attr_cmpval":"0x28", "attr_len":"1"}, - { "attr_name":"psu_mfr_id", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" }, - { "attr_name":"psu_serial_num", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x9e", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"20" }, + { "attr_name":"psu_mfr_id", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" }, { "attr_name":"psu_fan_dir", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0xc3", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"5"}, { "attr_name":"psu_v_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8b", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, { "attr_name":"psu_i_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8c", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, { "attr_name":"psu_p_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x96", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, - { "attr_name":"psu_fan1_speed_rpm", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x90", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"} + { "attr_name":"psu_fan1_speed_rpm", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x90", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}, + { "attr_name":"psu_temp1_input", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8d", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"} ] } }, - + "PSU1-EEPROM": + { + "dev_info": { "device_type":"PSU-EEPROM", "device_name":"PSU1-EEPROM", "device_parent":"MUX7", "virt_parent":"PSU1"}, + "i2c": + { + "topo_info":{ "parent_bus":"0x32", "dev_addr":"0x53", "dev_type":"psu_eeprom"}, + "attr_list": + [ + { "attr_name":"psu_model_name", "attr_devaddr":"0x53", "attr_devtype":"eeprom", "attr_offset":"0x15", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"11" }, + { "attr_name":"psu_serial_num", "attr_devaddr":"0x53", "attr_devtype":"eeprom", "attr_offset":"0x2e", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"17" } + ] + } + }, "FAN-CTRL": { "dev_info": { "device_type":"FAN", "device_name":"FAN-CTRL", "device_parent":"MUX7"}, @@ -1762,7 +1791,7 @@ "dev_info": { "device_type":"TEMP_SENSOR", "device_name":"TEMP1", "device_parent":"MUX7"}, "i2c": { - "topo_info": { "parent_bus":"0x37", "dev_addr":"0x4c", "dev_type":"lm75"}, + "topo_info": { "parent_bus":"0x36", "dev_addr":"0x4c", "dev_type":"lm75"}, "attr_list": [ { "attr_name": "temp1_high_threshold", "drv_attr_name":"temp1_max"}, @@ -1825,7 +1854,7 @@ "topo_info": { "parent_bus":"0x37", "dev_addr":"0x4b", "dev_type":"lm75"}, "attr_list": [ - { "attr_name": "temp1_max"}, + { "attr_name": "temp1_high_threshold", "drv_attr_name":"temp1_max"}, { "attr_name": "temp1_max_hyst"}, { "attr_name": "temp1_input"} ] @@ -1860,8 +1889,8 @@ "i2c" : { "attr_list": [ - {"attr_name":"blue", "descr" : "Blue", "bits" : "7", "value" : "0x0", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x41"}, - {"attr_name":"off", "descr" : "Off", "bits" : "7", "value" : "0x1", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x41"} + {"attr_name":"STATUS_LED_COLOR_BLUE", "descr" : "", "bits" : "7", "value" : "0x0", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x41"}, + {"attr_name":"STATUS_LED_COLOR_OFF", "descr" : "", "bits" : "7", "value" : "0x1", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x41"} ] } }, @@ -1873,9 +1902,9 @@ "i2c" : { "attr_list": [ - {"attr_name":"green", "descr" : "Green", "bits" : "1:0", "value" : "0x2", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x41"}, - {"attr_name":"red", "descr" : "Red" ,"bits" : "1:0", "value" : "0x1", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x41"}, - {"attr_name":"off", "descr" : "Off" ,"bits" : "1:0", "value" : "0x3", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x41"} + {"attr_name":"STATUS_LED_COLOR_GREEN", "descr" : "", "bits" : "1:0", "value" : "0x2", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x41"}, + {"attr_name":"STATUS_LED_COLOR_RED", "descr" : "" ,"bits" : "1:0", "value" : "0x1", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x41"}, + {"attr_name":"STATUS_LED_COLOR_OFF", "descr" : "" ,"bits" : "1:0", "value" : "0x3", "swpld_addr" : "0x60", "swpld_addr_offset" : "0x41"} ] } diff --git a/device/accton/x86_64-accton_as7726_32x-r0/pmon_daemon_control.json b/device/accton/x86_64-accton_as7726_32x-r0/pmon_daemon_control.json index 584a14b9d942..a3b204e20d8d 100644 --- a/device/accton/x86_64-accton_as7726_32x-r0/pmon_daemon_control.json +++ b/device/accton/x86_64-accton_as7726_32x-r0/pmon_daemon_control.json @@ -1,5 +1,5 @@ { "skip_ledd": true, - "skip_thermalctld": true + "skip_pcied": true } diff --git a/device/accton/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json b/device/accton/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json index 12d6c3a115e2..27d181da1829 100644 --- a/device/accton/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json +++ b/device/accton/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json @@ -114,7 +114,7 @@ "i2c": { "topo_info": { "parent_bus":"0x0", "dev_addr":"0x77", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x1"}, + "dev_attr": { "virt_bus":"0x1", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"MUX2" }, @@ -137,7 +137,7 @@ "i2c": { "topo_info": { "parent_bus":"0x1", "dev_addr":"0x71", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x9"}, + "dev_attr": { "virt_bus":"0x9", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PSU2"}, @@ -249,7 +249,7 @@ "i2c": { "topo_info": { "parent_bus":"0x1", "dev_addr":"0x76", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x11"}, + "dev_attr": { "virt_bus":"0x11", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"TEMP1" }, @@ -464,7 +464,7 @@ "i2c": { "topo_info": { "parent_bus":"0x1", "dev_addr":"0x73", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x19"}, + "dev_attr": { "virt_bus":"0x19", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PORT61" }, @@ -484,7 +484,7 @@ "i2c": { "topo_info": { "parent_bus":"0x2", "dev_addr":"0x70", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x21"}, + "dev_attr": { "virt_bus":"0x21", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PORT9" }, @@ -504,7 +504,7 @@ "i2c": { "topo_info": { "parent_bus":"0x2", "dev_addr":"0x71", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x29"}, + "dev_attr": { "virt_bus":"0x29", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PORT6" }, @@ -524,7 +524,7 @@ "i2c": { "topo_info": { "parent_bus":"0x2", "dev_addr":"0x72", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x31"}, + "dev_attr": { "virt_bus":"0x31", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PORT17" }, @@ -544,7 +544,7 @@ "i2c": { "topo_info": { "parent_bus":"0x2", "dev_addr":"0x73", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x39"}, + "dev_attr": { "virt_bus":"0x39", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PORT29" }, @@ -564,7 +564,7 @@ "i2c": { "topo_info": { "parent_bus":"0x2", "dev_addr":"0x74", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x41"}, + "dev_attr": { "virt_bus":"0x41", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PORT41" }, @@ -584,7 +584,7 @@ "i2c": { "topo_info": { "parent_bus":"0x2", "dev_addr":"0x75", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x49"}, + "dev_attr": { "virt_bus":"0x49", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PORT45" }, @@ -604,7 +604,7 @@ "i2c": { "topo_info": { "parent_bus":"0x2", "dev_addr":"0x76", "dev_type":"pca9548"}, - "dev_attr": { "virt_bus":"0x51"}, + "dev_attr": { "virt_bus":"0x51", "idle_state":"-2"}, "channel": [ { "chn":"0", "dev":"PORT57" }, diff --git a/device/accton/x86_64-accton_as7816_64x-r0/pmon_daemon_control.json b/device/accton/x86_64-accton_as7816_64x-r0/pmon_daemon_control.json index 0d3f1fb4561d..a3b204e20d8d 100644 --- a/device/accton/x86_64-accton_as7816_64x-r0/pmon_daemon_control.json +++ b/device/accton/x86_64-accton_as7816_64x-r0/pmon_daemon_control.json @@ -1,6 +1,5 @@ { "skip_ledd": true, - "skip_pcied": true, - "skip_thermalctld": true + "skip_pcied": true } diff --git a/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/__init__.py b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/__init__.py new file mode 100644 index 000000000000..73a7720e8979 --- /dev/null +++ b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/__init__.py @@ -0,0 +1,2 @@ +__all__ = [ "platform", "chassis", "sfp", "eeprom", "component", "psu", "thermal", "fan", "fan_drawer" ] +from . import platform diff --git a/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/chassis.py b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/chassis.py new file mode 100644 index 000000000000..44a759045b6b --- /dev/null +++ b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/chassis.py @@ -0,0 +1,250 @@ +############################################################################# +# Edgecore +# +# Module contains an implementation of SONiC Platform Base API and +# provides the Chassis information which are available in the platform +# +############################################################################# + +import os +import sys + +try: + from sonic_platform_base.chassis_base import ChassisBase + from .helper import APIHelper + from .event import SfpEvent +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +NUM_FAN_TRAY = 4 +NUM_FAN = 2 +NUM_PSU = 2 +NUM_THERMAL = 6 +NUM_PORT = 64 +NUM_COMPONENT = 5 +HOST_REBOOT_CAUSE_PATH = "/host/reboot-cause/" +PMON_REBOOT_CAUSE_PATH = "/usr/share/sonic/platform/api_files/reboot-cause/" +REBOOT_CAUSE_FILE = "reboot-cause.txt" +PREV_REBOOT_CAUSE_FILE = "previous-reboot-cause.txt" +HOST_CHK_CMD = "which systemctl > /dev/null 2>&1" +SYSLED_FNODE = "/sys/class/leds/as7816_64x_led::diag/brightness" +SYSLED_MODES = { + "0" : "STATUS_LED_COLOR_OFF", + "16" : "STATUS_LED_COLOR_GREEN", + "10" : "STATUS_LED_COLOR_RED" + +} + + +class Chassis(ChassisBase): + """Platform-specific Chassis class""" + + def __init__(self): + ChassisBase.__init__(self) + self._api_helper = APIHelper() + self.is_host = self._api_helper.is_host() + + self.config_data = {} + + self.__initialize_fan() + self.__initialize_psu() + self.__initialize_thermals() + self.__initialize_components() + self.__initialize_sfp() + self.__initialize_eeprom() + + def __initialize_sfp(self): + from sonic_platform.sfp import Sfp + for index in range(0, NUM_PORT): + sfp = Sfp(index) + self._sfp_list.append(sfp) + self._sfpevent = SfpEvent(self._sfp_list) + self.sfp_module_initialized = True + + def __initialize_fan(self): + from sonic_platform.fan_drawer import FanDrawer + for fant_index in range(NUM_FAN_TRAY): + fandrawer = FanDrawer(fant_index) + self._fan_drawer_list.append(fandrawer) + self._fan_list.extend(fandrawer._fan_list) + + def __initialize_psu(self): + from sonic_platform.psu import Psu + for index in range(0, NUM_PSU): + psu = Psu(index) + self._psu_list.append(psu) + + def __initialize_thermals(self): + from sonic_platform.thermal import Thermal + for index in range(0, NUM_THERMAL): + thermal = Thermal(index) + self._thermal_list.append(thermal) + + def __initialize_eeprom(self): + from sonic_platform.eeprom import Tlv + self._eeprom = Tlv() + + def __initialize_components(self): + from sonic_platform.component import Component + for index in range(0, NUM_COMPONENT): + component = Component(index) + self._component_list.append(component) + + def __initialize_watchdog(self): + from sonic_platform.watchdog import Watchdog + self._watchdog = Watchdog() + + + def __is_host(self): + return os.system(HOST_CHK_CMD) == 0 + + def __read_txt_file(self, file_path): + try: + with open(file_path, 'r') as fd: + data = fd.read() + return data.strip() + except IOError: + pass + return None + + def get_name(self): + """ + Retrieves the name of the device + Returns: + string: The name of the device + """ + return self._eeprom.get_product_name() + + def get_presence(self): + """ + Retrieves the presence of the Chassis + Returns: + bool: True if Chassis is present, False if not + """ + return True + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + return True + + def get_base_mac(self): + """ + Retrieves the base MAC address for the chassis + Returns: + A string containing the MAC address in the format + 'XX:XX:XX:XX:XX:XX' + """ + return self._eeprom.get_mac() + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + return self._eeprom.get_pn() + + def get_serial(self): + """ + Retrieves the hardware serial number for the chassis + Returns: + A string containing the hardware serial number for this chassis. + """ + return self._eeprom.get_serial() + + def get_system_eeprom_info(self): + """ + Retrieves the full content of system EEPROM information for the chassis + Returns: + A dictionary where keys are the type code defined in + OCP ONIE TlvInfo EEPROM format and values are their corresponding + values. + """ + return self._eeprom.get_eeprom() + + def get_reboot_cause(self): + """ + Retrieves the cause of the previous reboot + Returns: + A tuple (string, string) where the first element is a string + containing the cause of the previous reboot. This string must be + one of the predefined strings in this class. If the first string + is "REBOOT_CAUSE_HARDWARE_OTHER", the second string can be used + to pass a description of the reboot cause. + """ + + reboot_cause_path = (HOST_REBOOT_CAUSE_PATH + REBOOT_CAUSE_FILE) + sw_reboot_cause = self._api_helper.read_txt_file( + reboot_cause_path) or "Unknown" + + + return ('REBOOT_CAUSE_NON_HARDWARE', sw_reboot_cause) + + def get_change_event(self, timeout=0): + # SFP event + if not self.sfp_module_initialized: + self.__initialize_sfp() + return self._sfpevent.get_sfp_event(timeout) + + def get_sfp(self, index): + """ + Retrieves sfp represented by (1-based) index + Args: + index: An integer, the index (1-based) of the sfp to retrieve. + The index should be the sequence of a physical port in a chassis, + starting from 1. + For example, 1 for Ethernet0, 2 for Ethernet4 and so on. + Returns: + An object dervied from SfpBase representing the specified sfp + """ + sfp = None + if not self.sfp_module_initialized: + self.__initialize_sfp() + + try: + # The index will start from 1 + sfp = self._sfp_list[index-1] + except IndexError: + sys.stderr.write("SFP index {} out of range (1-{})\n".format( + index, len(self._sfp_list))) + return sfp + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return -1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return False + + + def initizalize_system_led(self): + return True + + def get_status_led(self): + val = self._api_helper.read_txt_file(SYSLED_FNODE) + return SYSLED_MODES[val] if val in SYSLED_MODES else "UNKNOWN" + + def set_status_led(self, color): + mode = None + for key, val in SYSLED_MODES.items(): + if val == color: + mode = key + break + if mode is None: + return False + else: + return self._api_helper.write_txt_file(SYSLED_FNODE, mode) diff --git a/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/component.py b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/component.py new file mode 100644 index 000000000000..6af2f6008e72 --- /dev/null +++ b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/component.py @@ -0,0 +1,177 @@ +############################################################################# +# Edgecore +# +# Component contains an implementation of SONiC Platform Base API and +# provides the components firmware management function +# +############################################################################# + +import shlex +import subprocess + +try: + from sonic_platform_base.component_base import ComponentBase + from .helper import APIHelper +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +CPLD_ADDR_MAPPING = { + "CPLD1": "19-0060", + "CPLD2": "20-0062", + "CPLD3": "21-0064", + "CPLD4": "22-0066", +} +SYSFS_PATH = "/sys/bus/i2c/devices/" +BIOS_VERSION_PATH = "/sys/class/dmi/id/bios_version" +COMPONENT_LIST= [ + ("CPLD1", "CPLD 1"), + ("CPLD2", "CPLD 2"), + ("CPLD3", "CPLD 3"), + ("CPLD4", "CPLD 4"), + ("BIOS", "Basic Input/Output System") + +] + +class Component(ComponentBase): + """Platform-specific Component class""" + + DEVICE_TYPE = "component" + + def __init__(self, component_index=0): + self._api_helper=APIHelper() + ComponentBase.__init__(self) + self.index = component_index + self.name = self.get_name() + + def __run_command(self, command): + # Run bash command and print output to stdout + try: + process = subprocess.Popen( + shlex.split(command), stdout=subprocess.PIPE) + while True: + output = process.stdout.readline() + if output == '' and process.poll() is not None: + break + rc = process.poll() + if rc != 0: + return False + except Exception: + return False + return True + + def __get_bios_version(self): + # Retrieves the BIOS firmware version + try: + with open(BIOS_VERSION_PATH, 'r') as fd: + bios_version = fd.read() + return bios_version.strip() + except Exception as e: + return None + + def __get_cpld_version(self): + # Retrieves the CPLD firmware version + cpld_version = dict() + for cpld_name in CPLD_ADDR_MAPPING: + try: + cpld_path = "{}{}{}".format(SYSFS_PATH, CPLD_ADDR_MAPPING[cpld_name], '/version') + cpld_version_raw= self._api_helper.read_txt_file(cpld_path) + cpld_version[cpld_name] = "{}".format(int(cpld_version_raw,16)) + except Exception as e: + print('Get exception when read cpld') + cpld_version[cpld_name] = 'None' + + return cpld_version + + def get_name(self): + """ + Retrieves the name of the component + Returns: + A string containing the name of the component + """ + return COMPONENT_LIST[self.index][0] + + def get_description(self): + """ + Retrieves the description of the component + Returns: + A string containing the description of the component + """ + return COMPONENT_LIST[self.index][1] + + def get_firmware_version(self): + """ + Retrieves the firmware version of module + Returns: + string: The firmware versions of the module + """ + fw_version = None + + if self.name == "BIOS": + fw_version = self.__get_bios_version() + elif "CPLD" in self.name: + cpld_version = self.__get_cpld_version() + fw_version = cpld_version.get(self.name) + + return fw_version + + def install_firmware(self, image_path): + """ + Install firmware to module + Args: + image_path: A string, path to firmware image + Returns: + A boolean, True if install successfully, False if not + """ + raise NotImplementedError + + def get_presence(self): + """ + Retrieves the presence of the device + Returns: + bool: True if device is present, False if not + """ + return True + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + return 'N/A' + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + return 'N/A' + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + return True + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + If the agent cannot determine the parent-relative position + for some reason, or if the associated value of + entPhysicalContainedIn is'0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device + or -1 if cannot determine the position + """ + return -1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return False diff --git a/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/eeprom.py b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/eeprom.py new file mode 100644 index 000000000000..c87f01c50a52 --- /dev/null +++ b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/eeprom.py @@ -0,0 +1,134 @@ +try: + import os + import sys + import re + if sys.version_info[0] >= 3: + from io import StringIO + else: + from cStringIO import StringIO + + from sonic_platform_base.sonic_eeprom import eeprom_tlvinfo +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +CACHE_ROOT = '/var/cache/sonic/decode-syseeprom' +CACHE_FILE = 'syseeprom_cache' +NULL = 'N/A' + +class Tlv(eeprom_tlvinfo.TlvInfoDecoder): + + EEPROM_DECODE_HEADLINES = 6 + + def __init__(self): + self._eeprom_path = "/sys/bus/i2c/devices/0-0056/eeprom" + super(Tlv, self).__init__(self._eeprom_path, 0, '', True) + self._eeprom = self._load_eeprom() + + def __parse_output(self, decode_output): + decode_output.replace('\0', '') + lines = decode_output.split('\n') + lines = lines[self.EEPROM_DECODE_HEADLINES:] + _eeprom_info_dict = dict() + + for line in lines: + try: + match = re.search( + '(0x[0-9a-fA-F]{2})([\s]+[\S]+[\s]+)([\S]+)', line) + if match is not None: + idx = match.group(1) + value = match.group(3).rstrip('\0') + + _eeprom_info_dict[idx] = value + except Exception: + pass + + return _eeprom_info_dict + + def _load_eeprom(self): + original_stdout = sys.stdout + sys.stdout = StringIO() + try: + self.read_eeprom_db() + except Exception: + decode_output = sys.stdout.getvalue() + sys.stdout = original_stdout + return self.__parse_output(decode_output) + + status = self.check_status() + if 'ok' not in status: + return False + + if not os.path.exists(CACHE_ROOT): + try: + os.makedirs(CACHE_ROOT) + except Exception: + pass + + # + # only the eeprom classes that inherit from eeprom_base + # support caching. Others will work normally + # + try: + self.set_cache_name(os.path.join(CACHE_ROOT, CACHE_FILE)) + except Exception: + pass + + e = self.read_eeprom() + if e is None: + return 0 + + try: + self.update_cache(e) + except Exception: + pass + + self.decode_eeprom(e) + decode_output = sys.stdout.getvalue() + sys.stdout = original_stdout + + (is_valid, valid_crc) = self.is_checksum_valid(e) + if not is_valid: + return False + + return self.__parse_output(decode_output) + + def _valid_tlv(self, eeprom_data): + tlvinfo_type_codes_list = [ + self._TLV_CODE_PRODUCT_NAME, + self._TLV_CODE_PART_NUMBER, + self._TLV_CODE_SERIAL_NUMBER, + self._TLV_CODE_MAC_BASE, + self._TLV_CODE_MANUF_DATE, + self._TLV_CODE_DEVICE_VERSION, + self._TLV_CODE_LABEL_REVISION, + self._TLV_CODE_PLATFORM_NAME, + self._TLV_CODE_ONIE_VERSION, + self._TLV_CODE_MAC_SIZE, + self._TLV_CODE_MANUF_NAME, + self._TLV_CODE_MANUF_COUNTRY, + self._TLV_CODE_VENDOR_NAME, + self._TLV_CODE_DIAG_VERSION, + self._TLV_CODE_SERVICE_TAG, + self._TLV_CODE_VENDOR_EXT, + self._TLV_CODE_CRC_32 + ] + + for code in tlvinfo_type_codes_list: + code_str = "0x{:X}".format(code) + eeprom_data[code_str] = eeprom_data.get(code_str, NULL) + return eeprom_data + + def get_eeprom(self): + return self._valid_tlv(self._eeprom) + + def get_pn(self): + return self._eeprom.get('0x22', NULL) + + def get_serial(self): + return self._eeprom.get('0x23', NULL) + + def get_mac(self): + return self._eeprom.get('0x24', NULL) + + def get_product_name(self): + return self._eeprom.get('0x21', NULL) diff --git a/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/event.py b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/event.py new file mode 100644 index 000000000000..eb845c7e4aad --- /dev/null +++ b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/event.py @@ -0,0 +1,62 @@ +try: + import time + from .helper import APIHelper + from sonic_py_common.logger import Logger +except ImportError as e: + raise ImportError(repr(e) + " - required module not found") + +POLL_INTERVAL_IN_SEC = 1 + +class SfpEvent: + ''' Listen to insert/remove sfp events ''' + + def __init__(self, sfp_list): + self._api_helper = APIHelper() + self._sfp_list = sfp_list + self._logger = Logger() + self._sfp_change_event_data = {'present': 0} + + def get_presence_bitmap(self): + bitmap = 0 + for sfp in self._sfp_list: + modpres = sfp.get_presence() + i=sfp.port_num-1 + if modpres: + bitmap = bitmap | (1 << i) + return bitmap + + def get_sfp_event(self, timeout=2000): + port_dict = {} + change_dict = {} + change_dict['sfp'] = port_dict + + if timeout < 1000: + cd_ms = 1000 + else: + cd_ms = timeout + + while cd_ms > 0: + bitmap = self.get_presence_bitmap() + changed_ports = self._sfp_change_event_data['present'] ^ bitmap + if changed_ports != 0: + break + time.sleep(POLL_INTERVAL_IN_SEC) + # timeout=0 means wait for event forever + if timeout != 0: + cd_ms = cd_ms - POLL_INTERVAL_IN_SEC * 1000 + + if changed_ports != 0: + for sfp in self._sfp_list: + i=sfp.port_num-1 + if (changed_ports & (1 << i)): + if (bitmap & (1 << i)) == 0: + port_dict[i+1] = '0' + else: + port_dict[i+1] = '1' + + + # Update the cache dict + self._sfp_change_event_data['present'] = bitmap + return True, change_dict + else: + return True, change_dict diff --git a/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/fan.py b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/fan.py new file mode 100644 index 000000000000..0ec1fc3962f9 --- /dev/null +++ b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/fan.py @@ -0,0 +1,263 @@ +############################################################################# +# Edgecore +# +# Module contains an implementation of SONiC Platform Base API and +# provides the fan status which are available in the platform +# +############################################################################# + +try: + from sonic_platform_base.fan_base import FanBase + from .helper import APIHelper +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +SPEED_TOLERANCE = 15 +CPLD_FAN_I2C_PATH = "/sys/bus/i2c/devices/17-0068/fan" +I2C_PATH ="/sys/bus/i2c/devices/{}-00{}/" +PSU_HWMON_I2C_MAPPING = { + 0: { + "num": 10, + "addr": "5b" + }, + 1: { + "num": 9, + "addr": "58" + }, +} + +PSU_CPLD_I2C_MAPPING = { + 0: { + "num": 10, + "addr": "53" + }, + 1: { + "num": 9, + "addr": "50" + }, +} + +FAN_NAME_LIST = ["FAN-1F", "FAN-1R", "FAN-2F", "FAN-2R", + "FAN-3F", "FAN-3R", "FAN-4F", "FAN-4R"] + +class Fan(FanBase): + """Platform-specific Fan class""" + + def __init__(self, fan_tray_index, fan_index=0, is_psu_fan=False, psu_index=0): + self._api_helper=APIHelper() + self.fan_index = fan_index + self.fan_tray_index = fan_tray_index + self.is_psu_fan = is_psu_fan + + + if self.is_psu_fan: + self.psu_index = psu_index + self.psu_i2c_num = PSU_HWMON_I2C_MAPPING[self.psu_index]['num'] + self.psu_i2c_addr = PSU_HWMON_I2C_MAPPING[self.psu_index]['addr'] + self.psu_hwmon_path = I2C_PATH.format( + self.psu_i2c_num, self.psu_i2c_addr) + + self.psu_i2c_num = PSU_CPLD_I2C_MAPPING[self.psu_index]['num'] + self.psu_i2c_addr = PSU_CPLD_I2C_MAPPING[self.psu_index]['addr'] + self.psu_cpld_path = I2C_PATH.format( + self.psu_i2c_num, self.psu_i2c_addr) + + FanBase.__init__(self) + + + def get_direction(self): + """ + Retrieves the direction of fan + Returns: + A string, either FAN_DIRECTION_INTAKE or FAN_DIRECTION_EXHAUST + depending on fan direction + """ + if not self.is_psu_fan: + dir_str = "{}{}{}".format(CPLD_FAN_I2C_PATH, self.fan_tray_index+1, '_direction') + val=self._api_helper.read_txt_file(dir_str) + if val is not None: #F2B is FAN_DIRECTION_EXHAUST + direction = self.FAN_DIRECTION_EXHAUST if ( + val == "0") else self.FAN_DIRECTION_INTAKE + else: + direction=self.FAN_DIRECTION_EXHAUST + + else: #For PSU + direction=self.FAN_DIRECTION_EXHAUST + + return direction + + def get_speed(self): + """ + Retrieves the speed of fan as a percentage of full speed + Returns: + An integer, the percentage of full fan speed, in the range 0 (off) + to 100 (full speed) + """ + speed = 0 + if self.is_psu_fan: + psu_fan_path= "{}{}".format(self.psu_hwmon_path, 'psu_fan1_speed_rpm') + fan_speed_rpm = self._api_helper.read_txt_file(psu_fan_path) + if fan_speed_rpm is not None: + speed = (int(fan_speed_rpm,10))*100/26688 + if speed > 100: + speed=100 + else: + return 0 + elif self.get_presence(): + speed_path = "{}{}".format(CPLD_FAN_I2C_PATH, '_duty_cycle_percentage') + speed=self._api_helper.read_txt_file(speed_path) + if speed is None: + return 0 + return int(speed) + + def get_target_speed(self): + """ + Retrieves the target (expected) speed of the fan + Returns: + An integer, the percentage of full fan speed, in the range 0 (off) + to 100 (full speed) + Note: + speed_pc = pwm_target/255*100 + 0 : when PWM mode is use + pwm : when pwm mode is not use + """ + return self.get_speed() + + def get_speed_tolerance(self): + """ + Retrieves the speed tolerance of the fan + Returns: + An integer, the percentage of variance from target speed which is + considered tolerable + """ + return SPEED_TOLERANCE + + def set_speed(self, speed): + """ + Sets the fan speed + Args: + speed: An integer, the percentage of full fan speed to set fan to, + in the range 0 (off) to 100 (full speed) + Returns: + A boolean, True if speed is set successfully, False if not + """ + + if not self.is_psu_fan and self.get_presence(): + speed_path = "{}{}".format(CPLD_FAN_I2C_PATH, '_duty_cycle_percentage') + return self._api_helper.write_txt_file(speed_path, int(speed)) + + return False + + def set_status_led(self, color): + """ + Sets the state of the fan module status LED + Args: + color: A string representing the color with which to set the + fan module status LED + Returns: + bool: True if status LED state is set successfully, False if not + """ + return False #Not supported + + def get_status_led(self): + """ + Gets the state of the fan status LED + Returns: + A string, one of the predefined STATUS_LED_COLOR_* strings above + """ + status=self.get_presence() + if status is None: + return self.STATUS_LED_COLOR_OFF + + return { + 1: self.STATUS_LED_COLOR_GREEN, + 0: self.STATUS_LED_COLOR_RED + }.get(status, self.STATUS_LED_COLOR_OFF) + + def get_name(self): + """ + Retrieves the name of the device + Returns: + string: The name of the device + """ + fan_name = FAN_NAME_LIST[self.fan_tray_index*2 + self.fan_index] \ + if not self.is_psu_fan \ + else "PSU-{} FAN-{}".format(self.psu_index+1, self.fan_index+1) + + return fan_name + + def get_presence(self): + """ + Retrieves the presence of the FAN + Returns: + bool: True if FAN is present, False if not + """ + present_path = "{}{}{}".format(CPLD_FAN_I2C_PATH, self.fan_tray_index+1, '_present') + val=self._api_helper.read_txt_file(present_path) + if not self.is_psu_fan: + if val is not None: + return int(val, 10)==1 + else: + return False + else: + return True + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + if self.is_psu_fan: + psu_fan_path= "{}{}".format(self.psu_hwmon_path, 'psu_fan1_fault') + val=self._api_helper.read_txt_file(psu_fan_path) + if val is not None: + return int(val, 10)==0 + else: + return False + else: + path = "{}{}{}".format(CPLD_FAN_I2C_PATH, self.fan_tray_index+1, '_fault') + val=self._api_helper.read_txt_file(path) + if val is not None: + return int(val, 10)==0 + else: + return False + + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + + return "N/A" + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + return "N/A" + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + If the agent cannot determine the parent-relative position + for some reason, or if the associated value of + entPhysicalContainedIn is'0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device + or -1 if cannot determine the position + """ + return (self.fan_index+1) \ + if not self.is_psu_fan else (self.psu_index+1) + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True if not self.is_psu_fan else False diff --git a/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/fan_drawer.py b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/fan_drawer.py new file mode 100644 index 000000000000..17d339ee55f6 --- /dev/null +++ b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/fan_drawer.py @@ -0,0 +1,90 @@ +######################################################################## +# +# Module contains an implementation of SONiC Platform Base API and +# provides the Fan-Drawers' information available in the platform. +# +######################################################################## + +try: + from sonic_platform_base.fan_drawer_base import FanDrawerBase +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +FANS_PER_FANTRAY = 2 + + +class FanDrawer(FanDrawerBase): + """Platform-specific Fan class""" + + def __init__(self, fantray_index): + + FanDrawerBase.__init__(self) + # FanTray is 0-based in platforms + self.fantrayindex = fantray_index + self.__initialize_fan_drawer() + + + def __initialize_fan_drawer(self): + from sonic_platform.fan import Fan + for i in range(FANS_PER_FANTRAY): + self._fan_list.append(Fan(self.fantrayindex, i)) + + def get_name(self): + """ + Retrieves the fan drawer name + Returns: + string: The name of the device + """ + return "FanTray{}".format(self.fantrayindex+1) + + def get_presence(self): + """ + Retrieves the presence of the device + Returns: + bool: True if device is present, False if not + """ + return self._fan_list[0].get_presence() + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + return self._fan_list[0].get_model() + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + return self._fan_list[0].get_serial() + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + return self._fan_list[0].get_status() + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + If the agent cannot determine the parent-relative position + for some reason, or if the associated value of + entPhysicalContainedIn is'0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device + or -1 if cannot determine the position + """ + return (self.fantrayindex+1) + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True diff --git a/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/helper.py b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/helper.py new file mode 100644 index 000000000000..b124ca29f0df --- /dev/null +++ b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/helper.py @@ -0,0 +1,117 @@ +import os +import struct +import subprocess +from mmap import * +from sonic_py_common import device_info + +HOST_CHK_CMD = "docker > /dev/null 2>&1" +EMPTY_STRING = "" + + +class APIHelper(): + + def __init__(self): + (self.platform, self.hwsku) = device_info.get_platform_and_hwsku() + + def is_host(self): + return os.system(HOST_CHK_CMD) == 0 + + def pci_get_value(self, resource, offset): + status = True + result = "" + try: + fd = os.open(resource, os.O_RDWR) + mm = mmap(fd, 0) + mm.seek(int(offset)) + read_data_stream = mm.read(4) + result = struct.unpack('I', read_data_stream) + except Exception: + status = False + return status, result + + def run_command(self, cmd): + status = True + result = "" + try: + p = subprocess.Popen( + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + raw_data, err = p.communicate() + if err == '': + result = raw_data.strip() + except Exception: + status = False + return status, result + + def run_interactive_command(self, cmd): + try: + os.system(cmd) + except Exception: + return False + return True + + def read_txt_file(self, file_path): + try: + with open(file_path, 'r', errors='replace') as fd: + data = fd.read() + return data.strip() + except IOError: + pass + return None + + def write_txt_file(self, file_path, value): + try: + with open(file_path, 'w') as fd: + fd.write(str(value)) + except IOError: + return False + return True + + def ipmi_raw(self, netfn, cmd): + status = True + result = "" + try: + cmd = "ipmitool raw {} {}".format(str(netfn), str(cmd)) + p = subprocess.Popen( + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + raw_data, err = p.communicate() + if err == '': + result = raw_data.strip() + else: + status = False + except Exception: + status = False + return status, result + + def ipmi_fru_id(self, id, key=None): + status = True + result = "" + try: + cmd = "ipmitool fru print {}".format(str( + id)) if not key else "ipmitool fru print {0} | grep '{1}' ".format(str(id), str(key)) + + p = subprocess.Popen( + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + raw_data, err = p.communicate() + if err == '': + result = raw_data.strip() + else: + status = False + except Exception: + status = False + return status, result + + def ipmi_set_ss_thres(self, id, threshold_key, value): + status = True + result = "" + try: + cmd = "ipmitool sensor thresh '{}' {} {}".format(str(id), str(threshold_key), str(value)) + p = subprocess.Popen( + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + raw_data, err = p.communicate() + if err == '': + result = raw_data.strip() + else: + status = False + except Exception: + status = False + return status, result diff --git a/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/platform.py b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/platform.py new file mode 100644 index 000000000000..2f2c2a447fcf --- /dev/null +++ b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/platform.py @@ -0,0 +1,21 @@ +############################################################################# +# Edgecore +# +# Module contains an implementation of SONiC Platform Base API and +# provides the platform information +# +############################################################################# + +try: + from sonic_platform_base.platform_base import PlatformBase + from sonic_platform.chassis import Chassis +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class Platform(PlatformBase): + """Platform-specific Platform class""" + + def __init__(self): + PlatformBase.__init__(self) + self._chassis = Chassis() diff --git a/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/psu.py b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/psu.py new file mode 100644 index 000000000000..53dd058bbac7 --- /dev/null +++ b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/psu.py @@ -0,0 +1,283 @@ +############################################################################# +# Edgecore +# +# Module contains an implementation of SONiC Platform Base API and +# provides the PSUs status which are available in the platform +# +############################################################################# + +try: + from sonic_platform_base.psu_base import PsuBase + from sonic_platform.thermal import Thermal + from .helper import APIHelper +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +I2C_PATH ="/sys/bus/i2c/devices/{0}-00{1}/" + +PSU_NAME_LIST = ["PSU-1", "PSU-2"] +PSU_NUM_FAN = [1, 1] +PSU_CPLD_I2C_MAPPING = { + 0: { + "num": 10, + "addr": "53" + }, + 1: { + "num": 9, + "addr": "50" + }, +} + +PSU_HWMON_I2C_MAPPING = { + 0: { + "num": 10, + "addr": "5b" + }, + 1: { + "num": 9, + "addr": "58" + }, +} + +NUM_FAN_TRAY = 4 + +class Psu(PsuBase): + """Platform-specific Psu class""" + def __init__(self, psu_index=0): + PsuBase.__init__(self) + self.index = psu_index + self._api_helper = APIHelper() + + self.i2c_num = PSU_HWMON_I2C_MAPPING[self.index]["num"] + self.i2c_addr = PSU_HWMON_I2C_MAPPING[self.index]["addr"] + self.hwmon_path = I2C_PATH.format(self.i2c_num, self.i2c_addr) + + self.i2c_num = PSU_CPLD_I2C_MAPPING[self.index]["num"] + self.i2c_addr = PSU_CPLD_I2C_MAPPING[self.index]["addr"] + self.cpld_path = I2C_PATH.format(self.i2c_num, self.i2c_addr) + + self.__initialize_fan() + + def __initialize_fan(self): + from sonic_platform.fan import Fan + self._fan_list.append( + Fan(NUM_FAN_TRAY + self.index, + is_psu_fan=True, + psu_index=self.index)) + self._thermal_list.append(Thermal(is_psu=True, psu_index=self.index)) + + def __read_txt_file(self, file_path): + try: + with open(file_path, 'r') as fd: + return fd.read().strip() + except IOError: + pass + return None + + def get_voltage(self): + """ + Retrieves current PSU voltage output + Returns: + A float number, the output voltage in volts, + e.g. 12.1 + """ + vout_path = "{}{}".format(self.hwmon_path, 'psu_v_out') + vout_val=self._api_helper.read_txt_file(vout_path) + + if vout_val is not None: + return float(vout_val)/ 1000 + else: + return 0 + + def get_current(self): + """ + Retrieves present electric current supplied by PSU + Returns: + A float number, the electric current in amperes, e.g 15.4 + """ + iout_path = "{}{}".format(self.hwmon_path, 'psu_i_out') + val=self._api_helper.read_txt_file(iout_path) + if val is not None: + return float(val)/1000 + else: + return 0 + + def get_power(self): + """ + Retrieves current energy supplied by PSU + Returns: + A float number, the power in watts, e.g. 302.6 + """ + pout_path = "{}{}".format(self.hwmon_path, 'psu_p_out') + val=self._api_helper.read_txt_file(pout_path) + if val is not None: + return float(val)/1000 + else: + return 0 + + def get_powergood_status(self): + """ + Retrieves the powergood status of PSU + Returns: + A boolean, True if PSU has stablized its output voltages and passed all + its internal self-tests, False if not. + """ + return self.get_status() + + def set_status_led(self, color): + """ + Sets the state of the PSU status LED + Args: + color: A string representing the color with which to set the PSU status LED + Note: Only support green and off + Returns: + bool: True if status LED state is set successfully, False if not + """ + + return False #Controlled by HW + + def get_status_led(self): + """ + Gets the state of the PSU status LED + Returns: + A string, one of the predefined STATUS_LED_COLOR_* strings above + """ + status=self.get_status() + if status is None: + return self.STATUS_LED_COLOR_OFF + + return { + 1: self.STATUS_LED_COLOR_GREEN, + 0: self.STATUS_LED_COLOR_RED + }.get(status, self.STATUS_LED_COLOR_OFF) + + def get_temperature(self): + """ + Retrieves current temperature reading from PSU + Returns: + A float number of current temperature in Celsius up to nearest thousandth + of one degree Celsius, e.g. 30.125 + """ + temp_path = "{}{}".format(self.hwmon_path, 'psu_temp1_input') + val=self._api_helper.read_txt_file(temp_path) + if val is not None: + return float(val)/1000 + else: + return 0 + + def get_temperature_high_threshold(self): + """ + Retrieves the high threshold temperature of PSU + Returns: + A float number, the high threshold temperature of PSU in Celsius + up to nearest thousandth of one degree Celsius, e.g. 30.125 + """ + return False #Not supported + + def get_voltage_high_threshold(self): + """ + Retrieves the high threshold PSU voltage output + Returns: + A float number, the high threshold output voltage in volts, + e.g. 12.1 + """ + vout_path = "{}{}".format(self.hwmon_path, 'psu_mfr_vout_max') + vout_val=self._api_helper.read_txt_file(vout_path) + if vout_val is not None: + return float(vout_val)/ 1000 + else: + return 0 + + def get_voltage_low_threshold(self): + """ + Retrieves the low threshold PSU voltage output + Returns: + A float number, the low threshold output voltage in volts, + e.g. 12.1 + """ + vout_path = "{}{}".format(self.hwmon_path, 'psu_mfr_vout_min') + vout_val=self._api_helper.read_txt_file(vout_path) + if vout_val is not None: + return float(vout_val)/ 1000 + else: + return 0 + + def get_name(self): + """ + Retrieves the name of the device + Returns: + string: The name of the device + """ + return PSU_NAME_LIST[self.index] + + def get_presence(self): + """ + Retrieves the presence of the PSU + Returns: + bool: True if PSU is present, False if not + """ + presence_path="{}{}".format(self.cpld_path, 'psu_present') + val=self._api_helper.read_txt_file(presence_path) + if val is not None: + return int(val, 10) == 1 + else: + return 0 + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + power_path="{}{}".format(self.cpld_path, 'psu_power_good') + val=self._api_helper.read_txt_file(power_path) + if val is not None: + return int(val, 10) == 1 + else: + return 0 + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + model_path="{}{}".format(self.hwmon_path, 'psu_mfr_model') + val=self._api_helper.read_txt_file(model_path) + if val is None: + return "N/A" + model=val[1:] + + return model + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + serial_path="{}{}".format(self.hwmon_path, 'psu_mfr_serial') + val=self._api_helper.read_txt_file(serial_path) + if val is None: + return "N/A" + serial=val[1:] + + return serial + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return self.index+1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True diff --git a/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/sfp.py b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/sfp.py new file mode 100644 index 000000000000..01e568ef3e78 --- /dev/null +++ b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/sfp.py @@ -0,0 +1,506 @@ +############################################################################# +# Edgecore +# +# Sfp contains an implementation of SONiC Platform Base API and +# provides the sfp device status which are available in the platform +# +############################################################################# + +import os +import time +import sys + +from ctypes import create_string_buffer + +try: + from sonic_platform_base.sonic_xcvr.sfp_optoe_base import SfpOptoeBase + from .helper import APIHelper +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +CPLD_I2C_PATH = "/sys/bus/i2c/devices/19-0060/" + + +class Sfp(SfpOptoeBase): + """Platform-specific Sfp class""" + + # Port number + PORT_START = 1 + PORT_END = 64 + + # Path to sysfs + PLATFORM_ROOT_PATH = "/usr/share/sonic/device" + PMON_HWSKU_PATH = "/usr/share/sonic/hwsku" + HOST_CHK_CMD = "which systemctl > /dev/null 2>&1" + + PLATFORM = "x86_64-accton_as7816_64x-r0" + HWSKU = "Accton-AS7816-64X" + + _port_to_i2c_mapping = { + 61: 25, + 62: 26, + 63: 27, + 64: 28, + 55: 29, + 56: 30, + 53: 31, + 54: 32, + 9: 33, + 10: 34, + 11: 35, + 12: 36, + 1: 37, + 2: 38, + 3: 39, + 4: 40, + 6: 41, + 5: 42, + 8: 43, + 7: 44, + 13: 45, + 14: 46, + 15: 47, + 16: 48, + 17: 49, + 18: 50, + 19: 51, + 20: 52, + 25: 53, + 26: 54, + 27: 55, + 28: 56, + 29: 57, + 30: 58, + 31: 59, + 32: 60, + 21: 61, + 22: 62, + 23: 63, + 24: 64, + 41: 65, + 42: 66, + 43: 67, + 44: 68, + 33: 69, + 34: 70, + 35: 71, + 36: 72, + 45: 73, + 46: 74, + 47: 75, + 48: 76, + 37: 77, + 38: 78, + 39: 79, + 40: 80, + 57: 81, + 58: 82, + 59: 83, + 60: 84, + 49: 85, + 50: 86, + 51: 87, + 52: 88 + } + + def __init__(self, sfp_index=0): + SfpOptoeBase.__init__(self) + self._api_helper=APIHelper() + # Init index + self.index = sfp_index + self.port_num = self.index + 1 + # Init eeprom path + eeprom_path = '/sys/bus/i2c/devices/{0}-0050/eeprom' + self.port_to_eeprom_mapping = {} + for x in range(self.PORT_START, self.PORT_END + 1): + self.port_to_eeprom_mapping[x] = eeprom_path.format(self._port_to_i2c_mapping[x]) + + def get_eeprom_path(self): + return self.port_to_eeprom_mapping[self.port_num] + + def __is_host(self): + return os.system(self.HOST_CHK_CMD) == 0 + + def __get_path_to_port_config_file(self): + platform_path = "/".join([self.PLATFORM_ROOT_PATH, self.PLATFORM]) + hwsku_path = "/".join([platform_path, self.HWSKU] + ) if self.__is_host() else self.PMON_HWSKU_PATH + return "/".join([hwsku_path, "port_config.ini"]) + + def __read_eeprom_specific_bytes(self, offset, num_bytes): + sysfsfile_eeprom = None + eeprom_raw = [] + for i in range(0, num_bytes): + eeprom_raw.append("0x00") + + sysfs_sfp_i2c_client_eeprom_path = self.port_to_eeprom_mapping[self.port_num] + try: + sysfsfile_eeprom = open( + sysfs_sfp_i2c_client_eeprom_path, mode="rb", buffering=0) + sysfsfile_eeprom.seek(offset) + raw = sysfsfile_eeprom.read(num_bytes) + if sys.version_info[0] >= 3: + for n in range(0, num_bytes): + eeprom_raw[n] = hex(raw[n])[2:].zfill(2) + else: + for n in range(0, num_bytes): + eeprom_raw[n] = hex(ord(raw[n]))[2:].zfill(2) + except Exception: + pass + finally: + if sysfsfile_eeprom: + sysfsfile_eeprom.close() + + return eeprom_raw + + def get_reset_status(self): + """ + Retrieves the reset status of SFP + Returns: + A Boolean, True if reset enabled, False if disabled + """ + reset_path="{}{}{}".format(CPLD_I2C_PATH , "module_reset_" , str(self.port_num)) + val = self._api_helper.read_txt_file(reset_path) + + if val is not None: + return int(val, 10) == 1 + else: + return False + + def get_rx_los(self): + """ + Retrieves the RX LOS (lost-of-signal) status of SFP + Returns: + A Boolean, True if SFP has RX LOS, False if not. + Note : RX LOS status is latched until a call to get_rx_los or a reset. + """ + + rx_los_list = [] + dom_channel_monitor_raw = self.__read_eeprom_specific_bytes( + QSFP_CHANNL_RX_LOS_STATUS_OFFSET, QSFP_CHANNL_RX_LOS_STATUS_WIDTH) if self.get_presence() else None + 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 & 0x01 != 0) + rx_los_list.append(rx_los_data & 0x02 != 0) + rx_los_list.append(rx_los_data & 0x04 != 0) + rx_los_list.append(rx_los_data & 0x08 != 0) + return rx_los_list + else: + return [False]*4 + + + def get_tx_fault(self): + """ + Retrieves the TX fault status of SFP + Returns: + A Boolean, True if SFP has TX fault, False if not + Note : TX fault status is lached until a call to get_tx_fault or a reset. + """ + tx_fault_list = [] + dom_channel_monitor_raw = self.__read_eeprom_specific_bytes( + QSFP_CHANNL_TX_FAULT_STATUS_OFFSET, QSFP_CHANNL_TX_FAULT_STATUS_WIDTH) if self.get_presence() else None + 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 & 0x01 != 0) + tx_fault_list.append(tx_fault_data & 0x02 != 0) + tx_fault_list.append(tx_fault_data & 0x04 != 0) + tx_fault_list.append(tx_fault_data & 0x08 != 0) + return tx_fault_list + else: + return [False]*4 + + def get_tx_disable(self): + """ + Retrieves the tx_disable status of this SFP + Returns: + A Boolean, True if tx_disable is enabled, False if disabled + """ + + tx_disable_list = [] + + sfpd_obj = sff8436Dom() + if sfpd_obj is None: + return False + + dom_control_raw = self.__read_eeprom_specific_bytes( + QSFP_CONTROL_OFFSET, QSFP_CONTROL_WIDTH) if self.get_presence() else None + if dom_control_raw is not None: + dom_control_data = sfpd_obj.parse_control_bytes(dom_control_raw, 0) + tx_disable_list.append( + 'On' == dom_control_data['data']['TX1Disable']['value']) + tx_disable_list.append( + 'On' == dom_control_data['data']['TX2Disable']['value']) + tx_disable_list.append( + 'On' == dom_control_data['data']['TX3Disable']['value']) + tx_disable_list.append( + 'On' == dom_control_data['data']['TX4Disable']['value']) + return tx_disable_list + else: + return [False]*4 + + def get_tx_disable_channel(self): + """ + Retrieves the TX disabled channels in this SFP + Returns: + A hex of 4 bits (bit 0 to bit 3 as channel 0 to channel 3) to represent + TX channels which have been disabled in this SFP. + As an example, a returned value of 0x5 indicates that channel 0 + and channel 2 have been disabled. + """ + tx_disable_list = self.get_tx_disable() + if tx_disable_list is None: + return 0 + tx_disabled = 0 + for i in range(len(tx_disable_list)): + if tx_disable_list[i]: + tx_disabled |= 1 << i + return tx_disabled + + 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 + """ + + power_set=self.get_power_set() + power_override = self.get_power_override() + return power_set and power_override + + def get_power_set(self): + power_set = False + sfpd_obj = sff8436Dom() + if sfpd_obj is None: + return False + dom_control_raw = self.__read_eeprom_specific_bytes( + QSFP_CONTROL_OFFSET, QSFP_CONTROL_WIDTH) if self.get_presence() else None + if dom_control_raw is not None: + dom_control_data = sfpd_obj.parse_control_bytes(dom_control_raw, 0) + power_set = ( + 'On' == dom_control_data['data']['PowerSet']['value']) + + return power_set + + def get_power_override(self): + """ + Retrieves the power-override status of this SFP + Returns: + A Boolean, True if power-override is enabled, False if disabled + """ + power_override = False + sfpd_obj = sff8436Dom() + if sfpd_obj is None: + return False + + dom_control_raw = self.__read_eeprom_specific_bytes( + QSFP_CONTROL_OFFSET, QSFP_CONTROL_WIDTH) if self.get_presence() else None + if dom_control_raw is not None: + dom_control_data = sfpd_obj.parse_control_bytes(dom_control_raw, 0) + power_override = ( + 'On' == dom_control_data['data']['PowerOverride']['value']) + + return power_override + + def reset(self): + """ + Reset SFP and return all user module settings to their default srate. + Returns: + A boolean, True if successful, False if not + """ + reset_path = "{}{}{}".format(CPLD_I2C_PATH , 'module_reset_' , self.port_num) + ret = self._api_helper.write_txt_file(reset_path, 1) + if ret is not True: + return ret + + time.sleep(0.01) + ret = self._api_helper.write_txt_file(reset_path, 0) + time.sleep(0.2) + + return ret + + def tx_disable(self, tx_disable): + """ + Disable SFP TX for all channels + Args: + tx_disable : A Boolean, True to enable tx_disable mode, False to disable + tx_disable mode. + Returns: + A boolean, True if tx_disable is set successfully, False if not + """ + if not self.get_presence(): + return False + sysfsfile_eeprom = None + try: + tx_disable_ctl = 0xf if tx_disable else 0x0 + buffer = create_string_buffer(1) + if sys.version_info[0] >= 3: + buffer[0] = tx_disable_ctl + else: + buffer[0] = chr(tx_disable_ctl) + # Write to eeprom + sysfsfile_eeprom = open( + self.port_to_eeprom_mapping[self.port_num], "r+b") + sysfsfile_eeprom.seek(QSFP_CONTROL_OFFSET) + sysfsfile_eeprom.write(buffer[0]) + except IOError as e: + print ('Error: unable to open file: ',str(e)) + return False + finally: + if sysfsfile_eeprom is not None: + sysfsfile_eeprom.close() + time.sleep(0.01) + + return True + + def tx_disable_channel(self, channel, disable): + """ + Sets the tx_disable for specified SFP channels + Args: + channel : A hex of 4 bits (bit 0 to bit 3) which represent channel 0 to 3, + e.g. 0x5 for channel 0 and channel 2. + disable : A boolean, True to disable TX channels specified in channel, + False to enable + Returns: + A boolean, True if successful, False if not + """ + if not self.get_presence(): + return False + + sysfsfile_eeprom = None + try: + channel_state = self.get_tx_disable_channel() + for i in range(4): + channel_mask = (1 << i) + if not (channel & channel_mask): + continue + + if disable: + channel_state |= channel_mask + else: + channel_state &= ~channel_mask + + buffer = create_string_buffer(1) + if sys.version_info[0] >= 3: + buffer[0] = channel_state + else: + buffer[0] = chr(channel_state) + # Write to eeprom + sysfsfile_eeprom = open( + self.port_to_eeprom_mapping[self.port_num], "r+b") + sysfsfile_eeprom.seek(QSFP_CONTROL_OFFSET) + sysfsfile_eeprom.write(buffer[0]) + except IOError as e: + print ('Error: unable to open file: ', str(e)) + return False + finally: + if sysfsfile_eeprom is not None: + sysfsfile_eeprom.close() + time.sleep(0.01) + + return True + + 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 + """ + if lpmode: + self.set_power_override(True, True) + else: + self.set_power_override(False, False) + + return True + + def set_power_override(self, power_override, power_set): + """ + Sets SFP power level using power_override and power_set + Args: + power_override : + A Boolean, True to override set_lpmode and use power_set + to control SFP power, False to disable SFP power control + through power_override/power_set and use set_lpmode + to control SFP power. + power_set : + Only valid when power_override is True. + A Boolean, True to set SFP to low power mode, False to set + SFP to high power mode. + Returns: + A boolean, True if power-override and power_set are set successfully, + False if not + """ + + if not self.get_presence(): + return False + try: + power_override_bit = (1 << 0) if power_override else 0 + power_set_bit = (1 << 1) if power_set else (1 << 3) + + buffer = create_string_buffer(1) + if sys.version_info[0] >= 3: + buffer[0] = (power_override_bit | power_set_bit) + else: + buffer[0] = chr(power_override_bit | power_set_bit) + # Write to eeprom + with open(self.port_to_eeprom_mapping[self.port_num], "r+b") as fd: + fd.seek(QSFP_POWEROVERRIDE_OFFSET) + fd.write(buffer[0]) + time.sleep(0.01) + except Exception: + print ('Error: unable to open file: ', str(e)) + return False + + return True + + def get_name(self): + """ + Retrieves the name of the device + Returns: + string: The name of the device + """ + sfputil_helper = SfpUtilHelper() + sfputil_helper.read_porttab_mappings( + self.__get_path_to_port_config_file()) + name = sfputil_helper.logical[self.index] or "Unknown" + return name + + def get_presence(self): + """ + Retrieves the presence of the device + Returns: + bool: True if device is present, False if not + """ + present_path = "{}{}{}".format(CPLD_I2C_PATH , '/module_present_' , self.port_num) + val=self._api_helper.read_txt_file(present_path) + if val is not None: + return int(val, 10)==1 + else: + return False + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + return self.get_presence() + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return self.port_num + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True diff --git a/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/thermal.py b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/thermal.py new file mode 100644 index 000000000000..34256bf8c244 --- /dev/null +++ b/device/accton/x86_64-accton_as7816_64x-r0/sonic_platform/thermal.py @@ -0,0 +1,236 @@ +############################################################################# +# Edgecore +# +# Thermal contains an implementation of SONiC Platform Base API and +# provides the thermal device status which are available in the platform +# +############################################################################# + +import os +import os.path +import glob + +try: + from sonic_platform_base.thermal_base import ThermalBase +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +PSU_I2C_PATH = "/sys/bus/i2c/devices/{}-00{}/" + +PSU_HWMON_I2C_MAPPING = { + 0: { + "num": 10, + "addr": "5b" + }, + 1: { + "num": 9, + "addr": "58" + }, +} + +PSU_CPLD_I2C_MAPPING = { + 0: { + "num": 10, + "addr": "53" + }, + 1: { + "num": 9, + "addr": "50" + }, +} + +THERMAL_NAME_LIST = ["Temp sensor 1", "Temp sensor 2", "Temp sensor 3", + "Temp sensor 4", "Temp sensor 5", "Temp sensor 6"] + +PSU_THERMAL_NAME_LIST = ["PSU-1 temp sensor 1", "PSU-2 temp sensor 2"] + +SYSFS_PATH = "/sys/bus/i2c/devices" + +class Thermal(ThermalBase): + """Platform-specific Thermal class""" + + def __init__(self, thermal_index=0, is_psu=False, psu_index=0): + self.index = thermal_index + self.is_psu = is_psu + self.psu_index = psu_index + + if self.is_psu: + psu_i2c_bus = PSU_HWMON_I2C_MAPPING[psu_index]["num"] + psu_i2c_addr = PSU_HWMON_I2C_MAPPING[psu_index]["addr"] + self.psu_hwmon_path = PSU_I2C_PATH.format(psu_i2c_bus, + psu_i2c_addr) + psu_i2c_bus = PSU_CPLD_I2C_MAPPING[psu_index]["num"] + psu_i2c_addr = PSU_CPLD_I2C_MAPPING[psu_index]["addr"] + self.cpld_path = PSU_I2C_PATH.format(psu_i2c_bus, psu_i2c_addr) + + # Set hwmon path + i2c_path = { + 0: "18-0048/hwmon/hwmon*/", + 1: "18-0049/hwmon/hwmon*/", + 2: "18-004a/hwmon/hwmon*/", + 3: "18-004b/hwmon/hwmon*/", + 4: "17-004d/hwmon/hwmon*/", + 5: "17-004d/hwmon/hwmon*/" + }.get(self.index, None) + + self.hwmon_path = "{}/{}".format(SYSFS_PATH, i2c_path) + self.ss_key = THERMAL_NAME_LIST[self.index] + self.ss_index = 1 + + def __read_txt_file(self, file_path): + for filename in glob.glob(file_path): + try: + with open(filename, 'r') as fd: + data =fd.readline().rstrip() + return data + except IOError as e: + pass + + return None + + def __get_temp(self, temp_file): + if not self.is_psu: + temp_file_path = os.path.join(self.hwmon_path, temp_file) + else: + temp_file_path = temp_file + raw_temp = self.__read_txt_file(temp_file_path) + if raw_temp is not None: + return float(raw_temp)/1000 + else: + return 0 + + def __set_threshold(self, file_name, temperature): + if self.is_psu: + return True + temp_file_path = os.path.join(self.hwmon_path, file_name) + for filename in glob.glob(temp_file_path): + try: + with open(filename, 'w') as fd: + fd.write(str(temperature)) + return True + except IOError as e: + print("IOError") + return False + + + def get_temperature(self): + """ + Retrieves current temperature reading from thermal + Returns: + A float number of current temperature in Celsius up to nearest thousandth + of one degree Celsius, e.g. 30.125 + """ + if not self.is_psu: + temp_file = "temp{}_input".format(self.ss_index) + else: + temp_file = self.psu_hwmon_path + "psu_temp1_input" + return self.__get_temp(temp_file) + + def get_high_threshold(self): + """ + Retrieves the high threshold temperature of thermal + Returns: + A float number, the high threshold temperature of thermal in Celsius + up to nearest thousandth of one degree Celsius, e.g. 30.125 + """ + if self.is_psu: + return 80 + + temp_file = "temp{}_max".format(self.ss_index) + return self.__get_temp(temp_file) + + def set_high_threshold(self, temperature): + """ + Sets the high threshold temperature of thermal + Args : + temperature: A float number up to nearest thousandth of one degree Celsius, + e.g. 30.125 + Returns: + A boolean, True if threshold is set successfully, False if not + """ + temp_file = "temp{}_max".format(self.ss_index) + temperature = temperature *1000 + self.__set_threshold(temp_file, temperature) + + return True + + def get_name(self): + """ + Retrieves the name of the thermal device + Returns: + string: The name of the thermal device + """ + if self.is_psu: + return PSU_THERMAL_NAME_LIST[self.psu_index] + else: + return THERMAL_NAME_LIST[self.index] + + def get_presence(self): + """ + Retrieves the presence of the Thermal + Returns: + bool: True if Thermal is present, False if not + """ + if self.is_psu: + val = self.__read_txt_file(self.cpld_path + "psu_present") + return int(val, 10) == 1 + temp_file = "temp{}_input".format(self.ss_index) + temp_file_path = os.path.join(self.hwmon_path, temp_file) + raw_txt = self.__read_txt_file(temp_file_path) + if raw_txt is not None: + return True + else: + return False + + def get_status(self): + """ + Retrieves the operational status of the device + Returns: + A boolean value, True if device is operating properly, False if not + """ + if self.is_psu: + temp_file = self.psu_hwmon_path + "psu_temp_fault" + return self.get_presence() and (not int( + self.__read_txt_file(temp_file))) + + file_str = "temp{}_input".format(self.ss_index) + file_path = os.path.join(self.hwmon_path, file_str) + raw_txt = self.__read_txt_file(file_path) + if raw_txt is None: + return False + else: + return int(raw_txt) != 0 + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + Returns: + string: Model/part number of device + """ + + return "N/A" + + def get_serial(self): + """ + Retrieves the serial number of the device + Returns: + string: Serial number of device + """ + return "N/A" + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return self.index+1 + + def is_replaceable(self): + """ + Retrieves whether thermal module is replaceable + Returns: + A boolean value, True if replaceable, False if not + """ + return False diff --git a/device/accton/x86_64-accton_as7816_64x-r0/system_health_monitoring_config.json b/device/accton/x86_64-accton_as7816_64x-r0/system_health_monitoring_config.json new file mode 100644 index 000000000000..92be29dfdea6 --- /dev/null +++ b/device/accton/x86_64-accton_as7816_64x-r0/system_health_monitoring_config.json @@ -0,0 +1,15 @@ +{ + "services_to_ignore": [], + "devices_to_ignore": [ + "asic", + "psu.temperature" + + ], + "user_defined_checkers": [], + "polling_interval": 60, + "led_color": { + "fault": "STATUS_LED_COLOR_RED", + "normal": "STATUS_LED_COLOR_GREEN", + "booting": "STATUS_LED_COLOR_GREEN" + } +} diff --git a/device/accton/x86_64-accton_as9716_32d-r0/pddf/pddf-device.json b/device/accton/x86_64-accton_as9716_32d-r0/pddf/pddf-device.json index ce592286078c..6bde8eab7648 100644 --- a/device/accton/x86_64-accton_as9716_32d-r0/pddf/pddf-device.json +++ b/device/accton/x86_64-accton_as9716_32d-r0/pddf/pddf-device.json @@ -53,7 +53,8 @@ ], "custom_kos": [ - "pddf_custom_psu" + "pddf_custom_psu", + "accton_as9716_32d_ioport" ] }, diff --git a/device/accton/x86_64-accton_as9716_32d-r0/pmon_daemon_control.json b/device/accton/x86_64-accton_as9716_32d-r0/pmon_daemon_control.json index 584a14b9d942..a3b204e20d8d 100644 --- a/device/accton/x86_64-accton_as9716_32d-r0/pmon_daemon_control.json +++ b/device/accton/x86_64-accton_as9716_32d-r0/pmon_daemon_control.json @@ -1,5 +1,5 @@ { "skip_ledd": true, - "skip_thermalctld": true + "skip_pcied": true } diff --git a/device/accton/x86_64-accton_wedge100bf_32qs-r0/default_sku b/device/accton/x86_64-accton_wedge100bf_32qs-r0/default_sku new file mode 100644 index 000000000000..e2f0630cc576 --- /dev/null +++ b/device/accton/x86_64-accton_wedge100bf_32qs-r0/default_sku @@ -0,0 +1 @@ +montara t1 diff --git a/device/accton/x86_64-accton_wedge100bf_32qs-r0/installer.conf b/device/accton/x86_64-accton_wedge100bf_32qs-r0/installer.conf new file mode 100644 index 000000000000..3714ff053bb0 --- /dev/null +++ b/device/accton/x86_64-accton_wedge100bf_32qs-r0/installer.conf @@ -0,0 +1 @@ +CONSOLE_SPEED=57600 diff --git a/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/buffers.json.j2 b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/buffers.json.j2 new file mode 100644 index 000000000000..1083a6210fc9 --- /dev/null +++ b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/buffers.json.j2 @@ -0,0 +1,2 @@ +{%- set default_topo = 't0' %} +{%- include 'buffers_config.j2' %} diff --git a/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/buffers_defaults_t0.j2 b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/buffers_defaults_t0.j2 new file mode 100755 index 000000000000..31fb9fa9ad70 --- /dev/null +++ b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/buffers_defaults_t0.j2 @@ -0,0 +1,79 @@ +{% set default_cable = '5m' %} +{% set ingress_lossless_pool_size = '4194304' %} +{% set ingress_lossy_pool_size = '7340032' %} +{% set egress_lossless_pool_size = '16777152' %} +{% set egress_lossy_pool_size = '7340032' %} + +{%- 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": "{{ ingress_lossless_pool_size }}", + "type": "ingress", + "mode": "dynamic" + }, + "ingress_lossy_pool": { + "size": "{{ ingress_lossy_pool_size }}", + "type": "ingress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "{{ egress_lossless_pool_size }}", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossy_pool": { + "size": "{{ egress_lossy_pool_size }}", + "type": "egress", + "mode": "dynamic" + } + }, + "BUFFER_PROFILE": { + "ingress_lossless_profile": { + "pool":"ingress_lossless_pool", + "size":"4096", + "dynamic_th":"0" + }, + "ingress_lossy_profile": { + "pool":"ingress_lossy_pool", + "size":"4096", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"4096", + "dynamic_th":"7" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"4096", + "dynamic_th":"3" + }, + "q_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"4096", + "dynamic_th":"3" + } + }, +{%- endmacro %} + +{%- macro generate_queue_buffers(port_names) %} + "BUFFER_QUEUE": { +{% for port in port_names.split(',') %} + "{{ port }}|0-1": { + "profile" : "q_lossy_profile" + }, +{% endfor %} +{% for port in port_names.split(',') %} + "{{ port }}|3-4": { + "profile" : "egress_lossless_profile" + }{% if not loop.last %},{% endif %} +{% endfor %} + } +{%- endmacro %} \ No newline at end of file diff --git a/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/buffers_defaults_t1.j2 b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/buffers_defaults_t1.j2 new file mode 100755 index 000000000000..0d4224f7f3b2 --- /dev/null +++ b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/buffers_defaults_t1.j2 @@ -0,0 +1,79 @@ +{% set default_cable = '5m' %} +{% set ingress_lossless_pool_size = '2097152' %} +{% set ingress_lossy_pool_size = '5242880' %} +{% set egress_lossless_pool_size = '16777152' %} +{% set egress_lossy_pool_size = '5242880' %} + +{%- 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": "{{ ingress_lossless_pool_size }}", + "type": "ingress", + "mode": "dynamic" + }, + "ingress_lossy_pool": { + "size": "{{ ingress_lossy_pool_size }}", + "type": "ingress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "{{ egress_lossless_pool_size }}", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossy_pool": { + "size": "{{ egress_lossy_pool_size }}", + "type": "egress", + "mode": "dynamic" + } + }, + "BUFFER_PROFILE": { + "ingress_lossless_profile": { + "pool":"ingress_lossless_pool", + "size":"4096", + "dynamic_th":"0" + }, + "ingress_lossy_profile": { + "pool":"ingress_lossy_pool", + "size":"4096", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"4096", + "dynamic_th":"7" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"4096", + "dynamic_th":"3" + }, + "q_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"4096", + "dynamic_th":"3" + } + }, +{%- endmacro %} + +{%- macro generate_queue_buffers(port_names) %} + "BUFFER_QUEUE": { +{% for port in port_names.split(',') %} + "{{ port }}|0-1": { + "profile" : "q_lossy_profile" + }, +{% endfor %} +{% for port in port_names.split(',') %} + "{{ port }}|3-4": { + "profile" : "egress_lossless_profile" + }{% if not loop.last %},{% endif %} +{% endfor %} + } +{%- endmacro %} \ No newline at end of file diff --git a/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/hwsku.json b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/hwsku.json new file mode 100644 index 000000000000..203aa5a34047 --- /dev/null +++ b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/hwsku.json @@ -0,0 +1,164 @@ +{ + "interfaces": { + "Ethernet0": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet4": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet8": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet12": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet16": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet20": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet24": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet28": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet32": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet36": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet40": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet44": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet48": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet52": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet56": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet60": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet64": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet68": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet72": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet76": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet80": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet84": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet88": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet92": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet96": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet100": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet104": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet108": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet112": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet116": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet120": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + }, + "Ethernet124": { + "default_brkout_mode": "1x100G[40G]", + "autoneg": "off", + "fec": "rs" + } + } +} diff --git a/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/pg_profile_lookup.ini b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/pg_profile_lookup.ini new file mode 100644 index 000000000000..b66b129fe43f --- /dev/null +++ b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/pg_profile_lookup.ini @@ -0,0 +1,17 @@ +# PG lossless profiles. +# speed cable size xon xoff threshold + 10000 5m 34816 18432 16384 0 + 25000 5m 34816 18432 16384 0 + 40000 5m 34816 18432 16384 0 + 50000 5m 34816 18432 16384 0 + 100000 5m 36864 18432 18432 0 + 10000 40m 36864 18432 18432 0 + 25000 40m 39936 18432 21504 0 + 40000 40m 41984 18432 23552 0 + 50000 40m 41984 18432 23552 0 + 100000 40m 54272 18432 35840 0 + 10000 300m 49152 18432 30720 0 + 25000 300m 71680 18432 53248 0 + 40000 300m 94208 18432 75776 0 + 50000 300m 94208 18432 75776 0 + 100000 300m 184320 18432 165888 0 diff --git a/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/port_config.ini b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/port_config.ini new file mode 100644 index 000000000000..4035147f583c --- /dev/null +++ b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/port_config.ini @@ -0,0 +1,33 @@ +# name lanes alias index speed autoneg fec +Ethernet0 0,1,2,3 Ethernet0 1 100000 off rs +Ethernet4 4,5,6,7 Ethernet4 2 100000 off rs +Ethernet8 8,9,10,11 Ethernet8 3 100000 off rs +Ethernet12 12,13,14,15 Ethernet12 4 100000 off rs +Ethernet16 16,17,18,19 Ethernet16 5 100000 off rs +Ethernet20 20,21,22,23 Ethernet20 6 100000 off rs +Ethernet24 24,25,26,27 Ethernet24 7 100000 off rs +Ethernet28 28,29,30,31 Ethernet28 8 100000 off rs +Ethernet32 32,33,34,35 Ethernet32 9 100000 off rs +Ethernet36 36,37,38,39 Ethernet36 10 100000 off rs +Ethernet40 40,41,42,43 Ethernet40 11 100000 off rs +Ethernet44 44,45,46,47 Ethernet44 12 100000 off rs +Ethernet48 48,49,50,51 Ethernet48 13 100000 off rs +Ethernet52 52,53,54,55 Ethernet52 14 100000 off rs +Ethernet56 56,57,58,59 Ethernet56 15 100000 off rs +Ethernet60 60,61,62,63 Ethernet60 16 100000 off rs +Ethernet64 64,65,66,67 Ethernet64 17 100000 off rs +Ethernet68 68,69,70,71 Ethernet68 18 100000 off rs +Ethernet72 72,73,74,75 Ethernet72 19 100000 off rs +Ethernet76 76,77,78,79 Ethernet76 20 100000 off rs +Ethernet80 80,81,82,83 Ethernet80 21 100000 off rs +Ethernet84 84,85,86,87 Ethernet84 22 100000 off rs +Ethernet88 88,89,90,91 Ethernet88 23 100000 off rs +Ethernet92 92,93,94,95 Ethernet92 24 100000 off rs +Ethernet96 96,97,98,99 Ethernet96 25 100000 off rs +Ethernet100 100,101,102,103 Ethernet100 26 100000 off rs +Ethernet104 104,105,106,107 Ethernet104 27 100000 off rs +Ethernet108 108,109,110,111 Ethernet108 28 100000 off rs +Ethernet112 112,113,114,115 Ethernet112 29 100000 off rs +Ethernet116 116,117,118,119 Ethernet116 30 100000 off rs +Ethernet120 120,121,122,123 Ethernet120 31 100000 off rs +Ethernet124 124,125,126,127 Ethernet124 32 100000 off rs diff --git a/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/qos.json.j2 b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/qos.json.j2 new file mode 100644 index 000000000000..a685277448f1 --- /dev/null +++ b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/qos.json.j2 @@ -0,0 +1,10 @@ +{%- macro generate_tc_to_pg_map() %} + "TC_TO_PRIORITY_GROUP_MAP": { + "AZURE": { + "3": "3", + "4": "4" + } + }, +{%- endmacro %} + +{%- include 'qos_config.j2' %} diff --git a/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/sai.profile b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/sai.profile new file mode 100644 index 000000000000..037b5c135370 --- /dev/null +++ b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/sai.profile @@ -0,0 +1,3 @@ +SAI_KEY_WARM_BOOT_WRITE_FILE=/var/warmboot/sai-warmboot.bin +SAI_KEY_WARM_BOOT_READ_FILE=/var/warmboot/sai-warmboot.bin + diff --git a/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/switch-tna-sai.conf b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/switch-tna-sai.conf new file mode 100644 index 000000000000..8c34ef9d6a9a --- /dev/null +++ b/device/accton/x86_64-accton_wedge100bf_32qs-r0/montara/switch-tna-sai.conf @@ -0,0 +1,39 @@ +{ + "chip_list": [ + { + "chip_family": "Tofino", + "sds_fw_path": "share/tofino_sds_fw/avago/firmware", + "instance": 0 + } + ], + "p4_devices": [ + { + "device-id": 0, + "agent0": "lib/platform/x86_64-accton_wedge100bf_32qs-r0/libpltfm_mgr.so", + "p4_programs": [ + { + "p4_pipelines": [ + { + "p4_pipeline_name": "pipe", + "config": "share/switch/pipe/tofino.bin", + "context": "share/switch/pipe/context.json" + } + ], + "program-name": "switch", + "bfrt-config": "share/switch/bf-rt.json", + "model_json_path" : "share/switch/aug_model.json", + "switchapi_port_add": false, + "non_default_port_ppgs": 5 + } + ] + } + ], + "switch_options": [ + { + "device-id": 0, + "model_json_path": "share/switch/aug_model.json", + "non_default_port_ppgs": 5, + "switchapi_port_add": false + } + ] +} diff --git a/device/accton/x86_64-accton_wedge100bf_32qs-r0/pcie.yaml b/device/accton/x86_64-accton_wedge100bf_32qs-r0/pcie.yaml new file mode 100644 index 000000000000..ab38096c9740 --- /dev/null +++ b/device/accton/x86_64-accton_wedge100bf_32qs-r0/pcie.yaml @@ -0,0 +1,412 @@ +- bus: '00' + dev: '00' + fn: '0' + id: 6f00 + name: 'Host bridge: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DMI2 + (rev 03)' +- bus: '00' + dev: '01' + fn: '0' + id: 6f02 + name: 'PCI bridge: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI + Express Root Port 1 (rev 03)' +- bus: '00' + dev: '01' + fn: '1' + id: 6f03 + name: 'PCI bridge: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI + Express Root Port 1 (rev 03)' +- bus: '00' + dev: '02' + fn: '0' + id: 6f04 + name: 'PCI bridge: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI + Express Root Port 2 (rev 03)' +- bus: '00' + dev: '02' + fn: '2' + id: 6f06 + name: 'PCI bridge: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI + Express Root Port 2 (rev 03)' +- bus: '00' + dev: '03' + fn: '0' + id: 6f08 + name: 'PCI bridge: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI + Express Root Port 3 (rev 03)' +- bus: '00' + dev: '05' + fn: '0' + id: 6f28 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Map/VTd_Misc/System Management (rev 03)' +- bus: '00' + dev: '05' + fn: '1' + id: 6f29 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO Hot Plug (rev 03)' +- bus: '00' + dev: '05' + fn: '2' + id: 6f2a + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO RAS/Control Status/Global Errors (rev 03)' +- bus: '00' + dev: '05' + fn: '4' + id: 6f2c + name: 'PIC: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D I/O APIC (rev + 03)' +- bus: '00' + dev: '14' + fn: '0' + id: 8c31 + name: 'USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB + xHCI (rev 05)' +- bus: '00' + dev: 1d + fn: '0' + id: 8c26 + name: 'USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB + EHCI #1 (rev 05)' +- bus: '00' + dev: 1f + fn: '0' + id: 8c54 + name: 'ISA bridge: Intel Corporation C224 Series Chipset Family Server Standard + SKU LPC Controller (rev 05)' +- bus: '00' + dev: 1f + fn: '2' + id: 8c02 + name: 'SATA controller: Intel Corporation 8 Series/C220 Series Chipset Family 6-port + SATA Controller 1 [AHCI mode] (rev 05)' +- bus: '00' + dev: 1f + fn: '3' + id: 8c22 + name: 'SMBus: Intel Corporation 8 Series/C220 Series Chipset Family SMBus Controller + (rev 05)' +- bus: '00' + dev: 1f + fn: '6' + id: 8c24 + name: 'Signal processing controller: Intel Corporation 8 Series Chipset Family Thermal + Management Controller (rev 05)' +- bus: '02' + dev: '00' + fn: '0' + id: '1533' + name: 'Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev + 03)' +- bus: '03' + dev: '00' + fn: '0' + id: 6f50 + name: 'System peripheral: Intel Corporation Xeon Processor D Family QuickData Technology + Register DMA Channel 0' +- bus: '03' + dev: '00' + fn: '1' + id: 6f51 + name: 'System peripheral: Intel Corporation Xeon Processor D Family QuickData Technology + Register DMA Channel 1' +- bus: '03' + dev: '00' + fn: '2' + id: 6f52 + name: 'System peripheral: Intel Corporation Xeon Processor D Family QuickData Technology + Register DMA Channel 2' +- bus: '03' + dev: '00' + fn: '3' + id: 6f53 + name: 'System peripheral: Intel Corporation Xeon Processor D Family QuickData Technology + Register DMA Channel 3' +- bus: '04' + dev: '00' + fn: '0' + id: 10a6 + name: 'Unassigned class [ff00]: Intel Corporation 82599EB 10-Gigabit Dummy Function' +- bus: '05' + dev: '00' + fn: '0' + id: '0010' + name: 'Unassigned class [ff00]: Device 1d1c:0010 (rev 10)' +- bus: ff + dev: 0b + fn: '0' + id: 6f81 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D R3 QPI Link 0/1 (rev 03)' +- bus: ff + dev: 0b + fn: '1' + id: 6f36 + name: 'Performance counters: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D R3 QPI Link 0/1 (rev 03)' +- bus: ff + dev: 0b + fn: '2' + id: 6f37 + name: 'Performance counters: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D R3 QPI Link 0/1 (rev 03)' +- bus: ff + dev: 0b + fn: '3' + id: 6f76 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D R3 QPI Link Debug (rev 03)' +- bus: ff + dev: 0c + fn: '0' + id: 6fe0 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Caching Agent (rev 03)' +- bus: ff + dev: 0c + fn: '1' + id: 6fe1 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Caching Agent (rev 03)' +- bus: ff + dev: 0c + fn: '2' + id: 6fe2 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Caching Agent (rev 03)' +- bus: ff + dev: 0c + fn: '3' + id: 6fe3 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Caching Agent (rev 03)' +- bus: ff + dev: 0f + fn: '0' + id: 6ff8 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Caching Agent (rev 03)' +- bus: ff + dev: 0f + fn: '4' + id: 6ffc + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Caching Agent (rev 03)' +- bus: ff + dev: 0f + fn: '5' + id: 6ffd + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Caching Agent (rev 03)' +- bus: ff + dev: 0f + fn: '6' + id: 6ffe + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Caching Agent (rev 03)' +- bus: ff + dev: '10' + fn: '0' + id: 6f1d + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D R2PCIe Agent (rev 03)' +- bus: ff + dev: '10' + fn: '1' + id: 6f34 + name: 'Performance counters: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D R2PCIe Agent (rev 03)' +- bus: ff + dev: '10' + fn: '5' + id: 6f1e + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Ubox (rev 03)' +- bus: ff + dev: '10' + fn: '6' + id: 6f7d + name: 'Performance counters: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Ubox (rev 03)' +- bus: ff + dev: '10' + fn: '7' + id: 6f1f + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Ubox (rev 03)' +- bus: ff + dev: '12' + fn: '0' + id: 6fa0 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Home Agent 0 (rev 03)' +- bus: ff + dev: '12' + fn: '1' + id: 6f30 + name: 'Performance counters: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Home Agent 0 (rev 03)' +- bus: ff + dev: '13' + fn: '0' + id: 6fa8 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Target Address/Thermal/RAS (rev 03)' +- bus: ff + dev: '13' + fn: '1' + id: 6f71 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Target Address/Thermal/RAS (rev 03)' +- bus: ff + dev: '13' + fn: '2' + id: 6faa + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel Target Address Decoder (rev 03)' +- bus: ff + dev: '13' + fn: '3' + id: 6fab + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel Target Address Decoder (rev 03)' +- bus: ff + dev: '13' + fn: '4' + id: 6fac + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel Target Address Decoder (rev 03)' +- bus: ff + dev: '13' + fn: '5' + id: 6fad + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel Target Address Decoder (rev 03)' +- bus: ff + dev: '13' + fn: '6' + id: 6fae + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D DDRIO Channel 0/1 Broadcast (rev 03)' +- bus: ff + dev: '13' + fn: '7' + id: 6faf + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D DDRIO Global Broadcast (rev 03)' +- bus: ff + dev: '14' + fn: '0' + id: 6fb0 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel 0 Thermal Control (rev 03)' +- bus: ff + dev: '14' + fn: '1' + id: 6fb1 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel 1 Thermal Control (rev 03)' +- bus: ff + dev: '14' + fn: '2' + id: 6fb2 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel 0 Error (rev 03)' +- bus: ff + dev: '14' + fn: '3' + id: 6fb3 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel 1 Error (rev 03)' +- bus: ff + dev: '14' + fn: '4' + id: 6fbc + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D DDRIO Channel 0/1 Interface (rev 03)' +- bus: ff + dev: '14' + fn: '5' + id: 6fbd + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D DDRIO Channel 0/1 Interface (rev 03)' +- bus: ff + dev: '14' + fn: '6' + id: 6fbe + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D DDRIO Channel 0/1 Interface (rev 03)' +- bus: ff + dev: '14' + fn: '7' + id: 6fbf + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D DDRIO Channel 0/1 Interface (rev 03)' +- bus: ff + dev: '15' + fn: '0' + id: 6fb4 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel 2 Thermal Control (rev 03)' +- bus: ff + dev: '15' + fn: '1' + id: 6fb5 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel 3 Thermal Control (rev 03)' +- bus: ff + dev: '15' + fn: '2' + id: 6fb6 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel 2 Error (rev 03)' +- bus: ff + dev: '15' + fn: '3' + id: 6fb7 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel 3 Error (rev 03)' +- bus: ff + dev: 1e + fn: '0' + id: 6f98 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Power Control Unit (rev 03)' +- bus: ff + dev: 1e + fn: '1' + id: 6f99 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Power Control Unit (rev 03)' +- bus: ff + dev: 1e + fn: '2' + id: 6f9a + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Power Control Unit (rev 03)' +- bus: ff + dev: 1e + fn: '3' + id: 6fc0 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Power Control Unit (rev 03)' +- bus: ff + dev: 1e + fn: '4' + id: 6f9c + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Power Control Unit (rev 03)' +- bus: ff + dev: 1f + fn: '0' + id: 6f88 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Power Control Unit (rev 03)' +- bus: ff + dev: 1f + fn: '2' + id: 6f8a + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Power Control Unit (rev 03)' diff --git a/device/accton/x86_64-accton_wedge100bf_32qs-r0/platform.json b/device/accton/x86_64-accton_wedge100bf_32qs-r0/platform.json new file mode 100755 index 000000000000..9f5658141f78 --- /dev/null +++ b/device/accton/x86_64-accton_wedge100bf_32qs-r0/platform.json @@ -0,0 +1,499 @@ +{ + "chassis": { + "name": "Wedge100BF-32QS-O-AC-F-BF", + "fans": [ + { + "name": "counter-rotating-fan-1" + }, + { + "name": "counter-rotating-fan-2" + }, + { + "name": "counter-rotating-fan-3" + }, + { + "name": "counter-rotating-fan-4" + }, + { + "name": "counter-rotating-fan-5" + } + ], + "fan_drawers": [ + { + "name": "fantray-1", + "fans": [ + { + "name": "counter-rotating-fan-1" + }, + { + "name": "counter-rotating-fan-2" + }, + { + "name": "counter-rotating-fan-3" + }, + { + "name": "counter-rotating-fan-4" + }, + { + "name": "counter-rotating-fan-5" + } + ] + } + ], + "psus": [ + { + "name": "psu-1" + }, + { + "name": "psu-2" + } + ], + "thermals": [ + { + "name": "com_e_driver-i2c-4-33:memory-temp" + }, + { + "name": "com_e_driver-i2c-4-33:cpu-temp" + }, + { + "name": "pfe1100-i2c-7-59:temp1" + }, + { + "name": "pfe1100-i2c-7-59:temp2" + }, + { + "name": "pfe1100-i2c-7-5a:temp1" + }, + { + "name": "pfe1100-i2c-7-5a:temp2" + }, + { + "name": "tmp75-i2c-3-48:outlet-middle-temp" + }, + { + "name": "tmp75-i2c-3-49:inlet-middle-temp" + }, + { + "name": "tmp75-i2c-3-4a:inlet-left-temp" + }, + { + "name": "tmp75-i2c-3-4b:switch-temp" + }, + { + "name": "tmp75-i2c-3-4c:inlet-right-temp" + }, + { + "name": "tmp75-i2c-8-48:outlet-right-temp" + }, + { + "name": "tmp75-i2c-8-49:outlet-left-temp" + }, + { + "name": "coretemp-isa-0000:package-id-0" + }, + { + "name": "coretemp-isa-0000:core-0" + }, + { + "name": "coretemp-isa-0000:core-1" + }, + { + "name": "coretemp-isa-0000:core-2" + }, + { + "name": "coretemp-isa-0000:core-3" + }, + { + "name": "pch_haswell-virtual-0:temp1" + } + ], + "sfps": [ + { + "name": "sfp1" + }, + { + "name": "sfp2" + }, + { + "name": "sfp3" + }, + { + "name": "sfp4" + }, + { + "name": "sfp5" + }, + { + "name": "sfp6" + }, + { + "name": "sfp7" + }, + { + "name": "sfp8" + }, + { + "name": "sfp9" + }, + { + "name": "sfp10" + }, + { + "name": "sfp11" + }, + { + "name": "sfp12" + }, + { + "name": "sfp13" + }, + { + "name": "sfp14" + }, + { + "name": "sfp15" + }, + { + "name": "sfp16" + }, + { + "name": "sfp17" + }, + { + "name": "sfp18" + }, + { + "name": "sfp19" + }, + { + "name": "sfp20" + }, + { + "name": "sfp21" + }, + { + "name": "sfp22" + }, + { + "name": "sfp23" + }, + { + "name": "sfp24" + }, + { + "name": "sfp25" + }, + { + "name": "sfp26" + }, + { + "name": "sfp27" + }, + { + "name": "sfp28" + }, + { + "name": "sfp29" + }, + { + "name": "sfp30" + }, + { + "name": "sfp31" + }, + { + "name": "sfp32" + } + ] + }, + "interfaces": { + "Ethernet0": { + "index": "1,1,1,1", + "lanes": "0,1,2,3", + "breakout_modes": { + "1x100G[40G]": ["Ethernet0"], + "2x50G": ["Ethernet0", "Ethernet2"], + "4x25G[10G]": ["Ethernet0", "Ethernet1", "Ethernet2", "Ethernet3"] + } + }, + "Ethernet4": { + "index": "2,2,2,2", + "lanes": "4,5,6,7", + "breakout_modes": { + "1x100G[40G]": ["Ethernet4"], + "2x50G": ["Ethernet4", "Ethernet6"], + "4x25G[10G]": ["Ethernet4", "Ethernet5", "Ethernet6", "Ethernet7"] + } + }, + "Ethernet8": { + "index": "3,3,3,3", + "lanes": "8,9,10,11", + "breakout_modes": { + "1x100G[40G]": ["Ethernet8"], + "2x50G": ["Ethernet8", "Ethernet10"], + "4x25G[10G]": ["Ethernet8", "Ethernet9", "Ethernet10", "Ethernet11"] + } + }, + "Ethernet12": { + "index": "4,4,4,4", + "lanes": "12,13,14,15", + "breakout_modes": { + "1x100G[40G]": ["Ethernet12"], + "2x50G": ["Ethernet12", "Ethernet14"], + "4x25G[10G]": ["Ethernet12", "Ethernet13", "Ethernet14", "Ethernet15"] + } + }, + "Ethernet16": { + "index": "5,5,5,5", + "lanes": "16,17,18,19", + "breakout_modes": { + "1x100G[40G]": ["Ethernet16"], + "2x50G": ["Ethernet16", "Ethernet18"], + "4x25G[10G]": ["Ethernet16", "Ethernet17", "Ethernet18", "Ethernet19"] + } + }, + "Ethernet20": { + "index": "6,6,6,6", + "lanes": "20,21,22,23", + "breakout_modes": { + "1x100G[40G]": ["Ethernet20"], + "2x50G": ["Ethernet20", "Ethernet22"], + "4x25G[10G]": ["Ethernet20", "Ethernet21", "Ethernet22", "Ethernet23"] + } + }, + "Ethernet24": { + "index": "7,7,7,7", + "lanes": "24,25,26,27", + "breakout_modes": { + "1x100G[40G]": ["Ethernet24"], + "2x50G": ["Ethernet24", "Ethernet26"], + "4x25G[10G]": ["Ethernet24", "Ethernet25", "Ethernet26", "Ethernet27"] + } + }, + "Ethernet28": { + "index": "8,8,8,8", + "lanes": "28,29,30,31", + "breakout_modes": { + "1x100G[40G]": ["Ethernet28"], + "2x50G": ["Ethernet28", "Ethernet30"], + "4x25G[10G]": ["Ethernet28", "Ethernet29", "Ethernet30", "Ethernet31"] + } + }, + "Ethernet32": { + "index": "9,9,9,9", + "lanes": "32,33,34,35", + "breakout_modes": { + "1x100G[40G]": ["Ethernet32"], + "2x50G": ["Ethernet32", "Ethernet34"], + "4x25G[10G]": ["Ethernet32", "Ethernet33", "Ethernet34", "Ethernet35"] + } + }, + "Ethernet36": { + "index": "10,10,10,10", + "lanes": "36,37,38,39", + "breakout_modes": { + "1x100G[40G]": ["Ethernet36"], + "2x50G": ["Ethernet36", "Ethernet38"], + "4x25G[10G]": ["Ethernet36", "Ethernet37", "Ethernet38", "Ethernet39"] + } + }, + "Ethernet40": { + "index": "11,11,11,11", + "lanes": "40,41,42,43", + "breakout_modes": { + "1x100G[40G]": ["Ethernet40"], + "2x50G": ["Ethernet40", "Ethernet42"], + "4x25G[10G]": ["Ethernet40", "Ethernet41", "Ethernet42", "Ethernet43"] + } + }, + "Ethernet44": { + "index": "12,12,12,12", + "lanes": "44,45,46,47", + "breakout_modes": { + "1x100G[40G]": ["Ethernet44"], + "2x50G": ["Ethernet44", "Ethernet46"], + "4x25G[10G]": ["Ethernet44", "Ethernet45", "Ethernet46", "Ethernet47"] + } + }, + "Ethernet48": { + "index": "13,13,13,13", + "lanes": "48,49,50,51", + "breakout_modes": { + "1x100G[40G]": ["Ethernet48"], + "2x50G": ["Ethernet48", "Ethernet50"], + "4x25G[10G]": ["Ethernet48", "Ethernet49", "Ethernet50", "Ethernet51"] + } + }, + "Ethernet52": { + "index": "14,14,14,14", + "lanes": "52,53,54,55", + "breakout_modes": { + "1x100G[40G]": ["Ethernet52"], + "2x50G": ["Ethernet52", "Ethernet54"], + "4x25G[10G]": ["Ethernet52", "Ethernet53", "Ethernet54", "Ethernet55"] + } + }, + "Ethernet56": { + "index": "15,15,15,15", + "lanes": "56,57,58,59", + "breakout_modes": { + "1x100G[40G]": ["Ethernet56"], + "2x50G": ["Ethernet56", "Ethernet58"], + "4x25G[10G]": ["Ethernet56", "Ethernet57", "Ethernet58", "Ethernet59"] + } + }, + "Ethernet60": { + "index": "16,16,16,16", + "lanes": "60,61,62,63", + "breakout_modes": { + "1x100G[40G]": ["Ethernet60"], + "2x50G": ["Ethernet60", "Ethernet62"], + "4x25G[10G]": ["Ethernet60", "Ethernet61", "Ethernet62", "Ethernet63"] + } + }, + "Ethernet64": { + "index": "17,17,17,17", + "lanes": "64,65,66,67", + "breakout_modes": { + "1x100G[40G]": ["Ethernet64"], + "2x50G": ["Ethernet64", "Ethernet66"], + "4x25G[10G]": ["Ethernet64", "Ethernet65", "Ethernet66", "Ethernet67"] + } + }, + "Ethernet68": { + "index": "18,18,18,18", + "lanes": "68,69,70,71", + "breakout_modes": { + "1x100G[40G]": ["Ethernet68"], + "2x50G": ["Ethernet68", "Ethernet70"], + "4x25G[10G]": ["Ethernet68", "Ethernet69", "Ethernet70", "Ethernet71"] + } + }, + "Ethernet72": { + "index": "19,19,19,19", + "lanes": "72,73,74,75", + "breakout_modes": { + "1x100G[40G]": ["Ethernet72"], + "2x50G": ["Ethernet72", "Ethernet74"], + "4x25G[10G]": ["Ethernet72", "Ethernet73", "Ethernet74", "Ethernet75"] + } + }, + "Ethernet76": { + "index": "20,20,20,20", + "lanes": "76,77,78,79", + "breakout_modes": { + "1x100G[40G]": ["Ethernet76"], + "2x50G": ["Ethernet76", "Ethernet78"], + "4x25G[10G]": ["Ethernet76", "Ethernet77", "Ethernet78", "Ethernet79"] + } + }, + "Ethernet80": { + "index": "21,21,21,21", + "lanes": "80,81,82,83", + "breakout_modes": { + "1x100G[40G]": ["Ethernet80"], + "2x50G": ["Ethernet80", "Ethernet82"], + "4x25G[10G]": ["Ethernet80", "Ethernet81", "Ethernet82", "Ethernet83"] + } + }, + "Ethernet84": { + "index": "22,22,22,22", + "lanes": "84,85,86,87", + "breakout_modes": { + "1x100G[40G]": ["Ethernet84"], + "2x50G": ["Ethernet84", "Ethernet86"], + "4x25G[10G]": ["Ethernet84", "Ethernet85", "Ethernet86", "Ethernet87"] + } + }, + "Ethernet88": { + "index": "23,23,23,23", + "lanes": "88,89,90,91", + "breakout_modes": { + "1x100G[40G]": ["Ethernet88"], + "2x50G": ["Ethernet88", "Ethernet90"], + "4x25G[10G]": ["Ethernet88", "Ethernet89", "Ethernet90", "Ethernet91"] + } + }, + "Ethernet92": { + "index": "24,24,24,24", + "lanes": "92,93,94,95", + "breakout_modes": { + "1x100G[40G]": ["Ethernet92"], + "2x50G": ["Ethernet92", "Ethernet94"], + "4x25G[10G]": ["Ethernet92", "Ethernet93", "Ethernet94", "Ethernet95"] + } + }, + "Ethernet96": { + "index": "25,25,25,25", + "lanes": "96,97,98,99", + "breakout_modes": { + "1x100G[40G]": ["Ethernet96"], + "2x50G": ["Ethernet96", "Ethernet98"], + "4x25G[10G]": ["Ethernet96", "Ethernet97", "Ethernet98", "Ethernet99"] + } + }, + "Ethernet100": { + "index": "26,26,26,26", + "lanes": "100,101,102,103", + "breakout_modes": { + "1x100G[40G]": ["Ethernet100"], + "2x50G": ["Ethernet100", "Ethernet102"], + "4x25G[10G]": ["Ethernet100", "Ethernet101", "Ethernet102", "Ethernet103"] + } + }, + "Ethernet104": { + "index": "27,27,27,27", + "lanes": "104,105,106,107", + "breakout_modes": { + "1x100G[40G]": ["Ethernet104"], + "2x50G": ["Ethernet104", "Ethernet106"], + "4x25G[10G]": ["Ethernet104", "Ethernet105", "Ethernet106", "Ethernet107"] + } + }, + "Ethernet108": { + "index": "28,28,28,28", + "lanes": "108,109,110,111", + "breakout_modes": { + "1x100G[40G]": ["Ethernet108"], + "2x50G": ["Ethernet108", "Ethernet110"], + "4x25G[10G]": ["Ethernet108", "Ethernet109", "Ethernet110", "Ethernet111"] + } + }, + "Ethernet112": { + "index": "29,29,29,29", + "lanes": "112,113,114,115", + "breakout_modes": { + "1x100G[40G]": ["Ethernet112"], + "2x50G": ["Ethernet112", "Ethernet114"], + "4x25G[10G]": ["Ethernet112", "Ethernet113", "Ethernet112", "Ethernet113"] + } + }, + "Ethernet116": { + "index": "30,30,30,30", + "lanes": "116,117,118,119", + "breakout_modes": { + "1x100G[40G]": ["Ethernet116"], + "2x50G": ["Ethernet116", "Ethernet118"], + "4x25G[10G]": ["Ethernet116", "Ethernet117", "Ethernet118", "Ethernet119"] + } + }, + "Ethernet120": { + "index": "31,31,31,31", + "lanes": "120,121,122,123", + "breakout_modes": { + "1x100G[40G]": ["Ethernet120"], + "2x50G": ["Ethernet120", "Ethernet122"], + "4x25G[10G]": ["Ethernet120", "Ethernet121", "Ethernet122", "Ethernet123"] + } + }, + "Ethernet124": { + "index": "32,32,32,32", + "lanes": "124,125,126,127", + "breakout_modes": { + "1x100G[40G]": ["Ethernet124"], + "2x50G": ["Ethernet124", "Ethernet126"], + "4x25G[10G]": ["Ethernet124", "Ethernet125", "Ethernet126", "Ethernet127"] + } + } + } +} diff --git a/device/accton/x86_64-accton_wedge100bf_32qs-r0/platform_asic b/device/accton/x86_64-accton_wedge100bf_32qs-r0/platform_asic new file mode 100644 index 000000000000..88d88117928c --- /dev/null +++ b/device/accton/x86_64-accton_wedge100bf_32qs-r0/platform_asic @@ -0,0 +1 @@ +barefoot diff --git a/device/accton/x86_64-accton_wedge100bf_32qs-r0/platform_components.json b/device/accton/x86_64-accton_wedge100bf_32qs-r0/platform_components.json new file mode 100644 index 000000000000..086861cba552 --- /dev/null +++ b/device/accton/x86_64-accton_wedge100bf_32qs-r0/platform_components.json @@ -0,0 +1,8 @@ +{ + "chassis": { + "Wedge100BF-32QS-O-AC-F": { + "component": { + } + } + } +} \ No newline at end of file diff --git a/device/accton/x86_64-accton_wedge100bf_32qs-r0/pmon_daemon_control.json b/device/accton/x86_64-accton_wedge100bf_32qs-r0/pmon_daemon_control.json new file mode 100644 index 000000000000..b58e59ba000c --- /dev/null +++ b/device/accton/x86_64-accton_wedge100bf_32qs-r0/pmon_daemon_control.json @@ -0,0 +1,9 @@ +{ + "skip_pcied": false, + "skip_fancontrol": true, + "skip_thermalctld": false, + "skip_ledd": true, + "skip_xcvrd": false, + "skip_psud": false, + "skip_syseepromd": false +} diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/qos.json.j2 b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/qos.json.j2 deleted file mode 100644 index 3e548325ea30..000000000000 --- a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/qos.json.j2 +++ /dev/null @@ -1 +0,0 @@ -{%- include 'qos_config.j2' %} diff --git a/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/qos.json.j2 b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/qos.json.j2 new file mode 120000 index 000000000000..5ea713ce7f4c --- /dev/null +++ b/device/arista/x86_64-arista_7050cx3_32s/Arista-7050CX3-32S-C32/qos.json.j2 @@ -0,0 +1 @@ +../Arista-7050CX3-32S-D48C8/qos.json.j2 \ No newline at end of file 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/td3-a7050cx3-32s-32x100G.config.bcm index 22a63ff0ed3b..3b37d661f403 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/td3-a7050cx3-32s-32x100G.config.bcm @@ -1,10 +1,11 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +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 host_as_route_disable=1 use_all_splithorizon_groups=1 riot_enable=1 sai_tunnel_support=1 +sai_tunnel_underlay_route_mode=1 riot_overlay_l3_intf_mem_size=4096 riot_overlay_l3_egress_mem_size=32768 l3_ecmp_levels=2 @@ -51,7 +52,7 @@ stable_size=0x5500000 tdma_timeout_usec=15000000 tslam_timeout_usec=15000000 sai_optimized_mmu=1 -mmu_init_config="TD3-MSFT-T0-100G" +mmu_init_config="TD3-MSFT-CUSTOM" buf.map.egress_pool0.ingress_pool=0 buf.map.egress_pool1.ingress_pool=0 buf.map.egress_pool2.ingress_pool=1 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 3e548325ea30..04fddf486ace 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 @@ -1 +1,102 @@ +{% if '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": "2", + "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": "0", + "3": "3", + "4": "4", + "5": "0", + "6": "0", + "7": "7" + } + }, +{%- 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" + } + }, +{%- endmacro %} +{% endif %} + {%- include 'qos_config.j2' %} 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/td3-a7050cx3-32s-48x50G+8x100G.config.bcm index 6d0bf6ddf3ab..267b3bb81a9a 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/td3-a7050cx3-32s-48x50G+8x100G.config.bcm @@ -1,10 +1,11 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +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 host_as_route_disable=1 use_all_splithorizon_groups=1 riot_enable=1 sai_tunnel_support=1 +sai_tunnel_underlay_route_mode=1 riot_overlay_l3_intf_mem_size=4096 riot_overlay_l3_egress_mem_size=32768 l3_ecmp_levels=2 @@ -51,7 +52,7 @@ stable_size=0x5500000 tdma_timeout_usec=15000000 tslam_timeout_usec=15000000 sai_optimized_mmu=1 -mmu_init_config="TD3-MSFT-T0-50G" +mmu_init_config="TD3-MSFT-CUSTOM" buf.map.egress_pool0.ingress_pool=0 buf.map.egress_pool1.ingress_pool=0 buf.map.egress_pool2.ingress_pool=1 diff --git a/device/arista/x86_64-arista_7050cx3_32s/td3-a7050cx3-32s-flex.config.bcm b/device/arista/x86_64-arista_7050cx3_32s/td3-a7050cx3-32s-flex.config.bcm index 352409fbddde..70a579e01eeb 100644 --- a/device/arista/x86_64-arista_7050cx3_32s/td3-a7050cx3-32s-flex.config.bcm +++ b/device/arista/x86_64-arista_7050cx3_32s/td3-a7050cx3-32s-flex.config.bcm @@ -395,8 +395,9 @@ port_phy_addr=0xff robust_hash_disable_egress_vlan=1 robust_hash_disable_mpls=1 robust_hash_disable_vlan=1 -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ sai_tunnel_support=1 +sai_tunnel_underlay_route_mode=1 serdes_core_rx_polarity_flip_physical{1}=0x8 serdes_core_rx_polarity_flip_physical{5}=0x2 serdes_core_rx_polarity_flip_physical{9}=0xc diff --git a/device/arista/x86_64-arista_7170_32c/Arista-7170-32C-C32/switch-sai.conf b/device/arista/x86_64-arista_7170_32c/Arista-7170-32C-C32/switch-sai.conf deleted file mode 100644 index 0a807b1c9ea7..000000000000 --- a/device/arista/x86_64-arista_7170_32c/Arista-7170-32C-C32/switch-sai.conf +++ /dev/null @@ -1,33 +0,0 @@ -{ - "chip_list": [ - { - "id": "asic-0", - "chip_family": "Tofino", - "instance": 0, - "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:1c.4/0000:07:00.0", - "pcie_domain": 0, - "pcie_bus": 7, - "pcie_fn": 0, - "pcie_dev": 0, - "pcie_int_mode": 1, - "sds_fw_path": "share/tofino_sds_fw/avago/firmware" - } - ], - "instance": 0, - "p4_program_list": [ - { - "id": "pgm-0", - "instance": 0, - "path": "switch", - "program-name": "switch", - "pd": "lib/tofinopd/switch/libpd.so", - "pd-thrift": "lib/tofinopd/switch/libpdthrift.so", - "table-config": "share/tofinopd/switch/context.json", - "tofino-bin": "share/tofinopd/switch/tofino.bin", - "switchapi": "lib/libswitchapi.so", - "sai": "lib/libsai.so", - "switchapi_port_add": false, - "non_default_port_ppgs": 5 - } - ] -} diff --git a/device/arista/x86_64-arista_7170_32c/Arista-7170-32C-C32/switch-tna-sai.conf b/device/arista/x86_64-arista_7170_32c/Arista-7170-32C-C32/switch-tna-sai.conf index ece3fcbe6a90..dc8c82ce2546 100644 --- a/device/arista/x86_64-arista_7170_32c/Arista-7170-32C-C32/switch-tna-sai.conf +++ b/device/arista/x86_64-arista_7170_32c/Arista-7170-32C-C32/switch-tna-sai.conf @@ -1,16 +1,8 @@ { - "instance": 0, "chip_list": [ { - "id": "asic-0", "chip_family": "Tofino", "instance": 0, - "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.0", - "pcie_domain": 0, - "pcie_bus": 5, - "pcie_fn": 0, - "pcie_dev": 0, - "pcie_int_mode": 1, "sds_fw_path": "share/tofino_sds_fw/avago/firmware" } ], @@ -27,7 +19,6 @@ } ], "program-name": "switch", - "sai": "lib/libsai.so", "bfrt-config": "share/switch/bf-rt.json", "model_json_path" : "share/switch/aug_model.json", "switchapi_port_add": false, @@ -35,5 +26,13 @@ } ] } + ], + "switch_options": [ + { + "device-id": 0, + "model_json_path": "share/switch/aug_model.json", + "non_default_port_ppgs": 5, + "switchapi_port_add": false + } ] } diff --git a/device/arista/x86_64-arista_7170_32cd/Arista-7170-32CD-C32/switch-sai.conf b/device/arista/x86_64-arista_7170_32cd/Arista-7170-32CD-C32/switch-sai.conf deleted file mode 100644 index 0a807b1c9ea7..000000000000 --- a/device/arista/x86_64-arista_7170_32cd/Arista-7170-32CD-C32/switch-sai.conf +++ /dev/null @@ -1,33 +0,0 @@ -{ - "chip_list": [ - { - "id": "asic-0", - "chip_family": "Tofino", - "instance": 0, - "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:1c.4/0000:07:00.0", - "pcie_domain": 0, - "pcie_bus": 7, - "pcie_fn": 0, - "pcie_dev": 0, - "pcie_int_mode": 1, - "sds_fw_path": "share/tofino_sds_fw/avago/firmware" - } - ], - "instance": 0, - "p4_program_list": [ - { - "id": "pgm-0", - "instance": 0, - "path": "switch", - "program-name": "switch", - "pd": "lib/tofinopd/switch/libpd.so", - "pd-thrift": "lib/tofinopd/switch/libpdthrift.so", - "table-config": "share/tofinopd/switch/context.json", - "tofino-bin": "share/tofinopd/switch/tofino.bin", - "switchapi": "lib/libswitchapi.so", - "sai": "lib/libsai.so", - "switchapi_port_add": false, - "non_default_port_ppgs": 5 - } - ] -} diff --git a/device/arista/x86_64-arista_7170_32cd/Arista-7170-32CD-C32/switch-tna-sai.conf b/device/arista/x86_64-arista_7170_32cd/Arista-7170-32CD-C32/switch-tna-sai.conf index ece3fcbe6a90..dc8c82ce2546 100644 --- a/device/arista/x86_64-arista_7170_32cd/Arista-7170-32CD-C32/switch-tna-sai.conf +++ b/device/arista/x86_64-arista_7170_32cd/Arista-7170-32CD-C32/switch-tna-sai.conf @@ -1,16 +1,8 @@ { - "instance": 0, "chip_list": [ { - "id": "asic-0", "chip_family": "Tofino", "instance": 0, - "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.0", - "pcie_domain": 0, - "pcie_bus": 5, - "pcie_fn": 0, - "pcie_dev": 0, - "pcie_int_mode": 1, "sds_fw_path": "share/tofino_sds_fw/avago/firmware" } ], @@ -27,7 +19,6 @@ } ], "program-name": "switch", - "sai": "lib/libsai.so", "bfrt-config": "share/switch/bf-rt.json", "model_json_path" : "share/switch/aug_model.json", "switchapi_port_add": false, @@ -35,5 +26,13 @@ } ] } + ], + "switch_options": [ + { + "device-id": 0, + "model_json_path": "share/switch/aug_model.json", + "non_default_port_ppgs": 5, + "switchapi_port_add": false + } ] } diff --git a/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/buffers_defaults_t0.j2 index 568b74b34a41..a6eefe8d36b0 100644 --- a/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/buffers_defaults_t0.j2 +++ b/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/buffers_defaults_t0.j2 @@ -61,11 +61,15 @@ {%- macro generate_queue_buffers(port_names) %} "BUFFER_QUEUE": { - "{{ port_names }}|3-4": { - "profile" : "egress_lossless_profile" - }, - "{{ port_names }}|0-1": { +{% for port in port_names.split(',') %} + "{{ port }}|0-2": { "profile" : "q_lossy_profile" - } + }, +{% endfor %} +{% for port in port_names.split(',') %} + "{{ port }}|3-4": { + "profile" : "egress_lossless_profile" + }{% if not loop.last %},{% endif %} +{% endfor %} } {%- endmacro %} diff --git a/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/buffers_defaults_t1.j2 index 161afd10cea3..563137d90b90 100644 --- a/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/buffers_defaults_t1.j2 +++ b/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/buffers_defaults_t1.j2 @@ -61,11 +61,15 @@ {%- macro generate_queue_buffers(port_names) %} "BUFFER_QUEUE": { - "{{ port_names }}|3-4": { - "profile" : "egress_lossless_profile" - }, - "{{ port_names }}|0-1": { +{% for port in port_names.split(',') %} + "{{ port }}|0-2": { "profile" : "q_lossy_profile" - } + }, +{% endfor %} +{% for port in port_names.split(',') %} + "{{ port }}|3-4": { + "profile" : "egress_lossless_profile" + }{% if not loop.last %},{% endif %} +{% endfor %} } {%- endmacro %} diff --git a/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/switch-sai.conf b/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/switch-sai.conf deleted file mode 100644 index 0a807b1c9ea7..000000000000 --- a/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/switch-sai.conf +++ /dev/null @@ -1,33 +0,0 @@ -{ - "chip_list": [ - { - "id": "asic-0", - "chip_family": "Tofino", - "instance": 0, - "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:1c.4/0000:07:00.0", - "pcie_domain": 0, - "pcie_bus": 7, - "pcie_fn": 0, - "pcie_dev": 0, - "pcie_int_mode": 1, - "sds_fw_path": "share/tofino_sds_fw/avago/firmware" - } - ], - "instance": 0, - "p4_program_list": [ - { - "id": "pgm-0", - "instance": 0, - "path": "switch", - "program-name": "switch", - "pd": "lib/tofinopd/switch/libpd.so", - "pd-thrift": "lib/tofinopd/switch/libpdthrift.so", - "table-config": "share/tofinopd/switch/context.json", - "tofino-bin": "share/tofinopd/switch/tofino.bin", - "switchapi": "lib/libswitchapi.so", - "sai": "lib/libsai.so", - "switchapi_port_add": false, - "non_default_port_ppgs": 5 - } - ] -} diff --git a/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/switch-tna-sai.conf b/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/switch-tna-sai.conf index ece3fcbe6a90..dc8c82ce2546 100644 --- a/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/switch-tna-sai.conf +++ b/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/switch-tna-sai.conf @@ -1,16 +1,8 @@ { - "instance": 0, "chip_list": [ { - "id": "asic-0", "chip_family": "Tofino", "instance": 0, - "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.0", - "pcie_domain": 0, - "pcie_bus": 5, - "pcie_fn": 0, - "pcie_dev": 0, - "pcie_int_mode": 1, "sds_fw_path": "share/tofino_sds_fw/avago/firmware" } ], @@ -27,7 +19,6 @@ } ], "program-name": "switch", - "sai": "lib/libsai.so", "bfrt-config": "share/switch/bf-rt.json", "model_json_path" : "share/switch/aug_model.json", "switchapi_port_add": false, @@ -35,5 +26,13 @@ } ] } + ], + "switch_options": [ + { + "device-id": 0, + "model_json_path": "share/switch/aug_model.json", + "non_default_port_ppgs": 5, + "switchapi_port_add": false + } ] } diff --git a/device/arista/x86_64-arista_7170_64c/Arista-7170-Q59S20/switch-sai.conf b/device/arista/x86_64-arista_7170_64c/Arista-7170-Q59S20/switch-sai.conf deleted file mode 100644 index 0a807b1c9ea7..000000000000 --- a/device/arista/x86_64-arista_7170_64c/Arista-7170-Q59S20/switch-sai.conf +++ /dev/null @@ -1,33 +0,0 @@ -{ - "chip_list": [ - { - "id": "asic-0", - "chip_family": "Tofino", - "instance": 0, - "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:1c.4/0000:07:00.0", - "pcie_domain": 0, - "pcie_bus": 7, - "pcie_fn": 0, - "pcie_dev": 0, - "pcie_int_mode": 1, - "sds_fw_path": "share/tofino_sds_fw/avago/firmware" - } - ], - "instance": 0, - "p4_program_list": [ - { - "id": "pgm-0", - "instance": 0, - "path": "switch", - "program-name": "switch", - "pd": "lib/tofinopd/switch/libpd.so", - "pd-thrift": "lib/tofinopd/switch/libpdthrift.so", - "table-config": "share/tofinopd/switch/context.json", - "tofino-bin": "share/tofinopd/switch/tofino.bin", - "switchapi": "lib/libswitchapi.so", - "sai": "lib/libsai.so", - "switchapi_port_add": false, - "non_default_port_ppgs": 5 - } - ] -} diff --git a/device/arista/x86_64-arista_7170_64c/Arista-7170-Q59S20/switch-tna-sai.conf b/device/arista/x86_64-arista_7170_64c/Arista-7170-Q59S20/switch-tna-sai.conf index ece3fcbe6a90..dc8c82ce2546 100644 --- a/device/arista/x86_64-arista_7170_64c/Arista-7170-Q59S20/switch-tna-sai.conf +++ b/device/arista/x86_64-arista_7170_64c/Arista-7170-Q59S20/switch-tna-sai.conf @@ -1,16 +1,8 @@ { - "instance": 0, "chip_list": [ { - "id": "asic-0", "chip_family": "Tofino", "instance": 0, - "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.0", - "pcie_domain": 0, - "pcie_bus": 5, - "pcie_fn": 0, - "pcie_dev": 0, - "pcie_int_mode": 1, "sds_fw_path": "share/tofino_sds_fw/avago/firmware" } ], @@ -27,7 +19,6 @@ } ], "program-name": "switch", - "sai": "lib/libsai.so", "bfrt-config": "share/switch/bf-rt.json", "model_json_path" : "share/switch/aug_model.json", "switchapi_port_add": false, @@ -35,5 +26,13 @@ } ] } + ], + "switch_options": [ + { + "device-id": 0, + "model_json_path": "share/switch/aug_model.json", + "non_default_port_ppgs": 5, + "switchapi_port_add": false + } ] } 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 9410a83b6716..db5b2562cca2 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 @@ -12,6 +12,7 @@ {%- 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' -%} {%- endif %} 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 index cbc06c818062..0e71479fc2c2 100644 --- 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 @@ -1,6 +1,6 @@ # PG lossless profiles. # speed cable size xon xoff threshold xon_offset - 100000 5m 1248 1248 96928 -3 2496 + 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 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 3e548325ea30..4178efbcb7aa 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 @@ -1 +1,187 @@ +{% 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": "7" + } + }, +{%- 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": "2", + "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": "0", + "3": "3", + "4": "4", + "5": "0", + "6": "0", + "7": "7" + } + }, +{%- 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" + } + }, +{%- endmacro %} +{% endif %} + {%- include 'qos_config.j2' %} 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 d9d8347b50ae..70512203f206 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 @@ -4,6 +4,7 @@ {%- 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' -%} {%- endif %} 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 deleted file mode 100644 index 3e548325ea30..000000000000 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/qos.json.j2 +++ /dev/null @@ -1 +0,0 @@ -{%- include 'qos_config.j2' %} 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 new file mode 120000 index 000000000000..f0ee02749724 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/qos.json.j2 @@ -0,0 +1 @@ +../Arista-7260CX3-C64/qos.json.j2 \ No newline at end of file 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 de65d73d40a1..ce8efa8572b5 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 @@ -12,6 +12,7 @@ {%- 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' -%} {%- endif %} 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 deleted file mode 100644 index 3e548325ea30..000000000000 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/qos.json.j2 +++ /dev/null @@ -1 +0,0 @@ -{%- include 'qos_config.j2' %} 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 new file mode 120000 index 000000000000..f0ee02749724 --- /dev/null +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/qos.json.j2 @@ -0,0 +1 @@ +../Arista-7260CX3-C64/qos.json.j2 \ No newline at end of file diff --git a/device/arista/x86_64-arista_7280cr3mk_32p4/Arista-7280CR3-C40/gearbox_100G_PAM4.xml b/device/arista/x86_64-arista_7280cr3mk_32p4/Arista-7280CR3-C40/gearbox_100G_PAM4.xml index 95e20b91787e..0ac9ff7b7846 100644 --- a/device/arista/x86_64-arista_7280cr3mk_32p4/Arista-7280CR3-C40/gearbox_100G_PAM4.xml +++ b/device/arista/x86_64-arista_7280cr3mk_32p4/Arista-7280CR3-C40/gearbox_100G_PAM4.xml @@ -4,11 +4,6 @@ 0 gearbox 2 - - 2,-8,17,0,0 - 0,-8,17,0,0 - - 0,0,1,0,0 @@ -34,4 +29,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/device/arista/x86_64-arista_7280cr3mk_32p4/Arista-7280CR3-C40/gearbox_config.json b/device/arista/x86_64-arista_7280cr3mk_32p4/Arista-7280CR3-C40/gearbox_config.json index e05ee11290ac..5a1fd88d49ad 100644 --- a/device/arista/x86_64-arista_7280cr3mk_32p4/Arista-7280CR3-C40/gearbox_config.json +++ b/device/arista/x86_64-arista_7280cr3mk_32p4/Arista-7280CR3-C40/gearbox_config.json @@ -5,7 +5,7 @@ "name": "phy1", "address": "1", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy1_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -19,7 +19,7 @@ "name": "phy2", "address": "2", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy2_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -33,7 +33,7 @@ "name": "phy3", "address": "3", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy3_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -47,7 +47,7 @@ "name": "phy4", "address": "4", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy4_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -61,7 +61,7 @@ "name": "phy5", "address": "5", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy5_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -75,7 +75,7 @@ "name": "phy6", "address": "6", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy6_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -89,7 +89,7 @@ "name": "phy7", "address": "7", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy7_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -103,7 +103,7 @@ "name": "phy8", "address": "8", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy8_config.json", "sai_init_config_file": "", "phy_access": "mdio", 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 61026aad524e..f6f1774d8ee2 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 @@ -362,6 +362,55 @@ ucode_port_46=CGE2_25:core_1.46 ucode_port_47=CGE2_26:core_1.47 ucode_port_48=CGE2_24:core_1.48 +serdes_tx_taps_1=pam4:-18:86:0:4:0:0 +serdes_tx_taps_2=pam4:-18:86:0:4:0:0 +serdes_tx_taps_3=pam4:-18:86:0:4:0:0 +serdes_tx_taps_4=pam4:-18:86:0:4:0:0 +serdes_tx_taps_5=pam4:-18:86:0:4:0:0 +serdes_tx_taps_6=pam4:-18:86:0:4:0:0 +serdes_tx_taps_7=pam4:-18:86:0:4:0:0 +serdes_tx_taps_8=pam4:-18:86:0:4:0:0 +serdes_tx_taps_9=pam4:-18:86:0:4:0:0 +serdes_tx_taps_10=pam4:-18:86:0:4:0:0 +serdes_tx_taps_11=pam4:-18:86:0:4:0:0 +serdes_tx_taps_12=pam4:-18:86:0:4:0:0 +serdes_tx_taps_13=pam4:-18:86:0:4:0:0 +serdes_tx_taps_14=pam4:-18:86:0:4:0:0 +serdes_tx_taps_15=pam4:-18:86:0:4:0:0 +serdes_tx_taps_16=pam4:-18:86:0:4:0:0 +serdes_tx_taps_17=pam4:-18:86:0:4:0:0 +serdes_tx_taps_18=pam4:-18:86:0:4:0:0 +serdes_tx_taps_19=pam4:-18:86:0:4:0:0 +serdes_tx_taps_20=pam4:-18:86:0:4:0:0 +serdes_tx_taps_21=pam4:-18:86:0:4:0:0 +serdes_tx_taps_22=pam4:-18:86:0:4:0:0 +serdes_tx_taps_23=pam4:-18:86:0:4:0:0 +serdes_tx_taps_24=pam4:-18:86:0:4:0:0 +serdes_tx_taps_25=pam4:-18:86:0:4:0:0 +serdes_tx_taps_26=pam4:-18:86:0:4:0:0 +serdes_tx_taps_27=pam4:-18:86:0:4:0:0 +serdes_tx_taps_28=pam4:-18:86:0:4:0:0 +serdes_tx_taps_29=pam4:-18:86:0:4:0:0 +serdes_tx_taps_30=pam4:-18:86:0:4:0:0 +serdes_tx_taps_31=pam4:-18:86:0:4:0:0 +serdes_tx_taps_32=pam4:-18:86:0:4:0:0 +serdes_tx_taps_33=pam4:-18:86:0:4:0:0 +serdes_tx_taps_34=pam4:-18:86:0:4:0:0 +serdes_tx_taps_35=pam4:-18:86:0:4:0:0 +serdes_tx_taps_36=pam4:-18:86:0:4:0:0 +serdes_tx_taps_37=pam4:-18:86:0:4:0:0 +serdes_tx_taps_38=pam4:-18:86:0:4:0:0 +serdes_tx_taps_39=pam4:-18:86:0:4:0:0 +serdes_tx_taps_40=pam4:-18:86:0:4:0:0 +serdes_tx_taps_41=pam4:-18:86:0:4:0:0 +serdes_tx_taps_42=pam4:-18:86:0:4:0:0 +serdes_tx_taps_43=pam4:-18:86:0:4:0:0 +serdes_tx_taps_44=pam4:-18:86:0:4:0:0 +serdes_tx_taps_45=pam4:-18:86:0:4:0:0 +serdes_tx_taps_46=pam4:-18:86:0:4:0:0 +serdes_tx_taps_47=pam4:-18:86:0:4:0:0 +serdes_tx_taps_48=pam4:-18:86:0:4:0:0 + ucode_port_0.BCM8869X=CPU.0:core_0.0 ucode_port_200.BCM8869X=CPU.8:core_1.200 ucode_port_201.BCM8869X=CPU.16:core_0.201 diff --git a/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/gearbox_100G_PAM4.xml b/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/gearbox_100G_PAM4.xml index 95e20b91787e..044ef034a52d 100644 --- a/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/gearbox_100G_PAM4.xml +++ b/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/gearbox_100G_PAM4.xml @@ -4,11 +4,6 @@ 0 gearbox 2 - - 2,-8,17,0,0 - 0,-8,17,0,0 - - 0,0,1,0,0 @@ -34,4 +29,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/gearbox_config.json b/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/gearbox_config.json index d72df085bb88..b082868e95be 100644 --- a/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/gearbox_config.json +++ b/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/gearbox_config.json @@ -5,7 +5,7 @@ "name": "phy1", "address": "1", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy1_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -19,7 +19,7 @@ "name": "phy2", "address": "2", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy2_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -33,7 +33,7 @@ "name": "phy3", "address": "3", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy3_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -47,7 +47,7 @@ "name": "phy4", "address": "4", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy4_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -61,7 +61,7 @@ "name": "phy5", "address": "5", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy5_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -75,7 +75,7 @@ "name": "phy6", "address": "6", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy6_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -89,7 +89,7 @@ "name": "phy7", "address": "7", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy7_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -103,7 +103,7 @@ "name": "phy8", "address": "8", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy8_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -117,7 +117,7 @@ "name": "phy9", "address": "9", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy9_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -131,7 +131,7 @@ "name": "phy10", "address": "10", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy10_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -145,7 +145,7 @@ "name": "phy11", "address": "11", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy11_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -159,7 +159,7 @@ "name": "phy12", "address": "12", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.92.1.bin", + "firmware_path": "/usr/etc/credo/firmware/owl.lz4.fw.1.94.0.bin", "config_file": "/usr/share/sonic/hwsku/phy12_config.json", "sai_init_config_file": "", "phy_access": "mdio", diff --git a/device/barefoot/x86_64-accton_as9516_32d-r0/newport/buffers_defaults_t0.j2 b/device/barefoot/x86_64-accton_as9516_32d-r0/newport/buffers_defaults_t0.j2 index 34c5db2ef708..a06f62f733ae 100644 --- a/device/barefoot/x86_64-accton_as9516_32d-r0/newport/buffers_defaults_t0.j2 +++ b/device/barefoot/x86_64-accton_as9516_32d-r0/newport/buffers_defaults_t0.j2 @@ -16,8 +16,7 @@ "ingress_lossless_pool": { "size": "{{ ingress_lossless_pool_size }}", "type": "ingress", - "mode": "dynamic", - "xoff": "36222208" + "mode": "dynamic" }, "ingress_lossy_pool": { "size": "{{ ingress_lossy_pool_size }}", @@ -61,11 +60,15 @@ {%- macro generate_queue_buffers(port_names) %} "BUFFER_QUEUE": { - "{{ port_names }}|3-4": { - "profile" : "egress_lossless_profile" - }, - "{{ port_names }}|0-1": { +{% for port in port_names.split(',') %} + "{{ port }}|0-2": { "profile" : "q_lossy_profile" - } + }, +{% endfor %} +{% for port in port_names.split(',') %} + "{{ port }}|3-4": { + "profile" : "egress_lossless_profile" + }{% if not loop.last %},{% endif %} +{% endfor %} } {%- endmacro %} diff --git a/device/barefoot/x86_64-accton_as9516_32d-r0/newport/buffers_defaults_t1.j2 b/device/barefoot/x86_64-accton_as9516_32d-r0/newport/buffers_defaults_t1.j2 index 34c5db2ef708..a06f62f733ae 100644 --- a/device/barefoot/x86_64-accton_as9516_32d-r0/newport/buffers_defaults_t1.j2 +++ b/device/barefoot/x86_64-accton_as9516_32d-r0/newport/buffers_defaults_t1.j2 @@ -16,8 +16,7 @@ "ingress_lossless_pool": { "size": "{{ ingress_lossless_pool_size }}", "type": "ingress", - "mode": "dynamic", - "xoff": "36222208" + "mode": "dynamic" }, "ingress_lossy_pool": { "size": "{{ ingress_lossy_pool_size }}", @@ -61,11 +60,15 @@ {%- macro generate_queue_buffers(port_names) %} "BUFFER_QUEUE": { - "{{ port_names }}|3-4": { - "profile" : "egress_lossless_profile" - }, - "{{ port_names }}|0-1": { +{% for port in port_names.split(',') %} + "{{ port }}|0-2": { "profile" : "q_lossy_profile" - } + }, +{% endfor %} +{% for port in port_names.split(',') %} + "{{ port }}|3-4": { + "profile" : "egress_lossless_profile" + }{% if not loop.last %},{% endif %} +{% endfor %} } {%- endmacro %} diff --git a/device/barefoot/x86_64-accton_as9516_32d-r0/newport/switch-tna-sai.conf b/device/barefoot/x86_64-accton_as9516_32d-r0/newport/switch-tna-sai.conf index cf6e445dba1a..2789eb0e2c0d 100644 --- a/device/barefoot/x86_64-accton_as9516_32d-r0/newport/switch-tna-sai.conf +++ b/device/barefoot/x86_64-accton_as9516_32d-r0/newport/switch-tna-sai.conf @@ -1,17 +1,9 @@ { - "instance": 0, "chip_list": [ { - "id": "asic-0", "chip_family": "Tofino2", - "instance": 0, - "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.0", - "pcie_domain": 0, - "pcie_bus": 5, - "pcie_fn": 0, - "pcie_dev": 0, - "pcie_int_mode": 1, - "sds_fw_path": "share/tofino_sds_fw/avago/firmware" + "sds_fw_path": "share/tofino_sds_fw/avago/firmware", + "instance": 0 } ], "p4_devices": [ @@ -20,21 +12,28 @@ "agent0": "lib/platform/x86_64-accton_as9516bf_32d-r0/libpltfm_mgr.so", "p4_programs": [ { + "program-name": "switch", + "bfrt-config": "share/switch/bf-rt.json", "p4_pipelines": [ { "p4_pipeline_name": "pipe", "config": "share/switch/pipe/tofino2.bin", "context": "share/switch/pipe/context.json" } - ], - "program-name": "switch", - "sai": "lib/libsai.so", - "bfrt-config": "share/switch/bf-rt.json", + ], "model_json_path" : "share/switch/aug_model.json", "switchapi_port_add": false, "non_default_port_ppgs": 5 } ] } + ], + "switch_options": [ + { + "device-id": 0, + "model_json_path": "share/switch/aug_model.json", + "non_default_port_ppgs": 5, + "switchapi_port_add": false + } ] } diff --git a/device/barefoot/x86_64-accton_as9516_32d-r0/platform.json b/device/barefoot/x86_64-accton_as9516_32d-r0/platform.json index b92b929fb997..abd2fec0a303 100644 --- a/device/barefoot/x86_64-accton_as9516_32d-r0/platform.json +++ b/device/barefoot/x86_64-accton_as9516_32d-r0/platform.json @@ -1,57 +1,143 @@ { "chassis": { "name": "Newport", - "fans": [ - { - "name": "counter-rotating-fan-1" - }, + "components": [ { - "name": "counter-rotating-fan-2" + "name": "BIOS" }, { - "name": "counter-rotating-fan-3" - }, - { - "name": "counter-rotating-fan-4" - }, - { - "name": "counter-rotating-fan-5" - }, + "name": "BMC" + } + ], + "thermal_manager": false, + "fans": [ { - "name": "counter-rotating-fan-6" + "name": "counter-rotating-fan-1", + "status_led": { + "controllable": false + }, + "speed": { + "controllable": false + } + }, + { + "name": "counter-rotating-fan-2", + "status_led": { + "controllable": false + }, + "speed": { + "controllable": false + } + }, + { + "name": "counter-rotating-fan-3", + "status_led": { + "controllable": false + }, + "speed": { + "controllable": false + } + }, + { + "name": "counter-rotating-fan-4", + "status_led": { + "controllable": false + }, + "speed": { + "controllable": false + } + }, + { + "name": "counter-rotating-fan-5", + "status_led": { + "controllable": false + }, + "speed": { + "controllable": false + } + }, + { + "name": "counter-rotating-fan-6", + "status_led": { + "controllable": false + }, + "speed": { + "controllable": false + } } ], "fan_drawers": [ { "name": "fantray-1", + "status_led": { + "controllable": false + }, "fans": [ { - "name": "counter-rotating-fan-1" + "name": "counter-rotating-fan-1", + "status_led": { + "controllable": false + }, + "speed": { + "controllable": false + } }, { - "name": "counter-rotating-fan-2" + "name": "counter-rotating-fan-2", + "status_led": { + "controllable": false + }, + "speed": { + "controllable": false + } }, { - "name": "counter-rotating-fan-3" + "name": "counter-rotating-fan-3", + "status_led": { + "controllable": false + }, + "speed": { + "controllable": false + } }, { - "name": "counter-rotating-fan-4" + "name": "counter-rotating-fan-4", + "status_led": { + "controllable": false + }, + "speed": { + "controllable": false + } }, { - "name": "counter-rotating-fan-5" + "name": "counter-rotating-fan-5", + "status_led": { + "controllable": false + }, + "speed": { + "controllable": false + } }, { - "name": "counter-rotating-fan-6" + "name": "counter-rotating-fan-6", + "status_led": { + "controllable": false + }, + "speed": { + "controllable": false + } } ] } ], "psus": [ { - "name": "psu-1" + "name": "psu-1", + "temperature": false }, { - "name": "psu-2" + "name": "psu-2", + "temperature": false } ], "thermals": [ diff --git a/device/barefoot/x86_64-accton_as9516_32d-r0/platform_components.json b/device/barefoot/x86_64-accton_as9516_32d-r0/platform_components.json index 43874566a3ad..118079de4696 100644 --- a/device/barefoot/x86_64-accton_as9516_32d-r0/platform_components.json +++ b/device/barefoot/x86_64-accton_as9516_32d-r0/platform_components.json @@ -1,8 +1,10 @@ -{ - "chassis": { - "Newport": { - "component": { - } - } - } +{ + "chassis": { + "Newport": { + "component": { + "BIOS": { }, + "BMC": { } + } + } + } } \ No newline at end of file diff --git a/device/barefoot/x86_64-accton_as9516_32d-r0/thermal_thresholds.json b/device/barefoot/x86_64-accton_as9516_32d-r0/thermal_thresholds.json new file mode 100644 index 000000000000..451067eb603c --- /dev/null +++ b/device/barefoot/x86_64-accton_as9516_32d-r0/thermal_thresholds.json @@ -0,0 +1,61 @@ +{ + "thermals": [ + { + "com_e_driver-i2c-4-33:cpu-temp" : [99.0, 89.0, 11.0, 1.0] + }, + { + "com_e_driver-i2c-4-33:memory-temp" : [85.0, 75.0, 11.0, 1.0] + }, + { + "tmp75-i2c-3-48:chip-temp" : [90.0, 80.0, 11.0, 1.0] + }, + { + "tmp75-i2c-3-49:exhaust2-temp" : [80.0, 70.0, 11.0, 1.0] + }, + { + "tmp75-i2c-3-4a:exhaust-temp" : [60.0, 50.0, 11.0, 1.0] + }, + { + "tmp75-i2c-3-4b:intake-temp" : [60.0, 50.0, 11.0, 1.0] + }, + { + "tmp75-i2c-3-4c:tofino-temp" : [99.0, 89.0, 11.0, 1.0] + }, + { + "tmp75-i2c-3-4d:intake2-temp" : [60.0, 50.0, 11.0, 1.0] + }, + { + "coretemp-isa-0000:package-id-0" : [80.0, 70.0, 11.0, 1.0] + }, + { + "coretemp-isa-0000:core-0" : [99.0, 89.0, 11.0, 1.0] + }, + { + "coretemp-isa-0000:core-1" : [99.0, 89.0, 11.0, 1.0] + }, + { + "coretemp-isa-0000:core-2" : [99.0, 89.0, 11.0, 1.0] + }, + { + "coretemp-isa-0000:core-3" : [99.0, 89.0, 11.0, 1.0] + }, + { + "psu_driver-i2c-7-59:psu2-temp1" : [60.0, 50.0, 11.0, 1.0] + }, + { + "psu_driver-i2c-7-59:psu2-temp2" : [60.0, 50.0, 11.0, 1.0] + }, + { + "psu_driver-i2c-7-59:psu2-temp3" : [60.0, 50.0, 11.0, 1.0] + }, + { + "psu_driver-i2c-7-5a:psu1-temp1" : [60.0, 50.0, 11.0, 1.0] + }, + { + "psu_driver-i2c-7-5a:psu1-temp2" : [60.0, 50.0, 11.0, 1.0] + }, + { + "psu_driver-i2c-7-5a:psu1-temp3" : [60.0, 50.0, 11.0, 1.0] + } + ] +} \ No newline at end of file diff --git a/device/barefoot/x86_64-accton_wedge100bf_32x-r0/montara/buffers_defaults_t0.j2 b/device/barefoot/x86_64-accton_wedge100bf_32x-r0/montara/buffers_defaults_t0.j2 index 3e18b6dbad08..0e096c39d4dd 100644 --- a/device/barefoot/x86_64-accton_wedge100bf_32x-r0/montara/buffers_defaults_t0.j2 +++ b/device/barefoot/x86_64-accton_wedge100bf_32x-r0/montara/buffers_defaults_t0.j2 @@ -63,21 +63,17 @@ }, {%- endmacro %} -{%- macro generate_pg_profils(port_names) %} - "BUFFER_PG": { - "{{ port_names }}|3-4": { - "profile" : "ingress_lossless_profile" - } - }, -{%- endmacro %} - {%- macro generate_queue_buffers(port_names) %} "BUFFER_QUEUE": { - "{{ port_names }}|3-4": { - "profile" : "egress_lossless_profile" - }, - "{{ port_names }}|0-1": { +{% for port in port_names.split(',') %} + "{{ port }}|0-2": { "profile" : "q_lossy_profile" - } + }, +{% endfor %} +{% for port in port_names.split(',') %} + "{{ port }}|3-4": { + "profile" : "egress_lossless_profile" + }{% if not loop.last %},{% endif %} +{% endfor %} } {%- endmacro %} diff --git a/device/barefoot/x86_64-accton_wedge100bf_32x-r0/montara/buffers_defaults_t1.j2 b/device/barefoot/x86_64-accton_wedge100bf_32x-r0/montara/buffers_defaults_t1.j2 index 923e5a102836..0067d92c926c 100644 --- a/device/barefoot/x86_64-accton_wedge100bf_32x-r0/montara/buffers_defaults_t1.j2 +++ b/device/barefoot/x86_64-accton_wedge100bf_32x-r0/montara/buffers_defaults_t1.j2 @@ -63,21 +63,17 @@ }, {%- endmacro %} -{%- macro generate_pg_profils(port_names) %} - "BUFFER_PG": { - "{{ port_names }}|3-4": { - "profile" : "ingress_lossless_profile" - } - }, -{%- endmacro %} - {%- macro generate_queue_buffers(port_names) %} "BUFFER_QUEUE": { - "{{ port_names }}|3-4": { - "profile" : "egress_lossless_profile" - }, - "{{ port_names }}|0-1": { +{% for port in port_names.split(',') %} + "{{ port }}|0-2": { "profile" : "q_lossy_profile" - } + }, +{% endfor %} +{% for port in port_names.split(',') %} + "{{ port }}|3-4": { + "profile" : "egress_lossless_profile" + }{% if not loop.last %},{% endif %} +{% endfor %} } {%- endmacro %} diff --git a/device/barefoot/x86_64-accton_wedge100bf_32x-r0/montara/switch-sai.conf b/device/barefoot/x86_64-accton_wedge100bf_32x-r0/montara/switch-sai.conf deleted file mode 100644 index fc224c9602e4..000000000000 --- a/device/barefoot/x86_64-accton_wedge100bf_32x-r0/montara/switch-sai.conf +++ /dev/null @@ -1,34 +0,0 @@ -{ - "chip_list": [ - { - "id": "asic-0", - "chip_family": "Tofino", - "instance": 0, - "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.0", - "pcie_domain": 0, - "pcie_bus": 5, - "pcie_fn": 0, - "pcie_dev": 0, - "pcie_int_mode": 1, - "sds_fw_path": "share/tofino_sds_fw/avago/firmware" - } - ], - "instance": 0, - "p4_program_list": [ - { - "id": "pgm-0", - "instance": 0, - "path": "switch", - "program-name": "switch", - "pd": "lib/tofinopd/switch/libpd.so", - "pd-thrift": "lib/tofinopd/switch/libpdthrift.so", - "table-config": "share/tofinopd/switch/context.json", - "tofino-bin": "share/tofinopd/switch/tofino.bin", - "switchapi": "lib/libswitchapi.so", - "sai": "lib/libsai.so", - "agent0": "lib/platform/x86_64-accton_wedge100bf_32x-r0/libpltfm_mgr.so", - "switchapi_port_add": false, - "non_default_port_ppgs": 5 - } - ] -} diff --git a/device/barefoot/x86_64-accton_wedge100bf_32x-r0/montara/switch-tna-sai.conf b/device/barefoot/x86_64-accton_wedge100bf_32x-r0/montara/switch-tna-sai.conf index 085a1b8dcdfc..dc6f78e0b1e7 100644 --- a/device/barefoot/x86_64-accton_wedge100bf_32x-r0/montara/switch-tna-sai.conf +++ b/device/barefoot/x86_64-accton_wedge100bf_32x-r0/montara/switch-tna-sai.conf @@ -1,17 +1,9 @@ { - "instance": 0, "chip_list": [ { - "id": "asic-0", "chip_family": "Tofino", - "instance": 0, - "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.0", - "pcie_domain": 0, - "pcie_bus": 5, - "pcie_fn": 0, - "pcie_dev": 0, - "pcie_int_mode": 1, - "sds_fw_path": "share/tofino_sds_fw/avago/firmware" + "sds_fw_path": "share/tofino_sds_fw/avago/firmware", + "instance": 0 } ], "p4_devices": [ @@ -28,7 +20,6 @@ } ], "program-name": "switch", - "sai": "lib/libsai.so", "bfrt-config": "share/switch/bf-rt.json", "model_json_path" : "share/switch/aug_model.json", "switchapi_port_add": false, @@ -36,5 +27,13 @@ } ] } + ], + "switch_options": [ + { + "device-id": 0, + "model_json_path": "share/switch/aug_model.json", + "non_default_port_ppgs": 5, + "switchapi_port_add": false + } ] } diff --git a/device/barefoot/x86_64-accton_wedge100bf_32x-r0/platform.json b/device/barefoot/x86_64-accton_wedge100bf_32x-r0/platform.json index 769386a14ce0..5fee4f0eebaf 100644 --- a/device/barefoot/x86_64-accton_wedge100bf_32x-r0/platform.json +++ b/device/barefoot/x86_64-accton_wedge100bf_32x-r0/platform.json @@ -1,6 +1,14 @@ { "chassis": { "name": "Wedge100BF-32X-O-AC-F-BF", + "components": [ + { + "name": "BIOS" + }, + { + "name": "BMC" + } + ], "fans": [ { "name": "counter-rotating-fan-1" @@ -49,38 +57,41 @@ } ], "thermals": [ + { + "name": "com_e_driver-i2c-4-33:cpu-temp" + }, { "name": "com_e_driver-i2c-4-33:memory-temp" }, { - "name": "com_e_driver-i2c-4-33:cpu-temp" + "name": "psu_driver-i2c-7-59:psu2-temp1" }, { - "name": "pfe1100-i2c-7-59:temp1" + "name": "psu_driver-i2c-7-59:psu2-temp2" }, { - "name": "pfe1100-i2c-7-59:temp2" + "name": "psu_driver-i2c-7-5a:psu1-temp1" }, { - "name": "pfe1100-i2c-7-5a:temp1" + "name": "psu_driver-i2c-7-5a:psu1-temp2" }, { - "name": "pfe1100-i2c-7-5a:temp2" + "name": "tmp75-i2c-3-48:chip-temp" }, { - "name": "tmp75-i2c-3-48:outlet-middle-temp" + "name": "tmp75-i2c-3-49:exhaust2-temp" }, { - "name": "tmp75-i2c-3-49:inlet-middle-temp" + "name": "tmp75-i2c-3-4a:exhaust-temp" }, { - "name": "tmp75-i2c-3-4a:inlet-left-temp" + "name": "tmp75-i2c-3-4b:intake-temp" }, { - "name": "tmp75-i2c-3-4b:switch-temp" + "name": "tmp75-i2c-3-4c:tofino-temp" }, { - "name": "tmp75-i2c-3-4c:inlet-right-temp" + "name": "tmp75-i2c-3-4d:intake2-temp" }, { "name": "tmp75-i2c-8-48:outlet-right-temp" @@ -88,6 +99,9 @@ { "name": "tmp75-i2c-8-49:outlet-left-temp" }, + { + "name": "pch_haswell-virtual-0:temp1" + }, { "name": "coretemp-isa-0000:package-id-0" }, @@ -102,9 +116,6 @@ }, { "name": "coretemp-isa-0000:core-3" - }, - { - "name": "pch_haswell-virtual-0:temp1" } ], "sfps": [ diff --git a/device/barefoot/x86_64-accton_wedge100bf_32x-r0/platform_components.json b/device/barefoot/x86_64-accton_wedge100bf_32x-r0/platform_components.json index df77fa3e1bf9..30befc827a9e 100644 --- a/device/barefoot/x86_64-accton_wedge100bf_32x-r0/platform_components.json +++ b/device/barefoot/x86_64-accton_wedge100bf_32x-r0/platform_components.json @@ -1,8 +1,10 @@ -{ - "chassis": { - "Wedge100BF-32X-O-AC-F-BF": { - "component": { - } - } - } +{ + "chassis": { + "Wedge100BF-32X-O-AC-F-BF": { + "component": { + "BIOS": { }, + "BMC": { } + } + } + } } \ No newline at end of file diff --git a/device/barefoot/x86_64-accton_wedge100bf_32x-r0/thermal_thresholds.json b/device/barefoot/x86_64-accton_wedge100bf_32x-r0/thermal_thresholds.json new file mode 100644 index 000000000000..bee961a84411 --- /dev/null +++ b/device/barefoot/x86_64-accton_wedge100bf_32x-r0/thermal_thresholds.json @@ -0,0 +1,64 @@ +{ + "thermals": [ + { + "com_e_driver-i2c-4-33:cpu-temp" : [99.0, 89.0, 11.0, 1.0] + }, + { + "com_e_driver-i2c-4-33:memory-temp" : [85.0, 75.0, 11.0, 1.0] + }, + { + "psu_driver-i2c-7-59:psu2-temp1" : [50.0, 40.0, 11.0, 1.0] + }, + { + "psu_driver-i2c-7-59:psu2-temp2" : [90.0, 80.0, 11.0, 1.0] + }, + { + "psu_driver-i2c-7-5a:psu1-temp1" : [50.0, 40.0, 11.0, 1.0] + }, + { + "psu_driver-i2c-7-5a:psu1-temp2" : [90.0, 80.0, 11.0, 1.0] + }, + { + "tmp75-i2c-3-48:chip-temp" : [90.0, 80.0, 11.0, 1.0] + }, + { + "tmp75-i2c-3-49:exhaust2-temp" : [80.0, 70.0, 11.0, 1.0] + }, + { + "tmp75-i2c-3-4a:exhaust-temp" : [60.0, 50.0, 11.0, 1.0] + }, + { + "tmp75-i2c-3-4b:intake-temp" : [60.0, 50.0, 11.0, 1.0] + }, + { + "tmp75-i2c-3-4c:tofino-temp" : [99.0, 89.0, 11.0, 1.0] + }, + { + "tmp75-i2c-3-4d:intake2-temp" : [60.0, 50.0, 11.0, 1.0] + }, + { + "tmp75-i2c-8-48:outlet-right-temp" : [60.0, 50.0, 11.0, 1.0] + }, + { + "tmp75-i2c-8-49:outlet-left-temp" : [60.0, 50.0, 11.0, 1.0] + }, + { + "pch_haswell-virtual-0:temp1" : [60.0, 50.0, 11.0, 1.0] + }, + { + "coretemp-isa-0000:package-id-0" : [80.0, 70.0, 11.0, 1.0] + }, + { + "coretemp-isa-0000:core-0" : [99.0, 89.0, 11.0, 1.0] + }, + { + "coretemp-isa-0000:core-1" : [99.0, 89.0, 11.0, 1.0] + }, + { + "coretemp-isa-0000:core-2" : [99.0, 89.0, 11.0, 1.0] + }, + { + "coretemp-isa-0000:core-3" : [99.0, 89.0, 11.0, 1.0] + } + ] +} \ No newline at end of file diff --git a/device/barefoot/x86_64-accton_wedge100bf_65x-r0/mavericks/switch-sai.conf b/device/barefoot/x86_64-accton_wedge100bf_65x-r0/mavericks/switch-sai.conf deleted file mode 100644 index 81a7d7bc28c3..000000000000 --- a/device/barefoot/x86_64-accton_wedge100bf_65x-r0/mavericks/switch-sai.conf +++ /dev/null @@ -1,34 +0,0 @@ -{ - "chip_list": [ - { - "id": "asic-0", - "chip_family": "Tofino", - "instance": 0, - "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.0", - "pcie_domain": 0, - "pcie_bus": 5, - "pcie_fn": 0, - "pcie_dev": 0, - "pcie_int_mode": 1, - "sds_fw_path": "share/tofino_sds_fw/avago/firmware" - } - ], - "instance": 0, - "p4_program_list": [ - { - "id": "pgm-0", - "instance": 0, - "path": "switch", - "program-name": "switch", - "pd": "lib/tofinopd/switch/libpd.so", - "pd-thrift": "lib/tofinopd/switch/libpdthrift.so", - "table-config": "share/tofinopd/switch/context.json", - "tofino-bin": "share/tofinopd/switch/tofino.bin", - "switchapi": "lib/libswitchapi.so", - "sai": "lib/libsai.so", - "agent0": "lib/platform/x86_64-accton_wedge100bf_65x-r0/libpltfm_mgr.so", - "switchapi_port_add": false, - "non_default_port_ppgs": 5 - } - ] -} diff --git a/device/barefoot/x86_64-accton_wedge100bf_65x-r0/mavericks/switch-tna-sai.conf b/device/barefoot/x86_64-accton_wedge100bf_65x-r0/mavericks/switch-tna-sai.conf index ddcb9d4ba287..e07192619af0 100644 --- a/device/barefoot/x86_64-accton_wedge100bf_65x-r0/mavericks/switch-tna-sai.conf +++ b/device/barefoot/x86_64-accton_wedge100bf_65x-r0/mavericks/switch-tna-sai.conf @@ -1,17 +1,9 @@ { - "instance": 0, "chip_list": [ { - "id": "asic-0", "chip_family": "Tofino", - "instance": 0, - "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.0", - "pcie_domain": 0, - "pcie_bus": 5, - "pcie_fn": 0, - "pcie_dev": 0, - "pcie_int_mode": 1, - "sds_fw_path": "share/tofino_sds_fw/avago/firmware" + "sds_fw_path": "share/tofino_sds_fw/avago/firmware", + "instance": 0 } ], "p4_devices": [ @@ -28,7 +20,6 @@ } ], "program-name": "switch", - "sai": "lib/libsai.so", "bfrt-config": "share/switch/bf-rt.json", "model_json_path" : "share/switch/aug_model.json", "switchapi_port_add": false, @@ -36,5 +27,13 @@ } ] } + ], + "switch_options": [ + { + "device-id": 0, + "model_json_path": "share/switch/aug_model.json", + "non_default_port_ppgs": 5, + "switchapi_port_add": false + } ] } diff --git a/device/celestica/x86_64-cel_e1031-r0/Celestica-E1031-T48S4/helix4-e1031-48x1G+4x10G.config.bcm b/device/celestica/x86_64-cel_e1031-r0/Celestica-E1031-T48S4/helix4-e1031-48x1G+4x10G.config.bcm index 02d785aa4cb0..3da3ff365e21 100644 --- a/device/celestica/x86_64-cel_e1031-r0/Celestica-E1031-T48S4/helix4-e1031-48x1G+4x10G.config.bcm +++ b/device/celestica/x86_64-cel_e1031-r0/Celestica-E1031-T48S4/helix4-e1031-48x1G+4x10G.config.bcm @@ -1,3 +1,7 @@ +sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc + +ipv6_lpm_128b_enable=1 + # disables bcmALPMDH (ALPM distributed hitbit) thread. This thread is purely for debug purpose l3_alpm_hit_skip=1 diff --git a/device/celestica/x86_64-cel_e1031-r0/Celestica-E1031-T48S4/sai_postinit_cmd.soc b/device/celestica/x86_64-cel_e1031-r0/Celestica-E1031-T48S4/sai_postinit_cmd.soc new file mode 100644 index 000000000000..573706e302bd --- /dev/null +++ b/device/celestica/x86_64-cel_e1031-r0/Celestica-E1031-T48S4/sai_postinit_cmd.soc @@ -0,0 +1 @@ +setreg RTAG7_IPV4_TCP_UDP_HASH_FIELD_BMAP_2 IPV4_TCP_UDP_FIELD_BITMAP_A=0xf70 diff --git a/device/celestica/x86_64-cel_e1031-r0/sonic_platform/eeprom.py b/device/celestica/x86_64-cel_e1031-r0/sonic_platform/eeprom.py index dc43a4d7ddda..48643b403071 100644 --- a/device/celestica/x86_64-cel_e1031-r0/sonic_platform/eeprom.py +++ b/device/celestica/x86_64-cel_e1031-r0/sonic_platform/eeprom.py @@ -45,7 +45,7 @@ def __parse_output(self, decode_output): for line in lines: try: match = re.search( - '(0x[0-9a-fA-F]{2})([\s]+[\S]+[\s]+)([\S]+)', line) + '(0x[0-9a-fA-F]{2})([\s]+[\S]+[\s]+)(.*$)', line) if match is not None: idx = match.group(1) value = match.group(3).rstrip('\0') diff --git a/device/celestica/x86_64-cel_seastone-r0/sonic_platform/eeprom.py b/device/celestica/x86_64-cel_seastone-r0/sonic_platform/eeprom.py index b0d37d57beac..bfde69c8d296 100644 --- a/device/celestica/x86_64-cel_seastone-r0/sonic_platform/eeprom.py +++ b/device/celestica/x86_64-cel_seastone-r0/sonic_platform/eeprom.py @@ -44,7 +44,7 @@ def __parse_output(self, decode_output): for line in lines: try: match = re.search( - '(0x[0-9a-fA-F]{2})([\s]+[\S]+[\s]+)([\S]+)', line) + '(0x[0-9a-fA-F]{2})([\s]+[\S]+[\s]+)(.*$)', line) if match is not None: idx = match.group(1) value = match.group(3).rstrip('\0') diff --git a/device/celestica/x86_64-cel_seastone_2-r0/Seastone_2/td3-seastone_2-32x100G.config.bcm b/device/celestica/x86_64-cel_seastone_2-r0/Seastone_2/td3-seastone_2-32x100G.config.bcm index a7ee4a93ea04..d9d2f47750d9 100644 --- a/device/celestica/x86_64-cel_seastone_2-r0/Seastone_2/td3-seastone_2-32x100G.config.bcm +++ b/device/celestica/x86_64-cel_seastone_2-r0/Seastone_2/td3-seastone_2-32x100G.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ help_cli_enable=1 ifp_inports_support_enable=1 ipv6_lpm_128b_enable=0x1 diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/port_config.ini b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/port_config.ini index 1922a3e04b5a..54809b2c957a 100644 --- a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/port_config.ini +++ b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/port_config.ini @@ -63,3 +63,5 @@ Ethernet60 81,82 fortyGigE1/4/13 60 40000 Ethernet61 83,84 fortyGigE1/4/14 61 40000 Ethernet62 85,86 fortyGigE1/4/15 62 40000 Ethernet63 87,88 fortyGigE1/4/16 63 40000 +Ethernet64 129 tenGigE1/1 64 10000 +Ethernet65 131 tenGigE1/2 65 10000 diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/th-s6100-64x40G-t0.config.bcm b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/th-s6100-64x40G-t0.config.bcm index c7540e2d2a4d..e1eb6968df68 100644 --- a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/th-s6100-64x40G-t0.config.bcm +++ b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/th-s6100-64x40G-t0.config.bcm @@ -34,6 +34,8 @@ os=unix parity_correction=1 parity_enable=1 +port_phy_addr_66=0x176 +port_phy_addr_100=0x177 xgxs_tx_lane_map_104=0x3210 xgxs_rx_lane_map_104=0x0312 phy_xaui_tx_polarity_flip_104=0x0 @@ -345,6 +347,9 @@ phy_xaui_rx_polarity_flip_79=0x3 dport_map_port_78=63 dport_map_port_79=64 pbmp_xport_xe=0x3fffd0000ffff40003fffc0001fffe + +portmap_66=129:10 +portmap_100=131:10 portmap_33=132:10 portmap_67=133:10 portmap_101=134:10 @@ -413,5 +418,7 @@ portmap_114=121:40:2 portmap_115=123:40:2 portmap_116=125:40:2 portmap_117=127:40:2 +dport_map_port_66=65 +dport_map_port_100=66 mmu_init_config="MSFT-TH-Tier0" diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/th-s6100-64x40G-t1.config.bcm b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/th-s6100-64x40G-t1.config.bcm index 8506209fb1e8..87c90323d5b1 100644 --- a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/th-s6100-64x40G-t1.config.bcm +++ b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/th-s6100-64x40G-t1.config.bcm @@ -34,6 +34,8 @@ os=unix parity_correction=1 parity_enable=1 +port_phy_addr_66=0x176 +port_phy_addr_100=0x177 xgxs_tx_lane_map_104=0x3210 xgxs_rx_lane_map_104=0x0312 phy_xaui_tx_polarity_flip_104=0x0 @@ -345,6 +347,9 @@ phy_xaui_rx_polarity_flip_79=0x3 dport_map_port_78=63 dport_map_port_79=64 pbmp_xport_xe=0x3fffd0000ffff40003fffc0001fffe + +portmap_66=129:10 +portmap_100=131:10 portmap_33=132:10 portmap_67=133:10 portmap_101=134:10 @@ -413,5 +418,7 @@ portmap_114=121:40:2 portmap_115=123:40:2 portmap_116=125:40:2 portmap_117=127:40:2 +dport_map_port_66=65 +dport_map_port_100=66 mmu_init_config="MSFT-TH-Tier1" diff --git a/device/dell/x86_64-dellemc_n3248te_c3338-r0/platform.json b/device/dell/x86_64-dellemc_n3248te_c3338-r0/platform.json new file mode 100644 index 000000000000..0bb2391ca3df --- /dev/null +++ b/device/dell/x86_64-dellemc_n3248te_c3338-r0/platform.json @@ -0,0 +1,350 @@ +{ + "chassis": { + "name": "N3248TE-ON", + "status_led": { + "controllable": true, + "colors": ["green", "blink_green", "yellow", "blink_yellow"] + }, + "thermal_manager" : false, + "components": [ + { + "name": "BIOS" + }, + { + "name": "CPU CPLD" + }, + { + "name": "SYS CPLD" + } + ], + "fans": [ + { + "name": "FanTray1-Fan1", + "speed": { + "controllable":false + }, + "status_led": { + "available": false + } + }, + { + "name": "FanTray2-Fan1", + "speed": { + "controllable":false + }, + "status_led": { + "available": false + } + }, + { + "name": "FanTray3-Fan1", + "speed": { + "controllable":false + }, + "status_led": { + "available": false + } + } + ], + "fan_drawers":[ + { + "name": "FanTray1", + "status_led": { + "controllable": true, + "colors": ["off", "green", "yellow"] + }, + "fans": [ + { + "name": "FanTray1-Fan1", + "speed": { + "controllable":false + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "FanTray2", + "status_led": { + "controllable": true, + "colors": ["off", "green", "yellow"] + }, + "fans": [ + { + "name": "FanTray2-Fan1", + "speed": { + "controllable":false + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "FanTray3", + "status_led": { + "controllable": true, + "colors": ["off", "green", "yellow"] + }, + "fans": [ + { + "name": "FanTray3-Fan1", + "speed": { + "controllable":false + }, + "status_led": { + "available": false + } + } + ] + } + ], + "psus": [ + { + "name": "PSU1", + "status_led": { + "controllable": false + }, + "fans": [ + { + "name": "PSU1 Fan", + "speed": { + "controllable": false + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "PSU2", + "status_led": { + "controllable": false + }, + "fans": [ + { + "name": "PSU2 Fan", + "speed": { + "controllable": false + }, + "status_led": { + "available": false + } + } + ] + } + ], + "thermals": [ + { + "name": "Front Panel PHY Temperature", + "controllable": false, + "low-crit-threshold": false, + "high-crit-threshold": false, + "minimum-recorded": false, + "maximum-recorded": false + }, + { + "name": "Middle Fan Tray Temperature", + "controllable": false, + "low-crit-threshold": false, + "high-crit-threshold": false, + "minimum-recorded": false, + "maximum-recorded": false + }, + { + "name": "Near Front Panel Temperature", + "controllable": false, + "low-crit-threshold": false, + "high-crit-threshold": false, + "minimum-recorded": false, + "maximum-recorded": false + }, + { + "name": "Switch Near Temperature", + "controllable": false, + "low-crit-threshold": false, + "high-crit-threshold": false, + "minimum-recorded": false, + "maximum-recorded": false + }, + { + "name": "Switch Rear Temperature", + "controllable": false, + "low-crit-threshold": false, + "high-crit-threshold": false, + "minimum-recorded": false, + "maximum-recorded": false + } + ], + "modules": [], + "sfps": [ + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "1GSFPCu" + }, + { + "name": "SFP/SFP+/SFP28" + }, + { + "name": "SFP/SFP+/SFP28" + }, + { + "name": "SFP/SFP+/SFP28" + }, + { + "name": "SFP/SFP+/SFP28" + }, + { + "name": "QSFP+ or later" + }, + { + "name": "QSFP+ or later" + } + ] + }, + "interfaces": {} +} diff --git a/device/dell/x86_64-dellemc_n3248te_c3338-r0/system_health_monitoring_config.json b/device/dell/x86_64-dellemc_n3248te_c3338-r0/system_health_monitoring_config.json new file mode 100644 index 000000000000..dc20d412147f --- /dev/null +++ b/device/dell/x86_64-dellemc_n3248te_c3338-r0/system_health_monitoring_config.json @@ -0,0 +1,11 @@ +{ + "services_to_ignore": [], + "devices_to_ignore": ["fan.speed","psu.temperature","psu.voltage","asic"], + "user_defined_checkers": [], + "polling_interval": 60, + "led_color": { + "fault" : "blink_yellow", + "normal" : "green", + "booting": "blink_green" + } +} diff --git a/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-C32/td3-s5232f-32x100G.config.bcm b/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-C32/td3-s5232f-32x100G.config.bcm index bf15510bf49b..0985bd7712cc 100644 --- a/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-C32/td3-s5232f-32x100G.config.bcm +++ b/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-C32/td3-s5232f-32x100G.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ os=unix core_clock_frequency=1525 diff --git a/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-C8D48/td3-s5232f-8x100G+48x50G.config.bcm b/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-C8D48/td3-s5232f-8x100G+48x50G.config.bcm index 68fb77a4219f..cae03e859b83 100644 --- a/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-C8D48/td3-s5232f-8x100G+48x50G.config.bcm +++ b/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-C8D48/td3-s5232f-8x100G+48x50G.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ os=unix core_clock_frequency=1525 diff --git a/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-100G/td3-s5232f-32x100G.config.bcm b/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-100G/td3-s5232f-32x100G.config.bcm index c44e4805c62a..164d1043644d 100644 --- a/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-100G/td3-s5232f-32x100G.config.bcm +++ b/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-100G/td3-s5232f-32x100G.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ os=unix core_clock_frequency=1525 diff --git a/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-10G/td3-s5232f-96x10G+8x100G.config.bcm b/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-10G/td3-s5232f-96x10G+8x100G.config.bcm index 6f62b7209198..c5c6fc9c8d0c 100644 --- a/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-10G/td3-s5232f-96x10G+8x100G.config.bcm +++ b/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-10G/td3-s5232f-96x10G+8x100G.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ os=unix core_clock_frequency=1525 diff --git a/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-25G/td3-s5232f-96x25G+8x100G.config.bcm b/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-25G/td3-s5232f-96x25G+8x100G.config.bcm index a4fccde19686..ae1995d930f1 100644 --- a/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-25G/td3-s5232f-96x25G+8x100G.config.bcm +++ b/device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-25G/td3-s5232f-96x25G+8x100G.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ os=unix core_clock_frequency=1525 diff --git a/device/dell/x86_64-dellemc_s5248f_c3538-r0/DellEMC-S5248f-P-10G/td3-s5248f-10g.config.bcm b/device/dell/x86_64-dellemc_s5248f_c3538-r0/DellEMC-S5248f-P-10G/td3-s5248f-10g.config.bcm index 021f94dc32f7..69c3d1af90d9 100644 --- a/device/dell/x86_64-dellemc_s5248f_c3538-r0/DellEMC-S5248f-P-10G/td3-s5248f-10g.config.bcm +++ b/device/dell/x86_64-dellemc_s5248f_c3538-r0/DellEMC-S5248f-P-10G/td3-s5248f-10g.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ os=unix dpp_clock_ratio=2:3 oversubscribe_mode=1 diff --git a/device/dell/x86_64-dellemc_s5248f_c3538-r0/DellEMC-S5248f-P-25G/td3-s5248f-25g.config.bcm b/device/dell/x86_64-dellemc_s5248f_c3538-r0/DellEMC-S5248f-P-25G/td3-s5248f-25g.config.bcm index 2630512df0ca..468b7d527989 100644 --- a/device/dell/x86_64-dellemc_s5248f_c3538-r0/DellEMC-S5248f-P-25G/td3-s5248f-25g.config.bcm +++ b/device/dell/x86_64-dellemc_s5248f_c3538-r0/DellEMC-S5248f-P-25G/td3-s5248f-25g.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ os=unix dpp_clock_ratio=2:3 diff --git a/device/dell/x86_64-dellemc_s5296f_c3538-r0/DellEMC-S5296f-P-10G/td3-s5296f-10g.config.bcm b/device/dell/x86_64-dellemc_s5296f_c3538-r0/DellEMC-S5296f-P-10G/td3-s5296f-10g.config.bcm index ddc14d9363d3..7f8213f322e6 100644 --- a/device/dell/x86_64-dellemc_s5296f_c3538-r0/DellEMC-S5296f-P-10G/td3-s5296f-10g.config.bcm +++ b/device/dell/x86_64-dellemc_s5296f_c3538-r0/DellEMC-S5296f-P-10G/td3-s5296f-10g.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ os=unix portmap_5.0=5:10 portmap_6.0=6:10 diff --git a/device/dell/x86_64-dellemc_s5296f_c3538-r0/DellEMC-S5296f-P-25G/td3-s5296f-25g.config.bcm b/device/dell/x86_64-dellemc_s5296f_c3538-r0/DellEMC-S5296f-P-25G/td3-s5296f-25g.config.bcm index dd0901f5d01f..2e4dfd6c97a8 100644 --- a/device/dell/x86_64-dellemc_s5296f_c3538-r0/DellEMC-S5296f-P-25G/td3-s5296f-25g.config.bcm +++ b/device/dell/x86_64-dellemc_s5296f_c3538-r0/DellEMC-S5296f-P-25G/td3-s5296f-25g.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ os=unix portmap_5.0=5:25 portmap_6.0=6:25 diff --git a/device/delta/x86_64-delta_ag9032v2a-r0/Delta-ag9032v2a/td3-ag9032v2a-32x100G+1x10G.config.bcm b/device/delta/x86_64-delta_ag9032v2a-r0/Delta-ag9032v2a/td3-ag9032v2a-32x100G+1x10G.config.bcm index 07600e0b8a65..c157e5f7b6cd 100755 --- a/device/delta/x86_64-delta_ag9032v2a-r0/Delta-ag9032v2a/td3-ag9032v2a-32x100G+1x10G.config.bcm +++ b/device/delta/x86_64-delta_ag9032v2a-r0/Delta-ag9032v2a/td3-ag9032v2a-32x100G+1x10G.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ pbmp_oversubscribe=0x00003fc000000ff0000003fc000001fe pbmp_xport_xe=0xffffffffffffffffffffffffffffffffffff core_clock_frequency=1525 diff --git a/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/INGRASYS-S9180-32X/switch-tna-sai.conf b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/INGRASYS-S9180-32X/switch-tna-sai.conf index 9fbf9d3cdb69..193dcde96bcf 100644 --- a/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/INGRASYS-S9180-32X/switch-tna-sai.conf +++ b/device/ingrasys/x86_64-ingrasys_s9180_32x-r0/INGRASYS-S9180-32X/switch-tna-sai.conf @@ -1,17 +1,9 @@ { - "instance": 0, "chip_list": [ { - "id": "asic-0", "chip_family": "Tofino", - "instance": 0, - "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.0", - "pcie_domain": 0, - "pcie_bus": 5, - "pcie_fn": 0, - "pcie_dev": 0, - "pcie_int_mode": 1, - "sds_fw_path": "share/tofino_sds_fw/avago/firmware" + "sds_fw_path": "share/tofino_sds_fw/avago/firmware", + "instance": 0 } ], "p4_devices": [ @@ -28,7 +20,6 @@ } ], "program-name": "switch", - "sai": "lib/libsai.so", "bfrt-config": "share/switch/bf-rt.json", "model_json_path" : "share/switch/aug_model.json", "switchapi_port_add": false, @@ -36,5 +27,13 @@ } ] } + ], + "switch_options": [ + { + "device-id": 0, + "model_json_path": "share/switch/aug_model.json", + "non_default_port_ppgs": 5, + "switchapi_port_add": false + } ] } diff --git a/device/ingrasys/x86_64-ingrasys_s9280_64x-r0/INGRASYS-S9280-64X/switch-tna-sai.conf b/device/ingrasys/x86_64-ingrasys_s9280_64x-r0/INGRASYS-S9280-64X/switch-tna-sai.conf index 4895ac901ff6..2425102e2319 100644 --- a/device/ingrasys/x86_64-ingrasys_s9280_64x-r0/INGRASYS-S9280-64X/switch-tna-sai.conf +++ b/device/ingrasys/x86_64-ingrasys_s9280_64x-r0/INGRASYS-S9280-64X/switch-tna-sai.conf @@ -1,17 +1,9 @@ { - "instance": 0, "chip_list": [ { - "id": "asic-0", "chip_family": "Tofino", - "instance": 0, - "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.0", - "pcie_domain": 0, - "pcie_bus": 5, - "pcie_fn": 0, - "pcie_dev": 0, - "pcie_int_mode": 1, - "sds_fw_path": "share/tofino_sds_fw/avago/firmware" + "sds_fw_path": "share/tofino_sds_fw/avago/firmware", + "instance": 0 } ], "p4_devices": [ @@ -28,7 +20,6 @@ } ], "program-name": "switch", - "sai": "lib/libsai.so", "bfrt-config": "share/switch/bf-rt.json", "model_json_path" : "share/switch/aug_model.json", "switchapi_port_add": false, @@ -36,5 +27,13 @@ } ] } + ], + "switch_options": [ + { + "device-id": 0, + "model_json_path": "share/switch/aug_model.json", + "non_default_port_ppgs": 5, + "switchapi_port_add": false + } ] } diff --git a/device/inventec/x86_64-inventec_d6332-r0/INVENTEC-D6332/td3-d6332-32x100G-SR4.config.bcm b/device/inventec/x86_64-inventec_d6332-r0/INVENTEC-D6332/td3-d6332-32x100G-SR4.config.bcm index 8fe7622f4b8f..7821bc7e6ceb 100644 --- a/device/inventec/x86_64-inventec_d6332-r0/INVENTEC-D6332/td3-d6332-32x100G-SR4.config.bcm +++ b/device/inventec/x86_64-inventec_d6332-r0/INVENTEC-D6332/td3-d6332-32x100G-SR4.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ ### fix for sonic ptp_ts_pll_fref=50000000 ptp_bs_fref_0=50000000 diff --git a/device/inventec/x86_64-inventec_d6356-r0/INVENTEC-D6356/td3-d6356-48x25G-8x100G.config.bcm b/device/inventec/x86_64-inventec_d6356-r0/INVENTEC-D6356/td3-d6356-48x25G-8x100G.config.bcm index 089207abd136..895e4389c6da 100644 --- a/device/inventec/x86_64-inventec_d6356-r0/INVENTEC-D6356/td3-d6356-48x25G-8x100G.config.bcm +++ b/device/inventec/x86_64-inventec_d6356-r0/INVENTEC-D6356/td3-d6356-48x25G-8x100G.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ ### fix for sonic ptp_ts_pll_fref=50000000 ptp_bs_fref_0=50000000 diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D40C8S8/hwsku.json b/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D40C8S8/hwsku.json deleted file mode 100644 index 63a3005ad591..000000000000 --- a/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D40C8S8/hwsku.json +++ /dev/null @@ -1,178 +0,0 @@ -{ - "interfaces": { - "Ethernet0": { - "default_brkout_mode": "4x10G[25G]" - }, - "Ethernet1": { - "default_brkout_mode": "4x10G[25G]" - }, - "Ethernet2": { - "default_brkout_mode": "4x10G[25G]" - }, - "Ethernet3": { - "default_brkout_mode": "4x10G[25G]" - }, - "Ethernet4": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet8": { - "default_brkout_mode": "4x10G[25G]" - }, - "Ethernet9": { - "default_brkout_mode": "4x10G[25G]" - }, - "Ethernet10": { - "default_brkout_mode": "4x10G[25G]" - }, - "Ethernet11": { - "default_brkout_mode": "4x10G[25G]" - }, - "Ethernet12": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet16": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet18": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet20": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet22": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet24": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet28": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet32": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet36": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet40": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet42": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet44": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet46": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet48": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet50": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet52": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet54": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet56": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet58": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet60": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet62": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet64": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet66": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet68": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet70": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet72": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet74": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet76": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet78": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet80": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet82": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet84": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet86": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet88": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet92": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet96": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet100": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet104": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet106": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet108": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet110": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet112": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet114": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet116": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet118": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet120": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet122": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet124": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet126": { - "default_brkout_mode": "2x50G[25G,10G]" - } - } -} \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/sai.profile b/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/sai.profile index aa93654b5406..ce9e96ee4fa3 100644 --- a/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/sai.profile +++ b/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/sai.profile @@ -1,4 +1,3 @@ SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_2700_48x50g_8x100g.xml -SAI_VXLAN_SRCPORT_RANGE_ENABLE=1 SAI_DUMP_STORE_PATH=/var/log/mellanox/sdk-dumps SAI_DUMP_STORE_AMOUNT=10 diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/platform.json b/device/mellanox/x86_64-mlnx_msn2700-r0/platform.json index fab5ea6bf11c..063a211e785c 100644 --- a/device/mellanox/x86_64-mlnx_msn2700-r0/platform.json +++ b/device/mellanox/x86_64-mlnx_msn2700-r0/platform.json @@ -381,8 +381,7 @@ "lanes": "0,1,2,3", "breakout_modes": { "1x100G[50G,40G,25G,10G]": ["etp1"], - "2x50G[25G,10G]": ["etp1a", "etp1b"], - "4x10G[25G]": ["etp1a", "etp1b", "etp1c", "etp1d"] + "2x50G[25G,10G]": ["etp1a", "etp1b"] } }, "Ethernet4": { @@ -398,8 +397,7 @@ "lanes": "8,9,10,11", "breakout_modes": { "1x100G[50G,40G,25G,10G]": ["etp3"], - "2x50G[25G,10G]": ["etp3a", "etp3b"], - "4x10G[25G]": ["etp3a", "etp3b", "etp3c", "etp3d"] + "2x50G[25G,10G]": ["etp3a", "etp3b"] } }, "Ethernet12": { diff --git a/device/mellanox/x86_64-mlnx_msn3700-r0/sensors.conf b/device/mellanox/x86_64-mlnx_msn3700-r0/sensors.conf index 281f0a54dfa3..59c99ac98e39 100644 --- a/device/mellanox/x86_64-mlnx_msn3700-r0/sensors.conf +++ b/device/mellanox/x86_64-mlnx_msn3700-r0/sensors.conf @@ -85,6 +85,9 @@ bus "i2c-4" "i2c-1-mux (chan_id 3)" label power2 "PSU-2 12V Rail Pwr (out)" label curr1 "PSU-2 220V Rail Curr (in)" label curr2 "PSU-2 12V Rail Curr (out)" + set in3_lcrit in3_crit * 0.662 + set in3_min in3_crit * 0.745 + set in3_max in3_crit * 0.952 chip "dps460-i2c-*-59" label in1 "PSU-1 220V Rail (in)" ignore in2 @@ -99,6 +102,9 @@ bus "i2c-4" "i2c-1-mux (chan_id 3)" label power2 "PSU-1 12V Rail Pwr (out)" label curr1 "PSU-1 220V Rail Curr (in)" label curr2 "PSU-1 12V Rail Curr (out)" + set in3_lcrit in3_crit * 0.662 + set in3_min in3_crit * 0.745 + set in3_max in3_crit * 0.952 # Chassis fans chip "mlxreg_fan-isa-*" diff --git a/device/mellanox/x86_64-mlnx_msn3700c-r0/sensors.conf b/device/mellanox/x86_64-mlnx_msn3700c-r0/sensors.conf index 094cd78cde57..343385fcd4de 100644 --- a/device/mellanox/x86_64-mlnx_msn3700c-r0/sensors.conf +++ b/device/mellanox/x86_64-mlnx_msn3700c-r0/sensors.conf @@ -85,6 +85,9 @@ bus "i2c-4" "i2c-1-mux (chan_id 3)" label power2 "PSU-2 12V Rail Pwr (out)" label curr1 "PSU-2 220V Rail Curr (in)" label curr2 "PSU-2 12V Rail Curr (out)" + set in3_lcrit in3_crit * 0.662 + set in3_min in3_crit * 0.745 + set in3_max in3_crit * 0.952 chip "dps460-i2c-*-59" label in1 "PSU-1 220V Rail (in)" ignore in2 @@ -99,6 +102,9 @@ bus "i2c-4" "i2c-1-mux (chan_id 3)" label power2 "PSU-1 12V Rail Pwr (out)" label curr1 "PSU-1 220V Rail Curr (in)" label curr2 "PSU-1 12V Rail Curr (out)" + set in3_lcrit in3_crit * 0.662 + set in3_min in3_crit * 0.745 + set in3_max in3_crit * 0.952 # Chassis fans chip "mlxreg_fan-isa-*" diff --git a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-C64/sai.profile b/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-C64/sai.profile index 35d3ce25a43a..9c74ce166084 100644 --- a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-C64/sai.profile +++ b/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-C64/sai.profile @@ -1,4 +1,3 @@ SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_3800.xml -SAI_VXLAN_SRCPORT_RANGE_ENABLE=1 SAI_DUMP_STORE_PATH=/var/log/mellanox/sdk-dumps SAI_DUMP_STORE_AMOUNT=10 diff --git a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D100C12S2/hwsku.json b/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D100C12S2/hwsku.json deleted file mode 100644 index 2b1d5d322282..000000000000 --- a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D100C12S2/hwsku.json +++ /dev/null @@ -1,346 +0,0 @@ -{ - "interfaces": { - "Ethernet0": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet2": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet4": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet6": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet8": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet10": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet12": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet14": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet16": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet18": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet20": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet22": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet24": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet26": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet28": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet30": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet32": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet34": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet36": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet38": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet40": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet42": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet44": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet46": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet48": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet50": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet52": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet54": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet56": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet58": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet60": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet62": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet64": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet66": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet68": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet70": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet72": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet74": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet76": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet78": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet80": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet82": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet84": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet86": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet88": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet90": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet92": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet94": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet96": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet98": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet100": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet102": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet104": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet106": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet108": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet110": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet112": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet114": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet116": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet118": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet120": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet122": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet124": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet126": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet128": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet130": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet132": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet134": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet136": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet138": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet140": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet142": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet144": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet146": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet148": { - "default_brkout_mode": "1x10G[100G,50G,40G,25G]" - }, - "Ethernet152": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet154": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet156": { - "default_brkout_mode": "1x10G[100G,50G,40G,25G]" - }, - "Ethernet160": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet162": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet164": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet166": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet168": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet170": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet172": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet174": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet176": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet178": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet180": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet182": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet184": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet186": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet188": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet190": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet192": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet194": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet196": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet198": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet200": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet202": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet204": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet206": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet208": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet212": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet216": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet220": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet224": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet228": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet232": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet236": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet240": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet244": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet248": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet252": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - } - } -} diff --git a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D100C12S2/sai.profile b/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D100C12S2/sai.profile index 5543225b55f5..2d6c6ad4acc8 100644 --- a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D100C12S2/sai.profile +++ b/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D100C12S2/sai.profile @@ -1,2 +1 @@ SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_3800_2x10g_100x50g_12x100g.xml -SAI_VXLAN_SRCPORT_RANGE_ENABLE=1 diff --git a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D112C8/hwsku.json b/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D112C8/hwsku.json deleted file mode 100644 index 5bc784192c84..000000000000 --- a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D112C8/hwsku.json +++ /dev/null @@ -1,364 +0,0 @@ -{ - "interfaces": { - "Ethernet0": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet2": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet4": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet6": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet8": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet10": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet12": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet14": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet16": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet18": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet20": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet22": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet24": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet26": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet28": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet30": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet32": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet34": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet36": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet38": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet40": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet42": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet44": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet46": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet48": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet50": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet52": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet54": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet56": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet58": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet60": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet62": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet64": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet66": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet68": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet70": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet72": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet74": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet76": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet78": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet80": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet82": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet84": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet86": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet88": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet90": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet92": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet94": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet96": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet100": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet104": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet106": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet108": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet110": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet112": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet116": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet120": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet122": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet124": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet126": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet128": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet132": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet136": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet138": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet140": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet142": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet144": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet148": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet152": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet154": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet156": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet158": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet160": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet162": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet164": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet166": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet168": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet170": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet172": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet174": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet176": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet178": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet180": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet182": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet184": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet186": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet188": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet190": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet192": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet194": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet196": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet198": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet200": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet202": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet204": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet206": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet208": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet210": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet212": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet214": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet216": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet218": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet220": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet222": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet224": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet226": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet228": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet230": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet232": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet234": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet236": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet238": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet240": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet242": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet244": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet246": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet248": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet250": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet252": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet254": { - "default_brkout_mode": "2x50G[25G,10G]" - } - } -} diff --git a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D112C8/sai.profile b/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D112C8/sai.profile index 8e672b95e232..181ced0f1269 100644 --- a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D112C8/sai.profile +++ b/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D112C8/sai.profile @@ -1,4 +1,3 @@ SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_3800_112x50g_8x100g.xml -SAI_VXLAN_SRCPORT_RANGE_ENABLE=1 SAI_DUMP_STORE_PATH=/var/log/mellanox/sdk-dumps SAI_DUMP_STORE_AMOUNT=10 diff --git a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D24C52/hwsku.json b/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D24C52/hwsku.json deleted file mode 100644 index 04826b7f557c..000000000000 --- a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D24C52/hwsku.json +++ /dev/null @@ -1,232 +0,0 @@ -{ - "interfaces": { - "Ethernet0": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet4": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet8": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet12": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet16": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet20": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet24": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet28": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet32": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet34": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet36": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet38": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet40": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet42": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet44": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet46": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet48": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet52": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet56": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet60": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet64": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet68": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet72": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet76": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet80": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet84": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet88": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet92": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet96": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet100": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet104": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet106": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet108": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet110": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet112": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet116": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet120": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet124": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet128": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet132": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet136": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet140": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet144": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet148": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet152": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet156": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet160": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet164": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet168": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet172": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet176": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet178": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet180": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet182": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet184": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet186": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet188": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet190": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet192": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet196": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet200": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet204": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet208": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet212": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet216": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet220": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet224": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet228": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet232": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet236": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet240": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet242": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet244": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet246": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet248": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet252": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - } - } -} diff --git a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D28C49S1/hwsku.json b/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D28C49S1/hwsku.json deleted file mode 100644 index 83c69052a64c..000000000000 --- a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D28C49S1/hwsku.json +++ /dev/null @@ -1,238 +0,0 @@ -{ - "interfaces": { - "Ethernet0": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet4": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet8": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet12": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet16": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet20": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet24": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet28": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet32": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet34": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet36": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet38": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet40": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet42": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet44": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet46": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet48": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet52": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet56": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet60": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet64": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet68": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet72": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet76": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet80": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet84": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet88": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet92": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet96": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet100": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet104": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet106": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet108": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet110": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet112": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet116": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet120": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet124": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet128": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet132": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet136": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet140": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet144": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet148": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet152": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet156": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet160": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet164": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet166": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet168": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet172": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet176": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet178": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet180": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet182": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet184": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet186": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet188": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet190": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet192": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet196": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet200": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet204": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet208": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet212": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet216": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet220": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet224": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet228": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet232": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet236": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet240": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet242": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet244": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet246": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet248": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet250": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet252": { - "default_brkout_mode": "1x10G[100G,50G,40G,25G]" - } - } -} diff --git a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D28C49S1/sai.profile b/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D28C49S1/sai.profile index 4846e323ae99..bd07d661025d 100644 --- a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D28C49S1/sai.profile +++ b/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D28C49S1/sai.profile @@ -1,4 +1,3 @@ SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_3800_1x10g_28x50g_49x100g.xml -SAI_VXLAN_SRCPORT_RANGE_ENABLE=1 SAI_DUMP_STORE_PATH=/var/log/mellanox/sdk-dumps SAI_DUMP_STORE_AMOUNT=10 diff --git a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D28C50/hwsku.json b/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D28C50/hwsku.json deleted file mode 100644 index f7334a858bf1..000000000000 --- a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D28C50/hwsku.json +++ /dev/null @@ -1,238 +0,0 @@ -{ - "interfaces": { - "Ethernet0": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet4": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet8": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet12": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet16": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet20": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet24": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet28": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet32": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet34": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet36": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet38": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet40": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet42": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet44": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet46": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet48": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet52": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet56": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet60": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet64": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet68": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet72": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet76": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet80": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet84": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet88": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet92": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet96": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet100": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet104": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet106": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet108": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet110": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet112": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet116": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet120": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet124": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet128": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet132": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet136": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet140": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet144": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet148": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet152": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet156": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet160": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet164": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet168": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet172": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet176": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet178": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet180": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet182": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet184": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet186": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet188": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet190": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet192": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet196": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet200": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet204": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet208": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet212": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet216": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet220": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet224": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet228": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet232": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet236": { - "default_brkout_mode": "1x100G[50G,40G,25G,10G]" - }, - "Ethernet240": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet242": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet244": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet246": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet248": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet250": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet252": { - "default_brkout_mode": "2x50G[25G,10G]" - }, - "Ethernet254": { - "default_brkout_mode": "2x50G[25G,10G]" - } - } -} diff --git a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D28C50/sai.profile b/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D28C50/sai.profile index ea9a7997fc04..ef03ceff837e 100644 --- a/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D28C50/sai.profile +++ b/device/mellanox/x86_64-mlnx_msn3800-r0/Mellanox-SN3800-D28C50/sai.profile @@ -1,4 +1,3 @@ SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_3800_28x50g_52x100g.xml -SAI_VXLAN_SRCPORT_RANGE_ENABLE=1 SAI_DUMP_STORE_PATH=/var/log/mellanox/sdk-dumps SAI_DUMP_STORE_AMOUNT=10 diff --git a/device/mellanox/x86_64-mlnx_msn3800-r0/platform.json b/device/mellanox/x86_64-mlnx_msn3800-r0/platform.json index 92865e228ee5..fa50c8850844 100644 --- a/device/mellanox/x86_64-mlnx_msn3800-r0/platform.json +++ b/device/mellanox/x86_64-mlnx_msn3800-r0/platform.json @@ -724,576 +724,448 @@ "index": "1,1,1,1", "lanes": "0,1,2,3", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp1"], - "1x10G[100G,50G,40G,25G]": ["etp1"], - "2x50G[25G,10G]": ["etp1a", "etp1b"] + "1x100G[50G,40G,25G,10G]": ["etp1"] } }, "Ethernet4": { "index": "2,2,2,2", "lanes": "4,5,6,7", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp2"], - "1x10G[100G,50G,40G,25G]": ["etp2"], - "2x50G[25G,10G]": ["etp2a", "etp2b"] + "1x100G[50G,40G,25G,10G]": ["etp2"] } }, "Ethernet8": { "index": "3,3,3,3", "lanes": "8,9,10,11", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp3"], - "1x10G[100G,50G,40G,25G]": ["etp3"], - "2x50G[25G,10G]": ["etp3a", "etp3b"] + "1x100G[50G,40G,25G,10G]": ["etp3"] } }, "Ethernet12": { "index": "4,4,4,4", "lanes": "12,13,14,15", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp4"], - "1x10G[100G,50G,40G,25G]": ["etp4"], - "2x50G[25G,10G]": ["etp4a", "etp4b"] + "1x100G[50G,40G,25G,10G]": ["etp4"] } }, "Ethernet16": { "index": "5,5,5,5", "lanes": "16,17,18,19", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp5"], - "1x10G[100G,50G,40G,25G]": ["etp5"], - "2x50G[25G,10G]": ["etp5a", "etp5b"] + "1x100G[50G,40G,25G,10G]": ["etp5"] } }, "Ethernet20": { "index": "6,6,6,6", "lanes": "20,21,22,23", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp6"], - "1x10G[100G,50G,40G,25G]": ["etp6"], - "2x50G[25G,10G]": ["etp6a", "etp6b"] + "1x100G[50G,40G,25G,10G]": ["etp6"] } }, "Ethernet24": { "index": "7,7,7,7", "lanes": "24,25,26,27", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp7"], - "1x10G[100G,50G,40G,25G]": ["etp7"], - "2x50G[25G,10G]": ["etp7a", "etp7b"] + "1x100G[50G,40G,25G,10G]": ["etp7"] } }, "Ethernet28": { "index": "8,8,8,8", "lanes": "28,29,30,31", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp8"], - "1x10G[100G,50G,40G,25G]": ["etp8"], - "2x50G[25G,10G]": ["etp8a", "etp8b"] + "1x100G[50G,40G,25G,10G]": ["etp8"] } }, "Ethernet32": { "index": "9,9,9,9", "lanes": "32,33,34,35", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp9"], - "1x10G[100G,50G,40G,25G]": ["etp9"], - "2x50G[25G,10G]": ["etp9a", "etp9b"] + "1x100G[50G,40G,25G,10G]": ["etp9"] } }, "Ethernet36": { "index": "10,10,10,10", "lanes": "36,37,38,39", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp10"], - "1x10G[100G,50G,40G,25G]": ["etp10"], - "2x50G[25G,10G]": ["etp10a", "etp10b"] + "1x100G[50G,40G,25G,10G]": ["etp10"] } }, "Ethernet40": { "index": "11,11,11,11", "lanes": "40,41,42,43", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp11"], - "1x10G[100G,50G,40G,25G]": ["etp11"], - "2x50G[25G,10G]": ["etp11a", "etp11b"] + "1x100G[50G,40G,25G,10G]": ["etp11"] } }, "Ethernet44": { "index": "12,12,12,12", "lanes": "44,45,46,47", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp12"], - "1x10G[100G,50G,40G,25G]": ["etp12"], - "2x50G[25G,10G]": ["etp12a", "etp12b"] + "1x100G[50G,40G,25G,10G]": ["etp12"] } }, "Ethernet48": { "index": "13,13,13,13", "lanes": "48,49,50,51", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp13"], - "1x10G[100G,50G,40G,25G]": ["etp13"], - "2x50G[25G,10G]": ["etp13a", "etp13b"] + "1x100G[50G,40G,25G,10G]": ["etp13"] } }, "Ethernet52": { "index": "14,14,14,14", "lanes": "52,53,54,55", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp14"], - "1x10G[100G,50G,40G,25G]": ["etp14"], - "2x50G[25G,10G]": ["etp14a", "etp14b"] + "1x100G[50G,40G,25G,10G]": ["etp14"] } }, "Ethernet56": { "index": "15,15,15,15", "lanes": "56,57,58,59", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp15"], - "1x10G[100G,50G,40G,25G]": ["etp15"], - "2x50G[25G,10G]": ["etp15a", "etp15b"] + "1x100G[50G,40G,25G,10G]": ["etp15"] } }, "Ethernet60": { "index": "16,16,16,16", "lanes": "60,61,62,63", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp16"], - "1x10G[100G,50G,40G,25G]": ["etp16"], - "2x50G[25G,10G]": ["etp16a", "etp16b"] + "1x100G[50G,40G,25G,10G]": ["etp16"] } }, "Ethernet64": { "index": "17,17,17,17", "lanes": "64,65,66,67", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp17"], - "1x10G[100G,50G,40G,25G]": ["etp17"], - "2x50G[25G,10G]": ["etp17a", "etp17b"] + "1x100G[50G,40G,25G,10G]": ["etp17"] } }, "Ethernet68": { "index": "18,18,18,18", "lanes": "68,69,70,71", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp18"], - "1x10G[100G,50G,40G,25G]": ["etp18"], - "2x50G[25G,10G]": ["etp18a", "etp18b"] + "1x100G[50G,40G,25G,10G]": ["etp18"] } }, "Ethernet72": { "index": "19,19,19,19", "lanes": "72,73,74,75", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp19"], - "1x10G[100G,50G,40G,25G]": ["etp19"], - "2x50G[25G,10G]": ["etp19a", "etp19b"] + "1x100G[50G,40G,25G,10G]": ["etp19"] } }, "Ethernet76": { "index": "20,20,20,20", "lanes": "76,77,78,79", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp20"], - "1x10G[100G,50G,40G,25G]": ["etp20"], - "2x50G[25G,10G]": ["etp20a", "etp20b"] + "1x100G[50G,40G,25G,10G]": ["etp20"] } }, "Ethernet80": { "index": "21,21,21,21", "lanes": "80,81,82,83", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp21"], - "1x10G[100G,50G,40G,25G]": ["etp21"], - "2x50G[25G,10G]": ["etp21a", "etp21b"] + "1x100G[50G,40G,25G,10G]": ["etp21"] } }, "Ethernet84": { "index": "22,22,22,22", "lanes": "84,85,86,87", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp22"], - "1x10G[100G,50G,40G,25G]": ["etp22"], - "2x50G[25G,10G]": ["etp22a", "etp22b"] + "1x100G[50G,40G,25G,10G]": ["etp22"] } }, "Ethernet88": { "index": "23,23,23,23", "lanes": "88,89,90,91", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp23"], - "1x10G[100G,50G,40G,25G]": ["etp23"], - "2x50G[25G,10G]": ["etp23a", "etp23b"] + "1x100G[50G,40G,25G,10G]": ["etp23"] } }, "Ethernet92": { "index": "24,24,24,24", "lanes": "92,93,94,95", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp24"], - "1x10G[100G,50G,40G,25G]": ["etp24"], - "2x50G[25G,10G]": ["etp24a", "etp24b"] + "1x100G[50G,40G,25G,10G]": ["etp24"] } }, "Ethernet96": { "index": "25,25,25,25", "lanes": "96,97,98,99", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp25"], - "1x10G[100G,50G,40G,25G]": ["etp25"], - "2x50G[25G,10G]": ["etp25a", "etp25b"] + "1x100G[50G,40G,25G,10G]": ["etp25"] } }, "Ethernet100": { "index": "26,26,26,26", "lanes": "100,101,102,103", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp26"], - "1x10G[100G,50G,40G,25G]": ["etp26"], - "2x50G[25G,10G]": ["etp26a", "etp26b"] + "1x100G[50G,40G,25G,10G]": ["etp26"] } }, "Ethernet104": { "index": "27,27,27,27", "lanes": "104,105,106,107", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp27"], - "1x10G[100G,50G,40G,25G]": ["etp27"], - "2x50G[25G,10G]": ["etp27a", "etp27b"] + "1x100G[50G,40G,25G,10G]": ["etp27"] } }, "Ethernet108": { "index": "28,28,28,28", "lanes": "108,109,110,111", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp28"], - "1x10G[100G,50G,40G,25G]": ["etp28"], - "2x50G[25G,10G]": ["etp28a", "etp28b"] + "1x100G[50G,40G,25G,10G]": ["etp28"] } }, "Ethernet112": { "index": "29,29,29,29", "lanes": "112,113,114,115", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp29"], - "1x10G[100G,50G,40G,25G]": ["etp29"], - "2x50G[25G,10G]": ["etp29a", "etp29b"] + "1x100G[50G,40G,25G,10G]": ["etp29"] } }, "Ethernet116": { "index": "30,30,30,30", "lanes": "116,117,118,119", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp30"], - "1x10G[100G,50G,40G,25G]": ["etp30"], - "2x50G[25G,10G]": ["etp30a", "etp30b"] + "1x100G[50G,40G,25G,10G]": ["etp30"] } }, "Ethernet120": { "index": "31,31,31,31", "lanes": "120,121,122,123", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp31"], - "1x10G[100G,50G,40G,25G]": ["etp31"], - "2x50G[25G,10G]": ["etp31a", "etp31b"] + "1x100G[50G,40G,25G,10G]": ["etp31"] } }, "Ethernet124": { "index": "32,32,32,32", "lanes": "124,125,126,127", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp32"], - "1x10G[100G,50G,40G,25G]": ["etp32"], - "2x50G[25G,10G]": ["etp32a", "etp32b"] + "1x100G[50G,40G,25G,10G]": ["etp32"] } }, "Ethernet128": { "index": "33,33,33,33", "lanes": "128,129,130,131", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp33"], - "1x10G[100G,50G,40G,25G]": ["etp33"], - "2x50G[25G,10G]": ["etp33a", "etp33b"] + "1x100G[50G,40G,25G,10G]": ["etp33"] } }, "Ethernet132": { "index": "34,34,34,34", "lanes": "132,133,134,135", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp34"], - "1x10G[100G,50G,40G,25G]": ["etp34"], - "2x50G[25G,10G]": ["etp34a", "etp34b"] + "1x100G[50G,40G,25G,10G]": ["etp34"] } }, "Ethernet136": { "index": "35,35,35,35", "lanes": "136,137,138,139", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp35"], - "1x10G[100G,50G,40G,25G]": ["etp35"], - "2x50G[25G,10G]": ["etp35a", "etp35b"] + "1x100G[50G,40G,25G,10G]": ["etp35"] } }, "Ethernet140": { "index": "36,36,36,36", "lanes": "140,141,142,143", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp36"], - "1x10G[100G,50G,40G,25G]": ["etp36"], - "2x50G[25G,10G]": ["etp36a", "etp36b"] + "1x100G[50G,40G,25G,10G]": ["etp36"] } }, "Ethernet144": { "index": "37,37,37,37", "lanes": "144,145,146,147", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp37"], - "1x10G[100G,50G,40G,25G]": ["etp37"], - "2x50G[25G,10G]": ["etp37a", "etp37b"] + "1x100G[50G,40G,25G,10G]": ["etp37"] } }, "Ethernet148": { "index": "38,38,38,38", "lanes": "148,149,150,151", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp38"], - "1x10G[100G,50G,40G,25G]": ["etp38"], - "2x50G[25G,10G]": ["etp38a", "etp38b"] + "1x100G[50G,40G,25G,10G]": ["etp38"] } }, "Ethernet152": { "index": "39,39,39,39", "lanes": "152,153,154,155", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp39"], - "1x10G[100G,50G,40G,25G]": ["etp39"], - "2x50G[25G,10G]": ["etp39a", "etp39b"] + "1x100G[50G,40G,25G,10G]": ["etp39"] } }, "Ethernet156": { "index": "40,40,40,40", "lanes": "156,157,158,159", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp40"], - "1x10G[100G,50G,40G,25G]": ["etp40"], - "2x50G[25G,10G]": ["etp40a", "etp40b"] + "1x100G[50G,40G,25G,10G]": ["etp40"] } }, "Ethernet160": { "index": "41,41,41,41", "lanes": "160,161,162,163", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp41"], - "1x10G[100G,50G,40G,25G]": ["etp41"], - "2x50G[25G,10G]": ["etp41a", "etp41b"] + "1x100G[50G,40G,25G,10G]": ["etp41"] } }, "Ethernet164": { "index": "42,42,42,42", "lanes": "164,165,166,167", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp42"], - "1x10G[100G,50G,40G,25G]": ["etp42"], - "2x50G[25G,10G]": ["etp42a", "etp42b"] + "1x100G[50G,40G,25G,10G]": ["etp42"] } }, "Ethernet168": { "index": "43,43,43,43", "lanes": "168,169,170,171", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp43"], - "1x10G[100G,50G,40G,25G]": ["etp43"], - "2x50G[25G,10G]": ["etp43a", "etp43b"] + "1x100G[50G,40G,25G,10G]": ["etp43"] } }, "Ethernet172": { "index": "44,44,44,44", "lanes": "172,173,174,175", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp44"], - "1x10G[100G,50G,40G,25G]": ["etp44"], - "2x50G[25G,10G]": ["etp44a", "etp44b"] + "1x100G[50G,40G,25G,10G]": ["etp44"] } }, "Ethernet176": { "index": "45,45,45,45", "lanes": "176,177,178,179", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp45"], - "1x10G[100G,50G,40G,25G]": ["etp45"], - "2x50G[25G,10G]": ["etp45a", "etp45b"] + "1x100G[50G,40G,25G,10G]": ["etp45"] } }, "Ethernet180": { "index": "46,46,46,46", "lanes": "180,181,182,183", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp46"], - "1x10G[100G,50G,40G,25G]": ["etp46"], - "2x50G[25G,10G]": ["etp46a", "etp46b"] + "1x100G[50G,40G,25G,10G]": ["etp46"] } }, "Ethernet184": { "index": "47,47,47,47", "lanes": "184,185,186,187", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp47"], - "1x10G[100G,50G,40G,25G]": ["etp47"], - "2x50G[25G,10G]": ["etp47a", "etp47b"] + "1x100G[50G,40G,25G,10G]": ["etp47"] } }, "Ethernet188": { "index": "48,48,48,48", "lanes": "188,189,190,191", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp48"], - "1x10G[100G,50G,40G,25G]": ["etp48"], - "2x50G[25G,10G]": ["etp48a", "etp48b"] + "1x100G[50G,40G,25G,10G]": ["etp48"] } }, "Ethernet192": { "index": "49,49,49,49", "lanes": "192,193,194,195", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp49"], - "1x10G[100G,50G,40G,25G]": ["etp49"], - "2x50G[25G,10G]": ["etp49a", "etp49b"] + "1x100G[50G,40G,25G,10G]": ["etp49"] } }, "Ethernet196": { "index": "50,50,50,50", "lanes": "196,197,198,199", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp50"], - "1x10G[100G,50G,40G,25G]": ["etp50"], - "2x50G[25G,10G]": ["etp50a", "etp50b"] + "1x100G[50G,40G,25G,10G]": ["etp50"] } }, "Ethernet200": { "index": "51,51,51,51", "lanes": "200,201,202,203", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp51"], - "1x10G[100G,50G,40G,25G]": ["etp51"], - "2x50G[25G,10G]": ["etp51a", "etp51b"] + "1x100G[50G,40G,25G,10G]": ["etp51"] } }, "Ethernet204": { "index": "52,52,52,52", "lanes": "204,205,206,207", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp52"], - "1x10G[100G,50G,40G,25G]": ["etp52"], - "2x50G[25G,10G]": ["etp52a", "etp52b"] + "1x100G[50G,40G,25G,10G]": ["etp52"] } }, "Ethernet208": { "index": "53,53,53,53", "lanes": "208,209,210,211", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp53"], - "1x10G[100G,50G,40G,25G]": ["etp53"], - "2x50G[25G,10G]": ["etp53a", "etp53b"] + "1x100G[50G,40G,25G,10G]": ["etp53"] } }, "Ethernet212": { "index": "54,54,54,54", "lanes": "212,213,214,215", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp54"], - "1x10G[100G,50G,40G,25G]": ["etp54"], - "2x50G[25G,10G]": ["etp54a", "etp54b"] + "1x100G[50G,40G,25G,10G]": ["etp54"] } }, "Ethernet216": { "index": "55,55,55,55", "lanes": "216,217,218,219", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp55"], - "1x10G[100G,50G,40G,25G]": ["etp55"], - "2x50G[25G,10G]": ["etp55a", "etp55b"] + "1x100G[50G,40G,25G,10G]": ["etp55"] } }, "Ethernet220": { "index": "56,56,56,56", "lanes": "220,221,222,223", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp56"], - "1x10G[100G,50G,40G,25G]": ["etp56"], - "2x50G[25G,10G]": ["etp56a", "etp56b"] + "1x100G[50G,40G,25G,10G]": ["etp56"] } }, "Ethernet224": { "index": "57,57,57,57", "lanes": "224,225,226,227", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp57"], - "1x10G[100G,50G,40G,25G]": ["etp57"], - "2x50G[25G,10G]": ["etp57a", "etp57b"] + "1x100G[50G,40G,25G,10G]": ["etp57"] } }, "Ethernet228": { "index": "58,58,58,58", "lanes": "228,229,230,231", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp58"], - "1x10G[100G,50G,40G,25G]": ["etp58"], - "2x50G[25G,10G]": ["etp58a", "etp58b"] + "1x100G[50G,40G,25G,10G]": ["etp58"] } }, "Ethernet232": { "index": "59,59,59,59", "lanes": "232,233,234,235", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp59"], - "1x10G[100G,50G,40G,25G]": ["etp59"], - "2x50G[25G,10G]": ["etp59a", "etp59b"] + "1x100G[50G,40G,25G,10G]": ["etp59"] } }, "Ethernet236": { "index": "60,60,60,60", "lanes": "236,237,238,239", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp60"], - "1x10G[100G,50G,40G,25G]": ["etp60"], - "2x50G[25G,10G]": ["etp60a", "etp60b"] + "1x100G[50G,40G,25G,10G]": ["etp60"] } }, "Ethernet240": { "index": "61,61,61,61", "lanes": "240,241,242,243", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp61"], - "1x10G[100G,50G,40G,25G]": ["etp61"], - "2x50G[25G,10G]": ["etp61a", "etp61b"] + "1x100G[50G,40G,25G,10G]": ["etp61"] } }, "Ethernet244": { "index": "62,62,62,62", "lanes": "244,245,246,247", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp62"], - "1x10G[100G,50G,40G,25G]": ["etp62"], - "2x50G[25G,10G]": ["etp62a", "etp62b"] + "1x100G[50G,40G,25G,10G]": ["etp62"] } }, "Ethernet248": { "index": "63,63,63,63", "lanes": "248,249,250,251", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp63"], - "1x10G[100G,50G,40G,25G]": ["etp63"], - "2x50G[25G,10G]": ["etp63a", "etp63b"] + "1x100G[50G,40G,25G,10G]": ["etp63"] } }, "Ethernet252": { "index": "64,64,64,64", "lanes": "252,253,254,255", "breakout_modes": { - "1x100G[50G,40G,25G,10G]": ["etp64"], - "1x10G[100G,50G,40G,25G]": ["etp64"], - "2x50G[25G,10G]": ["etp64a", "etp64b"] + "1x100G[50G,40G,25G,10G]": ["etp64"] } } } diff --git a/device/mellanox/x86_64-mlnx_msn3800-r0/sensors.conf b/device/mellanox/x86_64-mlnx_msn3800-r0/sensors.conf index 7ba5f9c8c050..0b1cfc75548a 100644 --- a/device/mellanox/x86_64-mlnx_msn3800-r0/sensors.conf +++ b/device/mellanox/x86_64-mlnx_msn3800-r0/sensors.conf @@ -106,6 +106,9 @@ bus "i2c-4" "i2c-1-mux (chan_id 3)" label power2 "PSU-2 12V Rail Pwr (out)" label curr1 "PSU-2 220V Rail Curr (in)" label curr2 "PSU-2 12V Rail Curr (out)" + set in3_lcrit in3_crit * 0.662 + set in3_min in3_crit * 0.745 + set in3_max in3_crit * 0.952 chip "dps460-i2c-*-59" label in1 "PSU-1 220V Rail (in)" ignore in2 @@ -120,6 +123,9 @@ bus "i2c-4" "i2c-1-mux (chan_id 3)" label power2 "PSU-1 12V Rail Pwr (out)" label curr1 "PSU-1 220V Rail Curr (in)" label curr2 "PSU-1 12V Rail Curr (out)" + set in3_lcrit in3_crit * 0.662 + set in3_min in3_crit * 0.745 + set in3_max in3_crit * 0.952 # Chassis fans chip "mlxreg_fan-isa-*" diff --git a/device/mellanox/x86_64-mlnx_msn4410-r0/platform_components.json b/device/mellanox/x86_64-mlnx_msn4410-r0/platform_components.json index bb1afce80161..dac126d0b697 100644 --- a/device/mellanox/x86_64-mlnx_msn4410-r0/platform_components.json +++ b/device/mellanox/x86_64-mlnx_msn4410-r0/platform_components.json @@ -1,6 +1,6 @@ { "chassis": { - "x86_64-mlnx_msn4410-r0": { + "MSN4410": { "component": { "ONIE": { }, "SSD": { }, diff --git a/device/mellanox/x86_64-mlnx_msn4600-r0/platform.json b/device/mellanox/x86_64-mlnx_msn4600-r0/platform.json index a16b210d90ed..e4f4845dfe3f 100644 --- a/device/mellanox/x86_64-mlnx_msn4600-r0/platform.json +++ b/device/mellanox/x86_64-mlnx_msn4600-r0/platform.json @@ -626,8 +626,7 @@ "lanes": "0,1,2,3", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp1"], - "2x100G[50G,25G,10G,1G]": ["etp1a", "etp1b"], - "4x50G[25G,10G,1G]": ["etp1a", "etp1b", "etp1c", "etp1d"] + "2x100G[50G,25G,10G,1G]": ["etp1a", "etp1b"] } }, "Ethernet4": { @@ -635,8 +634,7 @@ "lanes": "8,9,10,11", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp2"], - "2x100G[50G,25G,10G,1G]": ["etp2a", "etp2b"], - "4x50G[25G,10G,1G]": ["etp2a", "etp2b", "etp2c", "etp2d"] + "2x100G[50G,25G,10G,1G]": ["etp2a", "etp2b"] } }, "Ethernet8": { @@ -644,8 +642,7 @@ "lanes": "16,17,18,19", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp3"], - "2x100G[50G,25G,10G,1G]": ["etp3a", "etp3b"], - "4x50G[25G,10G,1G]": ["etp3a", "etp3b", "etp3c", "etp3d"] + "2x100G[50G,25G,10G,1G]": ["etp3a", "etp3b"] } }, "Ethernet12": { @@ -653,8 +650,7 @@ "lanes": "24,25,26,27", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp4"], - "2x100G[50G,25G,10G,1G]": ["etp4a", "etp4b"], - "4x50G[25G,10G,1G]": ["etp4a", "etp4b", "etp4c", "etp4d"] + "2x100G[50G,25G,10G,1G]": ["etp4a", "etp4b"] } }, "Ethernet16": { @@ -662,8 +658,7 @@ "lanes": "32,33,34,35", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp5"], - "2x100G[50G,25G,10G,1G]": ["etp5a", "etp5b"], - "4x50G[25G,10G,1G]": ["etp5a", "etp5b", "etp5c", "etp5d"] + "2x100G[50G,25G,10G,1G]": ["etp5a", "etp5b"] } }, "Ethernet20": { @@ -671,8 +666,7 @@ "lanes": "40,41,42,43", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp6"], - "2x100G[50G,25G,10G,1G]": ["etp6a", "etp6b"], - "4x50G[25G,10G,1G]": ["etp6a", "etp6b", "etp6c", "etp6d"] + "2x100G[50G,25G,10G,1G]": ["etp6a", "etp6b"] } }, "Ethernet24": { @@ -680,8 +674,7 @@ "lanes": "48,49,50,51", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp7"], - "2x100G[50G,25G,10G,1G]": ["etp7a", "etp7b"], - "4x50G[25G,10G,1G]": ["etp7a", "etp7b", "etp7c", "etp7d"] + "2x100G[50G,25G,10G,1G]": ["etp7a", "etp7b"] } }, "Ethernet28": { @@ -689,8 +682,7 @@ "lanes": "56,57,58,59", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp8"], - "2x100G[50G,25G,10G,1G]": ["etp8a", "etp8b"], - "4x50G[25G,10G,1G]": ["etp8a", "etp8b", "etp8c", "etp8d"] + "2x100G[50G,25G,10G,1G]": ["etp8a", "etp8b"] } }, "Ethernet32": { @@ -698,8 +690,7 @@ "lanes": "64,65,66,67", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp9"], - "2x100G[50G,25G,10G,1G]": ["etp9a", "etp9b"], - "4x50G[25G,10G,1G]": ["etp9a", "etp9b", "etp9c", "etp9d"] + "2x100G[50G,25G,10G,1G]": ["etp9a", "etp9b"] } }, "Ethernet36": { @@ -707,8 +698,7 @@ "lanes": "72,73,74,75", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp10"], - "2x100G[50G,25G,10G,1G]": ["etp10a", "etp10b"], - "4x50G[25G,10G,1G]": ["etp10a", "etp10b", "etp10c", "etp10d"] + "2x100G[50G,25G,10G,1G]": ["etp10a", "etp10b"] } }, "Ethernet40": { @@ -716,8 +706,7 @@ "lanes": "80,81,82,83", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp11"], - "2x100G[50G,25G,10G,1G]": ["etp11a", "etp11b"], - "4x50G[25G,10G,1G]": ["etp11a", "etp11b", "etp11c", "etp11d"] + "2x100G[50G,25G,10G,1G]": ["etp11a", "etp11b"] } }, "Ethernet44": { @@ -725,8 +714,7 @@ "lanes": "88,89,90,91", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp12"], - "2x100G[50G,25G,10G,1G]": ["etp12a", "etp12b"], - "4x50G[25G,10G,1G]": ["etp12a", "etp12b", "etp12c", "etp12d"] + "2x100G[50G,25G,10G,1G]": ["etp12a", "etp12b"] } }, "Ethernet48": { @@ -734,8 +722,7 @@ "lanes": "96,97,98,99", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp13"], - "2x100G[50G,25G,10G,1G]": ["etp13a", "etp13b"], - "4x50G[25G,10G,1G]": ["etp13a", "etp13b", "etp13c", "etp13d"] + "2x100G[50G,25G,10G,1G]": ["etp13a", "etp13b"] } }, "Ethernet52": { @@ -743,8 +730,7 @@ "lanes": "104,105,106,107", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp14"], - "2x100G[50G,25G,10G,1G]": ["etp14a", "etp14b"], - "4x50G[25G,10G,1G]": ["etp14a", "etp14b", "etp14c", "etp14d"] + "2x100G[50G,25G,10G,1G]": ["etp14a", "etp14b"] } }, "Ethernet56": { @@ -752,8 +738,7 @@ "lanes": "112,113,114,115", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp15"], - "2x100G[50G,25G,10G,1G]": ["etp15a", "etp15b"], - "4x50G[25G,10G,1G]": ["etp15a", "etp15b", "etp15c", "etp15d"] + "2x100G[50G,25G,10G,1G]": ["etp15a", "etp15b"] } }, "Ethernet60": { @@ -761,8 +746,7 @@ "lanes": "120,121,122,123", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp16"], - "2x100G[50G,25G,10G,1G]": ["etp16a", "etp16b"], - "4x50G[25G,10G,1G]": ["etp16a", "etp16b", "etp16c", "etp16d"] + "2x100G[50G,25G,10G,1G]": ["etp16a", "etp16b"] } }, "Ethernet64": { @@ -770,8 +754,7 @@ "lanes": "128,129,130,131", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp17"], - "2x100G[50G,25G,10G,1G]": ["etp17a", "etp17b"], - "4x50G[25G,10G,1G]": ["etp17a", "etp17b", "etp17c", "etp17d"] + "2x100G[50G,25G,10G,1G]": ["etp17a", "etp17b"] } }, "Ethernet68": { @@ -779,8 +762,7 @@ "lanes": "136,137,138,139", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp18"], - "2x100G[50G,25G,10G,1G]": ["etp18a", "etp18b"], - "4x50G[25G,10G,1G]": ["etp18a", "etp18b", "etp18c", "etp18d"] + "2x100G[50G,25G,10G,1G]": ["etp18a", "etp18b"] } }, "Ethernet72": { @@ -788,8 +770,7 @@ "lanes": "144,145,146,147", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp19"], - "2x100G[50G,25G,10G,1G]": ["etp19a", "etp19b"], - "4x50G[25G,10G,1G]": ["etp19a", "etp19b", "etp19c", "etp19d"] + "2x100G[50G,25G,10G,1G]": ["etp19a", "etp19b"] } }, "Ethernet76": { @@ -797,8 +778,7 @@ "lanes": "152,153,154,155", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp20"], - "2x100G[50G,25G,10G,1G]": ["etp20a", "etp20b"], - "4x50G[25G,10G,1G]": ["etp20a", "etp20b", "etp20c", "etp20d"] + "2x100G[50G,25G,10G,1G]": ["etp20a", "etp20b"] } }, "Ethernet80": { @@ -806,8 +786,7 @@ "lanes": "160,161,162,163", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp21"], - "2x100G[50G,25G,10G,1G]": ["etp21a", "etp21b"], - "4x50G[25G,10G,1G]": ["etp21a", "etp21b", "etp21c", "etp21d"] + "2x100G[50G,25G,10G,1G]": ["etp21a", "etp21b"] } }, "Ethernet84": { @@ -815,8 +794,7 @@ "lanes": "168,169,170,171", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp22"], - "2x100G[50G,25G,10G,1G]": ["etp22a", "etp22b"], - "4x50G[25G,10G,1G]": ["etp22a", "etp22b", "etp22c", "etp22d"] + "2x100G[50G,25G,10G,1G]": ["etp22a", "etp22b"] } }, "Ethernet88": { @@ -824,8 +802,7 @@ "lanes": "176,177,178,179", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp23"], - "2x100G[50G,25G,10G,1G]": ["etp23a", "etp23b"], - "4x50G[25G,10G,1G]": ["etp23a", "etp23b", "etp23c", "etp23d"] + "2x100G[50G,25G,10G,1G]": ["etp23a", "etp23b"] } }, "Ethernet92": { @@ -833,8 +810,7 @@ "lanes": "184,185,186,187", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp24"], - "2x100G[50G,25G,10G,1G]": ["etp24a", "etp24b"], - "4x50G[25G,10G,1G]": ["etp24a", "etp24b", "etp24c", "etp24d"] + "2x100G[50G,25G,10G,1G]": ["etp24a", "etp24b"] } }, "Ethernet96": { @@ -842,8 +818,7 @@ "lanes": "192,193,194,195", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp25"], - "2x100G[50G,25G,10G,1G]": ["etp25a", "etp25b"], - "4x50G[25G,10G,1G]": ["etp25a", "etp25b", "etp25c", "etp25d"] + "2x100G[50G,25G,10G,1G]": ["etp25a", "etp25b"] } }, "Ethernet100": { @@ -851,8 +826,7 @@ "lanes": "200,201,202,203", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp26"], - "2x100G[50G,25G,10G,1G]": ["etp26a", "etp26b"], - "4x50G[25G,10G,1G]": ["etp26a", "etp26b", "etp26c", "etp26d"] + "2x100G[50G,25G,10G,1G]": ["etp26a", "etp26b"] } }, "Ethernet104": { @@ -860,8 +834,7 @@ "lanes": "208,209,210,211", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp27"], - "2x100G[50G,25G,10G,1G]": ["etp27a", "etp27b"], - "4x50G[25G,10G,1G]": ["etp27a", "etp27b", "etp27c", "etp27d"] + "2x100G[50G,25G,10G,1G]": ["etp27a", "etp27b"] } }, "Ethernet108": { @@ -869,8 +842,7 @@ "lanes": "216,217,218,219", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp28"], - "2x100G[50G,25G,10G,1G]": ["etp28a", "etp28b"], - "4x50G[25G,10G,1G]": ["etp28a", "etp28b", "etp28c", "etp28d"] + "2x100G[50G,25G,10G,1G]": ["etp28a", "etp28b"] } }, "Ethernet112": { @@ -878,16 +850,14 @@ "lanes": "224,225,226,227", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp29"], - "2x100G[50G,25G,10G,1G]": ["etp29a", "etp29b"], - "4x50G[25G,10G,1G]": ["etp29a", "etp29b", "etp29c", "etp29d"] + "2x100G[50G,25G,10G,1G]": ["etp29a", "etp29b"] } }, "Ethernet116": { "index": "30,30,30,30", "lanes": "232,233,234,235", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp30"], - "2x100G[50G,25G,10G,1G]": ["etp30a", "etp30b"], - "4x50G[25G,10G,1G]": ["etp30a", "etp30b", "etp30c", "etp30d"] + "2x100G[50G,25G,10G,1G]": ["etp30a", "etp30b"] } }, "Ethernet120": { @@ -895,8 +865,7 @@ "lanes": "240,241,242,243", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp31"], - "2x100G[50G,25G,10G,1G]": ["etp31a", "etp31b"], - "4x50G[25G,10G,1G]": ["etp31a", "etp31b", "etp31c", "etp31d"] + "2x100G[50G,25G,10G,1G]": ["etp31a", "etp31b"] } }, "Ethernet124": { @@ -904,8 +873,7 @@ "lanes": "248,249,250,251", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp32"], - "2x100G[50G,25G,10G,1G]": ["etp32a", "etp32b"], - "4x50G[25G,10G,1G]": ["etp32a", "etp32b", "etp32c", "etp32d"] + "2x100G[50G,25G,10G,1G]": ["etp32a", "etp32b"] } }, "Ethernet128": { @@ -913,8 +881,7 @@ "lanes": "256,257,258,259", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp33"], - "2x100G[50G,25G,10G,1G]": ["etp33a", "etp33b"], - "4x50G[25G,10G,1G]": ["etp33a", "etp33b", "etp33c", "etp33d"] + "2x100G[50G,25G,10G,1G]": ["etp33a", "etp33b"] } }, "Ethernet132": { @@ -922,8 +889,7 @@ "lanes": "264,265,266,267", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp34"], - "2x100G[50G,25G,10G,1G]": ["etp34a", "etp34b"], - "4x50G[25G,10G,1G]": ["etp34a", "etp34b", "etp34c", "etp34d"] + "2x100G[50G,25G,10G,1G]": ["etp34a", "etp34b"] } }, "Ethernet136": { @@ -931,8 +897,7 @@ "lanes": "272,273,274,275", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp35"], - "2x100G[50G,25G,10G,1G]": ["etp35a", "etp35b"], - "4x50G[25G,10G,1G]": ["etp35a", "etp35b", "etp35c", "etp35d"] + "2x100G[50G,25G,10G,1G]": ["etp35a", "etp35b"] } }, "Ethernet140": { @@ -940,8 +905,7 @@ "lanes": "280,281,282,283", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp36"], - "2x100G[50G,25G,10G,1G]": ["etp36a", "etp36b"], - "4x50G[25G,10G,1G]": ["etp36a", "etp36b", "etp36c", "etp36d"] + "2x100G[50G,25G,10G,1G]": ["etp36a", "etp36b"] } }, "Ethernet144": { @@ -949,8 +913,7 @@ "lanes": "288,289,290,291", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp37"], - "2x100G[50G,25G,10G,1G]": ["etp37a", "etp37b"], - "4x50G[25G,10G,1G]": ["etp37a", "etp37b", "etp37c", "etp37d"] + "2x100G[50G,25G,10G,1G]": ["etp37a", "etp37b"] } }, "Ethernet148": { @@ -958,8 +921,7 @@ "lanes": "296,297,298,299", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp38"], - "2x100G[50G,25G,10G,1G]": ["etp38a", "etp38b"], - "4x50G[25G,10G,1G]": ["etp38a", "etp38b", "etp38c", "etp38d"] + "2x100G[50G,25G,10G,1G]": ["etp38a", "etp38b"] } }, "Ethernet152": { @@ -967,8 +929,7 @@ "lanes": "304,305,306,307", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp39"], - "2x100G[50G,25G,10G,1G]": ["etp39a", "etp39b"], - "4x50G[25G,10G,1G]": ["etp39a", "etp39b", "etp39c", "etp39d"] + "2x100G[50G,25G,10G,1G]": ["etp39a", "etp39b"] } }, "Ethernet156": { @@ -976,8 +937,7 @@ "lanes": "312,313,314,315", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp40"], - "2x100G[50G,25G,10G,1G]": ["etp40a", "etp40b"], - "4x50G[25G,10G,1G]": ["etp40a", "etp40b", "etp40c", "etp40d"] + "2x100G[50G,25G,10G,1G]": ["etp40a", "etp40b"] } }, "Ethernet160": { @@ -985,8 +945,7 @@ "lanes": "320,321,322,323", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp41"], - "2x100G[50G,25G,10G,1G]": ["etp41a", "etp41b"], - "4x50G[25G,10G,1G]": ["etp41a", "etp41b", "etp41c", "etp41d"] + "2x100G[50G,25G,10G,1G]": ["etp41a", "etp41b"] } }, "Ethernet164": { @@ -994,8 +953,7 @@ "lanes": "328,329,330,331", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp42"], - "2x100G[50G,25G,10G,1G]": ["etp42a", "etp42b"], - "4x50G[25G,10G,1G]": ["etp42a", "etp42b", "etp42c", "etp42d"] + "2x100G[50G,25G,10G,1G]": ["etp42a", "etp42b"] } }, "Ethernet168": { @@ -1003,8 +961,7 @@ "lanes": "336,337,338,339", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp43"], - "2x100G[50G,25G,10G,1G]": ["etp43a", "etp43b"], - "4x50G[25G,10G,1G]": ["etp43a", "etp43b", "etp43c", "etp43d"] + "2x100G[50G,25G,10G,1G]": ["etp43a", "etp43b"] } }, "Ethernet172": { @@ -1012,8 +969,7 @@ "lanes": "344,345,346,347", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp44"], - "2x100G[50G,25G,10G,1G]": ["etp44a", "etp44b"], - "4x50G[25G,10G,1G]": ["etp44a", "etp44b", "etp44c", "etp44d"] + "2x100G[50G,25G,10G,1G]": ["etp44a", "etp44b"] } }, "Ethernet176": { @@ -1021,8 +977,7 @@ "lanes": "352,353,354,355", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp45"], - "2x100G[50G,25G,10G,1G]": ["etp45a", "etp45b"], - "4x50G[25G,10G,1G]": ["etp45a", "etp45b", "etp45c", "etp45d"] + "2x100G[50G,25G,10G,1G]": ["etp45a", "etp45b"] } }, "Ethernet180": { @@ -1030,8 +985,7 @@ "lanes": "360,361,362,363", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp46"], - "2x100G[50G,25G,10G,1G]": ["etp46a", "etp46b"], - "4x50G[25G,10G,1G]": ["etp46a", "etp46b", "etp46c", "etp46d"] + "2x100G[50G,25G,10G,1G]": ["etp46a", "etp46b"] } }, "Ethernet184": { @@ -1039,8 +993,7 @@ "lanes": "368,369,370,371", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp47"], - "2x100G[50G,25G,10G,1G]": ["etp47a", "etp47b"], - "4x50G[25G,10G,1G]": ["etp47a", "etp47b", "etp47c", "etp47d"] + "2x100G[50G,25G,10G,1G]": ["etp47a", "etp47b"] } }, "Ethernet188": { @@ -1048,8 +1001,7 @@ "lanes": "376,377,378,379", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp48"], - "2x100G[50G,25G,10G,1G]": ["etp48a", "etp48b"], - "4x50G[25G,10G,1G]": ["etp48a", "etp48b", "etp48c", "etp48d"] + "2x100G[50G,25G,10G,1G]": ["etp48a", "etp48b"] } }, "Ethernet192": { @@ -1057,8 +1009,7 @@ "lanes": "384,385,386,387", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp49"], - "2x100G[50G,25G,10G,1G]": ["etp49a", "etp49b"], - "4x50G[25G,10G,1G]": ["etp49a", "etp49b", "etp49c", "etp49d"] + "2x100G[50G,25G,10G,1G]": ["etp49a", "etp49b"] } }, "Ethernet196": { @@ -1066,8 +1017,7 @@ "lanes": "392,393,394,395", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp50"], - "2x100G[50G,25G,10G,1G]": ["etp50a", "etp50b"], - "4x50G[25G,10G,1G]": ["etp50a", "etp50b", "etp50c", "etp50d"] + "2x100G[50G,25G,10G,1G]": ["etp50a", "etp50b"] } }, "Ethernet200": { @@ -1075,8 +1025,7 @@ "lanes": "400,401,402,403", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp51"], - "2x100G[50G,25G,10G,1G]": ["etp51a", "etp51b"], - "4x50G[25G,10G,1G]": ["etp51a", "etp51b", "etp51c", "etp51d"] + "2x100G[50G,25G,10G,1G]": ["etp51a", "etp51b"] } }, "Ethernet204": { @@ -1084,8 +1033,7 @@ "lanes": "408,409,410,411", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp52"], - "2x100G[50G,25G,10G,1G]": ["etp52a", "etp52b"], - "4x50G[25G,10G,1G]": ["etp52a", "etp52b", "etp52c", "etp52d"] + "2x100G[50G,25G,10G,1G]": ["etp52a", "etp52b"] } }, "Ethernet208": { @@ -1093,8 +1041,7 @@ "lanes": "416,417,418,419", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp53"], - "2x100G[50G,25G,10G,1G]": ["etp53a", "etp53b"], - "4x50G[25G,10G,1G]": ["etp53a", "etp53b", "etp53c", "etp53d"] + "2x100G[50G,25G,10G,1G]": ["etp53a", "etp53b"] } }, "Ethernet212": { @@ -1102,8 +1049,7 @@ "lanes": "424,425,426,427", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp54"], - "2x100G[50G,25G,10G,1G]": ["etp54a", "etp54b"], - "4x50G[25G,10G,1G]": ["etp54a", "etp54b", "etp54c", "etp54d"] + "2x100G[50G,25G,10G,1G]": ["etp54a", "etp54b"] } }, "Ethernet216": { @@ -1111,8 +1057,7 @@ "lanes": "432,433,434,435", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp55"], - "2x100G[50G,25G,10G,1G]": ["etp55a", "etp55b"], - "4x50G[25G,10G,1G]": ["etp55a", "etp55b", "etp55c", "etp55d"] + "2x100G[50G,25G,10G,1G]": ["etp55a", "etp55b"] } }, "Ethernet220": { @@ -1120,8 +1065,7 @@ "lanes": "440,441,442,443", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp56"], - "2x100G[50G,25G,10G,1G]": ["etp56a", "etp56b"], - "4x50G[25G,10G,1G]": ["etp56a", "etp56b", "etp56c", "etp56d"] + "2x100G[50G,25G,10G,1G]": ["etp56a", "etp56b"] } }, "Ethernet224": { @@ -1129,8 +1073,7 @@ "lanes": "448,449,450,451", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp57"], - "2x100G[50G,25G,10G,1G]": ["etp57a", "etp57b"], - "4x50G[25G,10G,1G]": ["etp57a", "etp57b", "etp57c", "etp57d"] + "2x100G[50G,25G,10G,1G]": ["etp57a", "etp57b"] } }, "Ethernet228": { @@ -1138,8 +1081,7 @@ "lanes": "456,457,458,459", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp58"], - "2x100G[50G,25G,10G,1G]": ["etp58a", "etp58b"], - "4x50G[25G,10G,1G]": ["etp58a", "etp58b", "etp58c", "etp58d"] + "2x100G[50G,25G,10G,1G]": ["etp58a", "etp58b"] } }, "Ethernet232": { @@ -1147,8 +1089,7 @@ "lanes": "464,465,466,467", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp59"], - "2x100G[50G,25G,10G,1G]": ["etp59a", "etp59b"], - "4x50G[25G,10G,1G]": ["etp59a", "etp59b", "etp59c", "etp59d"] + "2x100G[50G,25G,10G,1G]": ["etp59a", "etp59b"] } }, "Ethernet236": { @@ -1156,8 +1097,7 @@ "lanes": "472,473,474,475", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp60"], - "2x100G[50G,25G,10G,1G]": ["etp60a", "etp60b"], - "4x50G[25G,10G,1G]": ["etp60a", "etp60b", "etp60c", "etp60d"] + "2x100G[50G,25G,10G,1G]": ["etp60a", "etp60b"] } }, "Ethernet240": { @@ -1165,8 +1105,7 @@ "lanes": "480,481,482,483", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp61"], - "2x100G[50G,25G,10G,1G]": ["etp61a", "etp61b"], - "4x50G[25G,10G,1G]": ["etp61a", "etp61b", "etp61c", "etp61d"] + "2x100G[50G,25G,10G,1G]": ["etp61a", "etp61b"] } }, "Ethernet244": { @@ -1174,8 +1113,7 @@ "lanes": "488,489,490,491", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp62"], - "2x100G[50G,25G,10G,1G]": ["etp62a", "etp62b"], - "4x50G[25G,10G,1G]": ["etp62a", "etp62b", "etp62c", "etp62d"] + "2x100G[50G,25G,10G,1G]": ["etp62a", "etp62b"] } }, "Ethernet248": { @@ -1183,8 +1121,7 @@ "lanes": "496,497,498,499", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp63"], - "2x100G[50G,25G,10G,1G]": ["etp63a", "etp63b"], - "4x50G[25G,10G,1G]": ["etp63a", "etp63b", "etp63c", "etp63d"] + "2x100G[50G,25G,10G,1G]": ["etp63a", "etp63b"] } }, "Ethernet252": { @@ -1192,8 +1129,7 @@ "lanes": "504,505,506,507", "breakout_modes": { "1x200G[100G,50G,40G,25G,10G,1G]": ["etp64"], - "2x100G[50G,25G,10G,1G]": ["etp64a", "etp64b"], - "4x50G[25G,10G,1G]": ["etp64a", "etp64b", "etp64c", "etp64d"] + "2x100G[50G,25G,10G,1G]": ["etp64a", "etp64b"] } } } diff --git a/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/sai.profile b/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/sai.profile index a9835c51dc3f..33f195e4a17f 100644 --- a/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/sai.profile +++ b/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/sai.profile @@ -1,4 +1,3 @@ SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_4600C.xml -SAI_VXLAN_SRCPORT_RANGE_ENABLE=1 SAI_DUMP_STORE_PATH=/var/log/mellanox/sdk-dumps SAI_DUMP_STORE_AMOUNT=10 diff --git a/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-D100C12S2/sai.profile b/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-D100C12S2/sai.profile index c05c9ac6a1d1..2b9929123105 100644 --- a/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-D100C12S2/sai.profile +++ b/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-D100C12S2/sai.profile @@ -1,4 +1,3 @@ -SAI_VXLAN_SRCPORT_RANGE_ENABLE=1 SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_4600c_100x50g_12x100g_2x10g.xml SAI_DUMP_STORE_PATH=/var/log/mellanox/sdk-dumps SAI_DUMP_STORE_AMOUNT=10 diff --git a/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-D48C40/sai.profile b/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-D48C40/sai.profile index 8719655c1ccc..c255886841ba 100644 --- a/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-D48C40/sai.profile +++ b/device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-D48C40/sai.profile @@ -1,4 +1,3 @@ SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_4600c_48x50g_40x100g.xml SAI_DUMP_STORE_PATH=/var/log/mellanox/sdk-dumps SAI_DUMP_STORE_AMOUNT=10 -SAI_VXLAN_SRCPORT_RANGE_ENABLE=1 diff --git a/device/mellanox/x86_64-mlnx_msn4600c-r0/platform.json b/device/mellanox/x86_64-mlnx_msn4600c-r0/platform.json index ab22b4fd18da..70c5c60a5508 100644 --- a/device/mellanox/x86_64-mlnx_msn4600c-r0/platform.json +++ b/device/mellanox/x86_64-mlnx_msn4600c-r0/platform.json @@ -95,6 +95,12 @@ { "name": "CPU Core 1 Temp" }, + { + "name": "CPU Core 2 Temp" + }, + { + "name": "CPU Core 3 Temp" + }, { "name": "CPU Pack Temp" } diff --git a/device/mellanox/x86_64-mlnx_msn4600c-r0/sensors.conf b/device/mellanox/x86_64-mlnx_msn4600c-r0/sensors.conf index 9c80350e19ad..3ff78f15023f 100644 --- a/device/mellanox/x86_64-mlnx_msn4600c-r0/sensors.conf +++ b/device/mellanox/x86_64-mlnx_msn4600c-r0/sensors.conf @@ -167,6 +167,9 @@ bus "i2c-4" "i2c-1-mux (chan_id 3)" label power2 "PSU-1(L) 12V Rail Pwr (out)" label curr1 "PSU-1(L) 220V Rail Curr (in)" label curr2 "PSU-1(L) 12V Rail Curr (out)" + set in3_lcrit in3_crit * 0.662 + set in3_min in3_crit * 0.745 + set in3_max in3_crit * 0.952 chip "dps460-i2c-*-59" label in1 "PSU-2(R) 220V Rail (in)" ignore in2 @@ -181,6 +184,9 @@ bus "i2c-4" "i2c-1-mux (chan_id 3)" label power2 "PSU-2(R) 12V Rail Pwr (out)" label curr1 "PSU-2(R) 220V Rail Curr (in)" label curr2 "PSU-2(R) 12V Rail Curr (out)" + set in3_lcrit in3_crit * 0.662 + set in3_min in3_crit * 0.745 + set in3_max in3_crit * 0.952 # Chassis fans chip "mlxreg_fan-isa-*" diff --git a/device/mellanox/x86_64-mlnx_msn4600c-r0/sensors.conf.a1 b/device/mellanox/x86_64-mlnx_msn4600c-r0/sensors.conf.a1 index 44fff272e544..a0ebc677ad56 100644 --- a/device/mellanox/x86_64-mlnx_msn4600c-r0/sensors.conf.a1 +++ b/device/mellanox/x86_64-mlnx_msn4600c-r0/sensors.conf.a1 @@ -123,6 +123,9 @@ bus "i2c-4" "i2c-1-mux (chan_id 3)" label power2 "PSU-1(L) 12V Rail Pwr (out)" label curr1 "PSU-1(L) 220V Rail Curr (in)" label curr2 "PSU-1(L) 12V Rail Curr (out)" + set in3_lcrit in3_crit * 0.662 + set in3_min in3_crit * 0.745 + set in3_max in3_crit * 0.952 chip "dps460-i2c-*-59" label in1 "PSU-2(R) 220V Rail (in)" ignore in2 @@ -137,6 +140,9 @@ bus "i2c-4" "i2c-1-mux (chan_id 3)" label power2 "PSU-2(R) 12V Rail Pwr (out)" label curr1 "PSU-2(R) 220V Rail Curr (in)" label curr2 "PSU-2(R) 12V Rail Curr (out)" + set in3_lcrit in3_crit * 0.662 + set in3_min in3_crit * 0.745 + set in3_max in3_crit * 0.952 # Chassis fans chip "mlxreg_fan-isa-*" diff --git a/device/mellanox/x86_64-nvidia_sn2201-r0/ACS-SN2201/buffers_defaults_objects.j2 b/device/mellanox/x86_64-nvidia_sn2201-r0/ACS-SN2201/buffers_defaults_objects.j2 new file mode 120000 index 000000000000..33b6704f9902 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn2201-r0/ACS-SN2201/buffers_defaults_objects.j2 @@ -0,0 +1 @@ +../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/buffers_defaults_objects.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn2201-r0/ACS-SN2201/hwsku.json b/device/mellanox/x86_64-nvidia_sn2201-r0/ACS-SN2201/hwsku.json index fcd6343ca905..435135cef434 100644 --- a/device/mellanox/x86_64-nvidia_sn2201-r0/ACS-SN2201/hwsku.json +++ b/device/mellanox/x86_64-nvidia_sn2201-r0/ACS-SN2201/hwsku.json @@ -1,148 +1,196 @@ { "interfaces": { "Ethernet0": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet1": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet2": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet3": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet4": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet5": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet6": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet7": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet8": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet9": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet10": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet11": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet12": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet13": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet14": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet15": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet16": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet17": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet18": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet19": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet20": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet21": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet22": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet23": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet24": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet25": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet26": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet27": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet28": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet29": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet30": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet31": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet32": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet33": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet34": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet35": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet36": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet37": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet38": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet39": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet40": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet41": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet42": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet43": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet44": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet45": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet46": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet47": { - "default_brkout_mode": "1x1G[100]" + "default_brkout_mode": "1x1000[100,10]", + "port_type": "RJ45" }, "Ethernet48": { "default_brkout_mode": "1x100G[50G,40G,25G,10G]" diff --git a/device/mellanox/x86_64-nvidia_sn2201-r0/default_sku b/device/mellanox/x86_64-nvidia_sn2201-r0/default_sku index 46029c3e83e3..2ef2c5dd0d32 100644 --- a/device/mellanox/x86_64-nvidia_sn2201-r0/default_sku +++ b/device/mellanox/x86_64-nvidia_sn2201-r0/default_sku @@ -1 +1 @@ -ACS-MSN2201 t1 +ACS-SN2201 t1 diff --git a/device/mellanox/x86_64-nvidia_sn2201-r0/pcie.yaml b/device/mellanox/x86_64-nvidia_sn2201-r0/pcie.yaml index 49de6829aa70..c4fb7293cc10 100644 --- a/device/mellanox/x86_64-nvidia_sn2201-r0/pcie.yaml +++ b/device/mellanox/x86_64-nvidia_sn2201-r0/pcie.yaml @@ -1,5 +1,5 @@ ## -## Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. +## Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. ## Apache-2.0 ## ## Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,107 +19,114 @@ dev: '00' fn: '0' id: '1980' - name: 'Host bridge: Intel Corporation Device (rev 11)' + name: 'Host bridge: Intel Corporation Atom Processor C3000 Series System Agent (rev + 11)' - bus: '00' dev: '04' fn: '0' - id: '19a1' - name: 'Host bridge: Intel Corporation Device (rev 11)' + id: 19a1 + name: 'Host bridge: Intel Corporation Atom Processor C3000 Series Error Registers + (rev 11)' - bus: '00' dev: '05' fn: '0' - id: '19a2' - name: 'Generic system peripheral: Intel Corporation Device (rev 11)' + id: 19a2 + name: 'Generic system peripheral [0807]: Intel Corporation Atom Processor C3000 + Series Root Complex Event Collector (rev 11)' - bus: '00' dev: '06' fn: '0' - id: '19a3' - name: 'PCI bridge: Intel Corporation Device (rev 11)' + id: 19a3 + name: 'PCI bridge: Intel Corporation Atom Processor C3000 Series Integrated QAT + Root Port (rev 11)' - bus: '00' - dev: '09' + dev: 09 fn: '0' - id: '19a4' - name: 'PCI bridge: Intel Corporation Device (rev 11)' + id: 19a4 + name: 'PCI bridge: Intel Corporation Atom Processor C3000 Series PCI Express Root + Port #0 (rev 11)' - bus: '00' - dev: '0b' + dev: 0b fn: '0' - id: '19a6' - name: 'PCI bridge: Intel Corporation Device (rev 11)' + id: 19a6 + name: 'PCI bridge: Intel Corporation Atom Processor C3000 Series PCI Express Root + Port #2 (rev 11)' - bus: '00' - dev: '0f' + dev: 0f fn: '0' - id: '19a9' - name: 'PCI bridge: Intel Corporation Device (rev 11)' + id: 19a9 + name: 'PCI bridge: Intel Corporation Atom Processor C3000 Series PCI Express Root + Port #5 (rev 11)' - bus: '00' dev: '10' fn: '0' - id: '19aa' - name: 'PCI bridge: Intel Corporation Device (rev 11)' + id: 19aa + name: 'PCI bridge: Intel Corporation Atom Processor C3000 Series PCI Express Root + Port #6 (rev 11)' - bus: '00' - dev: 11 + dev: '11' fn: '0' - id: '19ab' - name: 'PCI bridge: Intel Corporation Device (rev 11)' + id: 19ab + name: 'PCI bridge: Intel Corporation Atom Processor C3000 Series PCI Express Root + Port #7 (rev 11)' - bus: '00' - dev: 12 + dev: '12' fn: '0' id: 19ac - name: 'System peripheral: Intel Corporation DNV SMBus Contoller - Host (rev 11)' + name: 'System peripheral: Intel Corporation Atom Processor C3000 Series SMBus Contoller + - Host (rev 11)' - bus: '00' - dev: 15 + dev: '15' fn: '0' id: 19d0 - name: 'USB controller: Intel Corporation Device (rev 11)' + name: 'USB controller: Intel Corporation Atom Processor C3000 Series USB 3.0 xHCI + Controller (rev 11)' - bus: '00' - dev: 16 + dev: '18' fn: '0' - id: 19d1 - name: 'PCI bridge: Intel Corporation Device (rev 11)' -- bus: '00' - dev: 17 - fn: '0' - id: 19d2 - name: 'PCI bridge: Intel Corporation Device (rev 11)' -- bus: '00' - dev: 18 - fn: '0' - id: 1973 - name: 'Communication controller: Intel Corporation Device (rev 11)' + id: 19d3 + name: 'Communication controller: Intel Corporation Atom Processor C3000 Series ME + HECI 1 (rev 11)' - bus: '00' dev: 1c fn: '0' id: 19db - name: 'SD Host controller: Intel Corporation Device (rev 11)' + name: 'SD Host controller: Intel Corporation Device 19db (rev 11)' - bus: '00' dev: 1f fn: '0' id: 19dc - name: 'ISA bridge: Intel Corporation DNV LPC or eSPI (rev 11)' + name: 'ISA bridge: Intel Corporation Atom Processor C3000 Series LPC or eSPI (rev + 11)' - bus: '00' dev: 1f fn: '2' - id: 197e - name: 'Memory controller: Intel Corporation Device (rev 11)' + id: 19de + name: 'Memory controller: Intel Corporation Atom Processor C3000 Series Power Management + Controller (rev 11)' - bus: '00' - dev: '1f' + dev: 1f fn: '4' id: 19df - name: 'SMBus: Intel Corporation DNV SMBus controller (rev 11)' + name: 'SMBus: Intel Corporation Atom Processor C3000 Series SMBus controller (rev + 11)' - bus: '00' - dev: '1f' + dev: 1f fn: '5' id: 19e0 - name: 'Serial bus controller: Intel Corporation DNV SPI Controller (rev 11)' + name: 'Serial bus controller [0c80]: Intel Corporation Atom Processor C3000 Series + SPI Controller (rev 11)' - bus: '01' dev: '00' fn: '0' id: 19e2 - name: 'Co-processor: Intel Corporation Device (rev 11)' + name: 'Co-processor: Intel Corporation Atom Processor C3000 Series QuickAssist Technology + (rev 11)' - bus: '02' dev: '00' fn: '0' - id: 0026 - name: 'Non-Volatile memory controller: Device (rev 03)' + id: '0026' + name: 'Non-Volatile memory controller: Device 1dd4:0026 (rev 03)' - bus: '03' dev: '00' fn: '0' @@ -128,25 +135,6 @@ - bus: '06' dev: '00' fn: '0' - id: 1533 - name: 'Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)' -- bus: '07' - dev: '00' - fn: '0' - id: 15c3 - name: 'Ethernet controller: Intel Corporation Device (rev 11)' -- bus: '07' - dev: '00' - fn: '1' - id: 15c3 - name: 'Ethernet controller: Intel Corporation Device (rev 11)' -- bus: '08' - dev: '00' - fn: '0' - id: 15c3 - name: 'Ethernet controller: Intel Corporation Device (rev 11)' -- bus: '08' - dev: '00' - fn: '1' - id: 15c3 - name: 'Ethernet controller: Intel Corporation Device (rev 11)' + id: '1533' + name: 'Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev + 03)' diff --git a/device/mellanox/x86_64-nvidia_sn2201-r0/platform.json b/device/mellanox/x86_64-nvidia_sn2201-r0/platform.json index d98a191d0ad7..f600f26293ce 100644 --- a/device/mellanox/x86_64-nvidia_sn2201-r0/platform.json +++ b/device/mellanox/x86_64-nvidia_sn2201-r0/platform.json @@ -17,17 +17,39 @@ "name": "CPLD2" } ], - "fans": [{ - "name": "fan1" + "fans": [], + "fan_drawers": [ + { + "name": "drawer1", + "fans": [ + { + "name": "fan1" + } + ] }, { - "name": "fan2" + "name": "drawer2", + "fans": [ + { + "name": "fan2" + } + ] }, { - "name": "fan3" + "name": "drawer3", + "fans": [ + { + "name": "fan3" + } + ] }, { - "name": "fan4" + "name": "drawer4", + "fans": [ + { + "name": "fan4" + } + ] } ], "psus": [ @@ -65,6 +87,12 @@ { "name": "Ambient Fan Side Temp" }, + { + "name": "Ambient CPU Board Temp" + }, + { + "name": "Ambient Switch Board Temp" + }, { "name": "CPU Pack Temp" }, @@ -109,56 +137,56 @@ "index": "1", "lanes": "0", "breakout_modes": { - "1x1G[100]": ["etp1"] + "1x1000[100,10]": ["etp1"] } }, "Ethernet1": { "index": "2", "lanes": "4", "breakout_modes": { - "1x1G[100]": ["etp2"] + "1x1000[100,10]": ["etp2"] } }, "Ethernet2": { "index": "3", "lanes": "8", "breakout_modes": { - "1x1G[100]": ["etp3"] + "1x1000[100,10]": ["etp3"] } }, "Ethernet3": { "index": "4", "lanes": "12", "breakout_modes": { - "1x1G[100]": ["etp4"] + "1x1000[100,10]": ["etp4"] } }, "Ethernet4": { "index": "5", "lanes": "16", "breakout_modes": { - "1x1G[100]": ["etp5"] + "1x1000[100,10]": ["etp5"] } }, "Ethernet5": { "index": "6", "lanes": "20", "breakout_modes": { - "1x1G[100]": ["etp6"] + "1x1000[100,10]": ["etp6"] } }, "Ethernet6": { "index": "7", "lanes": "24", "breakout_modes": { - "1x1G[100]": ["etp7"] + "1x1000[100,10]": ["etp7"] } }, "Ethernet7": { "index": "8", "lanes": "28", "breakout_modes": { - "1x1G[100]": ["etp8"] + "1x1000[100,10]": ["etp8"] } }, @@ -166,56 +194,56 @@ "index": "9", "lanes": "32", "breakout_modes": { - "1x1G[100]": ["etp9"] + "1x1000[100,10]": ["etp9"] } }, "Ethernet9": { "index": "10", "lanes": "36", "breakout_modes": { - "1x1G[100]": ["etp10"] + "1x1000[100,10]": ["etp10"] } }, "Ethernet10": { "index": "11", "lanes": "40", "breakout_modes": { - "1x1G[100]": ["etp11"] + "1x1000[100,10]": ["etp11"] } }, "Ethernet11": { "index": "12", "lanes": "44", "breakout_modes": { - "1x1G[100]": ["etp12"] + "1x1000[100,10]": ["etp12"] } }, "Ethernet12": { "index": "13", "lanes": "48", "breakout_modes": { - "1x1G[100]": ["etp13"] + "1x1000[100,10]": ["etp13"] } }, "Ethernet13": { "index": "14", "lanes": "52", "breakout_modes": { - "1x1G[100]": ["etp14"] + "1x1000[100,10]": ["etp14"] } }, "Ethernet14": { "index": "15", "lanes": "56", "breakout_modes": { - "1x1G[100]": ["etp15"] + "1x1000[100,10]": ["etp15"] } }, "Ethernet15": { "index": "16", "lanes": "60", "breakout_modes": { - "1x1G[100]": ["etp16"] + "1x1000[100,10]": ["etp16"] } }, @@ -223,224 +251,224 @@ "index": "17", "lanes": "64", "breakout_modes": { - "1x1G[100]": ["etp17"] + "1x1000[100,10]": ["etp17"] } }, "Ethernet17": { "index": "18", "lanes": "68", "breakout_modes": { - "1x1G[100]": ["etp18"] + "1x1000[100,10]": ["etp18"] } }, "Ethernet18": { "index": "19", "lanes": "72", "breakout_modes": { - "1x1G[100]": ["etp19"] + "1x1000[100,10]": ["etp19"] } }, "Ethernet19": { "index": "20", "lanes": "76", "breakout_modes": { - "1x1G[100]": ["etp20"] + "1x1000[100,10]": ["etp20"] } }, "Ethernet20": { "index": "21", "lanes": "80", "breakout_modes": { - "1x1G[100]": ["etp21"] + "1x1000[100,10]": ["etp21"] } }, "Ethernet21": { "index": "22", "lanes": "84", "breakout_modes": { - "1x1G[100]": ["etp22"] + "1x1000[100,10]": ["etp22"] } }, "Ethernet22": { "index": "23", "lanes": "88", "breakout_modes": { - "1x1G[100]": ["etp23"] + "1x1000[100,10]": ["etp23"] } }, "Ethernet23": { "index": "24", "lanes": "92", "breakout_modes": { - "1x1G[100]": ["etp24"] + "1x1000[100,10]": ["etp24"] } }, "Ethernet24": { "index": "25", "lanes": "96", "breakout_modes": { - "1x1G[100]": ["etp25"] + "1x1000[100,10]": ["etp25"] } }, "Ethernet25": { "index": "26", "lanes": "100", "breakout_modes": { - "1x1G[100]": ["etp26"] + "1x1000[100,10]": ["etp26"] } }, "Ethernet26": { "index": "27", "lanes": "104", "breakout_modes": { - "1x1G[100]": ["etp27"] + "1x1000[100,10]": ["etp27"] } }, "Ethernet27": { "index": "28", "lanes": "108", "breakout_modes": { - "1x1G[100]": ["etp28"] + "1x1000[100,10]": ["etp28"] } }, "Ethernet28": { "index": "29", "lanes": "112", "breakout_modes": { - "1x1G[100]": ["etp29"] + "1x1000[100,10]": ["etp29"] } }, "Ethernet29": { "index": "30", "lanes": "116", "breakout_modes": { - "1x1G[100]": ["etp30"] + "1x1000[100,10]": ["etp30"] } }, "Ethernet30": { "index": "31", "lanes": "120", "breakout_modes": { - "1x1G[100]": ["etp31"] + "1x1000[100,10]": ["etp31"] } }, "Ethernet31": { "index": "32", "lanes": "124", "breakout_modes": { - "1x1G[100]": ["etp32"] + "1x1000[100,10]": ["etp32"] } }, "Ethernet32": { "index": "33", "lanes": "128", "breakout_modes": { - "1x1G[100]": ["etp33"] + "1x1000[100,10]": ["etp33"] } }, "Ethernet33": { "index": "34", "lanes": "132", "breakout_modes": { - "1x1G[100]": ["etp34"] + "1x1000[100,10]": ["etp34"] } }, "Ethernet34": { "index": "35", "lanes": "136", "breakout_modes": { - "1x1G[100]": ["etp35"] + "1x1000[100,10]": ["etp35"] } }, "Ethernet35": { "index": "36", "lanes": "140", "breakout_modes": { - "1x1G[100]": ["etp36"] + "1x1000[100,10]": ["etp36"] } }, "Ethernet36": { "index": "37", "lanes": "144", "breakout_modes": { - "1x1G[100]": ["etp37"] + "1x1000[100,10]": ["etp37"] } }, "Ethernet37": { "index": "38", "lanes": "148", "breakout_modes": { - "1x1G[100]": ["etp38"] + "1x1000[100,10]": ["etp38"] } }, "Ethernet38": { "index": "39", "lanes": "152", "breakout_modes": { - "1x1G[100]": ["etp39"] + "1x1000[100,10]": ["etp39"] } }, "Ethernet39": { "index": "40", "lanes": "156", "breakout_modes": { - "1x1G[100]": ["etp40"] + "1x1000[100,10]": ["etp40"] } }, "Ethernet40": { "index": "41", "lanes": "160", "breakout_modes": { - "1x1G[100]": ["etp41"] + "1x1000[100,10]": ["etp41"] } }, "Ethernet41": { "index": "42", "lanes": "164", "breakout_modes": { - "1x1G[100]": ["etp42"] + "1x1000[100,10]": ["etp42"] } }, "Ethernet42": { "index": "43", "lanes": "168", "breakout_modes": { - "1x1G[100]": ["etp43"] + "1x1000[100,10]": ["etp43"] } }, "Ethernet43": { "index": "44", "lanes": "172", "breakout_modes": { - "1x1G[100]": ["etp44"] + "1x1000[100,10]": ["etp44"] } }, "Ethernet44": { "index": "45", "lanes": "176", "breakout_modes": { - "1x1G[100]": ["etp45"] + "1x1000[100,10]": ["etp45"] } }, "Ethernet45": { "index": "46", "lanes": "180", "breakout_modes": { - "1x1G[100]": ["etp46"] + "1x1000[100,10]": ["etp46"] } }, "Ethernet46": { "index": "47", "lanes": "184", "breakout_modes": { - "1x1G[100]": ["etp47"] + "1x1000[100,10]": ["etp47"] } }, "Ethernet47": { "index": "48", "lanes": "188", "breakout_modes": { - "1x1G[100]": ["etp48"] + "1x1000[100,10]": ["etp48"] } }, "Ethernet48": { diff --git a/device/mellanox/x86_64-nvidia_sn2201-r0/platform_components.json b/device/mellanox/x86_64-nvidia_sn2201-r0/platform_components.json new file mode 100644 index 000000000000..e28c19087875 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn2201-r0/platform_components.json @@ -0,0 +1,12 @@ +{ + "chassis": { + "SN2201": { + "component": { + "ONIE": { }, + "SSD": { }, + "CPLD1": { }, + "CPLD2": { } + } + } + } +} diff --git a/device/mellanox/x86_64-nvidia_sn2201-r0/sensors.conf b/device/mellanox/x86_64-nvidia_sn2201-r0/sensors.conf index 176502c4731a..1c29cfd2d7b3 100644 --- a/device/mellanox/x86_64-nvidia_sn2201-r0/sensors.conf +++ b/device/mellanox/x86_64-nvidia_sn2201-r0/sensors.conf @@ -6,7 +6,11 @@ # Fan Controller emc2305. bus "i2c-7" "i2c-1-mux (chan_id 5)" - chip "emc2305-i2c-7-4d" + chip "emc2305-i2c-7-4d" + label fan1 "Chassis Fan Drawer-1" + label fan2 "Chassis Fan Drawer-2" + label fan3 "Chassis Fan Drawer-3" + label fan4 "Chassis Fan Drawer-4" ignore fan5 # Temperature sensors @@ -14,6 +18,59 @@ chip "coretemp-isa-0000" label temp8 "Core 0" label temp14 "Core 1" +bus "i2c-2" "i2c-1-mux (chan_id 4)" + chip "mlxsw-i2c-*-48" + label temp1 "Ambient ASIC Temp" + ignore temp2 + ignore temp3 + ignore temp4 + ignore temp5 + ignore temp6 + ignore temp7 + ignore temp8 + ignore temp9 + ignore temp10 + ignore temp11 + ignore temp12 + ignore temp13 + ignore temp14 + ignore temp15 + ignore temp16 + ignore temp17 + ignore temp18 + ignore temp19 + ignore temp20 + ignore temp21 + ignore temp22 + ignore temp23 + ignore temp24 + ignore temp25 + ignore temp26 + ignore temp26 + ignore temp27 + ignore temp28 + ignore temp29 + ignore temp30 + ignore temp31 + ignore temp32 + ignore temp33 + ignore temp34 + ignore temp35 + ignore temp36 + ignore temp37 + ignore temp38 + ignore temp39 + ignore temp40 + ignore temp41 + ignore temp42 + ignore temp43 + ignore temp44 + ignore temp45 + ignore temp46 + ignore temp47 + ignore temp48 + ignore temp49 + bus "i2c-2" "i2c-1-mux (chan_id 0)" chip "lm75-i2c-*-4a" label temp1 "Ambient Switch Board Temp" @@ -33,15 +90,71 @@ bus "i2c-8" "i2c-1-mux (chan_id 6)" # Power controllers bus "i2c-9" "i2c-1-mux (chan_id 7)" chip "pmbus-i2c-*-40" - ignore curr3 - ignore in3 - ignore power3 + label curr1 "VR IC PSU 12V Rail Curr(in)" + label curr2 "ASIC 0.9V VCORE Rail Curr(out)" + label in1 "VR IC PSU 12V Rail" + label in2 "VR IC ASIC 0.9V VCORE Rail" + label power1 "VR IC PSU 12V Rail Pwr(in)" + label power2 "ASIC 0.9V VCORE Rail Pwr(out)" + ignore curr3 + ignore in3 + ignore power3 + label temp1 "VR IC Temp1" bus "i2c-2" "i2c-1-mux (chan_id 0)" chip "ads1015-i2c-*-49" - ignore in1 - ignore in2 - ignore in4 - ignore in5 - ignore in6 - ignore in7 + label in0 "ASIC 1.8V Rail" + label in3 "MONITOR MB 12V" + compute in3 (7.2)*@, @/(7.2) + ignore in1 + ignore in2 + ignore in4 + ignore in5 + ignore in6 + ignore in7 + +bus "i2c-8" "i2c-1-mux (chan_id 6)" + chip "powr1014-i2c-8-37" + label in0 "MONITOR CPU Board V3P3" + label in1 "MONITOR CPU Board VR_VCC_1V15" + label in2 "MONITOR CPU Board VR_VNN_1V05" + label in3 "MONITOR CPU Board VR_VCCRAM_1V15" + label in4 "MONITOR CPU Board VR_VDDQ_1V20" + label in5 "MONITOR CPU Board V1P05" + label in6 "MONITOR CPU Board P2V5_VPP" + label in7 "MONITOR CPU Board P0V6_VTT_DIMM" + label in8 "MONITOR CPU Board V1P8" + label in9 "MONITOR CPU Board V1P24" + +# PSU PMBus sensors +bus "i2c-3" "i2c-1-mux (chan_id 1)" + chip "pmbus-i2c-3-58" + label in1 "PSU-1 220V Rail(in)" + label in2 "PSU-1 12V Rail(out)" + ignore in3 + label fan1 "PSU-1 Fan1" + label temp1 "PSU-1 Temp1" + label temp2 "PSU-1 Temp2" + label temp3 "PSU-1 Temp3" + label curr1 "PSU-1 220V Rail Curr(in)" + label curr2 "PSU-1 12V Rail Curr(out)" + ignore curr3 + label power1 "PSU-1 220V Rail Pwr(in)" + label power2 "PSU-1 12V Rail Pwr(out)" + ignore power3 + +bus "i2c-4" "i2c-1-mux (chan_id 2)" + chip "pmbus-i2c-4-58" + label in1 "PSU-2 220V Rail(in)" + label in2 "PSU-2 12V Rail(out)" + ignore in3 + label fan1 "PSU-2 Fan1" + label temp1 "PSU-2 Temp1" + label temp2 "PSU-2 Temp2" + label temp3 "PSU-2 Temp3" + label curr1 "PSU-2 220V Rail Curr(in)" + label curr2 "PSU-2 12V Rail Curr(out)" + ignore curr3 + label power1 "PSU-2 220V Rail Pwr(in)" + label power2 "PSU-2 12V Rail Pwr(out)" + ignore power3 diff --git a/device/mellanox/x86_64-nvidia_sn4800_simx-r0/platform.json b/device/mellanox/x86_64-nvidia_sn4800_simx-r0/platform.json new file mode 120000 index 000000000000..4815676a68ae --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4800_simx-r0/platform.json @@ -0,0 +1 @@ +../x86_64-nvidia_sn4800-r0/platform.json \ No newline at end of file diff --git a/device/nokia/armhf-nokia_ixs7215_52x-r0/plugins/led_control.py b/device/nokia/armhf-nokia_ixs7215_52x-r0/plugins/led_control.py index 935343a84ce1..55d5c74808d0 100644 --- a/device/nokia/armhf-nokia_ixs7215_52x-r0/plugins/led_control.py +++ b/device/nokia/armhf-nokia_ixs7215_52x-r0/plugins/led_control.py @@ -60,8 +60,8 @@ def _set_i2c_register(self, reg_file, value): def _initSystemLed(self): # Front Panel System LEDs setting - oldfan = 0xf - oldpsu = 0xf + oldfan = 0xf # 0=amber, 1=green + oldpsu = 0xf # 0=amber, 1=green # Write sys led if smbus_present == 0: @@ -73,18 +73,19 @@ def _initSystemLed(self): bus.write_byte_data(DEVICE_ADDRESS, DEVICEREG, 0x02) DBG_PRINT(" System LED set O.K. ") + # Timer loop to monitor and set front panel Status, Fan, and PSU LEDs while True: - # Front Panel FAN Panel LED setting in register 0x08 + # Front Panel FAN Panel LED setting if (self.chassis.get_fan(0).get_status() == self.chassis.get_fan(1).get_status() == True): - if (os.path.isfile("/sys/class/gpio/fanLedAmber/value")): + if (os.path.isfile("/sys/class/gpio/fanLedGreen/value")): if oldfan != 0x1: self._set_i2c_register("/sys/class/gpio/fanLedAmber/value", 0) self._set_i2c_register("/sys/class/gpio/fanLedGreen/value", 1) oldfan = 0x1 else: - oldfan = 0xf + oldfan = 0xf else: - if (os.path.isfile("/sys/class/gpio/fanLedGreen/value")): + if (os.path.isfile("/sys/class/gpio/fanLedAmber/value")): if oldfan != 0x0: self._set_i2c_register("/sys/class/gpio/fanLedGreen/value", 0) self._set_i2c_register("/sys/class/gpio/fanLedAmber/value", 1) @@ -92,9 +93,9 @@ def _initSystemLed(self): else: oldfan = 0xf - # Front Panel PSU Panel LED setting in register 0x09 + # Front Panel PSU Panel LED setting if (self.chassis.get_psu(0).get_status() == self.chassis.get_psu(1).get_status() == True): - if (os.path.isfile("/sys/class/gpio/psuLedAmber/value")): + if (os.path.isfile("/sys/class/gpio/psuLedGreen/value")): if oldpsu != 0x1: self._set_i2c_register("/sys/class/gpio/psuLedAmber/value", 0) self._set_i2c_register("/sys/class/gpio/psuLedGreen/value", 1) @@ -102,13 +103,14 @@ def _initSystemLed(self): else: oldpsu = 0xf else: - if (os.path.isfile("/sys/class/gpio/psuLedGreen/value")): + if (os.path.isfile("/sys/class/gpio/psuLedAmber/value")): if oldpsu != 0x0: self._set_i2c_register("/sys/class/gpio/psuLedGreen/value", 0) self._set_i2c_register("/sys/class/gpio/psuLedAmber/value", 1) oldpsu = 0x0 else: oldpsu = 0xf + time.sleep(6) # Helper method to map SONiC port name to index 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 bebcd95002bf..bbafccdc377e 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 @@ -1,4 +1,3 @@ -platform_name.BCM8885X=j2_ixr7250 appl_enable_intr_init.BCM8885X=1 appl_enable_learn_and_limit_init.BCM8885X=0 appl_enable_oam.BCM8885X=0 @@ -9,6 +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 @@ -108,15 +108,16 @@ 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=88 -dram_temperature_threshold_power_down.BCM8885X=100 -dram_temperature_threshold_stop_traffic.BCM8885X=95 +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 @@ -357,6 +358,7 @@ 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 @@ -550,6 +552,7 @@ 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 @@ -743,6 +746,7 @@ 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 @@ -931,6 +935,7 @@ 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 @@ -1093,6 +1098,7 @@ 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 @@ -1257,8 +1263,10 @@ phy_tx_polarity_flip_phy143.BCM8885X=0 polled_irq_delay.BCM8885X=5 -polled_irq_mode.BCM8885X=1 +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 @@ -1279,198 +1287,198 @@ port_init_cl72_16=0 port_init_cl72_17=0 port_init_cl72_18=0 -port_init_cl72_256=1 -port_init_cl72_257=1 -port_init_cl72_258=1 -port_init_cl72_259=1 -port_init_cl72_260=1 -port_init_cl72_261=1 -port_init_cl72_262=1 -port_init_cl72_263=1 -port_init_cl72_264=1 -port_init_cl72_265=1 -port_init_cl72_266=1 -port_init_cl72_267=1 -port_init_cl72_268=1 -port_init_cl72_269=1 -port_init_cl72_270=1 -port_init_cl72_271=1 -port_init_cl72_272=1 -port_init_cl72_273=1 -port_init_cl72_274=1 -port_init_cl72_275=1 -port_init_cl72_276=1 -port_init_cl72_277=1 -port_init_cl72_278=1 -port_init_cl72_279=1 -port_init_cl72_280=1 -port_init_cl72_281=1 -port_init_cl72_282=1 -port_init_cl72_283=1 -port_init_cl72_284=1 -port_init_cl72_285=1 -port_init_cl72_286=1 -port_init_cl72_287=1 -port_init_cl72_288=1 -port_init_cl72_289=1 -port_init_cl72_290=1 -port_init_cl72_291=1 -port_init_cl72_292=1 -port_init_cl72_293=1 -port_init_cl72_294=1 -port_init_cl72_295=1 -port_init_cl72_296=1 -port_init_cl72_297=1 -port_init_cl72_298=1 -port_init_cl72_299=1 -port_init_cl72_300=1 -port_init_cl72_301=1 -port_init_cl72_302=1 -port_init_cl72_303=1 -port_init_cl72_304=1 -port_init_cl72_305=1 -port_init_cl72_306=1 -port_init_cl72_307=1 -port_init_cl72_308=1 -port_init_cl72_309=1 -port_init_cl72_310=1 -port_init_cl72_311=1 -port_init_cl72_312=1 -port_init_cl72_313=1 -port_init_cl72_314=1 -port_init_cl72_315=1 -port_init_cl72_316=1 -port_init_cl72_317=1 -port_init_cl72_318=1 -port_init_cl72_319=1 -port_init_cl72_320=1 -port_init_cl72_321=1 -port_init_cl72_322=1 -port_init_cl72_323=1 -port_init_cl72_324=1 -port_init_cl72_325=1 -port_init_cl72_326=1 -port_init_cl72_327=1 -port_init_cl72_328=1 -port_init_cl72_329=1 -port_init_cl72_330=1 -port_init_cl72_331=1 -port_init_cl72_332=1 -port_init_cl72_333=1 -port_init_cl72_334=1 -port_init_cl72_335=1 -port_init_cl72_336=1 -port_init_cl72_337=1 -port_init_cl72_338=1 -port_init_cl72_339=1 -port_init_cl72_340=1 -port_init_cl72_341=1 -port_init_cl72_342=1 -port_init_cl72_343=1 -port_init_cl72_344=1 -port_init_cl72_345=1 -port_init_cl72_346=1 -port_init_cl72_347=1 -port_init_cl72_348=1 -port_init_cl72_349=1 -port_init_cl72_350=1 -port_init_cl72_351=1 -port_init_cl72_352=1 -port_init_cl72_353=1 -port_init_cl72_354=1 -port_init_cl72_355=1 -port_init_cl72_356=1 -port_init_cl72_357=1 -port_init_cl72_358=1 -port_init_cl72_359=1 -port_init_cl72_360=1 -port_init_cl72_361=1 -port_init_cl72_362=1 -port_init_cl72_363=1 -port_init_cl72_364=1 -port_init_cl72_365=1 -port_init_cl72_366=1 -port_init_cl72_367=1 -port_init_cl72_368=1 -port_init_cl72_369=1 -port_init_cl72_370=1 -port_init_cl72_371=1 -port_init_cl72_372=1 -port_init_cl72_373=1 -port_init_cl72_374=1 -port_init_cl72_375=1 -port_init_cl72_376=1 -port_init_cl72_377=1 -port_init_cl72_378=1 -port_init_cl72_379=1 -port_init_cl72_380=1 -port_init_cl72_381=1 -port_init_cl72_382=1 -port_init_cl72_383=1 -port_init_cl72_384=1 -port_init_cl72_385=1 -port_init_cl72_386=1 -port_init_cl72_387=1 -port_init_cl72_388=1 -port_init_cl72_389=1 -port_init_cl72_390=1 -port_init_cl72_391=1 -port_init_cl72_392=1 -port_init_cl72_393=1 -port_init_cl72_394=1 -port_init_cl72_395=1 -port_init_cl72_396=1 -port_init_cl72_397=1 -port_init_cl72_398=1 -port_init_cl72_399=1 -port_init_cl72_400=1 -port_init_cl72_401=1 -port_init_cl72_402=1 -port_init_cl72_403=1 -port_init_cl72_404=1 -port_init_cl72_405=1 -port_init_cl72_406=1 -port_init_cl72_407=1 -port_init_cl72_408=1 -port_init_cl72_409=1 -port_init_cl72_410=1 -port_init_cl72_411=1 -port_init_cl72_412=1 -port_init_cl72_413=1 -port_init_cl72_414=1 -port_init_cl72_415=1 -port_init_cl72_416=1 -port_init_cl72_417=1 -port_init_cl72_418=1 -port_init_cl72_419=1 -port_init_cl72_420=1 -port_init_cl72_421=1 -port_init_cl72_422=1 -port_init_cl72_423=1 -port_init_cl72_424=1 -port_init_cl72_425=1 -port_init_cl72_426=1 -port_init_cl72_427=1 -port_init_cl72_428=1 -port_init_cl72_429=1 -port_init_cl72_430=1 -port_init_cl72_431=1 -port_init_cl72_432=1 -port_init_cl72_433=1 -port_init_cl72_434=1 -port_init_cl72_435=1 -port_init_cl72_436=1 -port_init_cl72_437=1 -port_init_cl72_438=1 -port_init_cl72_439=1 -port_init_cl72_440=1 -port_init_cl72_441=1 -port_init_cl72_442=1 -port_init_cl72_443=1 -port_init_cl72_444=1 -port_init_cl72_445=1 -port_init_cl72_446=1 -port_init_cl72_447=1 +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 @@ -1506,6 +1514,7 @@ 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 @@ -1513,6 +1522,7 @@ 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 @@ -1522,6 +1532,7 @@ 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=CDGE9:core_1.1 ucode_port_2.BCM8885X=CDGE10:core_1.2 ucode_port_3.BCM8885X=CDGE11:core_1.3 @@ -1541,8 +1552,12 @@ 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=OLP:core_1.20 +ucode_port_20.BCM8885X=RCY1:core_1.20 +ucode_port_21.BCM8885X=OLP:core_1.21 + + serdes_lane_config_dfe_1.BCM8885X=on serdes_lane_config_dfe_2.BCM8885X=on @@ -1563,24 +1578,280 @@ serdes_lane_config_dfe_16.BCM8885X=on serdes_lane_config_dfe_17.BCM8885X=on serdes_lane_config_dfe_18.BCM8885X=on -serdes_tx_taps_1.BCM8885X=pam4:-16:132:-8:0:0:0 -serdes_tx_taps_2.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_3.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_4.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_5.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_6.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_7.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_8.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_9.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_10.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_11.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_12.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_13.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_14.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_15.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_16.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_17.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_18.BCM8885X=pam4:-16:132:-8:0:0:0 + +serdes_lane_config_channel_mode_1.BCM8885X=force_nr +serdes_lane_config_channel_mode_2.BCM8885X=force_nr +serdes_lane_config_channel_mode_3.BCM8885X=force_nr +serdes_lane_config_channel_mode_4.BCM8885X=force_nr +serdes_lane_config_channel_mode_5.BCM8885X=force_nr +serdes_lane_config_channel_mode_6.BCM8885X=force_nr +serdes_lane_config_channel_mode_7.BCM8885X=force_nr +serdes_lane_config_channel_mode_8.BCM8885X=force_nr +serdes_lane_config_channel_mode_9.BCM8885X=force_nr +serdes_lane_config_channel_mode_10.BCM8885X=force_nr +serdes_lane_config_channel_mode_11.BCM8885X=force_nr +serdes_lane_config_channel_mode_12.BCM8885X=force_nr +serdes_lane_config_channel_mode_13.BCM8885X=force_nr +serdes_lane_config_channel_mode_14.BCM8885X=force_nr +serdes_lane_config_channel_mode_15.BCM8885X=force_nr +serdes_lane_config_channel_mode_16.BCM8885X=force_nr +serdes_lane_config_channel_mode_17.BCM8885X=force_nr +serdes_lane_config_channel_mode_18.BCM8885X=force_nr + + +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 + + +port_fec.1.BCM8885x=9 +port_fec.2.BCM8885x=9 +port_fec.3.BCM8885x=9 +port_fec.4.BCM8885x=9 +port_fec.5.BCM8885x=9 +port_fec.6.BCM8885x=9 +port_fec.7.BCM8885x=9 +port_fec.8.BCM8885x=9 +port_fec.9.BCM8885x=9 +port_fec.10.BCM8885x=9 +port_fec.11.BCM8885x=9 +port_fec.12.BCM8885x=9 +port_fec.13.BCM8885x=9 +port_fec.14.BCM8885x=9 +port_fec.15.BCM8885x=9 +port_fec.16.BCM8885x=9 +port_fec.17.BCM8885x=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_4.BCM8885X=pam4:-8:128:-4:4:0:0 +serdes_tx_taps_5.BCM8885X=pam4:-8:128:-4:4: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 +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_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 +serdes_tx_taps_17.BCM8885X=pam4:-8:132:-8:0:0:0 +serdes_tx_taps_18.BCM8885X=pam4:-4:128:-8:0:0:0 + + +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 @@ -1780,5 +2051,4 @@ 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 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/port_config.ini b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/port_config.ini index 8d017026081c..3633842330f8 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/port_config.ini +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/port_config.ini @@ -17,4 +17,5 @@ Ethernet14 24,25,26,27,28,29,30,31 Ethernet14 15 Eth14 Ethernet15 16,17,18,19,20,21,22,23 Ethernet15 16 Eth15-ASIC0 Ext 400000 0 16 8 Ethernet16 8,9,10,11,12,13,14,15 Ethernet16 17 Eth16-ASIC0 Ext 400000 0 17 8 Ethernet17 0,1,2,3,4,5,6,7 Ethernet17 18 Eth17-ASIC0 Ext 400000 0 18 8 -Ethernet-IB0 115 Ethernet-IB0 37 Rcy-ASIC0 Int 10000 0 19 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-36x400G/0/sai_postinit_cmd.soc b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/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-36x400G/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-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 b96ead9afacd..ce7f77de5bb2 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 @@ -1,4 +1,3 @@ -platform_name.BCM8885X=j2_ixr7250 appl_enable_intr_init.BCM8885X=1 appl_enable_learn_and_limit_init.BCM8885X=0 appl_enable_oam.BCM8885X=0 @@ -9,6 +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 @@ -108,15 +108,16 @@ 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=88 -dram_temperature_threshold_power_down.BCM8885X=100 -dram_temperature_threshold_stop_traffic.BCM8885X=95 +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 @@ -357,6 +358,7 @@ 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 @@ -550,6 +552,7 @@ 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 @@ -743,6 +746,7 @@ 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 @@ -931,6 +935,7 @@ 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 @@ -1093,6 +1098,7 @@ 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 @@ -1257,8 +1263,10 @@ phy_tx_polarity_flip_phy143.BCM8885X=0 polled_irq_delay.BCM8885X=5 -polled_irq_mode.BCM8885X=1 +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 @@ -1279,198 +1287,198 @@ port_init_cl72_16=0 port_init_cl72_17=0 port_init_cl72_18=0 -port_init_cl72_256=1 -port_init_cl72_257=1 -port_init_cl72_258=1 -port_init_cl72_259=1 -port_init_cl72_260=1 -port_init_cl72_261=1 -port_init_cl72_262=1 -port_init_cl72_263=1 -port_init_cl72_264=1 -port_init_cl72_265=1 -port_init_cl72_266=1 -port_init_cl72_267=1 -port_init_cl72_268=1 -port_init_cl72_269=1 -port_init_cl72_270=1 -port_init_cl72_271=1 -port_init_cl72_272=1 -port_init_cl72_273=1 -port_init_cl72_274=1 -port_init_cl72_275=1 -port_init_cl72_276=1 -port_init_cl72_277=1 -port_init_cl72_278=1 -port_init_cl72_279=1 -port_init_cl72_280=1 -port_init_cl72_281=1 -port_init_cl72_282=1 -port_init_cl72_283=1 -port_init_cl72_284=1 -port_init_cl72_285=1 -port_init_cl72_286=1 -port_init_cl72_287=1 -port_init_cl72_288=1 -port_init_cl72_289=1 -port_init_cl72_290=1 -port_init_cl72_291=1 -port_init_cl72_292=1 -port_init_cl72_293=1 -port_init_cl72_294=1 -port_init_cl72_295=1 -port_init_cl72_296=1 -port_init_cl72_297=1 -port_init_cl72_298=1 -port_init_cl72_299=1 -port_init_cl72_300=1 -port_init_cl72_301=1 -port_init_cl72_302=1 -port_init_cl72_303=1 -port_init_cl72_304=1 -port_init_cl72_305=1 -port_init_cl72_306=1 -port_init_cl72_307=1 -port_init_cl72_308=1 -port_init_cl72_309=1 -port_init_cl72_310=1 -port_init_cl72_311=1 -port_init_cl72_312=1 -port_init_cl72_313=1 -port_init_cl72_314=1 -port_init_cl72_315=1 -port_init_cl72_316=1 -port_init_cl72_317=1 -port_init_cl72_318=1 -port_init_cl72_319=1 -port_init_cl72_320=1 -port_init_cl72_321=1 -port_init_cl72_322=1 -port_init_cl72_323=1 -port_init_cl72_324=1 -port_init_cl72_325=1 -port_init_cl72_326=1 -port_init_cl72_327=1 -port_init_cl72_328=1 -port_init_cl72_329=1 -port_init_cl72_330=1 -port_init_cl72_331=1 -port_init_cl72_332=1 -port_init_cl72_333=1 -port_init_cl72_334=1 -port_init_cl72_335=1 -port_init_cl72_336=1 -port_init_cl72_337=1 -port_init_cl72_338=1 -port_init_cl72_339=1 -port_init_cl72_340=1 -port_init_cl72_341=1 -port_init_cl72_342=1 -port_init_cl72_343=1 -port_init_cl72_344=1 -port_init_cl72_345=1 -port_init_cl72_346=1 -port_init_cl72_347=1 -port_init_cl72_348=1 -port_init_cl72_349=1 -port_init_cl72_350=1 -port_init_cl72_351=1 -port_init_cl72_352=1 -port_init_cl72_353=1 -port_init_cl72_354=1 -port_init_cl72_355=1 -port_init_cl72_356=1 -port_init_cl72_357=1 -port_init_cl72_358=1 -port_init_cl72_359=1 -port_init_cl72_360=1 -port_init_cl72_361=1 -port_init_cl72_362=1 -port_init_cl72_363=1 -port_init_cl72_364=1 -port_init_cl72_365=1 -port_init_cl72_366=1 -port_init_cl72_367=1 -port_init_cl72_368=1 -port_init_cl72_369=1 -port_init_cl72_370=1 -port_init_cl72_371=1 -port_init_cl72_372=1 -port_init_cl72_373=1 -port_init_cl72_374=1 -port_init_cl72_375=1 -port_init_cl72_376=1 -port_init_cl72_377=1 -port_init_cl72_378=1 -port_init_cl72_379=1 -port_init_cl72_380=1 -port_init_cl72_381=1 -port_init_cl72_382=1 -port_init_cl72_383=1 -port_init_cl72_384=1 -port_init_cl72_385=1 -port_init_cl72_386=1 -port_init_cl72_387=1 -port_init_cl72_388=1 -port_init_cl72_389=1 -port_init_cl72_390=1 -port_init_cl72_391=1 -port_init_cl72_392=1 -port_init_cl72_393=1 -port_init_cl72_394=1 -port_init_cl72_395=1 -port_init_cl72_396=1 -port_init_cl72_397=1 -port_init_cl72_398=1 -port_init_cl72_399=1 -port_init_cl72_400=1 -port_init_cl72_401=1 -port_init_cl72_402=1 -port_init_cl72_403=1 -port_init_cl72_404=1 -port_init_cl72_405=1 -port_init_cl72_406=1 -port_init_cl72_407=1 -port_init_cl72_408=1 -port_init_cl72_409=1 -port_init_cl72_410=1 -port_init_cl72_411=1 -port_init_cl72_412=1 -port_init_cl72_413=1 -port_init_cl72_414=1 -port_init_cl72_415=1 -port_init_cl72_416=1 -port_init_cl72_417=1 -port_init_cl72_418=1 -port_init_cl72_419=1 -port_init_cl72_420=1 -port_init_cl72_421=1 -port_init_cl72_422=1 -port_init_cl72_423=1 -port_init_cl72_424=1 -port_init_cl72_425=1 -port_init_cl72_426=1 -port_init_cl72_427=1 -port_init_cl72_428=1 -port_init_cl72_429=1 -port_init_cl72_430=1 -port_init_cl72_431=1 -port_init_cl72_432=1 -port_init_cl72_433=1 -port_init_cl72_434=1 -port_init_cl72_435=1 -port_init_cl72_436=1 -port_init_cl72_437=1 -port_init_cl72_438=1 -port_init_cl72_439=1 -port_init_cl72_440=1 -port_init_cl72_441=1 -port_init_cl72_442=1 -port_init_cl72_443=1 -port_init_cl72_444=1 -port_init_cl72_445=1 -port_init_cl72_446=1 -port_init_cl72_447=1 +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 @@ -1506,6 +1514,7 @@ 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 @@ -1513,6 +1522,7 @@ 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 @@ -1522,6 +1532,7 @@ 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=CDGE9:core_1.1 ucode_port_2.BCM8885X=CDGE10:core_1.2 ucode_port_3.BCM8885X=CDGE11:core_1.3 @@ -1541,8 +1552,12 @@ 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=OLP:core_1.20 +ucode_port_20.BCM8885X=RCY1:core_1.20 +ucode_port_21.BCM8885X=OLP:core_1.21 + + serdes_lane_config_dfe_1.BCM8885X=on serdes_lane_config_dfe_2.BCM8885X=on @@ -1563,24 +1578,280 @@ serdes_lane_config_dfe_16.BCM8885X=on serdes_lane_config_dfe_17.BCM8885X=on serdes_lane_config_dfe_18.BCM8885X=on -serdes_tx_taps_1.BCM8885X=pam4:-16:132:-8:0:0:0 -serdes_tx_taps_2.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_3.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_4.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_5.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_6.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_7.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_8.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_9.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_10.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_11.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_12.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_13.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_14.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_15.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_16.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_17.BCM8885X=pam4:-16:130:-8:0:0:0 -serdes_tx_taps_18.BCM8885X=pam4:-16:132:-8:0:0:0 + +serdes_lane_config_channel_mode_1.BCM8885X=force_nr +serdes_lane_config_channel_mode_2.BCM8885X=force_nr +serdes_lane_config_channel_mode_3.BCM8885X=force_nr +serdes_lane_config_channel_mode_4.BCM8885X=force_nr +serdes_lane_config_channel_mode_5.BCM8885X=force_nr +serdes_lane_config_channel_mode_6.BCM8885X=force_nr +serdes_lane_config_channel_mode_7.BCM8885X=force_nr +serdes_lane_config_channel_mode_8.BCM8885X=force_nr +serdes_lane_config_channel_mode_9.BCM8885X=force_nr +serdes_lane_config_channel_mode_10.BCM8885X=force_nr +serdes_lane_config_channel_mode_11.BCM8885X=force_nr +serdes_lane_config_channel_mode_12.BCM8885X=force_nr +serdes_lane_config_channel_mode_13.BCM8885X=force_nr +serdes_lane_config_channel_mode_14.BCM8885X=force_nr +serdes_lane_config_channel_mode_15.BCM8885X=force_nr +serdes_lane_config_channel_mode_16.BCM8885X=force_nr +serdes_lane_config_channel_mode_17.BCM8885X=force_nr +serdes_lane_config_channel_mode_18.BCM8885X=force_nr + + +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 + + +port_fec.1.BCM8885x=9 +port_fec.2.BCM8885x=9 +port_fec.3.BCM8885x=9 +port_fec.4.BCM8885x=9 +port_fec.5.BCM8885x=9 +port_fec.6.BCM8885x=9 +port_fec.7.BCM8885x=9 +port_fec.8.BCM8885x=9 +port_fec.9.BCM8885x=9 +port_fec.10.BCM8885x=9 +port_fec.11.BCM8885x=9 +port_fec.12.BCM8885x=9 +port_fec.13.BCM8885x=9 +port_fec.14.BCM8885x=9 +port_fec.15.BCM8885x=9 +port_fec.16.BCM8885x=9 +port_fec.17.BCM8885x=9 +port_fec.18.BCM8885x=9 + + +serdes_tx_taps_1.BCM8885X=pam4:-8:132:-8:0:0:0 +serdes_tx_taps_2.BCM8885X=pam4:-8:132:-8:0:0:0 +serdes_tx_taps_3.BCM8885X=pam4:-8:132:-8:4:0:0 +serdes_tx_taps_4.BCM8885X=pam4:-8:128:-4:4:0:0 +serdes_tx_taps_5.BCM8885X=pam4:-8:132:-8:4: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 +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:132:-8:4:0:0 +serdes_tx_taps_14.BCM8885X=pam4:-4:144:0:0:0:0 +serdes_tx_taps_15.BCM8885X=pam4:-8:132:-8:4:0:0 +serdes_tx_taps_16.BCM8885X=pam4:-8:136:-4:4:-4:0 +serdes_tx_taps_17.BCM8885X=pam4:-8:132:-4:0:0:0 +serdes_tx_taps_18.BCM8885X=pam4:-4:128:-4:0:0:0 + + +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 @@ -1775,10 +2046,11 @@ 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 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/port_config.ini b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/port_config.ini index 76fd968fec28..90376150d657 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/port_config.ini +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/port_config.ini @@ -17,4 +17,5 @@ Ethernet32 24,25,26,27,28,29,30,31 Ethernet32 33 Eth14 Ethernet33 16,17,18,19,20,21,22,23 Ethernet33 34 Eth15-ASIC1 Ext 400000 0 16 8 Ethernet34 8,9,10,11,12,13,14,15 Ethernet34 35 Eth16-ASIC1 Ext 400000 0 17 8 Ethernet35 0,1,2,3,4,5,6,7 Ethernet35 36 Eth17-ASIC1 Ext 400000 0 18 8 -Ethernet-IB1 115 Ethernet-IB1 38 Rcy-ASIC1 Int 10000 0 19 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-36x400G/1/sai_postinit_cmd.soc b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/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-36x400G/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 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/chassisdb.conf b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/chassisdb.conf index 175c0bb2b769..fa5af525eda0 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/chassisdb.conf +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/chassisdb.conf @@ -1,2 +1,3 @@ -chassis_db_address=10.0.5.16 +chassis_db_address=10.6.0.100 chassis_internal_intfs=enp12s0f2,enp5s0f4,enp5s0f4.2 +midplane_subnet=10.6.0.0/16 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 ad911fb609b0..55630de1126a 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform.json +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform.json @@ -12,148 +12,209 @@ "name": "FPGA2" } ], - + "watchdog": { + "disarm": false + }, + "get_module_attributes": { + "model": false, + "serial": false, + "base_mac": false, + "system_eeprom_info": false + }, + "thermal_temperature": { + "minimum": 0, + "maximum": 110 + }, "fans": [], "fan_drawers": [], "master_psu_led_color": [], "psus": [], "thermals": [ { - "name": "temp_1(fan)" + "name": "temp_1(fan)", + "controllable": false }, { - "name": "temp_2(fan)" + "name": "temp_2(fan)", + "controllable": false }, { - "name": "temp_3" + "name": "temp_3(fan)", + "controllable": false }, { - "name": "temp_4" + "name": "temp_4", + "controllable": false }, { - "name": "temp_5" + "name": "temp_5", + "controllable": false }, { - "name": "temp_6" + "name": "temp_6(fan)", + "controllable": false }, { - "name": "temp_7" + "name": "temp_7(fan)", + "controllable": false }, { - "name": "temp_8" + "name": "temp_8(fan)", + "controllable": false }, { - "name": "temp_9" + "name": "temp_9(fan)", + "controllable": false + }, + { + "name": "temp_10(fan)", + "controllable": false } ], "sfps": [ { - "name": "QSFPDD_1" + "name": "QSFPDD_1", + "tx_disable_channel": false }, { - "name": "QSFPDD_2" + "name": "QSFPDD_2", + "tx_disable_channel": false }, { - "name": "QSFPDD_3" + "name": "QSFPDD_3", + "tx_disable_channel": false }, { - "name": "QSFPDD_4" + "name": "QSFPDD_4", + "tx_disable_channel": false }, { - "name": "QSFPDD_5" + "name": "QSFPDD_5", + "tx_disable_channel": false }, { - "name": "QSFPDD_6" + "name": "QSFPDD_6", + "tx_disable_channel": false }, { - "name": "QSFPDD_7" + "name": "QSFPDD_7", + "tx_disable_channel": false }, { - "name": "QSFPDD_8" + "name": "QSFPDD_8", + "tx_disable_channel": false }, { - "name": "QSFPDD_9" + "name": "QSFPDD_9", + "tx_disable_channel": false }, { - "name": "QSFPDD_10" + "name": "QSFPDD_10", + "tx_disable_channel": false }, { - "name": "QSFPDD_11" + "name": "QSFPDD_11", + "tx_disable_channel": false }, { - "name": "QSFPDD_12" + "name": "QSFPDD_12", + "tx_disable_channel": false }, { - "name": "QSFPDD_13" + "name": "QSFPDD_13", + "tx_disable_channel": false }, { - "name": "QSFPDD_14" + "name": "QSFPDD_14", + "tx_disable_channel": false }, { - "name": "QSFPDD_15" + "name": "QSFPDD_15", + "tx_disable_channel": false }, { - "name": "QSFPDD_16" + "name": "QSFPDD_16", + "tx_disable_channel": false }, { - "name": "QSFPDD_17" + "name": "QSFPDD_17", + "tx_disable_channel": false }, { - "name": "QSFPDD_18" + "name": "QSFPDD_18", + "tx_disable_channel": false }, { - "name": "QSFPDD_19" + "name": "QSFPDD_19", + "tx_disable_channel": false }, { - "name": "QSFPDD_20" + "name": "QSFPDD_20", + "tx_disable_channel": false }, { - "name": "QSFPDD_21" + "name": "QSFPDD_21", + "tx_disable_channel": false }, { - "name": "QSFPDD_22" + "name": "QSFPDD_22", + "tx_disable_channel": false }, { - "name": "QSFPDD_23" + "name": "QSFPDD_23", + "tx_disable_channel": false }, { - "name": "QSFPDD_24" + "name": "QSFPDD_24", + "tx_disable_channel": false }, { - "name": "QSFPDD_25" + "name": "QSFPDD_25", + "tx_disable_channel": false }, { - "name": "QSFPDD_26" + "name": "QSFPDD_26", + "tx_disable_channel": false }, { - "name": "QSFPDD_27" + "name": "QSFPDD_27", + "tx_disable_channel": false }, { - "name": "QSFPDD_28" + "name": "QSFPDD_28", + "tx_disable_channel": false }, { - "name": "QSFPDD_29" + "name": "QSFPDD_29", + "tx_disable_channel": false }, { - "name": "QSFPDD_30" + "name": "QSFPDD_30", + "tx_disable_channel": false }, { - "name": "QSFPDD_31" + "name": "QSFPDD_31", + "tx_disable_channel": false }, { - "name": "QSFPDD_32" + "name": "QSFPDD_32", + "tx_disable_channel": false }, { - "name": "QSFPDD_33" + "name": "QSFPDD_33", + "tx_disable_channel": false }, { - "name": "QSFPDD_34" + "name": "QSFPDD_34", + "tx_disable_channel": false }, { - "name": "QSFPDD_35" + "name": "QSFPDD_35", + "tx_disable_channel": false }, { - "name": "QSFPDD_36" + "name": "QSFPDD_36", + "tx_disable_channel": false } ] }, 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 5f0862c2e729..039b950f03ba 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 @@ -6,7 +6,7 @@ }, { "key": "midplane_subnet", - "stringval": "10.0.5.0" + "stringval": "10.6.0.0/16" }, { "key": "midplane_monitor", diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/0/config-ramon-1-0.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/0/config-ramon-1-0.bcm index 4166b4c19516..e55bc4a4ebc7 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/0/config-ramon-1-0.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/0/config-ramon-1-0.bcm @@ -1,7 +1,8 @@ + appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=1 bcm_linkscan_interval.BCM8879X=0 -bcm_stat_interval.BCM8879X=0 +bcm_stat_interval.BCM8879X=4000000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 @@ -20,10 +21,10 @@ mdio_output_delay_int.BCM8879X=25 mem_cache_enable_parity.BCM8879X=1 mm_intr_enable.BCM8879X=0 mm_timeout_usec.BCM8879X=300000 -polled_irq_delay.BCM8879X=500000 +polled_irq_delay.BCM8879X=100000 polled_irq_mode.BCM8879X=1 port_fec.BCM8879X=7 -port_init_cl72.BCM8879X=1 +port_init_cl72.BCM8879X=0 port_init_speed.BCM8879X=53125 rate_ext_mdio_divisor.BCM8879X=14 rate_int_mdio_divisor.BCM8879X=50 @@ -42,134 +43,134 @@ tslam_dma_enable.BCM8879X=0 tslam_intr_enable.BCM8879X=0 tslam_timeout_usec.BCM8879X=5000000 -lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx1 -lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx3 +lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx1 lane_to_serdes_map_fabric_lane2.BCM8879X=rx2:tx2 -lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx0 +lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx3 -lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx6 +lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx4 lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx5 -lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx7 -lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx4 +lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx7 -lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx10 -lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx8 -lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx11 -lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx9 +lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx11 -lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx13 -lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx15 +lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx13 lane_to_serdes_map_fabric_lane14.BCM8879X=rx14:tx14 -lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx12 +lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx15 -lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx18 -lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx16 -lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx19 -lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx17 +lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx18 +lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx19 lane_to_serdes_map_fabric_lane20.BCM8879X=rx20:tx20 -lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx22 -lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx23 -lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx21 +lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx23 lane_to_serdes_map_fabric_lane24.BCM8879X=rx24:tx24 -lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx26 -lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx27 -lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx25 +lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx26 +lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx27 -lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx29 -lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx30 -lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx28 +lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx29 +lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx30 lane_to_serdes_map_fabric_lane31.BCM8879X=rx31:tx31 -lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx34 -lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx32 -lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx35 -lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx33 +lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx35 lane_to_serdes_map_fabric_lane36.BCM8879X=rx36:tx36 -lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx38 -lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx39 -lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx37 +lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx39 -lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx43 -lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx42 -lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx40 -lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx41 +lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx40 +lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx41 +lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx42 +lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx43 lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx44 -lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx46 -lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx47 -lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx45 +lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx46 +lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx47 -lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx49 -lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx50 -lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx51 -lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx48 +lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx51 -lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx54 +lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx52 lane_to_serdes_map_fabric_lane53.BCM8879X=rx53:tx53 -lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx55 -lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx52 +lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx55 -lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx58 +lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx56 lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx57 -lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx59 -lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx56 +lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx58 +lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx59 -lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx61 -lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx60 +lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx60 +lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx61 lane_to_serdes_map_fabric_lane62.BCM8879X=rx62:tx62 lane_to_serdes_map_fabric_lane63.BCM8879X=rx63:tx63 lane_to_serdes_map_fabric_lane64.BCM8879X=rx64:tx64 -lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx66 -lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx65 +lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx66 lane_to_serdes_map_fabric_lane67.BCM8879X=rx67:tx67 -lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx69 -lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx70 -lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx71 -lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx68 +lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx71 -lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx74 -lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx72 -lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx75 -lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx73 +lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx72 +lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx75 -lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx78 -lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx76 -lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx79 -lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx77 +lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx76 +lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx77 +lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx78 +lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx79 lane_to_serdes_map_fabric_lane80.BCM8879X=rx80:tx80 -lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx82 -lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx83 -lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx81 +lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx82 +lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx83 -lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx85 -lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx86 -lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx87 -lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx84 +lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx87 -lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx90 -lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx88 -lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx91 -lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx89 +lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx89 +lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx90 +lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx91 -lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx95 -lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx94 -lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx92 -lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx93 +lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx92 +lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx94 +lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx95 lane_to_serdes_map_fabric_lane96.BCM8879X=rx96:tx96 -lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx98 -lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx97 +lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx98 lane_to_serdes_map_fabric_lane99.BCM8879X=rx99:tx99 -lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx101 -lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx102 -lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx100 +lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx102 lane_to_serdes_map_fabric_lane103.BCM8879X=rx103:tx103 lane_to_serdes_map_fabric_lane104.BCM8879X=rx104:tx104 @@ -182,10 +183,10 @@ lane_to_serdes_map_fabric_lane109.BCM8879X=rx109:tx109 lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx110 lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx111 -lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx115 -lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx114 -lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx113 -lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx112 +lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx112 +lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx114 +lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx115 lane_to_serdes_map_fabric_lane116.BCM8879X=rx116:tx116 lane_to_serdes_map_fabric_lane117.BCM8879X=rx117:tx117 @@ -197,15 +198,15 @@ lane_to_serdes_map_fabric_lane121.BCM8879X=rx121:tx121 lane_to_serdes_map_fabric_lane122.BCM8879X=rx122:tx122 lane_to_serdes_map_fabric_lane123.BCM8879X=rx123:tx123 -lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx127 -lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx126 -lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx124 -lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx125 +lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx127 -lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx131 -lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx130 -lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx129 -lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx128 +lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx131 lane_to_serdes_map_fabric_lane132.BCM8879X=rx132:tx132 lane_to_serdes_map_fabric_lane133.BCM8879X=rx133:tx133 @@ -213,23 +214,23 @@ lane_to_serdes_map_fabric_lane134.BCM8879X=rx134:tx134 lane_to_serdes_map_fabric_lane135.BCM8879X=rx135:tx135 lane_to_serdes_map_fabric_lane136.BCM8879X=rx136:tx136 -lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx138 -lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx137 +lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx137 +lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx138 lane_to_serdes_map_fabric_lane139.BCM8879X=rx139:tx139 -lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx143 -lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx142 -lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx141 -lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx140 +lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx140 +lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx143 -lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx145 -lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx147 -lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx144 -lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx146 +lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx147 -lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx150 +lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx148 lane_to_serdes_map_fabric_lane149.BCM8879X=rx149:tx149 -lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx148 +lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx150 lane_to_serdes_map_fabric_lane151.BCM8879X=rx151:tx151 lane_to_serdes_map_fabric_lane152.BCM8879X=rx152:tx152 @@ -237,91 +238,91 @@ lane_to_serdes_map_fabric_lane153.BCM8879X=rx153:tx153 lane_to_serdes_map_fabric_lane154.BCM8879X=rx154:tx154 lane_to_serdes_map_fabric_lane155.BCM8879X=rx155:tx155 -lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx157 -lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx159 -lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx156 -lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx158 +lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx156 +lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx157 +lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx158 +lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx159 lane_to_serdes_map_fabric_lane160.BCM8879X=rx160:tx160 -lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx162 -lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx161 +lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx162 lane_to_serdes_map_fabric_lane163.BCM8879X=rx163:tx163 -lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx166 -lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx164 -lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx165 +lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx166 lane_to_serdes_map_fabric_lane167.BCM8879X=rx167:tx167 -lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx170 -lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx168 -lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx169 +lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx168 +lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx170 lane_to_serdes_map_fabric_lane171.BCM8879X=rx171:tx171 -lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx173 -lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx174 -lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx175 -lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx172 +lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx172 +lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx173 +lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx174 +lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx175 lane_to_serdes_map_fabric_lane176.BCM8879X=rx176:tx176 -lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx178 -lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx177 +lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx178 lane_to_serdes_map_fabric_lane179.BCM8879X=rx179:tx179 -lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx182 -lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx180 -lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx181 +lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx180 +lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx182 lane_to_serdes_map_fabric_lane183.BCM8879X=rx183:tx183 -lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx187 -lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx184 +lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx185 lane_to_serdes_map_fabric_lane186.BCM8879X=rx186:tx186 -lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx185 +lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx187 -lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx190 +lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx188 lane_to_serdes_map_fabric_lane189.BCM8879X=rx189:tx189 -lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx191 -lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx188 +lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx190 +lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx191 -phy_rx_polarity_flip_fabric0.BCM8879X=0 -phy_rx_polarity_flip_fabric1.BCM8879X=1 -phy_rx_polarity_flip_fabric2.BCM8879X=0 -phy_rx_polarity_flip_fabric3.BCM8879X=1 +phy_rx_polarity_flip_fabric0.BCM8879X=1 +phy_rx_polarity_flip_fabric1.BCM8879X=0 +phy_rx_polarity_flip_fabric2.BCM8879X=1 +phy_rx_polarity_flip_fabric3.BCM8879X=0 -phy_rx_polarity_flip_fabric4.BCM8879X=1 -phy_rx_polarity_flip_fabric5.BCM8879X=0 -phy_rx_polarity_flip_fabric6.BCM8879X=1 -phy_rx_polarity_flip_fabric7.BCM8879X=0 +phy_rx_polarity_flip_fabric4.BCM8879X=0 +phy_rx_polarity_flip_fabric5.BCM8879X=1 +phy_rx_polarity_flip_fabric6.BCM8879X=0 +phy_rx_polarity_flip_fabric7.BCM8879X=1 phy_rx_polarity_flip_fabric8.BCM8879X=1 phy_rx_polarity_flip_fabric9.BCM8879X=0 phy_rx_polarity_flip_fabric10.BCM8879X=1 phy_rx_polarity_flip_fabric11.BCM8879X=0 -phy_rx_polarity_flip_fabric12.BCM8879X=1 -phy_rx_polarity_flip_fabric13.BCM8879X=0 +phy_rx_polarity_flip_fabric12.BCM8879X=0 +phy_rx_polarity_flip_fabric13.BCM8879X=1 phy_rx_polarity_flip_fabric14.BCM8879X=0 phy_rx_polarity_flip_fabric15.BCM8879X=1 -phy_rx_polarity_flip_fabric16.BCM8879X=0 -phy_rx_polarity_flip_fabric17.BCM8879X=1 -phy_rx_polarity_flip_fabric18.BCM8879X=0 -phy_rx_polarity_flip_fabric19.BCM8879X=1 +phy_rx_polarity_flip_fabric16.BCM8879X=1 +phy_rx_polarity_flip_fabric17.BCM8879X=0 +phy_rx_polarity_flip_fabric18.BCM8879X=1 +phy_rx_polarity_flip_fabric19.BCM8879X=0 -phy_rx_polarity_flip_fabric20.BCM8879X=0 -phy_rx_polarity_flip_fabric21.BCM8879X=1 +phy_rx_polarity_flip_fabric20.BCM8879X=1 +phy_rx_polarity_flip_fabric21.BCM8879X=0 phy_rx_polarity_flip_fabric22.BCM8879X=1 phy_rx_polarity_flip_fabric23.BCM8879X=0 -phy_rx_polarity_flip_fabric24.BCM8879X=0 -phy_rx_polarity_flip_fabric25.BCM8879X=1 -phy_rx_polarity_flip_fabric26.BCM8879X=0 -phy_rx_polarity_flip_fabric27.BCM8879X=1 +phy_rx_polarity_flip_fabric24.BCM8879X=1 +phy_rx_polarity_flip_fabric25.BCM8879X=0 +phy_rx_polarity_flip_fabric26.BCM8879X=1 +phy_rx_polarity_flip_fabric27.BCM8879X=0 -phy_rx_polarity_flip_fabric28.BCM8879X=1 -phy_rx_polarity_flip_fabric29.BCM8879X=0 -phy_rx_polarity_flip_fabric30.BCM8879X=1 -phy_rx_polarity_flip_fabric31.BCM8879X=0 +phy_rx_polarity_flip_fabric28.BCM8879X=0 +phy_rx_polarity_flip_fabric29.BCM8879X=1 +phy_rx_polarity_flip_fabric30.BCM8879X=0 +phy_rx_polarity_flip_fabric31.BCM8879X=1 phy_rx_polarity_flip_fabric32.BCM8879X=1 phy_rx_polarity_flip_fabric33.BCM8879X=0 @@ -330,11 +331,11 @@ phy_rx_polarity_flip_fabric35.BCM8879X=0 phy_rx_polarity_flip_fabric36.BCM8879X=0 phy_rx_polarity_flip_fabric37.BCM8879X=1 -phy_rx_polarity_flip_fabric38.BCM8879X=1 -phy_rx_polarity_flip_fabric39.BCM8879X=0 +phy_rx_polarity_flip_fabric38.BCM8879X=0 +phy_rx_polarity_flip_fabric39.BCM8879X=1 -phy_rx_polarity_flip_fabric40.BCM8879X=0 -phy_rx_polarity_flip_fabric41.BCM8879X=1 +phy_rx_polarity_flip_fabric40.BCM8879X=1 +phy_rx_polarity_flip_fabric41.BCM8879X=0 phy_rx_polarity_flip_fabric42.BCM8879X=1 phy_rx_polarity_flip_fabric43.BCM8879X=0 @@ -350,63 +351,63 @@ phy_rx_polarity_flip_fabric51.BCM8879X=1 phy_rx_polarity_flip_fabric52.BCM8879X=1 phy_rx_polarity_flip_fabric53.BCM8879X=0 -phy_rx_polarity_flip_fabric54.BCM8879X=0 -phy_rx_polarity_flip_fabric55.BCM8879X=1 +phy_rx_polarity_flip_fabric54.BCM8879X=1 +phy_rx_polarity_flip_fabric55.BCM8879X=0 -phy_rx_polarity_flip_fabric56.BCM8879X=1 -phy_rx_polarity_flip_fabric57.BCM8879X=0 +phy_rx_polarity_flip_fabric56.BCM8879X=0 +phy_rx_polarity_flip_fabric57.BCM8879X=1 phy_rx_polarity_flip_fabric58.BCM8879X=0 phy_rx_polarity_flip_fabric59.BCM8879X=1 -phy_rx_polarity_flip_fabric60.BCM8879X=1 -phy_rx_polarity_flip_fabric61.BCM8879X=0 -phy_rx_polarity_flip_fabric62.BCM8879X=1 -phy_rx_polarity_flip_fabric63.BCM8879X=0 +phy_rx_polarity_flip_fabric60.BCM8879X=0 +phy_rx_polarity_flip_fabric61.BCM8879X=1 +phy_rx_polarity_flip_fabric62.BCM8879X=0 +phy_rx_polarity_flip_fabric63.BCM8879X=1 -phy_rx_polarity_flip_fabric64.BCM8879X=0 -phy_rx_polarity_flip_fabric65.BCM8879X=1 -phy_rx_polarity_flip_fabric66.BCM8879X=0 -phy_rx_polarity_flip_fabric67.BCM8879X=1 +phy_rx_polarity_flip_fabric64.BCM8879X=1 +phy_rx_polarity_flip_fabric65.BCM8879X=0 +phy_rx_polarity_flip_fabric66.BCM8879X=1 +phy_rx_polarity_flip_fabric67.BCM8879X=0 -phy_rx_polarity_flip_fabric68.BCM8879X=1 -phy_rx_polarity_flip_fabric69.BCM8879X=0 -phy_rx_polarity_flip_fabric70.BCM8879X=1 -phy_rx_polarity_flip_fabric71.BCM8879X=0 +phy_rx_polarity_flip_fabric68.BCM8879X=0 +phy_rx_polarity_flip_fabric69.BCM8879X=1 +phy_rx_polarity_flip_fabric70.BCM8879X=0 +phy_rx_polarity_flip_fabric71.BCM8879X=1 -phy_rx_polarity_flip_fabric72.BCM8879X=0 -phy_rx_polarity_flip_fabric73.BCM8879X=1 -phy_rx_polarity_flip_fabric74.BCM8879X=0 -phy_rx_polarity_flip_fabric75.BCM8879X=1 +phy_rx_polarity_flip_fabric72.BCM8879X=1 +phy_rx_polarity_flip_fabric73.BCM8879X=0 +phy_rx_polarity_flip_fabric74.BCM8879X=1 +phy_rx_polarity_flip_fabric75.BCM8879X=0 -phy_rx_polarity_flip_fabric76.BCM8879X=0 -phy_rx_polarity_flip_fabric77.BCM8879X=1 +phy_rx_polarity_flip_fabric76.BCM8879X=1 +phy_rx_polarity_flip_fabric77.BCM8879X=0 phy_rx_polarity_flip_fabric78.BCM8879X=1 phy_rx_polarity_flip_fabric79.BCM8879X=0 phy_rx_polarity_flip_fabric80.BCM8879X=0 phy_rx_polarity_flip_fabric81.BCM8879X=1 -phy_rx_polarity_flip_fabric82.BCM8879X=1 -phy_rx_polarity_flip_fabric83.BCM8879X=0 +phy_rx_polarity_flip_fabric82.BCM8879X=0 +phy_rx_polarity_flip_fabric83.BCM8879X=1 phy_rx_polarity_flip_fabric84.BCM8879X=1 phy_rx_polarity_flip_fabric85.BCM8879X=0 phy_rx_polarity_flip_fabric86.BCM8879X=1 phy_rx_polarity_flip_fabric87.BCM8879X=0 -phy_rx_polarity_flip_fabric88.BCM8879X=1 -phy_rx_polarity_flip_fabric89.BCM8879X=0 -phy_rx_polarity_flip_fabric90.BCM8879X=1 -phy_rx_polarity_flip_fabric91.BCM8879X=0 +phy_rx_polarity_flip_fabric88.BCM8879X=0 +phy_rx_polarity_flip_fabric89.BCM8879X=1 +phy_rx_polarity_flip_fabric90.BCM8879X=0 +phy_rx_polarity_flip_fabric91.BCM8879X=1 -phy_rx_polarity_flip_fabric92.BCM8879X=0 -phy_rx_polarity_flip_fabric93.BCM8879X=1 -phy_rx_polarity_flip_fabric94.BCM8879X=0 -phy_rx_polarity_flip_fabric95.BCM8879X=1 +phy_rx_polarity_flip_fabric92.BCM8879X=1 +phy_rx_polarity_flip_fabric93.BCM8879X=0 +phy_rx_polarity_flip_fabric94.BCM8879X=1 +phy_rx_polarity_flip_fabric95.BCM8879X=0 -phy_rx_polarity_flip_fabric96.BCM8879X=0 -phy_rx_polarity_flip_fabric97.BCM8879X=1 -phy_rx_polarity_flip_fabric98.BCM8879X=0 -phy_rx_polarity_flip_fabric99.BCM8879X=1 +phy_rx_polarity_flip_fabric96.BCM8879X=1 +phy_rx_polarity_flip_fabric97.BCM8879X=0 +phy_rx_polarity_flip_fabric98.BCM8879X=1 +phy_rx_polarity_flip_fabric99.BCM8879X=0 phy_rx_polarity_flip_fabric100.BCM8879X=0 phy_rx_polarity_flip_fabric101.BCM8879X=1 @@ -418,10 +419,10 @@ phy_rx_polarity_flip_fabric105.BCM8879X=1 phy_rx_polarity_flip_fabric106.BCM8879X=0 phy_rx_polarity_flip_fabric107.BCM8879X=1 -phy_rx_polarity_flip_fabric108.BCM8879X=1 -phy_rx_polarity_flip_fabric109.BCM8879X=0 -phy_rx_polarity_flip_fabric110.BCM8879X=1 -phy_rx_polarity_flip_fabric111.BCM8879X=0 +phy_rx_polarity_flip_fabric108.BCM8879X=0 +phy_rx_polarity_flip_fabric109.BCM8879X=1 +phy_rx_polarity_flip_fabric110.BCM8879X=0 +phy_rx_polarity_flip_fabric111.BCM8879X=1 phy_rx_polarity_flip_fabric112.BCM8879X=0 phy_rx_polarity_flip_fabric113.BCM8879X=1 @@ -433,223 +434,223 @@ phy_rx_polarity_flip_fabric117.BCM8879X=0 phy_rx_polarity_flip_fabric118.BCM8879X=1 phy_rx_polarity_flip_fabric119.BCM8879X=0 -phy_rx_polarity_flip_fabric120.BCM8879X=0 -phy_rx_polarity_flip_fabric121.BCM8879X=1 -phy_rx_polarity_flip_fabric122.BCM8879X=0 -phy_rx_polarity_flip_fabric123.BCM8879X=1 +phy_rx_polarity_flip_fabric120.BCM8879X=1 +phy_rx_polarity_flip_fabric121.BCM8879X=0 +phy_rx_polarity_flip_fabric122.BCM8879X=1 +phy_rx_polarity_flip_fabric123.BCM8879X=0 phy_rx_polarity_flip_fabric124.BCM8879X=0 phy_rx_polarity_flip_fabric125.BCM8879X=1 phy_rx_polarity_flip_fabric126.BCM8879X=0 phy_rx_polarity_flip_fabric127.BCM8879X=1 -phy_rx_polarity_flip_fabric128.BCM8879X=0 -phy_rx_polarity_flip_fabric129.BCM8879X=1 -phy_rx_polarity_flip_fabric130.BCM8879X=0 -phy_rx_polarity_flip_fabric131.BCM8879X=1 +phy_rx_polarity_flip_fabric128.BCM8879X=1 +phy_rx_polarity_flip_fabric129.BCM8879X=0 +phy_rx_polarity_flip_fabric130.BCM8879X=1 +phy_rx_polarity_flip_fabric131.BCM8879X=0 -phy_rx_polarity_flip_fabric132.BCM8879X=1 -phy_rx_polarity_flip_fabric133.BCM8879X=0 -phy_rx_polarity_flip_fabric134.BCM8879X=1 -phy_rx_polarity_flip_fabric135.BCM8879X=0 +phy_rx_polarity_flip_fabric132.BCM8879X=0 +phy_rx_polarity_flip_fabric133.BCM8879X=1 +phy_rx_polarity_flip_fabric134.BCM8879X=0 +phy_rx_polarity_flip_fabric135.BCM8879X=1 phy_rx_polarity_flip_fabric136.BCM8879X=1 phy_rx_polarity_flip_fabric137.BCM8879X=0 phy_rx_polarity_flip_fabric138.BCM8879X=1 phy_rx_polarity_flip_fabric139.BCM8879X=0 -phy_rx_polarity_flip_fabric140.BCM8879X=0 -phy_rx_polarity_flip_fabric141.BCM8879X=1 -phy_rx_polarity_flip_fabric142.BCM8879X=0 -phy_rx_polarity_flip_fabric143.BCM8879X=1 +phy_rx_polarity_flip_fabric140.BCM8879X=1 +phy_rx_polarity_flip_fabric141.BCM8879X=0 +phy_rx_polarity_flip_fabric142.BCM8879X=1 +phy_rx_polarity_flip_fabric143.BCM8879X=0 -phy_rx_polarity_flip_fabric144.BCM8879X=0 -phy_rx_polarity_flip_fabric145.BCM8879X=1 -phy_rx_polarity_flip_fabric146.BCM8879X=0 -phy_rx_polarity_flip_fabric147.BCM8879X=1 +phy_rx_polarity_flip_fabric144.BCM8879X=1 +phy_rx_polarity_flip_fabric145.BCM8879X=0 +phy_rx_polarity_flip_fabric146.BCM8879X=1 +phy_rx_polarity_flip_fabric147.BCM8879X=0 phy_rx_polarity_flip_fabric148.BCM8879X=1 phy_rx_polarity_flip_fabric149.BCM8879X=0 phy_rx_polarity_flip_fabric150.BCM8879X=1 phy_rx_polarity_flip_fabric151.BCM8879X=0 -phy_rx_polarity_flip_fabric152.BCM8879X=1 -phy_rx_polarity_flip_fabric153.BCM8879X=0 -phy_rx_polarity_flip_fabric154.BCM8879X=1 -phy_rx_polarity_flip_fabric155.BCM8879X=0 +phy_rx_polarity_flip_fabric152.BCM8879X=0 +phy_rx_polarity_flip_fabric153.BCM8879X=1 +phy_rx_polarity_flip_fabric154.BCM8879X=0 +phy_rx_polarity_flip_fabric155.BCM8879X=1 -phy_rx_polarity_flip_fabric156.BCM8879X=0 -phy_rx_polarity_flip_fabric157.BCM8879X=1 -phy_rx_polarity_flip_fabric158.BCM8879X=0 -phy_rx_polarity_flip_fabric159.BCM8879X=1 +phy_rx_polarity_flip_fabric156.BCM8879X=1 +phy_rx_polarity_flip_fabric157.BCM8879X=0 +phy_rx_polarity_flip_fabric158.BCM8879X=1 +phy_rx_polarity_flip_fabric159.BCM8879X=0 -phy_rx_polarity_flip_fabric160.BCM8879X=0 -phy_rx_polarity_flip_fabric161.BCM8879X=1 -phy_rx_polarity_flip_fabric162.BCM8879X=0 -phy_rx_polarity_flip_fabric163.BCM8879X=1 +phy_rx_polarity_flip_fabric160.BCM8879X=1 +phy_rx_polarity_flip_fabric161.BCM8879X=0 +phy_rx_polarity_flip_fabric162.BCM8879X=1 +phy_rx_polarity_flip_fabric163.BCM8879X=0 phy_rx_polarity_flip_fabric164.BCM8879X=0 phy_rx_polarity_flip_fabric165.BCM8879X=1 phy_rx_polarity_flip_fabric166.BCM8879X=0 phy_rx_polarity_flip_fabric167.BCM8879X=1 -phy_rx_polarity_flip_fabric168.BCM8879X=0 -phy_rx_polarity_flip_fabric169.BCM8879X=1 -phy_rx_polarity_flip_fabric170.BCM8879X=0 -phy_rx_polarity_flip_fabric171.BCM8879X=1 +phy_rx_polarity_flip_fabric168.BCM8879X=1 +phy_rx_polarity_flip_fabric169.BCM8879X=0 +phy_rx_polarity_flip_fabric170.BCM8879X=1 +phy_rx_polarity_flip_fabric171.BCM8879X=0 phy_rx_polarity_flip_fabric172.BCM8879X=1 phy_rx_polarity_flip_fabric173.BCM8879X=0 phy_rx_polarity_flip_fabric174.BCM8879X=1 phy_rx_polarity_flip_fabric175.BCM8879X=0 -phy_rx_polarity_flip_fabric176.BCM8879X=1 -phy_rx_polarity_flip_fabric177.BCM8879X=0 -phy_rx_polarity_flip_fabric178.BCM8879X=1 -phy_rx_polarity_flip_fabric179.BCM8879X=0 +phy_rx_polarity_flip_fabric176.BCM8879X=0 +phy_rx_polarity_flip_fabric177.BCM8879X=1 +phy_rx_polarity_flip_fabric178.BCM8879X=0 +phy_rx_polarity_flip_fabric179.BCM8879X=1 -phy_rx_polarity_flip_fabric180.BCM8879X=0 -phy_rx_polarity_flip_fabric181.BCM8879X=1 -phy_rx_polarity_flip_fabric182.BCM8879X=0 -phy_rx_polarity_flip_fabric183.BCM8879X=1 +phy_rx_polarity_flip_fabric180.BCM8879X=1 +phy_rx_polarity_flip_fabric181.BCM8879X=0 +phy_rx_polarity_flip_fabric182.BCM8879X=1 +phy_rx_polarity_flip_fabric183.BCM8879X=0 phy_rx_polarity_flip_fabric184.BCM8879X=0 phy_rx_polarity_flip_fabric185.BCM8879X=1 phy_rx_polarity_flip_fabric186.BCM8879X=0 phy_rx_polarity_flip_fabric187.BCM8879X=1 -phy_rx_polarity_flip_fabric188.BCM8879X=0 -phy_rx_polarity_flip_fabric189.BCM8879X=1 -phy_rx_polarity_flip_fabric190.BCM8879X=0 -phy_rx_polarity_flip_fabric191.BCM8879X=1 +phy_rx_polarity_flip_fabric188.BCM8879X=1 +phy_rx_polarity_flip_fabric189.BCM8879X=0 +phy_rx_polarity_flip_fabric190.BCM8879X=1 +phy_rx_polarity_flip_fabric191.BCM8879X=0 phy_tx_polarity_flip_fabric0.BCM8879X=0 -phy_tx_polarity_flip_fabric1.BCM8879X=0 -phy_tx_polarity_flip_fabric2.BCM8879X=1 +phy_tx_polarity_flip_fabric1.BCM8879X=1 +phy_tx_polarity_flip_fabric2.BCM8879X=0 phy_tx_polarity_flip_fabric3.BCM8879X=1 -phy_tx_polarity_flip_fabric4.BCM8879X=0 -phy_tx_polarity_flip_fabric5.BCM8879X=1 +phy_tx_polarity_flip_fabric4.BCM8879X=1 +phy_tx_polarity_flip_fabric5.BCM8879X=0 phy_tx_polarity_flip_fabric6.BCM8879X=1 phy_tx_polarity_flip_fabric7.BCM8879X=0 phy_tx_polarity_flip_fabric8.BCM8879X=0 -phy_tx_polarity_flip_fabric9.BCM8879X=0 -phy_tx_polarity_flip_fabric10.BCM8879X=1 +phy_tx_polarity_flip_fabric9.BCM8879X=1 +phy_tx_polarity_flip_fabric10.BCM8879X=0 phy_tx_polarity_flip_fabric11.BCM8879X=1 -phy_tx_polarity_flip_fabric12.BCM8879X=0 -phy_tx_polarity_flip_fabric13.BCM8879X=1 +phy_tx_polarity_flip_fabric12.BCM8879X=1 +phy_tx_polarity_flip_fabric13.BCM8879X=0 phy_tx_polarity_flip_fabric14.BCM8879X=1 -phy_tx_polarity_flip_fabric15.BCM8879X=1 +phy_tx_polarity_flip_fabric15.BCM8879X=0 -phy_tx_polarity_flip_fabric16.BCM8879X=1 +phy_tx_polarity_flip_fabric16.BCM8879X=0 phy_tx_polarity_flip_fabric17.BCM8879X=1 -phy_tx_polarity_flip_fabric18.BCM8879X=1 -phy_tx_polarity_flip_fabric19.BCM8879X=0 +phy_tx_polarity_flip_fabric18.BCM8879X=0 +phy_tx_polarity_flip_fabric19.BCM8879X=1 -phy_tx_polarity_flip_fabric20.BCM8879X=1 +phy_tx_polarity_flip_fabric20.BCM8879X=0 phy_tx_polarity_flip_fabric21.BCM8879X=1 -phy_tx_polarity_flip_fabric22.BCM8879X=1 -phy_tx_polarity_flip_fabric23.BCM8879X=0 +phy_tx_polarity_flip_fabric22.BCM8879X=0 +phy_tx_polarity_flip_fabric23.BCM8879X=1 -phy_tx_polarity_flip_fabric24.BCM8879X=1 +phy_tx_polarity_flip_fabric24.BCM8879X=0 phy_tx_polarity_flip_fabric25.BCM8879X=1 phy_tx_polarity_flip_fabric26.BCM8879X=0 -phy_tx_polarity_flip_fabric27.BCM8879X=0 +phy_tx_polarity_flip_fabric27.BCM8879X=1 phy_tx_polarity_flip_fabric28.BCM8879X=1 phy_tx_polarity_flip_fabric29.BCM8879X=0 -phy_tx_polarity_flip_fabric30.BCM8879X=0 -phy_tx_polarity_flip_fabric31.BCM8879X=1 +phy_tx_polarity_flip_fabric30.BCM8879X=1 +phy_tx_polarity_flip_fabric31.BCM8879X=0 phy_tx_polarity_flip_fabric32.BCM8879X=0 -phy_tx_polarity_flip_fabric33.BCM8879X=0 -phy_tx_polarity_flip_fabric34.BCM8879X=1 +phy_tx_polarity_flip_fabric33.BCM8879X=1 +phy_tx_polarity_flip_fabric34.BCM8879X=0 phy_tx_polarity_flip_fabric35.BCM8879X=1 phy_tx_polarity_flip_fabric36.BCM8879X=1 -phy_tx_polarity_flip_fabric37.BCM8879X=1 +phy_tx_polarity_flip_fabric37.BCM8879X=0 phy_tx_polarity_flip_fabric38.BCM8879X=1 phy_tx_polarity_flip_fabric39.BCM8879X=0 phy_tx_polarity_flip_fabric40.BCM8879X=0 phy_tx_polarity_flip_fabric41.BCM8879X=1 phy_tx_polarity_flip_fabric42.BCM8879X=0 -phy_tx_polarity_flip_fabric43.BCM8879X=0 +phy_tx_polarity_flip_fabric43.BCM8879X=1 -phy_tx_polarity_flip_fabric44.BCM8879X=1 +phy_tx_polarity_flip_fabric44.BCM8879X=0 phy_tx_polarity_flip_fabric45.BCM8879X=1 phy_tx_polarity_flip_fabric46.BCM8879X=0 phy_tx_polarity_flip_fabric47.BCM8879X=1 -phy_tx_polarity_flip_fabric48.BCM8879X=0 -phy_tx_polarity_flip_fabric49.BCM8879X=1 +phy_tx_polarity_flip_fabric48.BCM8879X=1 +phy_tx_polarity_flip_fabric49.BCM8879X=0 phy_tx_polarity_flip_fabric50.BCM8879X=1 -phy_tx_polarity_flip_fabric51.BCM8879X=1 +phy_tx_polarity_flip_fabric51.BCM8879X=0 -phy_tx_polarity_flip_fabric52.BCM8879X=1 +phy_tx_polarity_flip_fabric52.BCM8879X=0 phy_tx_polarity_flip_fabric53.BCM8879X=1 phy_tx_polarity_flip_fabric54.BCM8879X=0 phy_tx_polarity_flip_fabric55.BCM8879X=1 -phy_tx_polarity_flip_fabric56.BCM8879X=0 +phy_tx_polarity_flip_fabric56.BCM8879X=1 phy_tx_polarity_flip_fabric57.BCM8879X=0 -phy_tx_polarity_flip_fabric58.BCM8879X=0 -phy_tx_polarity_flip_fabric59.BCM8879X=1 +phy_tx_polarity_flip_fabric58.BCM8879X=1 +phy_tx_polarity_flip_fabric59.BCM8879X=0 phy_tx_polarity_flip_fabric60.BCM8879X=1 phy_tx_polarity_flip_fabric61.BCM8879X=0 -phy_tx_polarity_flip_fabric62.BCM8879X=0 -phy_tx_polarity_flip_fabric63.BCM8879X=1 +phy_tx_polarity_flip_fabric62.BCM8879X=1 +phy_tx_polarity_flip_fabric63.BCM8879X=0 -phy_tx_polarity_flip_fabric64.BCM8879X=1 +phy_tx_polarity_flip_fabric64.BCM8879X=0 phy_tx_polarity_flip_fabric65.BCM8879X=1 phy_tx_polarity_flip_fabric66.BCM8879X=0 -phy_tx_polarity_flip_fabric67.BCM8879X=0 +phy_tx_polarity_flip_fabric67.BCM8879X=1 phy_tx_polarity_flip_fabric68.BCM8879X=1 phy_tx_polarity_flip_fabric69.BCM8879X=0 phy_tx_polarity_flip_fabric70.BCM8879X=1 phy_tx_polarity_flip_fabric71.BCM8879X=0 -phy_tx_polarity_flip_fabric72.BCM8879X=1 +phy_tx_polarity_flip_fabric72.BCM8879X=0 phy_tx_polarity_flip_fabric73.BCM8879X=1 -phy_tx_polarity_flip_fabric74.BCM8879X=1 -phy_tx_polarity_flip_fabric75.BCM8879X=0 +phy_tx_polarity_flip_fabric74.BCM8879X=0 +phy_tx_polarity_flip_fabric75.BCM8879X=1 -phy_tx_polarity_flip_fabric76.BCM8879X=1 +phy_tx_polarity_flip_fabric76.BCM8879X=0 phy_tx_polarity_flip_fabric77.BCM8879X=1 phy_tx_polarity_flip_fabric78.BCM8879X=0 phy_tx_polarity_flip_fabric79.BCM8879X=1 phy_tx_polarity_flip_fabric80.BCM8879X=1 -phy_tx_polarity_flip_fabric81.BCM8879X=1 -phy_tx_polarity_flip_fabric82.BCM8879X=0 -phy_tx_polarity_flip_fabric83.BCM8879X=1 +phy_tx_polarity_flip_fabric81.BCM8879X=0 +phy_tx_polarity_flip_fabric82.BCM8879X=1 +phy_tx_polarity_flip_fabric83.BCM8879X=0 -phy_tx_polarity_flip_fabric84.BCM8879X=1 -phy_tx_polarity_flip_fabric85.BCM8879X=0 -phy_tx_polarity_flip_fabric86.BCM8879X=1 -phy_tx_polarity_flip_fabric87.BCM8879X=0 +phy_tx_polarity_flip_fabric84.BCM8879X=0 +phy_tx_polarity_flip_fabric85.BCM8879X=1 +phy_tx_polarity_flip_fabric86.BCM8879X=0 +phy_tx_polarity_flip_fabric87.BCM8879X=1 -phy_tx_polarity_flip_fabric88.BCM8879X=0 +phy_tx_polarity_flip_fabric88.BCM8879X=1 phy_tx_polarity_flip_fabric89.BCM8879X=0 phy_tx_polarity_flip_fabric90.BCM8879X=1 -phy_tx_polarity_flip_fabric91.BCM8879X=1 +phy_tx_polarity_flip_fabric91.BCM8879X=0 phy_tx_polarity_flip_fabric92.BCM8879X=0 phy_tx_polarity_flip_fabric93.BCM8879X=1 -phy_tx_polarity_flip_fabric94.BCM8879X=1 -phy_tx_polarity_flip_fabric95.BCM8879X=0 +phy_tx_polarity_flip_fabric94.BCM8879X=0 +phy_tx_polarity_flip_fabric95.BCM8879X=1 -phy_tx_polarity_flip_fabric96.BCM8879X=1 +phy_tx_polarity_flip_fabric96.BCM8879X=0 phy_tx_polarity_flip_fabric97.BCM8879X=1 phy_tx_polarity_flip_fabric98.BCM8879X=0 -phy_tx_polarity_flip_fabric99.BCM8879X=0 +phy_tx_polarity_flip_fabric99.BCM8879X=1 -phy_tx_polarity_flip_fabric100.BCM8879X=0 -phy_tx_polarity_flip_fabric101.BCM8879X=1 +phy_tx_polarity_flip_fabric100.BCM8879X=1 +phy_tx_polarity_flip_fabric101.BCM8879X=0 phy_tx_polarity_flip_fabric102.BCM8879X=1 phy_tx_polarity_flip_fabric103.BCM8879X=0 @@ -658,28 +659,28 @@ phy_tx_polarity_flip_fabric105.BCM8879X=0 phy_tx_polarity_flip_fabric106.BCM8879X=1 phy_tx_polarity_flip_fabric107.BCM8879X=0 -phy_tx_polarity_flip_fabric108.BCM8879X=0 -phy_tx_polarity_flip_fabric109.BCM8879X=1 -phy_tx_polarity_flip_fabric110.BCM8879X=0 -phy_tx_polarity_flip_fabric111.BCM8879X=1 +phy_tx_polarity_flip_fabric108.BCM8879X=1 +phy_tx_polarity_flip_fabric109.BCM8879X=0 +phy_tx_polarity_flip_fabric110.BCM8879X=1 +phy_tx_polarity_flip_fabric111.BCM8879X=0 -phy_tx_polarity_flip_fabric112.BCM8879X=0 -phy_tx_polarity_flip_fabric113.BCM8879X=1 -phy_tx_polarity_flip_fabric114.BCM8879X=0 -phy_tx_polarity_flip_fabric115.BCM8879X=1 +phy_tx_polarity_flip_fabric112.BCM8879X=1 +phy_tx_polarity_flip_fabric113.BCM8879X=0 +phy_tx_polarity_flip_fabric114.BCM8879X=1 +phy_tx_polarity_flip_fabric115.BCM8879X=0 phy_tx_polarity_flip_fabric116.BCM8879X=0 phy_tx_polarity_flip_fabric117.BCM8879X=1 phy_tx_polarity_flip_fabric118.BCM8879X=0 phy_tx_polarity_flip_fabric119.BCM8879X=1 -phy_tx_polarity_flip_fabric120.BCM8879X=1 -phy_tx_polarity_flip_fabric121.BCM8879X=0 -phy_tx_polarity_flip_fabric122.BCM8879X=1 -phy_tx_polarity_flip_fabric123.BCM8879X=0 +phy_tx_polarity_flip_fabric120.BCM8879X=0 +phy_tx_polarity_flip_fabric121.BCM8879X=1 +phy_tx_polarity_flip_fabric122.BCM8879X=0 +phy_tx_polarity_flip_fabric123.BCM8879X=1 -phy_tx_polarity_flip_fabric124.BCM8879X=0 -phy_tx_polarity_flip_fabric125.BCM8879X=1 +phy_tx_polarity_flip_fabric124.BCM8879X=1 +phy_tx_polarity_flip_fabric125.BCM8879X=0 phy_tx_polarity_flip_fabric126.BCM8879X=1 phy_tx_polarity_flip_fabric127.BCM8879X=0 @@ -688,14 +689,14 @@ phy_tx_polarity_flip_fabric129.BCM8879X=1 phy_tx_polarity_flip_fabric130.BCM8879X=0 phy_tx_polarity_flip_fabric131.BCM8879X=1 -phy_tx_polarity_flip_fabric132.BCM8879X=0 -phy_tx_polarity_flip_fabric133.BCM8879X=1 -phy_tx_polarity_flip_fabric134.BCM8879X=0 -phy_tx_polarity_flip_fabric135.BCM8879X=1 +phy_tx_polarity_flip_fabric132.BCM8879X=1 +phy_tx_polarity_flip_fabric133.BCM8879X=0 +phy_tx_polarity_flip_fabric134.BCM8879X=1 +phy_tx_polarity_flip_fabric135.BCM8879X=0 phy_tx_polarity_flip_fabric136.BCM8879X=0 -phy_tx_polarity_flip_fabric137.BCM8879X=0 -phy_tx_polarity_flip_fabric138.BCM8879X=1 +phy_tx_polarity_flip_fabric137.BCM8879X=1 +phy_tx_polarity_flip_fabric138.BCM8879X=0 phy_tx_polarity_flip_fabric139.BCM8879X=1 phy_tx_polarity_flip_fabric140.BCM8879X=0 @@ -704,8 +705,8 @@ phy_tx_polarity_flip_fabric142.BCM8879X=0 phy_tx_polarity_flip_fabric143.BCM8879X=1 phy_tx_polarity_flip_fabric144.BCM8879X=0 -phy_tx_polarity_flip_fabric145.BCM8879X=0 -phy_tx_polarity_flip_fabric146.BCM8879X=1 +phy_tx_polarity_flip_fabric145.BCM8879X=1 +phy_tx_polarity_flip_fabric146.BCM8879X=0 phy_tx_polarity_flip_fabric147.BCM8879X=1 phy_tx_polarity_flip_fabric148.BCM8879X=0 @@ -713,57 +714,443 @@ phy_tx_polarity_flip_fabric149.BCM8879X=1 phy_tx_polarity_flip_fabric150.BCM8879X=0 phy_tx_polarity_flip_fabric151.BCM8879X=1 -phy_tx_polarity_flip_fabric152.BCM8879X=0 -phy_tx_polarity_flip_fabric153.BCM8879X=1 -phy_tx_polarity_flip_fabric154.BCM8879X=0 -phy_tx_polarity_flip_fabric155.BCM8879X=1 +phy_tx_polarity_flip_fabric152.BCM8879X=1 +phy_tx_polarity_flip_fabric153.BCM8879X=0 +phy_tx_polarity_flip_fabric154.BCM8879X=1 +phy_tx_polarity_flip_fabric155.BCM8879X=0 phy_tx_polarity_flip_fabric156.BCM8879X=0 -phy_tx_polarity_flip_fabric157.BCM8879X=0 -phy_tx_polarity_flip_fabric158.BCM8879X=1 +phy_tx_polarity_flip_fabric157.BCM8879X=1 +phy_tx_polarity_flip_fabric158.BCM8879X=0 phy_tx_polarity_flip_fabric159.BCM8879X=1 -phy_tx_polarity_flip_fabric160.BCM8879X=1 +phy_tx_polarity_flip_fabric160.BCM8879X=0 phy_tx_polarity_flip_fabric161.BCM8879X=1 phy_tx_polarity_flip_fabric162.BCM8879X=0 -phy_tx_polarity_flip_fabric163.BCM8879X=0 +phy_tx_polarity_flip_fabric163.BCM8879X=1 phy_tx_polarity_flip_fabric164.BCM8879X=1 -phy_tx_polarity_flip_fabric165.BCM8879X=1 -phy_tx_polarity_flip_fabric166.BCM8879X=0 +phy_tx_polarity_flip_fabric165.BCM8879X=0 +phy_tx_polarity_flip_fabric166.BCM8879X=1 phy_tx_polarity_flip_fabric167.BCM8879X=0 -phy_tx_polarity_flip_fabric168.BCM8879X=1 +phy_tx_polarity_flip_fabric168.BCM8879X=0 phy_tx_polarity_flip_fabric169.BCM8879X=1 phy_tx_polarity_flip_fabric170.BCM8879X=0 -phy_tx_polarity_flip_fabric171.BCM8879X=0 +phy_tx_polarity_flip_fabric171.BCM8879X=1 -phy_tx_polarity_flip_fabric172.BCM8879X=1 -phy_tx_polarity_flip_fabric173.BCM8879X=0 -phy_tx_polarity_flip_fabric174.BCM8879X=1 -phy_tx_polarity_flip_fabric175.BCM8879X=0 +phy_tx_polarity_flip_fabric172.BCM8879X=0 +phy_tx_polarity_flip_fabric173.BCM8879X=1 +phy_tx_polarity_flip_fabric174.BCM8879X=0 +phy_tx_polarity_flip_fabric175.BCM8879X=1 -phy_tx_polarity_flip_fabric176.BCM8879X=0 +phy_tx_polarity_flip_fabric176.BCM8879X=1 phy_tx_polarity_flip_fabric177.BCM8879X=0 phy_tx_polarity_flip_fabric178.BCM8879X=1 -phy_tx_polarity_flip_fabric179.BCM8879X=1 +phy_tx_polarity_flip_fabric179.BCM8879X=0 -phy_tx_polarity_flip_fabric180.BCM8879X=1 +phy_tx_polarity_flip_fabric180.BCM8879X=0 phy_tx_polarity_flip_fabric181.BCM8879X=1 phy_tx_polarity_flip_fabric182.BCM8879X=0 -phy_tx_polarity_flip_fabric183.BCM8879X=0 +phy_tx_polarity_flip_fabric183.BCM8879X=1 -phy_tx_polarity_flip_fabric184.BCM8879X=0 -phy_tx_polarity_flip_fabric185.BCM8879X=1 +phy_tx_polarity_flip_fabric184.BCM8879X=1 +phy_tx_polarity_flip_fabric185.BCM8879X=0 phy_tx_polarity_flip_fabric186.BCM8879X=1 phy_tx_polarity_flip_fabric187.BCM8879X=0 -phy_tx_polarity_flip_fabric188.BCM8879X=1 -phy_tx_polarity_flip_fabric189.BCM8879X=0 +phy_tx_polarity_flip_fabric188.BCM8879X=0 +phy_tx_polarity_flip_fabric189.BCM8879X=1 phy_tx_polarity_flip_fabric190.BCM8879X=0 phy_tx_polarity_flip_fabric191.BCM8879X=1 +port_init_cl72_0=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 +port_init_cl72_19=0 +port_init_cl72_20=0 +port_init_cl72_21=0 +port_init_cl72_22=0 +port_init_cl72_23=0 +port_init_cl72_24=0 +port_init_cl72_25=0 +port_init_cl72_26=0 +port_init_cl72_27=0 +port_init_cl72_28=0 +port_init_cl72_29=0 +port_init_cl72_30=0 +port_init_cl72_31=0 +port_init_cl72_32=0 +port_init_cl72_33=0 +port_init_cl72_34=0 +port_init_cl72_35=0 +port_init_cl72_36=0 +port_init_cl72_37=0 +port_init_cl72_38=0 +port_init_cl72_39=0 +port_init_cl72_40=0 +port_init_cl72_41=0 +port_init_cl72_42=0 +port_init_cl72_43=0 +port_init_cl72_44=0 +port_init_cl72_45=0 +port_init_cl72_46=0 +port_init_cl72_47=0 +port_init_cl72_48=0 +port_init_cl72_49=0 +port_init_cl72_50=0 +port_init_cl72_51=0 +port_init_cl72_52=0 +port_init_cl72_53=0 +port_init_cl72_54=0 +port_init_cl72_55=0 +port_init_cl72_56=0 +port_init_cl72_57=0 +port_init_cl72_58=0 +port_init_cl72_59=0 +port_init_cl72_60=0 +port_init_cl72_61=0 +port_init_cl72_62=0 +port_init_cl72_63=0 +port_init_cl72_64=0 +port_init_cl72_65=0 +port_init_cl72_66=0 +port_init_cl72_67=0 +port_init_cl72_68=0 +port_init_cl72_69=0 +port_init_cl72_70=0 +port_init_cl72_71=0 +port_init_cl72_72=0 +port_init_cl72_73=0 +port_init_cl72_74=0 +port_init_cl72_75=0 +port_init_cl72_76=0 +port_init_cl72_77=0 +port_init_cl72_78=0 +port_init_cl72_79=0 +port_init_cl72_80=0 +port_init_cl72_81=0 +port_init_cl72_82=0 +port_init_cl72_83=0 +port_init_cl72_84=0 +port_init_cl72_85=0 +port_init_cl72_86=0 +port_init_cl72_87=0 +port_init_cl72_88=0 +port_init_cl72_89=0 +port_init_cl72_90=0 +port_init_cl72_91=0 +port_init_cl72_92=0 +port_init_cl72_93=0 +port_init_cl72_94=0 +port_init_cl72_95=0 +port_init_cl72_96=0 +port_init_cl72_97=0 +port_init_cl72_98=0 +port_init_cl72_99=0 +port_init_cl72_100=0 +port_init_cl72_101=0 +port_init_cl72_102=0 +port_init_cl72_103=0 +port_init_cl72_104=0 +port_init_cl72_105=0 +port_init_cl72_106=0 +port_init_cl72_107=0 +port_init_cl72_108=0 +port_init_cl72_109=0 +port_init_cl72_110=0 +port_init_cl72_111=0 +port_init_cl72_112=0 +port_init_cl72_113=0 +port_init_cl72_114=0 +port_init_cl72_115=0 +port_init_cl72_116=0 +port_init_cl72_117=0 +port_init_cl72_118=0 +port_init_cl72_119=0 +port_init_cl72_120=0 +port_init_cl72_121=0 +port_init_cl72_122=0 +port_init_cl72_123=0 +port_init_cl72_124=0 +port_init_cl72_125=0 +port_init_cl72_126=0 +port_init_cl72_127=0 +port_init_cl72_128=0 +port_init_cl72_129=0 +port_init_cl72_130=0 +port_init_cl72_131=0 +port_init_cl72_132=0 +port_init_cl72_133=0 +port_init_cl72_134=0 +port_init_cl72_135=0 +port_init_cl72_136=0 +port_init_cl72_137=0 +port_init_cl72_138=0 +port_init_cl72_139=0 +port_init_cl72_140=0 +port_init_cl72_141=0 +port_init_cl72_142=0 +port_init_cl72_143=0 +port_init_cl72_144=0 +port_init_cl72_145=0 +port_init_cl72_146=0 +port_init_cl72_147=0 +port_init_cl72_148=0 +port_init_cl72_149=0 +port_init_cl72_150=0 +port_init_cl72_151=0 +port_init_cl72_152=0 +port_init_cl72_153=0 +port_init_cl72_154=0 +port_init_cl72_155=0 +port_init_cl72_156=0 +port_init_cl72_157=0 +port_init_cl72_158=0 +port_init_cl72_159=0 +port_init_cl72_160=0 +port_init_cl72_161=0 +port_init_cl72_162=0 +port_init_cl72_163=0 +port_init_cl72_164=0 +port_init_cl72_165=0 +port_init_cl72_166=0 +port_init_cl72_167=0 +port_init_cl72_168=0 +port_init_cl72_169=0 +port_init_cl72_170=0 +port_init_cl72_171=0 +port_init_cl72_172=0 +port_init_cl72_173=0 +port_init_cl72_174=0 +port_init_cl72_175=0 +port_init_cl72_176=0 +port_init_cl72_177=0 +port_init_cl72_178=0 +port_init_cl72_179=0 +port_init_cl72_180=0 +port_init_cl72_181=0 +port_init_cl72_182=0 +port_init_cl72_183=0 +port_init_cl72_184=0 +port_init_cl72_185=0 +port_init_cl72_186=0 +port_init_cl72_187=0 +port_init_cl72_188=0 +port_init_cl72_189=0 +port_init_cl72_190=0 +port_init_cl72_191=0 + +serdes_tx_taps_0.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_1.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_2.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_3.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_4.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_5.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_6.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_7.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_8.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_9.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_10.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_11.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_12.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_13.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_14.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_15.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_16.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_17.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_18.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_19.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_20.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_21.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_22.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_23.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_24.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_25.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_26.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_27.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_28.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_29.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_30.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_31.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_32.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_33.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_34.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_35.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_36.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_37.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_38.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_39.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_40.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_41.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_42.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_43.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_44.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_45.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_46.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_47.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_48.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_49.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_50.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_51.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_52.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_53.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_54.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_55.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_56.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_57.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_58.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_59.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_60.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_61.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_62.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_63.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_64.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_65.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_66.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_67.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_68.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_69.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_70.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_71.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_72.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_73.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_74.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_75.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_76.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_77.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_78.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_79.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_80.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_81.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_82.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_83.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_84.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_85.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_86.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_87.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_88.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_89.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_90.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_91.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_92.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_93.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_94.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_95.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_96.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_97.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_98.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_99.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_100.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_101.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_102.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_103.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_104.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_105.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_106.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_107.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_108.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_109.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_110.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_111.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_112.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_113.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_114.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_115.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_116.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_117.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_118.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_119.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_120.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_121.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_122.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_123.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_124.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_125.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_126.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_127.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_128.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_129.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_130.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_131.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_132.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_133.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_134.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_135.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_136.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_137.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_138.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_139.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_140.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_141.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_142.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_143.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_144.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_145.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_146.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_147.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_148.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_149.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_150.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_151.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_152.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_153.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_154.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_155.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_156.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_157.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_158.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_159.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_160.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_161.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_162.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_163.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_164.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_165.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_166.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_167.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_168.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_169.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_170.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_171.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_172.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_173.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_174.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_175.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_176.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_177.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_178.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_179.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_180.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_181.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_182.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_183.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_184.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_185.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_186.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_187.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_188.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_189.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_190.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_191.BCM8879X=pam4:-24:132:-12:0:0:0 + serdes_lane_config_channel_mode_0.0=force_nr serdes_lane_config_channel_mode_1.0=force_nr serdes_lane_config_channel_mode_2.0=force_nr @@ -958,6 +1345,9 @@ serdes_lane_config_channel_mode_190.0=force_nr serdes_lane_config_channel_mode_191.0=force_nr + + + serdes_qrtt_active_0.0=1 serdes_qrtt_active_1.0=1 serdes_qrtt_active_2.0=1 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/1/config-ramon-1-1.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/1/config-ramon-1-1.bcm index f78bb4d806f5..802109801fa3 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/1/config-ramon-1-1.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/1/config-ramon-1-1.bcm @@ -1,7 +1,8 @@ + appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=2 bcm_linkscan_interval.BCM8879X=0 -bcm_stat_interval.BCM8879X=0 +bcm_stat_interval.BCM8879X=4000000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 @@ -20,10 +21,10 @@ mdio_output_delay_int.BCM8879X=25 mem_cache_enable_parity.BCM8879X=1 mm_intr_enable.BCM8879X=0 mm_timeout_usec.BCM8879X=300000 -polled_irq_delay.BCM8879X=500000 +polled_irq_delay.BCM8879X=100000 polled_irq_mode.BCM8879X=1 port_fec.BCM8879X=7 -port_init_cl72.BCM8879X=1 +port_init_cl72.BCM8879X=0 port_init_speed.BCM8879X=53125 rate_ext_mdio_divisor.BCM8879X=14 rate_int_mdio_divisor.BCM8879X=50 @@ -42,134 +43,134 @@ tslam_dma_enable.BCM8879X=0 tslam_intr_enable.BCM8879X=0 tslam_timeout_usec.BCM8879X=5000000 -lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx1 -lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx3 +lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx1 lane_to_serdes_map_fabric_lane2.BCM8879X=rx2:tx2 -lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx0 +lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx3 -lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx5 -lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx6 -lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx7 -lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx4 +lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx4 +lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx5 +lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx7 -lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx10 -lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx8 -lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx11 -lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx9 +lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx11 -lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx13 -lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx15 +lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx13 lane_to_serdes_map_fabric_lane14.BCM8879X=rx14:tx14 -lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx12 +lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx15 -lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx18 -lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx16 -lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx17 +lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx18 lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx19 lane_to_serdes_map_fabric_lane20.BCM8879X=rx20:tx20 -lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx22 -lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx23 -lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx21 +lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx23 lane_to_serdes_map_fabric_lane24.BCM8879X=rx24:tx24 -lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx26 -lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx27 -lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx25 +lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx26 +lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx27 -lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx29 -lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx30 -lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx28 +lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx29 +lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx30 lane_to_serdes_map_fabric_lane31.BCM8879X=rx31:tx31 -lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx34 -lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx32 -lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx35 -lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx33 +lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx35 lane_to_serdes_map_fabric_lane36.BCM8879X=rx36:tx36 -lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx38 -lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx39 -lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx37 - -lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx43 -lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx42 -lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx40 -lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx41 - -lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx46 -lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx44 -lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx45 +lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx39 + +lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx40 +lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx41 +lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx42 +lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx43 + +lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx44 +lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx46 lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx47 -lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx49 -lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx50 -lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx51 -lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx48 +lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx51 -lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx54 +lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx52 lane_to_serdes_map_fabric_lane53.BCM8879X=rx53:tx53 -lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx55 -lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx52 +lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx55 -lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx57 -lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx58 -lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx59 -lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx56 +lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx56 +lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx57 +lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx58 +lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx59 -lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx61 -lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx60 +lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx60 +lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx61 lane_to_serdes_map_fabric_lane62.BCM8879X=rx62:tx62 lane_to_serdes_map_fabric_lane63.BCM8879X=rx63:tx63 lane_to_serdes_map_fabric_lane64.BCM8879X=rx64:tx64 -lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx66 -lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx65 +lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx66 lane_to_serdes_map_fabric_lane67.BCM8879X=rx67:tx67 -lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx69 -lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx70 -lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx71 -lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx68 +lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx71 -lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx74 -lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx72 -lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx75 -lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx73 +lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx72 +lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx75 -lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx78 -lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx76 -lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx79 -lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx77 +lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx76 +lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx77 +lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx78 +lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx79 lane_to_serdes_map_fabric_lane80.BCM8879X=rx80:tx80 -lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx82 -lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx81 +lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx82 lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx83 -lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx85 -lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx86 -lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx87 -lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx84 +lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx87 -lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx90 -lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx88 -lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx91 -lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx89 +lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx89 +lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx90 +lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx91 -lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx95 -lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx94 -lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx92 -lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx93 +lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx92 +lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx94 +lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx95 lane_to_serdes_map_fabric_lane96.BCM8879X=rx96:tx96 -lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx98 -lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx97 +lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx98 lane_to_serdes_map_fabric_lane99.BCM8879X=rx99:tx99 -lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx101 -lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx102 -lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx100 +lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx102 lane_to_serdes_map_fabric_lane103.BCM8879X=rx103:tx103 lane_to_serdes_map_fabric_lane104.BCM8879X=rx104:tx104 @@ -179,13 +180,13 @@ lane_to_serdes_map_fabric_lane107.BCM8879X=rx107:tx107 lane_to_serdes_map_fabric_lane108.BCM8879X=rx108:tx108 lane_to_serdes_map_fabric_lane109.BCM8879X=rx109:tx109 -lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx111 -lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx110 +lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx110 +lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx111 -lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx115 -lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx114 -lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx113 -lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx112 +lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx112 +lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx114 +lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx115 lane_to_serdes_map_fabric_lane116.BCM8879X=rx116:tx116 lane_to_serdes_map_fabric_lane117.BCM8879X=rx117:tx117 @@ -197,15 +198,15 @@ lane_to_serdes_map_fabric_lane121.BCM8879X=rx121:tx121 lane_to_serdes_map_fabric_lane122.BCM8879X=rx122:tx122 lane_to_serdes_map_fabric_lane123.BCM8879X=rx123:tx123 -lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx127 -lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx126 -lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx124 -lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx125 +lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx127 -lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx130 -lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx131 -lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx129 -lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx128 +lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx131 lane_to_serdes_map_fabric_lane132.BCM8879X=rx132:tx132 lane_to_serdes_map_fabric_lane133.BCM8879X=rx133:tx133 @@ -213,23 +214,23 @@ lane_to_serdes_map_fabric_lane134.BCM8879X=rx134:tx134 lane_to_serdes_map_fabric_lane135.BCM8879X=rx135:tx135 lane_to_serdes_map_fabric_lane136.BCM8879X=rx136:tx136 -lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx138 -lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx137 +lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx137 +lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx138 lane_to_serdes_map_fabric_lane139.BCM8879X=rx139:tx139 -lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx143 -lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx142 -lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx141 -lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx140 +lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx140 +lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx143 -lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx145 -lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx147 -lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx144 -lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx146 +lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx147 -lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx150 +lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx148 lane_to_serdes_map_fabric_lane149.BCM8879X=rx149:tx149 -lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx148 +lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx150 lane_to_serdes_map_fabric_lane151.BCM8879X=rx151:tx151 lane_to_serdes_map_fabric_lane152.BCM8879X=rx152:tx152 @@ -237,116 +238,116 @@ lane_to_serdes_map_fabric_lane153.BCM8879X=rx153:tx153 lane_to_serdes_map_fabric_lane154.BCM8879X=rx154:tx154 lane_to_serdes_map_fabric_lane155.BCM8879X=rx155:tx155 -lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx157 -lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx159 +lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx156 +lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx157 lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx158 -lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx156 +lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx159 lane_to_serdes_map_fabric_lane160.BCM8879X=rx160:tx160 -lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx162 -lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx161 +lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx162 lane_to_serdes_map_fabric_lane163.BCM8879X=rx163:tx163 -lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx166 -lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx164 -lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx165 +lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx166 lane_to_serdes_map_fabric_lane167.BCM8879X=rx167:tx167 -lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx170 -lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx168 -lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx169 +lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx168 +lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx170 lane_to_serdes_map_fabric_lane171.BCM8879X=rx171:tx171 -lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx173 -lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx174 -lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx175 -lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx172 +lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx172 +lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx173 +lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx174 +lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx175 lane_to_serdes_map_fabric_lane176.BCM8879X=rx176:tx176 -lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx178 -lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx177 +lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx178 lane_to_serdes_map_fabric_lane179.BCM8879X=rx179:tx179 lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx180 -lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx182 -lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx181 +lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx182 lane_to_serdes_map_fabric_lane183.BCM8879X=rx183:tx183 -lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx187 -lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx184 +lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx185 lane_to_serdes_map_fabric_lane186.BCM8879X=rx186:tx186 -lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx185 +lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx187 -lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx190 +lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx188 lane_to_serdes_map_fabric_lane189.BCM8879X=rx189:tx189 -lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx191 -lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx188 +lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx190 +lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx191 -phy_rx_polarity_flip_fabric0.BCM8879X=0 -phy_rx_polarity_flip_fabric1.BCM8879X=1 -phy_rx_polarity_flip_fabric2.BCM8879X=0 -phy_rx_polarity_flip_fabric3.BCM8879X=1 +phy_rx_polarity_flip_fabric0.BCM8879X=1 +phy_rx_polarity_flip_fabric1.BCM8879X=0 +phy_rx_polarity_flip_fabric2.BCM8879X=1 +phy_rx_polarity_flip_fabric3.BCM8879X=0 phy_rx_polarity_flip_fabric4.BCM8879X=1 phy_rx_polarity_flip_fabric5.BCM8879X=0 phy_rx_polarity_flip_fabric6.BCM8879X=1 phy_rx_polarity_flip_fabric7.BCM8879X=0 -phy_rx_polarity_flip_fabric8.BCM8879X=1 -phy_rx_polarity_flip_fabric9.BCM8879X=0 -phy_rx_polarity_flip_fabric10.BCM8879X=1 -phy_rx_polarity_flip_fabric11.BCM8879X=0 +phy_rx_polarity_flip_fabric8.BCM8879X=0 +phy_rx_polarity_flip_fabric9.BCM8879X=1 +phy_rx_polarity_flip_fabric10.BCM8879X=0 +phy_rx_polarity_flip_fabric11.BCM8879X=1 -phy_rx_polarity_flip_fabric12.BCM8879X=0 -phy_rx_polarity_flip_fabric13.BCM8879X=1 -phy_rx_polarity_flip_fabric14.BCM8879X=0 -phy_rx_polarity_flip_fabric15.BCM8879X=1 +phy_rx_polarity_flip_fabric12.BCM8879X=1 +phy_rx_polarity_flip_fabric13.BCM8879X=0 +phy_rx_polarity_flip_fabric14.BCM8879X=1 +phy_rx_polarity_flip_fabric15.BCM8879X=0 -phy_rx_polarity_flip_fabric16.BCM8879X=0 -phy_rx_polarity_flip_fabric17.BCM8879X=1 -phy_rx_polarity_flip_fabric18.BCM8879X=0 -phy_rx_polarity_flip_fabric19.BCM8879X=1 +phy_rx_polarity_flip_fabric16.BCM8879X=1 +phy_rx_polarity_flip_fabric17.BCM8879X=0 +phy_rx_polarity_flip_fabric18.BCM8879X=1 +phy_rx_polarity_flip_fabric19.BCM8879X=0 phy_rx_polarity_flip_fabric20.BCM8879X=0 phy_rx_polarity_flip_fabric21.BCM8879X=1 phy_rx_polarity_flip_fabric22.BCM8879X=0 phy_rx_polarity_flip_fabric23.BCM8879X=1 -phy_rx_polarity_flip_fabric24.BCM8879X=0 -phy_rx_polarity_flip_fabric25.BCM8879X=1 -phy_rx_polarity_flip_fabric26.BCM8879X=0 -phy_rx_polarity_flip_fabric27.BCM8879X=1 +phy_rx_polarity_flip_fabric24.BCM8879X=1 +phy_rx_polarity_flip_fabric25.BCM8879X=0 +phy_rx_polarity_flip_fabric26.BCM8879X=1 +phy_rx_polarity_flip_fabric27.BCM8879X=0 phy_rx_polarity_flip_fabric28.BCM8879X=1 phy_rx_polarity_flip_fabric29.BCM8879X=0 phy_rx_polarity_flip_fabric30.BCM8879X=1 phy_rx_polarity_flip_fabric31.BCM8879X=0 -phy_rx_polarity_flip_fabric32.BCM8879X=1 -phy_rx_polarity_flip_fabric33.BCM8879X=0 -phy_rx_polarity_flip_fabric34.BCM8879X=1 -phy_rx_polarity_flip_fabric35.BCM8879X=0 +phy_rx_polarity_flip_fabric32.BCM8879X=0 +phy_rx_polarity_flip_fabric33.BCM8879X=1 +phy_rx_polarity_flip_fabric34.BCM8879X=0 +phy_rx_polarity_flip_fabric35.BCM8879X=1 -phy_rx_polarity_flip_fabric36.BCM8879X=0 -phy_rx_polarity_flip_fabric37.BCM8879X=1 -phy_rx_polarity_flip_fabric38.BCM8879X=0 -phy_rx_polarity_flip_fabric39.BCM8879X=1 +phy_rx_polarity_flip_fabric36.BCM8879X=1 +phy_rx_polarity_flip_fabric37.BCM8879X=0 +phy_rx_polarity_flip_fabric38.BCM8879X=1 +phy_rx_polarity_flip_fabric39.BCM8879X=0 phy_rx_polarity_flip_fabric40.BCM8879X=0 phy_rx_polarity_flip_fabric41.BCM8879X=1 phy_rx_polarity_flip_fabric42.BCM8879X=0 phy_rx_polarity_flip_fabric43.BCM8879X=1 -phy_rx_polarity_flip_fabric44.BCM8879X=0 -phy_rx_polarity_flip_fabric45.BCM8879X=1 -phy_rx_polarity_flip_fabric46.BCM8879X=0 -phy_rx_polarity_flip_fabric47.BCM8879X=1 +phy_rx_polarity_flip_fabric44.BCM8879X=1 +phy_rx_polarity_flip_fabric45.BCM8879X=0 +phy_rx_polarity_flip_fabric46.BCM8879X=1 +phy_rx_polarity_flip_fabric47.BCM8879X=0 -phy_rx_polarity_flip_fabric48.BCM8879X=0 -phy_rx_polarity_flip_fabric49.BCM8879X=1 -phy_rx_polarity_flip_fabric50.BCM8879X=0 -phy_rx_polarity_flip_fabric51.BCM8879X=1 +phy_rx_polarity_flip_fabric48.BCM8879X=1 +phy_rx_polarity_flip_fabric49.BCM8879X=0 +phy_rx_polarity_flip_fabric50.BCM8879X=1 +phy_rx_polarity_flip_fabric51.BCM8879X=0 phy_rx_polarity_flip_fabric52.BCM8879X=0 phy_rx_polarity_flip_fabric53.BCM8879X=1 @@ -358,10 +359,10 @@ phy_rx_polarity_flip_fabric57.BCM8879X=1 phy_rx_polarity_flip_fabric58.BCM8879X=0 phy_rx_polarity_flip_fabric59.BCM8879X=1 -phy_rx_polarity_flip_fabric60.BCM8879X=1 -phy_rx_polarity_flip_fabric61.BCM8879X=0 -phy_rx_polarity_flip_fabric62.BCM8879X=1 -phy_rx_polarity_flip_fabric63.BCM8879X=0 +phy_rx_polarity_flip_fabric60.BCM8879X=0 +phy_rx_polarity_flip_fabric61.BCM8879X=1 +phy_rx_polarity_flip_fabric62.BCM8879X=0 +phy_rx_polarity_flip_fabric63.BCM8879X=1 phy_rx_polarity_flip_fabric64.BCM8879X=0 phy_rx_polarity_flip_fabric65.BCM8879X=1 @@ -373,78 +374,78 @@ phy_rx_polarity_flip_fabric69.BCM8879X=0 phy_rx_polarity_flip_fabric70.BCM8879X=1 phy_rx_polarity_flip_fabric71.BCM8879X=0 -phy_rx_polarity_flip_fabric72.BCM8879X=0 -phy_rx_polarity_flip_fabric73.BCM8879X=1 -phy_rx_polarity_flip_fabric74.BCM8879X=0 -phy_rx_polarity_flip_fabric75.BCM8879X=1 +phy_rx_polarity_flip_fabric72.BCM8879X=1 +phy_rx_polarity_flip_fabric73.BCM8879X=0 +phy_rx_polarity_flip_fabric74.BCM8879X=1 +phy_rx_polarity_flip_fabric75.BCM8879X=0 phy_rx_polarity_flip_fabric76.BCM8879X=0 phy_rx_polarity_flip_fabric77.BCM8879X=1 phy_rx_polarity_flip_fabric78.BCM8879X=0 phy_rx_polarity_flip_fabric79.BCM8879X=1 -phy_rx_polarity_flip_fabric80.BCM8879X=0 -phy_rx_polarity_flip_fabric81.BCM8879X=1 -phy_rx_polarity_flip_fabric82.BCM8879X=0 -phy_rx_polarity_flip_fabric83.BCM8879X=1 +phy_rx_polarity_flip_fabric80.BCM8879X=1 +phy_rx_polarity_flip_fabric81.BCM8879X=0 +phy_rx_polarity_flip_fabric82.BCM8879X=1 +phy_rx_polarity_flip_fabric83.BCM8879X=0 -phy_rx_polarity_flip_fabric84.BCM8879X=1 -phy_rx_polarity_flip_fabric85.BCM8879X=0 -phy_rx_polarity_flip_fabric86.BCM8879X=1 -phy_rx_polarity_flip_fabric87.BCM8879X=0 +phy_rx_polarity_flip_fabric84.BCM8879X=0 +phy_rx_polarity_flip_fabric85.BCM8879X=1 +phy_rx_polarity_flip_fabric86.BCM8879X=0 +phy_rx_polarity_flip_fabric87.BCM8879X=1 phy_rx_polarity_flip_fabric88.BCM8879X=1 phy_rx_polarity_flip_fabric89.BCM8879X=0 phy_rx_polarity_flip_fabric90.BCM8879X=1 phy_rx_polarity_flip_fabric91.BCM8879X=0 -phy_rx_polarity_flip_fabric92.BCM8879X=0 -phy_rx_polarity_flip_fabric93.BCM8879X=1 -phy_rx_polarity_flip_fabric94.BCM8879X=0 -phy_rx_polarity_flip_fabric95.BCM8879X=1 +phy_rx_polarity_flip_fabric92.BCM8879X=1 +phy_rx_polarity_flip_fabric93.BCM8879X=0 +phy_rx_polarity_flip_fabric94.BCM8879X=1 +phy_rx_polarity_flip_fabric95.BCM8879X=0 phy_rx_polarity_flip_fabric96.BCM8879X=0 -phy_rx_polarity_flip_fabric97.BCM8879X=0 +phy_rx_polarity_flip_fabric97.BCM8879X=1 phy_rx_polarity_flip_fabric98.BCM8879X=0 phy_rx_polarity_flip_fabric99.BCM8879X=1 -phy_rx_polarity_flip_fabric100.BCM8879X=0 -phy_rx_polarity_flip_fabric101.BCM8879X=1 +phy_rx_polarity_flip_fabric100.BCM8879X=1 +phy_rx_polarity_flip_fabric101.BCM8879X=0 phy_rx_polarity_flip_fabric102.BCM8879X=1 -phy_rx_polarity_flip_fabric103.BCM8879X=1 +phy_rx_polarity_flip_fabric103.BCM8879X=0 phy_rx_polarity_flip_fabric104.BCM8879X=0 phy_rx_polarity_flip_fabric105.BCM8879X=1 -phy_rx_polarity_flip_fabric106.BCM8879X=1 +phy_rx_polarity_flip_fabric106.BCM8879X=0 phy_rx_polarity_flip_fabric107.BCM8879X=1 -phy_rx_polarity_flip_fabric108.BCM8879X=1 -phy_rx_polarity_flip_fabric109.BCM8879X=0 -phy_rx_polarity_flip_fabric110.BCM8879X=1 -phy_rx_polarity_flip_fabric111.BCM8879X=0 +phy_rx_polarity_flip_fabric108.BCM8879X=0 +phy_rx_polarity_flip_fabric109.BCM8879X=1 +phy_rx_polarity_flip_fabric110.BCM8879X=0 +phy_rx_polarity_flip_fabric111.BCM8879X=1 -phy_rx_polarity_flip_fabric112.BCM8879X=0 -phy_rx_polarity_flip_fabric113.BCM8879X=1 -phy_rx_polarity_flip_fabric114.BCM8879X=0 -phy_rx_polarity_flip_fabric115.BCM8879X=1 +phy_rx_polarity_flip_fabric112.BCM8879X=1 +phy_rx_polarity_flip_fabric113.BCM8879X=0 +phy_rx_polarity_flip_fabric114.BCM8879X=1 +phy_rx_polarity_flip_fabric115.BCM8879X=0 -phy_rx_polarity_flip_fabric116.BCM8879X=1 -phy_rx_polarity_flip_fabric117.BCM8879X=0 -phy_rx_polarity_flip_fabric118.BCM8879X=1 -phy_rx_polarity_flip_fabric119.BCM8879X=0 +phy_rx_polarity_flip_fabric116.BCM8879X=0 +phy_rx_polarity_flip_fabric117.BCM8879X=1 +phy_rx_polarity_flip_fabric118.BCM8879X=0 +phy_rx_polarity_flip_fabric119.BCM8879X=1 -phy_rx_polarity_flip_fabric120.BCM8879X=0 +phy_rx_polarity_flip_fabric120.BCM8879X=1 phy_rx_polarity_flip_fabric121.BCM8879X=0 -phy_rx_polarity_flip_fabric122.BCM8879X=0 -phy_rx_polarity_flip_fabric123.BCM8879X=1 +phy_rx_polarity_flip_fabric122.BCM8879X=1 +phy_rx_polarity_flip_fabric123.BCM8879X=0 phy_rx_polarity_flip_fabric124.BCM8879X=1 -phy_rx_polarity_flip_fabric125.BCM8879X=1 -phy_rx_polarity_flip_fabric126.BCM8879X=0 -phy_rx_polarity_flip_fabric127.BCM8879X=1 +phy_rx_polarity_flip_fabric125.BCM8879X=0 +phy_rx_polarity_flip_fabric126.BCM8879X=1 +phy_rx_polarity_flip_fabric127.BCM8879X=0 phy_rx_polarity_flip_fabric128.BCM8879X=0 -phy_rx_polarity_flip_fabric129.BCM8879X=0 +phy_rx_polarity_flip_fabric129.BCM8879X=1 phy_rx_polarity_flip_fabric130.BCM8879X=0 phy_rx_polarity_flip_fabric131.BCM8879X=1 @@ -453,25 +454,25 @@ phy_rx_polarity_flip_fabric133.BCM8879X=0 phy_rx_polarity_flip_fabric134.BCM8879X=1 phy_rx_polarity_flip_fabric135.BCM8879X=0 -phy_rx_polarity_flip_fabric136.BCM8879X=1 -phy_rx_polarity_flip_fabric137.BCM8879X=0 -phy_rx_polarity_flip_fabric138.BCM8879X=1 -phy_rx_polarity_flip_fabric139.BCM8879X=0 +phy_rx_polarity_flip_fabric136.BCM8879X=0 +phy_rx_polarity_flip_fabric137.BCM8879X=1 +phy_rx_polarity_flip_fabric138.BCM8879X=0 +phy_rx_polarity_flip_fabric139.BCM8879X=1 -phy_rx_polarity_flip_fabric140.BCM8879X=0 -phy_rx_polarity_flip_fabric141.BCM8879X=1 -phy_rx_polarity_flip_fabric142.BCM8879X=0 -phy_rx_polarity_flip_fabric143.BCM8879X=1 +phy_rx_polarity_flip_fabric140.BCM8879X=1 +phy_rx_polarity_flip_fabric141.BCM8879X=0 +phy_rx_polarity_flip_fabric142.BCM8879X=1 +phy_rx_polarity_flip_fabric143.BCM8879X=0 -phy_rx_polarity_flip_fabric144.BCM8879X=0 -phy_rx_polarity_flip_fabric145.BCM8879X=1 -phy_rx_polarity_flip_fabric146.BCM8879X=0 -phy_rx_polarity_flip_fabric147.BCM8879X=1 +phy_rx_polarity_flip_fabric144.BCM8879X=1 +phy_rx_polarity_flip_fabric145.BCM8879X=0 +phy_rx_polarity_flip_fabric146.BCM8879X=1 +phy_rx_polarity_flip_fabric147.BCM8879X=0 -phy_rx_polarity_flip_fabric148.BCM8879X=1 -phy_rx_polarity_flip_fabric149.BCM8879X=0 -phy_rx_polarity_flip_fabric150.BCM8879X=1 -phy_rx_polarity_flip_fabric151.BCM8879X=0 +phy_rx_polarity_flip_fabric148.BCM8879X=0 +phy_rx_polarity_flip_fabric149.BCM8879X=1 +phy_rx_polarity_flip_fabric150.BCM8879X=0 +phy_rx_polarity_flip_fabric151.BCM8879X=1 phy_rx_polarity_flip_fabric152.BCM8879X=1 phy_rx_polarity_flip_fabric153.BCM8879X=0 @@ -480,28 +481,28 @@ phy_rx_polarity_flip_fabric155.BCM8879X=0 phy_rx_polarity_flip_fabric156.BCM8879X=0 phy_rx_polarity_flip_fabric157.BCM8879X=1 -phy_rx_polarity_flip_fabric158.BCM8879X=1 +phy_rx_polarity_flip_fabric158.BCM8879X=0 phy_rx_polarity_flip_fabric159.BCM8879X=1 -phy_rx_polarity_flip_fabric160.BCM8879X=0 +phy_rx_polarity_flip_fabric160.BCM8879X=1 phy_rx_polarity_flip_fabric161.BCM8879X=0 -phy_rx_polarity_flip_fabric162.BCM8879X=0 -phy_rx_polarity_flip_fabric163.BCM8879X=1 +phy_rx_polarity_flip_fabric162.BCM8879X=1 +phy_rx_polarity_flip_fabric163.BCM8879X=0 -phy_rx_polarity_flip_fabric164.BCM8879X=0 +phy_rx_polarity_flip_fabric164.BCM8879X=1 phy_rx_polarity_flip_fabric165.BCM8879X=0 -phy_rx_polarity_flip_fabric166.BCM8879X=0 -phy_rx_polarity_flip_fabric167.BCM8879X=1 +phy_rx_polarity_flip_fabric166.BCM8879X=1 +phy_rx_polarity_flip_fabric167.BCM8879X=0 -phy_rx_polarity_flip_fabric168.BCM8879X=0 -phy_rx_polarity_flip_fabric169.BCM8879X=1 -phy_rx_polarity_flip_fabric170.BCM8879X=0 -phy_rx_polarity_flip_fabric171.BCM8879X=1 +phy_rx_polarity_flip_fabric168.BCM8879X=1 +phy_rx_polarity_flip_fabric169.BCM8879X=0 +phy_rx_polarity_flip_fabric170.BCM8879X=1 +phy_rx_polarity_flip_fabric171.BCM8879X=0 -phy_rx_polarity_flip_fabric172.BCM8879X=1 -phy_rx_polarity_flip_fabric173.BCM8879X=0 -phy_rx_polarity_flip_fabric174.BCM8879X=1 -phy_rx_polarity_flip_fabric175.BCM8879X=0 +phy_rx_polarity_flip_fabric172.BCM8879X=0 +phy_rx_polarity_flip_fabric173.BCM8879X=1 +phy_rx_polarity_flip_fabric174.BCM8879X=0 +phy_rx_polarity_flip_fabric175.BCM8879X=1 phy_rx_polarity_flip_fabric176.BCM8879X=1 phy_rx_polarity_flip_fabric177.BCM8879X=0 @@ -509,79 +510,80 @@ phy_rx_polarity_flip_fabric178.BCM8879X=1 phy_rx_polarity_flip_fabric179.BCM8879X=0 phy_rx_polarity_flip_fabric180.BCM8879X=0 -phy_rx_polarity_flip_fabric181.BCM8879X=0 +phy_rx_polarity_flip_fabric181.BCM8879X=1 phy_rx_polarity_flip_fabric182.BCM8879X=0 phy_rx_polarity_flip_fabric183.BCM8879X=1 -phy_rx_polarity_flip_fabric184.BCM8879X=0 +phy_rx_polarity_flip_fabric184.BCM8879X=1 phy_rx_polarity_flip_fabric185.BCM8879X=0 -phy_rx_polarity_flip_fabric186.BCM8879X=0 -phy_rx_polarity_flip_fabric187.BCM8879X=1 +phy_rx_polarity_flip_fabric186.BCM8879X=1 +phy_rx_polarity_flip_fabric187.BCM8879X=0 phy_rx_polarity_flip_fabric188.BCM8879X=1 -phy_rx_polarity_flip_fabric189.BCM8879X=1 -phy_rx_polarity_flip_fabric190.BCM8879X=0 -phy_rx_polarity_flip_fabric191.BCM8879X=1 +phy_rx_polarity_flip_fabric189.BCM8879X=0 +phy_rx_polarity_flip_fabric190.BCM8879X=1 +phy_rx_polarity_flip_fabric191.BCM8879X=0 + phy_tx_polarity_flip_fabric0.BCM8879X=0 -phy_tx_polarity_flip_fabric1.BCM8879X=0 -phy_tx_polarity_flip_fabric2.BCM8879X=1 +phy_tx_polarity_flip_fabric1.BCM8879X=1 +phy_tx_polarity_flip_fabric2.BCM8879X=0 phy_tx_polarity_flip_fabric3.BCM8879X=1 -phy_tx_polarity_flip_fabric4.BCM8879X=1 -phy_tx_polarity_flip_fabric5.BCM8879X=0 -phy_tx_polarity_flip_fabric6.BCM8879X=1 -phy_tx_polarity_flip_fabric7.BCM8879X=0 +phy_tx_polarity_flip_fabric4.BCM8879X=0 +phy_tx_polarity_flip_fabric5.BCM8879X=1 +phy_tx_polarity_flip_fabric6.BCM8879X=0 +phy_tx_polarity_flip_fabric7.BCM8879X=1 -phy_tx_polarity_flip_fabric8.BCM8879X=0 +phy_tx_polarity_flip_fabric8.BCM8879X=1 phy_tx_polarity_flip_fabric9.BCM8879X=0 phy_tx_polarity_flip_fabric10.BCM8879X=1 -phy_tx_polarity_flip_fabric11.BCM8879X=1 +phy_tx_polarity_flip_fabric11.BCM8879X=0 phy_tx_polarity_flip_fabric12.BCM8879X=0 -phy_tx_polarity_flip_fabric13.BCM8879X=0 -phy_tx_polarity_flip_fabric14.BCM8879X=1 +phy_tx_polarity_flip_fabric13.BCM8879X=1 +phy_tx_polarity_flip_fabric14.BCM8879X=0 phy_tx_polarity_flip_fabric15.BCM8879X=1 -phy_tx_polarity_flip_fabric16.BCM8879X=1 +phy_tx_polarity_flip_fabric16.BCM8879X=0 phy_tx_polarity_flip_fabric17.BCM8879X=1 phy_tx_polarity_flip_fabric18.BCM8879X=0 -phy_tx_polarity_flip_fabric19.BCM8879X=0 +phy_tx_polarity_flip_fabric19.BCM8879X=1 phy_tx_polarity_flip_fabric20.BCM8879X=1 -phy_tx_polarity_flip_fabric21.BCM8879X=1 -phy_tx_polarity_flip_fabric22.BCM8879X=0 +phy_tx_polarity_flip_fabric21.BCM8879X=0 +phy_tx_polarity_flip_fabric22.BCM8879X=1 phy_tx_polarity_flip_fabric23.BCM8879X=0 -phy_tx_polarity_flip_fabric24.BCM8879X=1 +phy_tx_polarity_flip_fabric24.BCM8879X=0 phy_tx_polarity_flip_fabric25.BCM8879X=1 phy_tx_polarity_flip_fabric26.BCM8879X=0 -phy_tx_polarity_flip_fabric27.BCM8879X=0 +phy_tx_polarity_flip_fabric27.BCM8879X=1 -phy_tx_polarity_flip_fabric28.BCM8879X=1 -phy_tx_polarity_flip_fabric29.BCM8879X=0 +phy_tx_polarity_flip_fabric28.BCM8879X=0 +phy_tx_polarity_flip_fabric29.BCM8879X=1 phy_tx_polarity_flip_fabric30.BCM8879X=0 phy_tx_polarity_flip_fabric31.BCM8879X=1 -phy_tx_polarity_flip_fabric32.BCM8879X=0 +phy_tx_polarity_flip_fabric32.BCM8879X=1 phy_tx_polarity_flip_fabric33.BCM8879X=0 phy_tx_polarity_flip_fabric34.BCM8879X=1 -phy_tx_polarity_flip_fabric35.BCM8879X=1 +phy_tx_polarity_flip_fabric35.BCM8879X=0 -phy_tx_polarity_flip_fabric36.BCM8879X=1 +phy_tx_polarity_flip_fabric36.BCM8879X=0 phy_tx_polarity_flip_fabric37.BCM8879X=1 phy_tx_polarity_flip_fabric38.BCM8879X=0 -phy_tx_polarity_flip_fabric39.BCM8879X=0 +phy_tx_polarity_flip_fabric39.BCM8879X=1 -phy_tx_polarity_flip_fabric40.BCM8879X=0 -phy_tx_polarity_flip_fabric41.BCM8879X=1 +phy_tx_polarity_flip_fabric40.BCM8879X=1 +phy_tx_polarity_flip_fabric41.BCM8879X=0 phy_tx_polarity_flip_fabric42.BCM8879X=1 phy_tx_polarity_flip_fabric43.BCM8879X=0 -phy_tx_polarity_flip_fabric44.BCM8879X=1 +phy_tx_polarity_flip_fabric44.BCM8879X=0 phy_tx_polarity_flip_fabric45.BCM8879X=1 phy_tx_polarity_flip_fabric46.BCM8879X=0 -phy_tx_polarity_flip_fabric47.BCM8879X=0 +phy_tx_polarity_flip_fabric47.BCM8879X=1 phy_tx_polarity_flip_fabric48.BCM8879X=0 phy_tx_polarity_flip_fabric49.BCM8879X=1 @@ -590,43 +592,43 @@ phy_tx_polarity_flip_fabric51.BCM8879X=1 phy_tx_polarity_flip_fabric52.BCM8879X=1 phy_tx_polarity_flip_fabric53.BCM8879X=0 -phy_tx_polarity_flip_fabric54.BCM8879X=0 -phy_tx_polarity_flip_fabric55.BCM8879X=1 +phy_tx_polarity_flip_fabric54.BCM8879X=1 +phy_tx_polarity_flip_fabric55.BCM8879X=0 -phy_tx_polarity_flip_fabric56.BCM8879X=0 -phy_tx_polarity_flip_fabric57.BCM8879X=1 -phy_tx_polarity_flip_fabric58.BCM8879X=0 -phy_tx_polarity_flip_fabric59.BCM8879X=1 +phy_tx_polarity_flip_fabric56.BCM8879X=1 +phy_tx_polarity_flip_fabric57.BCM8879X=0 +phy_tx_polarity_flip_fabric58.BCM8879X=1 +phy_tx_polarity_flip_fabric59.BCM8879X=0 phy_tx_polarity_flip_fabric60.BCM8879X=1 phy_tx_polarity_flip_fabric61.BCM8879X=0 -phy_tx_polarity_flip_fabric62.BCM8879X=0 -phy_tx_polarity_flip_fabric63.BCM8879X=1 +phy_tx_polarity_flip_fabric62.BCM8879X=1 +phy_tx_polarity_flip_fabric63.BCM8879X=0 phy_tx_polarity_flip_fabric64.BCM8879X=1 -phy_tx_polarity_flip_fabric65.BCM8879X=1 -phy_tx_polarity_flip_fabric66.BCM8879X=0 +phy_tx_polarity_flip_fabric65.BCM8879X=0 +phy_tx_polarity_flip_fabric66.BCM8879X=1 phy_tx_polarity_flip_fabric67.BCM8879X=0 -phy_tx_polarity_flip_fabric68.BCM8879X=1 -phy_tx_polarity_flip_fabric69.BCM8879X=0 -phy_tx_polarity_flip_fabric70.BCM8879X=1 -phy_tx_polarity_flip_fabric71.BCM8879X=0 +phy_tx_polarity_flip_fabric68.BCM8879X=0 +phy_tx_polarity_flip_fabric69.BCM8879X=1 +phy_tx_polarity_flip_fabric70.BCM8879X=0 +phy_tx_polarity_flip_fabric71.BCM8879X=1 -phy_tx_polarity_flip_fabric72.BCM8879X=1 +phy_tx_polarity_flip_fabric72.BCM8879X=0 phy_tx_polarity_flip_fabric73.BCM8879X=1 phy_tx_polarity_flip_fabric74.BCM8879X=0 -phy_tx_polarity_flip_fabric75.BCM8879X=0 +phy_tx_polarity_flip_fabric75.BCM8879X=1 phy_tx_polarity_flip_fabric76.BCM8879X=1 -phy_tx_polarity_flip_fabric77.BCM8879X=1 -phy_tx_polarity_flip_fabric78.BCM8879X=0 +phy_tx_polarity_flip_fabric77.BCM8879X=0 +phy_tx_polarity_flip_fabric78.BCM8879X=1 phy_tx_polarity_flip_fabric79.BCM8879X=0 -phy_tx_polarity_flip_fabric80.BCM8879X=1 +phy_tx_polarity_flip_fabric80.BCM8879X=0 phy_tx_polarity_flip_fabric81.BCM8879X=1 phy_tx_polarity_flip_fabric82.BCM8879X=0 -phy_tx_polarity_flip_fabric83.BCM8879X=0 +phy_tx_polarity_flip_fabric83.BCM8879X=1 phy_tx_polarity_flip_fabric84.BCM8879X=1 phy_tx_polarity_flip_fabric85.BCM8879X=0 @@ -634,32 +636,32 @@ phy_tx_polarity_flip_fabric86.BCM8879X=1 phy_tx_polarity_flip_fabric87.BCM8879X=0 phy_tx_polarity_flip_fabric88.BCM8879X=0 -phy_tx_polarity_flip_fabric89.BCM8879X=0 -phy_tx_polarity_flip_fabric90.BCM8879X=1 +phy_tx_polarity_flip_fabric89.BCM8879X=1 +phy_tx_polarity_flip_fabric90.BCM8879X=0 phy_tx_polarity_flip_fabric91.BCM8879X=1 phy_tx_polarity_flip_fabric92.BCM8879X=0 phy_tx_polarity_flip_fabric93.BCM8879X=1 -phy_tx_polarity_flip_fabric94.BCM8879X=1 -phy_tx_polarity_flip_fabric95.BCM8879X=0 +phy_tx_polarity_flip_fabric94.BCM8879X=0 +phy_tx_polarity_flip_fabric95.BCM8879X=1 phy_tx_polarity_flip_fabric96.BCM8879X=1 -phy_tx_polarity_flip_fabric97.BCM8879X=1 -phy_tx_polarity_flip_fabric98.BCM8879X=0 +phy_tx_polarity_flip_fabric97.BCM8879X=0 +phy_tx_polarity_flip_fabric98.BCM8879X=1 phy_tx_polarity_flip_fabric99.BCM8879X=0 phy_tx_polarity_flip_fabric100.BCM8879X=0 -phy_tx_polarity_flip_fabric101.BCM8879X=0 +phy_tx_polarity_flip_fabric101.BCM8879X=1 phy_tx_polarity_flip_fabric102.BCM8879X=0 -phy_tx_polarity_flip_fabric103.BCM8879X=0 +phy_tx_polarity_flip_fabric103.BCM8879X=1 phy_tx_polarity_flip_fabric104.BCM8879X=1 phy_tx_polarity_flip_fabric105.BCM8879X=0 -phy_tx_polarity_flip_fabric106.BCM8879X=0 -phy_tx_polarity_flip_fabric107.BCM8879X=1 +phy_tx_polarity_flip_fabric106.BCM8879X=1 +phy_tx_polarity_flip_fabric107.BCM8879X=0 -phy_tx_polarity_flip_fabric108.BCM8879X=0 -phy_tx_polarity_flip_fabric109.BCM8879X=1 +phy_tx_polarity_flip_fabric108.BCM8879X=1 +phy_tx_polarity_flip_fabric109.BCM8879X=0 phy_tx_polarity_flip_fabric110.BCM8879X=1 phy_tx_polarity_flip_fabric111.BCM8879X=0 @@ -668,35 +670,35 @@ phy_tx_polarity_flip_fabric113.BCM8879X=1 phy_tx_polarity_flip_fabric114.BCM8879X=0 phy_tx_polarity_flip_fabric115.BCM8879X=1 -phy_tx_polarity_flip_fabric116.BCM8879X=0 -phy_tx_polarity_flip_fabric117.BCM8879X=1 -phy_tx_polarity_flip_fabric118.BCM8879X=0 -phy_tx_polarity_flip_fabric119.BCM8879X=1 +phy_tx_polarity_flip_fabric116.BCM8879X=1 +phy_tx_polarity_flip_fabric117.BCM8879X=0 +phy_tx_polarity_flip_fabric118.BCM8879X=1 +phy_tx_polarity_flip_fabric119.BCM8879X=0 -phy_tx_polarity_flip_fabric120.BCM8879X=1 -phy_tx_polarity_flip_fabric121.BCM8879X=0 -phy_tx_polarity_flip_fabric122.BCM8879X=1 -phy_tx_polarity_flip_fabric123.BCM8879X=0 +phy_tx_polarity_flip_fabric120.BCM8879X=0 +phy_tx_polarity_flip_fabric121.BCM8879X=1 +phy_tx_polarity_flip_fabric122.BCM8879X=0 +phy_tx_polarity_flip_fabric123.BCM8879X=1 -phy_tx_polarity_flip_fabric124.BCM8879X=1 -phy_tx_polarity_flip_fabric125.BCM8879X=0 -phy_tx_polarity_flip_fabric126.BCM8879X=1 -phy_tx_polarity_flip_fabric127.BCM8879X=0 +phy_tx_polarity_flip_fabric124.BCM8879X=0 +phy_tx_polarity_flip_fabric125.BCM8879X=1 +phy_tx_polarity_flip_fabric126.BCM8879X=0 +phy_tx_polarity_flip_fabric127.BCM8879X=1 -phy_tx_polarity_flip_fabric128.BCM8879X=0 -phy_tx_polarity_flip_fabric129.BCM8879X=1 -phy_tx_polarity_flip_fabric130.BCM8879X=0 -phy_tx_polarity_flip_fabric131.BCM8879X=1 +phy_tx_polarity_flip_fabric128.BCM8879X=1 +phy_tx_polarity_flip_fabric129.BCM8879X=0 +phy_tx_polarity_flip_fabric130.BCM8879X=1 +phy_tx_polarity_flip_fabric131.BCM8879X=0 phy_tx_polarity_flip_fabric132.BCM8879X=0 phy_tx_polarity_flip_fabric133.BCM8879X=1 phy_tx_polarity_flip_fabric134.BCM8879X=0 phy_tx_polarity_flip_fabric135.BCM8879X=1 -phy_tx_polarity_flip_fabric136.BCM8879X=0 +phy_tx_polarity_flip_fabric136.BCM8879X=1 phy_tx_polarity_flip_fabric137.BCM8879X=0 phy_tx_polarity_flip_fabric138.BCM8879X=1 -phy_tx_polarity_flip_fabric139.BCM8879X=1 +phy_tx_polarity_flip_fabric139.BCM8879X=0 phy_tx_polarity_flip_fabric140.BCM8879X=0 phy_tx_polarity_flip_fabric141.BCM8879X=1 @@ -704,39 +706,39 @@ phy_tx_polarity_flip_fabric142.BCM8879X=0 phy_tx_polarity_flip_fabric143.BCM8879X=1 phy_tx_polarity_flip_fabric144.BCM8879X=0 -phy_tx_polarity_flip_fabric145.BCM8879X=0 -phy_tx_polarity_flip_fabric146.BCM8879X=1 +phy_tx_polarity_flip_fabric145.BCM8879X=1 +phy_tx_polarity_flip_fabric146.BCM8879X=0 phy_tx_polarity_flip_fabric147.BCM8879X=1 -phy_tx_polarity_flip_fabric148.BCM8879X=0 -phy_tx_polarity_flip_fabric149.BCM8879X=1 -phy_tx_polarity_flip_fabric150.BCM8879X=0 -phy_tx_polarity_flip_fabric151.BCM8879X=1 +phy_tx_polarity_flip_fabric148.BCM8879X=1 +phy_tx_polarity_flip_fabric149.BCM8879X=0 +phy_tx_polarity_flip_fabric150.BCM8879X=1 +phy_tx_polarity_flip_fabric151.BCM8879X=0 phy_tx_polarity_flip_fabric152.BCM8879X=0 phy_tx_polarity_flip_fabric153.BCM8879X=1 phy_tx_polarity_flip_fabric154.BCM8879X=0 phy_tx_polarity_flip_fabric155.BCM8879X=1 -phy_tx_polarity_flip_fabric156.BCM8879X=0 +phy_tx_polarity_flip_fabric156.BCM8879X=1 phy_tx_polarity_flip_fabric157.BCM8879X=0 -phy_tx_polarity_flip_fabric158.BCM8879X=0 +phy_tx_polarity_flip_fabric158.BCM8879X=1 phy_tx_polarity_flip_fabric159.BCM8879X=0 -phy_tx_polarity_flip_fabric160.BCM8879X=1 +phy_tx_polarity_flip_fabric160.BCM8879X=0 phy_tx_polarity_flip_fabric161.BCM8879X=1 phy_tx_polarity_flip_fabric162.BCM8879X=0 -phy_tx_polarity_flip_fabric163.BCM8879X=0 +phy_tx_polarity_flip_fabric163.BCM8879X=1 phy_tx_polarity_flip_fabric164.BCM8879X=0 -phy_tx_polarity_flip_fabric165.BCM8879X=0 +phy_tx_polarity_flip_fabric165.BCM8879X=1 phy_tx_polarity_flip_fabric166.BCM8879X=0 -phy_tx_polarity_flip_fabric167.BCM8879X=0 +phy_tx_polarity_flip_fabric167.BCM8879X=1 -phy_tx_polarity_flip_fabric168.BCM8879X=1 +phy_tx_polarity_flip_fabric168.BCM8879X=0 phy_tx_polarity_flip_fabric169.BCM8879X=1 phy_tx_polarity_flip_fabric170.BCM8879X=0 -phy_tx_polarity_flip_fabric171.BCM8879X=0 +phy_tx_polarity_flip_fabric171.BCM8879X=1 phy_tx_polarity_flip_fabric172.BCM8879X=1 phy_tx_polarity_flip_fabric173.BCM8879X=0 @@ -744,25 +746,410 @@ phy_tx_polarity_flip_fabric174.BCM8879X=1 phy_tx_polarity_flip_fabric175.BCM8879X=0 phy_tx_polarity_flip_fabric176.BCM8879X=0 -phy_tx_polarity_flip_fabric177.BCM8879X=0 -phy_tx_polarity_flip_fabric178.BCM8879X=1 +phy_tx_polarity_flip_fabric177.BCM8879X=1 +phy_tx_polarity_flip_fabric178.BCM8879X=0 phy_tx_polarity_flip_fabric179.BCM8879X=1 -phy_tx_polarity_flip_fabric180.BCM8879X=0 +phy_tx_polarity_flip_fabric180.BCM8879X=1 phy_tx_polarity_flip_fabric181.BCM8879X=0 -phy_tx_polarity_flip_fabric182.BCM8879X=0 +phy_tx_polarity_flip_fabric182.BCM8879X=1 phy_tx_polarity_flip_fabric183.BCM8879X=0 -phy_tx_polarity_flip_fabric184.BCM8879X=1 -phy_tx_polarity_flip_fabric185.BCM8879X=0 -phy_tx_polarity_flip_fabric186.BCM8879X=1 -phy_tx_polarity_flip_fabric187.BCM8879X=0 +phy_tx_polarity_flip_fabric184.BCM8879X=0 +phy_tx_polarity_flip_fabric185.BCM8879X=1 +phy_tx_polarity_flip_fabric186.BCM8879X=0 +phy_tx_polarity_flip_fabric187.BCM8879X=1 -phy_tx_polarity_flip_fabric188.BCM8879X=1 -phy_tx_polarity_flip_fabric189.BCM8879X=0 +phy_tx_polarity_flip_fabric188.BCM8879X=0 +phy_tx_polarity_flip_fabric189.BCM8879X=1 phy_tx_polarity_flip_fabric190.BCM8879X=0 phy_tx_polarity_flip_fabric191.BCM8879X=1 +port_init_cl72_0=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 +port_init_cl72_19=0 +port_init_cl72_20=0 +port_init_cl72_21=0 +port_init_cl72_22=0 +port_init_cl72_23=0 +port_init_cl72_24=0 +port_init_cl72_25=0 +port_init_cl72_26=0 +port_init_cl72_27=0 +port_init_cl72_28=0 +port_init_cl72_29=0 +port_init_cl72_30=0 +port_init_cl72_31=0 +port_init_cl72_32=0 +port_init_cl72_33=0 +port_init_cl72_34=0 +port_init_cl72_35=0 +port_init_cl72_36=0 +port_init_cl72_37=0 +port_init_cl72_38=0 +port_init_cl72_39=0 +port_init_cl72_40=0 +port_init_cl72_41=0 +port_init_cl72_42=0 +port_init_cl72_43=0 +port_init_cl72_44=0 +port_init_cl72_45=0 +port_init_cl72_46=0 +port_init_cl72_47=0 +port_init_cl72_48=0 +port_init_cl72_49=0 +port_init_cl72_50=0 +port_init_cl72_51=0 +port_init_cl72_52=0 +port_init_cl72_53=0 +port_init_cl72_54=0 +port_init_cl72_55=0 +port_init_cl72_56=0 +port_init_cl72_57=0 +port_init_cl72_58=0 +port_init_cl72_59=0 +port_init_cl72_60=0 +port_init_cl72_61=0 +port_init_cl72_62=0 +port_init_cl72_63=0 +port_init_cl72_64=0 +port_init_cl72_65=0 +port_init_cl72_66=0 +port_init_cl72_67=0 +port_init_cl72_68=0 +port_init_cl72_69=0 +port_init_cl72_70=0 +port_init_cl72_71=0 +port_init_cl72_72=0 +port_init_cl72_73=0 +port_init_cl72_74=0 +port_init_cl72_75=0 +port_init_cl72_76=0 +port_init_cl72_77=0 +port_init_cl72_78=0 +port_init_cl72_79=0 +port_init_cl72_80=0 +port_init_cl72_81=0 +port_init_cl72_82=0 +port_init_cl72_83=0 +port_init_cl72_84=0 +port_init_cl72_85=0 +port_init_cl72_86=0 +port_init_cl72_87=0 +port_init_cl72_88=0 +port_init_cl72_89=0 +port_init_cl72_90=0 +port_init_cl72_91=0 +port_init_cl72_92=0 +port_init_cl72_93=0 +port_init_cl72_94=0 +port_init_cl72_95=0 +port_init_cl72_96=0 +port_init_cl72_97=0 +port_init_cl72_98=0 +port_init_cl72_99=0 +port_init_cl72_100=0 +port_init_cl72_101=0 +port_init_cl72_102=0 +port_init_cl72_103=0 +port_init_cl72_104=0 +port_init_cl72_105=0 +port_init_cl72_106=0 +port_init_cl72_107=0 +port_init_cl72_108=0 +port_init_cl72_109=0 +port_init_cl72_110=0 +port_init_cl72_111=0 +port_init_cl72_112=0 +port_init_cl72_113=0 +port_init_cl72_114=0 +port_init_cl72_115=0 +port_init_cl72_116=0 +port_init_cl72_117=0 +port_init_cl72_118=0 +port_init_cl72_119=0 +port_init_cl72_120=0 +port_init_cl72_121=0 +port_init_cl72_122=0 +port_init_cl72_123=0 +port_init_cl72_124=0 +port_init_cl72_125=0 +port_init_cl72_126=0 +port_init_cl72_127=0 +port_init_cl72_128=0 +port_init_cl72_129=0 +port_init_cl72_130=0 +port_init_cl72_131=0 +port_init_cl72_132=0 +port_init_cl72_133=0 +port_init_cl72_134=0 +port_init_cl72_135=0 +port_init_cl72_136=0 +port_init_cl72_137=0 +port_init_cl72_138=0 +port_init_cl72_139=0 +port_init_cl72_140=0 +port_init_cl72_141=0 +port_init_cl72_142=0 +port_init_cl72_143=0 +port_init_cl72_144=0 +port_init_cl72_145=0 +port_init_cl72_146=0 +port_init_cl72_147=0 +port_init_cl72_148=0 +port_init_cl72_149=0 +port_init_cl72_150=0 +port_init_cl72_151=0 +port_init_cl72_152=0 +port_init_cl72_153=0 +port_init_cl72_154=0 +port_init_cl72_155=0 +port_init_cl72_156=0 +port_init_cl72_157=0 +port_init_cl72_158=0 +port_init_cl72_159=0 +port_init_cl72_160=0 +port_init_cl72_161=0 +port_init_cl72_162=0 +port_init_cl72_163=0 +port_init_cl72_164=0 +port_init_cl72_165=0 +port_init_cl72_166=0 +port_init_cl72_167=0 +port_init_cl72_168=0 +port_init_cl72_169=0 +port_init_cl72_170=0 +port_init_cl72_171=0 +port_init_cl72_172=0 +port_init_cl72_173=0 +port_init_cl72_174=0 +port_init_cl72_175=0 +port_init_cl72_176=0 +port_init_cl72_177=0 +port_init_cl72_178=0 +port_init_cl72_179=0 +port_init_cl72_180=0 +port_init_cl72_181=0 +port_init_cl72_182=0 +port_init_cl72_183=0 +port_init_cl72_184=0 +port_init_cl72_185=0 +port_init_cl72_186=0 +port_init_cl72_187=0 +port_init_cl72_188=0 +port_init_cl72_189=0 +port_init_cl72_190=0 +port_init_cl72_191=0 + +serdes_tx_taps_0.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_1.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_2.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_3.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_4.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_5.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_6.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_7.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_8.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_9.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_10.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_11.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_12.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_13.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_14.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_15.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_16.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_17.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_18.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_19.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_20.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_21.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_22.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_23.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_24.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_25.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_26.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_27.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_28.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_29.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_30.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_31.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_32.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_33.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_34.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_35.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_36.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_37.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_38.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_39.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_40.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_41.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_42.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_43.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_44.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_45.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_46.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_47.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_48.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_49.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_50.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_51.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_52.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_53.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_54.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_55.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_56.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_57.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_58.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_59.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_60.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_61.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_62.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_63.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_64.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_65.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_66.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_67.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_68.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_69.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_70.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_71.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_72.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_73.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_74.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_75.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_76.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_77.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_78.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_79.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_80.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_81.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_82.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_83.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_84.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_85.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_86.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_87.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_88.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_89.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_90.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_91.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_92.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_93.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_94.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_95.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_96.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_97.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_98.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_99.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_100.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_101.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_102.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_103.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_104.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_105.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_106.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_107.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_108.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_109.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_110.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_111.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_112.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_113.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_114.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_115.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_116.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_117.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_118.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_119.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_120.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_121.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_122.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_123.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_124.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_125.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_126.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_127.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_128.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_129.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_130.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_131.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_132.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_133.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_134.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_135.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_136.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_137.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_138.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_139.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_140.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_141.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_142.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_143.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_144.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_145.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_146.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_147.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_148.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_149.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_150.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_151.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_152.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_153.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_154.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_155.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_156.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_157.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_158.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_159.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_160.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_161.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_162.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_163.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_164.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_165.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_166.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_167.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_168.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_169.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_170.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_171.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_172.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_173.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_174.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_175.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_176.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_177.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_178.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_179.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_180.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_181.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_182.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_183.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_184.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_185.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_186.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_187.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_188.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_189.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_190.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_191.BCM8879X=pam4:-24:132:-12:0:0:0 serdes_lane_config_channel_mode_0.0=force_nr serdes_lane_config_channel_mode_1.0=force_nr diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/10/config-ramon-6-0.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/10/config-ramon-6-0.bcm index 23dac38a9ffc..372ea07d1cf0 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/10/config-ramon-6-0.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/10/config-ramon-6-0.bcm @@ -1,7 +1,8 @@ + appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=11 bcm_linkscan_interval.BCM8879X=0 -bcm_stat_interval.BCM8879X=0 +bcm_stat_interval.BCM8879X=4000000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 @@ -20,10 +21,10 @@ mdio_output_delay_int.BCM8879X=25 mem_cache_enable_parity.BCM8879X=1 mm_intr_enable.BCM8879X=0 mm_timeout_usec.BCM8879X=300000 -polled_irq_delay.BCM8879X=500000 +polled_irq_delay.BCM8879X=100000 polled_irq_mode.BCM8879X=1 port_fec.BCM8879X=7 -port_init_cl72.BCM8879X=1 +port_init_cl72.BCM8879X=0 port_init_speed.BCM8879X=53125 rate_ext_mdio_divisor.BCM8879X=14 rate_int_mdio_divisor.BCM8879X=50 @@ -42,134 +43,134 @@ tslam_dma_enable.BCM8879X=0 tslam_intr_enable.BCM8879X=0 tslam_timeout_usec.BCM8879X=5000000 -lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx1 -lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx3 +lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx1 lane_to_serdes_map_fabric_lane2.BCM8879X=rx2:tx2 -lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx0 +lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx3 -lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx6 +lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx4 lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx5 -lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx7 -lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx4 +lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx7 -lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx10 -lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx8 -lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx11 -lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx9 +lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx11 -lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx13 -lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx15 +lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx13 lane_to_serdes_map_fabric_lane14.BCM8879X=rx14:tx14 -lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx12 +lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx15 -lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx18 -lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx16 -lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx19 -lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx17 +lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx18 +lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx19 lane_to_serdes_map_fabric_lane20.BCM8879X=rx20:tx20 -lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx22 -lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx23 -lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx21 +lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx23 lane_to_serdes_map_fabric_lane24.BCM8879X=rx24:tx24 -lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx26 -lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx27 -lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx25 +lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx26 +lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx27 -lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx29 -lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx30 -lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx28 +lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx29 +lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx30 lane_to_serdes_map_fabric_lane31.BCM8879X=rx31:tx31 -lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx34 -lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx32 -lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx35 -lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx33 +lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx35 lane_to_serdes_map_fabric_lane36.BCM8879X=rx36:tx36 -lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx38 -lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx39 -lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx37 +lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx39 -lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx43 -lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx42 -lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx40 -lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx41 +lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx40 +lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx41 +lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx42 +lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx43 lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx44 -lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx46 -lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx47 -lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx45 +lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx46 +lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx47 -lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx49 -lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx50 -lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx51 -lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx48 +lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx51 -lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx54 +lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx52 lane_to_serdes_map_fabric_lane53.BCM8879X=rx53:tx53 -lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx55 -lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx52 +lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx55 -lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx58 +lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx56 lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx57 -lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx59 -lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx56 +lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx58 +lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx59 -lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx61 -lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx60 +lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx60 +lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx61 lane_to_serdes_map_fabric_lane62.BCM8879X=rx62:tx62 lane_to_serdes_map_fabric_lane63.BCM8879X=rx63:tx63 lane_to_serdes_map_fabric_lane64.BCM8879X=rx64:tx64 -lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx66 -lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx65 +lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx66 lane_to_serdes_map_fabric_lane67.BCM8879X=rx67:tx67 -lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx69 -lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx70 -lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx71 -lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx68 +lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx71 -lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx74 -lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx72 -lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx75 -lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx73 +lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx72 +lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx75 -lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx78 -lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx76 -lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx79 -lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx77 +lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx76 +lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx77 +lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx78 +lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx79 lane_to_serdes_map_fabric_lane80.BCM8879X=rx80:tx80 -lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx82 -lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx83 -lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx81 +lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx82 +lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx83 -lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx85 -lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx86 -lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx87 -lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx84 +lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx87 -lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx90 -lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx88 -lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx91 -lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx89 +lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx89 +lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx90 +lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx91 -lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx95 -lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx94 -lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx92 -lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx93 +lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx92 +lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx94 +lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx95 lane_to_serdes_map_fabric_lane96.BCM8879X=rx96:tx96 -lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx98 -lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx97 +lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx98 lane_to_serdes_map_fabric_lane99.BCM8879X=rx99:tx99 -lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx101 -lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx102 -lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx100 +lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx102 lane_to_serdes_map_fabric_lane103.BCM8879X=rx103:tx103 lane_to_serdes_map_fabric_lane104.BCM8879X=rx104:tx104 @@ -182,10 +183,10 @@ lane_to_serdes_map_fabric_lane109.BCM8879X=rx109:tx109 lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx110 lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx111 -lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx115 -lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx114 -lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx113 -lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx112 +lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx112 +lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx114 +lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx115 lane_to_serdes_map_fabric_lane116.BCM8879X=rx116:tx116 lane_to_serdes_map_fabric_lane117.BCM8879X=rx117:tx117 @@ -197,15 +198,15 @@ lane_to_serdes_map_fabric_lane121.BCM8879X=rx121:tx121 lane_to_serdes_map_fabric_lane122.BCM8879X=rx122:tx122 lane_to_serdes_map_fabric_lane123.BCM8879X=rx123:tx123 -lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx127 -lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx126 -lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx124 -lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx125 +lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx127 -lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx131 -lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx130 -lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx129 -lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx128 +lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx131 lane_to_serdes_map_fabric_lane132.BCM8879X=rx132:tx132 lane_to_serdes_map_fabric_lane133.BCM8879X=rx133:tx133 @@ -213,23 +214,23 @@ lane_to_serdes_map_fabric_lane134.BCM8879X=rx134:tx134 lane_to_serdes_map_fabric_lane135.BCM8879X=rx135:tx135 lane_to_serdes_map_fabric_lane136.BCM8879X=rx136:tx136 -lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx138 -lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx137 +lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx137 +lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx138 lane_to_serdes_map_fabric_lane139.BCM8879X=rx139:tx139 -lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx143 -lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx142 -lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx141 -lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx140 +lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx140 +lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx143 -lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx145 -lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx147 -lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx144 -lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx146 +lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx147 -lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx150 +lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx148 lane_to_serdes_map_fabric_lane149.BCM8879X=rx149:tx149 -lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx148 +lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx150 lane_to_serdes_map_fabric_lane151.BCM8879X=rx151:tx151 lane_to_serdes_map_fabric_lane152.BCM8879X=rx152:tx152 @@ -237,91 +238,91 @@ lane_to_serdes_map_fabric_lane153.BCM8879X=rx153:tx153 lane_to_serdes_map_fabric_lane154.BCM8879X=rx154:tx154 lane_to_serdes_map_fabric_lane155.BCM8879X=rx155:tx155 -lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx157 -lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx159 -lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx156 -lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx158 +lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx156 +lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx157 +lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx158 +lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx159 lane_to_serdes_map_fabric_lane160.BCM8879X=rx160:tx160 -lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx162 -lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx161 +lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx162 lane_to_serdes_map_fabric_lane163.BCM8879X=rx163:tx163 -lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx166 -lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx164 -lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx165 +lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx166 lane_to_serdes_map_fabric_lane167.BCM8879X=rx167:tx167 -lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx170 -lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx168 -lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx169 +lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx168 +lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx170 lane_to_serdes_map_fabric_lane171.BCM8879X=rx171:tx171 -lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx173 -lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx174 -lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx175 -lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx172 +lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx172 +lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx173 +lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx174 +lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx175 lane_to_serdes_map_fabric_lane176.BCM8879X=rx176:tx176 -lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx178 -lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx177 +lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx178 lane_to_serdes_map_fabric_lane179.BCM8879X=rx179:tx179 -lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx182 -lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx180 -lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx181 +lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx180 +lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx182 lane_to_serdes_map_fabric_lane183.BCM8879X=rx183:tx183 -lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx187 -lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx184 +lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx185 lane_to_serdes_map_fabric_lane186.BCM8879X=rx186:tx186 -lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx185 +lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx187 -lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx190 +lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx188 lane_to_serdes_map_fabric_lane189.BCM8879X=rx189:tx189 -lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx191 -lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx188 +lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx190 +lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx191 -phy_rx_polarity_flip_fabric0.BCM8879X=0 -phy_rx_polarity_flip_fabric1.BCM8879X=1 -phy_rx_polarity_flip_fabric2.BCM8879X=0 -phy_rx_polarity_flip_fabric3.BCM8879X=1 +phy_rx_polarity_flip_fabric0.BCM8879X=1 +phy_rx_polarity_flip_fabric1.BCM8879X=0 +phy_rx_polarity_flip_fabric2.BCM8879X=1 +phy_rx_polarity_flip_fabric3.BCM8879X=0 -phy_rx_polarity_flip_fabric4.BCM8879X=1 -phy_rx_polarity_flip_fabric5.BCM8879X=0 -phy_rx_polarity_flip_fabric6.BCM8879X=1 -phy_rx_polarity_flip_fabric7.BCM8879X=0 +phy_rx_polarity_flip_fabric4.BCM8879X=0 +phy_rx_polarity_flip_fabric5.BCM8879X=1 +phy_rx_polarity_flip_fabric6.BCM8879X=0 +phy_rx_polarity_flip_fabric7.BCM8879X=1 phy_rx_polarity_flip_fabric8.BCM8879X=1 phy_rx_polarity_flip_fabric9.BCM8879X=0 phy_rx_polarity_flip_fabric10.BCM8879X=1 phy_rx_polarity_flip_fabric11.BCM8879X=0 -phy_rx_polarity_flip_fabric12.BCM8879X=1 -phy_rx_polarity_flip_fabric13.BCM8879X=0 +phy_rx_polarity_flip_fabric12.BCM8879X=0 +phy_rx_polarity_flip_fabric13.BCM8879X=1 phy_rx_polarity_flip_fabric14.BCM8879X=0 phy_rx_polarity_flip_fabric15.BCM8879X=1 -phy_rx_polarity_flip_fabric16.BCM8879X=0 -phy_rx_polarity_flip_fabric17.BCM8879X=1 -phy_rx_polarity_flip_fabric18.BCM8879X=0 -phy_rx_polarity_flip_fabric19.BCM8879X=1 +phy_rx_polarity_flip_fabric16.BCM8879X=1 +phy_rx_polarity_flip_fabric17.BCM8879X=0 +phy_rx_polarity_flip_fabric18.BCM8879X=1 +phy_rx_polarity_flip_fabric19.BCM8879X=0 -phy_rx_polarity_flip_fabric20.BCM8879X=0 -phy_rx_polarity_flip_fabric21.BCM8879X=1 +phy_rx_polarity_flip_fabric20.BCM8879X=1 +phy_rx_polarity_flip_fabric21.BCM8879X=0 phy_rx_polarity_flip_fabric22.BCM8879X=1 phy_rx_polarity_flip_fabric23.BCM8879X=0 -phy_rx_polarity_flip_fabric24.BCM8879X=0 -phy_rx_polarity_flip_fabric25.BCM8879X=1 -phy_rx_polarity_flip_fabric26.BCM8879X=0 -phy_rx_polarity_flip_fabric27.BCM8879X=1 +phy_rx_polarity_flip_fabric24.BCM8879X=1 +phy_rx_polarity_flip_fabric25.BCM8879X=0 +phy_rx_polarity_flip_fabric26.BCM8879X=1 +phy_rx_polarity_flip_fabric27.BCM8879X=0 -phy_rx_polarity_flip_fabric28.BCM8879X=1 -phy_rx_polarity_flip_fabric29.BCM8879X=0 -phy_rx_polarity_flip_fabric30.BCM8879X=1 -phy_rx_polarity_flip_fabric31.BCM8879X=0 +phy_rx_polarity_flip_fabric28.BCM8879X=0 +phy_rx_polarity_flip_fabric29.BCM8879X=1 +phy_rx_polarity_flip_fabric30.BCM8879X=0 +phy_rx_polarity_flip_fabric31.BCM8879X=1 phy_rx_polarity_flip_fabric32.BCM8879X=1 phy_rx_polarity_flip_fabric33.BCM8879X=0 @@ -330,11 +331,11 @@ phy_rx_polarity_flip_fabric35.BCM8879X=0 phy_rx_polarity_flip_fabric36.BCM8879X=0 phy_rx_polarity_flip_fabric37.BCM8879X=1 -phy_rx_polarity_flip_fabric38.BCM8879X=1 -phy_rx_polarity_flip_fabric39.BCM8879X=0 +phy_rx_polarity_flip_fabric38.BCM8879X=0 +phy_rx_polarity_flip_fabric39.BCM8879X=1 -phy_rx_polarity_flip_fabric40.BCM8879X=0 -phy_rx_polarity_flip_fabric41.BCM8879X=1 +phy_rx_polarity_flip_fabric40.BCM8879X=1 +phy_rx_polarity_flip_fabric41.BCM8879X=0 phy_rx_polarity_flip_fabric42.BCM8879X=1 phy_rx_polarity_flip_fabric43.BCM8879X=0 @@ -350,63 +351,63 @@ phy_rx_polarity_flip_fabric51.BCM8879X=1 phy_rx_polarity_flip_fabric52.BCM8879X=1 phy_rx_polarity_flip_fabric53.BCM8879X=0 -phy_rx_polarity_flip_fabric54.BCM8879X=0 -phy_rx_polarity_flip_fabric55.BCM8879X=1 +phy_rx_polarity_flip_fabric54.BCM8879X=1 +phy_rx_polarity_flip_fabric55.BCM8879X=0 -phy_rx_polarity_flip_fabric56.BCM8879X=1 -phy_rx_polarity_flip_fabric57.BCM8879X=0 +phy_rx_polarity_flip_fabric56.BCM8879X=0 +phy_rx_polarity_flip_fabric57.BCM8879X=1 phy_rx_polarity_flip_fabric58.BCM8879X=0 phy_rx_polarity_flip_fabric59.BCM8879X=1 -phy_rx_polarity_flip_fabric60.BCM8879X=1 -phy_rx_polarity_flip_fabric61.BCM8879X=0 -phy_rx_polarity_flip_fabric62.BCM8879X=1 -phy_rx_polarity_flip_fabric63.BCM8879X=0 +phy_rx_polarity_flip_fabric60.BCM8879X=0 +phy_rx_polarity_flip_fabric61.BCM8879X=1 +phy_rx_polarity_flip_fabric62.BCM8879X=0 +phy_rx_polarity_flip_fabric63.BCM8879X=1 -phy_rx_polarity_flip_fabric64.BCM8879X=0 -phy_rx_polarity_flip_fabric65.BCM8879X=1 -phy_rx_polarity_flip_fabric66.BCM8879X=0 -phy_rx_polarity_flip_fabric67.BCM8879X=1 +phy_rx_polarity_flip_fabric64.BCM8879X=1 +phy_rx_polarity_flip_fabric65.BCM8879X=0 +phy_rx_polarity_flip_fabric66.BCM8879X=1 +phy_rx_polarity_flip_fabric67.BCM8879X=0 -phy_rx_polarity_flip_fabric68.BCM8879X=1 -phy_rx_polarity_flip_fabric69.BCM8879X=0 -phy_rx_polarity_flip_fabric70.BCM8879X=1 -phy_rx_polarity_flip_fabric71.BCM8879X=0 +phy_rx_polarity_flip_fabric68.BCM8879X=0 +phy_rx_polarity_flip_fabric69.BCM8879X=1 +phy_rx_polarity_flip_fabric70.BCM8879X=0 +phy_rx_polarity_flip_fabric71.BCM8879X=1 -phy_rx_polarity_flip_fabric72.BCM8879X=0 -phy_rx_polarity_flip_fabric73.BCM8879X=1 -phy_rx_polarity_flip_fabric74.BCM8879X=0 -phy_rx_polarity_flip_fabric75.BCM8879X=1 +phy_rx_polarity_flip_fabric72.BCM8879X=1 +phy_rx_polarity_flip_fabric73.BCM8879X=0 +phy_rx_polarity_flip_fabric74.BCM8879X=1 +phy_rx_polarity_flip_fabric75.BCM8879X=0 -phy_rx_polarity_flip_fabric76.BCM8879X=0 -phy_rx_polarity_flip_fabric77.BCM8879X=1 +phy_rx_polarity_flip_fabric76.BCM8879X=1 +phy_rx_polarity_flip_fabric77.BCM8879X=0 phy_rx_polarity_flip_fabric78.BCM8879X=1 phy_rx_polarity_flip_fabric79.BCM8879X=0 phy_rx_polarity_flip_fabric80.BCM8879X=0 phy_rx_polarity_flip_fabric81.BCM8879X=1 -phy_rx_polarity_flip_fabric82.BCM8879X=1 -phy_rx_polarity_flip_fabric83.BCM8879X=0 +phy_rx_polarity_flip_fabric82.BCM8879X=0 +phy_rx_polarity_flip_fabric83.BCM8879X=1 phy_rx_polarity_flip_fabric84.BCM8879X=1 phy_rx_polarity_flip_fabric85.BCM8879X=0 phy_rx_polarity_flip_fabric86.BCM8879X=1 phy_rx_polarity_flip_fabric87.BCM8879X=0 -phy_rx_polarity_flip_fabric88.BCM8879X=1 -phy_rx_polarity_flip_fabric89.BCM8879X=0 -phy_rx_polarity_flip_fabric90.BCM8879X=1 -phy_rx_polarity_flip_fabric91.BCM8879X=0 +phy_rx_polarity_flip_fabric88.BCM8879X=0 +phy_rx_polarity_flip_fabric89.BCM8879X=1 +phy_rx_polarity_flip_fabric90.BCM8879X=0 +phy_rx_polarity_flip_fabric91.BCM8879X=1 -phy_rx_polarity_flip_fabric92.BCM8879X=0 -phy_rx_polarity_flip_fabric93.BCM8879X=1 -phy_rx_polarity_flip_fabric94.BCM8879X=0 -phy_rx_polarity_flip_fabric95.BCM8879X=1 +phy_rx_polarity_flip_fabric92.BCM8879X=1 +phy_rx_polarity_flip_fabric93.BCM8879X=0 +phy_rx_polarity_flip_fabric94.BCM8879X=1 +phy_rx_polarity_flip_fabric95.BCM8879X=0 -phy_rx_polarity_flip_fabric96.BCM8879X=0 -phy_rx_polarity_flip_fabric97.BCM8879X=1 -phy_rx_polarity_flip_fabric98.BCM8879X=0 -phy_rx_polarity_flip_fabric99.BCM8879X=1 +phy_rx_polarity_flip_fabric96.BCM8879X=1 +phy_rx_polarity_flip_fabric97.BCM8879X=0 +phy_rx_polarity_flip_fabric98.BCM8879X=1 +phy_rx_polarity_flip_fabric99.BCM8879X=0 phy_rx_polarity_flip_fabric100.BCM8879X=0 phy_rx_polarity_flip_fabric101.BCM8879X=1 @@ -418,10 +419,10 @@ phy_rx_polarity_flip_fabric105.BCM8879X=1 phy_rx_polarity_flip_fabric106.BCM8879X=0 phy_rx_polarity_flip_fabric107.BCM8879X=1 -phy_rx_polarity_flip_fabric108.BCM8879X=1 -phy_rx_polarity_flip_fabric109.BCM8879X=0 -phy_rx_polarity_flip_fabric110.BCM8879X=1 -phy_rx_polarity_flip_fabric111.BCM8879X=0 +phy_rx_polarity_flip_fabric108.BCM8879X=0 +phy_rx_polarity_flip_fabric109.BCM8879X=1 +phy_rx_polarity_flip_fabric110.BCM8879X=0 +phy_rx_polarity_flip_fabric111.BCM8879X=1 phy_rx_polarity_flip_fabric112.BCM8879X=0 phy_rx_polarity_flip_fabric113.BCM8879X=1 @@ -433,223 +434,223 @@ phy_rx_polarity_flip_fabric117.BCM8879X=0 phy_rx_polarity_flip_fabric118.BCM8879X=1 phy_rx_polarity_flip_fabric119.BCM8879X=0 -phy_rx_polarity_flip_fabric120.BCM8879X=0 -phy_rx_polarity_flip_fabric121.BCM8879X=1 -phy_rx_polarity_flip_fabric122.BCM8879X=0 -phy_rx_polarity_flip_fabric123.BCM8879X=1 +phy_rx_polarity_flip_fabric120.BCM8879X=1 +phy_rx_polarity_flip_fabric121.BCM8879X=0 +phy_rx_polarity_flip_fabric122.BCM8879X=1 +phy_rx_polarity_flip_fabric123.BCM8879X=0 phy_rx_polarity_flip_fabric124.BCM8879X=0 phy_rx_polarity_flip_fabric125.BCM8879X=1 phy_rx_polarity_flip_fabric126.BCM8879X=0 phy_rx_polarity_flip_fabric127.BCM8879X=1 -phy_rx_polarity_flip_fabric128.BCM8879X=0 -phy_rx_polarity_flip_fabric129.BCM8879X=1 -phy_rx_polarity_flip_fabric130.BCM8879X=0 -phy_rx_polarity_flip_fabric131.BCM8879X=1 +phy_rx_polarity_flip_fabric128.BCM8879X=1 +phy_rx_polarity_flip_fabric129.BCM8879X=0 +phy_rx_polarity_flip_fabric130.BCM8879X=1 +phy_rx_polarity_flip_fabric131.BCM8879X=0 -phy_rx_polarity_flip_fabric132.BCM8879X=1 -phy_rx_polarity_flip_fabric133.BCM8879X=0 -phy_rx_polarity_flip_fabric134.BCM8879X=1 -phy_rx_polarity_flip_fabric135.BCM8879X=0 +phy_rx_polarity_flip_fabric132.BCM8879X=0 +phy_rx_polarity_flip_fabric133.BCM8879X=1 +phy_rx_polarity_flip_fabric134.BCM8879X=0 +phy_rx_polarity_flip_fabric135.BCM8879X=1 phy_rx_polarity_flip_fabric136.BCM8879X=1 phy_rx_polarity_flip_fabric137.BCM8879X=0 phy_rx_polarity_flip_fabric138.BCM8879X=1 phy_rx_polarity_flip_fabric139.BCM8879X=0 -phy_rx_polarity_flip_fabric140.BCM8879X=0 -phy_rx_polarity_flip_fabric141.BCM8879X=1 -phy_rx_polarity_flip_fabric142.BCM8879X=0 -phy_rx_polarity_flip_fabric143.BCM8879X=1 +phy_rx_polarity_flip_fabric140.BCM8879X=1 +phy_rx_polarity_flip_fabric141.BCM8879X=0 +phy_rx_polarity_flip_fabric142.BCM8879X=1 +phy_rx_polarity_flip_fabric143.BCM8879X=0 -phy_rx_polarity_flip_fabric144.BCM8879X=0 -phy_rx_polarity_flip_fabric145.BCM8879X=1 -phy_rx_polarity_flip_fabric146.BCM8879X=0 -phy_rx_polarity_flip_fabric147.BCM8879X=1 +phy_rx_polarity_flip_fabric144.BCM8879X=1 +phy_rx_polarity_flip_fabric145.BCM8879X=0 +phy_rx_polarity_flip_fabric146.BCM8879X=1 +phy_rx_polarity_flip_fabric147.BCM8879X=0 phy_rx_polarity_flip_fabric148.BCM8879X=1 phy_rx_polarity_flip_fabric149.BCM8879X=0 phy_rx_polarity_flip_fabric150.BCM8879X=1 phy_rx_polarity_flip_fabric151.BCM8879X=0 -phy_rx_polarity_flip_fabric152.BCM8879X=1 -phy_rx_polarity_flip_fabric153.BCM8879X=0 -phy_rx_polarity_flip_fabric154.BCM8879X=1 -phy_rx_polarity_flip_fabric155.BCM8879X=0 +phy_rx_polarity_flip_fabric152.BCM8879X=0 +phy_rx_polarity_flip_fabric153.BCM8879X=1 +phy_rx_polarity_flip_fabric154.BCM8879X=0 +phy_rx_polarity_flip_fabric155.BCM8879X=1 -phy_rx_polarity_flip_fabric156.BCM8879X=0 -phy_rx_polarity_flip_fabric157.BCM8879X=1 -phy_rx_polarity_flip_fabric158.BCM8879X=0 -phy_rx_polarity_flip_fabric159.BCM8879X=1 +phy_rx_polarity_flip_fabric156.BCM8879X=1 +phy_rx_polarity_flip_fabric157.BCM8879X=0 +phy_rx_polarity_flip_fabric158.BCM8879X=1 +phy_rx_polarity_flip_fabric159.BCM8879X=0 -phy_rx_polarity_flip_fabric160.BCM8879X=0 -phy_rx_polarity_flip_fabric161.BCM8879X=1 -phy_rx_polarity_flip_fabric162.BCM8879X=0 -phy_rx_polarity_flip_fabric163.BCM8879X=1 +phy_rx_polarity_flip_fabric160.BCM8879X=1 +phy_rx_polarity_flip_fabric161.BCM8879X=0 +phy_rx_polarity_flip_fabric162.BCM8879X=1 +phy_rx_polarity_flip_fabric163.BCM8879X=0 phy_rx_polarity_flip_fabric164.BCM8879X=0 phy_rx_polarity_flip_fabric165.BCM8879X=1 phy_rx_polarity_flip_fabric166.BCM8879X=0 phy_rx_polarity_flip_fabric167.BCM8879X=1 -phy_rx_polarity_flip_fabric168.BCM8879X=0 -phy_rx_polarity_flip_fabric169.BCM8879X=1 -phy_rx_polarity_flip_fabric170.BCM8879X=0 -phy_rx_polarity_flip_fabric171.BCM8879X=1 +phy_rx_polarity_flip_fabric168.BCM8879X=1 +phy_rx_polarity_flip_fabric169.BCM8879X=0 +phy_rx_polarity_flip_fabric170.BCM8879X=1 +phy_rx_polarity_flip_fabric171.BCM8879X=0 phy_rx_polarity_flip_fabric172.BCM8879X=1 phy_rx_polarity_flip_fabric173.BCM8879X=0 phy_rx_polarity_flip_fabric174.BCM8879X=1 phy_rx_polarity_flip_fabric175.BCM8879X=0 -phy_rx_polarity_flip_fabric176.BCM8879X=1 -phy_rx_polarity_flip_fabric177.BCM8879X=0 -phy_rx_polarity_flip_fabric178.BCM8879X=1 -phy_rx_polarity_flip_fabric179.BCM8879X=0 +phy_rx_polarity_flip_fabric176.BCM8879X=0 +phy_rx_polarity_flip_fabric177.BCM8879X=1 +phy_rx_polarity_flip_fabric178.BCM8879X=0 +phy_rx_polarity_flip_fabric179.BCM8879X=1 -phy_rx_polarity_flip_fabric180.BCM8879X=0 -phy_rx_polarity_flip_fabric181.BCM8879X=1 -phy_rx_polarity_flip_fabric182.BCM8879X=0 -phy_rx_polarity_flip_fabric183.BCM8879X=1 +phy_rx_polarity_flip_fabric180.BCM8879X=1 +phy_rx_polarity_flip_fabric181.BCM8879X=0 +phy_rx_polarity_flip_fabric182.BCM8879X=1 +phy_rx_polarity_flip_fabric183.BCM8879X=0 phy_rx_polarity_flip_fabric184.BCM8879X=0 phy_rx_polarity_flip_fabric185.BCM8879X=1 phy_rx_polarity_flip_fabric186.BCM8879X=0 phy_rx_polarity_flip_fabric187.BCM8879X=1 -phy_rx_polarity_flip_fabric188.BCM8879X=0 -phy_rx_polarity_flip_fabric189.BCM8879X=1 -phy_rx_polarity_flip_fabric190.BCM8879X=0 -phy_rx_polarity_flip_fabric191.BCM8879X=1 +phy_rx_polarity_flip_fabric188.BCM8879X=1 +phy_rx_polarity_flip_fabric189.BCM8879X=0 +phy_rx_polarity_flip_fabric190.BCM8879X=1 +phy_rx_polarity_flip_fabric191.BCM8879X=0 phy_tx_polarity_flip_fabric0.BCM8879X=0 -phy_tx_polarity_flip_fabric1.BCM8879X=0 -phy_tx_polarity_flip_fabric2.BCM8879X=1 +phy_tx_polarity_flip_fabric1.BCM8879X=1 +phy_tx_polarity_flip_fabric2.BCM8879X=0 phy_tx_polarity_flip_fabric3.BCM8879X=1 -phy_tx_polarity_flip_fabric4.BCM8879X=0 -phy_tx_polarity_flip_fabric5.BCM8879X=1 +phy_tx_polarity_flip_fabric4.BCM8879X=1 +phy_tx_polarity_flip_fabric5.BCM8879X=0 phy_tx_polarity_flip_fabric6.BCM8879X=1 phy_tx_polarity_flip_fabric7.BCM8879X=0 phy_tx_polarity_flip_fabric8.BCM8879X=0 -phy_tx_polarity_flip_fabric9.BCM8879X=0 -phy_tx_polarity_flip_fabric10.BCM8879X=1 +phy_tx_polarity_flip_fabric9.BCM8879X=1 +phy_tx_polarity_flip_fabric10.BCM8879X=0 phy_tx_polarity_flip_fabric11.BCM8879X=1 -phy_tx_polarity_flip_fabric12.BCM8879X=0 -phy_tx_polarity_flip_fabric13.BCM8879X=1 +phy_tx_polarity_flip_fabric12.BCM8879X=1 +phy_tx_polarity_flip_fabric13.BCM8879X=0 phy_tx_polarity_flip_fabric14.BCM8879X=1 -phy_tx_polarity_flip_fabric15.BCM8879X=1 +phy_tx_polarity_flip_fabric15.BCM8879X=0 -phy_tx_polarity_flip_fabric16.BCM8879X=1 +phy_tx_polarity_flip_fabric16.BCM8879X=0 phy_tx_polarity_flip_fabric17.BCM8879X=1 -phy_tx_polarity_flip_fabric18.BCM8879X=1 -phy_tx_polarity_flip_fabric19.BCM8879X=0 +phy_tx_polarity_flip_fabric18.BCM8879X=0 +phy_tx_polarity_flip_fabric19.BCM8879X=1 -phy_tx_polarity_flip_fabric20.BCM8879X=1 +phy_tx_polarity_flip_fabric20.BCM8879X=0 phy_tx_polarity_flip_fabric21.BCM8879X=1 -phy_tx_polarity_flip_fabric22.BCM8879X=1 -phy_tx_polarity_flip_fabric23.BCM8879X=0 +phy_tx_polarity_flip_fabric22.BCM8879X=0 +phy_tx_polarity_flip_fabric23.BCM8879X=1 -phy_tx_polarity_flip_fabric24.BCM8879X=1 +phy_tx_polarity_flip_fabric24.BCM8879X=0 phy_tx_polarity_flip_fabric25.BCM8879X=1 phy_tx_polarity_flip_fabric26.BCM8879X=0 -phy_tx_polarity_flip_fabric27.BCM8879X=0 +phy_tx_polarity_flip_fabric27.BCM8879X=1 phy_tx_polarity_flip_fabric28.BCM8879X=1 phy_tx_polarity_flip_fabric29.BCM8879X=0 -phy_tx_polarity_flip_fabric30.BCM8879X=0 -phy_tx_polarity_flip_fabric31.BCM8879X=1 +phy_tx_polarity_flip_fabric30.BCM8879X=1 +phy_tx_polarity_flip_fabric31.BCM8879X=0 phy_tx_polarity_flip_fabric32.BCM8879X=0 -phy_tx_polarity_flip_fabric33.BCM8879X=0 -phy_tx_polarity_flip_fabric34.BCM8879X=1 +phy_tx_polarity_flip_fabric33.BCM8879X=1 +phy_tx_polarity_flip_fabric34.BCM8879X=0 phy_tx_polarity_flip_fabric35.BCM8879X=1 phy_tx_polarity_flip_fabric36.BCM8879X=1 -phy_tx_polarity_flip_fabric37.BCM8879X=1 +phy_tx_polarity_flip_fabric37.BCM8879X=0 phy_tx_polarity_flip_fabric38.BCM8879X=1 phy_tx_polarity_flip_fabric39.BCM8879X=0 phy_tx_polarity_flip_fabric40.BCM8879X=0 phy_tx_polarity_flip_fabric41.BCM8879X=1 phy_tx_polarity_flip_fabric42.BCM8879X=0 -phy_tx_polarity_flip_fabric43.BCM8879X=0 +phy_tx_polarity_flip_fabric43.BCM8879X=1 -phy_tx_polarity_flip_fabric44.BCM8879X=1 +phy_tx_polarity_flip_fabric44.BCM8879X=0 phy_tx_polarity_flip_fabric45.BCM8879X=1 phy_tx_polarity_flip_fabric46.BCM8879X=0 phy_tx_polarity_flip_fabric47.BCM8879X=1 -phy_tx_polarity_flip_fabric48.BCM8879X=0 -phy_tx_polarity_flip_fabric49.BCM8879X=1 +phy_tx_polarity_flip_fabric48.BCM8879X=1 +phy_tx_polarity_flip_fabric49.BCM8879X=0 phy_tx_polarity_flip_fabric50.BCM8879X=1 -phy_tx_polarity_flip_fabric51.BCM8879X=1 +phy_tx_polarity_flip_fabric51.BCM8879X=0 -phy_tx_polarity_flip_fabric52.BCM8879X=1 +phy_tx_polarity_flip_fabric52.BCM8879X=0 phy_tx_polarity_flip_fabric53.BCM8879X=1 phy_tx_polarity_flip_fabric54.BCM8879X=0 phy_tx_polarity_flip_fabric55.BCM8879X=1 -phy_tx_polarity_flip_fabric56.BCM8879X=0 +phy_tx_polarity_flip_fabric56.BCM8879X=1 phy_tx_polarity_flip_fabric57.BCM8879X=0 -phy_tx_polarity_flip_fabric58.BCM8879X=0 -phy_tx_polarity_flip_fabric59.BCM8879X=1 +phy_tx_polarity_flip_fabric58.BCM8879X=1 +phy_tx_polarity_flip_fabric59.BCM8879X=0 phy_tx_polarity_flip_fabric60.BCM8879X=1 phy_tx_polarity_flip_fabric61.BCM8879X=0 -phy_tx_polarity_flip_fabric62.BCM8879X=0 -phy_tx_polarity_flip_fabric63.BCM8879X=1 +phy_tx_polarity_flip_fabric62.BCM8879X=1 +phy_tx_polarity_flip_fabric63.BCM8879X=0 -phy_tx_polarity_flip_fabric64.BCM8879X=1 +phy_tx_polarity_flip_fabric64.BCM8879X=0 phy_tx_polarity_flip_fabric65.BCM8879X=1 phy_tx_polarity_flip_fabric66.BCM8879X=0 -phy_tx_polarity_flip_fabric67.BCM8879X=0 +phy_tx_polarity_flip_fabric67.BCM8879X=1 phy_tx_polarity_flip_fabric68.BCM8879X=1 phy_tx_polarity_flip_fabric69.BCM8879X=0 phy_tx_polarity_flip_fabric70.BCM8879X=1 phy_tx_polarity_flip_fabric71.BCM8879X=0 -phy_tx_polarity_flip_fabric72.BCM8879X=1 +phy_tx_polarity_flip_fabric72.BCM8879X=0 phy_tx_polarity_flip_fabric73.BCM8879X=1 -phy_tx_polarity_flip_fabric74.BCM8879X=1 -phy_tx_polarity_flip_fabric75.BCM8879X=0 +phy_tx_polarity_flip_fabric74.BCM8879X=0 +phy_tx_polarity_flip_fabric75.BCM8879X=1 -phy_tx_polarity_flip_fabric76.BCM8879X=1 +phy_tx_polarity_flip_fabric76.BCM8879X=0 phy_tx_polarity_flip_fabric77.BCM8879X=1 phy_tx_polarity_flip_fabric78.BCM8879X=0 phy_tx_polarity_flip_fabric79.BCM8879X=1 phy_tx_polarity_flip_fabric80.BCM8879X=1 -phy_tx_polarity_flip_fabric81.BCM8879X=1 -phy_tx_polarity_flip_fabric82.BCM8879X=0 -phy_tx_polarity_flip_fabric83.BCM8879X=1 +phy_tx_polarity_flip_fabric81.BCM8879X=0 +phy_tx_polarity_flip_fabric82.BCM8879X=1 +phy_tx_polarity_flip_fabric83.BCM8879X=0 -phy_tx_polarity_flip_fabric84.BCM8879X=1 -phy_tx_polarity_flip_fabric85.BCM8879X=0 -phy_tx_polarity_flip_fabric86.BCM8879X=1 -phy_tx_polarity_flip_fabric87.BCM8879X=0 +phy_tx_polarity_flip_fabric84.BCM8879X=0 +phy_tx_polarity_flip_fabric85.BCM8879X=1 +phy_tx_polarity_flip_fabric86.BCM8879X=0 +phy_tx_polarity_flip_fabric87.BCM8879X=1 -phy_tx_polarity_flip_fabric88.BCM8879X=0 +phy_tx_polarity_flip_fabric88.BCM8879X=1 phy_tx_polarity_flip_fabric89.BCM8879X=0 phy_tx_polarity_flip_fabric90.BCM8879X=1 -phy_tx_polarity_flip_fabric91.BCM8879X=1 +phy_tx_polarity_flip_fabric91.BCM8879X=0 phy_tx_polarity_flip_fabric92.BCM8879X=0 phy_tx_polarity_flip_fabric93.BCM8879X=1 -phy_tx_polarity_flip_fabric94.BCM8879X=1 -phy_tx_polarity_flip_fabric95.BCM8879X=0 +phy_tx_polarity_flip_fabric94.BCM8879X=0 +phy_tx_polarity_flip_fabric95.BCM8879X=1 -phy_tx_polarity_flip_fabric96.BCM8879X=1 +phy_tx_polarity_flip_fabric96.BCM8879X=0 phy_tx_polarity_flip_fabric97.BCM8879X=1 phy_tx_polarity_flip_fabric98.BCM8879X=0 -phy_tx_polarity_flip_fabric99.BCM8879X=0 +phy_tx_polarity_flip_fabric99.BCM8879X=1 -phy_tx_polarity_flip_fabric100.BCM8879X=0 -phy_tx_polarity_flip_fabric101.BCM8879X=1 +phy_tx_polarity_flip_fabric100.BCM8879X=1 +phy_tx_polarity_flip_fabric101.BCM8879X=0 phy_tx_polarity_flip_fabric102.BCM8879X=1 phy_tx_polarity_flip_fabric103.BCM8879X=0 @@ -658,28 +659,28 @@ phy_tx_polarity_flip_fabric105.BCM8879X=0 phy_tx_polarity_flip_fabric106.BCM8879X=1 phy_tx_polarity_flip_fabric107.BCM8879X=0 -phy_tx_polarity_flip_fabric108.BCM8879X=0 -phy_tx_polarity_flip_fabric109.BCM8879X=1 -phy_tx_polarity_flip_fabric110.BCM8879X=0 -phy_tx_polarity_flip_fabric111.BCM8879X=1 +phy_tx_polarity_flip_fabric108.BCM8879X=1 +phy_tx_polarity_flip_fabric109.BCM8879X=0 +phy_tx_polarity_flip_fabric110.BCM8879X=1 +phy_tx_polarity_flip_fabric111.BCM8879X=0 -phy_tx_polarity_flip_fabric112.BCM8879X=0 -phy_tx_polarity_flip_fabric113.BCM8879X=1 -phy_tx_polarity_flip_fabric114.BCM8879X=0 -phy_tx_polarity_flip_fabric115.BCM8879X=1 +phy_tx_polarity_flip_fabric112.BCM8879X=1 +phy_tx_polarity_flip_fabric113.BCM8879X=0 +phy_tx_polarity_flip_fabric114.BCM8879X=1 +phy_tx_polarity_flip_fabric115.BCM8879X=0 phy_tx_polarity_flip_fabric116.BCM8879X=0 phy_tx_polarity_flip_fabric117.BCM8879X=1 phy_tx_polarity_flip_fabric118.BCM8879X=0 phy_tx_polarity_flip_fabric119.BCM8879X=1 -phy_tx_polarity_flip_fabric120.BCM8879X=1 -phy_tx_polarity_flip_fabric121.BCM8879X=0 -phy_tx_polarity_flip_fabric122.BCM8879X=1 -phy_tx_polarity_flip_fabric123.BCM8879X=0 +phy_tx_polarity_flip_fabric120.BCM8879X=0 +phy_tx_polarity_flip_fabric121.BCM8879X=1 +phy_tx_polarity_flip_fabric122.BCM8879X=0 +phy_tx_polarity_flip_fabric123.BCM8879X=1 -phy_tx_polarity_flip_fabric124.BCM8879X=0 -phy_tx_polarity_flip_fabric125.BCM8879X=1 +phy_tx_polarity_flip_fabric124.BCM8879X=1 +phy_tx_polarity_flip_fabric125.BCM8879X=0 phy_tx_polarity_flip_fabric126.BCM8879X=1 phy_tx_polarity_flip_fabric127.BCM8879X=0 @@ -688,14 +689,14 @@ phy_tx_polarity_flip_fabric129.BCM8879X=1 phy_tx_polarity_flip_fabric130.BCM8879X=0 phy_tx_polarity_flip_fabric131.BCM8879X=1 -phy_tx_polarity_flip_fabric132.BCM8879X=0 -phy_tx_polarity_flip_fabric133.BCM8879X=1 -phy_tx_polarity_flip_fabric134.BCM8879X=0 -phy_tx_polarity_flip_fabric135.BCM8879X=1 +phy_tx_polarity_flip_fabric132.BCM8879X=1 +phy_tx_polarity_flip_fabric133.BCM8879X=0 +phy_tx_polarity_flip_fabric134.BCM8879X=1 +phy_tx_polarity_flip_fabric135.BCM8879X=0 phy_tx_polarity_flip_fabric136.BCM8879X=0 -phy_tx_polarity_flip_fabric137.BCM8879X=0 -phy_tx_polarity_flip_fabric138.BCM8879X=1 +phy_tx_polarity_flip_fabric137.BCM8879X=1 +phy_tx_polarity_flip_fabric138.BCM8879X=0 phy_tx_polarity_flip_fabric139.BCM8879X=1 phy_tx_polarity_flip_fabric140.BCM8879X=0 @@ -704,8 +705,8 @@ phy_tx_polarity_flip_fabric142.BCM8879X=0 phy_tx_polarity_flip_fabric143.BCM8879X=1 phy_tx_polarity_flip_fabric144.BCM8879X=0 -phy_tx_polarity_flip_fabric145.BCM8879X=0 -phy_tx_polarity_flip_fabric146.BCM8879X=1 +phy_tx_polarity_flip_fabric145.BCM8879X=1 +phy_tx_polarity_flip_fabric146.BCM8879X=0 phy_tx_polarity_flip_fabric147.BCM8879X=1 phy_tx_polarity_flip_fabric148.BCM8879X=0 @@ -713,56 +714,441 @@ phy_tx_polarity_flip_fabric149.BCM8879X=1 phy_tx_polarity_flip_fabric150.BCM8879X=0 phy_tx_polarity_flip_fabric151.BCM8879X=1 -phy_tx_polarity_flip_fabric152.BCM8879X=0 -phy_tx_polarity_flip_fabric153.BCM8879X=1 -phy_tx_polarity_flip_fabric154.BCM8879X=0 -phy_tx_polarity_flip_fabric155.BCM8879X=1 +phy_tx_polarity_flip_fabric152.BCM8879X=1 +phy_tx_polarity_flip_fabric153.BCM8879X=0 +phy_tx_polarity_flip_fabric154.BCM8879X=1 +phy_tx_polarity_flip_fabric155.BCM8879X=0 phy_tx_polarity_flip_fabric156.BCM8879X=0 -phy_tx_polarity_flip_fabric157.BCM8879X=0 -phy_tx_polarity_flip_fabric158.BCM8879X=1 +phy_tx_polarity_flip_fabric157.BCM8879X=1 +phy_tx_polarity_flip_fabric158.BCM8879X=0 phy_tx_polarity_flip_fabric159.BCM8879X=1 -phy_tx_polarity_flip_fabric160.BCM8879X=1 +phy_tx_polarity_flip_fabric160.BCM8879X=0 phy_tx_polarity_flip_fabric161.BCM8879X=1 phy_tx_polarity_flip_fabric162.BCM8879X=0 -phy_tx_polarity_flip_fabric163.BCM8879X=0 +phy_tx_polarity_flip_fabric163.BCM8879X=1 phy_tx_polarity_flip_fabric164.BCM8879X=1 -phy_tx_polarity_flip_fabric165.BCM8879X=1 -phy_tx_polarity_flip_fabric166.BCM8879X=0 +phy_tx_polarity_flip_fabric165.BCM8879X=0 +phy_tx_polarity_flip_fabric166.BCM8879X=1 phy_tx_polarity_flip_fabric167.BCM8879X=0 -phy_tx_polarity_flip_fabric168.BCM8879X=1 +phy_tx_polarity_flip_fabric168.BCM8879X=0 phy_tx_polarity_flip_fabric169.BCM8879X=1 phy_tx_polarity_flip_fabric170.BCM8879X=0 -phy_tx_polarity_flip_fabric171.BCM8879X=0 +phy_tx_polarity_flip_fabric171.BCM8879X=1 -phy_tx_polarity_flip_fabric172.BCM8879X=1 -phy_tx_polarity_flip_fabric173.BCM8879X=0 -phy_tx_polarity_flip_fabric174.BCM8879X=1 -phy_tx_polarity_flip_fabric175.BCM8879X=0 +phy_tx_polarity_flip_fabric172.BCM8879X=0 +phy_tx_polarity_flip_fabric173.BCM8879X=1 +phy_tx_polarity_flip_fabric174.BCM8879X=0 +phy_tx_polarity_flip_fabric175.BCM8879X=1 -phy_tx_polarity_flip_fabric176.BCM8879X=0 +phy_tx_polarity_flip_fabric176.BCM8879X=1 phy_tx_polarity_flip_fabric177.BCM8879X=0 phy_tx_polarity_flip_fabric178.BCM8879X=1 -phy_tx_polarity_flip_fabric179.BCM8879X=1 +phy_tx_polarity_flip_fabric179.BCM8879X=0 -phy_tx_polarity_flip_fabric180.BCM8879X=1 +phy_tx_polarity_flip_fabric180.BCM8879X=0 phy_tx_polarity_flip_fabric181.BCM8879X=1 phy_tx_polarity_flip_fabric182.BCM8879X=0 -phy_tx_polarity_flip_fabric183.BCM8879X=0 +phy_tx_polarity_flip_fabric183.BCM8879X=1 -phy_tx_polarity_flip_fabric184.BCM8879X=0 -phy_tx_polarity_flip_fabric185.BCM8879X=1 +phy_tx_polarity_flip_fabric184.BCM8879X=1 +phy_tx_polarity_flip_fabric185.BCM8879X=0 phy_tx_polarity_flip_fabric186.BCM8879X=1 phy_tx_polarity_flip_fabric187.BCM8879X=0 -phy_tx_polarity_flip_fabric188.BCM8879X=1 -phy_tx_polarity_flip_fabric189.BCM8879X=0 +phy_tx_polarity_flip_fabric188.BCM8879X=0 +phy_tx_polarity_flip_fabric189.BCM8879X=1 phy_tx_polarity_flip_fabric190.BCM8879X=0 phy_tx_polarity_flip_fabric191.BCM8879X=1 +port_init_cl72_0=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 +port_init_cl72_19=0 +port_init_cl72_20=0 +port_init_cl72_21=0 +port_init_cl72_22=0 +port_init_cl72_23=0 +port_init_cl72_24=0 +port_init_cl72_25=0 +port_init_cl72_26=0 +port_init_cl72_27=0 +port_init_cl72_28=0 +port_init_cl72_29=0 +port_init_cl72_30=0 +port_init_cl72_31=0 +port_init_cl72_32=0 +port_init_cl72_33=0 +port_init_cl72_34=0 +port_init_cl72_35=0 +port_init_cl72_36=0 +port_init_cl72_37=0 +port_init_cl72_38=0 +port_init_cl72_39=0 +port_init_cl72_40=0 +port_init_cl72_41=0 +port_init_cl72_42=0 +port_init_cl72_43=0 +port_init_cl72_44=0 +port_init_cl72_45=0 +port_init_cl72_46=0 +port_init_cl72_47=0 +port_init_cl72_48=0 +port_init_cl72_49=0 +port_init_cl72_50=0 +port_init_cl72_51=0 +port_init_cl72_52=0 +port_init_cl72_53=0 +port_init_cl72_54=0 +port_init_cl72_55=0 +port_init_cl72_56=0 +port_init_cl72_57=0 +port_init_cl72_58=0 +port_init_cl72_59=0 +port_init_cl72_60=0 +port_init_cl72_61=0 +port_init_cl72_62=0 +port_init_cl72_63=0 +port_init_cl72_64=0 +port_init_cl72_65=0 +port_init_cl72_66=0 +port_init_cl72_67=0 +port_init_cl72_68=0 +port_init_cl72_69=0 +port_init_cl72_70=0 +port_init_cl72_71=0 +port_init_cl72_72=0 +port_init_cl72_73=0 +port_init_cl72_74=0 +port_init_cl72_75=0 +port_init_cl72_76=0 +port_init_cl72_77=0 +port_init_cl72_78=0 +port_init_cl72_79=0 +port_init_cl72_80=0 +port_init_cl72_81=0 +port_init_cl72_82=0 +port_init_cl72_83=0 +port_init_cl72_84=0 +port_init_cl72_85=0 +port_init_cl72_86=0 +port_init_cl72_87=0 +port_init_cl72_88=0 +port_init_cl72_89=0 +port_init_cl72_90=0 +port_init_cl72_91=0 +port_init_cl72_92=0 +port_init_cl72_93=0 +port_init_cl72_94=0 +port_init_cl72_95=0 +port_init_cl72_96=0 +port_init_cl72_97=0 +port_init_cl72_98=0 +port_init_cl72_99=0 +port_init_cl72_100=0 +port_init_cl72_101=0 +port_init_cl72_102=0 +port_init_cl72_103=0 +port_init_cl72_104=0 +port_init_cl72_105=0 +port_init_cl72_106=0 +port_init_cl72_107=0 +port_init_cl72_108=0 +port_init_cl72_109=0 +port_init_cl72_110=0 +port_init_cl72_111=0 +port_init_cl72_112=0 +port_init_cl72_113=0 +port_init_cl72_114=0 +port_init_cl72_115=0 +port_init_cl72_116=0 +port_init_cl72_117=0 +port_init_cl72_118=0 +port_init_cl72_119=0 +port_init_cl72_120=0 +port_init_cl72_121=0 +port_init_cl72_122=0 +port_init_cl72_123=0 +port_init_cl72_124=0 +port_init_cl72_125=0 +port_init_cl72_126=0 +port_init_cl72_127=0 +port_init_cl72_128=0 +port_init_cl72_129=0 +port_init_cl72_130=0 +port_init_cl72_131=0 +port_init_cl72_132=0 +port_init_cl72_133=0 +port_init_cl72_134=0 +port_init_cl72_135=0 +port_init_cl72_136=0 +port_init_cl72_137=0 +port_init_cl72_138=0 +port_init_cl72_139=0 +port_init_cl72_140=0 +port_init_cl72_141=0 +port_init_cl72_142=0 +port_init_cl72_143=0 +port_init_cl72_144=0 +port_init_cl72_145=0 +port_init_cl72_146=0 +port_init_cl72_147=0 +port_init_cl72_148=0 +port_init_cl72_149=0 +port_init_cl72_150=0 +port_init_cl72_151=0 +port_init_cl72_152=0 +port_init_cl72_153=0 +port_init_cl72_154=0 +port_init_cl72_155=0 +port_init_cl72_156=0 +port_init_cl72_157=0 +port_init_cl72_158=0 +port_init_cl72_159=0 +port_init_cl72_160=0 +port_init_cl72_161=0 +port_init_cl72_162=0 +port_init_cl72_163=0 +port_init_cl72_164=0 +port_init_cl72_165=0 +port_init_cl72_166=0 +port_init_cl72_167=0 +port_init_cl72_168=0 +port_init_cl72_169=0 +port_init_cl72_170=0 +port_init_cl72_171=0 +port_init_cl72_172=0 +port_init_cl72_173=0 +port_init_cl72_174=0 +port_init_cl72_175=0 +port_init_cl72_176=0 +port_init_cl72_177=0 +port_init_cl72_178=0 +port_init_cl72_179=0 +port_init_cl72_180=0 +port_init_cl72_181=0 +port_init_cl72_182=0 +port_init_cl72_183=0 +port_init_cl72_184=0 +port_init_cl72_185=0 +port_init_cl72_186=0 +port_init_cl72_187=0 +port_init_cl72_188=0 +port_init_cl72_189=0 +port_init_cl72_190=0 +port_init_cl72_191=0 + +serdes_tx_taps_0.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_1.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_2.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_3.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_4.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_5.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_6.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_7.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_8.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_9.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_10.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_11.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_12.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_13.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_14.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_15.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_16.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_17.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_18.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_19.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_20.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_21.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_22.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_23.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_24.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_25.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_26.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_27.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_28.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_29.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_30.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_31.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_32.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_33.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_34.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_35.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_36.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_37.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_38.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_39.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_40.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_41.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_42.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_43.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_44.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_45.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_46.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_47.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_48.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_49.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_50.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_51.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_52.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_53.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_54.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_55.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_56.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_57.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_58.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_59.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_60.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_61.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_62.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_63.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_64.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_65.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_66.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_67.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_68.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_69.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_70.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_71.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_72.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_73.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_74.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_75.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_76.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_77.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_78.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_79.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_80.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_81.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_82.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_83.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_84.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_85.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_86.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_87.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_88.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_89.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_90.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_91.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_92.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_93.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_94.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_95.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_96.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_97.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_98.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_99.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_100.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_101.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_102.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_103.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_104.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_105.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_106.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_107.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_108.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_109.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_110.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_111.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_112.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_113.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_114.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_115.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_116.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_117.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_118.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_119.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_120.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_121.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_122.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_123.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_124.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_125.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_126.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_127.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_128.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_129.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_130.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_131.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_132.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_133.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_134.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_135.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_136.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_137.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_138.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_139.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_140.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_141.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_142.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_143.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_144.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_145.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_146.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_147.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_148.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_149.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_150.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_151.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_152.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_153.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_154.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_155.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_156.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_157.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_158.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_159.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_160.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_161.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_162.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_163.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_164.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_165.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_166.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_167.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_168.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_169.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_170.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_171.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_172.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_173.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_174.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_175.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_176.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_177.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_178.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_179.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_180.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_181.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_182.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_183.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_184.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_185.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_186.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_187.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_188.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_189.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_190.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_191.BCM8879X=pam4:-24:132:-12:0:0:0 serdes_lane_config_channel_mode_0.0=force_nr serdes_lane_config_channel_mode_1.0=force_nr diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/11/config-ramon-6-1.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/11/config-ramon-6-1.bcm index aba664d9ce34..3070800dbf4d 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/11/config-ramon-6-1.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/11/config-ramon-6-1.bcm @@ -1,7 +1,8 @@ + appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=12 bcm_linkscan_interval.BCM8879X=0 -bcm_stat_interval.BCM8879X=0 +bcm_stat_interval.BCM8879X=4000000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 @@ -20,10 +21,10 @@ mdio_output_delay_int.BCM8879X=25 mem_cache_enable_parity.BCM8879X=1 mm_intr_enable.BCM8879X=0 mm_timeout_usec.BCM8879X=300000 -polled_irq_delay.BCM8879X=500000 +polled_irq_delay.BCM8879X=100000 polled_irq_mode.BCM8879X=1 port_fec.BCM8879X=7 -port_init_cl72.BCM8879X=1 +port_init_cl72.BCM8879X=0 port_init_speed.BCM8879X=53125 rate_ext_mdio_divisor.BCM8879X=14 rate_int_mdio_divisor.BCM8879X=50 @@ -42,134 +43,134 @@ tslam_dma_enable.BCM8879X=0 tslam_intr_enable.BCM8879X=0 tslam_timeout_usec.BCM8879X=5000000 -lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx1 -lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx3 +lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx1 lane_to_serdes_map_fabric_lane2.BCM8879X=rx2:tx2 -lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx0 +lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx3 -lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx5 -lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx6 -lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx7 -lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx4 +lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx4 +lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx5 +lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx7 -lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx10 -lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx8 -lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx11 -lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx9 +lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx11 -lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx13 -lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx15 +lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx13 lane_to_serdes_map_fabric_lane14.BCM8879X=rx14:tx14 -lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx12 +lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx15 -lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx18 -lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx16 -lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx17 +lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx18 lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx19 lane_to_serdes_map_fabric_lane20.BCM8879X=rx20:tx20 -lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx22 -lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx23 -lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx21 +lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx23 lane_to_serdes_map_fabric_lane24.BCM8879X=rx24:tx24 -lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx26 -lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx27 -lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx25 +lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx26 +lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx27 -lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx29 -lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx30 -lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx28 +lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx29 +lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx30 lane_to_serdes_map_fabric_lane31.BCM8879X=rx31:tx31 -lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx34 -lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx32 -lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx35 -lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx33 +lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx35 lane_to_serdes_map_fabric_lane36.BCM8879X=rx36:tx36 -lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx38 -lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx39 -lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx37 - -lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx43 -lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx42 -lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx40 -lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx41 - -lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx46 -lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx44 -lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx45 +lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx39 + +lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx40 +lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx41 +lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx42 +lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx43 + +lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx44 +lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx46 lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx47 -lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx49 -lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx50 -lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx51 -lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx48 +lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx51 -lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx54 +lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx52 lane_to_serdes_map_fabric_lane53.BCM8879X=rx53:tx53 -lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx55 -lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx52 +lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx55 -lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx57 -lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx58 -lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx59 -lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx56 +lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx56 +lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx57 +lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx58 +lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx59 -lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx61 -lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx60 +lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx60 +lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx61 lane_to_serdes_map_fabric_lane62.BCM8879X=rx62:tx62 lane_to_serdes_map_fabric_lane63.BCM8879X=rx63:tx63 lane_to_serdes_map_fabric_lane64.BCM8879X=rx64:tx64 -lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx66 -lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx65 +lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx66 lane_to_serdes_map_fabric_lane67.BCM8879X=rx67:tx67 -lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx69 -lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx70 -lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx71 -lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx68 +lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx71 -lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx74 -lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx72 -lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx75 -lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx73 +lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx72 +lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx75 -lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx78 -lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx76 -lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx79 -lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx77 +lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx76 +lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx77 +lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx78 +lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx79 lane_to_serdes_map_fabric_lane80.BCM8879X=rx80:tx80 -lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx82 -lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx81 +lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx82 lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx83 -lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx85 -lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx86 -lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx87 -lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx84 +lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx87 -lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx90 -lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx88 -lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx91 -lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx89 +lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx89 +lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx90 +lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx91 -lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx95 -lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx94 -lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx92 -lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx93 +lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx92 +lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx94 +lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx95 lane_to_serdes_map_fabric_lane96.BCM8879X=rx96:tx96 -lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx98 -lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx97 +lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx98 lane_to_serdes_map_fabric_lane99.BCM8879X=rx99:tx99 -lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx101 -lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx102 -lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx100 +lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx102 lane_to_serdes_map_fabric_lane103.BCM8879X=rx103:tx103 lane_to_serdes_map_fabric_lane104.BCM8879X=rx104:tx104 @@ -179,13 +180,13 @@ lane_to_serdes_map_fabric_lane107.BCM8879X=rx107:tx107 lane_to_serdes_map_fabric_lane108.BCM8879X=rx108:tx108 lane_to_serdes_map_fabric_lane109.BCM8879X=rx109:tx109 -lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx111 -lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx110 +lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx110 +lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx111 -lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx115 -lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx114 -lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx113 -lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx112 +lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx112 +lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx114 +lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx115 lane_to_serdes_map_fabric_lane116.BCM8879X=rx116:tx116 lane_to_serdes_map_fabric_lane117.BCM8879X=rx117:tx117 @@ -197,15 +198,15 @@ lane_to_serdes_map_fabric_lane121.BCM8879X=rx121:tx121 lane_to_serdes_map_fabric_lane122.BCM8879X=rx122:tx122 lane_to_serdes_map_fabric_lane123.BCM8879X=rx123:tx123 -lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx127 -lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx126 -lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx124 -lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx125 +lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx127 -lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx130 -lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx131 -lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx129 -lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx128 +lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx131 lane_to_serdes_map_fabric_lane132.BCM8879X=rx132:tx132 lane_to_serdes_map_fabric_lane133.BCM8879X=rx133:tx133 @@ -213,23 +214,23 @@ lane_to_serdes_map_fabric_lane134.BCM8879X=rx134:tx134 lane_to_serdes_map_fabric_lane135.BCM8879X=rx135:tx135 lane_to_serdes_map_fabric_lane136.BCM8879X=rx136:tx136 -lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx138 -lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx137 +lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx137 +lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx138 lane_to_serdes_map_fabric_lane139.BCM8879X=rx139:tx139 -lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx143 -lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx142 -lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx141 -lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx140 +lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx140 +lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx143 -lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx145 -lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx147 -lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx144 -lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx146 +lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx147 -lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx150 +lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx148 lane_to_serdes_map_fabric_lane149.BCM8879X=rx149:tx149 -lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx148 +lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx150 lane_to_serdes_map_fabric_lane151.BCM8879X=rx151:tx151 lane_to_serdes_map_fabric_lane152.BCM8879X=rx152:tx152 @@ -237,116 +238,116 @@ lane_to_serdes_map_fabric_lane153.BCM8879X=rx153:tx153 lane_to_serdes_map_fabric_lane154.BCM8879X=rx154:tx154 lane_to_serdes_map_fabric_lane155.BCM8879X=rx155:tx155 -lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx157 -lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx159 +lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx156 +lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx157 lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx158 -lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx156 +lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx159 lane_to_serdes_map_fabric_lane160.BCM8879X=rx160:tx160 -lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx162 -lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx161 +lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx162 lane_to_serdes_map_fabric_lane163.BCM8879X=rx163:tx163 -lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx166 -lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx164 -lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx165 +lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx166 lane_to_serdes_map_fabric_lane167.BCM8879X=rx167:tx167 -lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx170 -lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx168 -lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx169 +lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx168 +lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx170 lane_to_serdes_map_fabric_lane171.BCM8879X=rx171:tx171 -lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx173 -lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx174 -lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx175 -lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx172 +lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx172 +lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx173 +lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx174 +lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx175 lane_to_serdes_map_fabric_lane176.BCM8879X=rx176:tx176 -lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx178 -lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx177 +lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx178 lane_to_serdes_map_fabric_lane179.BCM8879X=rx179:tx179 lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx180 -lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx182 -lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx181 +lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx182 lane_to_serdes_map_fabric_lane183.BCM8879X=rx183:tx183 -lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx187 -lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx184 +lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx185 lane_to_serdes_map_fabric_lane186.BCM8879X=rx186:tx186 -lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx185 +lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx187 -lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx190 +lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx188 lane_to_serdes_map_fabric_lane189.BCM8879X=rx189:tx189 -lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx191 -lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx188 +lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx190 +lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx191 -phy_rx_polarity_flip_fabric0.BCM8879X=0 -phy_rx_polarity_flip_fabric1.BCM8879X=1 -phy_rx_polarity_flip_fabric2.BCM8879X=0 -phy_rx_polarity_flip_fabric3.BCM8879X=1 +phy_rx_polarity_flip_fabric0.BCM8879X=1 +phy_rx_polarity_flip_fabric1.BCM8879X=0 +phy_rx_polarity_flip_fabric2.BCM8879X=1 +phy_rx_polarity_flip_fabric3.BCM8879X=0 phy_rx_polarity_flip_fabric4.BCM8879X=1 phy_rx_polarity_flip_fabric5.BCM8879X=0 phy_rx_polarity_flip_fabric6.BCM8879X=1 phy_rx_polarity_flip_fabric7.BCM8879X=0 -phy_rx_polarity_flip_fabric8.BCM8879X=1 -phy_rx_polarity_flip_fabric9.BCM8879X=0 -phy_rx_polarity_flip_fabric10.BCM8879X=1 -phy_rx_polarity_flip_fabric11.BCM8879X=0 +phy_rx_polarity_flip_fabric8.BCM8879X=0 +phy_rx_polarity_flip_fabric9.BCM8879X=1 +phy_rx_polarity_flip_fabric10.BCM8879X=0 +phy_rx_polarity_flip_fabric11.BCM8879X=1 -phy_rx_polarity_flip_fabric12.BCM8879X=0 -phy_rx_polarity_flip_fabric13.BCM8879X=1 -phy_rx_polarity_flip_fabric14.BCM8879X=0 -phy_rx_polarity_flip_fabric15.BCM8879X=1 +phy_rx_polarity_flip_fabric12.BCM8879X=1 +phy_rx_polarity_flip_fabric13.BCM8879X=0 +phy_rx_polarity_flip_fabric14.BCM8879X=1 +phy_rx_polarity_flip_fabric15.BCM8879X=0 -phy_rx_polarity_flip_fabric16.BCM8879X=0 -phy_rx_polarity_flip_fabric17.BCM8879X=1 -phy_rx_polarity_flip_fabric18.BCM8879X=0 -phy_rx_polarity_flip_fabric19.BCM8879X=1 +phy_rx_polarity_flip_fabric16.BCM8879X=1 +phy_rx_polarity_flip_fabric17.BCM8879X=0 +phy_rx_polarity_flip_fabric18.BCM8879X=1 +phy_rx_polarity_flip_fabric19.BCM8879X=0 phy_rx_polarity_flip_fabric20.BCM8879X=0 phy_rx_polarity_flip_fabric21.BCM8879X=1 phy_rx_polarity_flip_fabric22.BCM8879X=0 phy_rx_polarity_flip_fabric23.BCM8879X=1 -phy_rx_polarity_flip_fabric24.BCM8879X=0 -phy_rx_polarity_flip_fabric25.BCM8879X=1 -phy_rx_polarity_flip_fabric26.BCM8879X=0 -phy_rx_polarity_flip_fabric27.BCM8879X=1 +phy_rx_polarity_flip_fabric24.BCM8879X=1 +phy_rx_polarity_flip_fabric25.BCM8879X=0 +phy_rx_polarity_flip_fabric26.BCM8879X=1 +phy_rx_polarity_flip_fabric27.BCM8879X=0 phy_rx_polarity_flip_fabric28.BCM8879X=1 phy_rx_polarity_flip_fabric29.BCM8879X=0 phy_rx_polarity_flip_fabric30.BCM8879X=1 phy_rx_polarity_flip_fabric31.BCM8879X=0 -phy_rx_polarity_flip_fabric32.BCM8879X=1 -phy_rx_polarity_flip_fabric33.BCM8879X=0 -phy_rx_polarity_flip_fabric34.BCM8879X=1 -phy_rx_polarity_flip_fabric35.BCM8879X=0 +phy_rx_polarity_flip_fabric32.BCM8879X=0 +phy_rx_polarity_flip_fabric33.BCM8879X=1 +phy_rx_polarity_flip_fabric34.BCM8879X=0 +phy_rx_polarity_flip_fabric35.BCM8879X=1 -phy_rx_polarity_flip_fabric36.BCM8879X=0 -phy_rx_polarity_flip_fabric37.BCM8879X=1 -phy_rx_polarity_flip_fabric38.BCM8879X=0 -phy_rx_polarity_flip_fabric39.BCM8879X=1 +phy_rx_polarity_flip_fabric36.BCM8879X=1 +phy_rx_polarity_flip_fabric37.BCM8879X=0 +phy_rx_polarity_flip_fabric38.BCM8879X=1 +phy_rx_polarity_flip_fabric39.BCM8879X=0 phy_rx_polarity_flip_fabric40.BCM8879X=0 phy_rx_polarity_flip_fabric41.BCM8879X=1 phy_rx_polarity_flip_fabric42.BCM8879X=0 phy_rx_polarity_flip_fabric43.BCM8879X=1 -phy_rx_polarity_flip_fabric44.BCM8879X=0 -phy_rx_polarity_flip_fabric45.BCM8879X=1 -phy_rx_polarity_flip_fabric46.BCM8879X=0 -phy_rx_polarity_flip_fabric47.BCM8879X=1 +phy_rx_polarity_flip_fabric44.BCM8879X=1 +phy_rx_polarity_flip_fabric45.BCM8879X=0 +phy_rx_polarity_flip_fabric46.BCM8879X=1 +phy_rx_polarity_flip_fabric47.BCM8879X=0 -phy_rx_polarity_flip_fabric48.BCM8879X=0 -phy_rx_polarity_flip_fabric49.BCM8879X=1 -phy_rx_polarity_flip_fabric50.BCM8879X=0 -phy_rx_polarity_flip_fabric51.BCM8879X=1 +phy_rx_polarity_flip_fabric48.BCM8879X=1 +phy_rx_polarity_flip_fabric49.BCM8879X=0 +phy_rx_polarity_flip_fabric50.BCM8879X=1 +phy_rx_polarity_flip_fabric51.BCM8879X=0 phy_rx_polarity_flip_fabric52.BCM8879X=0 phy_rx_polarity_flip_fabric53.BCM8879X=1 @@ -358,10 +359,10 @@ phy_rx_polarity_flip_fabric57.BCM8879X=1 phy_rx_polarity_flip_fabric58.BCM8879X=0 phy_rx_polarity_flip_fabric59.BCM8879X=1 -phy_rx_polarity_flip_fabric60.BCM8879X=1 -phy_rx_polarity_flip_fabric61.BCM8879X=0 -phy_rx_polarity_flip_fabric62.BCM8879X=1 -phy_rx_polarity_flip_fabric63.BCM8879X=0 +phy_rx_polarity_flip_fabric60.BCM8879X=0 +phy_rx_polarity_flip_fabric61.BCM8879X=1 +phy_rx_polarity_flip_fabric62.BCM8879X=0 +phy_rx_polarity_flip_fabric63.BCM8879X=1 phy_rx_polarity_flip_fabric64.BCM8879X=0 phy_rx_polarity_flip_fabric65.BCM8879X=1 @@ -373,78 +374,78 @@ phy_rx_polarity_flip_fabric69.BCM8879X=0 phy_rx_polarity_flip_fabric70.BCM8879X=1 phy_rx_polarity_flip_fabric71.BCM8879X=0 -phy_rx_polarity_flip_fabric72.BCM8879X=0 -phy_rx_polarity_flip_fabric73.BCM8879X=1 -phy_rx_polarity_flip_fabric74.BCM8879X=0 -phy_rx_polarity_flip_fabric75.BCM8879X=1 +phy_rx_polarity_flip_fabric72.BCM8879X=1 +phy_rx_polarity_flip_fabric73.BCM8879X=0 +phy_rx_polarity_flip_fabric74.BCM8879X=1 +phy_rx_polarity_flip_fabric75.BCM8879X=0 phy_rx_polarity_flip_fabric76.BCM8879X=0 phy_rx_polarity_flip_fabric77.BCM8879X=1 phy_rx_polarity_flip_fabric78.BCM8879X=0 phy_rx_polarity_flip_fabric79.BCM8879X=1 -phy_rx_polarity_flip_fabric80.BCM8879X=0 -phy_rx_polarity_flip_fabric81.BCM8879X=1 -phy_rx_polarity_flip_fabric82.BCM8879X=0 -phy_rx_polarity_flip_fabric83.BCM8879X=1 +phy_rx_polarity_flip_fabric80.BCM8879X=1 +phy_rx_polarity_flip_fabric81.BCM8879X=0 +phy_rx_polarity_flip_fabric82.BCM8879X=1 +phy_rx_polarity_flip_fabric83.BCM8879X=0 -phy_rx_polarity_flip_fabric84.BCM8879X=1 -phy_rx_polarity_flip_fabric85.BCM8879X=0 -phy_rx_polarity_flip_fabric86.BCM8879X=1 -phy_rx_polarity_flip_fabric87.BCM8879X=0 +phy_rx_polarity_flip_fabric84.BCM8879X=0 +phy_rx_polarity_flip_fabric85.BCM8879X=1 +phy_rx_polarity_flip_fabric86.BCM8879X=0 +phy_rx_polarity_flip_fabric87.BCM8879X=1 phy_rx_polarity_flip_fabric88.BCM8879X=1 phy_rx_polarity_flip_fabric89.BCM8879X=0 phy_rx_polarity_flip_fabric90.BCM8879X=1 phy_rx_polarity_flip_fabric91.BCM8879X=0 -phy_rx_polarity_flip_fabric92.BCM8879X=0 -phy_rx_polarity_flip_fabric93.BCM8879X=1 -phy_rx_polarity_flip_fabric94.BCM8879X=0 -phy_rx_polarity_flip_fabric95.BCM8879X=1 +phy_rx_polarity_flip_fabric92.BCM8879X=1 +phy_rx_polarity_flip_fabric93.BCM8879X=0 +phy_rx_polarity_flip_fabric94.BCM8879X=1 +phy_rx_polarity_flip_fabric95.BCM8879X=0 phy_rx_polarity_flip_fabric96.BCM8879X=0 -phy_rx_polarity_flip_fabric97.BCM8879X=0 +phy_rx_polarity_flip_fabric97.BCM8879X=1 phy_rx_polarity_flip_fabric98.BCM8879X=0 phy_rx_polarity_flip_fabric99.BCM8879X=1 -phy_rx_polarity_flip_fabric100.BCM8879X=0 -phy_rx_polarity_flip_fabric101.BCM8879X=1 +phy_rx_polarity_flip_fabric100.BCM8879X=1 +phy_rx_polarity_flip_fabric101.BCM8879X=0 phy_rx_polarity_flip_fabric102.BCM8879X=1 -phy_rx_polarity_flip_fabric103.BCM8879X=1 +phy_rx_polarity_flip_fabric103.BCM8879X=0 phy_rx_polarity_flip_fabric104.BCM8879X=0 phy_rx_polarity_flip_fabric105.BCM8879X=1 -phy_rx_polarity_flip_fabric106.BCM8879X=1 +phy_rx_polarity_flip_fabric106.BCM8879X=0 phy_rx_polarity_flip_fabric107.BCM8879X=1 -phy_rx_polarity_flip_fabric108.BCM8879X=1 -phy_rx_polarity_flip_fabric109.BCM8879X=0 -phy_rx_polarity_flip_fabric110.BCM8879X=1 -phy_rx_polarity_flip_fabric111.BCM8879X=0 +phy_rx_polarity_flip_fabric108.BCM8879X=0 +phy_rx_polarity_flip_fabric109.BCM8879X=1 +phy_rx_polarity_flip_fabric110.BCM8879X=0 +phy_rx_polarity_flip_fabric111.BCM8879X=1 -phy_rx_polarity_flip_fabric112.BCM8879X=0 -phy_rx_polarity_flip_fabric113.BCM8879X=1 -phy_rx_polarity_flip_fabric114.BCM8879X=0 -phy_rx_polarity_flip_fabric115.BCM8879X=1 +phy_rx_polarity_flip_fabric112.BCM8879X=1 +phy_rx_polarity_flip_fabric113.BCM8879X=0 +phy_rx_polarity_flip_fabric114.BCM8879X=1 +phy_rx_polarity_flip_fabric115.BCM8879X=0 -phy_rx_polarity_flip_fabric116.BCM8879X=1 -phy_rx_polarity_flip_fabric117.BCM8879X=0 -phy_rx_polarity_flip_fabric118.BCM8879X=1 -phy_rx_polarity_flip_fabric119.BCM8879X=0 +phy_rx_polarity_flip_fabric116.BCM8879X=0 +phy_rx_polarity_flip_fabric117.BCM8879X=1 +phy_rx_polarity_flip_fabric118.BCM8879X=0 +phy_rx_polarity_flip_fabric119.BCM8879X=1 -phy_rx_polarity_flip_fabric120.BCM8879X=0 +phy_rx_polarity_flip_fabric120.BCM8879X=1 phy_rx_polarity_flip_fabric121.BCM8879X=0 -phy_rx_polarity_flip_fabric122.BCM8879X=0 -phy_rx_polarity_flip_fabric123.BCM8879X=1 +phy_rx_polarity_flip_fabric122.BCM8879X=1 +phy_rx_polarity_flip_fabric123.BCM8879X=0 phy_rx_polarity_flip_fabric124.BCM8879X=1 -phy_rx_polarity_flip_fabric125.BCM8879X=1 -phy_rx_polarity_flip_fabric126.BCM8879X=0 -phy_rx_polarity_flip_fabric127.BCM8879X=1 +phy_rx_polarity_flip_fabric125.BCM8879X=0 +phy_rx_polarity_flip_fabric126.BCM8879X=1 +phy_rx_polarity_flip_fabric127.BCM8879X=0 phy_rx_polarity_flip_fabric128.BCM8879X=0 -phy_rx_polarity_flip_fabric129.BCM8879X=0 +phy_rx_polarity_flip_fabric129.BCM8879X=1 phy_rx_polarity_flip_fabric130.BCM8879X=0 phy_rx_polarity_flip_fabric131.BCM8879X=1 @@ -453,25 +454,25 @@ phy_rx_polarity_flip_fabric133.BCM8879X=0 phy_rx_polarity_flip_fabric134.BCM8879X=1 phy_rx_polarity_flip_fabric135.BCM8879X=0 -phy_rx_polarity_flip_fabric136.BCM8879X=1 -phy_rx_polarity_flip_fabric137.BCM8879X=0 -phy_rx_polarity_flip_fabric138.BCM8879X=1 -phy_rx_polarity_flip_fabric139.BCM8879X=0 +phy_rx_polarity_flip_fabric136.BCM8879X=0 +phy_rx_polarity_flip_fabric137.BCM8879X=1 +phy_rx_polarity_flip_fabric138.BCM8879X=0 +phy_rx_polarity_flip_fabric139.BCM8879X=1 -phy_rx_polarity_flip_fabric140.BCM8879X=0 -phy_rx_polarity_flip_fabric141.BCM8879X=1 -phy_rx_polarity_flip_fabric142.BCM8879X=0 -phy_rx_polarity_flip_fabric143.BCM8879X=1 +phy_rx_polarity_flip_fabric140.BCM8879X=1 +phy_rx_polarity_flip_fabric141.BCM8879X=0 +phy_rx_polarity_flip_fabric142.BCM8879X=1 +phy_rx_polarity_flip_fabric143.BCM8879X=0 -phy_rx_polarity_flip_fabric144.BCM8879X=0 -phy_rx_polarity_flip_fabric145.BCM8879X=1 -phy_rx_polarity_flip_fabric146.BCM8879X=0 -phy_rx_polarity_flip_fabric147.BCM8879X=1 +phy_rx_polarity_flip_fabric144.BCM8879X=1 +phy_rx_polarity_flip_fabric145.BCM8879X=0 +phy_rx_polarity_flip_fabric146.BCM8879X=1 +phy_rx_polarity_flip_fabric147.BCM8879X=0 -phy_rx_polarity_flip_fabric148.BCM8879X=1 -phy_rx_polarity_flip_fabric149.BCM8879X=0 -phy_rx_polarity_flip_fabric150.BCM8879X=1 -phy_rx_polarity_flip_fabric151.BCM8879X=0 +phy_rx_polarity_flip_fabric148.BCM8879X=0 +phy_rx_polarity_flip_fabric149.BCM8879X=1 +phy_rx_polarity_flip_fabric150.BCM8879X=0 +phy_rx_polarity_flip_fabric151.BCM8879X=1 phy_rx_polarity_flip_fabric152.BCM8879X=1 phy_rx_polarity_flip_fabric153.BCM8879X=0 @@ -480,28 +481,28 @@ phy_rx_polarity_flip_fabric155.BCM8879X=0 phy_rx_polarity_flip_fabric156.BCM8879X=0 phy_rx_polarity_flip_fabric157.BCM8879X=1 -phy_rx_polarity_flip_fabric158.BCM8879X=1 +phy_rx_polarity_flip_fabric158.BCM8879X=0 phy_rx_polarity_flip_fabric159.BCM8879X=1 -phy_rx_polarity_flip_fabric160.BCM8879X=0 +phy_rx_polarity_flip_fabric160.BCM8879X=1 phy_rx_polarity_flip_fabric161.BCM8879X=0 -phy_rx_polarity_flip_fabric162.BCM8879X=0 -phy_rx_polarity_flip_fabric163.BCM8879X=1 +phy_rx_polarity_flip_fabric162.BCM8879X=1 +phy_rx_polarity_flip_fabric163.BCM8879X=0 -phy_rx_polarity_flip_fabric164.BCM8879X=0 +phy_rx_polarity_flip_fabric164.BCM8879X=1 phy_rx_polarity_flip_fabric165.BCM8879X=0 -phy_rx_polarity_flip_fabric166.BCM8879X=0 -phy_rx_polarity_flip_fabric167.BCM8879X=1 +phy_rx_polarity_flip_fabric166.BCM8879X=1 +phy_rx_polarity_flip_fabric167.BCM8879X=0 -phy_rx_polarity_flip_fabric168.BCM8879X=0 -phy_rx_polarity_flip_fabric169.BCM8879X=1 -phy_rx_polarity_flip_fabric170.BCM8879X=0 -phy_rx_polarity_flip_fabric171.BCM8879X=1 +phy_rx_polarity_flip_fabric168.BCM8879X=1 +phy_rx_polarity_flip_fabric169.BCM8879X=0 +phy_rx_polarity_flip_fabric170.BCM8879X=1 +phy_rx_polarity_flip_fabric171.BCM8879X=0 -phy_rx_polarity_flip_fabric172.BCM8879X=1 -phy_rx_polarity_flip_fabric173.BCM8879X=0 -phy_rx_polarity_flip_fabric174.BCM8879X=1 -phy_rx_polarity_flip_fabric175.BCM8879X=0 +phy_rx_polarity_flip_fabric172.BCM8879X=0 +phy_rx_polarity_flip_fabric173.BCM8879X=1 +phy_rx_polarity_flip_fabric174.BCM8879X=0 +phy_rx_polarity_flip_fabric175.BCM8879X=1 phy_rx_polarity_flip_fabric176.BCM8879X=1 phy_rx_polarity_flip_fabric177.BCM8879X=0 @@ -509,79 +510,80 @@ phy_rx_polarity_flip_fabric178.BCM8879X=1 phy_rx_polarity_flip_fabric179.BCM8879X=0 phy_rx_polarity_flip_fabric180.BCM8879X=0 -phy_rx_polarity_flip_fabric181.BCM8879X=0 +phy_rx_polarity_flip_fabric181.BCM8879X=1 phy_rx_polarity_flip_fabric182.BCM8879X=0 phy_rx_polarity_flip_fabric183.BCM8879X=1 -phy_rx_polarity_flip_fabric184.BCM8879X=0 +phy_rx_polarity_flip_fabric184.BCM8879X=1 phy_rx_polarity_flip_fabric185.BCM8879X=0 -phy_rx_polarity_flip_fabric186.BCM8879X=0 -phy_rx_polarity_flip_fabric187.BCM8879X=1 +phy_rx_polarity_flip_fabric186.BCM8879X=1 +phy_rx_polarity_flip_fabric187.BCM8879X=0 phy_rx_polarity_flip_fabric188.BCM8879X=1 -phy_rx_polarity_flip_fabric189.BCM8879X=1 -phy_rx_polarity_flip_fabric190.BCM8879X=0 -phy_rx_polarity_flip_fabric191.BCM8879X=1 +phy_rx_polarity_flip_fabric189.BCM8879X=0 +phy_rx_polarity_flip_fabric190.BCM8879X=1 +phy_rx_polarity_flip_fabric191.BCM8879X=0 + phy_tx_polarity_flip_fabric0.BCM8879X=0 -phy_tx_polarity_flip_fabric1.BCM8879X=0 -phy_tx_polarity_flip_fabric2.BCM8879X=1 +phy_tx_polarity_flip_fabric1.BCM8879X=1 +phy_tx_polarity_flip_fabric2.BCM8879X=0 phy_tx_polarity_flip_fabric3.BCM8879X=1 -phy_tx_polarity_flip_fabric4.BCM8879X=1 -phy_tx_polarity_flip_fabric5.BCM8879X=0 -phy_tx_polarity_flip_fabric6.BCM8879X=1 -phy_tx_polarity_flip_fabric7.BCM8879X=0 +phy_tx_polarity_flip_fabric4.BCM8879X=0 +phy_tx_polarity_flip_fabric5.BCM8879X=1 +phy_tx_polarity_flip_fabric6.BCM8879X=0 +phy_tx_polarity_flip_fabric7.BCM8879X=1 -phy_tx_polarity_flip_fabric8.BCM8879X=0 +phy_tx_polarity_flip_fabric8.BCM8879X=1 phy_tx_polarity_flip_fabric9.BCM8879X=0 phy_tx_polarity_flip_fabric10.BCM8879X=1 -phy_tx_polarity_flip_fabric11.BCM8879X=1 +phy_tx_polarity_flip_fabric11.BCM8879X=0 phy_tx_polarity_flip_fabric12.BCM8879X=0 -phy_tx_polarity_flip_fabric13.BCM8879X=0 -phy_tx_polarity_flip_fabric14.BCM8879X=1 +phy_tx_polarity_flip_fabric13.BCM8879X=1 +phy_tx_polarity_flip_fabric14.BCM8879X=0 phy_tx_polarity_flip_fabric15.BCM8879X=1 -phy_tx_polarity_flip_fabric16.BCM8879X=1 +phy_tx_polarity_flip_fabric16.BCM8879X=0 phy_tx_polarity_flip_fabric17.BCM8879X=1 phy_tx_polarity_flip_fabric18.BCM8879X=0 -phy_tx_polarity_flip_fabric19.BCM8879X=0 +phy_tx_polarity_flip_fabric19.BCM8879X=1 phy_tx_polarity_flip_fabric20.BCM8879X=1 -phy_tx_polarity_flip_fabric21.BCM8879X=1 -phy_tx_polarity_flip_fabric22.BCM8879X=0 +phy_tx_polarity_flip_fabric21.BCM8879X=0 +phy_tx_polarity_flip_fabric22.BCM8879X=1 phy_tx_polarity_flip_fabric23.BCM8879X=0 -phy_tx_polarity_flip_fabric24.BCM8879X=1 +phy_tx_polarity_flip_fabric24.BCM8879X=0 phy_tx_polarity_flip_fabric25.BCM8879X=1 phy_tx_polarity_flip_fabric26.BCM8879X=0 -phy_tx_polarity_flip_fabric27.BCM8879X=0 +phy_tx_polarity_flip_fabric27.BCM8879X=1 -phy_tx_polarity_flip_fabric28.BCM8879X=1 -phy_tx_polarity_flip_fabric29.BCM8879X=0 +phy_tx_polarity_flip_fabric28.BCM8879X=0 +phy_tx_polarity_flip_fabric29.BCM8879X=1 phy_tx_polarity_flip_fabric30.BCM8879X=0 phy_tx_polarity_flip_fabric31.BCM8879X=1 -phy_tx_polarity_flip_fabric32.BCM8879X=0 +phy_tx_polarity_flip_fabric32.BCM8879X=1 phy_tx_polarity_flip_fabric33.BCM8879X=0 phy_tx_polarity_flip_fabric34.BCM8879X=1 -phy_tx_polarity_flip_fabric35.BCM8879X=1 +phy_tx_polarity_flip_fabric35.BCM8879X=0 -phy_tx_polarity_flip_fabric36.BCM8879X=1 +phy_tx_polarity_flip_fabric36.BCM8879X=0 phy_tx_polarity_flip_fabric37.BCM8879X=1 phy_tx_polarity_flip_fabric38.BCM8879X=0 -phy_tx_polarity_flip_fabric39.BCM8879X=0 +phy_tx_polarity_flip_fabric39.BCM8879X=1 -phy_tx_polarity_flip_fabric40.BCM8879X=0 -phy_tx_polarity_flip_fabric41.BCM8879X=1 +phy_tx_polarity_flip_fabric40.BCM8879X=1 +phy_tx_polarity_flip_fabric41.BCM8879X=0 phy_tx_polarity_flip_fabric42.BCM8879X=1 phy_tx_polarity_flip_fabric43.BCM8879X=0 -phy_tx_polarity_flip_fabric44.BCM8879X=1 +phy_tx_polarity_flip_fabric44.BCM8879X=0 phy_tx_polarity_flip_fabric45.BCM8879X=1 phy_tx_polarity_flip_fabric46.BCM8879X=0 -phy_tx_polarity_flip_fabric47.BCM8879X=0 +phy_tx_polarity_flip_fabric47.BCM8879X=1 phy_tx_polarity_flip_fabric48.BCM8879X=0 phy_tx_polarity_flip_fabric49.BCM8879X=1 @@ -590,43 +592,43 @@ phy_tx_polarity_flip_fabric51.BCM8879X=1 phy_tx_polarity_flip_fabric52.BCM8879X=1 phy_tx_polarity_flip_fabric53.BCM8879X=0 -phy_tx_polarity_flip_fabric54.BCM8879X=0 -phy_tx_polarity_flip_fabric55.BCM8879X=1 +phy_tx_polarity_flip_fabric54.BCM8879X=1 +phy_tx_polarity_flip_fabric55.BCM8879X=0 -phy_tx_polarity_flip_fabric56.BCM8879X=0 -phy_tx_polarity_flip_fabric57.BCM8879X=1 -phy_tx_polarity_flip_fabric58.BCM8879X=0 -phy_tx_polarity_flip_fabric59.BCM8879X=1 +phy_tx_polarity_flip_fabric56.BCM8879X=1 +phy_tx_polarity_flip_fabric57.BCM8879X=0 +phy_tx_polarity_flip_fabric58.BCM8879X=1 +phy_tx_polarity_flip_fabric59.BCM8879X=0 phy_tx_polarity_flip_fabric60.BCM8879X=1 phy_tx_polarity_flip_fabric61.BCM8879X=0 -phy_tx_polarity_flip_fabric62.BCM8879X=0 -phy_tx_polarity_flip_fabric63.BCM8879X=1 +phy_tx_polarity_flip_fabric62.BCM8879X=1 +phy_tx_polarity_flip_fabric63.BCM8879X=0 phy_tx_polarity_flip_fabric64.BCM8879X=1 -phy_tx_polarity_flip_fabric65.BCM8879X=1 -phy_tx_polarity_flip_fabric66.BCM8879X=0 +phy_tx_polarity_flip_fabric65.BCM8879X=0 +phy_tx_polarity_flip_fabric66.BCM8879X=1 phy_tx_polarity_flip_fabric67.BCM8879X=0 -phy_tx_polarity_flip_fabric68.BCM8879X=1 -phy_tx_polarity_flip_fabric69.BCM8879X=0 -phy_tx_polarity_flip_fabric70.BCM8879X=1 -phy_tx_polarity_flip_fabric71.BCM8879X=0 +phy_tx_polarity_flip_fabric68.BCM8879X=0 +phy_tx_polarity_flip_fabric69.BCM8879X=1 +phy_tx_polarity_flip_fabric70.BCM8879X=0 +phy_tx_polarity_flip_fabric71.BCM8879X=1 -phy_tx_polarity_flip_fabric72.BCM8879X=1 +phy_tx_polarity_flip_fabric72.BCM8879X=0 phy_tx_polarity_flip_fabric73.BCM8879X=1 phy_tx_polarity_flip_fabric74.BCM8879X=0 -phy_tx_polarity_flip_fabric75.BCM8879X=0 +phy_tx_polarity_flip_fabric75.BCM8879X=1 phy_tx_polarity_flip_fabric76.BCM8879X=1 -phy_tx_polarity_flip_fabric77.BCM8879X=1 -phy_tx_polarity_flip_fabric78.BCM8879X=0 +phy_tx_polarity_flip_fabric77.BCM8879X=0 +phy_tx_polarity_flip_fabric78.BCM8879X=1 phy_tx_polarity_flip_fabric79.BCM8879X=0 -phy_tx_polarity_flip_fabric80.BCM8879X=1 +phy_tx_polarity_flip_fabric80.BCM8879X=0 phy_tx_polarity_flip_fabric81.BCM8879X=1 phy_tx_polarity_flip_fabric82.BCM8879X=0 -phy_tx_polarity_flip_fabric83.BCM8879X=0 +phy_tx_polarity_flip_fabric83.BCM8879X=1 phy_tx_polarity_flip_fabric84.BCM8879X=1 phy_tx_polarity_flip_fabric85.BCM8879X=0 @@ -634,32 +636,32 @@ phy_tx_polarity_flip_fabric86.BCM8879X=1 phy_tx_polarity_flip_fabric87.BCM8879X=0 phy_tx_polarity_flip_fabric88.BCM8879X=0 -phy_tx_polarity_flip_fabric89.BCM8879X=0 -phy_tx_polarity_flip_fabric90.BCM8879X=1 +phy_tx_polarity_flip_fabric89.BCM8879X=1 +phy_tx_polarity_flip_fabric90.BCM8879X=0 phy_tx_polarity_flip_fabric91.BCM8879X=1 phy_tx_polarity_flip_fabric92.BCM8879X=0 phy_tx_polarity_flip_fabric93.BCM8879X=1 -phy_tx_polarity_flip_fabric94.BCM8879X=1 -phy_tx_polarity_flip_fabric95.BCM8879X=0 +phy_tx_polarity_flip_fabric94.BCM8879X=0 +phy_tx_polarity_flip_fabric95.BCM8879X=1 phy_tx_polarity_flip_fabric96.BCM8879X=1 -phy_tx_polarity_flip_fabric97.BCM8879X=1 -phy_tx_polarity_flip_fabric98.BCM8879X=0 +phy_tx_polarity_flip_fabric97.BCM8879X=0 +phy_tx_polarity_flip_fabric98.BCM8879X=1 phy_tx_polarity_flip_fabric99.BCM8879X=0 phy_tx_polarity_flip_fabric100.BCM8879X=0 -phy_tx_polarity_flip_fabric101.BCM8879X=0 +phy_tx_polarity_flip_fabric101.BCM8879X=1 phy_tx_polarity_flip_fabric102.BCM8879X=0 -phy_tx_polarity_flip_fabric103.BCM8879X=0 +phy_tx_polarity_flip_fabric103.BCM8879X=1 phy_tx_polarity_flip_fabric104.BCM8879X=1 phy_tx_polarity_flip_fabric105.BCM8879X=0 -phy_tx_polarity_flip_fabric106.BCM8879X=0 -phy_tx_polarity_flip_fabric107.BCM8879X=1 +phy_tx_polarity_flip_fabric106.BCM8879X=1 +phy_tx_polarity_flip_fabric107.BCM8879X=0 -phy_tx_polarity_flip_fabric108.BCM8879X=0 -phy_tx_polarity_flip_fabric109.BCM8879X=1 +phy_tx_polarity_flip_fabric108.BCM8879X=1 +phy_tx_polarity_flip_fabric109.BCM8879X=0 phy_tx_polarity_flip_fabric110.BCM8879X=1 phy_tx_polarity_flip_fabric111.BCM8879X=0 @@ -668,35 +670,35 @@ phy_tx_polarity_flip_fabric113.BCM8879X=1 phy_tx_polarity_flip_fabric114.BCM8879X=0 phy_tx_polarity_flip_fabric115.BCM8879X=1 -phy_tx_polarity_flip_fabric116.BCM8879X=0 -phy_tx_polarity_flip_fabric117.BCM8879X=1 -phy_tx_polarity_flip_fabric118.BCM8879X=0 -phy_tx_polarity_flip_fabric119.BCM8879X=1 +phy_tx_polarity_flip_fabric116.BCM8879X=1 +phy_tx_polarity_flip_fabric117.BCM8879X=0 +phy_tx_polarity_flip_fabric118.BCM8879X=1 +phy_tx_polarity_flip_fabric119.BCM8879X=0 -phy_tx_polarity_flip_fabric120.BCM8879X=1 -phy_tx_polarity_flip_fabric121.BCM8879X=0 -phy_tx_polarity_flip_fabric122.BCM8879X=1 -phy_tx_polarity_flip_fabric123.BCM8879X=0 +phy_tx_polarity_flip_fabric120.BCM8879X=0 +phy_tx_polarity_flip_fabric121.BCM8879X=1 +phy_tx_polarity_flip_fabric122.BCM8879X=0 +phy_tx_polarity_flip_fabric123.BCM8879X=1 -phy_tx_polarity_flip_fabric124.BCM8879X=1 -phy_tx_polarity_flip_fabric125.BCM8879X=0 -phy_tx_polarity_flip_fabric126.BCM8879X=1 -phy_tx_polarity_flip_fabric127.BCM8879X=0 +phy_tx_polarity_flip_fabric124.BCM8879X=0 +phy_tx_polarity_flip_fabric125.BCM8879X=1 +phy_tx_polarity_flip_fabric126.BCM8879X=0 +phy_tx_polarity_flip_fabric127.BCM8879X=1 -phy_tx_polarity_flip_fabric128.BCM8879X=0 -phy_tx_polarity_flip_fabric129.BCM8879X=1 -phy_tx_polarity_flip_fabric130.BCM8879X=0 -phy_tx_polarity_flip_fabric131.BCM8879X=1 +phy_tx_polarity_flip_fabric128.BCM8879X=1 +phy_tx_polarity_flip_fabric129.BCM8879X=0 +phy_tx_polarity_flip_fabric130.BCM8879X=1 +phy_tx_polarity_flip_fabric131.BCM8879X=0 phy_tx_polarity_flip_fabric132.BCM8879X=0 phy_tx_polarity_flip_fabric133.BCM8879X=1 phy_tx_polarity_flip_fabric134.BCM8879X=0 phy_tx_polarity_flip_fabric135.BCM8879X=1 -phy_tx_polarity_flip_fabric136.BCM8879X=0 +phy_tx_polarity_flip_fabric136.BCM8879X=1 phy_tx_polarity_flip_fabric137.BCM8879X=0 phy_tx_polarity_flip_fabric138.BCM8879X=1 -phy_tx_polarity_flip_fabric139.BCM8879X=1 +phy_tx_polarity_flip_fabric139.BCM8879X=0 phy_tx_polarity_flip_fabric140.BCM8879X=0 phy_tx_polarity_flip_fabric141.BCM8879X=1 @@ -704,39 +706,39 @@ phy_tx_polarity_flip_fabric142.BCM8879X=0 phy_tx_polarity_flip_fabric143.BCM8879X=1 phy_tx_polarity_flip_fabric144.BCM8879X=0 -phy_tx_polarity_flip_fabric145.BCM8879X=0 -phy_tx_polarity_flip_fabric146.BCM8879X=1 +phy_tx_polarity_flip_fabric145.BCM8879X=1 +phy_tx_polarity_flip_fabric146.BCM8879X=0 phy_tx_polarity_flip_fabric147.BCM8879X=1 -phy_tx_polarity_flip_fabric148.BCM8879X=0 -phy_tx_polarity_flip_fabric149.BCM8879X=1 -phy_tx_polarity_flip_fabric150.BCM8879X=0 -phy_tx_polarity_flip_fabric151.BCM8879X=1 +phy_tx_polarity_flip_fabric148.BCM8879X=1 +phy_tx_polarity_flip_fabric149.BCM8879X=0 +phy_tx_polarity_flip_fabric150.BCM8879X=1 +phy_tx_polarity_flip_fabric151.BCM8879X=0 phy_tx_polarity_flip_fabric152.BCM8879X=0 phy_tx_polarity_flip_fabric153.BCM8879X=1 phy_tx_polarity_flip_fabric154.BCM8879X=0 phy_tx_polarity_flip_fabric155.BCM8879X=1 -phy_tx_polarity_flip_fabric156.BCM8879X=0 +phy_tx_polarity_flip_fabric156.BCM8879X=1 phy_tx_polarity_flip_fabric157.BCM8879X=0 -phy_tx_polarity_flip_fabric158.BCM8879X=0 +phy_tx_polarity_flip_fabric158.BCM8879X=1 phy_tx_polarity_flip_fabric159.BCM8879X=0 -phy_tx_polarity_flip_fabric160.BCM8879X=1 +phy_tx_polarity_flip_fabric160.BCM8879X=0 phy_tx_polarity_flip_fabric161.BCM8879X=1 phy_tx_polarity_flip_fabric162.BCM8879X=0 -phy_tx_polarity_flip_fabric163.BCM8879X=0 +phy_tx_polarity_flip_fabric163.BCM8879X=1 phy_tx_polarity_flip_fabric164.BCM8879X=0 -phy_tx_polarity_flip_fabric165.BCM8879X=0 +phy_tx_polarity_flip_fabric165.BCM8879X=1 phy_tx_polarity_flip_fabric166.BCM8879X=0 -phy_tx_polarity_flip_fabric167.BCM8879X=0 +phy_tx_polarity_flip_fabric167.BCM8879X=1 -phy_tx_polarity_flip_fabric168.BCM8879X=1 +phy_tx_polarity_flip_fabric168.BCM8879X=0 phy_tx_polarity_flip_fabric169.BCM8879X=1 phy_tx_polarity_flip_fabric170.BCM8879X=0 -phy_tx_polarity_flip_fabric171.BCM8879X=0 +phy_tx_polarity_flip_fabric171.BCM8879X=1 phy_tx_polarity_flip_fabric172.BCM8879X=1 phy_tx_polarity_flip_fabric173.BCM8879X=0 @@ -744,25 +746,410 @@ phy_tx_polarity_flip_fabric174.BCM8879X=1 phy_tx_polarity_flip_fabric175.BCM8879X=0 phy_tx_polarity_flip_fabric176.BCM8879X=0 -phy_tx_polarity_flip_fabric177.BCM8879X=0 -phy_tx_polarity_flip_fabric178.BCM8879X=1 +phy_tx_polarity_flip_fabric177.BCM8879X=1 +phy_tx_polarity_flip_fabric178.BCM8879X=0 phy_tx_polarity_flip_fabric179.BCM8879X=1 -phy_tx_polarity_flip_fabric180.BCM8879X=0 +phy_tx_polarity_flip_fabric180.BCM8879X=1 phy_tx_polarity_flip_fabric181.BCM8879X=0 -phy_tx_polarity_flip_fabric182.BCM8879X=0 +phy_tx_polarity_flip_fabric182.BCM8879X=1 phy_tx_polarity_flip_fabric183.BCM8879X=0 -phy_tx_polarity_flip_fabric184.BCM8879X=1 -phy_tx_polarity_flip_fabric185.BCM8879X=0 -phy_tx_polarity_flip_fabric186.BCM8879X=1 -phy_tx_polarity_flip_fabric187.BCM8879X=0 +phy_tx_polarity_flip_fabric184.BCM8879X=0 +phy_tx_polarity_flip_fabric185.BCM8879X=1 +phy_tx_polarity_flip_fabric186.BCM8879X=0 +phy_tx_polarity_flip_fabric187.BCM8879X=1 -phy_tx_polarity_flip_fabric188.BCM8879X=1 -phy_tx_polarity_flip_fabric189.BCM8879X=0 +phy_tx_polarity_flip_fabric188.BCM8879X=0 +phy_tx_polarity_flip_fabric189.BCM8879X=1 phy_tx_polarity_flip_fabric190.BCM8879X=0 phy_tx_polarity_flip_fabric191.BCM8879X=1 +port_init_cl72_0=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 +port_init_cl72_19=0 +port_init_cl72_20=0 +port_init_cl72_21=0 +port_init_cl72_22=0 +port_init_cl72_23=0 +port_init_cl72_24=0 +port_init_cl72_25=0 +port_init_cl72_26=0 +port_init_cl72_27=0 +port_init_cl72_28=0 +port_init_cl72_29=0 +port_init_cl72_30=0 +port_init_cl72_31=0 +port_init_cl72_32=0 +port_init_cl72_33=0 +port_init_cl72_34=0 +port_init_cl72_35=0 +port_init_cl72_36=0 +port_init_cl72_37=0 +port_init_cl72_38=0 +port_init_cl72_39=0 +port_init_cl72_40=0 +port_init_cl72_41=0 +port_init_cl72_42=0 +port_init_cl72_43=0 +port_init_cl72_44=0 +port_init_cl72_45=0 +port_init_cl72_46=0 +port_init_cl72_47=0 +port_init_cl72_48=0 +port_init_cl72_49=0 +port_init_cl72_50=0 +port_init_cl72_51=0 +port_init_cl72_52=0 +port_init_cl72_53=0 +port_init_cl72_54=0 +port_init_cl72_55=0 +port_init_cl72_56=0 +port_init_cl72_57=0 +port_init_cl72_58=0 +port_init_cl72_59=0 +port_init_cl72_60=0 +port_init_cl72_61=0 +port_init_cl72_62=0 +port_init_cl72_63=0 +port_init_cl72_64=0 +port_init_cl72_65=0 +port_init_cl72_66=0 +port_init_cl72_67=0 +port_init_cl72_68=0 +port_init_cl72_69=0 +port_init_cl72_70=0 +port_init_cl72_71=0 +port_init_cl72_72=0 +port_init_cl72_73=0 +port_init_cl72_74=0 +port_init_cl72_75=0 +port_init_cl72_76=0 +port_init_cl72_77=0 +port_init_cl72_78=0 +port_init_cl72_79=0 +port_init_cl72_80=0 +port_init_cl72_81=0 +port_init_cl72_82=0 +port_init_cl72_83=0 +port_init_cl72_84=0 +port_init_cl72_85=0 +port_init_cl72_86=0 +port_init_cl72_87=0 +port_init_cl72_88=0 +port_init_cl72_89=0 +port_init_cl72_90=0 +port_init_cl72_91=0 +port_init_cl72_92=0 +port_init_cl72_93=0 +port_init_cl72_94=0 +port_init_cl72_95=0 +port_init_cl72_96=0 +port_init_cl72_97=0 +port_init_cl72_98=0 +port_init_cl72_99=0 +port_init_cl72_100=0 +port_init_cl72_101=0 +port_init_cl72_102=0 +port_init_cl72_103=0 +port_init_cl72_104=0 +port_init_cl72_105=0 +port_init_cl72_106=0 +port_init_cl72_107=0 +port_init_cl72_108=0 +port_init_cl72_109=0 +port_init_cl72_110=0 +port_init_cl72_111=0 +port_init_cl72_112=0 +port_init_cl72_113=0 +port_init_cl72_114=0 +port_init_cl72_115=0 +port_init_cl72_116=0 +port_init_cl72_117=0 +port_init_cl72_118=0 +port_init_cl72_119=0 +port_init_cl72_120=0 +port_init_cl72_121=0 +port_init_cl72_122=0 +port_init_cl72_123=0 +port_init_cl72_124=0 +port_init_cl72_125=0 +port_init_cl72_126=0 +port_init_cl72_127=0 +port_init_cl72_128=0 +port_init_cl72_129=0 +port_init_cl72_130=0 +port_init_cl72_131=0 +port_init_cl72_132=0 +port_init_cl72_133=0 +port_init_cl72_134=0 +port_init_cl72_135=0 +port_init_cl72_136=0 +port_init_cl72_137=0 +port_init_cl72_138=0 +port_init_cl72_139=0 +port_init_cl72_140=0 +port_init_cl72_141=0 +port_init_cl72_142=0 +port_init_cl72_143=0 +port_init_cl72_144=0 +port_init_cl72_145=0 +port_init_cl72_146=0 +port_init_cl72_147=0 +port_init_cl72_148=0 +port_init_cl72_149=0 +port_init_cl72_150=0 +port_init_cl72_151=0 +port_init_cl72_152=0 +port_init_cl72_153=0 +port_init_cl72_154=0 +port_init_cl72_155=0 +port_init_cl72_156=0 +port_init_cl72_157=0 +port_init_cl72_158=0 +port_init_cl72_159=0 +port_init_cl72_160=0 +port_init_cl72_161=0 +port_init_cl72_162=0 +port_init_cl72_163=0 +port_init_cl72_164=0 +port_init_cl72_165=0 +port_init_cl72_166=0 +port_init_cl72_167=0 +port_init_cl72_168=0 +port_init_cl72_169=0 +port_init_cl72_170=0 +port_init_cl72_171=0 +port_init_cl72_172=0 +port_init_cl72_173=0 +port_init_cl72_174=0 +port_init_cl72_175=0 +port_init_cl72_176=0 +port_init_cl72_177=0 +port_init_cl72_178=0 +port_init_cl72_179=0 +port_init_cl72_180=0 +port_init_cl72_181=0 +port_init_cl72_182=0 +port_init_cl72_183=0 +port_init_cl72_184=0 +port_init_cl72_185=0 +port_init_cl72_186=0 +port_init_cl72_187=0 +port_init_cl72_188=0 +port_init_cl72_189=0 +port_init_cl72_190=0 +port_init_cl72_191=0 + +serdes_tx_taps_0.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_1.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_2.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_3.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_4.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_5.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_6.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_7.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_8.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_9.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_10.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_11.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_12.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_13.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_14.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_15.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_16.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_17.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_18.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_19.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_20.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_21.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_22.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_23.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_24.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_25.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_26.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_27.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_28.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_29.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_30.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_31.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_32.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_33.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_34.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_35.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_36.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_37.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_38.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_39.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_40.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_41.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_42.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_43.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_44.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_45.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_46.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_47.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_48.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_49.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_50.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_51.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_52.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_53.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_54.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_55.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_56.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_57.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_58.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_59.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_60.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_61.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_62.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_63.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_64.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_65.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_66.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_67.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_68.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_69.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_70.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_71.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_72.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_73.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_74.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_75.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_76.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_77.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_78.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_79.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_80.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_81.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_82.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_83.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_84.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_85.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_86.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_87.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_88.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_89.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_90.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_91.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_92.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_93.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_94.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_95.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_96.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_97.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_98.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_99.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_100.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_101.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_102.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_103.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_104.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_105.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_106.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_107.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_108.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_109.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_110.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_111.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_112.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_113.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_114.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_115.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_116.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_117.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_118.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_119.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_120.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_121.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_122.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_123.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_124.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_125.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_126.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_127.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_128.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_129.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_130.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_131.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_132.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_133.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_134.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_135.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_136.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_137.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_138.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_139.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_140.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_141.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_142.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_143.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_144.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_145.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_146.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_147.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_148.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_149.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_150.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_151.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_152.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_153.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_154.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_155.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_156.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_157.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_158.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_159.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_160.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_161.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_162.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_163.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_164.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_165.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_166.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_167.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_168.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_169.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_170.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_171.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_172.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_173.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_174.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_175.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_176.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_177.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_178.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_179.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_180.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_181.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_182.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_183.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_184.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_185.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_186.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_187.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_188.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_189.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_190.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_191.BCM8879X=pam4:-24:132:-12:0:0:0 serdes_lane_config_channel_mode_0.0=force_nr serdes_lane_config_channel_mode_1.0=force_nr diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/12/config-ramon-7-0.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/12/config-ramon-7-0.bcm index c3f991119a28..8f7297b7716a 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/12/config-ramon-7-0.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/12/config-ramon-7-0.bcm @@ -1,7 +1,8 @@ + appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=13 bcm_linkscan_interval.BCM8879X=0 -bcm_stat_interval.BCM8879X=0 +bcm_stat_interval.BCM8879X=4000000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 @@ -20,10 +21,10 @@ mdio_output_delay_int.BCM8879X=25 mem_cache_enable_parity.BCM8879X=1 mm_intr_enable.BCM8879X=0 mm_timeout_usec.BCM8879X=300000 -polled_irq_delay.BCM8879X=500000 +polled_irq_delay.BCM8879X=100000 polled_irq_mode.BCM8879X=1 port_fec.BCM8879X=7 -port_init_cl72.BCM8879X=1 +port_init_cl72.BCM8879X=0 port_init_speed.BCM8879X=53125 rate_ext_mdio_divisor.BCM8879X=14 rate_int_mdio_divisor.BCM8879X=50 @@ -42,134 +43,134 @@ tslam_dma_enable.BCM8879X=0 tslam_intr_enable.BCM8879X=0 tslam_timeout_usec.BCM8879X=5000000 -lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx1 -lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx3 +lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx1 lane_to_serdes_map_fabric_lane2.BCM8879X=rx2:tx2 -lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx0 +lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx3 -lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx6 +lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx4 lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx5 -lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx7 -lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx4 +lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx7 -lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx10 -lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx8 -lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx11 -lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx9 +lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx11 -lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx13 -lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx15 +lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx13 lane_to_serdes_map_fabric_lane14.BCM8879X=rx14:tx14 -lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx12 +lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx15 -lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx18 -lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx16 -lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx19 -lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx17 +lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx18 +lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx19 lane_to_serdes_map_fabric_lane20.BCM8879X=rx20:tx20 -lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx22 -lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx23 -lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx21 +lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx23 lane_to_serdes_map_fabric_lane24.BCM8879X=rx24:tx24 -lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx26 -lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx27 -lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx25 +lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx26 +lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx27 -lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx29 -lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx30 -lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx28 +lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx29 +lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx30 lane_to_serdes_map_fabric_lane31.BCM8879X=rx31:tx31 -lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx34 -lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx32 -lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx35 -lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx33 +lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx35 lane_to_serdes_map_fabric_lane36.BCM8879X=rx36:tx36 -lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx38 -lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx39 -lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx37 +lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx39 -lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx43 -lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx42 -lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx40 -lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx41 +lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx40 +lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx41 +lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx42 +lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx43 lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx44 -lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx46 -lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx47 -lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx45 +lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx46 +lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx47 -lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx49 -lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx50 -lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx51 -lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx48 +lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx51 -lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx54 +lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx52 lane_to_serdes_map_fabric_lane53.BCM8879X=rx53:tx53 -lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx55 -lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx52 +lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx55 -lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx58 +lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx56 lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx57 -lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx59 -lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx56 +lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx58 +lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx59 -lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx61 -lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx60 +lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx60 +lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx61 lane_to_serdes_map_fabric_lane62.BCM8879X=rx62:tx62 lane_to_serdes_map_fabric_lane63.BCM8879X=rx63:tx63 lane_to_serdes_map_fabric_lane64.BCM8879X=rx64:tx64 -lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx66 -lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx65 +lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx66 lane_to_serdes_map_fabric_lane67.BCM8879X=rx67:tx67 -lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx69 -lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx70 -lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx71 -lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx68 +lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx71 -lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx74 -lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx72 -lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx75 -lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx73 +lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx72 +lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx75 -lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx78 -lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx76 -lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx79 -lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx77 +lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx76 +lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx77 +lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx78 +lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx79 lane_to_serdes_map_fabric_lane80.BCM8879X=rx80:tx80 -lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx82 -lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx83 -lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx81 +lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx82 +lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx83 -lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx85 -lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx86 -lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx87 -lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx84 +lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx87 -lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx90 -lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx88 -lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx91 -lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx89 +lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx89 +lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx90 +lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx91 -lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx95 -lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx94 -lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx92 -lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx93 +lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx92 +lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx94 +lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx95 lane_to_serdes_map_fabric_lane96.BCM8879X=rx96:tx96 -lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx98 -lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx97 +lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx98 lane_to_serdes_map_fabric_lane99.BCM8879X=rx99:tx99 -lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx101 -lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx102 -lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx100 +lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx102 lane_to_serdes_map_fabric_lane103.BCM8879X=rx103:tx103 lane_to_serdes_map_fabric_lane104.BCM8879X=rx104:tx104 @@ -182,10 +183,10 @@ lane_to_serdes_map_fabric_lane109.BCM8879X=rx109:tx109 lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx110 lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx111 -lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx115 -lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx114 -lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx113 -lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx112 +lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx112 +lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx114 +lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx115 lane_to_serdes_map_fabric_lane116.BCM8879X=rx116:tx116 lane_to_serdes_map_fabric_lane117.BCM8879X=rx117:tx117 @@ -197,15 +198,15 @@ lane_to_serdes_map_fabric_lane121.BCM8879X=rx121:tx121 lane_to_serdes_map_fabric_lane122.BCM8879X=rx122:tx122 lane_to_serdes_map_fabric_lane123.BCM8879X=rx123:tx123 -lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx127 -lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx126 -lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx124 -lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx125 +lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx127 -lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx131 -lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx130 -lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx129 -lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx128 +lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx131 lane_to_serdes_map_fabric_lane132.BCM8879X=rx132:tx132 lane_to_serdes_map_fabric_lane133.BCM8879X=rx133:tx133 @@ -213,23 +214,23 @@ lane_to_serdes_map_fabric_lane134.BCM8879X=rx134:tx134 lane_to_serdes_map_fabric_lane135.BCM8879X=rx135:tx135 lane_to_serdes_map_fabric_lane136.BCM8879X=rx136:tx136 -lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx138 -lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx137 +lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx137 +lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx138 lane_to_serdes_map_fabric_lane139.BCM8879X=rx139:tx139 -lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx143 -lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx142 -lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx141 -lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx140 +lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx140 +lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx143 -lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx145 -lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx147 -lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx144 -lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx146 +lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx147 -lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx150 +lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx148 lane_to_serdes_map_fabric_lane149.BCM8879X=rx149:tx149 -lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx148 +lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx150 lane_to_serdes_map_fabric_lane151.BCM8879X=rx151:tx151 lane_to_serdes_map_fabric_lane152.BCM8879X=rx152:tx152 @@ -237,91 +238,91 @@ lane_to_serdes_map_fabric_lane153.BCM8879X=rx153:tx153 lane_to_serdes_map_fabric_lane154.BCM8879X=rx154:tx154 lane_to_serdes_map_fabric_lane155.BCM8879X=rx155:tx155 -lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx157 -lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx159 -lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx156 -lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx158 +lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx156 +lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx157 +lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx158 +lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx159 lane_to_serdes_map_fabric_lane160.BCM8879X=rx160:tx160 -lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx162 -lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx161 +lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx162 lane_to_serdes_map_fabric_lane163.BCM8879X=rx163:tx163 -lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx166 -lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx164 -lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx165 +lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx166 lane_to_serdes_map_fabric_lane167.BCM8879X=rx167:tx167 -lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx170 -lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx168 -lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx169 +lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx168 +lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx170 lane_to_serdes_map_fabric_lane171.BCM8879X=rx171:tx171 -lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx173 -lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx174 -lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx175 -lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx172 +lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx172 +lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx173 +lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx174 +lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx175 lane_to_serdes_map_fabric_lane176.BCM8879X=rx176:tx176 -lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx178 -lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx177 +lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx178 lane_to_serdes_map_fabric_lane179.BCM8879X=rx179:tx179 -lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx182 -lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx180 -lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx181 +lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx180 +lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx182 lane_to_serdes_map_fabric_lane183.BCM8879X=rx183:tx183 -lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx187 -lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx184 +lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx185 lane_to_serdes_map_fabric_lane186.BCM8879X=rx186:tx186 -lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx185 +lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx187 -lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx190 +lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx188 lane_to_serdes_map_fabric_lane189.BCM8879X=rx189:tx189 -lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx191 -lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx188 +lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx190 +lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx191 -phy_rx_polarity_flip_fabric0.BCM8879X=0 -phy_rx_polarity_flip_fabric1.BCM8879X=1 -phy_rx_polarity_flip_fabric2.BCM8879X=0 -phy_rx_polarity_flip_fabric3.BCM8879X=1 +phy_rx_polarity_flip_fabric0.BCM8879X=1 +phy_rx_polarity_flip_fabric1.BCM8879X=0 +phy_rx_polarity_flip_fabric2.BCM8879X=1 +phy_rx_polarity_flip_fabric3.BCM8879X=0 -phy_rx_polarity_flip_fabric4.BCM8879X=1 -phy_rx_polarity_flip_fabric5.BCM8879X=0 -phy_rx_polarity_flip_fabric6.BCM8879X=1 -phy_rx_polarity_flip_fabric7.BCM8879X=0 +phy_rx_polarity_flip_fabric4.BCM8879X=0 +phy_rx_polarity_flip_fabric5.BCM8879X=1 +phy_rx_polarity_flip_fabric6.BCM8879X=0 +phy_rx_polarity_flip_fabric7.BCM8879X=1 phy_rx_polarity_flip_fabric8.BCM8879X=1 phy_rx_polarity_flip_fabric9.BCM8879X=0 phy_rx_polarity_flip_fabric10.BCM8879X=1 phy_rx_polarity_flip_fabric11.BCM8879X=0 -phy_rx_polarity_flip_fabric12.BCM8879X=1 -phy_rx_polarity_flip_fabric13.BCM8879X=0 +phy_rx_polarity_flip_fabric12.BCM8879X=0 +phy_rx_polarity_flip_fabric13.BCM8879X=1 phy_rx_polarity_flip_fabric14.BCM8879X=0 phy_rx_polarity_flip_fabric15.BCM8879X=1 -phy_rx_polarity_flip_fabric16.BCM8879X=0 -phy_rx_polarity_flip_fabric17.BCM8879X=1 -phy_rx_polarity_flip_fabric18.BCM8879X=0 -phy_rx_polarity_flip_fabric19.BCM8879X=1 +phy_rx_polarity_flip_fabric16.BCM8879X=1 +phy_rx_polarity_flip_fabric17.BCM8879X=0 +phy_rx_polarity_flip_fabric18.BCM8879X=1 +phy_rx_polarity_flip_fabric19.BCM8879X=0 -phy_rx_polarity_flip_fabric20.BCM8879X=0 -phy_rx_polarity_flip_fabric21.BCM8879X=1 +phy_rx_polarity_flip_fabric20.BCM8879X=1 +phy_rx_polarity_flip_fabric21.BCM8879X=0 phy_rx_polarity_flip_fabric22.BCM8879X=1 phy_rx_polarity_flip_fabric23.BCM8879X=0 -phy_rx_polarity_flip_fabric24.BCM8879X=0 -phy_rx_polarity_flip_fabric25.BCM8879X=1 -phy_rx_polarity_flip_fabric26.BCM8879X=0 -phy_rx_polarity_flip_fabric27.BCM8879X=1 +phy_rx_polarity_flip_fabric24.BCM8879X=1 +phy_rx_polarity_flip_fabric25.BCM8879X=0 +phy_rx_polarity_flip_fabric26.BCM8879X=1 +phy_rx_polarity_flip_fabric27.BCM8879X=0 -phy_rx_polarity_flip_fabric28.BCM8879X=1 -phy_rx_polarity_flip_fabric29.BCM8879X=0 -phy_rx_polarity_flip_fabric30.BCM8879X=1 -phy_rx_polarity_flip_fabric31.BCM8879X=0 +phy_rx_polarity_flip_fabric28.BCM8879X=0 +phy_rx_polarity_flip_fabric29.BCM8879X=1 +phy_rx_polarity_flip_fabric30.BCM8879X=0 +phy_rx_polarity_flip_fabric31.BCM8879X=1 phy_rx_polarity_flip_fabric32.BCM8879X=1 phy_rx_polarity_flip_fabric33.BCM8879X=0 @@ -330,11 +331,11 @@ phy_rx_polarity_flip_fabric35.BCM8879X=0 phy_rx_polarity_flip_fabric36.BCM8879X=0 phy_rx_polarity_flip_fabric37.BCM8879X=1 -phy_rx_polarity_flip_fabric38.BCM8879X=1 -phy_rx_polarity_flip_fabric39.BCM8879X=0 +phy_rx_polarity_flip_fabric38.BCM8879X=0 +phy_rx_polarity_flip_fabric39.BCM8879X=1 -phy_rx_polarity_flip_fabric40.BCM8879X=0 -phy_rx_polarity_flip_fabric41.BCM8879X=1 +phy_rx_polarity_flip_fabric40.BCM8879X=1 +phy_rx_polarity_flip_fabric41.BCM8879X=0 phy_rx_polarity_flip_fabric42.BCM8879X=1 phy_rx_polarity_flip_fabric43.BCM8879X=0 @@ -350,63 +351,63 @@ phy_rx_polarity_flip_fabric51.BCM8879X=1 phy_rx_polarity_flip_fabric52.BCM8879X=1 phy_rx_polarity_flip_fabric53.BCM8879X=0 -phy_rx_polarity_flip_fabric54.BCM8879X=0 -phy_rx_polarity_flip_fabric55.BCM8879X=1 +phy_rx_polarity_flip_fabric54.BCM8879X=1 +phy_rx_polarity_flip_fabric55.BCM8879X=0 -phy_rx_polarity_flip_fabric56.BCM8879X=1 -phy_rx_polarity_flip_fabric57.BCM8879X=0 +phy_rx_polarity_flip_fabric56.BCM8879X=0 +phy_rx_polarity_flip_fabric57.BCM8879X=1 phy_rx_polarity_flip_fabric58.BCM8879X=0 phy_rx_polarity_flip_fabric59.BCM8879X=1 -phy_rx_polarity_flip_fabric60.BCM8879X=1 -phy_rx_polarity_flip_fabric61.BCM8879X=0 -phy_rx_polarity_flip_fabric62.BCM8879X=1 -phy_rx_polarity_flip_fabric63.BCM8879X=0 +phy_rx_polarity_flip_fabric60.BCM8879X=0 +phy_rx_polarity_flip_fabric61.BCM8879X=1 +phy_rx_polarity_flip_fabric62.BCM8879X=0 +phy_rx_polarity_flip_fabric63.BCM8879X=1 -phy_rx_polarity_flip_fabric64.BCM8879X=0 -phy_rx_polarity_flip_fabric65.BCM8879X=1 -phy_rx_polarity_flip_fabric66.BCM8879X=0 -phy_rx_polarity_flip_fabric67.BCM8879X=1 +phy_rx_polarity_flip_fabric64.BCM8879X=1 +phy_rx_polarity_flip_fabric65.BCM8879X=0 +phy_rx_polarity_flip_fabric66.BCM8879X=1 +phy_rx_polarity_flip_fabric67.BCM8879X=0 -phy_rx_polarity_flip_fabric68.BCM8879X=1 -phy_rx_polarity_flip_fabric69.BCM8879X=0 -phy_rx_polarity_flip_fabric70.BCM8879X=1 -phy_rx_polarity_flip_fabric71.BCM8879X=0 +phy_rx_polarity_flip_fabric68.BCM8879X=0 +phy_rx_polarity_flip_fabric69.BCM8879X=1 +phy_rx_polarity_flip_fabric70.BCM8879X=0 +phy_rx_polarity_flip_fabric71.BCM8879X=1 -phy_rx_polarity_flip_fabric72.BCM8879X=0 -phy_rx_polarity_flip_fabric73.BCM8879X=1 -phy_rx_polarity_flip_fabric74.BCM8879X=0 -phy_rx_polarity_flip_fabric75.BCM8879X=1 +phy_rx_polarity_flip_fabric72.BCM8879X=1 +phy_rx_polarity_flip_fabric73.BCM8879X=0 +phy_rx_polarity_flip_fabric74.BCM8879X=1 +phy_rx_polarity_flip_fabric75.BCM8879X=0 -phy_rx_polarity_flip_fabric76.BCM8879X=0 -phy_rx_polarity_flip_fabric77.BCM8879X=1 +phy_rx_polarity_flip_fabric76.BCM8879X=1 +phy_rx_polarity_flip_fabric77.BCM8879X=0 phy_rx_polarity_flip_fabric78.BCM8879X=1 phy_rx_polarity_flip_fabric79.BCM8879X=0 phy_rx_polarity_flip_fabric80.BCM8879X=0 phy_rx_polarity_flip_fabric81.BCM8879X=1 -phy_rx_polarity_flip_fabric82.BCM8879X=1 -phy_rx_polarity_flip_fabric83.BCM8879X=0 +phy_rx_polarity_flip_fabric82.BCM8879X=0 +phy_rx_polarity_flip_fabric83.BCM8879X=1 phy_rx_polarity_flip_fabric84.BCM8879X=1 phy_rx_polarity_flip_fabric85.BCM8879X=0 phy_rx_polarity_flip_fabric86.BCM8879X=1 phy_rx_polarity_flip_fabric87.BCM8879X=0 -phy_rx_polarity_flip_fabric88.BCM8879X=1 -phy_rx_polarity_flip_fabric89.BCM8879X=0 -phy_rx_polarity_flip_fabric90.BCM8879X=1 -phy_rx_polarity_flip_fabric91.BCM8879X=0 +phy_rx_polarity_flip_fabric88.BCM8879X=0 +phy_rx_polarity_flip_fabric89.BCM8879X=1 +phy_rx_polarity_flip_fabric90.BCM8879X=0 +phy_rx_polarity_flip_fabric91.BCM8879X=1 -phy_rx_polarity_flip_fabric92.BCM8879X=0 -phy_rx_polarity_flip_fabric93.BCM8879X=1 -phy_rx_polarity_flip_fabric94.BCM8879X=0 -phy_rx_polarity_flip_fabric95.BCM8879X=1 +phy_rx_polarity_flip_fabric92.BCM8879X=1 +phy_rx_polarity_flip_fabric93.BCM8879X=0 +phy_rx_polarity_flip_fabric94.BCM8879X=1 +phy_rx_polarity_flip_fabric95.BCM8879X=0 -phy_rx_polarity_flip_fabric96.BCM8879X=0 -phy_rx_polarity_flip_fabric97.BCM8879X=1 -phy_rx_polarity_flip_fabric98.BCM8879X=0 -phy_rx_polarity_flip_fabric99.BCM8879X=1 +phy_rx_polarity_flip_fabric96.BCM8879X=1 +phy_rx_polarity_flip_fabric97.BCM8879X=0 +phy_rx_polarity_flip_fabric98.BCM8879X=1 +phy_rx_polarity_flip_fabric99.BCM8879X=0 phy_rx_polarity_flip_fabric100.BCM8879X=0 phy_rx_polarity_flip_fabric101.BCM8879X=1 @@ -418,10 +419,10 @@ phy_rx_polarity_flip_fabric105.BCM8879X=1 phy_rx_polarity_flip_fabric106.BCM8879X=0 phy_rx_polarity_flip_fabric107.BCM8879X=1 -phy_rx_polarity_flip_fabric108.BCM8879X=1 -phy_rx_polarity_flip_fabric109.BCM8879X=0 -phy_rx_polarity_flip_fabric110.BCM8879X=1 -phy_rx_polarity_flip_fabric111.BCM8879X=0 +phy_rx_polarity_flip_fabric108.BCM8879X=0 +phy_rx_polarity_flip_fabric109.BCM8879X=1 +phy_rx_polarity_flip_fabric110.BCM8879X=0 +phy_rx_polarity_flip_fabric111.BCM8879X=1 phy_rx_polarity_flip_fabric112.BCM8879X=0 phy_rx_polarity_flip_fabric113.BCM8879X=1 @@ -433,223 +434,223 @@ phy_rx_polarity_flip_fabric117.BCM8879X=0 phy_rx_polarity_flip_fabric118.BCM8879X=1 phy_rx_polarity_flip_fabric119.BCM8879X=0 -phy_rx_polarity_flip_fabric120.BCM8879X=0 -phy_rx_polarity_flip_fabric121.BCM8879X=1 -phy_rx_polarity_flip_fabric122.BCM8879X=0 -phy_rx_polarity_flip_fabric123.BCM8879X=1 +phy_rx_polarity_flip_fabric120.BCM8879X=1 +phy_rx_polarity_flip_fabric121.BCM8879X=0 +phy_rx_polarity_flip_fabric122.BCM8879X=1 +phy_rx_polarity_flip_fabric123.BCM8879X=0 phy_rx_polarity_flip_fabric124.BCM8879X=0 phy_rx_polarity_flip_fabric125.BCM8879X=1 phy_rx_polarity_flip_fabric126.BCM8879X=0 phy_rx_polarity_flip_fabric127.BCM8879X=1 -phy_rx_polarity_flip_fabric128.BCM8879X=0 -phy_rx_polarity_flip_fabric129.BCM8879X=1 -phy_rx_polarity_flip_fabric130.BCM8879X=0 -phy_rx_polarity_flip_fabric131.BCM8879X=1 +phy_rx_polarity_flip_fabric128.BCM8879X=1 +phy_rx_polarity_flip_fabric129.BCM8879X=0 +phy_rx_polarity_flip_fabric130.BCM8879X=1 +phy_rx_polarity_flip_fabric131.BCM8879X=0 -phy_rx_polarity_flip_fabric132.BCM8879X=1 -phy_rx_polarity_flip_fabric133.BCM8879X=0 -phy_rx_polarity_flip_fabric134.BCM8879X=1 -phy_rx_polarity_flip_fabric135.BCM8879X=0 +phy_rx_polarity_flip_fabric132.BCM8879X=0 +phy_rx_polarity_flip_fabric133.BCM8879X=1 +phy_rx_polarity_flip_fabric134.BCM8879X=0 +phy_rx_polarity_flip_fabric135.BCM8879X=1 phy_rx_polarity_flip_fabric136.BCM8879X=1 phy_rx_polarity_flip_fabric137.BCM8879X=0 phy_rx_polarity_flip_fabric138.BCM8879X=1 phy_rx_polarity_flip_fabric139.BCM8879X=0 -phy_rx_polarity_flip_fabric140.BCM8879X=0 -phy_rx_polarity_flip_fabric141.BCM8879X=1 -phy_rx_polarity_flip_fabric142.BCM8879X=0 -phy_rx_polarity_flip_fabric143.BCM8879X=1 +phy_rx_polarity_flip_fabric140.BCM8879X=1 +phy_rx_polarity_flip_fabric141.BCM8879X=0 +phy_rx_polarity_flip_fabric142.BCM8879X=1 +phy_rx_polarity_flip_fabric143.BCM8879X=0 -phy_rx_polarity_flip_fabric144.BCM8879X=0 -phy_rx_polarity_flip_fabric145.BCM8879X=1 -phy_rx_polarity_flip_fabric146.BCM8879X=0 -phy_rx_polarity_flip_fabric147.BCM8879X=1 +phy_rx_polarity_flip_fabric144.BCM8879X=1 +phy_rx_polarity_flip_fabric145.BCM8879X=0 +phy_rx_polarity_flip_fabric146.BCM8879X=1 +phy_rx_polarity_flip_fabric147.BCM8879X=0 phy_rx_polarity_flip_fabric148.BCM8879X=1 phy_rx_polarity_flip_fabric149.BCM8879X=0 phy_rx_polarity_flip_fabric150.BCM8879X=1 phy_rx_polarity_flip_fabric151.BCM8879X=0 -phy_rx_polarity_flip_fabric152.BCM8879X=1 -phy_rx_polarity_flip_fabric153.BCM8879X=0 -phy_rx_polarity_flip_fabric154.BCM8879X=1 -phy_rx_polarity_flip_fabric155.BCM8879X=0 +phy_rx_polarity_flip_fabric152.BCM8879X=0 +phy_rx_polarity_flip_fabric153.BCM8879X=1 +phy_rx_polarity_flip_fabric154.BCM8879X=0 +phy_rx_polarity_flip_fabric155.BCM8879X=1 -phy_rx_polarity_flip_fabric156.BCM8879X=0 -phy_rx_polarity_flip_fabric157.BCM8879X=1 -phy_rx_polarity_flip_fabric158.BCM8879X=0 -phy_rx_polarity_flip_fabric159.BCM8879X=1 +phy_rx_polarity_flip_fabric156.BCM8879X=1 +phy_rx_polarity_flip_fabric157.BCM8879X=0 +phy_rx_polarity_flip_fabric158.BCM8879X=1 +phy_rx_polarity_flip_fabric159.BCM8879X=0 -phy_rx_polarity_flip_fabric160.BCM8879X=0 -phy_rx_polarity_flip_fabric161.BCM8879X=1 -phy_rx_polarity_flip_fabric162.BCM8879X=0 -phy_rx_polarity_flip_fabric163.BCM8879X=1 +phy_rx_polarity_flip_fabric160.BCM8879X=1 +phy_rx_polarity_flip_fabric161.BCM8879X=0 +phy_rx_polarity_flip_fabric162.BCM8879X=1 +phy_rx_polarity_flip_fabric163.BCM8879X=0 phy_rx_polarity_flip_fabric164.BCM8879X=0 phy_rx_polarity_flip_fabric165.BCM8879X=1 phy_rx_polarity_flip_fabric166.BCM8879X=0 phy_rx_polarity_flip_fabric167.BCM8879X=1 -phy_rx_polarity_flip_fabric168.BCM8879X=0 -phy_rx_polarity_flip_fabric169.BCM8879X=1 -phy_rx_polarity_flip_fabric170.BCM8879X=0 -phy_rx_polarity_flip_fabric171.BCM8879X=1 +phy_rx_polarity_flip_fabric168.BCM8879X=1 +phy_rx_polarity_flip_fabric169.BCM8879X=0 +phy_rx_polarity_flip_fabric170.BCM8879X=1 +phy_rx_polarity_flip_fabric171.BCM8879X=0 phy_rx_polarity_flip_fabric172.BCM8879X=1 phy_rx_polarity_flip_fabric173.BCM8879X=0 phy_rx_polarity_flip_fabric174.BCM8879X=1 phy_rx_polarity_flip_fabric175.BCM8879X=0 -phy_rx_polarity_flip_fabric176.BCM8879X=1 -phy_rx_polarity_flip_fabric177.BCM8879X=0 -phy_rx_polarity_flip_fabric178.BCM8879X=1 -phy_rx_polarity_flip_fabric179.BCM8879X=0 +phy_rx_polarity_flip_fabric176.BCM8879X=0 +phy_rx_polarity_flip_fabric177.BCM8879X=1 +phy_rx_polarity_flip_fabric178.BCM8879X=0 +phy_rx_polarity_flip_fabric179.BCM8879X=1 -phy_rx_polarity_flip_fabric180.BCM8879X=0 -phy_rx_polarity_flip_fabric181.BCM8879X=1 -phy_rx_polarity_flip_fabric182.BCM8879X=0 -phy_rx_polarity_flip_fabric183.BCM8879X=1 +phy_rx_polarity_flip_fabric180.BCM8879X=1 +phy_rx_polarity_flip_fabric181.BCM8879X=0 +phy_rx_polarity_flip_fabric182.BCM8879X=1 +phy_rx_polarity_flip_fabric183.BCM8879X=0 phy_rx_polarity_flip_fabric184.BCM8879X=0 phy_rx_polarity_flip_fabric185.BCM8879X=1 phy_rx_polarity_flip_fabric186.BCM8879X=0 phy_rx_polarity_flip_fabric187.BCM8879X=1 -phy_rx_polarity_flip_fabric188.BCM8879X=0 -phy_rx_polarity_flip_fabric189.BCM8879X=1 -phy_rx_polarity_flip_fabric190.BCM8879X=0 -phy_rx_polarity_flip_fabric191.BCM8879X=1 +phy_rx_polarity_flip_fabric188.BCM8879X=1 +phy_rx_polarity_flip_fabric189.BCM8879X=0 +phy_rx_polarity_flip_fabric190.BCM8879X=1 +phy_rx_polarity_flip_fabric191.BCM8879X=0 phy_tx_polarity_flip_fabric0.BCM8879X=0 -phy_tx_polarity_flip_fabric1.BCM8879X=0 -phy_tx_polarity_flip_fabric2.BCM8879X=1 +phy_tx_polarity_flip_fabric1.BCM8879X=1 +phy_tx_polarity_flip_fabric2.BCM8879X=0 phy_tx_polarity_flip_fabric3.BCM8879X=1 -phy_tx_polarity_flip_fabric4.BCM8879X=0 -phy_tx_polarity_flip_fabric5.BCM8879X=1 +phy_tx_polarity_flip_fabric4.BCM8879X=1 +phy_tx_polarity_flip_fabric5.BCM8879X=0 phy_tx_polarity_flip_fabric6.BCM8879X=1 phy_tx_polarity_flip_fabric7.BCM8879X=0 phy_tx_polarity_flip_fabric8.BCM8879X=0 -phy_tx_polarity_flip_fabric9.BCM8879X=0 -phy_tx_polarity_flip_fabric10.BCM8879X=1 +phy_tx_polarity_flip_fabric9.BCM8879X=1 +phy_tx_polarity_flip_fabric10.BCM8879X=0 phy_tx_polarity_flip_fabric11.BCM8879X=1 -phy_tx_polarity_flip_fabric12.BCM8879X=0 -phy_tx_polarity_flip_fabric13.BCM8879X=1 +phy_tx_polarity_flip_fabric12.BCM8879X=1 +phy_tx_polarity_flip_fabric13.BCM8879X=0 phy_tx_polarity_flip_fabric14.BCM8879X=1 -phy_tx_polarity_flip_fabric15.BCM8879X=1 +phy_tx_polarity_flip_fabric15.BCM8879X=0 -phy_tx_polarity_flip_fabric16.BCM8879X=1 +phy_tx_polarity_flip_fabric16.BCM8879X=0 phy_tx_polarity_flip_fabric17.BCM8879X=1 -phy_tx_polarity_flip_fabric18.BCM8879X=1 -phy_tx_polarity_flip_fabric19.BCM8879X=0 +phy_tx_polarity_flip_fabric18.BCM8879X=0 +phy_tx_polarity_flip_fabric19.BCM8879X=1 -phy_tx_polarity_flip_fabric20.BCM8879X=1 +phy_tx_polarity_flip_fabric20.BCM8879X=0 phy_tx_polarity_flip_fabric21.BCM8879X=1 -phy_tx_polarity_flip_fabric22.BCM8879X=1 -phy_tx_polarity_flip_fabric23.BCM8879X=0 +phy_tx_polarity_flip_fabric22.BCM8879X=0 +phy_tx_polarity_flip_fabric23.BCM8879X=1 -phy_tx_polarity_flip_fabric24.BCM8879X=1 +phy_tx_polarity_flip_fabric24.BCM8879X=0 phy_tx_polarity_flip_fabric25.BCM8879X=1 phy_tx_polarity_flip_fabric26.BCM8879X=0 -phy_tx_polarity_flip_fabric27.BCM8879X=0 +phy_tx_polarity_flip_fabric27.BCM8879X=1 phy_tx_polarity_flip_fabric28.BCM8879X=1 phy_tx_polarity_flip_fabric29.BCM8879X=0 -phy_tx_polarity_flip_fabric30.BCM8879X=0 -phy_tx_polarity_flip_fabric31.BCM8879X=1 +phy_tx_polarity_flip_fabric30.BCM8879X=1 +phy_tx_polarity_flip_fabric31.BCM8879X=0 phy_tx_polarity_flip_fabric32.BCM8879X=0 -phy_tx_polarity_flip_fabric33.BCM8879X=0 -phy_tx_polarity_flip_fabric34.BCM8879X=1 +phy_tx_polarity_flip_fabric33.BCM8879X=1 +phy_tx_polarity_flip_fabric34.BCM8879X=0 phy_tx_polarity_flip_fabric35.BCM8879X=1 phy_tx_polarity_flip_fabric36.BCM8879X=1 -phy_tx_polarity_flip_fabric37.BCM8879X=1 +phy_tx_polarity_flip_fabric37.BCM8879X=0 phy_tx_polarity_flip_fabric38.BCM8879X=1 phy_tx_polarity_flip_fabric39.BCM8879X=0 phy_tx_polarity_flip_fabric40.BCM8879X=0 phy_tx_polarity_flip_fabric41.BCM8879X=1 phy_tx_polarity_flip_fabric42.BCM8879X=0 -phy_tx_polarity_flip_fabric43.BCM8879X=0 +phy_tx_polarity_flip_fabric43.BCM8879X=1 -phy_tx_polarity_flip_fabric44.BCM8879X=1 +phy_tx_polarity_flip_fabric44.BCM8879X=0 phy_tx_polarity_flip_fabric45.BCM8879X=1 phy_tx_polarity_flip_fabric46.BCM8879X=0 phy_tx_polarity_flip_fabric47.BCM8879X=1 -phy_tx_polarity_flip_fabric48.BCM8879X=0 -phy_tx_polarity_flip_fabric49.BCM8879X=1 +phy_tx_polarity_flip_fabric48.BCM8879X=1 +phy_tx_polarity_flip_fabric49.BCM8879X=0 phy_tx_polarity_flip_fabric50.BCM8879X=1 -phy_tx_polarity_flip_fabric51.BCM8879X=1 +phy_tx_polarity_flip_fabric51.BCM8879X=0 -phy_tx_polarity_flip_fabric52.BCM8879X=1 +phy_tx_polarity_flip_fabric52.BCM8879X=0 phy_tx_polarity_flip_fabric53.BCM8879X=1 phy_tx_polarity_flip_fabric54.BCM8879X=0 phy_tx_polarity_flip_fabric55.BCM8879X=1 -phy_tx_polarity_flip_fabric56.BCM8879X=0 +phy_tx_polarity_flip_fabric56.BCM8879X=1 phy_tx_polarity_flip_fabric57.BCM8879X=0 -phy_tx_polarity_flip_fabric58.BCM8879X=0 -phy_tx_polarity_flip_fabric59.BCM8879X=1 +phy_tx_polarity_flip_fabric58.BCM8879X=1 +phy_tx_polarity_flip_fabric59.BCM8879X=0 phy_tx_polarity_flip_fabric60.BCM8879X=1 phy_tx_polarity_flip_fabric61.BCM8879X=0 -phy_tx_polarity_flip_fabric62.BCM8879X=0 -phy_tx_polarity_flip_fabric63.BCM8879X=1 +phy_tx_polarity_flip_fabric62.BCM8879X=1 +phy_tx_polarity_flip_fabric63.BCM8879X=0 -phy_tx_polarity_flip_fabric64.BCM8879X=1 +phy_tx_polarity_flip_fabric64.BCM8879X=0 phy_tx_polarity_flip_fabric65.BCM8879X=1 phy_tx_polarity_flip_fabric66.BCM8879X=0 -phy_tx_polarity_flip_fabric67.BCM8879X=0 +phy_tx_polarity_flip_fabric67.BCM8879X=1 phy_tx_polarity_flip_fabric68.BCM8879X=1 phy_tx_polarity_flip_fabric69.BCM8879X=0 phy_tx_polarity_flip_fabric70.BCM8879X=1 phy_tx_polarity_flip_fabric71.BCM8879X=0 -phy_tx_polarity_flip_fabric72.BCM8879X=1 +phy_tx_polarity_flip_fabric72.BCM8879X=0 phy_tx_polarity_flip_fabric73.BCM8879X=1 -phy_tx_polarity_flip_fabric74.BCM8879X=1 -phy_tx_polarity_flip_fabric75.BCM8879X=0 +phy_tx_polarity_flip_fabric74.BCM8879X=0 +phy_tx_polarity_flip_fabric75.BCM8879X=1 -phy_tx_polarity_flip_fabric76.BCM8879X=1 +phy_tx_polarity_flip_fabric76.BCM8879X=0 phy_tx_polarity_flip_fabric77.BCM8879X=1 phy_tx_polarity_flip_fabric78.BCM8879X=0 phy_tx_polarity_flip_fabric79.BCM8879X=1 phy_tx_polarity_flip_fabric80.BCM8879X=1 -phy_tx_polarity_flip_fabric81.BCM8879X=1 -phy_tx_polarity_flip_fabric82.BCM8879X=0 -phy_tx_polarity_flip_fabric83.BCM8879X=1 +phy_tx_polarity_flip_fabric81.BCM8879X=0 +phy_tx_polarity_flip_fabric82.BCM8879X=1 +phy_tx_polarity_flip_fabric83.BCM8879X=0 -phy_tx_polarity_flip_fabric84.BCM8879X=1 -phy_tx_polarity_flip_fabric85.BCM8879X=0 -phy_tx_polarity_flip_fabric86.BCM8879X=1 -phy_tx_polarity_flip_fabric87.BCM8879X=0 +phy_tx_polarity_flip_fabric84.BCM8879X=0 +phy_tx_polarity_flip_fabric85.BCM8879X=1 +phy_tx_polarity_flip_fabric86.BCM8879X=0 +phy_tx_polarity_flip_fabric87.BCM8879X=1 -phy_tx_polarity_flip_fabric88.BCM8879X=0 +phy_tx_polarity_flip_fabric88.BCM8879X=1 phy_tx_polarity_flip_fabric89.BCM8879X=0 phy_tx_polarity_flip_fabric90.BCM8879X=1 -phy_tx_polarity_flip_fabric91.BCM8879X=1 +phy_tx_polarity_flip_fabric91.BCM8879X=0 phy_tx_polarity_flip_fabric92.BCM8879X=0 phy_tx_polarity_flip_fabric93.BCM8879X=1 -phy_tx_polarity_flip_fabric94.BCM8879X=1 -phy_tx_polarity_flip_fabric95.BCM8879X=0 +phy_tx_polarity_flip_fabric94.BCM8879X=0 +phy_tx_polarity_flip_fabric95.BCM8879X=1 -phy_tx_polarity_flip_fabric96.BCM8879X=1 +phy_tx_polarity_flip_fabric96.BCM8879X=0 phy_tx_polarity_flip_fabric97.BCM8879X=1 phy_tx_polarity_flip_fabric98.BCM8879X=0 -phy_tx_polarity_flip_fabric99.BCM8879X=0 +phy_tx_polarity_flip_fabric99.BCM8879X=1 -phy_tx_polarity_flip_fabric100.BCM8879X=0 -phy_tx_polarity_flip_fabric101.BCM8879X=1 +phy_tx_polarity_flip_fabric100.BCM8879X=1 +phy_tx_polarity_flip_fabric101.BCM8879X=0 phy_tx_polarity_flip_fabric102.BCM8879X=1 phy_tx_polarity_flip_fabric103.BCM8879X=0 @@ -658,28 +659,28 @@ phy_tx_polarity_flip_fabric105.BCM8879X=0 phy_tx_polarity_flip_fabric106.BCM8879X=1 phy_tx_polarity_flip_fabric107.BCM8879X=0 -phy_tx_polarity_flip_fabric108.BCM8879X=0 -phy_tx_polarity_flip_fabric109.BCM8879X=1 -phy_tx_polarity_flip_fabric110.BCM8879X=0 -phy_tx_polarity_flip_fabric111.BCM8879X=1 +phy_tx_polarity_flip_fabric108.BCM8879X=1 +phy_tx_polarity_flip_fabric109.BCM8879X=0 +phy_tx_polarity_flip_fabric110.BCM8879X=1 +phy_tx_polarity_flip_fabric111.BCM8879X=0 -phy_tx_polarity_flip_fabric112.BCM8879X=0 -phy_tx_polarity_flip_fabric113.BCM8879X=1 -phy_tx_polarity_flip_fabric114.BCM8879X=0 -phy_tx_polarity_flip_fabric115.BCM8879X=1 +phy_tx_polarity_flip_fabric112.BCM8879X=1 +phy_tx_polarity_flip_fabric113.BCM8879X=0 +phy_tx_polarity_flip_fabric114.BCM8879X=1 +phy_tx_polarity_flip_fabric115.BCM8879X=0 phy_tx_polarity_flip_fabric116.BCM8879X=0 phy_tx_polarity_flip_fabric117.BCM8879X=1 phy_tx_polarity_flip_fabric118.BCM8879X=0 phy_tx_polarity_flip_fabric119.BCM8879X=1 -phy_tx_polarity_flip_fabric120.BCM8879X=1 -phy_tx_polarity_flip_fabric121.BCM8879X=0 -phy_tx_polarity_flip_fabric122.BCM8879X=1 -phy_tx_polarity_flip_fabric123.BCM8879X=0 +phy_tx_polarity_flip_fabric120.BCM8879X=0 +phy_tx_polarity_flip_fabric121.BCM8879X=1 +phy_tx_polarity_flip_fabric122.BCM8879X=0 +phy_tx_polarity_flip_fabric123.BCM8879X=1 -phy_tx_polarity_flip_fabric124.BCM8879X=0 -phy_tx_polarity_flip_fabric125.BCM8879X=1 +phy_tx_polarity_flip_fabric124.BCM8879X=1 +phy_tx_polarity_flip_fabric125.BCM8879X=0 phy_tx_polarity_flip_fabric126.BCM8879X=1 phy_tx_polarity_flip_fabric127.BCM8879X=0 @@ -688,14 +689,14 @@ phy_tx_polarity_flip_fabric129.BCM8879X=1 phy_tx_polarity_flip_fabric130.BCM8879X=0 phy_tx_polarity_flip_fabric131.BCM8879X=1 -phy_tx_polarity_flip_fabric132.BCM8879X=0 -phy_tx_polarity_flip_fabric133.BCM8879X=1 -phy_tx_polarity_flip_fabric134.BCM8879X=0 -phy_tx_polarity_flip_fabric135.BCM8879X=1 +phy_tx_polarity_flip_fabric132.BCM8879X=1 +phy_tx_polarity_flip_fabric133.BCM8879X=0 +phy_tx_polarity_flip_fabric134.BCM8879X=1 +phy_tx_polarity_flip_fabric135.BCM8879X=0 phy_tx_polarity_flip_fabric136.BCM8879X=0 -phy_tx_polarity_flip_fabric137.BCM8879X=0 -phy_tx_polarity_flip_fabric138.BCM8879X=1 +phy_tx_polarity_flip_fabric137.BCM8879X=1 +phy_tx_polarity_flip_fabric138.BCM8879X=0 phy_tx_polarity_flip_fabric139.BCM8879X=1 phy_tx_polarity_flip_fabric140.BCM8879X=0 @@ -704,8 +705,8 @@ phy_tx_polarity_flip_fabric142.BCM8879X=0 phy_tx_polarity_flip_fabric143.BCM8879X=1 phy_tx_polarity_flip_fabric144.BCM8879X=0 -phy_tx_polarity_flip_fabric145.BCM8879X=0 -phy_tx_polarity_flip_fabric146.BCM8879X=1 +phy_tx_polarity_flip_fabric145.BCM8879X=1 +phy_tx_polarity_flip_fabric146.BCM8879X=0 phy_tx_polarity_flip_fabric147.BCM8879X=1 phy_tx_polarity_flip_fabric148.BCM8879X=0 @@ -713,56 +714,441 @@ phy_tx_polarity_flip_fabric149.BCM8879X=1 phy_tx_polarity_flip_fabric150.BCM8879X=0 phy_tx_polarity_flip_fabric151.BCM8879X=1 -phy_tx_polarity_flip_fabric152.BCM8879X=0 -phy_tx_polarity_flip_fabric153.BCM8879X=1 -phy_tx_polarity_flip_fabric154.BCM8879X=0 -phy_tx_polarity_flip_fabric155.BCM8879X=1 +phy_tx_polarity_flip_fabric152.BCM8879X=1 +phy_tx_polarity_flip_fabric153.BCM8879X=0 +phy_tx_polarity_flip_fabric154.BCM8879X=1 +phy_tx_polarity_flip_fabric155.BCM8879X=0 phy_tx_polarity_flip_fabric156.BCM8879X=0 -phy_tx_polarity_flip_fabric157.BCM8879X=0 -phy_tx_polarity_flip_fabric158.BCM8879X=1 +phy_tx_polarity_flip_fabric157.BCM8879X=1 +phy_tx_polarity_flip_fabric158.BCM8879X=0 phy_tx_polarity_flip_fabric159.BCM8879X=1 -phy_tx_polarity_flip_fabric160.BCM8879X=1 +phy_tx_polarity_flip_fabric160.BCM8879X=0 phy_tx_polarity_flip_fabric161.BCM8879X=1 phy_tx_polarity_flip_fabric162.BCM8879X=0 -phy_tx_polarity_flip_fabric163.BCM8879X=0 +phy_tx_polarity_flip_fabric163.BCM8879X=1 phy_tx_polarity_flip_fabric164.BCM8879X=1 -phy_tx_polarity_flip_fabric165.BCM8879X=1 -phy_tx_polarity_flip_fabric166.BCM8879X=0 +phy_tx_polarity_flip_fabric165.BCM8879X=0 +phy_tx_polarity_flip_fabric166.BCM8879X=1 phy_tx_polarity_flip_fabric167.BCM8879X=0 -phy_tx_polarity_flip_fabric168.BCM8879X=1 +phy_tx_polarity_flip_fabric168.BCM8879X=0 phy_tx_polarity_flip_fabric169.BCM8879X=1 phy_tx_polarity_flip_fabric170.BCM8879X=0 -phy_tx_polarity_flip_fabric171.BCM8879X=0 +phy_tx_polarity_flip_fabric171.BCM8879X=1 -phy_tx_polarity_flip_fabric172.BCM8879X=1 -phy_tx_polarity_flip_fabric173.BCM8879X=0 -phy_tx_polarity_flip_fabric174.BCM8879X=1 -phy_tx_polarity_flip_fabric175.BCM8879X=0 +phy_tx_polarity_flip_fabric172.BCM8879X=0 +phy_tx_polarity_flip_fabric173.BCM8879X=1 +phy_tx_polarity_flip_fabric174.BCM8879X=0 +phy_tx_polarity_flip_fabric175.BCM8879X=1 -phy_tx_polarity_flip_fabric176.BCM8879X=0 +phy_tx_polarity_flip_fabric176.BCM8879X=1 phy_tx_polarity_flip_fabric177.BCM8879X=0 phy_tx_polarity_flip_fabric178.BCM8879X=1 -phy_tx_polarity_flip_fabric179.BCM8879X=1 +phy_tx_polarity_flip_fabric179.BCM8879X=0 -phy_tx_polarity_flip_fabric180.BCM8879X=1 +phy_tx_polarity_flip_fabric180.BCM8879X=0 phy_tx_polarity_flip_fabric181.BCM8879X=1 phy_tx_polarity_flip_fabric182.BCM8879X=0 -phy_tx_polarity_flip_fabric183.BCM8879X=0 +phy_tx_polarity_flip_fabric183.BCM8879X=1 -phy_tx_polarity_flip_fabric184.BCM8879X=0 -phy_tx_polarity_flip_fabric185.BCM8879X=1 +phy_tx_polarity_flip_fabric184.BCM8879X=1 +phy_tx_polarity_flip_fabric185.BCM8879X=0 phy_tx_polarity_flip_fabric186.BCM8879X=1 phy_tx_polarity_flip_fabric187.BCM8879X=0 -phy_tx_polarity_flip_fabric188.BCM8879X=1 -phy_tx_polarity_flip_fabric189.BCM8879X=0 +phy_tx_polarity_flip_fabric188.BCM8879X=0 +phy_tx_polarity_flip_fabric189.BCM8879X=1 phy_tx_polarity_flip_fabric190.BCM8879X=0 phy_tx_polarity_flip_fabric191.BCM8879X=1 +port_init_cl72_0=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 +port_init_cl72_19=0 +port_init_cl72_20=0 +port_init_cl72_21=0 +port_init_cl72_22=0 +port_init_cl72_23=0 +port_init_cl72_24=0 +port_init_cl72_25=0 +port_init_cl72_26=0 +port_init_cl72_27=0 +port_init_cl72_28=0 +port_init_cl72_29=0 +port_init_cl72_30=0 +port_init_cl72_31=0 +port_init_cl72_32=0 +port_init_cl72_33=0 +port_init_cl72_34=0 +port_init_cl72_35=0 +port_init_cl72_36=0 +port_init_cl72_37=0 +port_init_cl72_38=0 +port_init_cl72_39=0 +port_init_cl72_40=0 +port_init_cl72_41=0 +port_init_cl72_42=0 +port_init_cl72_43=0 +port_init_cl72_44=0 +port_init_cl72_45=0 +port_init_cl72_46=0 +port_init_cl72_47=0 +port_init_cl72_48=0 +port_init_cl72_49=0 +port_init_cl72_50=0 +port_init_cl72_51=0 +port_init_cl72_52=0 +port_init_cl72_53=0 +port_init_cl72_54=0 +port_init_cl72_55=0 +port_init_cl72_56=0 +port_init_cl72_57=0 +port_init_cl72_58=0 +port_init_cl72_59=0 +port_init_cl72_60=0 +port_init_cl72_61=0 +port_init_cl72_62=0 +port_init_cl72_63=0 +port_init_cl72_64=0 +port_init_cl72_65=0 +port_init_cl72_66=0 +port_init_cl72_67=0 +port_init_cl72_68=0 +port_init_cl72_69=0 +port_init_cl72_70=0 +port_init_cl72_71=0 +port_init_cl72_72=0 +port_init_cl72_73=0 +port_init_cl72_74=0 +port_init_cl72_75=0 +port_init_cl72_76=0 +port_init_cl72_77=0 +port_init_cl72_78=0 +port_init_cl72_79=0 +port_init_cl72_80=0 +port_init_cl72_81=0 +port_init_cl72_82=0 +port_init_cl72_83=0 +port_init_cl72_84=0 +port_init_cl72_85=0 +port_init_cl72_86=0 +port_init_cl72_87=0 +port_init_cl72_88=0 +port_init_cl72_89=0 +port_init_cl72_90=0 +port_init_cl72_91=0 +port_init_cl72_92=0 +port_init_cl72_93=0 +port_init_cl72_94=0 +port_init_cl72_95=0 +port_init_cl72_96=0 +port_init_cl72_97=0 +port_init_cl72_98=0 +port_init_cl72_99=0 +port_init_cl72_100=0 +port_init_cl72_101=0 +port_init_cl72_102=0 +port_init_cl72_103=0 +port_init_cl72_104=0 +port_init_cl72_105=0 +port_init_cl72_106=0 +port_init_cl72_107=0 +port_init_cl72_108=0 +port_init_cl72_109=0 +port_init_cl72_110=0 +port_init_cl72_111=0 +port_init_cl72_112=0 +port_init_cl72_113=0 +port_init_cl72_114=0 +port_init_cl72_115=0 +port_init_cl72_116=0 +port_init_cl72_117=0 +port_init_cl72_118=0 +port_init_cl72_119=0 +port_init_cl72_120=0 +port_init_cl72_121=0 +port_init_cl72_122=0 +port_init_cl72_123=0 +port_init_cl72_124=0 +port_init_cl72_125=0 +port_init_cl72_126=0 +port_init_cl72_127=0 +port_init_cl72_128=0 +port_init_cl72_129=0 +port_init_cl72_130=0 +port_init_cl72_131=0 +port_init_cl72_132=0 +port_init_cl72_133=0 +port_init_cl72_134=0 +port_init_cl72_135=0 +port_init_cl72_136=0 +port_init_cl72_137=0 +port_init_cl72_138=0 +port_init_cl72_139=0 +port_init_cl72_140=0 +port_init_cl72_141=0 +port_init_cl72_142=0 +port_init_cl72_143=0 +port_init_cl72_144=0 +port_init_cl72_145=0 +port_init_cl72_146=0 +port_init_cl72_147=0 +port_init_cl72_148=0 +port_init_cl72_149=0 +port_init_cl72_150=0 +port_init_cl72_151=0 +port_init_cl72_152=0 +port_init_cl72_153=0 +port_init_cl72_154=0 +port_init_cl72_155=0 +port_init_cl72_156=0 +port_init_cl72_157=0 +port_init_cl72_158=0 +port_init_cl72_159=0 +port_init_cl72_160=0 +port_init_cl72_161=0 +port_init_cl72_162=0 +port_init_cl72_163=0 +port_init_cl72_164=0 +port_init_cl72_165=0 +port_init_cl72_166=0 +port_init_cl72_167=0 +port_init_cl72_168=0 +port_init_cl72_169=0 +port_init_cl72_170=0 +port_init_cl72_171=0 +port_init_cl72_172=0 +port_init_cl72_173=0 +port_init_cl72_174=0 +port_init_cl72_175=0 +port_init_cl72_176=0 +port_init_cl72_177=0 +port_init_cl72_178=0 +port_init_cl72_179=0 +port_init_cl72_180=0 +port_init_cl72_181=0 +port_init_cl72_182=0 +port_init_cl72_183=0 +port_init_cl72_184=0 +port_init_cl72_185=0 +port_init_cl72_186=0 +port_init_cl72_187=0 +port_init_cl72_188=0 +port_init_cl72_189=0 +port_init_cl72_190=0 +port_init_cl72_191=0 + +serdes_tx_taps_0.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_1.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_2.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_3.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_4.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_5.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_6.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_7.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_8.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_9.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_10.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_11.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_12.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_13.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_14.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_15.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_16.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_17.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_18.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_19.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_20.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_21.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_22.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_23.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_24.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_25.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_26.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_27.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_28.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_29.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_30.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_31.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_32.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_33.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_34.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_35.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_36.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_37.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_38.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_39.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_40.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_41.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_42.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_43.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_44.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_45.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_46.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_47.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_48.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_49.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_50.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_51.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_52.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_53.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_54.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_55.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_56.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_57.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_58.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_59.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_60.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_61.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_62.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_63.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_64.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_65.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_66.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_67.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_68.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_69.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_70.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_71.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_72.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_73.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_74.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_75.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_76.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_77.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_78.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_79.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_80.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_81.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_82.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_83.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_84.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_85.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_86.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_87.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_88.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_89.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_90.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_91.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_92.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_93.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_94.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_95.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_96.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_97.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_98.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_99.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_100.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_101.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_102.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_103.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_104.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_105.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_106.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_107.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_108.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_109.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_110.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_111.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_112.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_113.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_114.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_115.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_116.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_117.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_118.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_119.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_120.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_121.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_122.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_123.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_124.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_125.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_126.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_127.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_128.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_129.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_130.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_131.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_132.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_133.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_134.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_135.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_136.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_137.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_138.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_139.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_140.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_141.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_142.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_143.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_144.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_145.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_146.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_147.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_148.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_149.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_150.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_151.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_152.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_153.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_154.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_155.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_156.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_157.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_158.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_159.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_160.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_161.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_162.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_163.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_164.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_165.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_166.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_167.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_168.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_169.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_170.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_171.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_172.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_173.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_174.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_175.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_176.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_177.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_178.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_179.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_180.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_181.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_182.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_183.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_184.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_185.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_186.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_187.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_188.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_189.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_190.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_191.BCM8879X=pam4:-24:132:-12:0:0:0 serdes_lane_config_channel_mode_0.0=force_nr serdes_lane_config_channel_mode_1.0=force_nr diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/13/config-ramon-7-1.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/13/config-ramon-7-1.bcm index 5bc2c8f6ce6b..219aaa4aea1d 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/13/config-ramon-7-1.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/13/config-ramon-7-1.bcm @@ -1,7 +1,8 @@ + appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=14 bcm_linkscan_interval.BCM8879X=0 -bcm_stat_interval.BCM8879X=0 +bcm_stat_interval.BCM8879X=4000000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 @@ -20,10 +21,10 @@ mdio_output_delay_int.BCM8879X=25 mem_cache_enable_parity.BCM8879X=1 mm_intr_enable.BCM8879X=0 mm_timeout_usec.BCM8879X=300000 -polled_irq_delay.BCM8879X=500000 +polled_irq_delay.BCM8879X=100000 polled_irq_mode.BCM8879X=1 port_fec.BCM8879X=7 -port_init_cl72.BCM8879X=1 +port_init_cl72.BCM8879X=0 port_init_speed.BCM8879X=53125 rate_ext_mdio_divisor.BCM8879X=14 rate_int_mdio_divisor.BCM8879X=50 @@ -42,134 +43,134 @@ tslam_dma_enable.BCM8879X=0 tslam_intr_enable.BCM8879X=0 tslam_timeout_usec.BCM8879X=5000000 -lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx1 -lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx3 +lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx1 lane_to_serdes_map_fabric_lane2.BCM8879X=rx2:tx2 -lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx0 +lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx3 -lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx5 -lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx6 -lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx7 -lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx4 +lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx4 +lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx5 +lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx7 -lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx10 -lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx8 -lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx11 -lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx9 +lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx11 -lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx13 -lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx15 +lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx13 lane_to_serdes_map_fabric_lane14.BCM8879X=rx14:tx14 -lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx12 +lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx15 -lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx18 -lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx16 -lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx17 +lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx18 lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx19 lane_to_serdes_map_fabric_lane20.BCM8879X=rx20:tx20 -lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx22 -lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx23 -lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx21 +lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx23 lane_to_serdes_map_fabric_lane24.BCM8879X=rx24:tx24 -lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx26 -lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx27 -lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx25 +lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx26 +lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx27 -lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx29 -lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx30 -lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx28 +lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx29 +lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx30 lane_to_serdes_map_fabric_lane31.BCM8879X=rx31:tx31 -lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx34 -lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx32 -lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx35 -lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx33 +lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx35 lane_to_serdes_map_fabric_lane36.BCM8879X=rx36:tx36 -lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx38 -lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx39 -lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx37 - -lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx43 -lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx42 -lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx40 -lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx41 - -lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx46 -lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx44 -lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx45 +lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx39 + +lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx40 +lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx41 +lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx42 +lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx43 + +lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx44 +lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx46 lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx47 -lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx49 -lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx50 -lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx51 -lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx48 +lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx51 -lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx54 +lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx52 lane_to_serdes_map_fabric_lane53.BCM8879X=rx53:tx53 -lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx55 -lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx52 +lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx55 -lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx57 -lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx58 -lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx59 -lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx56 +lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx56 +lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx57 +lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx58 +lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx59 -lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx61 -lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx60 +lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx60 +lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx61 lane_to_serdes_map_fabric_lane62.BCM8879X=rx62:tx62 lane_to_serdes_map_fabric_lane63.BCM8879X=rx63:tx63 lane_to_serdes_map_fabric_lane64.BCM8879X=rx64:tx64 -lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx66 -lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx65 +lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx66 lane_to_serdes_map_fabric_lane67.BCM8879X=rx67:tx67 -lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx69 -lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx70 -lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx71 -lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx68 +lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx71 -lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx74 -lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx72 -lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx75 -lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx73 +lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx72 +lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx75 -lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx78 -lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx76 -lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx79 -lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx77 +lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx76 +lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx77 +lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx78 +lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx79 lane_to_serdes_map_fabric_lane80.BCM8879X=rx80:tx80 -lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx82 -lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx81 +lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx82 lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx83 -lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx85 -lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx86 -lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx87 -lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx84 +lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx87 -lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx90 -lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx88 -lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx91 -lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx89 +lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx89 +lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx90 +lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx91 -lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx95 -lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx94 -lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx92 -lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx93 +lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx92 +lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx94 +lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx95 lane_to_serdes_map_fabric_lane96.BCM8879X=rx96:tx96 -lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx98 -lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx97 +lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx98 lane_to_serdes_map_fabric_lane99.BCM8879X=rx99:tx99 -lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx101 -lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx102 -lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx100 +lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx102 lane_to_serdes_map_fabric_lane103.BCM8879X=rx103:tx103 lane_to_serdes_map_fabric_lane104.BCM8879X=rx104:tx104 @@ -179,13 +180,13 @@ lane_to_serdes_map_fabric_lane107.BCM8879X=rx107:tx107 lane_to_serdes_map_fabric_lane108.BCM8879X=rx108:tx108 lane_to_serdes_map_fabric_lane109.BCM8879X=rx109:tx109 -lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx111 -lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx110 +lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx110 +lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx111 -lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx115 -lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx114 -lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx113 -lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx112 +lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx112 +lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx114 +lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx115 lane_to_serdes_map_fabric_lane116.BCM8879X=rx116:tx116 lane_to_serdes_map_fabric_lane117.BCM8879X=rx117:tx117 @@ -197,15 +198,15 @@ lane_to_serdes_map_fabric_lane121.BCM8879X=rx121:tx121 lane_to_serdes_map_fabric_lane122.BCM8879X=rx122:tx122 lane_to_serdes_map_fabric_lane123.BCM8879X=rx123:tx123 -lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx127 -lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx126 -lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx124 -lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx125 +lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx127 -lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx130 -lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx131 -lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx129 -lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx128 +lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx131 lane_to_serdes_map_fabric_lane132.BCM8879X=rx132:tx132 lane_to_serdes_map_fabric_lane133.BCM8879X=rx133:tx133 @@ -213,23 +214,23 @@ lane_to_serdes_map_fabric_lane134.BCM8879X=rx134:tx134 lane_to_serdes_map_fabric_lane135.BCM8879X=rx135:tx135 lane_to_serdes_map_fabric_lane136.BCM8879X=rx136:tx136 -lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx138 -lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx137 +lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx137 +lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx138 lane_to_serdes_map_fabric_lane139.BCM8879X=rx139:tx139 -lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx143 -lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx142 -lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx141 -lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx140 +lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx140 +lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx143 -lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx145 -lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx147 -lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx144 -lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx146 +lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx147 -lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx150 +lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx148 lane_to_serdes_map_fabric_lane149.BCM8879X=rx149:tx149 -lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx148 +lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx150 lane_to_serdes_map_fabric_lane151.BCM8879X=rx151:tx151 lane_to_serdes_map_fabric_lane152.BCM8879X=rx152:tx152 @@ -237,116 +238,116 @@ lane_to_serdes_map_fabric_lane153.BCM8879X=rx153:tx153 lane_to_serdes_map_fabric_lane154.BCM8879X=rx154:tx154 lane_to_serdes_map_fabric_lane155.BCM8879X=rx155:tx155 -lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx157 -lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx159 +lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx156 +lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx157 lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx158 -lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx156 +lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx159 lane_to_serdes_map_fabric_lane160.BCM8879X=rx160:tx160 -lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx162 -lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx161 +lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx162 lane_to_serdes_map_fabric_lane163.BCM8879X=rx163:tx163 -lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx166 -lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx164 -lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx165 +lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx166 lane_to_serdes_map_fabric_lane167.BCM8879X=rx167:tx167 -lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx170 -lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx168 -lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx169 +lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx168 +lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx170 lane_to_serdes_map_fabric_lane171.BCM8879X=rx171:tx171 -lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx173 -lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx174 -lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx175 -lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx172 +lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx172 +lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx173 +lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx174 +lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx175 lane_to_serdes_map_fabric_lane176.BCM8879X=rx176:tx176 -lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx178 -lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx177 +lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx178 lane_to_serdes_map_fabric_lane179.BCM8879X=rx179:tx179 lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx180 -lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx182 -lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx181 +lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx182 lane_to_serdes_map_fabric_lane183.BCM8879X=rx183:tx183 -lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx187 -lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx184 +lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx185 lane_to_serdes_map_fabric_lane186.BCM8879X=rx186:tx186 -lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx185 +lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx187 -lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx190 +lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx188 lane_to_serdes_map_fabric_lane189.BCM8879X=rx189:tx189 -lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx191 -lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx188 +lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx190 +lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx191 -phy_rx_polarity_flip_fabric0.BCM8879X=0 -phy_rx_polarity_flip_fabric1.BCM8879X=1 -phy_rx_polarity_flip_fabric2.BCM8879X=0 -phy_rx_polarity_flip_fabric3.BCM8879X=1 +phy_rx_polarity_flip_fabric0.BCM8879X=1 +phy_rx_polarity_flip_fabric1.BCM8879X=0 +phy_rx_polarity_flip_fabric2.BCM8879X=1 +phy_rx_polarity_flip_fabric3.BCM8879X=0 phy_rx_polarity_flip_fabric4.BCM8879X=1 phy_rx_polarity_flip_fabric5.BCM8879X=0 phy_rx_polarity_flip_fabric6.BCM8879X=1 phy_rx_polarity_flip_fabric7.BCM8879X=0 -phy_rx_polarity_flip_fabric8.BCM8879X=1 -phy_rx_polarity_flip_fabric9.BCM8879X=0 -phy_rx_polarity_flip_fabric10.BCM8879X=1 -phy_rx_polarity_flip_fabric11.BCM8879X=0 +phy_rx_polarity_flip_fabric8.BCM8879X=0 +phy_rx_polarity_flip_fabric9.BCM8879X=1 +phy_rx_polarity_flip_fabric10.BCM8879X=0 +phy_rx_polarity_flip_fabric11.BCM8879X=1 -phy_rx_polarity_flip_fabric12.BCM8879X=0 -phy_rx_polarity_flip_fabric13.BCM8879X=1 -phy_rx_polarity_flip_fabric14.BCM8879X=0 -phy_rx_polarity_flip_fabric15.BCM8879X=1 +phy_rx_polarity_flip_fabric12.BCM8879X=1 +phy_rx_polarity_flip_fabric13.BCM8879X=0 +phy_rx_polarity_flip_fabric14.BCM8879X=1 +phy_rx_polarity_flip_fabric15.BCM8879X=0 -phy_rx_polarity_flip_fabric16.BCM8879X=0 -phy_rx_polarity_flip_fabric17.BCM8879X=1 -phy_rx_polarity_flip_fabric18.BCM8879X=0 -phy_rx_polarity_flip_fabric19.BCM8879X=1 +phy_rx_polarity_flip_fabric16.BCM8879X=1 +phy_rx_polarity_flip_fabric17.BCM8879X=0 +phy_rx_polarity_flip_fabric18.BCM8879X=1 +phy_rx_polarity_flip_fabric19.BCM8879X=0 phy_rx_polarity_flip_fabric20.BCM8879X=0 phy_rx_polarity_flip_fabric21.BCM8879X=1 phy_rx_polarity_flip_fabric22.BCM8879X=0 phy_rx_polarity_flip_fabric23.BCM8879X=1 -phy_rx_polarity_flip_fabric24.BCM8879X=0 -phy_rx_polarity_flip_fabric25.BCM8879X=1 -phy_rx_polarity_flip_fabric26.BCM8879X=0 -phy_rx_polarity_flip_fabric27.BCM8879X=1 +phy_rx_polarity_flip_fabric24.BCM8879X=1 +phy_rx_polarity_flip_fabric25.BCM8879X=0 +phy_rx_polarity_flip_fabric26.BCM8879X=1 +phy_rx_polarity_flip_fabric27.BCM8879X=0 phy_rx_polarity_flip_fabric28.BCM8879X=1 phy_rx_polarity_flip_fabric29.BCM8879X=0 phy_rx_polarity_flip_fabric30.BCM8879X=1 phy_rx_polarity_flip_fabric31.BCM8879X=0 -phy_rx_polarity_flip_fabric32.BCM8879X=1 -phy_rx_polarity_flip_fabric33.BCM8879X=0 -phy_rx_polarity_flip_fabric34.BCM8879X=1 -phy_rx_polarity_flip_fabric35.BCM8879X=0 +phy_rx_polarity_flip_fabric32.BCM8879X=0 +phy_rx_polarity_flip_fabric33.BCM8879X=1 +phy_rx_polarity_flip_fabric34.BCM8879X=0 +phy_rx_polarity_flip_fabric35.BCM8879X=1 -phy_rx_polarity_flip_fabric36.BCM8879X=0 -phy_rx_polarity_flip_fabric37.BCM8879X=1 -phy_rx_polarity_flip_fabric38.BCM8879X=0 -phy_rx_polarity_flip_fabric39.BCM8879X=1 +phy_rx_polarity_flip_fabric36.BCM8879X=1 +phy_rx_polarity_flip_fabric37.BCM8879X=0 +phy_rx_polarity_flip_fabric38.BCM8879X=1 +phy_rx_polarity_flip_fabric39.BCM8879X=0 phy_rx_polarity_flip_fabric40.BCM8879X=0 phy_rx_polarity_flip_fabric41.BCM8879X=1 phy_rx_polarity_flip_fabric42.BCM8879X=0 phy_rx_polarity_flip_fabric43.BCM8879X=1 -phy_rx_polarity_flip_fabric44.BCM8879X=0 -phy_rx_polarity_flip_fabric45.BCM8879X=1 -phy_rx_polarity_flip_fabric46.BCM8879X=0 -phy_rx_polarity_flip_fabric47.BCM8879X=1 +phy_rx_polarity_flip_fabric44.BCM8879X=1 +phy_rx_polarity_flip_fabric45.BCM8879X=0 +phy_rx_polarity_flip_fabric46.BCM8879X=1 +phy_rx_polarity_flip_fabric47.BCM8879X=0 -phy_rx_polarity_flip_fabric48.BCM8879X=0 -phy_rx_polarity_flip_fabric49.BCM8879X=1 -phy_rx_polarity_flip_fabric50.BCM8879X=0 -phy_rx_polarity_flip_fabric51.BCM8879X=1 +phy_rx_polarity_flip_fabric48.BCM8879X=1 +phy_rx_polarity_flip_fabric49.BCM8879X=0 +phy_rx_polarity_flip_fabric50.BCM8879X=1 +phy_rx_polarity_flip_fabric51.BCM8879X=0 phy_rx_polarity_flip_fabric52.BCM8879X=0 phy_rx_polarity_flip_fabric53.BCM8879X=1 @@ -358,10 +359,10 @@ phy_rx_polarity_flip_fabric57.BCM8879X=1 phy_rx_polarity_flip_fabric58.BCM8879X=0 phy_rx_polarity_flip_fabric59.BCM8879X=1 -phy_rx_polarity_flip_fabric60.BCM8879X=1 -phy_rx_polarity_flip_fabric61.BCM8879X=0 -phy_rx_polarity_flip_fabric62.BCM8879X=1 -phy_rx_polarity_flip_fabric63.BCM8879X=0 +phy_rx_polarity_flip_fabric60.BCM8879X=0 +phy_rx_polarity_flip_fabric61.BCM8879X=1 +phy_rx_polarity_flip_fabric62.BCM8879X=0 +phy_rx_polarity_flip_fabric63.BCM8879X=1 phy_rx_polarity_flip_fabric64.BCM8879X=0 phy_rx_polarity_flip_fabric65.BCM8879X=1 @@ -373,78 +374,78 @@ phy_rx_polarity_flip_fabric69.BCM8879X=0 phy_rx_polarity_flip_fabric70.BCM8879X=1 phy_rx_polarity_flip_fabric71.BCM8879X=0 -phy_rx_polarity_flip_fabric72.BCM8879X=0 -phy_rx_polarity_flip_fabric73.BCM8879X=1 -phy_rx_polarity_flip_fabric74.BCM8879X=0 -phy_rx_polarity_flip_fabric75.BCM8879X=1 +phy_rx_polarity_flip_fabric72.BCM8879X=1 +phy_rx_polarity_flip_fabric73.BCM8879X=0 +phy_rx_polarity_flip_fabric74.BCM8879X=1 +phy_rx_polarity_flip_fabric75.BCM8879X=0 phy_rx_polarity_flip_fabric76.BCM8879X=0 phy_rx_polarity_flip_fabric77.BCM8879X=1 phy_rx_polarity_flip_fabric78.BCM8879X=0 phy_rx_polarity_flip_fabric79.BCM8879X=1 -phy_rx_polarity_flip_fabric80.BCM8879X=0 -phy_rx_polarity_flip_fabric81.BCM8879X=1 -phy_rx_polarity_flip_fabric82.BCM8879X=0 -phy_rx_polarity_flip_fabric83.BCM8879X=1 +phy_rx_polarity_flip_fabric80.BCM8879X=1 +phy_rx_polarity_flip_fabric81.BCM8879X=0 +phy_rx_polarity_flip_fabric82.BCM8879X=1 +phy_rx_polarity_flip_fabric83.BCM8879X=0 -phy_rx_polarity_flip_fabric84.BCM8879X=1 -phy_rx_polarity_flip_fabric85.BCM8879X=0 -phy_rx_polarity_flip_fabric86.BCM8879X=1 -phy_rx_polarity_flip_fabric87.BCM8879X=0 +phy_rx_polarity_flip_fabric84.BCM8879X=0 +phy_rx_polarity_flip_fabric85.BCM8879X=1 +phy_rx_polarity_flip_fabric86.BCM8879X=0 +phy_rx_polarity_flip_fabric87.BCM8879X=1 phy_rx_polarity_flip_fabric88.BCM8879X=1 phy_rx_polarity_flip_fabric89.BCM8879X=0 phy_rx_polarity_flip_fabric90.BCM8879X=1 phy_rx_polarity_flip_fabric91.BCM8879X=0 -phy_rx_polarity_flip_fabric92.BCM8879X=0 -phy_rx_polarity_flip_fabric93.BCM8879X=1 -phy_rx_polarity_flip_fabric94.BCM8879X=0 -phy_rx_polarity_flip_fabric95.BCM8879X=1 +phy_rx_polarity_flip_fabric92.BCM8879X=1 +phy_rx_polarity_flip_fabric93.BCM8879X=0 +phy_rx_polarity_flip_fabric94.BCM8879X=1 +phy_rx_polarity_flip_fabric95.BCM8879X=0 phy_rx_polarity_flip_fabric96.BCM8879X=0 -phy_rx_polarity_flip_fabric97.BCM8879X=0 +phy_rx_polarity_flip_fabric97.BCM8879X=1 phy_rx_polarity_flip_fabric98.BCM8879X=0 phy_rx_polarity_flip_fabric99.BCM8879X=1 -phy_rx_polarity_flip_fabric100.BCM8879X=0 -phy_rx_polarity_flip_fabric101.BCM8879X=1 +phy_rx_polarity_flip_fabric100.BCM8879X=1 +phy_rx_polarity_flip_fabric101.BCM8879X=0 phy_rx_polarity_flip_fabric102.BCM8879X=1 -phy_rx_polarity_flip_fabric103.BCM8879X=1 +phy_rx_polarity_flip_fabric103.BCM8879X=0 phy_rx_polarity_flip_fabric104.BCM8879X=0 phy_rx_polarity_flip_fabric105.BCM8879X=1 -phy_rx_polarity_flip_fabric106.BCM8879X=1 +phy_rx_polarity_flip_fabric106.BCM8879X=0 phy_rx_polarity_flip_fabric107.BCM8879X=1 -phy_rx_polarity_flip_fabric108.BCM8879X=1 -phy_rx_polarity_flip_fabric109.BCM8879X=0 -phy_rx_polarity_flip_fabric110.BCM8879X=1 -phy_rx_polarity_flip_fabric111.BCM8879X=0 +phy_rx_polarity_flip_fabric108.BCM8879X=0 +phy_rx_polarity_flip_fabric109.BCM8879X=1 +phy_rx_polarity_flip_fabric110.BCM8879X=0 +phy_rx_polarity_flip_fabric111.BCM8879X=1 -phy_rx_polarity_flip_fabric112.BCM8879X=0 -phy_rx_polarity_flip_fabric113.BCM8879X=1 -phy_rx_polarity_flip_fabric114.BCM8879X=0 -phy_rx_polarity_flip_fabric115.BCM8879X=1 +phy_rx_polarity_flip_fabric112.BCM8879X=1 +phy_rx_polarity_flip_fabric113.BCM8879X=0 +phy_rx_polarity_flip_fabric114.BCM8879X=1 +phy_rx_polarity_flip_fabric115.BCM8879X=0 -phy_rx_polarity_flip_fabric116.BCM8879X=1 -phy_rx_polarity_flip_fabric117.BCM8879X=0 -phy_rx_polarity_flip_fabric118.BCM8879X=1 -phy_rx_polarity_flip_fabric119.BCM8879X=0 +phy_rx_polarity_flip_fabric116.BCM8879X=0 +phy_rx_polarity_flip_fabric117.BCM8879X=1 +phy_rx_polarity_flip_fabric118.BCM8879X=0 +phy_rx_polarity_flip_fabric119.BCM8879X=1 -phy_rx_polarity_flip_fabric120.BCM8879X=0 +phy_rx_polarity_flip_fabric120.BCM8879X=1 phy_rx_polarity_flip_fabric121.BCM8879X=0 -phy_rx_polarity_flip_fabric122.BCM8879X=0 -phy_rx_polarity_flip_fabric123.BCM8879X=1 +phy_rx_polarity_flip_fabric122.BCM8879X=1 +phy_rx_polarity_flip_fabric123.BCM8879X=0 phy_rx_polarity_flip_fabric124.BCM8879X=1 -phy_rx_polarity_flip_fabric125.BCM8879X=1 -phy_rx_polarity_flip_fabric126.BCM8879X=0 -phy_rx_polarity_flip_fabric127.BCM8879X=1 +phy_rx_polarity_flip_fabric125.BCM8879X=0 +phy_rx_polarity_flip_fabric126.BCM8879X=1 +phy_rx_polarity_flip_fabric127.BCM8879X=0 phy_rx_polarity_flip_fabric128.BCM8879X=0 -phy_rx_polarity_flip_fabric129.BCM8879X=0 +phy_rx_polarity_flip_fabric129.BCM8879X=1 phy_rx_polarity_flip_fabric130.BCM8879X=0 phy_rx_polarity_flip_fabric131.BCM8879X=1 @@ -453,25 +454,25 @@ phy_rx_polarity_flip_fabric133.BCM8879X=0 phy_rx_polarity_flip_fabric134.BCM8879X=1 phy_rx_polarity_flip_fabric135.BCM8879X=0 -phy_rx_polarity_flip_fabric136.BCM8879X=1 -phy_rx_polarity_flip_fabric137.BCM8879X=0 -phy_rx_polarity_flip_fabric138.BCM8879X=1 -phy_rx_polarity_flip_fabric139.BCM8879X=0 +phy_rx_polarity_flip_fabric136.BCM8879X=0 +phy_rx_polarity_flip_fabric137.BCM8879X=1 +phy_rx_polarity_flip_fabric138.BCM8879X=0 +phy_rx_polarity_flip_fabric139.BCM8879X=1 -phy_rx_polarity_flip_fabric140.BCM8879X=0 -phy_rx_polarity_flip_fabric141.BCM8879X=1 -phy_rx_polarity_flip_fabric142.BCM8879X=0 -phy_rx_polarity_flip_fabric143.BCM8879X=1 +phy_rx_polarity_flip_fabric140.BCM8879X=1 +phy_rx_polarity_flip_fabric141.BCM8879X=0 +phy_rx_polarity_flip_fabric142.BCM8879X=1 +phy_rx_polarity_flip_fabric143.BCM8879X=0 -phy_rx_polarity_flip_fabric144.BCM8879X=0 -phy_rx_polarity_flip_fabric145.BCM8879X=1 -phy_rx_polarity_flip_fabric146.BCM8879X=0 -phy_rx_polarity_flip_fabric147.BCM8879X=1 +phy_rx_polarity_flip_fabric144.BCM8879X=1 +phy_rx_polarity_flip_fabric145.BCM8879X=0 +phy_rx_polarity_flip_fabric146.BCM8879X=1 +phy_rx_polarity_flip_fabric147.BCM8879X=0 -phy_rx_polarity_flip_fabric148.BCM8879X=1 -phy_rx_polarity_flip_fabric149.BCM8879X=0 -phy_rx_polarity_flip_fabric150.BCM8879X=1 -phy_rx_polarity_flip_fabric151.BCM8879X=0 +phy_rx_polarity_flip_fabric148.BCM8879X=0 +phy_rx_polarity_flip_fabric149.BCM8879X=1 +phy_rx_polarity_flip_fabric150.BCM8879X=0 +phy_rx_polarity_flip_fabric151.BCM8879X=1 phy_rx_polarity_flip_fabric152.BCM8879X=1 phy_rx_polarity_flip_fabric153.BCM8879X=0 @@ -480,28 +481,28 @@ phy_rx_polarity_flip_fabric155.BCM8879X=0 phy_rx_polarity_flip_fabric156.BCM8879X=0 phy_rx_polarity_flip_fabric157.BCM8879X=1 -phy_rx_polarity_flip_fabric158.BCM8879X=1 +phy_rx_polarity_flip_fabric158.BCM8879X=0 phy_rx_polarity_flip_fabric159.BCM8879X=1 -phy_rx_polarity_flip_fabric160.BCM8879X=0 +phy_rx_polarity_flip_fabric160.BCM8879X=1 phy_rx_polarity_flip_fabric161.BCM8879X=0 -phy_rx_polarity_flip_fabric162.BCM8879X=0 -phy_rx_polarity_flip_fabric163.BCM8879X=1 +phy_rx_polarity_flip_fabric162.BCM8879X=1 +phy_rx_polarity_flip_fabric163.BCM8879X=0 -phy_rx_polarity_flip_fabric164.BCM8879X=0 +phy_rx_polarity_flip_fabric164.BCM8879X=1 phy_rx_polarity_flip_fabric165.BCM8879X=0 -phy_rx_polarity_flip_fabric166.BCM8879X=0 -phy_rx_polarity_flip_fabric167.BCM8879X=1 +phy_rx_polarity_flip_fabric166.BCM8879X=1 +phy_rx_polarity_flip_fabric167.BCM8879X=0 -phy_rx_polarity_flip_fabric168.BCM8879X=0 -phy_rx_polarity_flip_fabric169.BCM8879X=1 -phy_rx_polarity_flip_fabric170.BCM8879X=0 -phy_rx_polarity_flip_fabric171.BCM8879X=1 +phy_rx_polarity_flip_fabric168.BCM8879X=1 +phy_rx_polarity_flip_fabric169.BCM8879X=0 +phy_rx_polarity_flip_fabric170.BCM8879X=1 +phy_rx_polarity_flip_fabric171.BCM8879X=0 -phy_rx_polarity_flip_fabric172.BCM8879X=1 -phy_rx_polarity_flip_fabric173.BCM8879X=0 -phy_rx_polarity_flip_fabric174.BCM8879X=1 -phy_rx_polarity_flip_fabric175.BCM8879X=0 +phy_rx_polarity_flip_fabric172.BCM8879X=0 +phy_rx_polarity_flip_fabric173.BCM8879X=1 +phy_rx_polarity_flip_fabric174.BCM8879X=0 +phy_rx_polarity_flip_fabric175.BCM8879X=1 phy_rx_polarity_flip_fabric176.BCM8879X=1 phy_rx_polarity_flip_fabric177.BCM8879X=0 @@ -509,79 +510,80 @@ phy_rx_polarity_flip_fabric178.BCM8879X=1 phy_rx_polarity_flip_fabric179.BCM8879X=0 phy_rx_polarity_flip_fabric180.BCM8879X=0 -phy_rx_polarity_flip_fabric181.BCM8879X=0 +phy_rx_polarity_flip_fabric181.BCM8879X=1 phy_rx_polarity_flip_fabric182.BCM8879X=0 phy_rx_polarity_flip_fabric183.BCM8879X=1 -phy_rx_polarity_flip_fabric184.BCM8879X=0 +phy_rx_polarity_flip_fabric184.BCM8879X=1 phy_rx_polarity_flip_fabric185.BCM8879X=0 -phy_rx_polarity_flip_fabric186.BCM8879X=0 -phy_rx_polarity_flip_fabric187.BCM8879X=1 +phy_rx_polarity_flip_fabric186.BCM8879X=1 +phy_rx_polarity_flip_fabric187.BCM8879X=0 phy_rx_polarity_flip_fabric188.BCM8879X=1 -phy_rx_polarity_flip_fabric189.BCM8879X=1 -phy_rx_polarity_flip_fabric190.BCM8879X=0 -phy_rx_polarity_flip_fabric191.BCM8879X=1 +phy_rx_polarity_flip_fabric189.BCM8879X=0 +phy_rx_polarity_flip_fabric190.BCM8879X=1 +phy_rx_polarity_flip_fabric191.BCM8879X=0 + phy_tx_polarity_flip_fabric0.BCM8879X=0 -phy_tx_polarity_flip_fabric1.BCM8879X=0 -phy_tx_polarity_flip_fabric2.BCM8879X=1 +phy_tx_polarity_flip_fabric1.BCM8879X=1 +phy_tx_polarity_flip_fabric2.BCM8879X=0 phy_tx_polarity_flip_fabric3.BCM8879X=1 -phy_tx_polarity_flip_fabric4.BCM8879X=1 -phy_tx_polarity_flip_fabric5.BCM8879X=0 -phy_tx_polarity_flip_fabric6.BCM8879X=1 -phy_tx_polarity_flip_fabric7.BCM8879X=0 +phy_tx_polarity_flip_fabric4.BCM8879X=0 +phy_tx_polarity_flip_fabric5.BCM8879X=1 +phy_tx_polarity_flip_fabric6.BCM8879X=0 +phy_tx_polarity_flip_fabric7.BCM8879X=1 -phy_tx_polarity_flip_fabric8.BCM8879X=0 +phy_tx_polarity_flip_fabric8.BCM8879X=1 phy_tx_polarity_flip_fabric9.BCM8879X=0 phy_tx_polarity_flip_fabric10.BCM8879X=1 -phy_tx_polarity_flip_fabric11.BCM8879X=1 +phy_tx_polarity_flip_fabric11.BCM8879X=0 phy_tx_polarity_flip_fabric12.BCM8879X=0 -phy_tx_polarity_flip_fabric13.BCM8879X=0 -phy_tx_polarity_flip_fabric14.BCM8879X=1 +phy_tx_polarity_flip_fabric13.BCM8879X=1 +phy_tx_polarity_flip_fabric14.BCM8879X=0 phy_tx_polarity_flip_fabric15.BCM8879X=1 -phy_tx_polarity_flip_fabric16.BCM8879X=1 +phy_tx_polarity_flip_fabric16.BCM8879X=0 phy_tx_polarity_flip_fabric17.BCM8879X=1 phy_tx_polarity_flip_fabric18.BCM8879X=0 -phy_tx_polarity_flip_fabric19.BCM8879X=0 +phy_tx_polarity_flip_fabric19.BCM8879X=1 phy_tx_polarity_flip_fabric20.BCM8879X=1 -phy_tx_polarity_flip_fabric21.BCM8879X=1 -phy_tx_polarity_flip_fabric22.BCM8879X=0 +phy_tx_polarity_flip_fabric21.BCM8879X=0 +phy_tx_polarity_flip_fabric22.BCM8879X=1 phy_tx_polarity_flip_fabric23.BCM8879X=0 -phy_tx_polarity_flip_fabric24.BCM8879X=1 +phy_tx_polarity_flip_fabric24.BCM8879X=0 phy_tx_polarity_flip_fabric25.BCM8879X=1 phy_tx_polarity_flip_fabric26.BCM8879X=0 -phy_tx_polarity_flip_fabric27.BCM8879X=0 +phy_tx_polarity_flip_fabric27.BCM8879X=1 -phy_tx_polarity_flip_fabric28.BCM8879X=1 -phy_tx_polarity_flip_fabric29.BCM8879X=0 +phy_tx_polarity_flip_fabric28.BCM8879X=0 +phy_tx_polarity_flip_fabric29.BCM8879X=1 phy_tx_polarity_flip_fabric30.BCM8879X=0 phy_tx_polarity_flip_fabric31.BCM8879X=1 -phy_tx_polarity_flip_fabric32.BCM8879X=0 +phy_tx_polarity_flip_fabric32.BCM8879X=1 phy_tx_polarity_flip_fabric33.BCM8879X=0 phy_tx_polarity_flip_fabric34.BCM8879X=1 -phy_tx_polarity_flip_fabric35.BCM8879X=1 +phy_tx_polarity_flip_fabric35.BCM8879X=0 -phy_tx_polarity_flip_fabric36.BCM8879X=1 +phy_tx_polarity_flip_fabric36.BCM8879X=0 phy_tx_polarity_flip_fabric37.BCM8879X=1 phy_tx_polarity_flip_fabric38.BCM8879X=0 -phy_tx_polarity_flip_fabric39.BCM8879X=0 +phy_tx_polarity_flip_fabric39.BCM8879X=1 -phy_tx_polarity_flip_fabric40.BCM8879X=0 -phy_tx_polarity_flip_fabric41.BCM8879X=1 +phy_tx_polarity_flip_fabric40.BCM8879X=1 +phy_tx_polarity_flip_fabric41.BCM8879X=0 phy_tx_polarity_flip_fabric42.BCM8879X=1 phy_tx_polarity_flip_fabric43.BCM8879X=0 -phy_tx_polarity_flip_fabric44.BCM8879X=1 +phy_tx_polarity_flip_fabric44.BCM8879X=0 phy_tx_polarity_flip_fabric45.BCM8879X=1 phy_tx_polarity_flip_fabric46.BCM8879X=0 -phy_tx_polarity_flip_fabric47.BCM8879X=0 +phy_tx_polarity_flip_fabric47.BCM8879X=1 phy_tx_polarity_flip_fabric48.BCM8879X=0 phy_tx_polarity_flip_fabric49.BCM8879X=1 @@ -590,43 +592,43 @@ phy_tx_polarity_flip_fabric51.BCM8879X=1 phy_tx_polarity_flip_fabric52.BCM8879X=1 phy_tx_polarity_flip_fabric53.BCM8879X=0 -phy_tx_polarity_flip_fabric54.BCM8879X=0 -phy_tx_polarity_flip_fabric55.BCM8879X=1 +phy_tx_polarity_flip_fabric54.BCM8879X=1 +phy_tx_polarity_flip_fabric55.BCM8879X=0 -phy_tx_polarity_flip_fabric56.BCM8879X=0 -phy_tx_polarity_flip_fabric57.BCM8879X=1 -phy_tx_polarity_flip_fabric58.BCM8879X=0 -phy_tx_polarity_flip_fabric59.BCM8879X=1 +phy_tx_polarity_flip_fabric56.BCM8879X=1 +phy_tx_polarity_flip_fabric57.BCM8879X=0 +phy_tx_polarity_flip_fabric58.BCM8879X=1 +phy_tx_polarity_flip_fabric59.BCM8879X=0 phy_tx_polarity_flip_fabric60.BCM8879X=1 phy_tx_polarity_flip_fabric61.BCM8879X=0 -phy_tx_polarity_flip_fabric62.BCM8879X=0 -phy_tx_polarity_flip_fabric63.BCM8879X=1 +phy_tx_polarity_flip_fabric62.BCM8879X=1 +phy_tx_polarity_flip_fabric63.BCM8879X=0 phy_tx_polarity_flip_fabric64.BCM8879X=1 -phy_tx_polarity_flip_fabric65.BCM8879X=1 -phy_tx_polarity_flip_fabric66.BCM8879X=0 +phy_tx_polarity_flip_fabric65.BCM8879X=0 +phy_tx_polarity_flip_fabric66.BCM8879X=1 phy_tx_polarity_flip_fabric67.BCM8879X=0 -phy_tx_polarity_flip_fabric68.BCM8879X=1 -phy_tx_polarity_flip_fabric69.BCM8879X=0 -phy_tx_polarity_flip_fabric70.BCM8879X=1 -phy_tx_polarity_flip_fabric71.BCM8879X=0 +phy_tx_polarity_flip_fabric68.BCM8879X=0 +phy_tx_polarity_flip_fabric69.BCM8879X=1 +phy_tx_polarity_flip_fabric70.BCM8879X=0 +phy_tx_polarity_flip_fabric71.BCM8879X=1 -phy_tx_polarity_flip_fabric72.BCM8879X=1 +phy_tx_polarity_flip_fabric72.BCM8879X=0 phy_tx_polarity_flip_fabric73.BCM8879X=1 phy_tx_polarity_flip_fabric74.BCM8879X=0 -phy_tx_polarity_flip_fabric75.BCM8879X=0 +phy_tx_polarity_flip_fabric75.BCM8879X=1 phy_tx_polarity_flip_fabric76.BCM8879X=1 -phy_tx_polarity_flip_fabric77.BCM8879X=1 -phy_tx_polarity_flip_fabric78.BCM8879X=0 +phy_tx_polarity_flip_fabric77.BCM8879X=0 +phy_tx_polarity_flip_fabric78.BCM8879X=1 phy_tx_polarity_flip_fabric79.BCM8879X=0 -phy_tx_polarity_flip_fabric80.BCM8879X=1 +phy_tx_polarity_flip_fabric80.BCM8879X=0 phy_tx_polarity_flip_fabric81.BCM8879X=1 phy_tx_polarity_flip_fabric82.BCM8879X=0 -phy_tx_polarity_flip_fabric83.BCM8879X=0 +phy_tx_polarity_flip_fabric83.BCM8879X=1 phy_tx_polarity_flip_fabric84.BCM8879X=1 phy_tx_polarity_flip_fabric85.BCM8879X=0 @@ -634,32 +636,32 @@ phy_tx_polarity_flip_fabric86.BCM8879X=1 phy_tx_polarity_flip_fabric87.BCM8879X=0 phy_tx_polarity_flip_fabric88.BCM8879X=0 -phy_tx_polarity_flip_fabric89.BCM8879X=0 -phy_tx_polarity_flip_fabric90.BCM8879X=1 +phy_tx_polarity_flip_fabric89.BCM8879X=1 +phy_tx_polarity_flip_fabric90.BCM8879X=0 phy_tx_polarity_flip_fabric91.BCM8879X=1 phy_tx_polarity_flip_fabric92.BCM8879X=0 phy_tx_polarity_flip_fabric93.BCM8879X=1 -phy_tx_polarity_flip_fabric94.BCM8879X=1 -phy_tx_polarity_flip_fabric95.BCM8879X=0 +phy_tx_polarity_flip_fabric94.BCM8879X=0 +phy_tx_polarity_flip_fabric95.BCM8879X=1 phy_tx_polarity_flip_fabric96.BCM8879X=1 -phy_tx_polarity_flip_fabric97.BCM8879X=1 -phy_tx_polarity_flip_fabric98.BCM8879X=0 +phy_tx_polarity_flip_fabric97.BCM8879X=0 +phy_tx_polarity_flip_fabric98.BCM8879X=1 phy_tx_polarity_flip_fabric99.BCM8879X=0 phy_tx_polarity_flip_fabric100.BCM8879X=0 -phy_tx_polarity_flip_fabric101.BCM8879X=0 +phy_tx_polarity_flip_fabric101.BCM8879X=1 phy_tx_polarity_flip_fabric102.BCM8879X=0 -phy_tx_polarity_flip_fabric103.BCM8879X=0 +phy_tx_polarity_flip_fabric103.BCM8879X=1 phy_tx_polarity_flip_fabric104.BCM8879X=1 phy_tx_polarity_flip_fabric105.BCM8879X=0 -phy_tx_polarity_flip_fabric106.BCM8879X=0 -phy_tx_polarity_flip_fabric107.BCM8879X=1 +phy_tx_polarity_flip_fabric106.BCM8879X=1 +phy_tx_polarity_flip_fabric107.BCM8879X=0 -phy_tx_polarity_flip_fabric108.BCM8879X=0 -phy_tx_polarity_flip_fabric109.BCM8879X=1 +phy_tx_polarity_flip_fabric108.BCM8879X=1 +phy_tx_polarity_flip_fabric109.BCM8879X=0 phy_tx_polarity_flip_fabric110.BCM8879X=1 phy_tx_polarity_flip_fabric111.BCM8879X=0 @@ -668,35 +670,35 @@ phy_tx_polarity_flip_fabric113.BCM8879X=1 phy_tx_polarity_flip_fabric114.BCM8879X=0 phy_tx_polarity_flip_fabric115.BCM8879X=1 -phy_tx_polarity_flip_fabric116.BCM8879X=0 -phy_tx_polarity_flip_fabric117.BCM8879X=1 -phy_tx_polarity_flip_fabric118.BCM8879X=0 -phy_tx_polarity_flip_fabric119.BCM8879X=1 +phy_tx_polarity_flip_fabric116.BCM8879X=1 +phy_tx_polarity_flip_fabric117.BCM8879X=0 +phy_tx_polarity_flip_fabric118.BCM8879X=1 +phy_tx_polarity_flip_fabric119.BCM8879X=0 -phy_tx_polarity_flip_fabric120.BCM8879X=1 -phy_tx_polarity_flip_fabric121.BCM8879X=0 -phy_tx_polarity_flip_fabric122.BCM8879X=1 -phy_tx_polarity_flip_fabric123.BCM8879X=0 +phy_tx_polarity_flip_fabric120.BCM8879X=0 +phy_tx_polarity_flip_fabric121.BCM8879X=1 +phy_tx_polarity_flip_fabric122.BCM8879X=0 +phy_tx_polarity_flip_fabric123.BCM8879X=1 -phy_tx_polarity_flip_fabric124.BCM8879X=1 -phy_tx_polarity_flip_fabric125.BCM8879X=0 -phy_tx_polarity_flip_fabric126.BCM8879X=1 -phy_tx_polarity_flip_fabric127.BCM8879X=0 +phy_tx_polarity_flip_fabric124.BCM8879X=0 +phy_tx_polarity_flip_fabric125.BCM8879X=1 +phy_tx_polarity_flip_fabric126.BCM8879X=0 +phy_tx_polarity_flip_fabric127.BCM8879X=1 -phy_tx_polarity_flip_fabric128.BCM8879X=0 -phy_tx_polarity_flip_fabric129.BCM8879X=1 -phy_tx_polarity_flip_fabric130.BCM8879X=0 -phy_tx_polarity_flip_fabric131.BCM8879X=1 +phy_tx_polarity_flip_fabric128.BCM8879X=1 +phy_tx_polarity_flip_fabric129.BCM8879X=0 +phy_tx_polarity_flip_fabric130.BCM8879X=1 +phy_tx_polarity_flip_fabric131.BCM8879X=0 phy_tx_polarity_flip_fabric132.BCM8879X=0 phy_tx_polarity_flip_fabric133.BCM8879X=1 phy_tx_polarity_flip_fabric134.BCM8879X=0 phy_tx_polarity_flip_fabric135.BCM8879X=1 -phy_tx_polarity_flip_fabric136.BCM8879X=0 +phy_tx_polarity_flip_fabric136.BCM8879X=1 phy_tx_polarity_flip_fabric137.BCM8879X=0 phy_tx_polarity_flip_fabric138.BCM8879X=1 -phy_tx_polarity_flip_fabric139.BCM8879X=1 +phy_tx_polarity_flip_fabric139.BCM8879X=0 phy_tx_polarity_flip_fabric140.BCM8879X=0 phy_tx_polarity_flip_fabric141.BCM8879X=1 @@ -704,39 +706,39 @@ phy_tx_polarity_flip_fabric142.BCM8879X=0 phy_tx_polarity_flip_fabric143.BCM8879X=1 phy_tx_polarity_flip_fabric144.BCM8879X=0 -phy_tx_polarity_flip_fabric145.BCM8879X=0 -phy_tx_polarity_flip_fabric146.BCM8879X=1 +phy_tx_polarity_flip_fabric145.BCM8879X=1 +phy_tx_polarity_flip_fabric146.BCM8879X=0 phy_tx_polarity_flip_fabric147.BCM8879X=1 -phy_tx_polarity_flip_fabric148.BCM8879X=0 -phy_tx_polarity_flip_fabric149.BCM8879X=1 -phy_tx_polarity_flip_fabric150.BCM8879X=0 -phy_tx_polarity_flip_fabric151.BCM8879X=1 +phy_tx_polarity_flip_fabric148.BCM8879X=1 +phy_tx_polarity_flip_fabric149.BCM8879X=0 +phy_tx_polarity_flip_fabric150.BCM8879X=1 +phy_tx_polarity_flip_fabric151.BCM8879X=0 phy_tx_polarity_flip_fabric152.BCM8879X=0 phy_tx_polarity_flip_fabric153.BCM8879X=1 phy_tx_polarity_flip_fabric154.BCM8879X=0 phy_tx_polarity_flip_fabric155.BCM8879X=1 -phy_tx_polarity_flip_fabric156.BCM8879X=0 +phy_tx_polarity_flip_fabric156.BCM8879X=1 phy_tx_polarity_flip_fabric157.BCM8879X=0 -phy_tx_polarity_flip_fabric158.BCM8879X=0 +phy_tx_polarity_flip_fabric158.BCM8879X=1 phy_tx_polarity_flip_fabric159.BCM8879X=0 -phy_tx_polarity_flip_fabric160.BCM8879X=1 +phy_tx_polarity_flip_fabric160.BCM8879X=0 phy_tx_polarity_flip_fabric161.BCM8879X=1 phy_tx_polarity_flip_fabric162.BCM8879X=0 -phy_tx_polarity_flip_fabric163.BCM8879X=0 +phy_tx_polarity_flip_fabric163.BCM8879X=1 phy_tx_polarity_flip_fabric164.BCM8879X=0 -phy_tx_polarity_flip_fabric165.BCM8879X=0 +phy_tx_polarity_flip_fabric165.BCM8879X=1 phy_tx_polarity_flip_fabric166.BCM8879X=0 -phy_tx_polarity_flip_fabric167.BCM8879X=0 +phy_tx_polarity_flip_fabric167.BCM8879X=1 -phy_tx_polarity_flip_fabric168.BCM8879X=1 +phy_tx_polarity_flip_fabric168.BCM8879X=0 phy_tx_polarity_flip_fabric169.BCM8879X=1 phy_tx_polarity_flip_fabric170.BCM8879X=0 -phy_tx_polarity_flip_fabric171.BCM8879X=0 +phy_tx_polarity_flip_fabric171.BCM8879X=1 phy_tx_polarity_flip_fabric172.BCM8879X=1 phy_tx_polarity_flip_fabric173.BCM8879X=0 @@ -744,25 +746,410 @@ phy_tx_polarity_flip_fabric174.BCM8879X=1 phy_tx_polarity_flip_fabric175.BCM8879X=0 phy_tx_polarity_flip_fabric176.BCM8879X=0 -phy_tx_polarity_flip_fabric177.BCM8879X=0 -phy_tx_polarity_flip_fabric178.BCM8879X=1 +phy_tx_polarity_flip_fabric177.BCM8879X=1 +phy_tx_polarity_flip_fabric178.BCM8879X=0 phy_tx_polarity_flip_fabric179.BCM8879X=1 -phy_tx_polarity_flip_fabric180.BCM8879X=0 +phy_tx_polarity_flip_fabric180.BCM8879X=1 phy_tx_polarity_flip_fabric181.BCM8879X=0 -phy_tx_polarity_flip_fabric182.BCM8879X=0 +phy_tx_polarity_flip_fabric182.BCM8879X=1 phy_tx_polarity_flip_fabric183.BCM8879X=0 -phy_tx_polarity_flip_fabric184.BCM8879X=1 -phy_tx_polarity_flip_fabric185.BCM8879X=0 -phy_tx_polarity_flip_fabric186.BCM8879X=1 -phy_tx_polarity_flip_fabric187.BCM8879X=0 +phy_tx_polarity_flip_fabric184.BCM8879X=0 +phy_tx_polarity_flip_fabric185.BCM8879X=1 +phy_tx_polarity_flip_fabric186.BCM8879X=0 +phy_tx_polarity_flip_fabric187.BCM8879X=1 -phy_tx_polarity_flip_fabric188.BCM8879X=1 -phy_tx_polarity_flip_fabric189.BCM8879X=0 +phy_tx_polarity_flip_fabric188.BCM8879X=0 +phy_tx_polarity_flip_fabric189.BCM8879X=1 phy_tx_polarity_flip_fabric190.BCM8879X=0 phy_tx_polarity_flip_fabric191.BCM8879X=1 +port_init_cl72_0=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 +port_init_cl72_19=0 +port_init_cl72_20=0 +port_init_cl72_21=0 +port_init_cl72_22=0 +port_init_cl72_23=0 +port_init_cl72_24=0 +port_init_cl72_25=0 +port_init_cl72_26=0 +port_init_cl72_27=0 +port_init_cl72_28=0 +port_init_cl72_29=0 +port_init_cl72_30=0 +port_init_cl72_31=0 +port_init_cl72_32=0 +port_init_cl72_33=0 +port_init_cl72_34=0 +port_init_cl72_35=0 +port_init_cl72_36=0 +port_init_cl72_37=0 +port_init_cl72_38=0 +port_init_cl72_39=0 +port_init_cl72_40=0 +port_init_cl72_41=0 +port_init_cl72_42=0 +port_init_cl72_43=0 +port_init_cl72_44=0 +port_init_cl72_45=0 +port_init_cl72_46=0 +port_init_cl72_47=0 +port_init_cl72_48=0 +port_init_cl72_49=0 +port_init_cl72_50=0 +port_init_cl72_51=0 +port_init_cl72_52=0 +port_init_cl72_53=0 +port_init_cl72_54=0 +port_init_cl72_55=0 +port_init_cl72_56=0 +port_init_cl72_57=0 +port_init_cl72_58=0 +port_init_cl72_59=0 +port_init_cl72_60=0 +port_init_cl72_61=0 +port_init_cl72_62=0 +port_init_cl72_63=0 +port_init_cl72_64=0 +port_init_cl72_65=0 +port_init_cl72_66=0 +port_init_cl72_67=0 +port_init_cl72_68=0 +port_init_cl72_69=0 +port_init_cl72_70=0 +port_init_cl72_71=0 +port_init_cl72_72=0 +port_init_cl72_73=0 +port_init_cl72_74=0 +port_init_cl72_75=0 +port_init_cl72_76=0 +port_init_cl72_77=0 +port_init_cl72_78=0 +port_init_cl72_79=0 +port_init_cl72_80=0 +port_init_cl72_81=0 +port_init_cl72_82=0 +port_init_cl72_83=0 +port_init_cl72_84=0 +port_init_cl72_85=0 +port_init_cl72_86=0 +port_init_cl72_87=0 +port_init_cl72_88=0 +port_init_cl72_89=0 +port_init_cl72_90=0 +port_init_cl72_91=0 +port_init_cl72_92=0 +port_init_cl72_93=0 +port_init_cl72_94=0 +port_init_cl72_95=0 +port_init_cl72_96=0 +port_init_cl72_97=0 +port_init_cl72_98=0 +port_init_cl72_99=0 +port_init_cl72_100=0 +port_init_cl72_101=0 +port_init_cl72_102=0 +port_init_cl72_103=0 +port_init_cl72_104=0 +port_init_cl72_105=0 +port_init_cl72_106=0 +port_init_cl72_107=0 +port_init_cl72_108=0 +port_init_cl72_109=0 +port_init_cl72_110=0 +port_init_cl72_111=0 +port_init_cl72_112=0 +port_init_cl72_113=0 +port_init_cl72_114=0 +port_init_cl72_115=0 +port_init_cl72_116=0 +port_init_cl72_117=0 +port_init_cl72_118=0 +port_init_cl72_119=0 +port_init_cl72_120=0 +port_init_cl72_121=0 +port_init_cl72_122=0 +port_init_cl72_123=0 +port_init_cl72_124=0 +port_init_cl72_125=0 +port_init_cl72_126=0 +port_init_cl72_127=0 +port_init_cl72_128=0 +port_init_cl72_129=0 +port_init_cl72_130=0 +port_init_cl72_131=0 +port_init_cl72_132=0 +port_init_cl72_133=0 +port_init_cl72_134=0 +port_init_cl72_135=0 +port_init_cl72_136=0 +port_init_cl72_137=0 +port_init_cl72_138=0 +port_init_cl72_139=0 +port_init_cl72_140=0 +port_init_cl72_141=0 +port_init_cl72_142=0 +port_init_cl72_143=0 +port_init_cl72_144=0 +port_init_cl72_145=0 +port_init_cl72_146=0 +port_init_cl72_147=0 +port_init_cl72_148=0 +port_init_cl72_149=0 +port_init_cl72_150=0 +port_init_cl72_151=0 +port_init_cl72_152=0 +port_init_cl72_153=0 +port_init_cl72_154=0 +port_init_cl72_155=0 +port_init_cl72_156=0 +port_init_cl72_157=0 +port_init_cl72_158=0 +port_init_cl72_159=0 +port_init_cl72_160=0 +port_init_cl72_161=0 +port_init_cl72_162=0 +port_init_cl72_163=0 +port_init_cl72_164=0 +port_init_cl72_165=0 +port_init_cl72_166=0 +port_init_cl72_167=0 +port_init_cl72_168=0 +port_init_cl72_169=0 +port_init_cl72_170=0 +port_init_cl72_171=0 +port_init_cl72_172=0 +port_init_cl72_173=0 +port_init_cl72_174=0 +port_init_cl72_175=0 +port_init_cl72_176=0 +port_init_cl72_177=0 +port_init_cl72_178=0 +port_init_cl72_179=0 +port_init_cl72_180=0 +port_init_cl72_181=0 +port_init_cl72_182=0 +port_init_cl72_183=0 +port_init_cl72_184=0 +port_init_cl72_185=0 +port_init_cl72_186=0 +port_init_cl72_187=0 +port_init_cl72_188=0 +port_init_cl72_189=0 +port_init_cl72_190=0 +port_init_cl72_191=0 + +serdes_tx_taps_0.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_1.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_2.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_3.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_4.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_5.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_6.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_7.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_8.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_9.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_10.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_11.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_12.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_13.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_14.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_15.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_16.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_17.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_18.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_19.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_20.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_21.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_22.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_23.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_24.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_25.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_26.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_27.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_28.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_29.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_30.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_31.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_32.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_33.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_34.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_35.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_36.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_37.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_38.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_39.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_40.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_41.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_42.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_43.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_44.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_45.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_46.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_47.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_48.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_49.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_50.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_51.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_52.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_53.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_54.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_55.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_56.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_57.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_58.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_59.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_60.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_61.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_62.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_63.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_64.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_65.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_66.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_67.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_68.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_69.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_70.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_71.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_72.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_73.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_74.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_75.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_76.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_77.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_78.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_79.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_80.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_81.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_82.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_83.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_84.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_85.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_86.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_87.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_88.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_89.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_90.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_91.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_92.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_93.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_94.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_95.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_96.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_97.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_98.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_99.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_100.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_101.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_102.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_103.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_104.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_105.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_106.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_107.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_108.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_109.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_110.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_111.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_112.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_113.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_114.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_115.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_116.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_117.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_118.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_119.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_120.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_121.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_122.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_123.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_124.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_125.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_126.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_127.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_128.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_129.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_130.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_131.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_132.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_133.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_134.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_135.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_136.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_137.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_138.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_139.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_140.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_141.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_142.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_143.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_144.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_145.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_146.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_147.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_148.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_149.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_150.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_151.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_152.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_153.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_154.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_155.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_156.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_157.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_158.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_159.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_160.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_161.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_162.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_163.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_164.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_165.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_166.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_167.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_168.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_169.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_170.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_171.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_172.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_173.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_174.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_175.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_176.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_177.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_178.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_179.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_180.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_181.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_182.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_183.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_184.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_185.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_186.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_187.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_188.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_189.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_190.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_191.BCM8879X=pam4:-24:132:-12:0:0:0 serdes_lane_config_channel_mode_0.0=force_nr serdes_lane_config_channel_mode_1.0=force_nr diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/14/config-ramon-8-0.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/14/config-ramon-8-0.bcm index c953b7f575a6..ba21d010fa47 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/14/config-ramon-8-0.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/14/config-ramon-8-0.bcm @@ -1,7 +1,8 @@ + appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=15 bcm_linkscan_interval.BCM8879X=0 -bcm_stat_interval.BCM8879X=0 +bcm_stat_interval.BCM8879X=4000000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 @@ -20,10 +21,10 @@ mdio_output_delay_int.BCM8879X=25 mem_cache_enable_parity.BCM8879X=1 mm_intr_enable.BCM8879X=0 mm_timeout_usec.BCM8879X=300000 -polled_irq_delay.BCM8879X=500000 +polled_irq_delay.BCM8879X=100000 polled_irq_mode.BCM8879X=1 port_fec.BCM8879X=7 -port_init_cl72.BCM8879X=1 +port_init_cl72.BCM8879X=0 port_init_speed.BCM8879X=53125 rate_ext_mdio_divisor.BCM8879X=14 rate_int_mdio_divisor.BCM8879X=50 @@ -42,134 +43,134 @@ tslam_dma_enable.BCM8879X=0 tslam_intr_enable.BCM8879X=0 tslam_timeout_usec.BCM8879X=5000000 -lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx1 -lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx3 +lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx1 lane_to_serdes_map_fabric_lane2.BCM8879X=rx2:tx2 -lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx0 +lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx3 -lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx6 +lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx4 lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx5 -lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx7 -lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx4 +lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx7 -lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx10 -lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx8 -lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx11 -lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx9 +lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx11 -lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx13 -lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx15 +lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx13 lane_to_serdes_map_fabric_lane14.BCM8879X=rx14:tx14 -lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx12 +lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx15 -lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx18 -lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx16 -lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx19 -lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx17 +lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx18 +lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx19 lane_to_serdes_map_fabric_lane20.BCM8879X=rx20:tx20 -lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx22 -lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx23 -lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx21 +lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx23 lane_to_serdes_map_fabric_lane24.BCM8879X=rx24:tx24 -lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx26 -lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx27 -lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx25 +lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx26 +lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx27 -lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx29 -lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx30 -lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx28 +lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx29 +lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx30 lane_to_serdes_map_fabric_lane31.BCM8879X=rx31:tx31 -lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx34 -lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx32 -lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx35 -lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx33 +lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx35 lane_to_serdes_map_fabric_lane36.BCM8879X=rx36:tx36 -lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx38 -lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx39 -lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx37 +lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx39 -lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx43 -lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx42 -lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx40 -lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx41 +lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx40 +lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx41 +lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx42 +lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx43 lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx44 -lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx46 -lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx47 -lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx45 +lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx46 +lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx47 -lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx49 -lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx50 -lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx51 -lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx48 +lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx51 -lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx54 +lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx52 lane_to_serdes_map_fabric_lane53.BCM8879X=rx53:tx53 -lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx55 -lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx52 +lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx55 -lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx58 +lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx56 lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx57 -lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx59 -lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx56 +lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx58 +lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx59 -lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx61 -lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx60 +lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx60 +lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx61 lane_to_serdes_map_fabric_lane62.BCM8879X=rx62:tx62 lane_to_serdes_map_fabric_lane63.BCM8879X=rx63:tx63 lane_to_serdes_map_fabric_lane64.BCM8879X=rx64:tx64 -lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx66 -lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx65 +lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx66 lane_to_serdes_map_fabric_lane67.BCM8879X=rx67:tx67 -lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx69 -lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx70 -lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx71 -lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx68 +lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx71 -lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx74 -lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx72 -lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx75 -lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx73 +lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx72 +lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx75 -lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx78 -lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx76 -lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx79 -lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx77 +lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx76 +lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx77 +lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx78 +lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx79 lane_to_serdes_map_fabric_lane80.BCM8879X=rx80:tx80 -lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx82 -lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx83 -lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx81 +lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx82 +lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx83 -lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx85 -lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx86 -lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx87 -lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx84 +lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx87 -lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx90 -lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx88 -lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx91 -lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx89 +lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx89 +lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx90 +lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx91 -lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx95 -lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx94 -lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx92 -lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx93 +lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx92 +lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx94 +lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx95 lane_to_serdes_map_fabric_lane96.BCM8879X=rx96:tx96 -lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx98 -lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx97 +lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx98 lane_to_serdes_map_fabric_lane99.BCM8879X=rx99:tx99 -lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx101 -lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx102 -lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx100 +lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx102 lane_to_serdes_map_fabric_lane103.BCM8879X=rx103:tx103 lane_to_serdes_map_fabric_lane104.BCM8879X=rx104:tx104 @@ -182,10 +183,10 @@ lane_to_serdes_map_fabric_lane109.BCM8879X=rx109:tx109 lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx110 lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx111 -lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx115 -lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx114 -lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx113 -lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx112 +lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx112 +lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx114 +lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx115 lane_to_serdes_map_fabric_lane116.BCM8879X=rx116:tx116 lane_to_serdes_map_fabric_lane117.BCM8879X=rx117:tx117 @@ -197,15 +198,15 @@ lane_to_serdes_map_fabric_lane121.BCM8879X=rx121:tx121 lane_to_serdes_map_fabric_lane122.BCM8879X=rx122:tx122 lane_to_serdes_map_fabric_lane123.BCM8879X=rx123:tx123 -lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx127 -lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx126 -lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx124 -lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx125 +lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx127 -lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx131 -lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx130 -lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx129 -lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx128 +lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx131 lane_to_serdes_map_fabric_lane132.BCM8879X=rx132:tx132 lane_to_serdes_map_fabric_lane133.BCM8879X=rx133:tx133 @@ -213,23 +214,23 @@ lane_to_serdes_map_fabric_lane134.BCM8879X=rx134:tx134 lane_to_serdes_map_fabric_lane135.BCM8879X=rx135:tx135 lane_to_serdes_map_fabric_lane136.BCM8879X=rx136:tx136 -lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx138 -lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx137 +lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx137 +lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx138 lane_to_serdes_map_fabric_lane139.BCM8879X=rx139:tx139 -lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx143 -lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx142 -lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx141 -lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx140 +lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx140 +lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx143 -lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx145 -lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx147 -lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx144 -lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx146 +lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx147 -lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx150 +lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx148 lane_to_serdes_map_fabric_lane149.BCM8879X=rx149:tx149 -lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx148 +lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx150 lane_to_serdes_map_fabric_lane151.BCM8879X=rx151:tx151 lane_to_serdes_map_fabric_lane152.BCM8879X=rx152:tx152 @@ -237,91 +238,91 @@ lane_to_serdes_map_fabric_lane153.BCM8879X=rx153:tx153 lane_to_serdes_map_fabric_lane154.BCM8879X=rx154:tx154 lane_to_serdes_map_fabric_lane155.BCM8879X=rx155:tx155 -lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx157 -lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx159 -lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx156 -lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx158 +lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx156 +lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx157 +lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx158 +lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx159 lane_to_serdes_map_fabric_lane160.BCM8879X=rx160:tx160 -lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx162 -lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx161 +lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx162 lane_to_serdes_map_fabric_lane163.BCM8879X=rx163:tx163 -lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx166 -lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx164 -lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx165 +lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx166 lane_to_serdes_map_fabric_lane167.BCM8879X=rx167:tx167 -lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx170 -lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx168 -lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx169 +lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx168 +lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx170 lane_to_serdes_map_fabric_lane171.BCM8879X=rx171:tx171 -lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx173 -lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx174 -lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx175 -lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx172 +lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx172 +lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx173 +lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx174 +lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx175 lane_to_serdes_map_fabric_lane176.BCM8879X=rx176:tx176 -lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx178 -lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx177 +lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx178 lane_to_serdes_map_fabric_lane179.BCM8879X=rx179:tx179 -lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx182 -lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx180 -lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx181 +lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx180 +lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx182 lane_to_serdes_map_fabric_lane183.BCM8879X=rx183:tx183 -lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx187 -lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx184 +lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx185 lane_to_serdes_map_fabric_lane186.BCM8879X=rx186:tx186 -lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx185 +lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx187 -lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx190 +lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx188 lane_to_serdes_map_fabric_lane189.BCM8879X=rx189:tx189 -lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx191 -lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx188 +lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx190 +lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx191 -phy_rx_polarity_flip_fabric0.BCM8879X=0 -phy_rx_polarity_flip_fabric1.BCM8879X=1 -phy_rx_polarity_flip_fabric2.BCM8879X=0 -phy_rx_polarity_flip_fabric3.BCM8879X=1 +phy_rx_polarity_flip_fabric0.BCM8879X=1 +phy_rx_polarity_flip_fabric1.BCM8879X=0 +phy_rx_polarity_flip_fabric2.BCM8879X=1 +phy_rx_polarity_flip_fabric3.BCM8879X=0 -phy_rx_polarity_flip_fabric4.BCM8879X=1 -phy_rx_polarity_flip_fabric5.BCM8879X=0 -phy_rx_polarity_flip_fabric6.BCM8879X=1 -phy_rx_polarity_flip_fabric7.BCM8879X=0 +phy_rx_polarity_flip_fabric4.BCM8879X=0 +phy_rx_polarity_flip_fabric5.BCM8879X=1 +phy_rx_polarity_flip_fabric6.BCM8879X=0 +phy_rx_polarity_flip_fabric7.BCM8879X=1 phy_rx_polarity_flip_fabric8.BCM8879X=1 phy_rx_polarity_flip_fabric9.BCM8879X=0 phy_rx_polarity_flip_fabric10.BCM8879X=1 phy_rx_polarity_flip_fabric11.BCM8879X=0 -phy_rx_polarity_flip_fabric12.BCM8879X=1 -phy_rx_polarity_flip_fabric13.BCM8879X=0 +phy_rx_polarity_flip_fabric12.BCM8879X=0 +phy_rx_polarity_flip_fabric13.BCM8879X=1 phy_rx_polarity_flip_fabric14.BCM8879X=0 phy_rx_polarity_flip_fabric15.BCM8879X=1 -phy_rx_polarity_flip_fabric16.BCM8879X=0 -phy_rx_polarity_flip_fabric17.BCM8879X=1 -phy_rx_polarity_flip_fabric18.BCM8879X=0 -phy_rx_polarity_flip_fabric19.BCM8879X=1 +phy_rx_polarity_flip_fabric16.BCM8879X=1 +phy_rx_polarity_flip_fabric17.BCM8879X=0 +phy_rx_polarity_flip_fabric18.BCM8879X=1 +phy_rx_polarity_flip_fabric19.BCM8879X=0 -phy_rx_polarity_flip_fabric20.BCM8879X=0 -phy_rx_polarity_flip_fabric21.BCM8879X=1 +phy_rx_polarity_flip_fabric20.BCM8879X=1 +phy_rx_polarity_flip_fabric21.BCM8879X=0 phy_rx_polarity_flip_fabric22.BCM8879X=1 phy_rx_polarity_flip_fabric23.BCM8879X=0 -phy_rx_polarity_flip_fabric24.BCM8879X=0 -phy_rx_polarity_flip_fabric25.BCM8879X=1 -phy_rx_polarity_flip_fabric26.BCM8879X=0 -phy_rx_polarity_flip_fabric27.BCM8879X=1 +phy_rx_polarity_flip_fabric24.BCM8879X=1 +phy_rx_polarity_flip_fabric25.BCM8879X=0 +phy_rx_polarity_flip_fabric26.BCM8879X=1 +phy_rx_polarity_flip_fabric27.BCM8879X=0 -phy_rx_polarity_flip_fabric28.BCM8879X=1 -phy_rx_polarity_flip_fabric29.BCM8879X=0 -phy_rx_polarity_flip_fabric30.BCM8879X=1 -phy_rx_polarity_flip_fabric31.BCM8879X=0 +phy_rx_polarity_flip_fabric28.BCM8879X=0 +phy_rx_polarity_flip_fabric29.BCM8879X=1 +phy_rx_polarity_flip_fabric30.BCM8879X=0 +phy_rx_polarity_flip_fabric31.BCM8879X=1 phy_rx_polarity_flip_fabric32.BCM8879X=1 phy_rx_polarity_flip_fabric33.BCM8879X=0 @@ -330,11 +331,11 @@ phy_rx_polarity_flip_fabric35.BCM8879X=0 phy_rx_polarity_flip_fabric36.BCM8879X=0 phy_rx_polarity_flip_fabric37.BCM8879X=1 -phy_rx_polarity_flip_fabric38.BCM8879X=1 -phy_rx_polarity_flip_fabric39.BCM8879X=0 +phy_rx_polarity_flip_fabric38.BCM8879X=0 +phy_rx_polarity_flip_fabric39.BCM8879X=1 -phy_rx_polarity_flip_fabric40.BCM8879X=0 -phy_rx_polarity_flip_fabric41.BCM8879X=1 +phy_rx_polarity_flip_fabric40.BCM8879X=1 +phy_rx_polarity_flip_fabric41.BCM8879X=0 phy_rx_polarity_flip_fabric42.BCM8879X=1 phy_rx_polarity_flip_fabric43.BCM8879X=0 @@ -350,63 +351,63 @@ phy_rx_polarity_flip_fabric51.BCM8879X=1 phy_rx_polarity_flip_fabric52.BCM8879X=1 phy_rx_polarity_flip_fabric53.BCM8879X=0 -phy_rx_polarity_flip_fabric54.BCM8879X=0 -phy_rx_polarity_flip_fabric55.BCM8879X=1 +phy_rx_polarity_flip_fabric54.BCM8879X=1 +phy_rx_polarity_flip_fabric55.BCM8879X=0 -phy_rx_polarity_flip_fabric56.BCM8879X=1 -phy_rx_polarity_flip_fabric57.BCM8879X=0 +phy_rx_polarity_flip_fabric56.BCM8879X=0 +phy_rx_polarity_flip_fabric57.BCM8879X=1 phy_rx_polarity_flip_fabric58.BCM8879X=0 phy_rx_polarity_flip_fabric59.BCM8879X=1 -phy_rx_polarity_flip_fabric60.BCM8879X=1 -phy_rx_polarity_flip_fabric61.BCM8879X=0 -phy_rx_polarity_flip_fabric62.BCM8879X=1 -phy_rx_polarity_flip_fabric63.BCM8879X=0 +phy_rx_polarity_flip_fabric60.BCM8879X=0 +phy_rx_polarity_flip_fabric61.BCM8879X=1 +phy_rx_polarity_flip_fabric62.BCM8879X=0 +phy_rx_polarity_flip_fabric63.BCM8879X=1 -phy_rx_polarity_flip_fabric64.BCM8879X=0 -phy_rx_polarity_flip_fabric65.BCM8879X=1 -phy_rx_polarity_flip_fabric66.BCM8879X=0 -phy_rx_polarity_flip_fabric67.BCM8879X=1 +phy_rx_polarity_flip_fabric64.BCM8879X=1 +phy_rx_polarity_flip_fabric65.BCM8879X=0 +phy_rx_polarity_flip_fabric66.BCM8879X=1 +phy_rx_polarity_flip_fabric67.BCM8879X=0 -phy_rx_polarity_flip_fabric68.BCM8879X=1 -phy_rx_polarity_flip_fabric69.BCM8879X=0 -phy_rx_polarity_flip_fabric70.BCM8879X=1 -phy_rx_polarity_flip_fabric71.BCM8879X=0 +phy_rx_polarity_flip_fabric68.BCM8879X=0 +phy_rx_polarity_flip_fabric69.BCM8879X=1 +phy_rx_polarity_flip_fabric70.BCM8879X=0 +phy_rx_polarity_flip_fabric71.BCM8879X=1 -phy_rx_polarity_flip_fabric72.BCM8879X=0 -phy_rx_polarity_flip_fabric73.BCM8879X=1 -phy_rx_polarity_flip_fabric74.BCM8879X=0 -phy_rx_polarity_flip_fabric75.BCM8879X=1 +phy_rx_polarity_flip_fabric72.BCM8879X=1 +phy_rx_polarity_flip_fabric73.BCM8879X=0 +phy_rx_polarity_flip_fabric74.BCM8879X=1 +phy_rx_polarity_flip_fabric75.BCM8879X=0 -phy_rx_polarity_flip_fabric76.BCM8879X=0 -phy_rx_polarity_flip_fabric77.BCM8879X=1 +phy_rx_polarity_flip_fabric76.BCM8879X=1 +phy_rx_polarity_flip_fabric77.BCM8879X=0 phy_rx_polarity_flip_fabric78.BCM8879X=1 phy_rx_polarity_flip_fabric79.BCM8879X=0 phy_rx_polarity_flip_fabric80.BCM8879X=0 phy_rx_polarity_flip_fabric81.BCM8879X=1 -phy_rx_polarity_flip_fabric82.BCM8879X=1 -phy_rx_polarity_flip_fabric83.BCM8879X=0 +phy_rx_polarity_flip_fabric82.BCM8879X=0 +phy_rx_polarity_flip_fabric83.BCM8879X=1 phy_rx_polarity_flip_fabric84.BCM8879X=1 phy_rx_polarity_flip_fabric85.BCM8879X=0 phy_rx_polarity_flip_fabric86.BCM8879X=1 phy_rx_polarity_flip_fabric87.BCM8879X=0 -phy_rx_polarity_flip_fabric88.BCM8879X=1 -phy_rx_polarity_flip_fabric89.BCM8879X=0 -phy_rx_polarity_flip_fabric90.BCM8879X=1 -phy_rx_polarity_flip_fabric91.BCM8879X=0 +phy_rx_polarity_flip_fabric88.BCM8879X=0 +phy_rx_polarity_flip_fabric89.BCM8879X=1 +phy_rx_polarity_flip_fabric90.BCM8879X=0 +phy_rx_polarity_flip_fabric91.BCM8879X=1 -phy_rx_polarity_flip_fabric92.BCM8879X=0 -phy_rx_polarity_flip_fabric93.BCM8879X=1 -phy_rx_polarity_flip_fabric94.BCM8879X=0 -phy_rx_polarity_flip_fabric95.BCM8879X=1 +phy_rx_polarity_flip_fabric92.BCM8879X=1 +phy_rx_polarity_flip_fabric93.BCM8879X=0 +phy_rx_polarity_flip_fabric94.BCM8879X=1 +phy_rx_polarity_flip_fabric95.BCM8879X=0 -phy_rx_polarity_flip_fabric96.BCM8879X=0 -phy_rx_polarity_flip_fabric97.BCM8879X=1 -phy_rx_polarity_flip_fabric98.BCM8879X=0 -phy_rx_polarity_flip_fabric99.BCM8879X=1 +phy_rx_polarity_flip_fabric96.BCM8879X=1 +phy_rx_polarity_flip_fabric97.BCM8879X=0 +phy_rx_polarity_flip_fabric98.BCM8879X=1 +phy_rx_polarity_flip_fabric99.BCM8879X=0 phy_rx_polarity_flip_fabric100.BCM8879X=0 phy_rx_polarity_flip_fabric101.BCM8879X=1 @@ -418,10 +419,10 @@ phy_rx_polarity_flip_fabric105.BCM8879X=1 phy_rx_polarity_flip_fabric106.BCM8879X=0 phy_rx_polarity_flip_fabric107.BCM8879X=1 -phy_rx_polarity_flip_fabric108.BCM8879X=1 -phy_rx_polarity_flip_fabric109.BCM8879X=0 -phy_rx_polarity_flip_fabric110.BCM8879X=1 -phy_rx_polarity_flip_fabric111.BCM8879X=0 +phy_rx_polarity_flip_fabric108.BCM8879X=0 +phy_rx_polarity_flip_fabric109.BCM8879X=1 +phy_rx_polarity_flip_fabric110.BCM8879X=0 +phy_rx_polarity_flip_fabric111.BCM8879X=1 phy_rx_polarity_flip_fabric112.BCM8879X=0 phy_rx_polarity_flip_fabric113.BCM8879X=1 @@ -433,223 +434,223 @@ phy_rx_polarity_flip_fabric117.BCM8879X=0 phy_rx_polarity_flip_fabric118.BCM8879X=1 phy_rx_polarity_flip_fabric119.BCM8879X=0 -phy_rx_polarity_flip_fabric120.BCM8879X=0 -phy_rx_polarity_flip_fabric121.BCM8879X=1 -phy_rx_polarity_flip_fabric122.BCM8879X=0 -phy_rx_polarity_flip_fabric123.BCM8879X=1 +phy_rx_polarity_flip_fabric120.BCM8879X=1 +phy_rx_polarity_flip_fabric121.BCM8879X=0 +phy_rx_polarity_flip_fabric122.BCM8879X=1 +phy_rx_polarity_flip_fabric123.BCM8879X=0 phy_rx_polarity_flip_fabric124.BCM8879X=0 phy_rx_polarity_flip_fabric125.BCM8879X=1 phy_rx_polarity_flip_fabric126.BCM8879X=0 phy_rx_polarity_flip_fabric127.BCM8879X=1 -phy_rx_polarity_flip_fabric128.BCM8879X=0 -phy_rx_polarity_flip_fabric129.BCM8879X=1 -phy_rx_polarity_flip_fabric130.BCM8879X=0 -phy_rx_polarity_flip_fabric131.BCM8879X=1 +phy_rx_polarity_flip_fabric128.BCM8879X=1 +phy_rx_polarity_flip_fabric129.BCM8879X=0 +phy_rx_polarity_flip_fabric130.BCM8879X=1 +phy_rx_polarity_flip_fabric131.BCM8879X=0 -phy_rx_polarity_flip_fabric132.BCM8879X=1 -phy_rx_polarity_flip_fabric133.BCM8879X=0 -phy_rx_polarity_flip_fabric134.BCM8879X=1 -phy_rx_polarity_flip_fabric135.BCM8879X=0 +phy_rx_polarity_flip_fabric132.BCM8879X=0 +phy_rx_polarity_flip_fabric133.BCM8879X=1 +phy_rx_polarity_flip_fabric134.BCM8879X=0 +phy_rx_polarity_flip_fabric135.BCM8879X=1 phy_rx_polarity_flip_fabric136.BCM8879X=1 phy_rx_polarity_flip_fabric137.BCM8879X=0 phy_rx_polarity_flip_fabric138.BCM8879X=1 phy_rx_polarity_flip_fabric139.BCM8879X=0 -phy_rx_polarity_flip_fabric140.BCM8879X=0 -phy_rx_polarity_flip_fabric141.BCM8879X=1 -phy_rx_polarity_flip_fabric142.BCM8879X=0 -phy_rx_polarity_flip_fabric143.BCM8879X=1 +phy_rx_polarity_flip_fabric140.BCM8879X=1 +phy_rx_polarity_flip_fabric141.BCM8879X=0 +phy_rx_polarity_flip_fabric142.BCM8879X=1 +phy_rx_polarity_flip_fabric143.BCM8879X=0 -phy_rx_polarity_flip_fabric144.BCM8879X=0 -phy_rx_polarity_flip_fabric145.BCM8879X=1 -phy_rx_polarity_flip_fabric146.BCM8879X=0 -phy_rx_polarity_flip_fabric147.BCM8879X=1 +phy_rx_polarity_flip_fabric144.BCM8879X=1 +phy_rx_polarity_flip_fabric145.BCM8879X=0 +phy_rx_polarity_flip_fabric146.BCM8879X=1 +phy_rx_polarity_flip_fabric147.BCM8879X=0 phy_rx_polarity_flip_fabric148.BCM8879X=1 phy_rx_polarity_flip_fabric149.BCM8879X=0 phy_rx_polarity_flip_fabric150.BCM8879X=1 phy_rx_polarity_flip_fabric151.BCM8879X=0 -phy_rx_polarity_flip_fabric152.BCM8879X=1 -phy_rx_polarity_flip_fabric153.BCM8879X=0 -phy_rx_polarity_flip_fabric154.BCM8879X=1 -phy_rx_polarity_flip_fabric155.BCM8879X=0 +phy_rx_polarity_flip_fabric152.BCM8879X=0 +phy_rx_polarity_flip_fabric153.BCM8879X=1 +phy_rx_polarity_flip_fabric154.BCM8879X=0 +phy_rx_polarity_flip_fabric155.BCM8879X=1 -phy_rx_polarity_flip_fabric156.BCM8879X=0 -phy_rx_polarity_flip_fabric157.BCM8879X=1 -phy_rx_polarity_flip_fabric158.BCM8879X=0 -phy_rx_polarity_flip_fabric159.BCM8879X=1 +phy_rx_polarity_flip_fabric156.BCM8879X=1 +phy_rx_polarity_flip_fabric157.BCM8879X=0 +phy_rx_polarity_flip_fabric158.BCM8879X=1 +phy_rx_polarity_flip_fabric159.BCM8879X=0 -phy_rx_polarity_flip_fabric160.BCM8879X=0 -phy_rx_polarity_flip_fabric161.BCM8879X=1 -phy_rx_polarity_flip_fabric162.BCM8879X=0 -phy_rx_polarity_flip_fabric163.BCM8879X=1 +phy_rx_polarity_flip_fabric160.BCM8879X=1 +phy_rx_polarity_flip_fabric161.BCM8879X=0 +phy_rx_polarity_flip_fabric162.BCM8879X=1 +phy_rx_polarity_flip_fabric163.BCM8879X=0 phy_rx_polarity_flip_fabric164.BCM8879X=0 phy_rx_polarity_flip_fabric165.BCM8879X=1 phy_rx_polarity_flip_fabric166.BCM8879X=0 phy_rx_polarity_flip_fabric167.BCM8879X=1 -phy_rx_polarity_flip_fabric168.BCM8879X=0 -phy_rx_polarity_flip_fabric169.BCM8879X=1 -phy_rx_polarity_flip_fabric170.BCM8879X=0 -phy_rx_polarity_flip_fabric171.BCM8879X=1 +phy_rx_polarity_flip_fabric168.BCM8879X=1 +phy_rx_polarity_flip_fabric169.BCM8879X=0 +phy_rx_polarity_flip_fabric170.BCM8879X=1 +phy_rx_polarity_flip_fabric171.BCM8879X=0 phy_rx_polarity_flip_fabric172.BCM8879X=1 phy_rx_polarity_flip_fabric173.BCM8879X=0 phy_rx_polarity_flip_fabric174.BCM8879X=1 phy_rx_polarity_flip_fabric175.BCM8879X=0 -phy_rx_polarity_flip_fabric176.BCM8879X=1 -phy_rx_polarity_flip_fabric177.BCM8879X=0 -phy_rx_polarity_flip_fabric178.BCM8879X=1 -phy_rx_polarity_flip_fabric179.BCM8879X=0 +phy_rx_polarity_flip_fabric176.BCM8879X=0 +phy_rx_polarity_flip_fabric177.BCM8879X=1 +phy_rx_polarity_flip_fabric178.BCM8879X=0 +phy_rx_polarity_flip_fabric179.BCM8879X=1 -phy_rx_polarity_flip_fabric180.BCM8879X=0 -phy_rx_polarity_flip_fabric181.BCM8879X=1 -phy_rx_polarity_flip_fabric182.BCM8879X=0 -phy_rx_polarity_flip_fabric183.BCM8879X=1 +phy_rx_polarity_flip_fabric180.BCM8879X=1 +phy_rx_polarity_flip_fabric181.BCM8879X=0 +phy_rx_polarity_flip_fabric182.BCM8879X=1 +phy_rx_polarity_flip_fabric183.BCM8879X=0 phy_rx_polarity_flip_fabric184.BCM8879X=0 phy_rx_polarity_flip_fabric185.BCM8879X=1 phy_rx_polarity_flip_fabric186.BCM8879X=0 phy_rx_polarity_flip_fabric187.BCM8879X=1 -phy_rx_polarity_flip_fabric188.BCM8879X=0 -phy_rx_polarity_flip_fabric189.BCM8879X=1 -phy_rx_polarity_flip_fabric190.BCM8879X=0 -phy_rx_polarity_flip_fabric191.BCM8879X=1 +phy_rx_polarity_flip_fabric188.BCM8879X=1 +phy_rx_polarity_flip_fabric189.BCM8879X=0 +phy_rx_polarity_flip_fabric190.BCM8879X=1 +phy_rx_polarity_flip_fabric191.BCM8879X=0 phy_tx_polarity_flip_fabric0.BCM8879X=0 -phy_tx_polarity_flip_fabric1.BCM8879X=0 -phy_tx_polarity_flip_fabric2.BCM8879X=1 +phy_tx_polarity_flip_fabric1.BCM8879X=1 +phy_tx_polarity_flip_fabric2.BCM8879X=0 phy_tx_polarity_flip_fabric3.BCM8879X=1 -phy_tx_polarity_flip_fabric4.BCM8879X=0 -phy_tx_polarity_flip_fabric5.BCM8879X=1 +phy_tx_polarity_flip_fabric4.BCM8879X=1 +phy_tx_polarity_flip_fabric5.BCM8879X=0 phy_tx_polarity_flip_fabric6.BCM8879X=1 phy_tx_polarity_flip_fabric7.BCM8879X=0 phy_tx_polarity_flip_fabric8.BCM8879X=0 -phy_tx_polarity_flip_fabric9.BCM8879X=0 -phy_tx_polarity_flip_fabric10.BCM8879X=1 +phy_tx_polarity_flip_fabric9.BCM8879X=1 +phy_tx_polarity_flip_fabric10.BCM8879X=0 phy_tx_polarity_flip_fabric11.BCM8879X=1 -phy_tx_polarity_flip_fabric12.BCM8879X=0 -phy_tx_polarity_flip_fabric13.BCM8879X=1 +phy_tx_polarity_flip_fabric12.BCM8879X=1 +phy_tx_polarity_flip_fabric13.BCM8879X=0 phy_tx_polarity_flip_fabric14.BCM8879X=1 -phy_tx_polarity_flip_fabric15.BCM8879X=1 +phy_tx_polarity_flip_fabric15.BCM8879X=0 -phy_tx_polarity_flip_fabric16.BCM8879X=1 +phy_tx_polarity_flip_fabric16.BCM8879X=0 phy_tx_polarity_flip_fabric17.BCM8879X=1 -phy_tx_polarity_flip_fabric18.BCM8879X=1 -phy_tx_polarity_flip_fabric19.BCM8879X=0 +phy_tx_polarity_flip_fabric18.BCM8879X=0 +phy_tx_polarity_flip_fabric19.BCM8879X=1 -phy_tx_polarity_flip_fabric20.BCM8879X=1 +phy_tx_polarity_flip_fabric20.BCM8879X=0 phy_tx_polarity_flip_fabric21.BCM8879X=1 -phy_tx_polarity_flip_fabric22.BCM8879X=1 -phy_tx_polarity_flip_fabric23.BCM8879X=0 +phy_tx_polarity_flip_fabric22.BCM8879X=0 +phy_tx_polarity_flip_fabric23.BCM8879X=1 -phy_tx_polarity_flip_fabric24.BCM8879X=1 +phy_tx_polarity_flip_fabric24.BCM8879X=0 phy_tx_polarity_flip_fabric25.BCM8879X=1 phy_tx_polarity_flip_fabric26.BCM8879X=0 -phy_tx_polarity_flip_fabric27.BCM8879X=0 +phy_tx_polarity_flip_fabric27.BCM8879X=1 phy_tx_polarity_flip_fabric28.BCM8879X=1 phy_tx_polarity_flip_fabric29.BCM8879X=0 -phy_tx_polarity_flip_fabric30.BCM8879X=0 -phy_tx_polarity_flip_fabric31.BCM8879X=1 +phy_tx_polarity_flip_fabric30.BCM8879X=1 +phy_tx_polarity_flip_fabric31.BCM8879X=0 phy_tx_polarity_flip_fabric32.BCM8879X=0 -phy_tx_polarity_flip_fabric33.BCM8879X=0 -phy_tx_polarity_flip_fabric34.BCM8879X=1 +phy_tx_polarity_flip_fabric33.BCM8879X=1 +phy_tx_polarity_flip_fabric34.BCM8879X=0 phy_tx_polarity_flip_fabric35.BCM8879X=1 phy_tx_polarity_flip_fabric36.BCM8879X=1 -phy_tx_polarity_flip_fabric37.BCM8879X=1 +phy_tx_polarity_flip_fabric37.BCM8879X=0 phy_tx_polarity_flip_fabric38.BCM8879X=1 phy_tx_polarity_flip_fabric39.BCM8879X=0 phy_tx_polarity_flip_fabric40.BCM8879X=0 phy_tx_polarity_flip_fabric41.BCM8879X=1 phy_tx_polarity_flip_fabric42.BCM8879X=0 -phy_tx_polarity_flip_fabric43.BCM8879X=0 +phy_tx_polarity_flip_fabric43.BCM8879X=1 -phy_tx_polarity_flip_fabric44.BCM8879X=1 +phy_tx_polarity_flip_fabric44.BCM8879X=0 phy_tx_polarity_flip_fabric45.BCM8879X=1 phy_tx_polarity_flip_fabric46.BCM8879X=0 phy_tx_polarity_flip_fabric47.BCM8879X=1 -phy_tx_polarity_flip_fabric48.BCM8879X=0 -phy_tx_polarity_flip_fabric49.BCM8879X=1 +phy_tx_polarity_flip_fabric48.BCM8879X=1 +phy_tx_polarity_flip_fabric49.BCM8879X=0 phy_tx_polarity_flip_fabric50.BCM8879X=1 -phy_tx_polarity_flip_fabric51.BCM8879X=1 +phy_tx_polarity_flip_fabric51.BCM8879X=0 -phy_tx_polarity_flip_fabric52.BCM8879X=1 +phy_tx_polarity_flip_fabric52.BCM8879X=0 phy_tx_polarity_flip_fabric53.BCM8879X=1 phy_tx_polarity_flip_fabric54.BCM8879X=0 phy_tx_polarity_flip_fabric55.BCM8879X=1 -phy_tx_polarity_flip_fabric56.BCM8879X=0 +phy_tx_polarity_flip_fabric56.BCM8879X=1 phy_tx_polarity_flip_fabric57.BCM8879X=0 -phy_tx_polarity_flip_fabric58.BCM8879X=0 -phy_tx_polarity_flip_fabric59.BCM8879X=1 +phy_tx_polarity_flip_fabric58.BCM8879X=1 +phy_tx_polarity_flip_fabric59.BCM8879X=0 phy_tx_polarity_flip_fabric60.BCM8879X=1 phy_tx_polarity_flip_fabric61.BCM8879X=0 -phy_tx_polarity_flip_fabric62.BCM8879X=0 -phy_tx_polarity_flip_fabric63.BCM8879X=1 +phy_tx_polarity_flip_fabric62.BCM8879X=1 +phy_tx_polarity_flip_fabric63.BCM8879X=0 -phy_tx_polarity_flip_fabric64.BCM8879X=1 +phy_tx_polarity_flip_fabric64.BCM8879X=0 phy_tx_polarity_flip_fabric65.BCM8879X=1 phy_tx_polarity_flip_fabric66.BCM8879X=0 -phy_tx_polarity_flip_fabric67.BCM8879X=0 +phy_tx_polarity_flip_fabric67.BCM8879X=1 phy_tx_polarity_flip_fabric68.BCM8879X=1 phy_tx_polarity_flip_fabric69.BCM8879X=0 phy_tx_polarity_flip_fabric70.BCM8879X=1 phy_tx_polarity_flip_fabric71.BCM8879X=0 -phy_tx_polarity_flip_fabric72.BCM8879X=1 +phy_tx_polarity_flip_fabric72.BCM8879X=0 phy_tx_polarity_flip_fabric73.BCM8879X=1 -phy_tx_polarity_flip_fabric74.BCM8879X=1 -phy_tx_polarity_flip_fabric75.BCM8879X=0 +phy_tx_polarity_flip_fabric74.BCM8879X=0 +phy_tx_polarity_flip_fabric75.BCM8879X=1 -phy_tx_polarity_flip_fabric76.BCM8879X=1 +phy_tx_polarity_flip_fabric76.BCM8879X=0 phy_tx_polarity_flip_fabric77.BCM8879X=1 phy_tx_polarity_flip_fabric78.BCM8879X=0 phy_tx_polarity_flip_fabric79.BCM8879X=1 phy_tx_polarity_flip_fabric80.BCM8879X=1 -phy_tx_polarity_flip_fabric81.BCM8879X=1 -phy_tx_polarity_flip_fabric82.BCM8879X=0 -phy_tx_polarity_flip_fabric83.BCM8879X=1 +phy_tx_polarity_flip_fabric81.BCM8879X=0 +phy_tx_polarity_flip_fabric82.BCM8879X=1 +phy_tx_polarity_flip_fabric83.BCM8879X=0 -phy_tx_polarity_flip_fabric84.BCM8879X=1 -phy_tx_polarity_flip_fabric85.BCM8879X=0 -phy_tx_polarity_flip_fabric86.BCM8879X=1 -phy_tx_polarity_flip_fabric87.BCM8879X=0 +phy_tx_polarity_flip_fabric84.BCM8879X=0 +phy_tx_polarity_flip_fabric85.BCM8879X=1 +phy_tx_polarity_flip_fabric86.BCM8879X=0 +phy_tx_polarity_flip_fabric87.BCM8879X=1 -phy_tx_polarity_flip_fabric88.BCM8879X=0 +phy_tx_polarity_flip_fabric88.BCM8879X=1 phy_tx_polarity_flip_fabric89.BCM8879X=0 phy_tx_polarity_flip_fabric90.BCM8879X=1 -phy_tx_polarity_flip_fabric91.BCM8879X=1 +phy_tx_polarity_flip_fabric91.BCM8879X=0 phy_tx_polarity_flip_fabric92.BCM8879X=0 phy_tx_polarity_flip_fabric93.BCM8879X=1 -phy_tx_polarity_flip_fabric94.BCM8879X=1 -phy_tx_polarity_flip_fabric95.BCM8879X=0 +phy_tx_polarity_flip_fabric94.BCM8879X=0 +phy_tx_polarity_flip_fabric95.BCM8879X=1 -phy_tx_polarity_flip_fabric96.BCM8879X=1 +phy_tx_polarity_flip_fabric96.BCM8879X=0 phy_tx_polarity_flip_fabric97.BCM8879X=1 phy_tx_polarity_flip_fabric98.BCM8879X=0 -phy_tx_polarity_flip_fabric99.BCM8879X=0 +phy_tx_polarity_flip_fabric99.BCM8879X=1 -phy_tx_polarity_flip_fabric100.BCM8879X=0 -phy_tx_polarity_flip_fabric101.BCM8879X=1 +phy_tx_polarity_flip_fabric100.BCM8879X=1 +phy_tx_polarity_flip_fabric101.BCM8879X=0 phy_tx_polarity_flip_fabric102.BCM8879X=1 phy_tx_polarity_flip_fabric103.BCM8879X=0 @@ -658,28 +659,28 @@ phy_tx_polarity_flip_fabric105.BCM8879X=0 phy_tx_polarity_flip_fabric106.BCM8879X=1 phy_tx_polarity_flip_fabric107.BCM8879X=0 -phy_tx_polarity_flip_fabric108.BCM8879X=0 -phy_tx_polarity_flip_fabric109.BCM8879X=1 -phy_tx_polarity_flip_fabric110.BCM8879X=0 -phy_tx_polarity_flip_fabric111.BCM8879X=1 +phy_tx_polarity_flip_fabric108.BCM8879X=1 +phy_tx_polarity_flip_fabric109.BCM8879X=0 +phy_tx_polarity_flip_fabric110.BCM8879X=1 +phy_tx_polarity_flip_fabric111.BCM8879X=0 -phy_tx_polarity_flip_fabric112.BCM8879X=0 -phy_tx_polarity_flip_fabric113.BCM8879X=1 -phy_tx_polarity_flip_fabric114.BCM8879X=0 -phy_tx_polarity_flip_fabric115.BCM8879X=1 +phy_tx_polarity_flip_fabric112.BCM8879X=1 +phy_tx_polarity_flip_fabric113.BCM8879X=0 +phy_tx_polarity_flip_fabric114.BCM8879X=1 +phy_tx_polarity_flip_fabric115.BCM8879X=0 phy_tx_polarity_flip_fabric116.BCM8879X=0 phy_tx_polarity_flip_fabric117.BCM8879X=1 phy_tx_polarity_flip_fabric118.BCM8879X=0 phy_tx_polarity_flip_fabric119.BCM8879X=1 -phy_tx_polarity_flip_fabric120.BCM8879X=1 -phy_tx_polarity_flip_fabric121.BCM8879X=0 -phy_tx_polarity_flip_fabric122.BCM8879X=1 -phy_tx_polarity_flip_fabric123.BCM8879X=0 +phy_tx_polarity_flip_fabric120.BCM8879X=0 +phy_tx_polarity_flip_fabric121.BCM8879X=1 +phy_tx_polarity_flip_fabric122.BCM8879X=0 +phy_tx_polarity_flip_fabric123.BCM8879X=1 -phy_tx_polarity_flip_fabric124.BCM8879X=0 -phy_tx_polarity_flip_fabric125.BCM8879X=1 +phy_tx_polarity_flip_fabric124.BCM8879X=1 +phy_tx_polarity_flip_fabric125.BCM8879X=0 phy_tx_polarity_flip_fabric126.BCM8879X=1 phy_tx_polarity_flip_fabric127.BCM8879X=0 @@ -688,14 +689,14 @@ phy_tx_polarity_flip_fabric129.BCM8879X=1 phy_tx_polarity_flip_fabric130.BCM8879X=0 phy_tx_polarity_flip_fabric131.BCM8879X=1 -phy_tx_polarity_flip_fabric132.BCM8879X=0 -phy_tx_polarity_flip_fabric133.BCM8879X=1 -phy_tx_polarity_flip_fabric134.BCM8879X=0 -phy_tx_polarity_flip_fabric135.BCM8879X=1 +phy_tx_polarity_flip_fabric132.BCM8879X=1 +phy_tx_polarity_flip_fabric133.BCM8879X=0 +phy_tx_polarity_flip_fabric134.BCM8879X=1 +phy_tx_polarity_flip_fabric135.BCM8879X=0 phy_tx_polarity_flip_fabric136.BCM8879X=0 -phy_tx_polarity_flip_fabric137.BCM8879X=0 -phy_tx_polarity_flip_fabric138.BCM8879X=1 +phy_tx_polarity_flip_fabric137.BCM8879X=1 +phy_tx_polarity_flip_fabric138.BCM8879X=0 phy_tx_polarity_flip_fabric139.BCM8879X=1 phy_tx_polarity_flip_fabric140.BCM8879X=0 @@ -704,8 +705,8 @@ phy_tx_polarity_flip_fabric142.BCM8879X=0 phy_tx_polarity_flip_fabric143.BCM8879X=1 phy_tx_polarity_flip_fabric144.BCM8879X=0 -phy_tx_polarity_flip_fabric145.BCM8879X=0 -phy_tx_polarity_flip_fabric146.BCM8879X=1 +phy_tx_polarity_flip_fabric145.BCM8879X=1 +phy_tx_polarity_flip_fabric146.BCM8879X=0 phy_tx_polarity_flip_fabric147.BCM8879X=1 phy_tx_polarity_flip_fabric148.BCM8879X=0 @@ -713,56 +714,441 @@ phy_tx_polarity_flip_fabric149.BCM8879X=1 phy_tx_polarity_flip_fabric150.BCM8879X=0 phy_tx_polarity_flip_fabric151.BCM8879X=1 -phy_tx_polarity_flip_fabric152.BCM8879X=0 -phy_tx_polarity_flip_fabric153.BCM8879X=1 -phy_tx_polarity_flip_fabric154.BCM8879X=0 -phy_tx_polarity_flip_fabric155.BCM8879X=1 +phy_tx_polarity_flip_fabric152.BCM8879X=1 +phy_tx_polarity_flip_fabric153.BCM8879X=0 +phy_tx_polarity_flip_fabric154.BCM8879X=1 +phy_tx_polarity_flip_fabric155.BCM8879X=0 phy_tx_polarity_flip_fabric156.BCM8879X=0 -phy_tx_polarity_flip_fabric157.BCM8879X=0 -phy_tx_polarity_flip_fabric158.BCM8879X=1 +phy_tx_polarity_flip_fabric157.BCM8879X=1 +phy_tx_polarity_flip_fabric158.BCM8879X=0 phy_tx_polarity_flip_fabric159.BCM8879X=1 -phy_tx_polarity_flip_fabric160.BCM8879X=1 +phy_tx_polarity_flip_fabric160.BCM8879X=0 phy_tx_polarity_flip_fabric161.BCM8879X=1 phy_tx_polarity_flip_fabric162.BCM8879X=0 -phy_tx_polarity_flip_fabric163.BCM8879X=0 +phy_tx_polarity_flip_fabric163.BCM8879X=1 phy_tx_polarity_flip_fabric164.BCM8879X=1 -phy_tx_polarity_flip_fabric165.BCM8879X=1 -phy_tx_polarity_flip_fabric166.BCM8879X=0 +phy_tx_polarity_flip_fabric165.BCM8879X=0 +phy_tx_polarity_flip_fabric166.BCM8879X=1 phy_tx_polarity_flip_fabric167.BCM8879X=0 -phy_tx_polarity_flip_fabric168.BCM8879X=1 +phy_tx_polarity_flip_fabric168.BCM8879X=0 phy_tx_polarity_flip_fabric169.BCM8879X=1 phy_tx_polarity_flip_fabric170.BCM8879X=0 -phy_tx_polarity_flip_fabric171.BCM8879X=0 +phy_tx_polarity_flip_fabric171.BCM8879X=1 -phy_tx_polarity_flip_fabric172.BCM8879X=1 -phy_tx_polarity_flip_fabric173.BCM8879X=0 -phy_tx_polarity_flip_fabric174.BCM8879X=1 -phy_tx_polarity_flip_fabric175.BCM8879X=0 +phy_tx_polarity_flip_fabric172.BCM8879X=0 +phy_tx_polarity_flip_fabric173.BCM8879X=1 +phy_tx_polarity_flip_fabric174.BCM8879X=0 +phy_tx_polarity_flip_fabric175.BCM8879X=1 -phy_tx_polarity_flip_fabric176.BCM8879X=0 +phy_tx_polarity_flip_fabric176.BCM8879X=1 phy_tx_polarity_flip_fabric177.BCM8879X=0 phy_tx_polarity_flip_fabric178.BCM8879X=1 -phy_tx_polarity_flip_fabric179.BCM8879X=1 +phy_tx_polarity_flip_fabric179.BCM8879X=0 -phy_tx_polarity_flip_fabric180.BCM8879X=1 +phy_tx_polarity_flip_fabric180.BCM8879X=0 phy_tx_polarity_flip_fabric181.BCM8879X=1 phy_tx_polarity_flip_fabric182.BCM8879X=0 -phy_tx_polarity_flip_fabric183.BCM8879X=0 +phy_tx_polarity_flip_fabric183.BCM8879X=1 -phy_tx_polarity_flip_fabric184.BCM8879X=0 -phy_tx_polarity_flip_fabric185.BCM8879X=1 +phy_tx_polarity_flip_fabric184.BCM8879X=1 +phy_tx_polarity_flip_fabric185.BCM8879X=0 phy_tx_polarity_flip_fabric186.BCM8879X=1 phy_tx_polarity_flip_fabric187.BCM8879X=0 -phy_tx_polarity_flip_fabric188.BCM8879X=1 -phy_tx_polarity_flip_fabric189.BCM8879X=0 +phy_tx_polarity_flip_fabric188.BCM8879X=0 +phy_tx_polarity_flip_fabric189.BCM8879X=1 phy_tx_polarity_flip_fabric190.BCM8879X=0 phy_tx_polarity_flip_fabric191.BCM8879X=1 +port_init_cl72_0=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 +port_init_cl72_19=0 +port_init_cl72_20=0 +port_init_cl72_21=0 +port_init_cl72_22=0 +port_init_cl72_23=0 +port_init_cl72_24=0 +port_init_cl72_25=0 +port_init_cl72_26=0 +port_init_cl72_27=0 +port_init_cl72_28=0 +port_init_cl72_29=0 +port_init_cl72_30=0 +port_init_cl72_31=0 +port_init_cl72_32=0 +port_init_cl72_33=0 +port_init_cl72_34=0 +port_init_cl72_35=0 +port_init_cl72_36=0 +port_init_cl72_37=0 +port_init_cl72_38=0 +port_init_cl72_39=0 +port_init_cl72_40=0 +port_init_cl72_41=0 +port_init_cl72_42=0 +port_init_cl72_43=0 +port_init_cl72_44=0 +port_init_cl72_45=0 +port_init_cl72_46=0 +port_init_cl72_47=0 +port_init_cl72_48=0 +port_init_cl72_49=0 +port_init_cl72_50=0 +port_init_cl72_51=0 +port_init_cl72_52=0 +port_init_cl72_53=0 +port_init_cl72_54=0 +port_init_cl72_55=0 +port_init_cl72_56=0 +port_init_cl72_57=0 +port_init_cl72_58=0 +port_init_cl72_59=0 +port_init_cl72_60=0 +port_init_cl72_61=0 +port_init_cl72_62=0 +port_init_cl72_63=0 +port_init_cl72_64=0 +port_init_cl72_65=0 +port_init_cl72_66=0 +port_init_cl72_67=0 +port_init_cl72_68=0 +port_init_cl72_69=0 +port_init_cl72_70=0 +port_init_cl72_71=0 +port_init_cl72_72=0 +port_init_cl72_73=0 +port_init_cl72_74=0 +port_init_cl72_75=0 +port_init_cl72_76=0 +port_init_cl72_77=0 +port_init_cl72_78=0 +port_init_cl72_79=0 +port_init_cl72_80=0 +port_init_cl72_81=0 +port_init_cl72_82=0 +port_init_cl72_83=0 +port_init_cl72_84=0 +port_init_cl72_85=0 +port_init_cl72_86=0 +port_init_cl72_87=0 +port_init_cl72_88=0 +port_init_cl72_89=0 +port_init_cl72_90=0 +port_init_cl72_91=0 +port_init_cl72_92=0 +port_init_cl72_93=0 +port_init_cl72_94=0 +port_init_cl72_95=0 +port_init_cl72_96=0 +port_init_cl72_97=0 +port_init_cl72_98=0 +port_init_cl72_99=0 +port_init_cl72_100=0 +port_init_cl72_101=0 +port_init_cl72_102=0 +port_init_cl72_103=0 +port_init_cl72_104=0 +port_init_cl72_105=0 +port_init_cl72_106=0 +port_init_cl72_107=0 +port_init_cl72_108=0 +port_init_cl72_109=0 +port_init_cl72_110=0 +port_init_cl72_111=0 +port_init_cl72_112=0 +port_init_cl72_113=0 +port_init_cl72_114=0 +port_init_cl72_115=0 +port_init_cl72_116=0 +port_init_cl72_117=0 +port_init_cl72_118=0 +port_init_cl72_119=0 +port_init_cl72_120=0 +port_init_cl72_121=0 +port_init_cl72_122=0 +port_init_cl72_123=0 +port_init_cl72_124=0 +port_init_cl72_125=0 +port_init_cl72_126=0 +port_init_cl72_127=0 +port_init_cl72_128=0 +port_init_cl72_129=0 +port_init_cl72_130=0 +port_init_cl72_131=0 +port_init_cl72_132=0 +port_init_cl72_133=0 +port_init_cl72_134=0 +port_init_cl72_135=0 +port_init_cl72_136=0 +port_init_cl72_137=0 +port_init_cl72_138=0 +port_init_cl72_139=0 +port_init_cl72_140=0 +port_init_cl72_141=0 +port_init_cl72_142=0 +port_init_cl72_143=0 +port_init_cl72_144=0 +port_init_cl72_145=0 +port_init_cl72_146=0 +port_init_cl72_147=0 +port_init_cl72_148=0 +port_init_cl72_149=0 +port_init_cl72_150=0 +port_init_cl72_151=0 +port_init_cl72_152=0 +port_init_cl72_153=0 +port_init_cl72_154=0 +port_init_cl72_155=0 +port_init_cl72_156=0 +port_init_cl72_157=0 +port_init_cl72_158=0 +port_init_cl72_159=0 +port_init_cl72_160=0 +port_init_cl72_161=0 +port_init_cl72_162=0 +port_init_cl72_163=0 +port_init_cl72_164=0 +port_init_cl72_165=0 +port_init_cl72_166=0 +port_init_cl72_167=0 +port_init_cl72_168=0 +port_init_cl72_169=0 +port_init_cl72_170=0 +port_init_cl72_171=0 +port_init_cl72_172=0 +port_init_cl72_173=0 +port_init_cl72_174=0 +port_init_cl72_175=0 +port_init_cl72_176=0 +port_init_cl72_177=0 +port_init_cl72_178=0 +port_init_cl72_179=0 +port_init_cl72_180=0 +port_init_cl72_181=0 +port_init_cl72_182=0 +port_init_cl72_183=0 +port_init_cl72_184=0 +port_init_cl72_185=0 +port_init_cl72_186=0 +port_init_cl72_187=0 +port_init_cl72_188=0 +port_init_cl72_189=0 +port_init_cl72_190=0 +port_init_cl72_191=0 + +serdes_tx_taps_0.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_1.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_2.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_3.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_4.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_5.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_6.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_7.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_8.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_9.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_10.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_11.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_12.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_13.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_14.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_15.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_16.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_17.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_18.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_19.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_20.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_21.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_22.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_23.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_24.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_25.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_26.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_27.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_28.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_29.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_30.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_31.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_32.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_33.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_34.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_35.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_36.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_37.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_38.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_39.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_40.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_41.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_42.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_43.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_44.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_45.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_46.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_47.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_48.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_49.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_50.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_51.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_52.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_53.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_54.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_55.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_56.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_57.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_58.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_59.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_60.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_61.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_62.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_63.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_64.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_65.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_66.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_67.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_68.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_69.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_70.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_71.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_72.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_73.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_74.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_75.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_76.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_77.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_78.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_79.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_80.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_81.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_82.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_83.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_84.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_85.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_86.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_87.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_88.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_89.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_90.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_91.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_92.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_93.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_94.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_95.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_96.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_97.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_98.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_99.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_100.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_101.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_102.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_103.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_104.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_105.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_106.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_107.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_108.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_109.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_110.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_111.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_112.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_113.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_114.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_115.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_116.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_117.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_118.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_119.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_120.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_121.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_122.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_123.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_124.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_125.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_126.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_127.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_128.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_129.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_130.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_131.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_132.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_133.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_134.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_135.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_136.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_137.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_138.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_139.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_140.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_141.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_142.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_143.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_144.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_145.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_146.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_147.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_148.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_149.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_150.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_151.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_152.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_153.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_154.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_155.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_156.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_157.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_158.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_159.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_160.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_161.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_162.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_163.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_164.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_165.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_166.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_167.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_168.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_169.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_170.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_171.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_172.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_173.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_174.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_175.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_176.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_177.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_178.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_179.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_180.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_181.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_182.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_183.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_184.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_185.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_186.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_187.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_188.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_189.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_190.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_191.BCM8879X=pam4:-24:132:-12:0:0:0 serdes_lane_config_channel_mode_0.0=force_nr serdes_lane_config_channel_mode_1.0=force_nr @@ -920,6 +1306,8 @@ serdes_lane_config_channel_mode_152.0=force_nr serdes_lane_config_channel_mode_153.0=force_nr serdes_lane_config_channel_mode_154.0=force_nr serdes_lane_config_channel_mode_155.0=force_nr +#port_init_cl72_155=0 +#serdes_tx_taps_155.BCM8879X=pam4:-20:148:0:0:0:0 serdes_lane_config_channel_mode_156.0=force_nr serdes_lane_config_channel_mode_157.0=force_nr serdes_lane_config_channel_mode_158.0=force_nr diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/15/config-ramon-8-1.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/15/config-ramon-8-1.bcm index f61923287353..4e9aeef329f9 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/15/config-ramon-8-1.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/15/config-ramon-8-1.bcm @@ -1,7 +1,8 @@ + appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=16 bcm_linkscan_interval.BCM8879X=0 -bcm_stat_interval.BCM8879X=0 +bcm_stat_interval.BCM8879X=4000000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 @@ -20,10 +21,10 @@ mdio_output_delay_int.BCM8879X=25 mem_cache_enable_parity.BCM8879X=1 mm_intr_enable.BCM8879X=0 mm_timeout_usec.BCM8879X=300000 -polled_irq_delay.BCM8879X=500000 +polled_irq_delay.BCM8879X=100000 polled_irq_mode.BCM8879X=1 port_fec.BCM8879X=7 -port_init_cl72.BCM8879X=1 +port_init_cl72.BCM8879X=0 port_init_speed.BCM8879X=53125 rate_ext_mdio_divisor.BCM8879X=14 rate_int_mdio_divisor.BCM8879X=50 @@ -42,134 +43,134 @@ tslam_dma_enable.BCM8879X=0 tslam_intr_enable.BCM8879X=0 tslam_timeout_usec.BCM8879X=5000000 -lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx1 -lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx3 +lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx1 lane_to_serdes_map_fabric_lane2.BCM8879X=rx2:tx2 -lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx0 +lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx3 -lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx5 -lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx6 -lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx7 -lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx4 +lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx4 +lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx5 +lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx7 -lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx10 -lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx8 -lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx11 -lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx9 +lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx11 -lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx13 -lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx15 +lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx13 lane_to_serdes_map_fabric_lane14.BCM8879X=rx14:tx14 -lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx12 +lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx15 -lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx18 -lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx16 -lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx17 +lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx18 lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx19 lane_to_serdes_map_fabric_lane20.BCM8879X=rx20:tx20 -lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx22 -lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx23 -lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx21 +lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx23 lane_to_serdes_map_fabric_lane24.BCM8879X=rx24:tx24 -lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx26 -lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx27 -lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx25 +lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx26 +lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx27 -lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx29 -lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx30 -lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx28 +lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx29 +lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx30 lane_to_serdes_map_fabric_lane31.BCM8879X=rx31:tx31 -lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx34 -lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx32 -lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx35 -lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx33 +lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx35 lane_to_serdes_map_fabric_lane36.BCM8879X=rx36:tx36 -lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx38 -lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx39 -lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx37 - -lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx43 -lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx42 -lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx40 -lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx41 - -lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx46 -lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx44 -lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx45 +lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx39 + +lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx40 +lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx41 +lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx42 +lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx43 + +lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx44 +lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx46 lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx47 -lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx49 -lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx50 -lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx51 -lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx48 +lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx51 -lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx54 +lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx52 lane_to_serdes_map_fabric_lane53.BCM8879X=rx53:tx53 -lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx55 -lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx52 +lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx55 -lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx57 -lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx58 -lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx59 -lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx56 +lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx56 +lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx57 +lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx58 +lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx59 -lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx61 -lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx60 +lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx60 +lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx61 lane_to_serdes_map_fabric_lane62.BCM8879X=rx62:tx62 lane_to_serdes_map_fabric_lane63.BCM8879X=rx63:tx63 lane_to_serdes_map_fabric_lane64.BCM8879X=rx64:tx64 -lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx66 -lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx65 +lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx66 lane_to_serdes_map_fabric_lane67.BCM8879X=rx67:tx67 -lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx69 -lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx70 -lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx71 -lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx68 +lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx71 -lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx74 -lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx72 -lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx75 -lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx73 +lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx72 +lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx75 -lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx78 -lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx76 -lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx79 -lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx77 +lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx76 +lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx77 +lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx78 +lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx79 lane_to_serdes_map_fabric_lane80.BCM8879X=rx80:tx80 -lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx82 -lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx81 +lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx82 lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx83 -lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx85 -lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx86 -lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx87 -lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx84 +lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx87 -lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx90 -lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx88 -lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx91 -lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx89 +lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx89 +lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx90 +lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx91 -lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx95 -lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx94 -lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx92 -lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx93 +lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx92 +lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx94 +lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx95 lane_to_serdes_map_fabric_lane96.BCM8879X=rx96:tx96 -lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx98 -lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx97 +lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx98 lane_to_serdes_map_fabric_lane99.BCM8879X=rx99:tx99 -lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx101 -lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx102 -lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx100 +lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx102 lane_to_serdes_map_fabric_lane103.BCM8879X=rx103:tx103 lane_to_serdes_map_fabric_lane104.BCM8879X=rx104:tx104 @@ -179,13 +180,13 @@ lane_to_serdes_map_fabric_lane107.BCM8879X=rx107:tx107 lane_to_serdes_map_fabric_lane108.BCM8879X=rx108:tx108 lane_to_serdes_map_fabric_lane109.BCM8879X=rx109:tx109 -lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx111 -lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx110 +lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx110 +lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx111 -lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx115 -lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx114 -lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx113 -lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx112 +lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx112 +lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx114 +lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx115 lane_to_serdes_map_fabric_lane116.BCM8879X=rx116:tx116 lane_to_serdes_map_fabric_lane117.BCM8879X=rx117:tx117 @@ -197,15 +198,15 @@ lane_to_serdes_map_fabric_lane121.BCM8879X=rx121:tx121 lane_to_serdes_map_fabric_lane122.BCM8879X=rx122:tx122 lane_to_serdes_map_fabric_lane123.BCM8879X=rx123:tx123 -lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx127 -lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx126 -lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx124 -lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx125 +lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx127 -lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx130 -lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx131 -lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx129 -lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx128 +lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx131 lane_to_serdes_map_fabric_lane132.BCM8879X=rx132:tx132 lane_to_serdes_map_fabric_lane133.BCM8879X=rx133:tx133 @@ -213,23 +214,23 @@ lane_to_serdes_map_fabric_lane134.BCM8879X=rx134:tx134 lane_to_serdes_map_fabric_lane135.BCM8879X=rx135:tx135 lane_to_serdes_map_fabric_lane136.BCM8879X=rx136:tx136 -lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx138 -lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx137 +lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx137 +lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx138 lane_to_serdes_map_fabric_lane139.BCM8879X=rx139:tx139 -lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx143 -lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx142 -lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx141 -lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx140 +lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx140 +lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx143 -lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx145 -lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx147 -lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx144 -lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx146 +lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx147 -lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx150 +lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx148 lane_to_serdes_map_fabric_lane149.BCM8879X=rx149:tx149 -lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx148 +lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx150 lane_to_serdes_map_fabric_lane151.BCM8879X=rx151:tx151 lane_to_serdes_map_fabric_lane152.BCM8879X=rx152:tx152 @@ -237,116 +238,116 @@ lane_to_serdes_map_fabric_lane153.BCM8879X=rx153:tx153 lane_to_serdes_map_fabric_lane154.BCM8879X=rx154:tx154 lane_to_serdes_map_fabric_lane155.BCM8879X=rx155:tx155 -lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx157 -lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx159 +lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx156 +lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx157 lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx158 -lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx156 +lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx159 lane_to_serdes_map_fabric_lane160.BCM8879X=rx160:tx160 -lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx162 -lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx161 +lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx162 lane_to_serdes_map_fabric_lane163.BCM8879X=rx163:tx163 -lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx166 -lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx164 -lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx165 +lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx166 lane_to_serdes_map_fabric_lane167.BCM8879X=rx167:tx167 -lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx170 -lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx168 -lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx169 +lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx168 +lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx170 lane_to_serdes_map_fabric_lane171.BCM8879X=rx171:tx171 -lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx173 -lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx174 -lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx175 -lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx172 +lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx172 +lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx173 +lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx174 +lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx175 lane_to_serdes_map_fabric_lane176.BCM8879X=rx176:tx176 -lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx178 -lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx177 +lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx178 lane_to_serdes_map_fabric_lane179.BCM8879X=rx179:tx179 lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx180 -lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx182 -lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx181 +lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx182 lane_to_serdes_map_fabric_lane183.BCM8879X=rx183:tx183 -lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx187 -lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx184 +lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx185 lane_to_serdes_map_fabric_lane186.BCM8879X=rx186:tx186 -lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx185 +lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx187 -lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx190 +lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx188 lane_to_serdes_map_fabric_lane189.BCM8879X=rx189:tx189 -lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx191 -lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx188 +lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx190 +lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx191 -phy_rx_polarity_flip_fabric0.BCM8879X=0 -phy_rx_polarity_flip_fabric1.BCM8879X=1 -phy_rx_polarity_flip_fabric2.BCM8879X=0 -phy_rx_polarity_flip_fabric3.BCM8879X=1 +phy_rx_polarity_flip_fabric0.BCM8879X=1 +phy_rx_polarity_flip_fabric1.BCM8879X=0 +phy_rx_polarity_flip_fabric2.BCM8879X=1 +phy_rx_polarity_flip_fabric3.BCM8879X=0 phy_rx_polarity_flip_fabric4.BCM8879X=1 phy_rx_polarity_flip_fabric5.BCM8879X=0 phy_rx_polarity_flip_fabric6.BCM8879X=1 phy_rx_polarity_flip_fabric7.BCM8879X=0 -phy_rx_polarity_flip_fabric8.BCM8879X=1 -phy_rx_polarity_flip_fabric9.BCM8879X=0 -phy_rx_polarity_flip_fabric10.BCM8879X=1 -phy_rx_polarity_flip_fabric11.BCM8879X=0 +phy_rx_polarity_flip_fabric8.BCM8879X=0 +phy_rx_polarity_flip_fabric9.BCM8879X=1 +phy_rx_polarity_flip_fabric10.BCM8879X=0 +phy_rx_polarity_flip_fabric11.BCM8879X=1 -phy_rx_polarity_flip_fabric12.BCM8879X=0 -phy_rx_polarity_flip_fabric13.BCM8879X=1 -phy_rx_polarity_flip_fabric14.BCM8879X=0 -phy_rx_polarity_flip_fabric15.BCM8879X=1 +phy_rx_polarity_flip_fabric12.BCM8879X=1 +phy_rx_polarity_flip_fabric13.BCM8879X=0 +phy_rx_polarity_flip_fabric14.BCM8879X=1 +phy_rx_polarity_flip_fabric15.BCM8879X=0 -phy_rx_polarity_flip_fabric16.BCM8879X=0 -phy_rx_polarity_flip_fabric17.BCM8879X=1 -phy_rx_polarity_flip_fabric18.BCM8879X=0 -phy_rx_polarity_flip_fabric19.BCM8879X=1 +phy_rx_polarity_flip_fabric16.BCM8879X=1 +phy_rx_polarity_flip_fabric17.BCM8879X=0 +phy_rx_polarity_flip_fabric18.BCM8879X=1 +phy_rx_polarity_flip_fabric19.BCM8879X=0 phy_rx_polarity_flip_fabric20.BCM8879X=0 phy_rx_polarity_flip_fabric21.BCM8879X=1 phy_rx_polarity_flip_fabric22.BCM8879X=0 phy_rx_polarity_flip_fabric23.BCM8879X=1 -phy_rx_polarity_flip_fabric24.BCM8879X=0 -phy_rx_polarity_flip_fabric25.BCM8879X=1 -phy_rx_polarity_flip_fabric26.BCM8879X=0 -phy_rx_polarity_flip_fabric27.BCM8879X=1 +phy_rx_polarity_flip_fabric24.BCM8879X=1 +phy_rx_polarity_flip_fabric25.BCM8879X=0 +phy_rx_polarity_flip_fabric26.BCM8879X=1 +phy_rx_polarity_flip_fabric27.BCM8879X=0 phy_rx_polarity_flip_fabric28.BCM8879X=1 phy_rx_polarity_flip_fabric29.BCM8879X=0 phy_rx_polarity_flip_fabric30.BCM8879X=1 phy_rx_polarity_flip_fabric31.BCM8879X=0 -phy_rx_polarity_flip_fabric32.BCM8879X=1 -phy_rx_polarity_flip_fabric33.BCM8879X=0 -phy_rx_polarity_flip_fabric34.BCM8879X=1 -phy_rx_polarity_flip_fabric35.BCM8879X=0 +phy_rx_polarity_flip_fabric32.BCM8879X=0 +phy_rx_polarity_flip_fabric33.BCM8879X=1 +phy_rx_polarity_flip_fabric34.BCM8879X=0 +phy_rx_polarity_flip_fabric35.BCM8879X=1 -phy_rx_polarity_flip_fabric36.BCM8879X=0 -phy_rx_polarity_flip_fabric37.BCM8879X=1 -phy_rx_polarity_flip_fabric38.BCM8879X=0 -phy_rx_polarity_flip_fabric39.BCM8879X=1 +phy_rx_polarity_flip_fabric36.BCM8879X=1 +phy_rx_polarity_flip_fabric37.BCM8879X=0 +phy_rx_polarity_flip_fabric38.BCM8879X=1 +phy_rx_polarity_flip_fabric39.BCM8879X=0 phy_rx_polarity_flip_fabric40.BCM8879X=0 phy_rx_polarity_flip_fabric41.BCM8879X=1 phy_rx_polarity_flip_fabric42.BCM8879X=0 phy_rx_polarity_flip_fabric43.BCM8879X=1 -phy_rx_polarity_flip_fabric44.BCM8879X=0 -phy_rx_polarity_flip_fabric45.BCM8879X=1 -phy_rx_polarity_flip_fabric46.BCM8879X=0 -phy_rx_polarity_flip_fabric47.BCM8879X=1 +phy_rx_polarity_flip_fabric44.BCM8879X=1 +phy_rx_polarity_flip_fabric45.BCM8879X=0 +phy_rx_polarity_flip_fabric46.BCM8879X=1 +phy_rx_polarity_flip_fabric47.BCM8879X=0 -phy_rx_polarity_flip_fabric48.BCM8879X=0 -phy_rx_polarity_flip_fabric49.BCM8879X=1 -phy_rx_polarity_flip_fabric50.BCM8879X=0 -phy_rx_polarity_flip_fabric51.BCM8879X=1 +phy_rx_polarity_flip_fabric48.BCM8879X=1 +phy_rx_polarity_flip_fabric49.BCM8879X=0 +phy_rx_polarity_flip_fabric50.BCM8879X=1 +phy_rx_polarity_flip_fabric51.BCM8879X=0 phy_rx_polarity_flip_fabric52.BCM8879X=0 phy_rx_polarity_flip_fabric53.BCM8879X=1 @@ -358,10 +359,10 @@ phy_rx_polarity_flip_fabric57.BCM8879X=1 phy_rx_polarity_flip_fabric58.BCM8879X=0 phy_rx_polarity_flip_fabric59.BCM8879X=1 -phy_rx_polarity_flip_fabric60.BCM8879X=1 -phy_rx_polarity_flip_fabric61.BCM8879X=0 -phy_rx_polarity_flip_fabric62.BCM8879X=1 -phy_rx_polarity_flip_fabric63.BCM8879X=0 +phy_rx_polarity_flip_fabric60.BCM8879X=0 +phy_rx_polarity_flip_fabric61.BCM8879X=1 +phy_rx_polarity_flip_fabric62.BCM8879X=0 +phy_rx_polarity_flip_fabric63.BCM8879X=1 phy_rx_polarity_flip_fabric64.BCM8879X=0 phy_rx_polarity_flip_fabric65.BCM8879X=1 @@ -373,78 +374,78 @@ phy_rx_polarity_flip_fabric69.BCM8879X=0 phy_rx_polarity_flip_fabric70.BCM8879X=1 phy_rx_polarity_flip_fabric71.BCM8879X=0 -phy_rx_polarity_flip_fabric72.BCM8879X=0 -phy_rx_polarity_flip_fabric73.BCM8879X=1 -phy_rx_polarity_flip_fabric74.BCM8879X=0 -phy_rx_polarity_flip_fabric75.BCM8879X=1 +phy_rx_polarity_flip_fabric72.BCM8879X=1 +phy_rx_polarity_flip_fabric73.BCM8879X=0 +phy_rx_polarity_flip_fabric74.BCM8879X=1 +phy_rx_polarity_flip_fabric75.BCM8879X=0 phy_rx_polarity_flip_fabric76.BCM8879X=0 phy_rx_polarity_flip_fabric77.BCM8879X=1 phy_rx_polarity_flip_fabric78.BCM8879X=0 phy_rx_polarity_flip_fabric79.BCM8879X=1 -phy_rx_polarity_flip_fabric80.BCM8879X=0 -phy_rx_polarity_flip_fabric81.BCM8879X=1 -phy_rx_polarity_flip_fabric82.BCM8879X=0 -phy_rx_polarity_flip_fabric83.BCM8879X=1 +phy_rx_polarity_flip_fabric80.BCM8879X=1 +phy_rx_polarity_flip_fabric81.BCM8879X=0 +phy_rx_polarity_flip_fabric82.BCM8879X=1 +phy_rx_polarity_flip_fabric83.BCM8879X=0 -phy_rx_polarity_flip_fabric84.BCM8879X=1 -phy_rx_polarity_flip_fabric85.BCM8879X=0 -phy_rx_polarity_flip_fabric86.BCM8879X=1 -phy_rx_polarity_flip_fabric87.BCM8879X=0 +phy_rx_polarity_flip_fabric84.BCM8879X=0 +phy_rx_polarity_flip_fabric85.BCM8879X=1 +phy_rx_polarity_flip_fabric86.BCM8879X=0 +phy_rx_polarity_flip_fabric87.BCM8879X=1 phy_rx_polarity_flip_fabric88.BCM8879X=1 phy_rx_polarity_flip_fabric89.BCM8879X=0 phy_rx_polarity_flip_fabric90.BCM8879X=1 phy_rx_polarity_flip_fabric91.BCM8879X=0 -phy_rx_polarity_flip_fabric92.BCM8879X=0 -phy_rx_polarity_flip_fabric93.BCM8879X=1 -phy_rx_polarity_flip_fabric94.BCM8879X=0 -phy_rx_polarity_flip_fabric95.BCM8879X=1 +phy_rx_polarity_flip_fabric92.BCM8879X=1 +phy_rx_polarity_flip_fabric93.BCM8879X=0 +phy_rx_polarity_flip_fabric94.BCM8879X=1 +phy_rx_polarity_flip_fabric95.BCM8879X=0 phy_rx_polarity_flip_fabric96.BCM8879X=0 -phy_rx_polarity_flip_fabric97.BCM8879X=0 +phy_rx_polarity_flip_fabric97.BCM8879X=1 phy_rx_polarity_flip_fabric98.BCM8879X=0 phy_rx_polarity_flip_fabric99.BCM8879X=1 -phy_rx_polarity_flip_fabric100.BCM8879X=0 -phy_rx_polarity_flip_fabric101.BCM8879X=1 +phy_rx_polarity_flip_fabric100.BCM8879X=1 +phy_rx_polarity_flip_fabric101.BCM8879X=0 phy_rx_polarity_flip_fabric102.BCM8879X=1 -phy_rx_polarity_flip_fabric103.BCM8879X=1 +phy_rx_polarity_flip_fabric103.BCM8879X=0 phy_rx_polarity_flip_fabric104.BCM8879X=0 phy_rx_polarity_flip_fabric105.BCM8879X=1 -phy_rx_polarity_flip_fabric106.BCM8879X=1 +phy_rx_polarity_flip_fabric106.BCM8879X=0 phy_rx_polarity_flip_fabric107.BCM8879X=1 -phy_rx_polarity_flip_fabric108.BCM8879X=1 -phy_rx_polarity_flip_fabric109.BCM8879X=0 -phy_rx_polarity_flip_fabric110.BCM8879X=1 -phy_rx_polarity_flip_fabric111.BCM8879X=0 +phy_rx_polarity_flip_fabric108.BCM8879X=0 +phy_rx_polarity_flip_fabric109.BCM8879X=1 +phy_rx_polarity_flip_fabric110.BCM8879X=0 +phy_rx_polarity_flip_fabric111.BCM8879X=1 -phy_rx_polarity_flip_fabric112.BCM8879X=0 -phy_rx_polarity_flip_fabric113.BCM8879X=1 -phy_rx_polarity_flip_fabric114.BCM8879X=0 -phy_rx_polarity_flip_fabric115.BCM8879X=1 +phy_rx_polarity_flip_fabric112.BCM8879X=1 +phy_rx_polarity_flip_fabric113.BCM8879X=0 +phy_rx_polarity_flip_fabric114.BCM8879X=1 +phy_rx_polarity_flip_fabric115.BCM8879X=0 -phy_rx_polarity_flip_fabric116.BCM8879X=1 -phy_rx_polarity_flip_fabric117.BCM8879X=0 -phy_rx_polarity_flip_fabric118.BCM8879X=1 -phy_rx_polarity_flip_fabric119.BCM8879X=0 +phy_rx_polarity_flip_fabric116.BCM8879X=0 +phy_rx_polarity_flip_fabric117.BCM8879X=1 +phy_rx_polarity_flip_fabric118.BCM8879X=0 +phy_rx_polarity_flip_fabric119.BCM8879X=1 -phy_rx_polarity_flip_fabric120.BCM8879X=0 +phy_rx_polarity_flip_fabric120.BCM8879X=1 phy_rx_polarity_flip_fabric121.BCM8879X=0 -phy_rx_polarity_flip_fabric122.BCM8879X=0 -phy_rx_polarity_flip_fabric123.BCM8879X=1 +phy_rx_polarity_flip_fabric122.BCM8879X=1 +phy_rx_polarity_flip_fabric123.BCM8879X=0 phy_rx_polarity_flip_fabric124.BCM8879X=1 -phy_rx_polarity_flip_fabric125.BCM8879X=1 -phy_rx_polarity_flip_fabric126.BCM8879X=0 -phy_rx_polarity_flip_fabric127.BCM8879X=1 +phy_rx_polarity_flip_fabric125.BCM8879X=0 +phy_rx_polarity_flip_fabric126.BCM8879X=1 +phy_rx_polarity_flip_fabric127.BCM8879X=0 phy_rx_polarity_flip_fabric128.BCM8879X=0 -phy_rx_polarity_flip_fabric129.BCM8879X=0 +phy_rx_polarity_flip_fabric129.BCM8879X=1 phy_rx_polarity_flip_fabric130.BCM8879X=0 phy_rx_polarity_flip_fabric131.BCM8879X=1 @@ -453,25 +454,25 @@ phy_rx_polarity_flip_fabric133.BCM8879X=0 phy_rx_polarity_flip_fabric134.BCM8879X=1 phy_rx_polarity_flip_fabric135.BCM8879X=0 -phy_rx_polarity_flip_fabric136.BCM8879X=1 -phy_rx_polarity_flip_fabric137.BCM8879X=0 -phy_rx_polarity_flip_fabric138.BCM8879X=1 -phy_rx_polarity_flip_fabric139.BCM8879X=0 +phy_rx_polarity_flip_fabric136.BCM8879X=0 +phy_rx_polarity_flip_fabric137.BCM8879X=1 +phy_rx_polarity_flip_fabric138.BCM8879X=0 +phy_rx_polarity_flip_fabric139.BCM8879X=1 -phy_rx_polarity_flip_fabric140.BCM8879X=0 -phy_rx_polarity_flip_fabric141.BCM8879X=1 -phy_rx_polarity_flip_fabric142.BCM8879X=0 -phy_rx_polarity_flip_fabric143.BCM8879X=1 +phy_rx_polarity_flip_fabric140.BCM8879X=1 +phy_rx_polarity_flip_fabric141.BCM8879X=0 +phy_rx_polarity_flip_fabric142.BCM8879X=1 +phy_rx_polarity_flip_fabric143.BCM8879X=0 -phy_rx_polarity_flip_fabric144.BCM8879X=0 -phy_rx_polarity_flip_fabric145.BCM8879X=1 -phy_rx_polarity_flip_fabric146.BCM8879X=0 -phy_rx_polarity_flip_fabric147.BCM8879X=1 +phy_rx_polarity_flip_fabric144.BCM8879X=1 +phy_rx_polarity_flip_fabric145.BCM8879X=0 +phy_rx_polarity_flip_fabric146.BCM8879X=1 +phy_rx_polarity_flip_fabric147.BCM8879X=0 -phy_rx_polarity_flip_fabric148.BCM8879X=1 -phy_rx_polarity_flip_fabric149.BCM8879X=0 -phy_rx_polarity_flip_fabric150.BCM8879X=1 -phy_rx_polarity_flip_fabric151.BCM8879X=0 +phy_rx_polarity_flip_fabric148.BCM8879X=0 +phy_rx_polarity_flip_fabric149.BCM8879X=1 +phy_rx_polarity_flip_fabric150.BCM8879X=0 +phy_rx_polarity_flip_fabric151.BCM8879X=1 phy_rx_polarity_flip_fabric152.BCM8879X=1 phy_rx_polarity_flip_fabric153.BCM8879X=0 @@ -480,28 +481,28 @@ phy_rx_polarity_flip_fabric155.BCM8879X=0 phy_rx_polarity_flip_fabric156.BCM8879X=0 phy_rx_polarity_flip_fabric157.BCM8879X=1 -phy_rx_polarity_flip_fabric158.BCM8879X=1 +phy_rx_polarity_flip_fabric158.BCM8879X=0 phy_rx_polarity_flip_fabric159.BCM8879X=1 -phy_rx_polarity_flip_fabric160.BCM8879X=0 +phy_rx_polarity_flip_fabric160.BCM8879X=1 phy_rx_polarity_flip_fabric161.BCM8879X=0 -phy_rx_polarity_flip_fabric162.BCM8879X=0 -phy_rx_polarity_flip_fabric163.BCM8879X=1 +phy_rx_polarity_flip_fabric162.BCM8879X=1 +phy_rx_polarity_flip_fabric163.BCM8879X=0 -phy_rx_polarity_flip_fabric164.BCM8879X=0 +phy_rx_polarity_flip_fabric164.BCM8879X=1 phy_rx_polarity_flip_fabric165.BCM8879X=0 -phy_rx_polarity_flip_fabric166.BCM8879X=0 -phy_rx_polarity_flip_fabric167.BCM8879X=1 +phy_rx_polarity_flip_fabric166.BCM8879X=1 +phy_rx_polarity_flip_fabric167.BCM8879X=0 -phy_rx_polarity_flip_fabric168.BCM8879X=0 -phy_rx_polarity_flip_fabric169.BCM8879X=1 -phy_rx_polarity_flip_fabric170.BCM8879X=0 -phy_rx_polarity_flip_fabric171.BCM8879X=1 +phy_rx_polarity_flip_fabric168.BCM8879X=1 +phy_rx_polarity_flip_fabric169.BCM8879X=0 +phy_rx_polarity_flip_fabric170.BCM8879X=1 +phy_rx_polarity_flip_fabric171.BCM8879X=0 -phy_rx_polarity_flip_fabric172.BCM8879X=1 -phy_rx_polarity_flip_fabric173.BCM8879X=0 -phy_rx_polarity_flip_fabric174.BCM8879X=1 -phy_rx_polarity_flip_fabric175.BCM8879X=0 +phy_rx_polarity_flip_fabric172.BCM8879X=0 +phy_rx_polarity_flip_fabric173.BCM8879X=1 +phy_rx_polarity_flip_fabric174.BCM8879X=0 +phy_rx_polarity_flip_fabric175.BCM8879X=1 phy_rx_polarity_flip_fabric176.BCM8879X=1 phy_rx_polarity_flip_fabric177.BCM8879X=0 @@ -509,79 +510,80 @@ phy_rx_polarity_flip_fabric178.BCM8879X=1 phy_rx_polarity_flip_fabric179.BCM8879X=0 phy_rx_polarity_flip_fabric180.BCM8879X=0 -phy_rx_polarity_flip_fabric181.BCM8879X=0 +phy_rx_polarity_flip_fabric181.BCM8879X=1 phy_rx_polarity_flip_fabric182.BCM8879X=0 phy_rx_polarity_flip_fabric183.BCM8879X=1 -phy_rx_polarity_flip_fabric184.BCM8879X=0 +phy_rx_polarity_flip_fabric184.BCM8879X=1 phy_rx_polarity_flip_fabric185.BCM8879X=0 -phy_rx_polarity_flip_fabric186.BCM8879X=0 -phy_rx_polarity_flip_fabric187.BCM8879X=1 +phy_rx_polarity_flip_fabric186.BCM8879X=1 +phy_rx_polarity_flip_fabric187.BCM8879X=0 phy_rx_polarity_flip_fabric188.BCM8879X=1 -phy_rx_polarity_flip_fabric189.BCM8879X=1 -phy_rx_polarity_flip_fabric190.BCM8879X=0 -phy_rx_polarity_flip_fabric191.BCM8879X=1 +phy_rx_polarity_flip_fabric189.BCM8879X=0 +phy_rx_polarity_flip_fabric190.BCM8879X=1 +phy_rx_polarity_flip_fabric191.BCM8879X=0 + phy_tx_polarity_flip_fabric0.BCM8879X=0 -phy_tx_polarity_flip_fabric1.BCM8879X=0 -phy_tx_polarity_flip_fabric2.BCM8879X=1 +phy_tx_polarity_flip_fabric1.BCM8879X=1 +phy_tx_polarity_flip_fabric2.BCM8879X=0 phy_tx_polarity_flip_fabric3.BCM8879X=1 -phy_tx_polarity_flip_fabric4.BCM8879X=1 -phy_tx_polarity_flip_fabric5.BCM8879X=0 -phy_tx_polarity_flip_fabric6.BCM8879X=1 -phy_tx_polarity_flip_fabric7.BCM8879X=0 +phy_tx_polarity_flip_fabric4.BCM8879X=0 +phy_tx_polarity_flip_fabric5.BCM8879X=1 +phy_tx_polarity_flip_fabric6.BCM8879X=0 +phy_tx_polarity_flip_fabric7.BCM8879X=1 -phy_tx_polarity_flip_fabric8.BCM8879X=0 +phy_tx_polarity_flip_fabric8.BCM8879X=1 phy_tx_polarity_flip_fabric9.BCM8879X=0 phy_tx_polarity_flip_fabric10.BCM8879X=1 -phy_tx_polarity_flip_fabric11.BCM8879X=1 +phy_tx_polarity_flip_fabric11.BCM8879X=0 phy_tx_polarity_flip_fabric12.BCM8879X=0 -phy_tx_polarity_flip_fabric13.BCM8879X=0 -phy_tx_polarity_flip_fabric14.BCM8879X=1 +phy_tx_polarity_flip_fabric13.BCM8879X=1 +phy_tx_polarity_flip_fabric14.BCM8879X=0 phy_tx_polarity_flip_fabric15.BCM8879X=1 -phy_tx_polarity_flip_fabric16.BCM8879X=1 +phy_tx_polarity_flip_fabric16.BCM8879X=0 phy_tx_polarity_flip_fabric17.BCM8879X=1 phy_tx_polarity_flip_fabric18.BCM8879X=0 -phy_tx_polarity_flip_fabric19.BCM8879X=0 +phy_tx_polarity_flip_fabric19.BCM8879X=1 phy_tx_polarity_flip_fabric20.BCM8879X=1 -phy_tx_polarity_flip_fabric21.BCM8879X=1 -phy_tx_polarity_flip_fabric22.BCM8879X=0 +phy_tx_polarity_flip_fabric21.BCM8879X=0 +phy_tx_polarity_flip_fabric22.BCM8879X=1 phy_tx_polarity_flip_fabric23.BCM8879X=0 -phy_tx_polarity_flip_fabric24.BCM8879X=1 +phy_tx_polarity_flip_fabric24.BCM8879X=0 phy_tx_polarity_flip_fabric25.BCM8879X=1 phy_tx_polarity_flip_fabric26.BCM8879X=0 -phy_tx_polarity_flip_fabric27.BCM8879X=0 +phy_tx_polarity_flip_fabric27.BCM8879X=1 -phy_tx_polarity_flip_fabric28.BCM8879X=1 -phy_tx_polarity_flip_fabric29.BCM8879X=0 +phy_tx_polarity_flip_fabric28.BCM8879X=0 +phy_tx_polarity_flip_fabric29.BCM8879X=1 phy_tx_polarity_flip_fabric30.BCM8879X=0 phy_tx_polarity_flip_fabric31.BCM8879X=1 -phy_tx_polarity_flip_fabric32.BCM8879X=0 +phy_tx_polarity_flip_fabric32.BCM8879X=1 phy_tx_polarity_flip_fabric33.BCM8879X=0 phy_tx_polarity_flip_fabric34.BCM8879X=1 -phy_tx_polarity_flip_fabric35.BCM8879X=1 +phy_tx_polarity_flip_fabric35.BCM8879X=0 -phy_tx_polarity_flip_fabric36.BCM8879X=1 +phy_tx_polarity_flip_fabric36.BCM8879X=0 phy_tx_polarity_flip_fabric37.BCM8879X=1 phy_tx_polarity_flip_fabric38.BCM8879X=0 -phy_tx_polarity_flip_fabric39.BCM8879X=0 +phy_tx_polarity_flip_fabric39.BCM8879X=1 -phy_tx_polarity_flip_fabric40.BCM8879X=0 -phy_tx_polarity_flip_fabric41.BCM8879X=1 +phy_tx_polarity_flip_fabric40.BCM8879X=1 +phy_tx_polarity_flip_fabric41.BCM8879X=0 phy_tx_polarity_flip_fabric42.BCM8879X=1 phy_tx_polarity_flip_fabric43.BCM8879X=0 -phy_tx_polarity_flip_fabric44.BCM8879X=1 +phy_tx_polarity_flip_fabric44.BCM8879X=0 phy_tx_polarity_flip_fabric45.BCM8879X=1 phy_tx_polarity_flip_fabric46.BCM8879X=0 -phy_tx_polarity_flip_fabric47.BCM8879X=0 +phy_tx_polarity_flip_fabric47.BCM8879X=1 phy_tx_polarity_flip_fabric48.BCM8879X=0 phy_tx_polarity_flip_fabric49.BCM8879X=1 @@ -590,43 +592,43 @@ phy_tx_polarity_flip_fabric51.BCM8879X=1 phy_tx_polarity_flip_fabric52.BCM8879X=1 phy_tx_polarity_flip_fabric53.BCM8879X=0 -phy_tx_polarity_flip_fabric54.BCM8879X=0 -phy_tx_polarity_flip_fabric55.BCM8879X=1 +phy_tx_polarity_flip_fabric54.BCM8879X=1 +phy_tx_polarity_flip_fabric55.BCM8879X=0 -phy_tx_polarity_flip_fabric56.BCM8879X=0 -phy_tx_polarity_flip_fabric57.BCM8879X=1 -phy_tx_polarity_flip_fabric58.BCM8879X=0 -phy_tx_polarity_flip_fabric59.BCM8879X=1 +phy_tx_polarity_flip_fabric56.BCM8879X=1 +phy_tx_polarity_flip_fabric57.BCM8879X=0 +phy_tx_polarity_flip_fabric58.BCM8879X=1 +phy_tx_polarity_flip_fabric59.BCM8879X=0 phy_tx_polarity_flip_fabric60.BCM8879X=1 phy_tx_polarity_flip_fabric61.BCM8879X=0 -phy_tx_polarity_flip_fabric62.BCM8879X=0 -phy_tx_polarity_flip_fabric63.BCM8879X=1 +phy_tx_polarity_flip_fabric62.BCM8879X=1 +phy_tx_polarity_flip_fabric63.BCM8879X=0 phy_tx_polarity_flip_fabric64.BCM8879X=1 -phy_tx_polarity_flip_fabric65.BCM8879X=1 -phy_tx_polarity_flip_fabric66.BCM8879X=0 +phy_tx_polarity_flip_fabric65.BCM8879X=0 +phy_tx_polarity_flip_fabric66.BCM8879X=1 phy_tx_polarity_flip_fabric67.BCM8879X=0 -phy_tx_polarity_flip_fabric68.BCM8879X=1 -phy_tx_polarity_flip_fabric69.BCM8879X=0 -phy_tx_polarity_flip_fabric70.BCM8879X=1 -phy_tx_polarity_flip_fabric71.BCM8879X=0 +phy_tx_polarity_flip_fabric68.BCM8879X=0 +phy_tx_polarity_flip_fabric69.BCM8879X=1 +phy_tx_polarity_flip_fabric70.BCM8879X=0 +phy_tx_polarity_flip_fabric71.BCM8879X=1 -phy_tx_polarity_flip_fabric72.BCM8879X=1 +phy_tx_polarity_flip_fabric72.BCM8879X=0 phy_tx_polarity_flip_fabric73.BCM8879X=1 phy_tx_polarity_flip_fabric74.BCM8879X=0 -phy_tx_polarity_flip_fabric75.BCM8879X=0 +phy_tx_polarity_flip_fabric75.BCM8879X=1 phy_tx_polarity_flip_fabric76.BCM8879X=1 -phy_tx_polarity_flip_fabric77.BCM8879X=1 -phy_tx_polarity_flip_fabric78.BCM8879X=0 +phy_tx_polarity_flip_fabric77.BCM8879X=0 +phy_tx_polarity_flip_fabric78.BCM8879X=1 phy_tx_polarity_flip_fabric79.BCM8879X=0 -phy_tx_polarity_flip_fabric80.BCM8879X=1 +phy_tx_polarity_flip_fabric80.BCM8879X=0 phy_tx_polarity_flip_fabric81.BCM8879X=1 phy_tx_polarity_flip_fabric82.BCM8879X=0 -phy_tx_polarity_flip_fabric83.BCM8879X=0 +phy_tx_polarity_flip_fabric83.BCM8879X=1 phy_tx_polarity_flip_fabric84.BCM8879X=1 phy_tx_polarity_flip_fabric85.BCM8879X=0 @@ -634,32 +636,32 @@ phy_tx_polarity_flip_fabric86.BCM8879X=1 phy_tx_polarity_flip_fabric87.BCM8879X=0 phy_tx_polarity_flip_fabric88.BCM8879X=0 -phy_tx_polarity_flip_fabric89.BCM8879X=0 -phy_tx_polarity_flip_fabric90.BCM8879X=1 +phy_tx_polarity_flip_fabric89.BCM8879X=1 +phy_tx_polarity_flip_fabric90.BCM8879X=0 phy_tx_polarity_flip_fabric91.BCM8879X=1 phy_tx_polarity_flip_fabric92.BCM8879X=0 phy_tx_polarity_flip_fabric93.BCM8879X=1 -phy_tx_polarity_flip_fabric94.BCM8879X=1 -phy_tx_polarity_flip_fabric95.BCM8879X=0 +phy_tx_polarity_flip_fabric94.BCM8879X=0 +phy_tx_polarity_flip_fabric95.BCM8879X=1 phy_tx_polarity_flip_fabric96.BCM8879X=1 -phy_tx_polarity_flip_fabric97.BCM8879X=1 -phy_tx_polarity_flip_fabric98.BCM8879X=0 +phy_tx_polarity_flip_fabric97.BCM8879X=0 +phy_tx_polarity_flip_fabric98.BCM8879X=1 phy_tx_polarity_flip_fabric99.BCM8879X=0 phy_tx_polarity_flip_fabric100.BCM8879X=0 -phy_tx_polarity_flip_fabric101.BCM8879X=0 +phy_tx_polarity_flip_fabric101.BCM8879X=1 phy_tx_polarity_flip_fabric102.BCM8879X=0 -phy_tx_polarity_flip_fabric103.BCM8879X=0 +phy_tx_polarity_flip_fabric103.BCM8879X=1 phy_tx_polarity_flip_fabric104.BCM8879X=1 phy_tx_polarity_flip_fabric105.BCM8879X=0 -phy_tx_polarity_flip_fabric106.BCM8879X=0 -phy_tx_polarity_flip_fabric107.BCM8879X=1 +phy_tx_polarity_flip_fabric106.BCM8879X=1 +phy_tx_polarity_flip_fabric107.BCM8879X=0 -phy_tx_polarity_flip_fabric108.BCM8879X=0 -phy_tx_polarity_flip_fabric109.BCM8879X=1 +phy_tx_polarity_flip_fabric108.BCM8879X=1 +phy_tx_polarity_flip_fabric109.BCM8879X=0 phy_tx_polarity_flip_fabric110.BCM8879X=1 phy_tx_polarity_flip_fabric111.BCM8879X=0 @@ -668,35 +670,35 @@ phy_tx_polarity_flip_fabric113.BCM8879X=1 phy_tx_polarity_flip_fabric114.BCM8879X=0 phy_tx_polarity_flip_fabric115.BCM8879X=1 -phy_tx_polarity_flip_fabric116.BCM8879X=0 -phy_tx_polarity_flip_fabric117.BCM8879X=1 -phy_tx_polarity_flip_fabric118.BCM8879X=0 -phy_tx_polarity_flip_fabric119.BCM8879X=1 +phy_tx_polarity_flip_fabric116.BCM8879X=1 +phy_tx_polarity_flip_fabric117.BCM8879X=0 +phy_tx_polarity_flip_fabric118.BCM8879X=1 +phy_tx_polarity_flip_fabric119.BCM8879X=0 -phy_tx_polarity_flip_fabric120.BCM8879X=1 -phy_tx_polarity_flip_fabric121.BCM8879X=0 -phy_tx_polarity_flip_fabric122.BCM8879X=1 -phy_tx_polarity_flip_fabric123.BCM8879X=0 +phy_tx_polarity_flip_fabric120.BCM8879X=0 +phy_tx_polarity_flip_fabric121.BCM8879X=1 +phy_tx_polarity_flip_fabric122.BCM8879X=0 +phy_tx_polarity_flip_fabric123.BCM8879X=1 -phy_tx_polarity_flip_fabric124.BCM8879X=1 -phy_tx_polarity_flip_fabric125.BCM8879X=0 -phy_tx_polarity_flip_fabric126.BCM8879X=1 -phy_tx_polarity_flip_fabric127.BCM8879X=0 +phy_tx_polarity_flip_fabric124.BCM8879X=0 +phy_tx_polarity_flip_fabric125.BCM8879X=1 +phy_tx_polarity_flip_fabric126.BCM8879X=0 +phy_tx_polarity_flip_fabric127.BCM8879X=1 -phy_tx_polarity_flip_fabric128.BCM8879X=0 -phy_tx_polarity_flip_fabric129.BCM8879X=1 -phy_tx_polarity_flip_fabric130.BCM8879X=0 -phy_tx_polarity_flip_fabric131.BCM8879X=1 +phy_tx_polarity_flip_fabric128.BCM8879X=1 +phy_tx_polarity_flip_fabric129.BCM8879X=0 +phy_tx_polarity_flip_fabric130.BCM8879X=1 +phy_tx_polarity_flip_fabric131.BCM8879X=0 phy_tx_polarity_flip_fabric132.BCM8879X=0 phy_tx_polarity_flip_fabric133.BCM8879X=1 phy_tx_polarity_flip_fabric134.BCM8879X=0 phy_tx_polarity_flip_fabric135.BCM8879X=1 -phy_tx_polarity_flip_fabric136.BCM8879X=0 +phy_tx_polarity_flip_fabric136.BCM8879X=1 phy_tx_polarity_flip_fabric137.BCM8879X=0 phy_tx_polarity_flip_fabric138.BCM8879X=1 -phy_tx_polarity_flip_fabric139.BCM8879X=1 +phy_tx_polarity_flip_fabric139.BCM8879X=0 phy_tx_polarity_flip_fabric140.BCM8879X=0 phy_tx_polarity_flip_fabric141.BCM8879X=1 @@ -704,39 +706,39 @@ phy_tx_polarity_flip_fabric142.BCM8879X=0 phy_tx_polarity_flip_fabric143.BCM8879X=1 phy_tx_polarity_flip_fabric144.BCM8879X=0 -phy_tx_polarity_flip_fabric145.BCM8879X=0 -phy_tx_polarity_flip_fabric146.BCM8879X=1 +phy_tx_polarity_flip_fabric145.BCM8879X=1 +phy_tx_polarity_flip_fabric146.BCM8879X=0 phy_tx_polarity_flip_fabric147.BCM8879X=1 -phy_tx_polarity_flip_fabric148.BCM8879X=0 -phy_tx_polarity_flip_fabric149.BCM8879X=1 -phy_tx_polarity_flip_fabric150.BCM8879X=0 -phy_tx_polarity_flip_fabric151.BCM8879X=1 +phy_tx_polarity_flip_fabric148.BCM8879X=1 +phy_tx_polarity_flip_fabric149.BCM8879X=0 +phy_tx_polarity_flip_fabric150.BCM8879X=1 +phy_tx_polarity_flip_fabric151.BCM8879X=0 phy_tx_polarity_flip_fabric152.BCM8879X=0 phy_tx_polarity_flip_fabric153.BCM8879X=1 phy_tx_polarity_flip_fabric154.BCM8879X=0 phy_tx_polarity_flip_fabric155.BCM8879X=1 -phy_tx_polarity_flip_fabric156.BCM8879X=0 +phy_tx_polarity_flip_fabric156.BCM8879X=1 phy_tx_polarity_flip_fabric157.BCM8879X=0 -phy_tx_polarity_flip_fabric158.BCM8879X=0 +phy_tx_polarity_flip_fabric158.BCM8879X=1 phy_tx_polarity_flip_fabric159.BCM8879X=0 -phy_tx_polarity_flip_fabric160.BCM8879X=1 +phy_tx_polarity_flip_fabric160.BCM8879X=0 phy_tx_polarity_flip_fabric161.BCM8879X=1 phy_tx_polarity_flip_fabric162.BCM8879X=0 -phy_tx_polarity_flip_fabric163.BCM8879X=0 +phy_tx_polarity_flip_fabric163.BCM8879X=1 phy_tx_polarity_flip_fabric164.BCM8879X=0 -phy_tx_polarity_flip_fabric165.BCM8879X=0 +phy_tx_polarity_flip_fabric165.BCM8879X=1 phy_tx_polarity_flip_fabric166.BCM8879X=0 -phy_tx_polarity_flip_fabric167.BCM8879X=0 +phy_tx_polarity_flip_fabric167.BCM8879X=1 -phy_tx_polarity_flip_fabric168.BCM8879X=1 +phy_tx_polarity_flip_fabric168.BCM8879X=0 phy_tx_polarity_flip_fabric169.BCM8879X=1 phy_tx_polarity_flip_fabric170.BCM8879X=0 -phy_tx_polarity_flip_fabric171.BCM8879X=0 +phy_tx_polarity_flip_fabric171.BCM8879X=1 phy_tx_polarity_flip_fabric172.BCM8879X=1 phy_tx_polarity_flip_fabric173.BCM8879X=0 @@ -744,25 +746,410 @@ phy_tx_polarity_flip_fabric174.BCM8879X=1 phy_tx_polarity_flip_fabric175.BCM8879X=0 phy_tx_polarity_flip_fabric176.BCM8879X=0 -phy_tx_polarity_flip_fabric177.BCM8879X=0 -phy_tx_polarity_flip_fabric178.BCM8879X=1 +phy_tx_polarity_flip_fabric177.BCM8879X=1 +phy_tx_polarity_flip_fabric178.BCM8879X=0 phy_tx_polarity_flip_fabric179.BCM8879X=1 -phy_tx_polarity_flip_fabric180.BCM8879X=0 +phy_tx_polarity_flip_fabric180.BCM8879X=1 phy_tx_polarity_flip_fabric181.BCM8879X=0 -phy_tx_polarity_flip_fabric182.BCM8879X=0 +phy_tx_polarity_flip_fabric182.BCM8879X=1 phy_tx_polarity_flip_fabric183.BCM8879X=0 -phy_tx_polarity_flip_fabric184.BCM8879X=1 -phy_tx_polarity_flip_fabric185.BCM8879X=0 -phy_tx_polarity_flip_fabric186.BCM8879X=1 -phy_tx_polarity_flip_fabric187.BCM8879X=0 +phy_tx_polarity_flip_fabric184.BCM8879X=0 +phy_tx_polarity_flip_fabric185.BCM8879X=1 +phy_tx_polarity_flip_fabric186.BCM8879X=0 +phy_tx_polarity_flip_fabric187.BCM8879X=1 -phy_tx_polarity_flip_fabric188.BCM8879X=1 -phy_tx_polarity_flip_fabric189.BCM8879X=0 +phy_tx_polarity_flip_fabric188.BCM8879X=0 +phy_tx_polarity_flip_fabric189.BCM8879X=1 phy_tx_polarity_flip_fabric190.BCM8879X=0 phy_tx_polarity_flip_fabric191.BCM8879X=1 +port_init_cl72_0=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 +port_init_cl72_19=0 +port_init_cl72_20=0 +port_init_cl72_21=0 +port_init_cl72_22=0 +port_init_cl72_23=0 +port_init_cl72_24=0 +port_init_cl72_25=0 +port_init_cl72_26=0 +port_init_cl72_27=0 +port_init_cl72_28=0 +port_init_cl72_29=0 +port_init_cl72_30=0 +port_init_cl72_31=0 +port_init_cl72_32=0 +port_init_cl72_33=0 +port_init_cl72_34=0 +port_init_cl72_35=0 +port_init_cl72_36=0 +port_init_cl72_37=0 +port_init_cl72_38=0 +port_init_cl72_39=0 +port_init_cl72_40=0 +port_init_cl72_41=0 +port_init_cl72_42=0 +port_init_cl72_43=0 +port_init_cl72_44=0 +port_init_cl72_45=0 +port_init_cl72_46=0 +port_init_cl72_47=0 +port_init_cl72_48=0 +port_init_cl72_49=0 +port_init_cl72_50=0 +port_init_cl72_51=0 +port_init_cl72_52=0 +port_init_cl72_53=0 +port_init_cl72_54=0 +port_init_cl72_55=0 +port_init_cl72_56=0 +port_init_cl72_57=0 +port_init_cl72_58=0 +port_init_cl72_59=0 +port_init_cl72_60=0 +port_init_cl72_61=0 +port_init_cl72_62=0 +port_init_cl72_63=0 +port_init_cl72_64=0 +port_init_cl72_65=0 +port_init_cl72_66=0 +port_init_cl72_67=0 +port_init_cl72_68=0 +port_init_cl72_69=0 +port_init_cl72_70=0 +port_init_cl72_71=0 +port_init_cl72_72=0 +port_init_cl72_73=0 +port_init_cl72_74=0 +port_init_cl72_75=0 +port_init_cl72_76=0 +port_init_cl72_77=0 +port_init_cl72_78=0 +port_init_cl72_79=0 +port_init_cl72_80=0 +port_init_cl72_81=0 +port_init_cl72_82=0 +port_init_cl72_83=0 +port_init_cl72_84=0 +port_init_cl72_85=0 +port_init_cl72_86=0 +port_init_cl72_87=0 +port_init_cl72_88=0 +port_init_cl72_89=0 +port_init_cl72_90=0 +port_init_cl72_91=0 +port_init_cl72_92=0 +port_init_cl72_93=0 +port_init_cl72_94=0 +port_init_cl72_95=0 +port_init_cl72_96=0 +port_init_cl72_97=0 +port_init_cl72_98=0 +port_init_cl72_99=0 +port_init_cl72_100=0 +port_init_cl72_101=0 +port_init_cl72_102=0 +port_init_cl72_103=0 +port_init_cl72_104=0 +port_init_cl72_105=0 +port_init_cl72_106=0 +port_init_cl72_107=0 +port_init_cl72_108=0 +port_init_cl72_109=0 +port_init_cl72_110=0 +port_init_cl72_111=0 +port_init_cl72_112=0 +port_init_cl72_113=0 +port_init_cl72_114=0 +port_init_cl72_115=0 +port_init_cl72_116=0 +port_init_cl72_117=0 +port_init_cl72_118=0 +port_init_cl72_119=0 +port_init_cl72_120=0 +port_init_cl72_121=0 +port_init_cl72_122=0 +port_init_cl72_123=0 +port_init_cl72_124=0 +port_init_cl72_125=0 +port_init_cl72_126=0 +port_init_cl72_127=0 +port_init_cl72_128=0 +port_init_cl72_129=0 +port_init_cl72_130=0 +port_init_cl72_131=0 +port_init_cl72_132=0 +port_init_cl72_133=0 +port_init_cl72_134=0 +port_init_cl72_135=0 +port_init_cl72_136=0 +port_init_cl72_137=0 +port_init_cl72_138=0 +port_init_cl72_139=0 +port_init_cl72_140=0 +port_init_cl72_141=0 +port_init_cl72_142=0 +port_init_cl72_143=0 +port_init_cl72_144=0 +port_init_cl72_145=0 +port_init_cl72_146=0 +port_init_cl72_147=0 +port_init_cl72_148=0 +port_init_cl72_149=0 +port_init_cl72_150=0 +port_init_cl72_151=0 +port_init_cl72_152=0 +port_init_cl72_153=0 +port_init_cl72_154=0 +port_init_cl72_155=0 +port_init_cl72_156=0 +port_init_cl72_157=0 +port_init_cl72_158=0 +port_init_cl72_159=0 +port_init_cl72_160=0 +port_init_cl72_161=0 +port_init_cl72_162=0 +port_init_cl72_163=0 +port_init_cl72_164=0 +port_init_cl72_165=0 +port_init_cl72_166=0 +port_init_cl72_167=0 +port_init_cl72_168=0 +port_init_cl72_169=0 +port_init_cl72_170=0 +port_init_cl72_171=0 +port_init_cl72_172=0 +port_init_cl72_173=0 +port_init_cl72_174=0 +port_init_cl72_175=0 +port_init_cl72_176=0 +port_init_cl72_177=0 +port_init_cl72_178=0 +port_init_cl72_179=0 +port_init_cl72_180=0 +port_init_cl72_181=0 +port_init_cl72_182=0 +port_init_cl72_183=0 +port_init_cl72_184=0 +port_init_cl72_185=0 +port_init_cl72_186=0 +port_init_cl72_187=0 +port_init_cl72_188=0 +port_init_cl72_189=0 +port_init_cl72_190=0 +port_init_cl72_191=0 + +serdes_tx_taps_0.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_1.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_2.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_3.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_4.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_5.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_6.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_7.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_8.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_9.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_10.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_11.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_12.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_13.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_14.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_15.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_16.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_17.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_18.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_19.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_20.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_21.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_22.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_23.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_24.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_25.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_26.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_27.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_28.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_29.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_30.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_31.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_32.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_33.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_34.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_35.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_36.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_37.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_38.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_39.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_40.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_41.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_42.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_43.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_44.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_45.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_46.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_47.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_48.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_49.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_50.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_51.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_52.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_53.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_54.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_55.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_56.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_57.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_58.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_59.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_60.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_61.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_62.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_63.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_64.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_65.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_66.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_67.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_68.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_69.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_70.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_71.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_72.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_73.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_74.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_75.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_76.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_77.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_78.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_79.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_80.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_81.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_82.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_83.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_84.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_85.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_86.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_87.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_88.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_89.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_90.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_91.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_92.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_93.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_94.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_95.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_96.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_97.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_98.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_99.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_100.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_101.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_102.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_103.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_104.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_105.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_106.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_107.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_108.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_109.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_110.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_111.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_112.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_113.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_114.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_115.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_116.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_117.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_118.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_119.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_120.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_121.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_122.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_123.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_124.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_125.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_126.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_127.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_128.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_129.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_130.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_131.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_132.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_133.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_134.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_135.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_136.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_137.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_138.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_139.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_140.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_141.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_142.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_143.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_144.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_145.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_146.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_147.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_148.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_149.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_150.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_151.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_152.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_153.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_154.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_155.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_156.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_157.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_158.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_159.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_160.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_161.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_162.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_163.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_164.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_165.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_166.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_167.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_168.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_169.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_170.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_171.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_172.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_173.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_174.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_175.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_176.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_177.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_178.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_179.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_180.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_181.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_182.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_183.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_184.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_185.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_186.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_187.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_188.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_189.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_190.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_191.BCM8879X=pam4:-24:132:-12:0:0:0 serdes_lane_config_channel_mode_0.0=force_nr serdes_lane_config_channel_mode_1.0=force_nr diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/2/config-ramon-2-0.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/2/config-ramon-2-0.bcm index 6dca034cb8df..6a5423c5e185 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/2/config-ramon-2-0.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/2/config-ramon-2-0.bcm @@ -1,7 +1,8 @@ + appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=3 bcm_linkscan_interval.BCM8879X=0 -bcm_stat_interval.BCM8879X=0 +bcm_stat_interval.BCM8879X=4000000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 @@ -20,10 +21,10 @@ mdio_output_delay_int.BCM8879X=25 mem_cache_enable_parity.BCM8879X=1 mm_intr_enable.BCM8879X=0 mm_timeout_usec.BCM8879X=300000 -polled_irq_delay.BCM8879X=500000 +polled_irq_delay.BCM8879X=100000 polled_irq_mode.BCM8879X=1 port_fec.BCM8879X=7 -port_init_cl72.BCM8879X=1 +port_init_cl72.BCM8879X=0 port_init_speed.BCM8879X=53125 rate_ext_mdio_divisor.BCM8879X=14 rate_int_mdio_divisor.BCM8879X=50 @@ -42,134 +43,134 @@ tslam_dma_enable.BCM8879X=0 tslam_intr_enable.BCM8879X=0 tslam_timeout_usec.BCM8879X=5000000 -lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx1 -lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx3 +lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx1 lane_to_serdes_map_fabric_lane2.BCM8879X=rx2:tx2 -lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx0 +lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx3 -lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx6 +lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx4 lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx5 -lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx7 -lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx4 +lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx7 -lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx10 -lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx8 -lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx11 -lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx9 +lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx11 -lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx13 -lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx15 +lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx13 lane_to_serdes_map_fabric_lane14.BCM8879X=rx14:tx14 -lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx12 +lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx15 -lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx18 -lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx16 -lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx19 -lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx17 +lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx18 +lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx19 lane_to_serdes_map_fabric_lane20.BCM8879X=rx20:tx20 -lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx22 -lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx23 -lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx21 +lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx23 lane_to_serdes_map_fabric_lane24.BCM8879X=rx24:tx24 -lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx26 -lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx27 -lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx25 +lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx26 +lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx27 -lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx29 -lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx30 -lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx28 +lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx29 +lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx30 lane_to_serdes_map_fabric_lane31.BCM8879X=rx31:tx31 -lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx34 -lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx32 -lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx35 -lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx33 +lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx35 lane_to_serdes_map_fabric_lane36.BCM8879X=rx36:tx36 -lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx38 -lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx39 -lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx37 +lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx39 -lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx43 -lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx42 -lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx40 -lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx41 +lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx40 +lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx41 +lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx42 +lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx43 lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx44 -lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx46 -lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx47 -lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx45 +lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx46 +lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx47 -lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx49 -lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx50 -lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx51 -lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx48 +lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx51 -lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx54 +lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx52 lane_to_serdes_map_fabric_lane53.BCM8879X=rx53:tx53 -lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx55 -lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx52 +lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx55 -lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx58 +lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx56 lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx57 -lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx59 -lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx56 +lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx58 +lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx59 -lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx61 -lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx60 +lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx60 +lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx61 lane_to_serdes_map_fabric_lane62.BCM8879X=rx62:tx62 lane_to_serdes_map_fabric_lane63.BCM8879X=rx63:tx63 lane_to_serdes_map_fabric_lane64.BCM8879X=rx64:tx64 -lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx66 -lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx65 +lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx66 lane_to_serdes_map_fabric_lane67.BCM8879X=rx67:tx67 -lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx69 -lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx70 -lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx71 -lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx68 +lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx71 -lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx74 -lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx72 -lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx75 -lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx73 +lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx72 +lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx75 -lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx78 -lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx76 -lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx79 -lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx77 +lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx76 +lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx77 +lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx78 +lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx79 lane_to_serdes_map_fabric_lane80.BCM8879X=rx80:tx80 -lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx82 -lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx83 -lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx81 +lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx82 +lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx83 -lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx85 -lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx86 -lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx87 -lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx84 +lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx87 -lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx90 -lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx88 -lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx91 -lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx89 +lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx89 +lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx90 +lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx91 -lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx95 -lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx94 -lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx92 -lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx93 +lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx92 +lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx94 +lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx95 lane_to_serdes_map_fabric_lane96.BCM8879X=rx96:tx96 -lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx98 -lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx97 +lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx98 lane_to_serdes_map_fabric_lane99.BCM8879X=rx99:tx99 -lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx101 -lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx102 -lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx100 +lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx102 lane_to_serdes_map_fabric_lane103.BCM8879X=rx103:tx103 lane_to_serdes_map_fabric_lane104.BCM8879X=rx104:tx104 @@ -182,10 +183,10 @@ lane_to_serdes_map_fabric_lane109.BCM8879X=rx109:tx109 lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx110 lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx111 -lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx115 -lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx114 -lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx113 -lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx112 +lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx112 +lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx114 +lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx115 lane_to_serdes_map_fabric_lane116.BCM8879X=rx116:tx116 lane_to_serdes_map_fabric_lane117.BCM8879X=rx117:tx117 @@ -197,15 +198,15 @@ lane_to_serdes_map_fabric_lane121.BCM8879X=rx121:tx121 lane_to_serdes_map_fabric_lane122.BCM8879X=rx122:tx122 lane_to_serdes_map_fabric_lane123.BCM8879X=rx123:tx123 -lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx127 -lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx126 -lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx124 -lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx125 +lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx127 -lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx131 -lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx130 -lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx129 -lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx128 +lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx131 lane_to_serdes_map_fabric_lane132.BCM8879X=rx132:tx132 lane_to_serdes_map_fabric_lane133.BCM8879X=rx133:tx133 @@ -213,23 +214,23 @@ lane_to_serdes_map_fabric_lane134.BCM8879X=rx134:tx134 lane_to_serdes_map_fabric_lane135.BCM8879X=rx135:tx135 lane_to_serdes_map_fabric_lane136.BCM8879X=rx136:tx136 -lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx138 -lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx137 +lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx137 +lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx138 lane_to_serdes_map_fabric_lane139.BCM8879X=rx139:tx139 -lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx143 -lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx142 -lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx141 -lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx140 +lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx140 +lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx143 -lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx145 -lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx147 -lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx144 -lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx146 +lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx147 -lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx150 +lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx148 lane_to_serdes_map_fabric_lane149.BCM8879X=rx149:tx149 -lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx148 +lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx150 lane_to_serdes_map_fabric_lane151.BCM8879X=rx151:tx151 lane_to_serdes_map_fabric_lane152.BCM8879X=rx152:tx152 @@ -237,91 +238,91 @@ lane_to_serdes_map_fabric_lane153.BCM8879X=rx153:tx153 lane_to_serdes_map_fabric_lane154.BCM8879X=rx154:tx154 lane_to_serdes_map_fabric_lane155.BCM8879X=rx155:tx155 -lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx157 -lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx159 -lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx156 -lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx158 +lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx156 +lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx157 +lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx158 +lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx159 lane_to_serdes_map_fabric_lane160.BCM8879X=rx160:tx160 -lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx162 -lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx161 +lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx162 lane_to_serdes_map_fabric_lane163.BCM8879X=rx163:tx163 -lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx166 -lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx164 -lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx165 +lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx166 lane_to_serdes_map_fabric_lane167.BCM8879X=rx167:tx167 -lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx170 -lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx168 -lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx169 +lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx168 +lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx170 lane_to_serdes_map_fabric_lane171.BCM8879X=rx171:tx171 -lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx173 -lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx174 -lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx175 -lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx172 +lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx172 +lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx173 +lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx174 +lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx175 lane_to_serdes_map_fabric_lane176.BCM8879X=rx176:tx176 -lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx178 -lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx177 +lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx178 lane_to_serdes_map_fabric_lane179.BCM8879X=rx179:tx179 -lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx182 -lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx180 -lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx181 +lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx180 +lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx182 lane_to_serdes_map_fabric_lane183.BCM8879X=rx183:tx183 -lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx187 -lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx184 +lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx185 lane_to_serdes_map_fabric_lane186.BCM8879X=rx186:tx186 -lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx185 +lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx187 -lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx190 +lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx188 lane_to_serdes_map_fabric_lane189.BCM8879X=rx189:tx189 -lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx191 -lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx188 +lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx190 +lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx191 -phy_rx_polarity_flip_fabric0.BCM8879X=0 -phy_rx_polarity_flip_fabric1.BCM8879X=1 -phy_rx_polarity_flip_fabric2.BCM8879X=0 -phy_rx_polarity_flip_fabric3.BCM8879X=1 +phy_rx_polarity_flip_fabric0.BCM8879X=1 +phy_rx_polarity_flip_fabric1.BCM8879X=0 +phy_rx_polarity_flip_fabric2.BCM8879X=1 +phy_rx_polarity_flip_fabric3.BCM8879X=0 -phy_rx_polarity_flip_fabric4.BCM8879X=1 -phy_rx_polarity_flip_fabric5.BCM8879X=0 -phy_rx_polarity_flip_fabric6.BCM8879X=1 -phy_rx_polarity_flip_fabric7.BCM8879X=0 +phy_rx_polarity_flip_fabric4.BCM8879X=0 +phy_rx_polarity_flip_fabric5.BCM8879X=1 +phy_rx_polarity_flip_fabric6.BCM8879X=0 +phy_rx_polarity_flip_fabric7.BCM8879X=1 phy_rx_polarity_flip_fabric8.BCM8879X=1 phy_rx_polarity_flip_fabric9.BCM8879X=0 phy_rx_polarity_flip_fabric10.BCM8879X=1 phy_rx_polarity_flip_fabric11.BCM8879X=0 -phy_rx_polarity_flip_fabric12.BCM8879X=1 -phy_rx_polarity_flip_fabric13.BCM8879X=0 +phy_rx_polarity_flip_fabric12.BCM8879X=0 +phy_rx_polarity_flip_fabric13.BCM8879X=1 phy_rx_polarity_flip_fabric14.BCM8879X=0 phy_rx_polarity_flip_fabric15.BCM8879X=1 -phy_rx_polarity_flip_fabric16.BCM8879X=0 -phy_rx_polarity_flip_fabric17.BCM8879X=1 -phy_rx_polarity_flip_fabric18.BCM8879X=0 -phy_rx_polarity_flip_fabric19.BCM8879X=1 +phy_rx_polarity_flip_fabric16.BCM8879X=1 +phy_rx_polarity_flip_fabric17.BCM8879X=0 +phy_rx_polarity_flip_fabric18.BCM8879X=1 +phy_rx_polarity_flip_fabric19.BCM8879X=0 -phy_rx_polarity_flip_fabric20.BCM8879X=0 -phy_rx_polarity_flip_fabric21.BCM8879X=1 +phy_rx_polarity_flip_fabric20.BCM8879X=1 +phy_rx_polarity_flip_fabric21.BCM8879X=0 phy_rx_polarity_flip_fabric22.BCM8879X=1 phy_rx_polarity_flip_fabric23.BCM8879X=0 -phy_rx_polarity_flip_fabric24.BCM8879X=0 -phy_rx_polarity_flip_fabric25.BCM8879X=1 -phy_rx_polarity_flip_fabric26.BCM8879X=0 -phy_rx_polarity_flip_fabric27.BCM8879X=1 +phy_rx_polarity_flip_fabric24.BCM8879X=1 +phy_rx_polarity_flip_fabric25.BCM8879X=0 +phy_rx_polarity_flip_fabric26.BCM8879X=1 +phy_rx_polarity_flip_fabric27.BCM8879X=0 -phy_rx_polarity_flip_fabric28.BCM8879X=1 -phy_rx_polarity_flip_fabric29.BCM8879X=0 -phy_rx_polarity_flip_fabric30.BCM8879X=1 -phy_rx_polarity_flip_fabric31.BCM8879X=0 +phy_rx_polarity_flip_fabric28.BCM8879X=0 +phy_rx_polarity_flip_fabric29.BCM8879X=1 +phy_rx_polarity_flip_fabric30.BCM8879X=0 +phy_rx_polarity_flip_fabric31.BCM8879X=1 phy_rx_polarity_flip_fabric32.BCM8879X=1 phy_rx_polarity_flip_fabric33.BCM8879X=0 @@ -330,11 +331,11 @@ phy_rx_polarity_flip_fabric35.BCM8879X=0 phy_rx_polarity_flip_fabric36.BCM8879X=0 phy_rx_polarity_flip_fabric37.BCM8879X=1 -phy_rx_polarity_flip_fabric38.BCM8879X=1 -phy_rx_polarity_flip_fabric39.BCM8879X=0 +phy_rx_polarity_flip_fabric38.BCM8879X=0 +phy_rx_polarity_flip_fabric39.BCM8879X=1 -phy_rx_polarity_flip_fabric40.BCM8879X=0 -phy_rx_polarity_flip_fabric41.BCM8879X=1 +phy_rx_polarity_flip_fabric40.BCM8879X=1 +phy_rx_polarity_flip_fabric41.BCM8879X=0 phy_rx_polarity_flip_fabric42.BCM8879X=1 phy_rx_polarity_flip_fabric43.BCM8879X=0 @@ -350,63 +351,63 @@ phy_rx_polarity_flip_fabric51.BCM8879X=1 phy_rx_polarity_flip_fabric52.BCM8879X=1 phy_rx_polarity_flip_fabric53.BCM8879X=0 -phy_rx_polarity_flip_fabric54.BCM8879X=0 -phy_rx_polarity_flip_fabric55.BCM8879X=1 +phy_rx_polarity_flip_fabric54.BCM8879X=1 +phy_rx_polarity_flip_fabric55.BCM8879X=0 -phy_rx_polarity_flip_fabric56.BCM8879X=1 -phy_rx_polarity_flip_fabric57.BCM8879X=0 +phy_rx_polarity_flip_fabric56.BCM8879X=0 +phy_rx_polarity_flip_fabric57.BCM8879X=1 phy_rx_polarity_flip_fabric58.BCM8879X=0 phy_rx_polarity_flip_fabric59.BCM8879X=1 -phy_rx_polarity_flip_fabric60.BCM8879X=1 -phy_rx_polarity_flip_fabric61.BCM8879X=0 -phy_rx_polarity_flip_fabric62.BCM8879X=1 -phy_rx_polarity_flip_fabric63.BCM8879X=0 +phy_rx_polarity_flip_fabric60.BCM8879X=0 +phy_rx_polarity_flip_fabric61.BCM8879X=1 +phy_rx_polarity_flip_fabric62.BCM8879X=0 +phy_rx_polarity_flip_fabric63.BCM8879X=1 -phy_rx_polarity_flip_fabric64.BCM8879X=0 -phy_rx_polarity_flip_fabric65.BCM8879X=1 -phy_rx_polarity_flip_fabric66.BCM8879X=0 -phy_rx_polarity_flip_fabric67.BCM8879X=1 +phy_rx_polarity_flip_fabric64.BCM8879X=1 +phy_rx_polarity_flip_fabric65.BCM8879X=0 +phy_rx_polarity_flip_fabric66.BCM8879X=1 +phy_rx_polarity_flip_fabric67.BCM8879X=0 -phy_rx_polarity_flip_fabric68.BCM8879X=1 -phy_rx_polarity_flip_fabric69.BCM8879X=0 -phy_rx_polarity_flip_fabric70.BCM8879X=1 -phy_rx_polarity_flip_fabric71.BCM8879X=0 +phy_rx_polarity_flip_fabric68.BCM8879X=0 +phy_rx_polarity_flip_fabric69.BCM8879X=1 +phy_rx_polarity_flip_fabric70.BCM8879X=0 +phy_rx_polarity_flip_fabric71.BCM8879X=1 -phy_rx_polarity_flip_fabric72.BCM8879X=0 -phy_rx_polarity_flip_fabric73.BCM8879X=1 -phy_rx_polarity_flip_fabric74.BCM8879X=0 -phy_rx_polarity_flip_fabric75.BCM8879X=1 +phy_rx_polarity_flip_fabric72.BCM8879X=1 +phy_rx_polarity_flip_fabric73.BCM8879X=0 +phy_rx_polarity_flip_fabric74.BCM8879X=1 +phy_rx_polarity_flip_fabric75.BCM8879X=0 -phy_rx_polarity_flip_fabric76.BCM8879X=0 -phy_rx_polarity_flip_fabric77.BCM8879X=1 +phy_rx_polarity_flip_fabric76.BCM8879X=1 +phy_rx_polarity_flip_fabric77.BCM8879X=0 phy_rx_polarity_flip_fabric78.BCM8879X=1 phy_rx_polarity_flip_fabric79.BCM8879X=0 phy_rx_polarity_flip_fabric80.BCM8879X=0 phy_rx_polarity_flip_fabric81.BCM8879X=1 -phy_rx_polarity_flip_fabric82.BCM8879X=1 -phy_rx_polarity_flip_fabric83.BCM8879X=0 +phy_rx_polarity_flip_fabric82.BCM8879X=0 +phy_rx_polarity_flip_fabric83.BCM8879X=1 phy_rx_polarity_flip_fabric84.BCM8879X=1 phy_rx_polarity_flip_fabric85.BCM8879X=0 phy_rx_polarity_flip_fabric86.BCM8879X=1 phy_rx_polarity_flip_fabric87.BCM8879X=0 -phy_rx_polarity_flip_fabric88.BCM8879X=1 -phy_rx_polarity_flip_fabric89.BCM8879X=0 -phy_rx_polarity_flip_fabric90.BCM8879X=1 -phy_rx_polarity_flip_fabric91.BCM8879X=0 +phy_rx_polarity_flip_fabric88.BCM8879X=0 +phy_rx_polarity_flip_fabric89.BCM8879X=1 +phy_rx_polarity_flip_fabric90.BCM8879X=0 +phy_rx_polarity_flip_fabric91.BCM8879X=1 -phy_rx_polarity_flip_fabric92.BCM8879X=0 -phy_rx_polarity_flip_fabric93.BCM8879X=1 -phy_rx_polarity_flip_fabric94.BCM8879X=0 -phy_rx_polarity_flip_fabric95.BCM8879X=1 +phy_rx_polarity_flip_fabric92.BCM8879X=1 +phy_rx_polarity_flip_fabric93.BCM8879X=0 +phy_rx_polarity_flip_fabric94.BCM8879X=1 +phy_rx_polarity_flip_fabric95.BCM8879X=0 -phy_rx_polarity_flip_fabric96.BCM8879X=0 -phy_rx_polarity_flip_fabric97.BCM8879X=1 -phy_rx_polarity_flip_fabric98.BCM8879X=0 -phy_rx_polarity_flip_fabric99.BCM8879X=1 +phy_rx_polarity_flip_fabric96.BCM8879X=1 +phy_rx_polarity_flip_fabric97.BCM8879X=0 +phy_rx_polarity_flip_fabric98.BCM8879X=1 +phy_rx_polarity_flip_fabric99.BCM8879X=0 phy_rx_polarity_flip_fabric100.BCM8879X=0 phy_rx_polarity_flip_fabric101.BCM8879X=1 @@ -418,10 +419,10 @@ phy_rx_polarity_flip_fabric105.BCM8879X=1 phy_rx_polarity_flip_fabric106.BCM8879X=0 phy_rx_polarity_flip_fabric107.BCM8879X=1 -phy_rx_polarity_flip_fabric108.BCM8879X=1 -phy_rx_polarity_flip_fabric109.BCM8879X=0 -phy_rx_polarity_flip_fabric110.BCM8879X=1 -phy_rx_polarity_flip_fabric111.BCM8879X=0 +phy_rx_polarity_flip_fabric108.BCM8879X=0 +phy_rx_polarity_flip_fabric109.BCM8879X=1 +phy_rx_polarity_flip_fabric110.BCM8879X=0 +phy_rx_polarity_flip_fabric111.BCM8879X=1 phy_rx_polarity_flip_fabric112.BCM8879X=0 phy_rx_polarity_flip_fabric113.BCM8879X=1 @@ -433,223 +434,223 @@ phy_rx_polarity_flip_fabric117.BCM8879X=0 phy_rx_polarity_flip_fabric118.BCM8879X=1 phy_rx_polarity_flip_fabric119.BCM8879X=0 -phy_rx_polarity_flip_fabric120.BCM8879X=0 -phy_rx_polarity_flip_fabric121.BCM8879X=1 -phy_rx_polarity_flip_fabric122.BCM8879X=0 -phy_rx_polarity_flip_fabric123.BCM8879X=1 +phy_rx_polarity_flip_fabric120.BCM8879X=1 +phy_rx_polarity_flip_fabric121.BCM8879X=0 +phy_rx_polarity_flip_fabric122.BCM8879X=1 +phy_rx_polarity_flip_fabric123.BCM8879X=0 phy_rx_polarity_flip_fabric124.BCM8879X=0 phy_rx_polarity_flip_fabric125.BCM8879X=1 phy_rx_polarity_flip_fabric126.BCM8879X=0 phy_rx_polarity_flip_fabric127.BCM8879X=1 -phy_rx_polarity_flip_fabric128.BCM8879X=0 -phy_rx_polarity_flip_fabric129.BCM8879X=1 -phy_rx_polarity_flip_fabric130.BCM8879X=0 -phy_rx_polarity_flip_fabric131.BCM8879X=1 +phy_rx_polarity_flip_fabric128.BCM8879X=1 +phy_rx_polarity_flip_fabric129.BCM8879X=0 +phy_rx_polarity_flip_fabric130.BCM8879X=1 +phy_rx_polarity_flip_fabric131.BCM8879X=0 -phy_rx_polarity_flip_fabric132.BCM8879X=1 -phy_rx_polarity_flip_fabric133.BCM8879X=0 -phy_rx_polarity_flip_fabric134.BCM8879X=1 -phy_rx_polarity_flip_fabric135.BCM8879X=0 +phy_rx_polarity_flip_fabric132.BCM8879X=0 +phy_rx_polarity_flip_fabric133.BCM8879X=1 +phy_rx_polarity_flip_fabric134.BCM8879X=0 +phy_rx_polarity_flip_fabric135.BCM8879X=1 phy_rx_polarity_flip_fabric136.BCM8879X=1 phy_rx_polarity_flip_fabric137.BCM8879X=0 phy_rx_polarity_flip_fabric138.BCM8879X=1 phy_rx_polarity_flip_fabric139.BCM8879X=0 -phy_rx_polarity_flip_fabric140.BCM8879X=0 -phy_rx_polarity_flip_fabric141.BCM8879X=1 -phy_rx_polarity_flip_fabric142.BCM8879X=0 -phy_rx_polarity_flip_fabric143.BCM8879X=1 +phy_rx_polarity_flip_fabric140.BCM8879X=1 +phy_rx_polarity_flip_fabric141.BCM8879X=0 +phy_rx_polarity_flip_fabric142.BCM8879X=1 +phy_rx_polarity_flip_fabric143.BCM8879X=0 -phy_rx_polarity_flip_fabric144.BCM8879X=0 -phy_rx_polarity_flip_fabric145.BCM8879X=1 -phy_rx_polarity_flip_fabric146.BCM8879X=0 -phy_rx_polarity_flip_fabric147.BCM8879X=1 +phy_rx_polarity_flip_fabric144.BCM8879X=1 +phy_rx_polarity_flip_fabric145.BCM8879X=0 +phy_rx_polarity_flip_fabric146.BCM8879X=1 +phy_rx_polarity_flip_fabric147.BCM8879X=0 phy_rx_polarity_flip_fabric148.BCM8879X=1 phy_rx_polarity_flip_fabric149.BCM8879X=0 phy_rx_polarity_flip_fabric150.BCM8879X=1 phy_rx_polarity_flip_fabric151.BCM8879X=0 -phy_rx_polarity_flip_fabric152.BCM8879X=1 -phy_rx_polarity_flip_fabric153.BCM8879X=0 -phy_rx_polarity_flip_fabric154.BCM8879X=1 -phy_rx_polarity_flip_fabric155.BCM8879X=0 +phy_rx_polarity_flip_fabric152.BCM8879X=0 +phy_rx_polarity_flip_fabric153.BCM8879X=1 +phy_rx_polarity_flip_fabric154.BCM8879X=0 +phy_rx_polarity_flip_fabric155.BCM8879X=1 -phy_rx_polarity_flip_fabric156.BCM8879X=0 -phy_rx_polarity_flip_fabric157.BCM8879X=1 -phy_rx_polarity_flip_fabric158.BCM8879X=0 -phy_rx_polarity_flip_fabric159.BCM8879X=1 +phy_rx_polarity_flip_fabric156.BCM8879X=1 +phy_rx_polarity_flip_fabric157.BCM8879X=0 +phy_rx_polarity_flip_fabric158.BCM8879X=1 +phy_rx_polarity_flip_fabric159.BCM8879X=0 -phy_rx_polarity_flip_fabric160.BCM8879X=0 -phy_rx_polarity_flip_fabric161.BCM8879X=1 -phy_rx_polarity_flip_fabric162.BCM8879X=0 -phy_rx_polarity_flip_fabric163.BCM8879X=1 +phy_rx_polarity_flip_fabric160.BCM8879X=1 +phy_rx_polarity_flip_fabric161.BCM8879X=0 +phy_rx_polarity_flip_fabric162.BCM8879X=1 +phy_rx_polarity_flip_fabric163.BCM8879X=0 phy_rx_polarity_flip_fabric164.BCM8879X=0 phy_rx_polarity_flip_fabric165.BCM8879X=1 phy_rx_polarity_flip_fabric166.BCM8879X=0 phy_rx_polarity_flip_fabric167.BCM8879X=1 -phy_rx_polarity_flip_fabric168.BCM8879X=0 -phy_rx_polarity_flip_fabric169.BCM8879X=1 -phy_rx_polarity_flip_fabric170.BCM8879X=0 -phy_rx_polarity_flip_fabric171.BCM8879X=1 +phy_rx_polarity_flip_fabric168.BCM8879X=1 +phy_rx_polarity_flip_fabric169.BCM8879X=0 +phy_rx_polarity_flip_fabric170.BCM8879X=1 +phy_rx_polarity_flip_fabric171.BCM8879X=0 phy_rx_polarity_flip_fabric172.BCM8879X=1 phy_rx_polarity_flip_fabric173.BCM8879X=0 phy_rx_polarity_flip_fabric174.BCM8879X=1 phy_rx_polarity_flip_fabric175.BCM8879X=0 -phy_rx_polarity_flip_fabric176.BCM8879X=1 -phy_rx_polarity_flip_fabric177.BCM8879X=0 -phy_rx_polarity_flip_fabric178.BCM8879X=1 -phy_rx_polarity_flip_fabric179.BCM8879X=0 +phy_rx_polarity_flip_fabric176.BCM8879X=0 +phy_rx_polarity_flip_fabric177.BCM8879X=1 +phy_rx_polarity_flip_fabric178.BCM8879X=0 +phy_rx_polarity_flip_fabric179.BCM8879X=1 -phy_rx_polarity_flip_fabric180.BCM8879X=0 -phy_rx_polarity_flip_fabric181.BCM8879X=1 -phy_rx_polarity_flip_fabric182.BCM8879X=0 -phy_rx_polarity_flip_fabric183.BCM8879X=1 +phy_rx_polarity_flip_fabric180.BCM8879X=1 +phy_rx_polarity_flip_fabric181.BCM8879X=0 +phy_rx_polarity_flip_fabric182.BCM8879X=1 +phy_rx_polarity_flip_fabric183.BCM8879X=0 phy_rx_polarity_flip_fabric184.BCM8879X=0 phy_rx_polarity_flip_fabric185.BCM8879X=1 phy_rx_polarity_flip_fabric186.BCM8879X=0 phy_rx_polarity_flip_fabric187.BCM8879X=1 -phy_rx_polarity_flip_fabric188.BCM8879X=0 -phy_rx_polarity_flip_fabric189.BCM8879X=1 -phy_rx_polarity_flip_fabric190.BCM8879X=0 -phy_rx_polarity_flip_fabric191.BCM8879X=1 +phy_rx_polarity_flip_fabric188.BCM8879X=1 +phy_rx_polarity_flip_fabric189.BCM8879X=0 +phy_rx_polarity_flip_fabric190.BCM8879X=1 +phy_rx_polarity_flip_fabric191.BCM8879X=0 phy_tx_polarity_flip_fabric0.BCM8879X=0 -phy_tx_polarity_flip_fabric1.BCM8879X=0 -phy_tx_polarity_flip_fabric2.BCM8879X=1 +phy_tx_polarity_flip_fabric1.BCM8879X=1 +phy_tx_polarity_flip_fabric2.BCM8879X=0 phy_tx_polarity_flip_fabric3.BCM8879X=1 -phy_tx_polarity_flip_fabric4.BCM8879X=0 -phy_tx_polarity_flip_fabric5.BCM8879X=1 +phy_tx_polarity_flip_fabric4.BCM8879X=1 +phy_tx_polarity_flip_fabric5.BCM8879X=0 phy_tx_polarity_flip_fabric6.BCM8879X=1 phy_tx_polarity_flip_fabric7.BCM8879X=0 phy_tx_polarity_flip_fabric8.BCM8879X=0 -phy_tx_polarity_flip_fabric9.BCM8879X=0 -phy_tx_polarity_flip_fabric10.BCM8879X=1 +phy_tx_polarity_flip_fabric9.BCM8879X=1 +phy_tx_polarity_flip_fabric10.BCM8879X=0 phy_tx_polarity_flip_fabric11.BCM8879X=1 -phy_tx_polarity_flip_fabric12.BCM8879X=0 -phy_tx_polarity_flip_fabric13.BCM8879X=1 +phy_tx_polarity_flip_fabric12.BCM8879X=1 +phy_tx_polarity_flip_fabric13.BCM8879X=0 phy_tx_polarity_flip_fabric14.BCM8879X=1 -phy_tx_polarity_flip_fabric15.BCM8879X=1 +phy_tx_polarity_flip_fabric15.BCM8879X=0 -phy_tx_polarity_flip_fabric16.BCM8879X=1 +phy_tx_polarity_flip_fabric16.BCM8879X=0 phy_tx_polarity_flip_fabric17.BCM8879X=1 -phy_tx_polarity_flip_fabric18.BCM8879X=1 -phy_tx_polarity_flip_fabric19.BCM8879X=0 +phy_tx_polarity_flip_fabric18.BCM8879X=0 +phy_tx_polarity_flip_fabric19.BCM8879X=1 -phy_tx_polarity_flip_fabric20.BCM8879X=1 +phy_tx_polarity_flip_fabric20.BCM8879X=0 phy_tx_polarity_flip_fabric21.BCM8879X=1 -phy_tx_polarity_flip_fabric22.BCM8879X=1 -phy_tx_polarity_flip_fabric23.BCM8879X=0 +phy_tx_polarity_flip_fabric22.BCM8879X=0 +phy_tx_polarity_flip_fabric23.BCM8879X=1 -phy_tx_polarity_flip_fabric24.BCM8879X=1 +phy_tx_polarity_flip_fabric24.BCM8879X=0 phy_tx_polarity_flip_fabric25.BCM8879X=1 phy_tx_polarity_flip_fabric26.BCM8879X=0 -phy_tx_polarity_flip_fabric27.BCM8879X=0 +phy_tx_polarity_flip_fabric27.BCM8879X=1 phy_tx_polarity_flip_fabric28.BCM8879X=1 phy_tx_polarity_flip_fabric29.BCM8879X=0 -phy_tx_polarity_flip_fabric30.BCM8879X=0 -phy_tx_polarity_flip_fabric31.BCM8879X=1 +phy_tx_polarity_flip_fabric30.BCM8879X=1 +phy_tx_polarity_flip_fabric31.BCM8879X=0 phy_tx_polarity_flip_fabric32.BCM8879X=0 -phy_tx_polarity_flip_fabric33.BCM8879X=0 -phy_tx_polarity_flip_fabric34.BCM8879X=1 +phy_tx_polarity_flip_fabric33.BCM8879X=1 +phy_tx_polarity_flip_fabric34.BCM8879X=0 phy_tx_polarity_flip_fabric35.BCM8879X=1 phy_tx_polarity_flip_fabric36.BCM8879X=1 -phy_tx_polarity_flip_fabric37.BCM8879X=1 +phy_tx_polarity_flip_fabric37.BCM8879X=0 phy_tx_polarity_flip_fabric38.BCM8879X=1 phy_tx_polarity_flip_fabric39.BCM8879X=0 phy_tx_polarity_flip_fabric40.BCM8879X=0 phy_tx_polarity_flip_fabric41.BCM8879X=1 phy_tx_polarity_flip_fabric42.BCM8879X=0 -phy_tx_polarity_flip_fabric43.BCM8879X=0 +phy_tx_polarity_flip_fabric43.BCM8879X=1 -phy_tx_polarity_flip_fabric44.BCM8879X=1 +phy_tx_polarity_flip_fabric44.BCM8879X=0 phy_tx_polarity_flip_fabric45.BCM8879X=1 phy_tx_polarity_flip_fabric46.BCM8879X=0 phy_tx_polarity_flip_fabric47.BCM8879X=1 -phy_tx_polarity_flip_fabric48.BCM8879X=0 -phy_tx_polarity_flip_fabric49.BCM8879X=1 +phy_tx_polarity_flip_fabric48.BCM8879X=1 +phy_tx_polarity_flip_fabric49.BCM8879X=0 phy_tx_polarity_flip_fabric50.BCM8879X=1 -phy_tx_polarity_flip_fabric51.BCM8879X=1 +phy_tx_polarity_flip_fabric51.BCM8879X=0 -phy_tx_polarity_flip_fabric52.BCM8879X=1 +phy_tx_polarity_flip_fabric52.BCM8879X=0 phy_tx_polarity_flip_fabric53.BCM8879X=1 phy_tx_polarity_flip_fabric54.BCM8879X=0 phy_tx_polarity_flip_fabric55.BCM8879X=1 -phy_tx_polarity_flip_fabric56.BCM8879X=0 +phy_tx_polarity_flip_fabric56.BCM8879X=1 phy_tx_polarity_flip_fabric57.BCM8879X=0 -phy_tx_polarity_flip_fabric58.BCM8879X=0 -phy_tx_polarity_flip_fabric59.BCM8879X=1 +phy_tx_polarity_flip_fabric58.BCM8879X=1 +phy_tx_polarity_flip_fabric59.BCM8879X=0 phy_tx_polarity_flip_fabric60.BCM8879X=1 phy_tx_polarity_flip_fabric61.BCM8879X=0 -phy_tx_polarity_flip_fabric62.BCM8879X=0 -phy_tx_polarity_flip_fabric63.BCM8879X=1 +phy_tx_polarity_flip_fabric62.BCM8879X=1 +phy_tx_polarity_flip_fabric63.BCM8879X=0 -phy_tx_polarity_flip_fabric64.BCM8879X=1 +phy_tx_polarity_flip_fabric64.BCM8879X=0 phy_tx_polarity_flip_fabric65.BCM8879X=1 phy_tx_polarity_flip_fabric66.BCM8879X=0 -phy_tx_polarity_flip_fabric67.BCM8879X=0 +phy_tx_polarity_flip_fabric67.BCM8879X=1 phy_tx_polarity_flip_fabric68.BCM8879X=1 phy_tx_polarity_flip_fabric69.BCM8879X=0 phy_tx_polarity_flip_fabric70.BCM8879X=1 phy_tx_polarity_flip_fabric71.BCM8879X=0 -phy_tx_polarity_flip_fabric72.BCM8879X=1 +phy_tx_polarity_flip_fabric72.BCM8879X=0 phy_tx_polarity_flip_fabric73.BCM8879X=1 -phy_tx_polarity_flip_fabric74.BCM8879X=1 -phy_tx_polarity_flip_fabric75.BCM8879X=0 +phy_tx_polarity_flip_fabric74.BCM8879X=0 +phy_tx_polarity_flip_fabric75.BCM8879X=1 -phy_tx_polarity_flip_fabric76.BCM8879X=1 +phy_tx_polarity_flip_fabric76.BCM8879X=0 phy_tx_polarity_flip_fabric77.BCM8879X=1 phy_tx_polarity_flip_fabric78.BCM8879X=0 phy_tx_polarity_flip_fabric79.BCM8879X=1 phy_tx_polarity_flip_fabric80.BCM8879X=1 -phy_tx_polarity_flip_fabric81.BCM8879X=1 -phy_tx_polarity_flip_fabric82.BCM8879X=0 -phy_tx_polarity_flip_fabric83.BCM8879X=1 +phy_tx_polarity_flip_fabric81.BCM8879X=0 +phy_tx_polarity_flip_fabric82.BCM8879X=1 +phy_tx_polarity_flip_fabric83.BCM8879X=0 -phy_tx_polarity_flip_fabric84.BCM8879X=1 -phy_tx_polarity_flip_fabric85.BCM8879X=0 -phy_tx_polarity_flip_fabric86.BCM8879X=1 -phy_tx_polarity_flip_fabric87.BCM8879X=0 +phy_tx_polarity_flip_fabric84.BCM8879X=0 +phy_tx_polarity_flip_fabric85.BCM8879X=1 +phy_tx_polarity_flip_fabric86.BCM8879X=0 +phy_tx_polarity_flip_fabric87.BCM8879X=1 -phy_tx_polarity_flip_fabric88.BCM8879X=0 +phy_tx_polarity_flip_fabric88.BCM8879X=1 phy_tx_polarity_flip_fabric89.BCM8879X=0 phy_tx_polarity_flip_fabric90.BCM8879X=1 -phy_tx_polarity_flip_fabric91.BCM8879X=1 +phy_tx_polarity_flip_fabric91.BCM8879X=0 phy_tx_polarity_flip_fabric92.BCM8879X=0 phy_tx_polarity_flip_fabric93.BCM8879X=1 -phy_tx_polarity_flip_fabric94.BCM8879X=1 -phy_tx_polarity_flip_fabric95.BCM8879X=0 +phy_tx_polarity_flip_fabric94.BCM8879X=0 +phy_tx_polarity_flip_fabric95.BCM8879X=1 -phy_tx_polarity_flip_fabric96.BCM8879X=1 +phy_tx_polarity_flip_fabric96.BCM8879X=0 phy_tx_polarity_flip_fabric97.BCM8879X=1 phy_tx_polarity_flip_fabric98.BCM8879X=0 -phy_tx_polarity_flip_fabric99.BCM8879X=0 +phy_tx_polarity_flip_fabric99.BCM8879X=1 -phy_tx_polarity_flip_fabric100.BCM8879X=0 -phy_tx_polarity_flip_fabric101.BCM8879X=1 +phy_tx_polarity_flip_fabric100.BCM8879X=1 +phy_tx_polarity_flip_fabric101.BCM8879X=0 phy_tx_polarity_flip_fabric102.BCM8879X=1 phy_tx_polarity_flip_fabric103.BCM8879X=0 @@ -658,28 +659,28 @@ phy_tx_polarity_flip_fabric105.BCM8879X=0 phy_tx_polarity_flip_fabric106.BCM8879X=1 phy_tx_polarity_flip_fabric107.BCM8879X=0 -phy_tx_polarity_flip_fabric108.BCM8879X=0 -phy_tx_polarity_flip_fabric109.BCM8879X=1 -phy_tx_polarity_flip_fabric110.BCM8879X=0 -phy_tx_polarity_flip_fabric111.BCM8879X=1 +phy_tx_polarity_flip_fabric108.BCM8879X=1 +phy_tx_polarity_flip_fabric109.BCM8879X=0 +phy_tx_polarity_flip_fabric110.BCM8879X=1 +phy_tx_polarity_flip_fabric111.BCM8879X=0 -phy_tx_polarity_flip_fabric112.BCM8879X=0 -phy_tx_polarity_flip_fabric113.BCM8879X=1 -phy_tx_polarity_flip_fabric114.BCM8879X=0 -phy_tx_polarity_flip_fabric115.BCM8879X=1 +phy_tx_polarity_flip_fabric112.BCM8879X=1 +phy_tx_polarity_flip_fabric113.BCM8879X=0 +phy_tx_polarity_flip_fabric114.BCM8879X=1 +phy_tx_polarity_flip_fabric115.BCM8879X=0 phy_tx_polarity_flip_fabric116.BCM8879X=0 phy_tx_polarity_flip_fabric117.BCM8879X=1 phy_tx_polarity_flip_fabric118.BCM8879X=0 phy_tx_polarity_flip_fabric119.BCM8879X=1 -phy_tx_polarity_flip_fabric120.BCM8879X=1 -phy_tx_polarity_flip_fabric121.BCM8879X=0 -phy_tx_polarity_flip_fabric122.BCM8879X=1 -phy_tx_polarity_flip_fabric123.BCM8879X=0 +phy_tx_polarity_flip_fabric120.BCM8879X=0 +phy_tx_polarity_flip_fabric121.BCM8879X=1 +phy_tx_polarity_flip_fabric122.BCM8879X=0 +phy_tx_polarity_flip_fabric123.BCM8879X=1 -phy_tx_polarity_flip_fabric124.BCM8879X=0 -phy_tx_polarity_flip_fabric125.BCM8879X=1 +phy_tx_polarity_flip_fabric124.BCM8879X=1 +phy_tx_polarity_flip_fabric125.BCM8879X=0 phy_tx_polarity_flip_fabric126.BCM8879X=1 phy_tx_polarity_flip_fabric127.BCM8879X=0 @@ -688,14 +689,14 @@ phy_tx_polarity_flip_fabric129.BCM8879X=1 phy_tx_polarity_flip_fabric130.BCM8879X=0 phy_tx_polarity_flip_fabric131.BCM8879X=1 -phy_tx_polarity_flip_fabric132.BCM8879X=0 -phy_tx_polarity_flip_fabric133.BCM8879X=1 -phy_tx_polarity_flip_fabric134.BCM8879X=0 -phy_tx_polarity_flip_fabric135.BCM8879X=1 +phy_tx_polarity_flip_fabric132.BCM8879X=1 +phy_tx_polarity_flip_fabric133.BCM8879X=0 +phy_tx_polarity_flip_fabric134.BCM8879X=1 +phy_tx_polarity_flip_fabric135.BCM8879X=0 phy_tx_polarity_flip_fabric136.BCM8879X=0 -phy_tx_polarity_flip_fabric137.BCM8879X=0 -phy_tx_polarity_flip_fabric138.BCM8879X=1 +phy_tx_polarity_flip_fabric137.BCM8879X=1 +phy_tx_polarity_flip_fabric138.BCM8879X=0 phy_tx_polarity_flip_fabric139.BCM8879X=1 phy_tx_polarity_flip_fabric140.BCM8879X=0 @@ -704,8 +705,8 @@ phy_tx_polarity_flip_fabric142.BCM8879X=0 phy_tx_polarity_flip_fabric143.BCM8879X=1 phy_tx_polarity_flip_fabric144.BCM8879X=0 -phy_tx_polarity_flip_fabric145.BCM8879X=0 -phy_tx_polarity_flip_fabric146.BCM8879X=1 +phy_tx_polarity_flip_fabric145.BCM8879X=1 +phy_tx_polarity_flip_fabric146.BCM8879X=0 phy_tx_polarity_flip_fabric147.BCM8879X=1 phy_tx_polarity_flip_fabric148.BCM8879X=0 @@ -713,56 +714,441 @@ phy_tx_polarity_flip_fabric149.BCM8879X=1 phy_tx_polarity_flip_fabric150.BCM8879X=0 phy_tx_polarity_flip_fabric151.BCM8879X=1 -phy_tx_polarity_flip_fabric152.BCM8879X=0 -phy_tx_polarity_flip_fabric153.BCM8879X=1 -phy_tx_polarity_flip_fabric154.BCM8879X=0 -phy_tx_polarity_flip_fabric155.BCM8879X=1 +phy_tx_polarity_flip_fabric152.BCM8879X=1 +phy_tx_polarity_flip_fabric153.BCM8879X=0 +phy_tx_polarity_flip_fabric154.BCM8879X=1 +phy_tx_polarity_flip_fabric155.BCM8879X=0 phy_tx_polarity_flip_fabric156.BCM8879X=0 -phy_tx_polarity_flip_fabric157.BCM8879X=0 -phy_tx_polarity_flip_fabric158.BCM8879X=1 +phy_tx_polarity_flip_fabric157.BCM8879X=1 +phy_tx_polarity_flip_fabric158.BCM8879X=0 phy_tx_polarity_flip_fabric159.BCM8879X=1 -phy_tx_polarity_flip_fabric160.BCM8879X=1 +phy_tx_polarity_flip_fabric160.BCM8879X=0 phy_tx_polarity_flip_fabric161.BCM8879X=1 phy_tx_polarity_flip_fabric162.BCM8879X=0 -phy_tx_polarity_flip_fabric163.BCM8879X=0 +phy_tx_polarity_flip_fabric163.BCM8879X=1 phy_tx_polarity_flip_fabric164.BCM8879X=1 -phy_tx_polarity_flip_fabric165.BCM8879X=1 -phy_tx_polarity_flip_fabric166.BCM8879X=0 +phy_tx_polarity_flip_fabric165.BCM8879X=0 +phy_tx_polarity_flip_fabric166.BCM8879X=1 phy_tx_polarity_flip_fabric167.BCM8879X=0 -phy_tx_polarity_flip_fabric168.BCM8879X=1 +phy_tx_polarity_flip_fabric168.BCM8879X=0 phy_tx_polarity_flip_fabric169.BCM8879X=1 phy_tx_polarity_flip_fabric170.BCM8879X=0 -phy_tx_polarity_flip_fabric171.BCM8879X=0 +phy_tx_polarity_flip_fabric171.BCM8879X=1 -phy_tx_polarity_flip_fabric172.BCM8879X=1 -phy_tx_polarity_flip_fabric173.BCM8879X=0 -phy_tx_polarity_flip_fabric174.BCM8879X=1 -phy_tx_polarity_flip_fabric175.BCM8879X=0 +phy_tx_polarity_flip_fabric172.BCM8879X=0 +phy_tx_polarity_flip_fabric173.BCM8879X=1 +phy_tx_polarity_flip_fabric174.BCM8879X=0 +phy_tx_polarity_flip_fabric175.BCM8879X=1 -phy_tx_polarity_flip_fabric176.BCM8879X=0 +phy_tx_polarity_flip_fabric176.BCM8879X=1 phy_tx_polarity_flip_fabric177.BCM8879X=0 phy_tx_polarity_flip_fabric178.BCM8879X=1 -phy_tx_polarity_flip_fabric179.BCM8879X=1 +phy_tx_polarity_flip_fabric179.BCM8879X=0 -phy_tx_polarity_flip_fabric180.BCM8879X=1 +phy_tx_polarity_flip_fabric180.BCM8879X=0 phy_tx_polarity_flip_fabric181.BCM8879X=1 phy_tx_polarity_flip_fabric182.BCM8879X=0 -phy_tx_polarity_flip_fabric183.BCM8879X=0 +phy_tx_polarity_flip_fabric183.BCM8879X=1 -phy_tx_polarity_flip_fabric184.BCM8879X=0 -phy_tx_polarity_flip_fabric185.BCM8879X=1 +phy_tx_polarity_flip_fabric184.BCM8879X=1 +phy_tx_polarity_flip_fabric185.BCM8879X=0 phy_tx_polarity_flip_fabric186.BCM8879X=1 phy_tx_polarity_flip_fabric187.BCM8879X=0 -phy_tx_polarity_flip_fabric188.BCM8879X=1 -phy_tx_polarity_flip_fabric189.BCM8879X=0 +phy_tx_polarity_flip_fabric188.BCM8879X=0 +phy_tx_polarity_flip_fabric189.BCM8879X=1 phy_tx_polarity_flip_fabric190.BCM8879X=0 phy_tx_polarity_flip_fabric191.BCM8879X=1 +port_init_cl72_0=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 +port_init_cl72_19=0 +port_init_cl72_20=0 +port_init_cl72_21=0 +port_init_cl72_22=0 +port_init_cl72_23=0 +port_init_cl72_24=0 +port_init_cl72_25=0 +port_init_cl72_26=0 +port_init_cl72_27=0 +port_init_cl72_28=0 +port_init_cl72_29=0 +port_init_cl72_30=0 +port_init_cl72_31=0 +port_init_cl72_32=0 +port_init_cl72_33=0 +port_init_cl72_34=0 +port_init_cl72_35=0 +port_init_cl72_36=0 +port_init_cl72_37=0 +port_init_cl72_38=0 +port_init_cl72_39=0 +port_init_cl72_40=0 +port_init_cl72_41=0 +port_init_cl72_42=0 +port_init_cl72_43=0 +port_init_cl72_44=0 +port_init_cl72_45=0 +port_init_cl72_46=0 +port_init_cl72_47=0 +port_init_cl72_48=0 +port_init_cl72_49=0 +port_init_cl72_50=0 +port_init_cl72_51=0 +port_init_cl72_52=0 +port_init_cl72_53=0 +port_init_cl72_54=0 +port_init_cl72_55=0 +port_init_cl72_56=0 +port_init_cl72_57=0 +port_init_cl72_58=0 +port_init_cl72_59=0 +port_init_cl72_60=0 +port_init_cl72_61=0 +port_init_cl72_62=0 +port_init_cl72_63=0 +port_init_cl72_64=0 +port_init_cl72_65=0 +port_init_cl72_66=0 +port_init_cl72_67=0 +port_init_cl72_68=0 +port_init_cl72_69=0 +port_init_cl72_70=0 +port_init_cl72_71=0 +port_init_cl72_72=0 +port_init_cl72_73=0 +port_init_cl72_74=0 +port_init_cl72_75=0 +port_init_cl72_76=0 +port_init_cl72_77=0 +port_init_cl72_78=0 +port_init_cl72_79=0 +port_init_cl72_80=0 +port_init_cl72_81=0 +port_init_cl72_82=0 +port_init_cl72_83=0 +port_init_cl72_84=0 +port_init_cl72_85=0 +port_init_cl72_86=0 +port_init_cl72_87=0 +port_init_cl72_88=0 +port_init_cl72_89=0 +port_init_cl72_90=0 +port_init_cl72_91=0 +port_init_cl72_92=0 +port_init_cl72_93=0 +port_init_cl72_94=0 +port_init_cl72_95=0 +port_init_cl72_96=0 +port_init_cl72_97=0 +port_init_cl72_98=0 +port_init_cl72_99=0 +port_init_cl72_100=0 +port_init_cl72_101=0 +port_init_cl72_102=0 +port_init_cl72_103=0 +port_init_cl72_104=0 +port_init_cl72_105=0 +port_init_cl72_106=0 +port_init_cl72_107=0 +port_init_cl72_108=0 +port_init_cl72_109=0 +port_init_cl72_110=0 +port_init_cl72_111=0 +port_init_cl72_112=0 +port_init_cl72_113=0 +port_init_cl72_114=0 +port_init_cl72_115=0 +port_init_cl72_116=0 +port_init_cl72_117=0 +port_init_cl72_118=0 +port_init_cl72_119=0 +port_init_cl72_120=0 +port_init_cl72_121=0 +port_init_cl72_122=0 +port_init_cl72_123=0 +port_init_cl72_124=0 +port_init_cl72_125=0 +port_init_cl72_126=0 +port_init_cl72_127=0 +port_init_cl72_128=0 +port_init_cl72_129=0 +port_init_cl72_130=0 +port_init_cl72_131=0 +port_init_cl72_132=0 +port_init_cl72_133=0 +port_init_cl72_134=0 +port_init_cl72_135=0 +port_init_cl72_136=0 +port_init_cl72_137=0 +port_init_cl72_138=0 +port_init_cl72_139=0 +port_init_cl72_140=0 +port_init_cl72_141=0 +port_init_cl72_142=0 +port_init_cl72_143=0 +port_init_cl72_144=0 +port_init_cl72_145=0 +port_init_cl72_146=0 +port_init_cl72_147=0 +port_init_cl72_148=0 +port_init_cl72_149=0 +port_init_cl72_150=0 +port_init_cl72_151=0 +port_init_cl72_152=0 +port_init_cl72_153=0 +port_init_cl72_154=0 +port_init_cl72_155=0 +port_init_cl72_156=0 +port_init_cl72_157=0 +port_init_cl72_158=0 +port_init_cl72_159=0 +port_init_cl72_160=0 +port_init_cl72_161=0 +port_init_cl72_162=0 +port_init_cl72_163=0 +port_init_cl72_164=0 +port_init_cl72_165=0 +port_init_cl72_166=0 +port_init_cl72_167=0 +port_init_cl72_168=0 +port_init_cl72_169=0 +port_init_cl72_170=0 +port_init_cl72_171=0 +port_init_cl72_172=0 +port_init_cl72_173=0 +port_init_cl72_174=0 +port_init_cl72_175=0 +port_init_cl72_176=0 +port_init_cl72_177=0 +port_init_cl72_178=0 +port_init_cl72_179=0 +port_init_cl72_180=0 +port_init_cl72_181=0 +port_init_cl72_182=0 +port_init_cl72_183=0 +port_init_cl72_184=0 +port_init_cl72_185=0 +port_init_cl72_186=0 +port_init_cl72_187=0 +port_init_cl72_188=0 +port_init_cl72_189=0 +port_init_cl72_190=0 +port_init_cl72_191=0 + +serdes_tx_taps_0.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_1.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_2.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_3.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_4.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_5.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_6.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_7.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_8.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_9.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_10.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_11.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_12.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_13.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_14.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_15.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_16.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_17.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_18.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_19.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_20.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_21.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_22.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_23.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_24.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_25.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_26.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_27.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_28.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_29.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_30.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_31.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_32.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_33.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_34.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_35.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_36.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_37.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_38.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_39.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_40.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_41.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_42.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_43.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_44.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_45.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_46.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_47.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_48.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_49.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_50.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_51.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_52.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_53.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_54.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_55.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_56.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_57.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_58.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_59.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_60.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_61.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_62.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_63.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_64.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_65.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_66.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_67.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_68.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_69.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_70.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_71.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_72.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_73.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_74.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_75.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_76.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_77.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_78.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_79.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_80.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_81.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_82.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_83.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_84.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_85.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_86.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_87.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_88.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_89.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_90.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_91.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_92.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_93.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_94.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_95.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_96.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_97.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_98.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_99.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_100.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_101.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_102.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_103.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_104.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_105.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_106.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_107.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_108.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_109.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_110.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_111.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_112.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_113.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_114.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_115.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_116.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_117.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_118.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_119.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_120.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_121.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_122.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_123.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_124.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_125.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_126.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_127.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_128.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_129.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_130.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_131.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_132.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_133.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_134.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_135.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_136.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_137.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_138.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_139.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_140.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_141.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_142.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_143.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_144.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_145.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_146.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_147.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_148.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_149.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_150.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_151.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_152.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_153.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_154.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_155.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_156.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_157.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_158.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_159.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_160.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_161.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_162.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_163.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_164.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_165.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_166.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_167.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_168.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_169.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_170.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_171.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_172.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_173.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_174.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_175.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_176.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_177.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_178.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_179.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_180.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_181.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_182.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_183.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_184.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_185.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_186.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_187.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_188.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_189.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_190.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_191.BCM8879X=pam4:-24:132:-12:0:0:0 serdes_lane_config_channel_mode_0.0=force_nr serdes_lane_config_channel_mode_1.0=force_nr diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/3/config-ramon-2-1.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/3/config-ramon-2-1.bcm index 2e7a379ffc6f..a13d25a0264f 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/3/config-ramon-2-1.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/3/config-ramon-2-1.bcm @@ -1,7 +1,8 @@ + appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=4 bcm_linkscan_interval.BCM8879X=0 -bcm_stat_interval.BCM8879X=0 +bcm_stat_interval.BCM8879X=4000000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 @@ -20,10 +21,10 @@ mdio_output_delay_int.BCM8879X=25 mem_cache_enable_parity.BCM8879X=1 mm_intr_enable.BCM8879X=0 mm_timeout_usec.BCM8879X=300000 -polled_irq_delay.BCM8879X=500000 +polled_irq_delay.BCM8879X=100000 polled_irq_mode.BCM8879X=1 port_fec.BCM8879X=7 -port_init_cl72.BCM8879X=1 +port_init_cl72.BCM8879X=0 port_init_speed.BCM8879X=53125 rate_ext_mdio_divisor.BCM8879X=14 rate_int_mdio_divisor.BCM8879X=50 @@ -42,134 +43,134 @@ tslam_dma_enable.BCM8879X=0 tslam_intr_enable.BCM8879X=0 tslam_timeout_usec.BCM8879X=5000000 -lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx1 -lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx3 +lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx1 lane_to_serdes_map_fabric_lane2.BCM8879X=rx2:tx2 -lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx0 +lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx3 -lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx5 -lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx6 -lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx7 -lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx4 +lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx4 +lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx5 +lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx7 -lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx10 -lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx8 -lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx11 -lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx9 +lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx11 -lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx13 -lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx15 +lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx13 lane_to_serdes_map_fabric_lane14.BCM8879X=rx14:tx14 -lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx12 +lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx15 -lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx18 -lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx16 -lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx17 +lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx18 lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx19 lane_to_serdes_map_fabric_lane20.BCM8879X=rx20:tx20 -lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx22 -lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx23 -lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx21 +lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx23 lane_to_serdes_map_fabric_lane24.BCM8879X=rx24:tx24 -lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx26 -lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx27 -lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx25 +lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx26 +lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx27 -lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx29 -lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx30 -lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx28 +lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx29 +lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx30 lane_to_serdes_map_fabric_lane31.BCM8879X=rx31:tx31 -lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx34 -lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx32 -lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx35 -lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx33 +lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx35 lane_to_serdes_map_fabric_lane36.BCM8879X=rx36:tx36 -lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx38 -lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx39 -lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx37 - -lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx43 -lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx42 -lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx40 -lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx41 - -lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx46 -lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx44 -lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx45 +lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx39 + +lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx40 +lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx41 +lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx42 +lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx43 + +lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx44 +lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx46 lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx47 -lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx49 -lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx50 -lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx51 -lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx48 +lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx51 -lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx54 +lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx52 lane_to_serdes_map_fabric_lane53.BCM8879X=rx53:tx53 -lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx55 -lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx52 +lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx55 -lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx57 -lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx58 -lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx59 -lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx56 +lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx56 +lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx57 +lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx58 +lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx59 -lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx61 -lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx60 +lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx60 +lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx61 lane_to_serdes_map_fabric_lane62.BCM8879X=rx62:tx62 lane_to_serdes_map_fabric_lane63.BCM8879X=rx63:tx63 lane_to_serdes_map_fabric_lane64.BCM8879X=rx64:tx64 -lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx66 -lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx65 +lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx66 lane_to_serdes_map_fabric_lane67.BCM8879X=rx67:tx67 -lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx69 -lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx70 -lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx71 -lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx68 +lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx71 -lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx74 -lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx72 -lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx75 -lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx73 +lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx72 +lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx75 -lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx78 -lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx76 -lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx79 -lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx77 +lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx76 +lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx77 +lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx78 +lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx79 lane_to_serdes_map_fabric_lane80.BCM8879X=rx80:tx80 -lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx82 -lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx81 +lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx82 lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx83 -lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx85 -lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx86 -lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx87 -lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx84 +lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx87 -lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx90 -lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx88 -lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx91 -lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx89 +lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx89 +lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx90 +lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx91 -lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx95 -lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx94 -lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx92 -lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx93 +lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx92 +lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx94 +lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx95 lane_to_serdes_map_fabric_lane96.BCM8879X=rx96:tx96 -lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx98 -lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx97 +lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx98 lane_to_serdes_map_fabric_lane99.BCM8879X=rx99:tx99 -lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx101 -lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx102 -lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx100 +lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx102 lane_to_serdes_map_fabric_lane103.BCM8879X=rx103:tx103 lane_to_serdes_map_fabric_lane104.BCM8879X=rx104:tx104 @@ -179,13 +180,13 @@ lane_to_serdes_map_fabric_lane107.BCM8879X=rx107:tx107 lane_to_serdes_map_fabric_lane108.BCM8879X=rx108:tx108 lane_to_serdes_map_fabric_lane109.BCM8879X=rx109:tx109 -lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx111 -lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx110 +lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx110 +lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx111 -lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx115 -lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx114 -lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx113 -lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx112 +lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx112 +lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx114 +lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx115 lane_to_serdes_map_fabric_lane116.BCM8879X=rx116:tx116 lane_to_serdes_map_fabric_lane117.BCM8879X=rx117:tx117 @@ -197,15 +198,15 @@ lane_to_serdes_map_fabric_lane121.BCM8879X=rx121:tx121 lane_to_serdes_map_fabric_lane122.BCM8879X=rx122:tx122 lane_to_serdes_map_fabric_lane123.BCM8879X=rx123:tx123 -lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx127 -lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx126 -lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx124 -lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx125 +lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx127 -lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx130 -lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx131 -lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx129 -lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx128 +lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx131 lane_to_serdes_map_fabric_lane132.BCM8879X=rx132:tx132 lane_to_serdes_map_fabric_lane133.BCM8879X=rx133:tx133 @@ -213,23 +214,23 @@ lane_to_serdes_map_fabric_lane134.BCM8879X=rx134:tx134 lane_to_serdes_map_fabric_lane135.BCM8879X=rx135:tx135 lane_to_serdes_map_fabric_lane136.BCM8879X=rx136:tx136 -lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx138 -lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx137 +lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx137 +lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx138 lane_to_serdes_map_fabric_lane139.BCM8879X=rx139:tx139 -lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx143 -lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx142 -lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx141 -lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx140 +lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx140 +lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx143 -lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx145 -lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx147 -lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx144 -lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx146 +lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx147 -lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx150 +lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx148 lane_to_serdes_map_fabric_lane149.BCM8879X=rx149:tx149 -lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx148 +lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx150 lane_to_serdes_map_fabric_lane151.BCM8879X=rx151:tx151 lane_to_serdes_map_fabric_lane152.BCM8879X=rx152:tx152 @@ -237,116 +238,116 @@ lane_to_serdes_map_fabric_lane153.BCM8879X=rx153:tx153 lane_to_serdes_map_fabric_lane154.BCM8879X=rx154:tx154 lane_to_serdes_map_fabric_lane155.BCM8879X=rx155:tx155 -lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx157 -lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx159 +lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx156 +lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx157 lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx158 -lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx156 +lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx159 lane_to_serdes_map_fabric_lane160.BCM8879X=rx160:tx160 -lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx162 -lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx161 +lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx162 lane_to_serdes_map_fabric_lane163.BCM8879X=rx163:tx163 -lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx166 -lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx164 -lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx165 +lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx166 lane_to_serdes_map_fabric_lane167.BCM8879X=rx167:tx167 -lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx170 -lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx168 -lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx169 +lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx168 +lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx170 lane_to_serdes_map_fabric_lane171.BCM8879X=rx171:tx171 -lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx173 -lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx174 -lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx175 -lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx172 +lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx172 +lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx173 +lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx174 +lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx175 lane_to_serdes_map_fabric_lane176.BCM8879X=rx176:tx176 -lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx178 -lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx177 +lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx178 lane_to_serdes_map_fabric_lane179.BCM8879X=rx179:tx179 lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx180 -lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx182 -lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx181 +lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx182 lane_to_serdes_map_fabric_lane183.BCM8879X=rx183:tx183 -lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx187 -lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx184 +lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx185 lane_to_serdes_map_fabric_lane186.BCM8879X=rx186:tx186 -lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx185 +lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx187 -lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx190 +lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx188 lane_to_serdes_map_fabric_lane189.BCM8879X=rx189:tx189 -lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx191 -lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx188 +lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx190 +lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx191 -phy_rx_polarity_flip_fabric0.BCM8879X=0 -phy_rx_polarity_flip_fabric1.BCM8879X=1 -phy_rx_polarity_flip_fabric2.BCM8879X=0 -phy_rx_polarity_flip_fabric3.BCM8879X=1 +phy_rx_polarity_flip_fabric0.BCM8879X=1 +phy_rx_polarity_flip_fabric1.BCM8879X=0 +phy_rx_polarity_flip_fabric2.BCM8879X=1 +phy_rx_polarity_flip_fabric3.BCM8879X=0 phy_rx_polarity_flip_fabric4.BCM8879X=1 phy_rx_polarity_flip_fabric5.BCM8879X=0 phy_rx_polarity_flip_fabric6.BCM8879X=1 phy_rx_polarity_flip_fabric7.BCM8879X=0 -phy_rx_polarity_flip_fabric8.BCM8879X=1 -phy_rx_polarity_flip_fabric9.BCM8879X=0 -phy_rx_polarity_flip_fabric10.BCM8879X=1 -phy_rx_polarity_flip_fabric11.BCM8879X=0 +phy_rx_polarity_flip_fabric8.BCM8879X=0 +phy_rx_polarity_flip_fabric9.BCM8879X=1 +phy_rx_polarity_flip_fabric10.BCM8879X=0 +phy_rx_polarity_flip_fabric11.BCM8879X=1 -phy_rx_polarity_flip_fabric12.BCM8879X=0 -phy_rx_polarity_flip_fabric13.BCM8879X=1 -phy_rx_polarity_flip_fabric14.BCM8879X=0 -phy_rx_polarity_flip_fabric15.BCM8879X=1 +phy_rx_polarity_flip_fabric12.BCM8879X=1 +phy_rx_polarity_flip_fabric13.BCM8879X=0 +phy_rx_polarity_flip_fabric14.BCM8879X=1 +phy_rx_polarity_flip_fabric15.BCM8879X=0 -phy_rx_polarity_flip_fabric16.BCM8879X=0 -phy_rx_polarity_flip_fabric17.BCM8879X=1 -phy_rx_polarity_flip_fabric18.BCM8879X=0 -phy_rx_polarity_flip_fabric19.BCM8879X=1 +phy_rx_polarity_flip_fabric16.BCM8879X=1 +phy_rx_polarity_flip_fabric17.BCM8879X=0 +phy_rx_polarity_flip_fabric18.BCM8879X=1 +phy_rx_polarity_flip_fabric19.BCM8879X=0 phy_rx_polarity_flip_fabric20.BCM8879X=0 phy_rx_polarity_flip_fabric21.BCM8879X=1 phy_rx_polarity_flip_fabric22.BCM8879X=0 phy_rx_polarity_flip_fabric23.BCM8879X=1 -phy_rx_polarity_flip_fabric24.BCM8879X=0 -phy_rx_polarity_flip_fabric25.BCM8879X=1 -phy_rx_polarity_flip_fabric26.BCM8879X=0 -phy_rx_polarity_flip_fabric27.BCM8879X=1 +phy_rx_polarity_flip_fabric24.BCM8879X=1 +phy_rx_polarity_flip_fabric25.BCM8879X=0 +phy_rx_polarity_flip_fabric26.BCM8879X=1 +phy_rx_polarity_flip_fabric27.BCM8879X=0 phy_rx_polarity_flip_fabric28.BCM8879X=1 phy_rx_polarity_flip_fabric29.BCM8879X=0 phy_rx_polarity_flip_fabric30.BCM8879X=1 phy_rx_polarity_flip_fabric31.BCM8879X=0 -phy_rx_polarity_flip_fabric32.BCM8879X=1 -phy_rx_polarity_flip_fabric33.BCM8879X=0 -phy_rx_polarity_flip_fabric34.BCM8879X=1 -phy_rx_polarity_flip_fabric35.BCM8879X=0 +phy_rx_polarity_flip_fabric32.BCM8879X=0 +phy_rx_polarity_flip_fabric33.BCM8879X=1 +phy_rx_polarity_flip_fabric34.BCM8879X=0 +phy_rx_polarity_flip_fabric35.BCM8879X=1 -phy_rx_polarity_flip_fabric36.BCM8879X=0 -phy_rx_polarity_flip_fabric37.BCM8879X=1 -phy_rx_polarity_flip_fabric38.BCM8879X=0 -phy_rx_polarity_flip_fabric39.BCM8879X=1 +phy_rx_polarity_flip_fabric36.BCM8879X=1 +phy_rx_polarity_flip_fabric37.BCM8879X=0 +phy_rx_polarity_flip_fabric38.BCM8879X=1 +phy_rx_polarity_flip_fabric39.BCM8879X=0 phy_rx_polarity_flip_fabric40.BCM8879X=0 phy_rx_polarity_flip_fabric41.BCM8879X=1 phy_rx_polarity_flip_fabric42.BCM8879X=0 phy_rx_polarity_flip_fabric43.BCM8879X=1 -phy_rx_polarity_flip_fabric44.BCM8879X=0 -phy_rx_polarity_flip_fabric45.BCM8879X=1 -phy_rx_polarity_flip_fabric46.BCM8879X=0 -phy_rx_polarity_flip_fabric47.BCM8879X=1 +phy_rx_polarity_flip_fabric44.BCM8879X=1 +phy_rx_polarity_flip_fabric45.BCM8879X=0 +phy_rx_polarity_flip_fabric46.BCM8879X=1 +phy_rx_polarity_flip_fabric47.BCM8879X=0 -phy_rx_polarity_flip_fabric48.BCM8879X=0 -phy_rx_polarity_flip_fabric49.BCM8879X=1 -phy_rx_polarity_flip_fabric50.BCM8879X=0 -phy_rx_polarity_flip_fabric51.BCM8879X=1 +phy_rx_polarity_flip_fabric48.BCM8879X=1 +phy_rx_polarity_flip_fabric49.BCM8879X=0 +phy_rx_polarity_flip_fabric50.BCM8879X=1 +phy_rx_polarity_flip_fabric51.BCM8879X=0 phy_rx_polarity_flip_fabric52.BCM8879X=0 phy_rx_polarity_flip_fabric53.BCM8879X=1 @@ -358,10 +359,10 @@ phy_rx_polarity_flip_fabric57.BCM8879X=1 phy_rx_polarity_flip_fabric58.BCM8879X=0 phy_rx_polarity_flip_fabric59.BCM8879X=1 -phy_rx_polarity_flip_fabric60.BCM8879X=1 -phy_rx_polarity_flip_fabric61.BCM8879X=0 -phy_rx_polarity_flip_fabric62.BCM8879X=1 -phy_rx_polarity_flip_fabric63.BCM8879X=0 +phy_rx_polarity_flip_fabric60.BCM8879X=0 +phy_rx_polarity_flip_fabric61.BCM8879X=1 +phy_rx_polarity_flip_fabric62.BCM8879X=0 +phy_rx_polarity_flip_fabric63.BCM8879X=1 phy_rx_polarity_flip_fabric64.BCM8879X=0 phy_rx_polarity_flip_fabric65.BCM8879X=1 @@ -373,78 +374,78 @@ phy_rx_polarity_flip_fabric69.BCM8879X=0 phy_rx_polarity_flip_fabric70.BCM8879X=1 phy_rx_polarity_flip_fabric71.BCM8879X=0 -phy_rx_polarity_flip_fabric72.BCM8879X=0 -phy_rx_polarity_flip_fabric73.BCM8879X=1 -phy_rx_polarity_flip_fabric74.BCM8879X=0 -phy_rx_polarity_flip_fabric75.BCM8879X=1 +phy_rx_polarity_flip_fabric72.BCM8879X=1 +phy_rx_polarity_flip_fabric73.BCM8879X=0 +phy_rx_polarity_flip_fabric74.BCM8879X=1 +phy_rx_polarity_flip_fabric75.BCM8879X=0 phy_rx_polarity_flip_fabric76.BCM8879X=0 phy_rx_polarity_flip_fabric77.BCM8879X=1 phy_rx_polarity_flip_fabric78.BCM8879X=0 phy_rx_polarity_flip_fabric79.BCM8879X=1 -phy_rx_polarity_flip_fabric80.BCM8879X=0 -phy_rx_polarity_flip_fabric81.BCM8879X=1 -phy_rx_polarity_flip_fabric82.BCM8879X=0 -phy_rx_polarity_flip_fabric83.BCM8879X=1 +phy_rx_polarity_flip_fabric80.BCM8879X=1 +phy_rx_polarity_flip_fabric81.BCM8879X=0 +phy_rx_polarity_flip_fabric82.BCM8879X=1 +phy_rx_polarity_flip_fabric83.BCM8879X=0 -phy_rx_polarity_flip_fabric84.BCM8879X=1 -phy_rx_polarity_flip_fabric85.BCM8879X=0 -phy_rx_polarity_flip_fabric86.BCM8879X=1 -phy_rx_polarity_flip_fabric87.BCM8879X=0 +phy_rx_polarity_flip_fabric84.BCM8879X=0 +phy_rx_polarity_flip_fabric85.BCM8879X=1 +phy_rx_polarity_flip_fabric86.BCM8879X=0 +phy_rx_polarity_flip_fabric87.BCM8879X=1 phy_rx_polarity_flip_fabric88.BCM8879X=1 phy_rx_polarity_flip_fabric89.BCM8879X=0 phy_rx_polarity_flip_fabric90.BCM8879X=1 phy_rx_polarity_flip_fabric91.BCM8879X=0 -phy_rx_polarity_flip_fabric92.BCM8879X=0 -phy_rx_polarity_flip_fabric93.BCM8879X=1 -phy_rx_polarity_flip_fabric94.BCM8879X=0 -phy_rx_polarity_flip_fabric95.BCM8879X=1 +phy_rx_polarity_flip_fabric92.BCM8879X=1 +phy_rx_polarity_flip_fabric93.BCM8879X=0 +phy_rx_polarity_flip_fabric94.BCM8879X=1 +phy_rx_polarity_flip_fabric95.BCM8879X=0 phy_rx_polarity_flip_fabric96.BCM8879X=0 -phy_rx_polarity_flip_fabric97.BCM8879X=0 +phy_rx_polarity_flip_fabric97.BCM8879X=1 phy_rx_polarity_flip_fabric98.BCM8879X=0 phy_rx_polarity_flip_fabric99.BCM8879X=1 -phy_rx_polarity_flip_fabric100.BCM8879X=0 -phy_rx_polarity_flip_fabric101.BCM8879X=1 +phy_rx_polarity_flip_fabric100.BCM8879X=1 +phy_rx_polarity_flip_fabric101.BCM8879X=0 phy_rx_polarity_flip_fabric102.BCM8879X=1 -phy_rx_polarity_flip_fabric103.BCM8879X=1 +phy_rx_polarity_flip_fabric103.BCM8879X=0 phy_rx_polarity_flip_fabric104.BCM8879X=0 phy_rx_polarity_flip_fabric105.BCM8879X=1 -phy_rx_polarity_flip_fabric106.BCM8879X=1 +phy_rx_polarity_flip_fabric106.BCM8879X=0 phy_rx_polarity_flip_fabric107.BCM8879X=1 -phy_rx_polarity_flip_fabric108.BCM8879X=1 -phy_rx_polarity_flip_fabric109.BCM8879X=0 -phy_rx_polarity_flip_fabric110.BCM8879X=1 -phy_rx_polarity_flip_fabric111.BCM8879X=0 +phy_rx_polarity_flip_fabric108.BCM8879X=0 +phy_rx_polarity_flip_fabric109.BCM8879X=1 +phy_rx_polarity_flip_fabric110.BCM8879X=0 +phy_rx_polarity_flip_fabric111.BCM8879X=1 -phy_rx_polarity_flip_fabric112.BCM8879X=0 -phy_rx_polarity_flip_fabric113.BCM8879X=1 -phy_rx_polarity_flip_fabric114.BCM8879X=0 -phy_rx_polarity_flip_fabric115.BCM8879X=1 +phy_rx_polarity_flip_fabric112.BCM8879X=1 +phy_rx_polarity_flip_fabric113.BCM8879X=0 +phy_rx_polarity_flip_fabric114.BCM8879X=1 +phy_rx_polarity_flip_fabric115.BCM8879X=0 -phy_rx_polarity_flip_fabric116.BCM8879X=1 -phy_rx_polarity_flip_fabric117.BCM8879X=0 -phy_rx_polarity_flip_fabric118.BCM8879X=1 -phy_rx_polarity_flip_fabric119.BCM8879X=0 +phy_rx_polarity_flip_fabric116.BCM8879X=0 +phy_rx_polarity_flip_fabric117.BCM8879X=1 +phy_rx_polarity_flip_fabric118.BCM8879X=0 +phy_rx_polarity_flip_fabric119.BCM8879X=1 -phy_rx_polarity_flip_fabric120.BCM8879X=0 +phy_rx_polarity_flip_fabric120.BCM8879X=1 phy_rx_polarity_flip_fabric121.BCM8879X=0 -phy_rx_polarity_flip_fabric122.BCM8879X=0 -phy_rx_polarity_flip_fabric123.BCM8879X=1 +phy_rx_polarity_flip_fabric122.BCM8879X=1 +phy_rx_polarity_flip_fabric123.BCM8879X=0 phy_rx_polarity_flip_fabric124.BCM8879X=1 -phy_rx_polarity_flip_fabric125.BCM8879X=1 -phy_rx_polarity_flip_fabric126.BCM8879X=0 -phy_rx_polarity_flip_fabric127.BCM8879X=1 +phy_rx_polarity_flip_fabric125.BCM8879X=0 +phy_rx_polarity_flip_fabric126.BCM8879X=1 +phy_rx_polarity_flip_fabric127.BCM8879X=0 phy_rx_polarity_flip_fabric128.BCM8879X=0 -phy_rx_polarity_flip_fabric129.BCM8879X=0 +phy_rx_polarity_flip_fabric129.BCM8879X=1 phy_rx_polarity_flip_fabric130.BCM8879X=0 phy_rx_polarity_flip_fabric131.BCM8879X=1 @@ -453,25 +454,25 @@ phy_rx_polarity_flip_fabric133.BCM8879X=0 phy_rx_polarity_flip_fabric134.BCM8879X=1 phy_rx_polarity_flip_fabric135.BCM8879X=0 -phy_rx_polarity_flip_fabric136.BCM8879X=1 -phy_rx_polarity_flip_fabric137.BCM8879X=0 -phy_rx_polarity_flip_fabric138.BCM8879X=1 -phy_rx_polarity_flip_fabric139.BCM8879X=0 +phy_rx_polarity_flip_fabric136.BCM8879X=0 +phy_rx_polarity_flip_fabric137.BCM8879X=1 +phy_rx_polarity_flip_fabric138.BCM8879X=0 +phy_rx_polarity_flip_fabric139.BCM8879X=1 -phy_rx_polarity_flip_fabric140.BCM8879X=0 -phy_rx_polarity_flip_fabric141.BCM8879X=1 -phy_rx_polarity_flip_fabric142.BCM8879X=0 -phy_rx_polarity_flip_fabric143.BCM8879X=1 +phy_rx_polarity_flip_fabric140.BCM8879X=1 +phy_rx_polarity_flip_fabric141.BCM8879X=0 +phy_rx_polarity_flip_fabric142.BCM8879X=1 +phy_rx_polarity_flip_fabric143.BCM8879X=0 -phy_rx_polarity_flip_fabric144.BCM8879X=0 -phy_rx_polarity_flip_fabric145.BCM8879X=1 -phy_rx_polarity_flip_fabric146.BCM8879X=0 -phy_rx_polarity_flip_fabric147.BCM8879X=1 +phy_rx_polarity_flip_fabric144.BCM8879X=1 +phy_rx_polarity_flip_fabric145.BCM8879X=0 +phy_rx_polarity_flip_fabric146.BCM8879X=1 +phy_rx_polarity_flip_fabric147.BCM8879X=0 -phy_rx_polarity_flip_fabric148.BCM8879X=1 -phy_rx_polarity_flip_fabric149.BCM8879X=0 -phy_rx_polarity_flip_fabric150.BCM8879X=1 -phy_rx_polarity_flip_fabric151.BCM8879X=0 +phy_rx_polarity_flip_fabric148.BCM8879X=0 +phy_rx_polarity_flip_fabric149.BCM8879X=1 +phy_rx_polarity_flip_fabric150.BCM8879X=0 +phy_rx_polarity_flip_fabric151.BCM8879X=1 phy_rx_polarity_flip_fabric152.BCM8879X=1 phy_rx_polarity_flip_fabric153.BCM8879X=0 @@ -480,28 +481,28 @@ phy_rx_polarity_flip_fabric155.BCM8879X=0 phy_rx_polarity_flip_fabric156.BCM8879X=0 phy_rx_polarity_flip_fabric157.BCM8879X=1 -phy_rx_polarity_flip_fabric158.BCM8879X=1 +phy_rx_polarity_flip_fabric158.BCM8879X=0 phy_rx_polarity_flip_fabric159.BCM8879X=1 -phy_rx_polarity_flip_fabric160.BCM8879X=0 +phy_rx_polarity_flip_fabric160.BCM8879X=1 phy_rx_polarity_flip_fabric161.BCM8879X=0 -phy_rx_polarity_flip_fabric162.BCM8879X=0 -phy_rx_polarity_flip_fabric163.BCM8879X=1 +phy_rx_polarity_flip_fabric162.BCM8879X=1 +phy_rx_polarity_flip_fabric163.BCM8879X=0 -phy_rx_polarity_flip_fabric164.BCM8879X=0 +phy_rx_polarity_flip_fabric164.BCM8879X=1 phy_rx_polarity_flip_fabric165.BCM8879X=0 -phy_rx_polarity_flip_fabric166.BCM8879X=0 -phy_rx_polarity_flip_fabric167.BCM8879X=1 +phy_rx_polarity_flip_fabric166.BCM8879X=1 +phy_rx_polarity_flip_fabric167.BCM8879X=0 -phy_rx_polarity_flip_fabric168.BCM8879X=0 -phy_rx_polarity_flip_fabric169.BCM8879X=1 -phy_rx_polarity_flip_fabric170.BCM8879X=0 -phy_rx_polarity_flip_fabric171.BCM8879X=1 +phy_rx_polarity_flip_fabric168.BCM8879X=1 +phy_rx_polarity_flip_fabric169.BCM8879X=0 +phy_rx_polarity_flip_fabric170.BCM8879X=1 +phy_rx_polarity_flip_fabric171.BCM8879X=0 -phy_rx_polarity_flip_fabric172.BCM8879X=1 -phy_rx_polarity_flip_fabric173.BCM8879X=0 -phy_rx_polarity_flip_fabric174.BCM8879X=1 -phy_rx_polarity_flip_fabric175.BCM8879X=0 +phy_rx_polarity_flip_fabric172.BCM8879X=0 +phy_rx_polarity_flip_fabric173.BCM8879X=1 +phy_rx_polarity_flip_fabric174.BCM8879X=0 +phy_rx_polarity_flip_fabric175.BCM8879X=1 phy_rx_polarity_flip_fabric176.BCM8879X=1 phy_rx_polarity_flip_fabric177.BCM8879X=0 @@ -509,79 +510,80 @@ phy_rx_polarity_flip_fabric178.BCM8879X=1 phy_rx_polarity_flip_fabric179.BCM8879X=0 phy_rx_polarity_flip_fabric180.BCM8879X=0 -phy_rx_polarity_flip_fabric181.BCM8879X=0 +phy_rx_polarity_flip_fabric181.BCM8879X=1 phy_rx_polarity_flip_fabric182.BCM8879X=0 phy_rx_polarity_flip_fabric183.BCM8879X=1 -phy_rx_polarity_flip_fabric184.BCM8879X=0 +phy_rx_polarity_flip_fabric184.BCM8879X=1 phy_rx_polarity_flip_fabric185.BCM8879X=0 -phy_rx_polarity_flip_fabric186.BCM8879X=0 -phy_rx_polarity_flip_fabric187.BCM8879X=1 +phy_rx_polarity_flip_fabric186.BCM8879X=1 +phy_rx_polarity_flip_fabric187.BCM8879X=0 phy_rx_polarity_flip_fabric188.BCM8879X=1 -phy_rx_polarity_flip_fabric189.BCM8879X=1 -phy_rx_polarity_flip_fabric190.BCM8879X=0 -phy_rx_polarity_flip_fabric191.BCM8879X=1 +phy_rx_polarity_flip_fabric189.BCM8879X=0 +phy_rx_polarity_flip_fabric190.BCM8879X=1 +phy_rx_polarity_flip_fabric191.BCM8879X=0 + phy_tx_polarity_flip_fabric0.BCM8879X=0 -phy_tx_polarity_flip_fabric1.BCM8879X=0 -phy_tx_polarity_flip_fabric2.BCM8879X=1 +phy_tx_polarity_flip_fabric1.BCM8879X=1 +phy_tx_polarity_flip_fabric2.BCM8879X=0 phy_tx_polarity_flip_fabric3.BCM8879X=1 -phy_tx_polarity_flip_fabric4.BCM8879X=1 -phy_tx_polarity_flip_fabric5.BCM8879X=0 -phy_tx_polarity_flip_fabric6.BCM8879X=1 -phy_tx_polarity_flip_fabric7.BCM8879X=0 +phy_tx_polarity_flip_fabric4.BCM8879X=0 +phy_tx_polarity_flip_fabric5.BCM8879X=1 +phy_tx_polarity_flip_fabric6.BCM8879X=0 +phy_tx_polarity_flip_fabric7.BCM8879X=1 -phy_tx_polarity_flip_fabric8.BCM8879X=0 +phy_tx_polarity_flip_fabric8.BCM8879X=1 phy_tx_polarity_flip_fabric9.BCM8879X=0 phy_tx_polarity_flip_fabric10.BCM8879X=1 -phy_tx_polarity_flip_fabric11.BCM8879X=1 +phy_tx_polarity_flip_fabric11.BCM8879X=0 phy_tx_polarity_flip_fabric12.BCM8879X=0 -phy_tx_polarity_flip_fabric13.BCM8879X=0 -phy_tx_polarity_flip_fabric14.BCM8879X=1 +phy_tx_polarity_flip_fabric13.BCM8879X=1 +phy_tx_polarity_flip_fabric14.BCM8879X=0 phy_tx_polarity_flip_fabric15.BCM8879X=1 -phy_tx_polarity_flip_fabric16.BCM8879X=1 +phy_tx_polarity_flip_fabric16.BCM8879X=0 phy_tx_polarity_flip_fabric17.BCM8879X=1 phy_tx_polarity_flip_fabric18.BCM8879X=0 -phy_tx_polarity_flip_fabric19.BCM8879X=0 +phy_tx_polarity_flip_fabric19.BCM8879X=1 phy_tx_polarity_flip_fabric20.BCM8879X=1 -phy_tx_polarity_flip_fabric21.BCM8879X=1 -phy_tx_polarity_flip_fabric22.BCM8879X=0 +phy_tx_polarity_flip_fabric21.BCM8879X=0 +phy_tx_polarity_flip_fabric22.BCM8879X=1 phy_tx_polarity_flip_fabric23.BCM8879X=0 -phy_tx_polarity_flip_fabric24.BCM8879X=1 +phy_tx_polarity_flip_fabric24.BCM8879X=0 phy_tx_polarity_flip_fabric25.BCM8879X=1 phy_tx_polarity_flip_fabric26.BCM8879X=0 -phy_tx_polarity_flip_fabric27.BCM8879X=0 +phy_tx_polarity_flip_fabric27.BCM8879X=1 -phy_tx_polarity_flip_fabric28.BCM8879X=1 -phy_tx_polarity_flip_fabric29.BCM8879X=0 +phy_tx_polarity_flip_fabric28.BCM8879X=0 +phy_tx_polarity_flip_fabric29.BCM8879X=1 phy_tx_polarity_flip_fabric30.BCM8879X=0 phy_tx_polarity_flip_fabric31.BCM8879X=1 -phy_tx_polarity_flip_fabric32.BCM8879X=0 +phy_tx_polarity_flip_fabric32.BCM8879X=1 phy_tx_polarity_flip_fabric33.BCM8879X=0 phy_tx_polarity_flip_fabric34.BCM8879X=1 -phy_tx_polarity_flip_fabric35.BCM8879X=1 +phy_tx_polarity_flip_fabric35.BCM8879X=0 -phy_tx_polarity_flip_fabric36.BCM8879X=1 +phy_tx_polarity_flip_fabric36.BCM8879X=0 phy_tx_polarity_flip_fabric37.BCM8879X=1 phy_tx_polarity_flip_fabric38.BCM8879X=0 -phy_tx_polarity_flip_fabric39.BCM8879X=0 +phy_tx_polarity_flip_fabric39.BCM8879X=1 -phy_tx_polarity_flip_fabric40.BCM8879X=0 -phy_tx_polarity_flip_fabric41.BCM8879X=1 +phy_tx_polarity_flip_fabric40.BCM8879X=1 +phy_tx_polarity_flip_fabric41.BCM8879X=0 phy_tx_polarity_flip_fabric42.BCM8879X=1 phy_tx_polarity_flip_fabric43.BCM8879X=0 -phy_tx_polarity_flip_fabric44.BCM8879X=1 +phy_tx_polarity_flip_fabric44.BCM8879X=0 phy_tx_polarity_flip_fabric45.BCM8879X=1 phy_tx_polarity_flip_fabric46.BCM8879X=0 -phy_tx_polarity_flip_fabric47.BCM8879X=0 +phy_tx_polarity_flip_fabric47.BCM8879X=1 phy_tx_polarity_flip_fabric48.BCM8879X=0 phy_tx_polarity_flip_fabric49.BCM8879X=1 @@ -590,43 +592,43 @@ phy_tx_polarity_flip_fabric51.BCM8879X=1 phy_tx_polarity_flip_fabric52.BCM8879X=1 phy_tx_polarity_flip_fabric53.BCM8879X=0 -phy_tx_polarity_flip_fabric54.BCM8879X=0 -phy_tx_polarity_flip_fabric55.BCM8879X=1 +phy_tx_polarity_flip_fabric54.BCM8879X=1 +phy_tx_polarity_flip_fabric55.BCM8879X=0 -phy_tx_polarity_flip_fabric56.BCM8879X=0 -phy_tx_polarity_flip_fabric57.BCM8879X=1 -phy_tx_polarity_flip_fabric58.BCM8879X=0 -phy_tx_polarity_flip_fabric59.BCM8879X=1 +phy_tx_polarity_flip_fabric56.BCM8879X=1 +phy_tx_polarity_flip_fabric57.BCM8879X=0 +phy_tx_polarity_flip_fabric58.BCM8879X=1 +phy_tx_polarity_flip_fabric59.BCM8879X=0 phy_tx_polarity_flip_fabric60.BCM8879X=1 phy_tx_polarity_flip_fabric61.BCM8879X=0 -phy_tx_polarity_flip_fabric62.BCM8879X=0 -phy_tx_polarity_flip_fabric63.BCM8879X=1 +phy_tx_polarity_flip_fabric62.BCM8879X=1 +phy_tx_polarity_flip_fabric63.BCM8879X=0 phy_tx_polarity_flip_fabric64.BCM8879X=1 -phy_tx_polarity_flip_fabric65.BCM8879X=1 -phy_tx_polarity_flip_fabric66.BCM8879X=0 +phy_tx_polarity_flip_fabric65.BCM8879X=0 +phy_tx_polarity_flip_fabric66.BCM8879X=1 phy_tx_polarity_flip_fabric67.BCM8879X=0 -phy_tx_polarity_flip_fabric68.BCM8879X=1 -phy_tx_polarity_flip_fabric69.BCM8879X=0 -phy_tx_polarity_flip_fabric70.BCM8879X=1 -phy_tx_polarity_flip_fabric71.BCM8879X=0 +phy_tx_polarity_flip_fabric68.BCM8879X=0 +phy_tx_polarity_flip_fabric69.BCM8879X=1 +phy_tx_polarity_flip_fabric70.BCM8879X=0 +phy_tx_polarity_flip_fabric71.BCM8879X=1 -phy_tx_polarity_flip_fabric72.BCM8879X=1 +phy_tx_polarity_flip_fabric72.BCM8879X=0 phy_tx_polarity_flip_fabric73.BCM8879X=1 phy_tx_polarity_flip_fabric74.BCM8879X=0 -phy_tx_polarity_flip_fabric75.BCM8879X=0 +phy_tx_polarity_flip_fabric75.BCM8879X=1 phy_tx_polarity_flip_fabric76.BCM8879X=1 -phy_tx_polarity_flip_fabric77.BCM8879X=1 -phy_tx_polarity_flip_fabric78.BCM8879X=0 +phy_tx_polarity_flip_fabric77.BCM8879X=0 +phy_tx_polarity_flip_fabric78.BCM8879X=1 phy_tx_polarity_flip_fabric79.BCM8879X=0 -phy_tx_polarity_flip_fabric80.BCM8879X=1 +phy_tx_polarity_flip_fabric80.BCM8879X=0 phy_tx_polarity_flip_fabric81.BCM8879X=1 phy_tx_polarity_flip_fabric82.BCM8879X=0 -phy_tx_polarity_flip_fabric83.BCM8879X=0 +phy_tx_polarity_flip_fabric83.BCM8879X=1 phy_tx_polarity_flip_fabric84.BCM8879X=1 phy_tx_polarity_flip_fabric85.BCM8879X=0 @@ -634,32 +636,32 @@ phy_tx_polarity_flip_fabric86.BCM8879X=1 phy_tx_polarity_flip_fabric87.BCM8879X=0 phy_tx_polarity_flip_fabric88.BCM8879X=0 -phy_tx_polarity_flip_fabric89.BCM8879X=0 -phy_tx_polarity_flip_fabric90.BCM8879X=1 +phy_tx_polarity_flip_fabric89.BCM8879X=1 +phy_tx_polarity_flip_fabric90.BCM8879X=0 phy_tx_polarity_flip_fabric91.BCM8879X=1 phy_tx_polarity_flip_fabric92.BCM8879X=0 phy_tx_polarity_flip_fabric93.BCM8879X=1 -phy_tx_polarity_flip_fabric94.BCM8879X=1 -phy_tx_polarity_flip_fabric95.BCM8879X=0 +phy_tx_polarity_flip_fabric94.BCM8879X=0 +phy_tx_polarity_flip_fabric95.BCM8879X=1 phy_tx_polarity_flip_fabric96.BCM8879X=1 -phy_tx_polarity_flip_fabric97.BCM8879X=1 -phy_tx_polarity_flip_fabric98.BCM8879X=0 +phy_tx_polarity_flip_fabric97.BCM8879X=0 +phy_tx_polarity_flip_fabric98.BCM8879X=1 phy_tx_polarity_flip_fabric99.BCM8879X=0 phy_tx_polarity_flip_fabric100.BCM8879X=0 -phy_tx_polarity_flip_fabric101.BCM8879X=0 +phy_tx_polarity_flip_fabric101.BCM8879X=1 phy_tx_polarity_flip_fabric102.BCM8879X=0 -phy_tx_polarity_flip_fabric103.BCM8879X=0 +phy_tx_polarity_flip_fabric103.BCM8879X=1 phy_tx_polarity_flip_fabric104.BCM8879X=1 phy_tx_polarity_flip_fabric105.BCM8879X=0 -phy_tx_polarity_flip_fabric106.BCM8879X=0 -phy_tx_polarity_flip_fabric107.BCM8879X=1 +phy_tx_polarity_flip_fabric106.BCM8879X=1 +phy_tx_polarity_flip_fabric107.BCM8879X=0 -phy_tx_polarity_flip_fabric108.BCM8879X=0 -phy_tx_polarity_flip_fabric109.BCM8879X=1 +phy_tx_polarity_flip_fabric108.BCM8879X=1 +phy_tx_polarity_flip_fabric109.BCM8879X=0 phy_tx_polarity_flip_fabric110.BCM8879X=1 phy_tx_polarity_flip_fabric111.BCM8879X=0 @@ -668,35 +670,35 @@ phy_tx_polarity_flip_fabric113.BCM8879X=1 phy_tx_polarity_flip_fabric114.BCM8879X=0 phy_tx_polarity_flip_fabric115.BCM8879X=1 -phy_tx_polarity_flip_fabric116.BCM8879X=0 -phy_tx_polarity_flip_fabric117.BCM8879X=1 -phy_tx_polarity_flip_fabric118.BCM8879X=0 -phy_tx_polarity_flip_fabric119.BCM8879X=1 +phy_tx_polarity_flip_fabric116.BCM8879X=1 +phy_tx_polarity_flip_fabric117.BCM8879X=0 +phy_tx_polarity_flip_fabric118.BCM8879X=1 +phy_tx_polarity_flip_fabric119.BCM8879X=0 -phy_tx_polarity_flip_fabric120.BCM8879X=1 -phy_tx_polarity_flip_fabric121.BCM8879X=0 -phy_tx_polarity_flip_fabric122.BCM8879X=1 -phy_tx_polarity_flip_fabric123.BCM8879X=0 +phy_tx_polarity_flip_fabric120.BCM8879X=0 +phy_tx_polarity_flip_fabric121.BCM8879X=1 +phy_tx_polarity_flip_fabric122.BCM8879X=0 +phy_tx_polarity_flip_fabric123.BCM8879X=1 -phy_tx_polarity_flip_fabric124.BCM8879X=1 -phy_tx_polarity_flip_fabric125.BCM8879X=0 -phy_tx_polarity_flip_fabric126.BCM8879X=1 -phy_tx_polarity_flip_fabric127.BCM8879X=0 +phy_tx_polarity_flip_fabric124.BCM8879X=0 +phy_tx_polarity_flip_fabric125.BCM8879X=1 +phy_tx_polarity_flip_fabric126.BCM8879X=0 +phy_tx_polarity_flip_fabric127.BCM8879X=1 -phy_tx_polarity_flip_fabric128.BCM8879X=0 -phy_tx_polarity_flip_fabric129.BCM8879X=1 -phy_tx_polarity_flip_fabric130.BCM8879X=0 -phy_tx_polarity_flip_fabric131.BCM8879X=1 +phy_tx_polarity_flip_fabric128.BCM8879X=1 +phy_tx_polarity_flip_fabric129.BCM8879X=0 +phy_tx_polarity_flip_fabric130.BCM8879X=1 +phy_tx_polarity_flip_fabric131.BCM8879X=0 phy_tx_polarity_flip_fabric132.BCM8879X=0 phy_tx_polarity_flip_fabric133.BCM8879X=1 phy_tx_polarity_flip_fabric134.BCM8879X=0 phy_tx_polarity_flip_fabric135.BCM8879X=1 -phy_tx_polarity_flip_fabric136.BCM8879X=0 +phy_tx_polarity_flip_fabric136.BCM8879X=1 phy_tx_polarity_flip_fabric137.BCM8879X=0 phy_tx_polarity_flip_fabric138.BCM8879X=1 -phy_tx_polarity_flip_fabric139.BCM8879X=1 +phy_tx_polarity_flip_fabric139.BCM8879X=0 phy_tx_polarity_flip_fabric140.BCM8879X=0 phy_tx_polarity_flip_fabric141.BCM8879X=1 @@ -704,39 +706,39 @@ phy_tx_polarity_flip_fabric142.BCM8879X=0 phy_tx_polarity_flip_fabric143.BCM8879X=1 phy_tx_polarity_flip_fabric144.BCM8879X=0 -phy_tx_polarity_flip_fabric145.BCM8879X=0 -phy_tx_polarity_flip_fabric146.BCM8879X=1 +phy_tx_polarity_flip_fabric145.BCM8879X=1 +phy_tx_polarity_flip_fabric146.BCM8879X=0 phy_tx_polarity_flip_fabric147.BCM8879X=1 -phy_tx_polarity_flip_fabric148.BCM8879X=0 -phy_tx_polarity_flip_fabric149.BCM8879X=1 -phy_tx_polarity_flip_fabric150.BCM8879X=0 -phy_tx_polarity_flip_fabric151.BCM8879X=1 +phy_tx_polarity_flip_fabric148.BCM8879X=1 +phy_tx_polarity_flip_fabric149.BCM8879X=0 +phy_tx_polarity_flip_fabric150.BCM8879X=1 +phy_tx_polarity_flip_fabric151.BCM8879X=0 phy_tx_polarity_flip_fabric152.BCM8879X=0 phy_tx_polarity_flip_fabric153.BCM8879X=1 phy_tx_polarity_flip_fabric154.BCM8879X=0 phy_tx_polarity_flip_fabric155.BCM8879X=1 -phy_tx_polarity_flip_fabric156.BCM8879X=0 +phy_tx_polarity_flip_fabric156.BCM8879X=1 phy_tx_polarity_flip_fabric157.BCM8879X=0 -phy_tx_polarity_flip_fabric158.BCM8879X=0 +phy_tx_polarity_flip_fabric158.BCM8879X=1 phy_tx_polarity_flip_fabric159.BCM8879X=0 -phy_tx_polarity_flip_fabric160.BCM8879X=1 +phy_tx_polarity_flip_fabric160.BCM8879X=0 phy_tx_polarity_flip_fabric161.BCM8879X=1 phy_tx_polarity_flip_fabric162.BCM8879X=0 -phy_tx_polarity_flip_fabric163.BCM8879X=0 +phy_tx_polarity_flip_fabric163.BCM8879X=1 phy_tx_polarity_flip_fabric164.BCM8879X=0 -phy_tx_polarity_flip_fabric165.BCM8879X=0 +phy_tx_polarity_flip_fabric165.BCM8879X=1 phy_tx_polarity_flip_fabric166.BCM8879X=0 -phy_tx_polarity_flip_fabric167.BCM8879X=0 +phy_tx_polarity_flip_fabric167.BCM8879X=1 -phy_tx_polarity_flip_fabric168.BCM8879X=1 +phy_tx_polarity_flip_fabric168.BCM8879X=0 phy_tx_polarity_flip_fabric169.BCM8879X=1 phy_tx_polarity_flip_fabric170.BCM8879X=0 -phy_tx_polarity_flip_fabric171.BCM8879X=0 +phy_tx_polarity_flip_fabric171.BCM8879X=1 phy_tx_polarity_flip_fabric172.BCM8879X=1 phy_tx_polarity_flip_fabric173.BCM8879X=0 @@ -744,25 +746,410 @@ phy_tx_polarity_flip_fabric174.BCM8879X=1 phy_tx_polarity_flip_fabric175.BCM8879X=0 phy_tx_polarity_flip_fabric176.BCM8879X=0 -phy_tx_polarity_flip_fabric177.BCM8879X=0 -phy_tx_polarity_flip_fabric178.BCM8879X=1 +phy_tx_polarity_flip_fabric177.BCM8879X=1 +phy_tx_polarity_flip_fabric178.BCM8879X=0 phy_tx_polarity_flip_fabric179.BCM8879X=1 -phy_tx_polarity_flip_fabric180.BCM8879X=0 +phy_tx_polarity_flip_fabric180.BCM8879X=1 phy_tx_polarity_flip_fabric181.BCM8879X=0 -phy_tx_polarity_flip_fabric182.BCM8879X=0 +phy_tx_polarity_flip_fabric182.BCM8879X=1 phy_tx_polarity_flip_fabric183.BCM8879X=0 -phy_tx_polarity_flip_fabric184.BCM8879X=1 -phy_tx_polarity_flip_fabric185.BCM8879X=0 -phy_tx_polarity_flip_fabric186.BCM8879X=1 -phy_tx_polarity_flip_fabric187.BCM8879X=0 +phy_tx_polarity_flip_fabric184.BCM8879X=0 +phy_tx_polarity_flip_fabric185.BCM8879X=1 +phy_tx_polarity_flip_fabric186.BCM8879X=0 +phy_tx_polarity_flip_fabric187.BCM8879X=1 -phy_tx_polarity_flip_fabric188.BCM8879X=1 -phy_tx_polarity_flip_fabric189.BCM8879X=0 +phy_tx_polarity_flip_fabric188.BCM8879X=0 +phy_tx_polarity_flip_fabric189.BCM8879X=1 phy_tx_polarity_flip_fabric190.BCM8879X=0 phy_tx_polarity_flip_fabric191.BCM8879X=1 +port_init_cl72_0=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 +port_init_cl72_19=0 +port_init_cl72_20=0 +port_init_cl72_21=0 +port_init_cl72_22=0 +port_init_cl72_23=0 +port_init_cl72_24=0 +port_init_cl72_25=0 +port_init_cl72_26=0 +port_init_cl72_27=0 +port_init_cl72_28=0 +port_init_cl72_29=0 +port_init_cl72_30=0 +port_init_cl72_31=0 +port_init_cl72_32=0 +port_init_cl72_33=0 +port_init_cl72_34=0 +port_init_cl72_35=0 +port_init_cl72_36=0 +port_init_cl72_37=0 +port_init_cl72_38=0 +port_init_cl72_39=0 +port_init_cl72_40=0 +port_init_cl72_41=0 +port_init_cl72_42=0 +port_init_cl72_43=0 +port_init_cl72_44=0 +port_init_cl72_45=0 +port_init_cl72_46=0 +port_init_cl72_47=0 +port_init_cl72_48=0 +port_init_cl72_49=0 +port_init_cl72_50=0 +port_init_cl72_51=0 +port_init_cl72_52=0 +port_init_cl72_53=0 +port_init_cl72_54=0 +port_init_cl72_55=0 +port_init_cl72_56=0 +port_init_cl72_57=0 +port_init_cl72_58=0 +port_init_cl72_59=0 +port_init_cl72_60=0 +port_init_cl72_61=0 +port_init_cl72_62=0 +port_init_cl72_63=0 +port_init_cl72_64=0 +port_init_cl72_65=0 +port_init_cl72_66=0 +port_init_cl72_67=0 +port_init_cl72_68=0 +port_init_cl72_69=0 +port_init_cl72_70=0 +port_init_cl72_71=0 +port_init_cl72_72=0 +port_init_cl72_73=0 +port_init_cl72_74=0 +port_init_cl72_75=0 +port_init_cl72_76=0 +port_init_cl72_77=0 +port_init_cl72_78=0 +port_init_cl72_79=0 +port_init_cl72_80=0 +port_init_cl72_81=0 +port_init_cl72_82=0 +port_init_cl72_83=0 +port_init_cl72_84=0 +port_init_cl72_85=0 +port_init_cl72_86=0 +port_init_cl72_87=0 +port_init_cl72_88=0 +port_init_cl72_89=0 +port_init_cl72_90=0 +port_init_cl72_91=0 +port_init_cl72_92=0 +port_init_cl72_93=0 +port_init_cl72_94=0 +port_init_cl72_95=0 +port_init_cl72_96=0 +port_init_cl72_97=0 +port_init_cl72_98=0 +port_init_cl72_99=0 +port_init_cl72_100=0 +port_init_cl72_101=0 +port_init_cl72_102=0 +port_init_cl72_103=0 +port_init_cl72_104=0 +port_init_cl72_105=0 +port_init_cl72_106=0 +port_init_cl72_107=0 +port_init_cl72_108=0 +port_init_cl72_109=0 +port_init_cl72_110=0 +port_init_cl72_111=0 +port_init_cl72_112=0 +port_init_cl72_113=0 +port_init_cl72_114=0 +port_init_cl72_115=0 +port_init_cl72_116=0 +port_init_cl72_117=0 +port_init_cl72_118=0 +port_init_cl72_119=0 +port_init_cl72_120=0 +port_init_cl72_121=0 +port_init_cl72_122=0 +port_init_cl72_123=0 +port_init_cl72_124=0 +port_init_cl72_125=0 +port_init_cl72_126=0 +port_init_cl72_127=0 +port_init_cl72_128=0 +port_init_cl72_129=0 +port_init_cl72_130=0 +port_init_cl72_131=0 +port_init_cl72_132=0 +port_init_cl72_133=0 +port_init_cl72_134=0 +port_init_cl72_135=0 +port_init_cl72_136=0 +port_init_cl72_137=0 +port_init_cl72_138=0 +port_init_cl72_139=0 +port_init_cl72_140=0 +port_init_cl72_141=0 +port_init_cl72_142=0 +port_init_cl72_143=0 +port_init_cl72_144=0 +port_init_cl72_145=0 +port_init_cl72_146=0 +port_init_cl72_147=0 +port_init_cl72_148=0 +port_init_cl72_149=0 +port_init_cl72_150=0 +port_init_cl72_151=0 +port_init_cl72_152=0 +port_init_cl72_153=0 +port_init_cl72_154=0 +port_init_cl72_155=0 +port_init_cl72_156=0 +port_init_cl72_157=0 +port_init_cl72_158=0 +port_init_cl72_159=0 +port_init_cl72_160=0 +port_init_cl72_161=0 +port_init_cl72_162=0 +port_init_cl72_163=0 +port_init_cl72_164=0 +port_init_cl72_165=0 +port_init_cl72_166=0 +port_init_cl72_167=0 +port_init_cl72_168=0 +port_init_cl72_169=0 +port_init_cl72_170=0 +port_init_cl72_171=0 +port_init_cl72_172=0 +port_init_cl72_173=0 +port_init_cl72_174=0 +port_init_cl72_175=0 +port_init_cl72_176=0 +port_init_cl72_177=0 +port_init_cl72_178=0 +port_init_cl72_179=0 +port_init_cl72_180=0 +port_init_cl72_181=0 +port_init_cl72_182=0 +port_init_cl72_183=0 +port_init_cl72_184=0 +port_init_cl72_185=0 +port_init_cl72_186=0 +port_init_cl72_187=0 +port_init_cl72_188=0 +port_init_cl72_189=0 +port_init_cl72_190=0 +port_init_cl72_191=0 + +serdes_tx_taps_0.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_1.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_2.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_3.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_4.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_5.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_6.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_7.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_8.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_9.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_10.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_11.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_12.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_13.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_14.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_15.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_16.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_17.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_18.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_19.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_20.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_21.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_22.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_23.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_24.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_25.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_26.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_27.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_28.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_29.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_30.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_31.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_32.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_33.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_34.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_35.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_36.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_37.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_38.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_39.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_40.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_41.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_42.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_43.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_44.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_45.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_46.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_47.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_48.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_49.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_50.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_51.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_52.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_53.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_54.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_55.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_56.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_57.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_58.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_59.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_60.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_61.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_62.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_63.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_64.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_65.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_66.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_67.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_68.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_69.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_70.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_71.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_72.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_73.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_74.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_75.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_76.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_77.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_78.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_79.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_80.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_81.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_82.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_83.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_84.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_85.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_86.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_87.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_88.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_89.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_90.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_91.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_92.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_93.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_94.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_95.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_96.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_97.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_98.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_99.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_100.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_101.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_102.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_103.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_104.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_105.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_106.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_107.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_108.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_109.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_110.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_111.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_112.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_113.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_114.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_115.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_116.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_117.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_118.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_119.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_120.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_121.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_122.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_123.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_124.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_125.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_126.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_127.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_128.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_129.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_130.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_131.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_132.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_133.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_134.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_135.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_136.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_137.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_138.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_139.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_140.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_141.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_142.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_143.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_144.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_145.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_146.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_147.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_148.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_149.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_150.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_151.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_152.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_153.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_154.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_155.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_156.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_157.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_158.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_159.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_160.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_161.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_162.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_163.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_164.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_165.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_166.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_167.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_168.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_169.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_170.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_171.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_172.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_173.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_174.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_175.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_176.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_177.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_178.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_179.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_180.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_181.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_182.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_183.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_184.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_185.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_186.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_187.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_188.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_189.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_190.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_191.BCM8879X=pam4:-24:132:-12:0:0:0 serdes_lane_config_channel_mode_0.0=force_nr serdes_lane_config_channel_mode_1.0=force_nr diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/4/config-ramon-3-0.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/4/config-ramon-3-0.bcm index f48ef9f90b47..449076477dd6 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/4/config-ramon-3-0.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/4/config-ramon-3-0.bcm @@ -1,7 +1,8 @@ + appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=5 bcm_linkscan_interval.BCM8879X=0 -bcm_stat_interval.BCM8879X=0 +bcm_stat_interval.BCM8879X=4000000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 @@ -20,10 +21,10 @@ mdio_output_delay_int.BCM8879X=25 mem_cache_enable_parity.BCM8879X=1 mm_intr_enable.BCM8879X=0 mm_timeout_usec.BCM8879X=300000 -polled_irq_delay.BCM8879X=500000 +polled_irq_delay.BCM8879X=100000 polled_irq_mode.BCM8879X=1 port_fec.BCM8879X=7 -port_init_cl72.BCM8879X=1 +port_init_cl72.BCM8879X=0 port_init_speed.BCM8879X=53125 rate_ext_mdio_divisor.BCM8879X=14 rate_int_mdio_divisor.BCM8879X=50 @@ -42,134 +43,134 @@ tslam_dma_enable.BCM8879X=0 tslam_intr_enable.BCM8879X=0 tslam_timeout_usec.BCM8879X=5000000 -lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx1 -lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx3 +lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx1 lane_to_serdes_map_fabric_lane2.BCM8879X=rx2:tx2 -lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx0 +lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx3 -lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx6 +lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx4 lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx5 -lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx7 -lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx4 +lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx7 -lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx10 -lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx8 -lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx11 -lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx9 +lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx11 -lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx13 -lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx15 +lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx13 lane_to_serdes_map_fabric_lane14.BCM8879X=rx14:tx14 -lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx12 +lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx15 -lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx18 -lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx16 -lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx19 -lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx17 +lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx18 +lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx19 lane_to_serdes_map_fabric_lane20.BCM8879X=rx20:tx20 -lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx22 -lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx23 -lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx21 +lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx23 lane_to_serdes_map_fabric_lane24.BCM8879X=rx24:tx24 -lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx26 -lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx27 -lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx25 +lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx26 +lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx27 -lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx29 -lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx30 -lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx28 +lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx29 +lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx30 lane_to_serdes_map_fabric_lane31.BCM8879X=rx31:tx31 -lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx34 -lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx32 -lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx35 -lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx33 +lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx35 lane_to_serdes_map_fabric_lane36.BCM8879X=rx36:tx36 -lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx38 -lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx39 -lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx37 +lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx39 -lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx43 -lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx42 -lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx40 -lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx41 +lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx40 +lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx41 +lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx42 +lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx43 lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx44 -lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx46 -lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx47 -lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx45 +lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx46 +lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx47 -lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx49 -lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx50 -lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx51 -lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx48 +lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx51 -lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx54 +lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx52 lane_to_serdes_map_fabric_lane53.BCM8879X=rx53:tx53 -lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx55 -lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx52 +lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx55 -lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx58 +lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx56 lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx57 -lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx59 -lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx56 +lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx58 +lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx59 -lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx61 -lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx60 +lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx60 +lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx61 lane_to_serdes_map_fabric_lane62.BCM8879X=rx62:tx62 lane_to_serdes_map_fabric_lane63.BCM8879X=rx63:tx63 lane_to_serdes_map_fabric_lane64.BCM8879X=rx64:tx64 -lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx66 -lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx65 +lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx66 lane_to_serdes_map_fabric_lane67.BCM8879X=rx67:tx67 -lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx69 -lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx70 -lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx71 -lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx68 +lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx71 -lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx74 -lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx72 -lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx75 -lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx73 +lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx72 +lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx75 -lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx78 -lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx76 -lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx79 -lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx77 +lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx76 +lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx77 +lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx78 +lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx79 lane_to_serdes_map_fabric_lane80.BCM8879X=rx80:tx80 -lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx82 -lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx83 -lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx81 +lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx82 +lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx83 -lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx85 -lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx86 -lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx87 -lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx84 +lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx87 -lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx90 -lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx88 -lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx91 -lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx89 +lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx89 +lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx90 +lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx91 -lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx95 -lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx94 -lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx92 -lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx93 +lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx92 +lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx94 +lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx95 lane_to_serdes_map_fabric_lane96.BCM8879X=rx96:tx96 -lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx98 -lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx97 +lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx98 lane_to_serdes_map_fabric_lane99.BCM8879X=rx99:tx99 -lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx101 -lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx102 -lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx100 +lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx102 lane_to_serdes_map_fabric_lane103.BCM8879X=rx103:tx103 lane_to_serdes_map_fabric_lane104.BCM8879X=rx104:tx104 @@ -182,10 +183,10 @@ lane_to_serdes_map_fabric_lane109.BCM8879X=rx109:tx109 lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx110 lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx111 -lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx115 -lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx114 -lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx113 -lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx112 +lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx112 +lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx114 +lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx115 lane_to_serdes_map_fabric_lane116.BCM8879X=rx116:tx116 lane_to_serdes_map_fabric_lane117.BCM8879X=rx117:tx117 @@ -197,15 +198,15 @@ lane_to_serdes_map_fabric_lane121.BCM8879X=rx121:tx121 lane_to_serdes_map_fabric_lane122.BCM8879X=rx122:tx122 lane_to_serdes_map_fabric_lane123.BCM8879X=rx123:tx123 -lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx127 -lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx126 -lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx124 -lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx125 +lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx127 -lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx131 -lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx130 -lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx129 -lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx128 +lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx131 lane_to_serdes_map_fabric_lane132.BCM8879X=rx132:tx132 lane_to_serdes_map_fabric_lane133.BCM8879X=rx133:tx133 @@ -213,23 +214,23 @@ lane_to_serdes_map_fabric_lane134.BCM8879X=rx134:tx134 lane_to_serdes_map_fabric_lane135.BCM8879X=rx135:tx135 lane_to_serdes_map_fabric_lane136.BCM8879X=rx136:tx136 -lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx138 -lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx137 +lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx137 +lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx138 lane_to_serdes_map_fabric_lane139.BCM8879X=rx139:tx139 -lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx143 -lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx142 -lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx141 -lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx140 +lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx140 +lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx143 -lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx145 -lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx147 -lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx144 -lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx146 +lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx147 -lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx150 +lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx148 lane_to_serdes_map_fabric_lane149.BCM8879X=rx149:tx149 -lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx148 +lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx150 lane_to_serdes_map_fabric_lane151.BCM8879X=rx151:tx151 lane_to_serdes_map_fabric_lane152.BCM8879X=rx152:tx152 @@ -237,91 +238,91 @@ lane_to_serdes_map_fabric_lane153.BCM8879X=rx153:tx153 lane_to_serdes_map_fabric_lane154.BCM8879X=rx154:tx154 lane_to_serdes_map_fabric_lane155.BCM8879X=rx155:tx155 -lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx157 -lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx159 -lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx156 -lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx158 +lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx156 +lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx157 +lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx158 +lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx159 lane_to_serdes_map_fabric_lane160.BCM8879X=rx160:tx160 -lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx162 -lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx161 +lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx162 lane_to_serdes_map_fabric_lane163.BCM8879X=rx163:tx163 -lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx166 -lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx164 -lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx165 +lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx166 lane_to_serdes_map_fabric_lane167.BCM8879X=rx167:tx167 -lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx170 -lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx168 -lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx169 +lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx168 +lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx170 lane_to_serdes_map_fabric_lane171.BCM8879X=rx171:tx171 -lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx173 -lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx174 -lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx175 -lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx172 +lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx172 +lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx173 +lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx174 +lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx175 lane_to_serdes_map_fabric_lane176.BCM8879X=rx176:tx176 -lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx178 -lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx177 +lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx178 lane_to_serdes_map_fabric_lane179.BCM8879X=rx179:tx179 -lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx182 -lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx180 -lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx181 +lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx180 +lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx182 lane_to_serdes_map_fabric_lane183.BCM8879X=rx183:tx183 -lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx187 -lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx184 +lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx185 lane_to_serdes_map_fabric_lane186.BCM8879X=rx186:tx186 -lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx185 +lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx187 -lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx190 +lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx188 lane_to_serdes_map_fabric_lane189.BCM8879X=rx189:tx189 -lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx191 -lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx188 +lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx190 +lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx191 -phy_rx_polarity_flip_fabric0.BCM8879X=0 -phy_rx_polarity_flip_fabric1.BCM8879X=1 -phy_rx_polarity_flip_fabric2.BCM8879X=0 -phy_rx_polarity_flip_fabric3.BCM8879X=1 +phy_rx_polarity_flip_fabric0.BCM8879X=1 +phy_rx_polarity_flip_fabric1.BCM8879X=0 +phy_rx_polarity_flip_fabric2.BCM8879X=1 +phy_rx_polarity_flip_fabric3.BCM8879X=0 -phy_rx_polarity_flip_fabric4.BCM8879X=1 -phy_rx_polarity_flip_fabric5.BCM8879X=0 -phy_rx_polarity_flip_fabric6.BCM8879X=1 -phy_rx_polarity_flip_fabric7.BCM8879X=0 +phy_rx_polarity_flip_fabric4.BCM8879X=0 +phy_rx_polarity_flip_fabric5.BCM8879X=1 +phy_rx_polarity_flip_fabric6.BCM8879X=0 +phy_rx_polarity_flip_fabric7.BCM8879X=1 phy_rx_polarity_flip_fabric8.BCM8879X=1 phy_rx_polarity_flip_fabric9.BCM8879X=0 phy_rx_polarity_flip_fabric10.BCM8879X=1 phy_rx_polarity_flip_fabric11.BCM8879X=0 -phy_rx_polarity_flip_fabric12.BCM8879X=1 -phy_rx_polarity_flip_fabric13.BCM8879X=0 +phy_rx_polarity_flip_fabric12.BCM8879X=0 +phy_rx_polarity_flip_fabric13.BCM8879X=1 phy_rx_polarity_flip_fabric14.BCM8879X=0 phy_rx_polarity_flip_fabric15.BCM8879X=1 -phy_rx_polarity_flip_fabric16.BCM8879X=0 -phy_rx_polarity_flip_fabric17.BCM8879X=1 -phy_rx_polarity_flip_fabric18.BCM8879X=0 -phy_rx_polarity_flip_fabric19.BCM8879X=1 +phy_rx_polarity_flip_fabric16.BCM8879X=1 +phy_rx_polarity_flip_fabric17.BCM8879X=0 +phy_rx_polarity_flip_fabric18.BCM8879X=1 +phy_rx_polarity_flip_fabric19.BCM8879X=0 -phy_rx_polarity_flip_fabric20.BCM8879X=0 -phy_rx_polarity_flip_fabric21.BCM8879X=1 +phy_rx_polarity_flip_fabric20.BCM8879X=1 +phy_rx_polarity_flip_fabric21.BCM8879X=0 phy_rx_polarity_flip_fabric22.BCM8879X=1 phy_rx_polarity_flip_fabric23.BCM8879X=0 -phy_rx_polarity_flip_fabric24.BCM8879X=0 -phy_rx_polarity_flip_fabric25.BCM8879X=1 -phy_rx_polarity_flip_fabric26.BCM8879X=0 -phy_rx_polarity_flip_fabric27.BCM8879X=1 +phy_rx_polarity_flip_fabric24.BCM8879X=1 +phy_rx_polarity_flip_fabric25.BCM8879X=0 +phy_rx_polarity_flip_fabric26.BCM8879X=1 +phy_rx_polarity_flip_fabric27.BCM8879X=0 -phy_rx_polarity_flip_fabric28.BCM8879X=1 -phy_rx_polarity_flip_fabric29.BCM8879X=0 -phy_rx_polarity_flip_fabric30.BCM8879X=1 -phy_rx_polarity_flip_fabric31.BCM8879X=0 +phy_rx_polarity_flip_fabric28.BCM8879X=0 +phy_rx_polarity_flip_fabric29.BCM8879X=1 +phy_rx_polarity_flip_fabric30.BCM8879X=0 +phy_rx_polarity_flip_fabric31.BCM8879X=1 phy_rx_polarity_flip_fabric32.BCM8879X=1 phy_rx_polarity_flip_fabric33.BCM8879X=0 @@ -330,11 +331,11 @@ phy_rx_polarity_flip_fabric35.BCM8879X=0 phy_rx_polarity_flip_fabric36.BCM8879X=0 phy_rx_polarity_flip_fabric37.BCM8879X=1 -phy_rx_polarity_flip_fabric38.BCM8879X=1 -phy_rx_polarity_flip_fabric39.BCM8879X=0 +phy_rx_polarity_flip_fabric38.BCM8879X=0 +phy_rx_polarity_flip_fabric39.BCM8879X=1 -phy_rx_polarity_flip_fabric40.BCM8879X=0 -phy_rx_polarity_flip_fabric41.BCM8879X=1 +phy_rx_polarity_flip_fabric40.BCM8879X=1 +phy_rx_polarity_flip_fabric41.BCM8879X=0 phy_rx_polarity_flip_fabric42.BCM8879X=1 phy_rx_polarity_flip_fabric43.BCM8879X=0 @@ -350,63 +351,63 @@ phy_rx_polarity_flip_fabric51.BCM8879X=1 phy_rx_polarity_flip_fabric52.BCM8879X=1 phy_rx_polarity_flip_fabric53.BCM8879X=0 -phy_rx_polarity_flip_fabric54.BCM8879X=0 -phy_rx_polarity_flip_fabric55.BCM8879X=1 +phy_rx_polarity_flip_fabric54.BCM8879X=1 +phy_rx_polarity_flip_fabric55.BCM8879X=0 -phy_rx_polarity_flip_fabric56.BCM8879X=1 -phy_rx_polarity_flip_fabric57.BCM8879X=0 +phy_rx_polarity_flip_fabric56.BCM8879X=0 +phy_rx_polarity_flip_fabric57.BCM8879X=1 phy_rx_polarity_flip_fabric58.BCM8879X=0 phy_rx_polarity_flip_fabric59.BCM8879X=1 -phy_rx_polarity_flip_fabric60.BCM8879X=1 -phy_rx_polarity_flip_fabric61.BCM8879X=0 -phy_rx_polarity_flip_fabric62.BCM8879X=1 -phy_rx_polarity_flip_fabric63.BCM8879X=0 +phy_rx_polarity_flip_fabric60.BCM8879X=0 +phy_rx_polarity_flip_fabric61.BCM8879X=1 +phy_rx_polarity_flip_fabric62.BCM8879X=0 +phy_rx_polarity_flip_fabric63.BCM8879X=1 -phy_rx_polarity_flip_fabric64.BCM8879X=0 -phy_rx_polarity_flip_fabric65.BCM8879X=1 -phy_rx_polarity_flip_fabric66.BCM8879X=0 -phy_rx_polarity_flip_fabric67.BCM8879X=1 +phy_rx_polarity_flip_fabric64.BCM8879X=1 +phy_rx_polarity_flip_fabric65.BCM8879X=0 +phy_rx_polarity_flip_fabric66.BCM8879X=1 +phy_rx_polarity_flip_fabric67.BCM8879X=0 -phy_rx_polarity_flip_fabric68.BCM8879X=1 -phy_rx_polarity_flip_fabric69.BCM8879X=0 -phy_rx_polarity_flip_fabric70.BCM8879X=1 -phy_rx_polarity_flip_fabric71.BCM8879X=0 +phy_rx_polarity_flip_fabric68.BCM8879X=0 +phy_rx_polarity_flip_fabric69.BCM8879X=1 +phy_rx_polarity_flip_fabric70.BCM8879X=0 +phy_rx_polarity_flip_fabric71.BCM8879X=1 -phy_rx_polarity_flip_fabric72.BCM8879X=0 -phy_rx_polarity_flip_fabric73.BCM8879X=1 -phy_rx_polarity_flip_fabric74.BCM8879X=0 -phy_rx_polarity_flip_fabric75.BCM8879X=1 +phy_rx_polarity_flip_fabric72.BCM8879X=1 +phy_rx_polarity_flip_fabric73.BCM8879X=0 +phy_rx_polarity_flip_fabric74.BCM8879X=1 +phy_rx_polarity_flip_fabric75.BCM8879X=0 -phy_rx_polarity_flip_fabric76.BCM8879X=0 -phy_rx_polarity_flip_fabric77.BCM8879X=1 +phy_rx_polarity_flip_fabric76.BCM8879X=1 +phy_rx_polarity_flip_fabric77.BCM8879X=0 phy_rx_polarity_flip_fabric78.BCM8879X=1 phy_rx_polarity_flip_fabric79.BCM8879X=0 phy_rx_polarity_flip_fabric80.BCM8879X=0 phy_rx_polarity_flip_fabric81.BCM8879X=1 -phy_rx_polarity_flip_fabric82.BCM8879X=1 -phy_rx_polarity_flip_fabric83.BCM8879X=0 +phy_rx_polarity_flip_fabric82.BCM8879X=0 +phy_rx_polarity_flip_fabric83.BCM8879X=1 phy_rx_polarity_flip_fabric84.BCM8879X=1 phy_rx_polarity_flip_fabric85.BCM8879X=0 phy_rx_polarity_flip_fabric86.BCM8879X=1 phy_rx_polarity_flip_fabric87.BCM8879X=0 -phy_rx_polarity_flip_fabric88.BCM8879X=1 -phy_rx_polarity_flip_fabric89.BCM8879X=0 -phy_rx_polarity_flip_fabric90.BCM8879X=1 -phy_rx_polarity_flip_fabric91.BCM8879X=0 +phy_rx_polarity_flip_fabric88.BCM8879X=0 +phy_rx_polarity_flip_fabric89.BCM8879X=1 +phy_rx_polarity_flip_fabric90.BCM8879X=0 +phy_rx_polarity_flip_fabric91.BCM8879X=1 -phy_rx_polarity_flip_fabric92.BCM8879X=0 -phy_rx_polarity_flip_fabric93.BCM8879X=1 -phy_rx_polarity_flip_fabric94.BCM8879X=0 -phy_rx_polarity_flip_fabric95.BCM8879X=1 +phy_rx_polarity_flip_fabric92.BCM8879X=1 +phy_rx_polarity_flip_fabric93.BCM8879X=0 +phy_rx_polarity_flip_fabric94.BCM8879X=1 +phy_rx_polarity_flip_fabric95.BCM8879X=0 -phy_rx_polarity_flip_fabric96.BCM8879X=0 -phy_rx_polarity_flip_fabric97.BCM8879X=1 -phy_rx_polarity_flip_fabric98.BCM8879X=0 -phy_rx_polarity_flip_fabric99.BCM8879X=1 +phy_rx_polarity_flip_fabric96.BCM8879X=1 +phy_rx_polarity_flip_fabric97.BCM8879X=0 +phy_rx_polarity_flip_fabric98.BCM8879X=1 +phy_rx_polarity_flip_fabric99.BCM8879X=0 phy_rx_polarity_flip_fabric100.BCM8879X=0 phy_rx_polarity_flip_fabric101.BCM8879X=1 @@ -418,10 +419,10 @@ phy_rx_polarity_flip_fabric105.BCM8879X=1 phy_rx_polarity_flip_fabric106.BCM8879X=0 phy_rx_polarity_flip_fabric107.BCM8879X=1 -phy_rx_polarity_flip_fabric108.BCM8879X=1 -phy_rx_polarity_flip_fabric109.BCM8879X=0 -phy_rx_polarity_flip_fabric110.BCM8879X=1 -phy_rx_polarity_flip_fabric111.BCM8879X=0 +phy_rx_polarity_flip_fabric108.BCM8879X=0 +phy_rx_polarity_flip_fabric109.BCM8879X=1 +phy_rx_polarity_flip_fabric110.BCM8879X=0 +phy_rx_polarity_flip_fabric111.BCM8879X=1 phy_rx_polarity_flip_fabric112.BCM8879X=0 phy_rx_polarity_flip_fabric113.BCM8879X=1 @@ -433,223 +434,223 @@ phy_rx_polarity_flip_fabric117.BCM8879X=0 phy_rx_polarity_flip_fabric118.BCM8879X=1 phy_rx_polarity_flip_fabric119.BCM8879X=0 -phy_rx_polarity_flip_fabric120.BCM8879X=0 -phy_rx_polarity_flip_fabric121.BCM8879X=1 -phy_rx_polarity_flip_fabric122.BCM8879X=0 -phy_rx_polarity_flip_fabric123.BCM8879X=1 +phy_rx_polarity_flip_fabric120.BCM8879X=1 +phy_rx_polarity_flip_fabric121.BCM8879X=0 +phy_rx_polarity_flip_fabric122.BCM8879X=1 +phy_rx_polarity_flip_fabric123.BCM8879X=0 phy_rx_polarity_flip_fabric124.BCM8879X=0 phy_rx_polarity_flip_fabric125.BCM8879X=1 phy_rx_polarity_flip_fabric126.BCM8879X=0 phy_rx_polarity_flip_fabric127.BCM8879X=1 -phy_rx_polarity_flip_fabric128.BCM8879X=0 -phy_rx_polarity_flip_fabric129.BCM8879X=1 -phy_rx_polarity_flip_fabric130.BCM8879X=0 -phy_rx_polarity_flip_fabric131.BCM8879X=1 +phy_rx_polarity_flip_fabric128.BCM8879X=1 +phy_rx_polarity_flip_fabric129.BCM8879X=0 +phy_rx_polarity_flip_fabric130.BCM8879X=1 +phy_rx_polarity_flip_fabric131.BCM8879X=0 -phy_rx_polarity_flip_fabric132.BCM8879X=1 -phy_rx_polarity_flip_fabric133.BCM8879X=0 -phy_rx_polarity_flip_fabric134.BCM8879X=1 -phy_rx_polarity_flip_fabric135.BCM8879X=0 +phy_rx_polarity_flip_fabric132.BCM8879X=0 +phy_rx_polarity_flip_fabric133.BCM8879X=1 +phy_rx_polarity_flip_fabric134.BCM8879X=0 +phy_rx_polarity_flip_fabric135.BCM8879X=1 phy_rx_polarity_flip_fabric136.BCM8879X=1 phy_rx_polarity_flip_fabric137.BCM8879X=0 phy_rx_polarity_flip_fabric138.BCM8879X=1 phy_rx_polarity_flip_fabric139.BCM8879X=0 -phy_rx_polarity_flip_fabric140.BCM8879X=0 -phy_rx_polarity_flip_fabric141.BCM8879X=1 -phy_rx_polarity_flip_fabric142.BCM8879X=0 -phy_rx_polarity_flip_fabric143.BCM8879X=1 +phy_rx_polarity_flip_fabric140.BCM8879X=1 +phy_rx_polarity_flip_fabric141.BCM8879X=0 +phy_rx_polarity_flip_fabric142.BCM8879X=1 +phy_rx_polarity_flip_fabric143.BCM8879X=0 -phy_rx_polarity_flip_fabric144.BCM8879X=0 -phy_rx_polarity_flip_fabric145.BCM8879X=1 -phy_rx_polarity_flip_fabric146.BCM8879X=0 -phy_rx_polarity_flip_fabric147.BCM8879X=1 +phy_rx_polarity_flip_fabric144.BCM8879X=1 +phy_rx_polarity_flip_fabric145.BCM8879X=0 +phy_rx_polarity_flip_fabric146.BCM8879X=1 +phy_rx_polarity_flip_fabric147.BCM8879X=0 phy_rx_polarity_flip_fabric148.BCM8879X=1 phy_rx_polarity_flip_fabric149.BCM8879X=0 phy_rx_polarity_flip_fabric150.BCM8879X=1 phy_rx_polarity_flip_fabric151.BCM8879X=0 -phy_rx_polarity_flip_fabric152.BCM8879X=1 -phy_rx_polarity_flip_fabric153.BCM8879X=0 -phy_rx_polarity_flip_fabric154.BCM8879X=1 -phy_rx_polarity_flip_fabric155.BCM8879X=0 +phy_rx_polarity_flip_fabric152.BCM8879X=0 +phy_rx_polarity_flip_fabric153.BCM8879X=1 +phy_rx_polarity_flip_fabric154.BCM8879X=0 +phy_rx_polarity_flip_fabric155.BCM8879X=1 -phy_rx_polarity_flip_fabric156.BCM8879X=0 -phy_rx_polarity_flip_fabric157.BCM8879X=1 -phy_rx_polarity_flip_fabric158.BCM8879X=0 -phy_rx_polarity_flip_fabric159.BCM8879X=1 +phy_rx_polarity_flip_fabric156.BCM8879X=1 +phy_rx_polarity_flip_fabric157.BCM8879X=0 +phy_rx_polarity_flip_fabric158.BCM8879X=1 +phy_rx_polarity_flip_fabric159.BCM8879X=0 -phy_rx_polarity_flip_fabric160.BCM8879X=0 -phy_rx_polarity_flip_fabric161.BCM8879X=1 -phy_rx_polarity_flip_fabric162.BCM8879X=0 -phy_rx_polarity_flip_fabric163.BCM8879X=1 +phy_rx_polarity_flip_fabric160.BCM8879X=1 +phy_rx_polarity_flip_fabric161.BCM8879X=0 +phy_rx_polarity_flip_fabric162.BCM8879X=1 +phy_rx_polarity_flip_fabric163.BCM8879X=0 phy_rx_polarity_flip_fabric164.BCM8879X=0 phy_rx_polarity_flip_fabric165.BCM8879X=1 phy_rx_polarity_flip_fabric166.BCM8879X=0 phy_rx_polarity_flip_fabric167.BCM8879X=1 -phy_rx_polarity_flip_fabric168.BCM8879X=0 -phy_rx_polarity_flip_fabric169.BCM8879X=1 -phy_rx_polarity_flip_fabric170.BCM8879X=0 -phy_rx_polarity_flip_fabric171.BCM8879X=1 +phy_rx_polarity_flip_fabric168.BCM8879X=1 +phy_rx_polarity_flip_fabric169.BCM8879X=0 +phy_rx_polarity_flip_fabric170.BCM8879X=1 +phy_rx_polarity_flip_fabric171.BCM8879X=0 phy_rx_polarity_flip_fabric172.BCM8879X=1 phy_rx_polarity_flip_fabric173.BCM8879X=0 phy_rx_polarity_flip_fabric174.BCM8879X=1 phy_rx_polarity_flip_fabric175.BCM8879X=0 -phy_rx_polarity_flip_fabric176.BCM8879X=1 -phy_rx_polarity_flip_fabric177.BCM8879X=0 -phy_rx_polarity_flip_fabric178.BCM8879X=1 -phy_rx_polarity_flip_fabric179.BCM8879X=0 +phy_rx_polarity_flip_fabric176.BCM8879X=0 +phy_rx_polarity_flip_fabric177.BCM8879X=1 +phy_rx_polarity_flip_fabric178.BCM8879X=0 +phy_rx_polarity_flip_fabric179.BCM8879X=1 -phy_rx_polarity_flip_fabric180.BCM8879X=0 -phy_rx_polarity_flip_fabric181.BCM8879X=1 -phy_rx_polarity_flip_fabric182.BCM8879X=0 -phy_rx_polarity_flip_fabric183.BCM8879X=1 +phy_rx_polarity_flip_fabric180.BCM8879X=1 +phy_rx_polarity_flip_fabric181.BCM8879X=0 +phy_rx_polarity_flip_fabric182.BCM8879X=1 +phy_rx_polarity_flip_fabric183.BCM8879X=0 phy_rx_polarity_flip_fabric184.BCM8879X=0 phy_rx_polarity_flip_fabric185.BCM8879X=1 phy_rx_polarity_flip_fabric186.BCM8879X=0 phy_rx_polarity_flip_fabric187.BCM8879X=1 -phy_rx_polarity_flip_fabric188.BCM8879X=0 -phy_rx_polarity_flip_fabric189.BCM8879X=1 -phy_rx_polarity_flip_fabric190.BCM8879X=0 -phy_rx_polarity_flip_fabric191.BCM8879X=1 +phy_rx_polarity_flip_fabric188.BCM8879X=1 +phy_rx_polarity_flip_fabric189.BCM8879X=0 +phy_rx_polarity_flip_fabric190.BCM8879X=1 +phy_rx_polarity_flip_fabric191.BCM8879X=0 phy_tx_polarity_flip_fabric0.BCM8879X=0 -phy_tx_polarity_flip_fabric1.BCM8879X=0 -phy_tx_polarity_flip_fabric2.BCM8879X=1 +phy_tx_polarity_flip_fabric1.BCM8879X=1 +phy_tx_polarity_flip_fabric2.BCM8879X=0 phy_tx_polarity_flip_fabric3.BCM8879X=1 -phy_tx_polarity_flip_fabric4.BCM8879X=0 -phy_tx_polarity_flip_fabric5.BCM8879X=1 +phy_tx_polarity_flip_fabric4.BCM8879X=1 +phy_tx_polarity_flip_fabric5.BCM8879X=0 phy_tx_polarity_flip_fabric6.BCM8879X=1 phy_tx_polarity_flip_fabric7.BCM8879X=0 phy_tx_polarity_flip_fabric8.BCM8879X=0 -phy_tx_polarity_flip_fabric9.BCM8879X=0 -phy_tx_polarity_flip_fabric10.BCM8879X=1 +phy_tx_polarity_flip_fabric9.BCM8879X=1 +phy_tx_polarity_flip_fabric10.BCM8879X=0 phy_tx_polarity_flip_fabric11.BCM8879X=1 -phy_tx_polarity_flip_fabric12.BCM8879X=0 -phy_tx_polarity_flip_fabric13.BCM8879X=1 +phy_tx_polarity_flip_fabric12.BCM8879X=1 +phy_tx_polarity_flip_fabric13.BCM8879X=0 phy_tx_polarity_flip_fabric14.BCM8879X=1 -phy_tx_polarity_flip_fabric15.BCM8879X=1 +phy_tx_polarity_flip_fabric15.BCM8879X=0 -phy_tx_polarity_flip_fabric16.BCM8879X=1 +phy_tx_polarity_flip_fabric16.BCM8879X=0 phy_tx_polarity_flip_fabric17.BCM8879X=1 -phy_tx_polarity_flip_fabric18.BCM8879X=1 -phy_tx_polarity_flip_fabric19.BCM8879X=0 +phy_tx_polarity_flip_fabric18.BCM8879X=0 +phy_tx_polarity_flip_fabric19.BCM8879X=1 -phy_tx_polarity_flip_fabric20.BCM8879X=1 +phy_tx_polarity_flip_fabric20.BCM8879X=0 phy_tx_polarity_flip_fabric21.BCM8879X=1 -phy_tx_polarity_flip_fabric22.BCM8879X=1 -phy_tx_polarity_flip_fabric23.BCM8879X=0 +phy_tx_polarity_flip_fabric22.BCM8879X=0 +phy_tx_polarity_flip_fabric23.BCM8879X=1 -phy_tx_polarity_flip_fabric24.BCM8879X=1 +phy_tx_polarity_flip_fabric24.BCM8879X=0 phy_tx_polarity_flip_fabric25.BCM8879X=1 phy_tx_polarity_flip_fabric26.BCM8879X=0 -phy_tx_polarity_flip_fabric27.BCM8879X=0 +phy_tx_polarity_flip_fabric27.BCM8879X=1 phy_tx_polarity_flip_fabric28.BCM8879X=1 phy_tx_polarity_flip_fabric29.BCM8879X=0 -phy_tx_polarity_flip_fabric30.BCM8879X=0 -phy_tx_polarity_flip_fabric31.BCM8879X=1 +phy_tx_polarity_flip_fabric30.BCM8879X=1 +phy_tx_polarity_flip_fabric31.BCM8879X=0 phy_tx_polarity_flip_fabric32.BCM8879X=0 -phy_tx_polarity_flip_fabric33.BCM8879X=0 -phy_tx_polarity_flip_fabric34.BCM8879X=1 +phy_tx_polarity_flip_fabric33.BCM8879X=1 +phy_tx_polarity_flip_fabric34.BCM8879X=0 phy_tx_polarity_flip_fabric35.BCM8879X=1 phy_tx_polarity_flip_fabric36.BCM8879X=1 -phy_tx_polarity_flip_fabric37.BCM8879X=1 +phy_tx_polarity_flip_fabric37.BCM8879X=0 phy_tx_polarity_flip_fabric38.BCM8879X=1 phy_tx_polarity_flip_fabric39.BCM8879X=0 phy_tx_polarity_flip_fabric40.BCM8879X=0 phy_tx_polarity_flip_fabric41.BCM8879X=1 phy_tx_polarity_flip_fabric42.BCM8879X=0 -phy_tx_polarity_flip_fabric43.BCM8879X=0 +phy_tx_polarity_flip_fabric43.BCM8879X=1 -phy_tx_polarity_flip_fabric44.BCM8879X=1 +phy_tx_polarity_flip_fabric44.BCM8879X=0 phy_tx_polarity_flip_fabric45.BCM8879X=1 phy_tx_polarity_flip_fabric46.BCM8879X=0 phy_tx_polarity_flip_fabric47.BCM8879X=1 -phy_tx_polarity_flip_fabric48.BCM8879X=0 -phy_tx_polarity_flip_fabric49.BCM8879X=1 +phy_tx_polarity_flip_fabric48.BCM8879X=1 +phy_tx_polarity_flip_fabric49.BCM8879X=0 phy_tx_polarity_flip_fabric50.BCM8879X=1 -phy_tx_polarity_flip_fabric51.BCM8879X=1 +phy_tx_polarity_flip_fabric51.BCM8879X=0 -phy_tx_polarity_flip_fabric52.BCM8879X=1 +phy_tx_polarity_flip_fabric52.BCM8879X=0 phy_tx_polarity_flip_fabric53.BCM8879X=1 phy_tx_polarity_flip_fabric54.BCM8879X=0 phy_tx_polarity_flip_fabric55.BCM8879X=1 -phy_tx_polarity_flip_fabric56.BCM8879X=0 +phy_tx_polarity_flip_fabric56.BCM8879X=1 phy_tx_polarity_flip_fabric57.BCM8879X=0 -phy_tx_polarity_flip_fabric58.BCM8879X=0 -phy_tx_polarity_flip_fabric59.BCM8879X=1 +phy_tx_polarity_flip_fabric58.BCM8879X=1 +phy_tx_polarity_flip_fabric59.BCM8879X=0 phy_tx_polarity_flip_fabric60.BCM8879X=1 phy_tx_polarity_flip_fabric61.BCM8879X=0 -phy_tx_polarity_flip_fabric62.BCM8879X=0 -phy_tx_polarity_flip_fabric63.BCM8879X=1 +phy_tx_polarity_flip_fabric62.BCM8879X=1 +phy_tx_polarity_flip_fabric63.BCM8879X=0 -phy_tx_polarity_flip_fabric64.BCM8879X=1 +phy_tx_polarity_flip_fabric64.BCM8879X=0 phy_tx_polarity_flip_fabric65.BCM8879X=1 phy_tx_polarity_flip_fabric66.BCM8879X=0 -phy_tx_polarity_flip_fabric67.BCM8879X=0 +phy_tx_polarity_flip_fabric67.BCM8879X=1 phy_tx_polarity_flip_fabric68.BCM8879X=1 phy_tx_polarity_flip_fabric69.BCM8879X=0 phy_tx_polarity_flip_fabric70.BCM8879X=1 phy_tx_polarity_flip_fabric71.BCM8879X=0 -phy_tx_polarity_flip_fabric72.BCM8879X=1 +phy_tx_polarity_flip_fabric72.BCM8879X=0 phy_tx_polarity_flip_fabric73.BCM8879X=1 -phy_tx_polarity_flip_fabric74.BCM8879X=1 -phy_tx_polarity_flip_fabric75.BCM8879X=0 +phy_tx_polarity_flip_fabric74.BCM8879X=0 +phy_tx_polarity_flip_fabric75.BCM8879X=1 -phy_tx_polarity_flip_fabric76.BCM8879X=1 +phy_tx_polarity_flip_fabric76.BCM8879X=0 phy_tx_polarity_flip_fabric77.BCM8879X=1 phy_tx_polarity_flip_fabric78.BCM8879X=0 phy_tx_polarity_flip_fabric79.BCM8879X=1 phy_tx_polarity_flip_fabric80.BCM8879X=1 -phy_tx_polarity_flip_fabric81.BCM8879X=1 -phy_tx_polarity_flip_fabric82.BCM8879X=0 -phy_tx_polarity_flip_fabric83.BCM8879X=1 +phy_tx_polarity_flip_fabric81.BCM8879X=0 +phy_tx_polarity_flip_fabric82.BCM8879X=1 +phy_tx_polarity_flip_fabric83.BCM8879X=0 -phy_tx_polarity_flip_fabric84.BCM8879X=1 -phy_tx_polarity_flip_fabric85.BCM8879X=0 -phy_tx_polarity_flip_fabric86.BCM8879X=1 -phy_tx_polarity_flip_fabric87.BCM8879X=0 +phy_tx_polarity_flip_fabric84.BCM8879X=0 +phy_tx_polarity_flip_fabric85.BCM8879X=1 +phy_tx_polarity_flip_fabric86.BCM8879X=0 +phy_tx_polarity_flip_fabric87.BCM8879X=1 -phy_tx_polarity_flip_fabric88.BCM8879X=0 +phy_tx_polarity_flip_fabric88.BCM8879X=1 phy_tx_polarity_flip_fabric89.BCM8879X=0 phy_tx_polarity_flip_fabric90.BCM8879X=1 -phy_tx_polarity_flip_fabric91.BCM8879X=1 +phy_tx_polarity_flip_fabric91.BCM8879X=0 phy_tx_polarity_flip_fabric92.BCM8879X=0 phy_tx_polarity_flip_fabric93.BCM8879X=1 -phy_tx_polarity_flip_fabric94.BCM8879X=1 -phy_tx_polarity_flip_fabric95.BCM8879X=0 +phy_tx_polarity_flip_fabric94.BCM8879X=0 +phy_tx_polarity_flip_fabric95.BCM8879X=1 -phy_tx_polarity_flip_fabric96.BCM8879X=1 +phy_tx_polarity_flip_fabric96.BCM8879X=0 phy_tx_polarity_flip_fabric97.BCM8879X=1 phy_tx_polarity_flip_fabric98.BCM8879X=0 -phy_tx_polarity_flip_fabric99.BCM8879X=0 +phy_tx_polarity_flip_fabric99.BCM8879X=1 -phy_tx_polarity_flip_fabric100.BCM8879X=0 -phy_tx_polarity_flip_fabric101.BCM8879X=1 +phy_tx_polarity_flip_fabric100.BCM8879X=1 +phy_tx_polarity_flip_fabric101.BCM8879X=0 phy_tx_polarity_flip_fabric102.BCM8879X=1 phy_tx_polarity_flip_fabric103.BCM8879X=0 @@ -658,28 +659,28 @@ phy_tx_polarity_flip_fabric105.BCM8879X=0 phy_tx_polarity_flip_fabric106.BCM8879X=1 phy_tx_polarity_flip_fabric107.BCM8879X=0 -phy_tx_polarity_flip_fabric108.BCM8879X=0 -phy_tx_polarity_flip_fabric109.BCM8879X=1 -phy_tx_polarity_flip_fabric110.BCM8879X=0 -phy_tx_polarity_flip_fabric111.BCM8879X=1 +phy_tx_polarity_flip_fabric108.BCM8879X=1 +phy_tx_polarity_flip_fabric109.BCM8879X=0 +phy_tx_polarity_flip_fabric110.BCM8879X=1 +phy_tx_polarity_flip_fabric111.BCM8879X=0 -phy_tx_polarity_flip_fabric112.BCM8879X=0 -phy_tx_polarity_flip_fabric113.BCM8879X=1 -phy_tx_polarity_flip_fabric114.BCM8879X=0 -phy_tx_polarity_flip_fabric115.BCM8879X=1 +phy_tx_polarity_flip_fabric112.BCM8879X=1 +phy_tx_polarity_flip_fabric113.BCM8879X=0 +phy_tx_polarity_flip_fabric114.BCM8879X=1 +phy_tx_polarity_flip_fabric115.BCM8879X=0 phy_tx_polarity_flip_fabric116.BCM8879X=0 phy_tx_polarity_flip_fabric117.BCM8879X=1 phy_tx_polarity_flip_fabric118.BCM8879X=0 phy_tx_polarity_flip_fabric119.BCM8879X=1 -phy_tx_polarity_flip_fabric120.BCM8879X=1 -phy_tx_polarity_flip_fabric121.BCM8879X=0 -phy_tx_polarity_flip_fabric122.BCM8879X=1 -phy_tx_polarity_flip_fabric123.BCM8879X=0 +phy_tx_polarity_flip_fabric120.BCM8879X=0 +phy_tx_polarity_flip_fabric121.BCM8879X=1 +phy_tx_polarity_flip_fabric122.BCM8879X=0 +phy_tx_polarity_flip_fabric123.BCM8879X=1 -phy_tx_polarity_flip_fabric124.BCM8879X=0 -phy_tx_polarity_flip_fabric125.BCM8879X=1 +phy_tx_polarity_flip_fabric124.BCM8879X=1 +phy_tx_polarity_flip_fabric125.BCM8879X=0 phy_tx_polarity_flip_fabric126.BCM8879X=1 phy_tx_polarity_flip_fabric127.BCM8879X=0 @@ -688,14 +689,14 @@ phy_tx_polarity_flip_fabric129.BCM8879X=1 phy_tx_polarity_flip_fabric130.BCM8879X=0 phy_tx_polarity_flip_fabric131.BCM8879X=1 -phy_tx_polarity_flip_fabric132.BCM8879X=0 -phy_tx_polarity_flip_fabric133.BCM8879X=1 -phy_tx_polarity_flip_fabric134.BCM8879X=0 -phy_tx_polarity_flip_fabric135.BCM8879X=1 +phy_tx_polarity_flip_fabric132.BCM8879X=1 +phy_tx_polarity_flip_fabric133.BCM8879X=0 +phy_tx_polarity_flip_fabric134.BCM8879X=1 +phy_tx_polarity_flip_fabric135.BCM8879X=0 phy_tx_polarity_flip_fabric136.BCM8879X=0 -phy_tx_polarity_flip_fabric137.BCM8879X=0 -phy_tx_polarity_flip_fabric138.BCM8879X=1 +phy_tx_polarity_flip_fabric137.BCM8879X=1 +phy_tx_polarity_flip_fabric138.BCM8879X=0 phy_tx_polarity_flip_fabric139.BCM8879X=1 phy_tx_polarity_flip_fabric140.BCM8879X=0 @@ -704,8 +705,8 @@ phy_tx_polarity_flip_fabric142.BCM8879X=0 phy_tx_polarity_flip_fabric143.BCM8879X=1 phy_tx_polarity_flip_fabric144.BCM8879X=0 -phy_tx_polarity_flip_fabric145.BCM8879X=0 -phy_tx_polarity_flip_fabric146.BCM8879X=1 +phy_tx_polarity_flip_fabric145.BCM8879X=1 +phy_tx_polarity_flip_fabric146.BCM8879X=0 phy_tx_polarity_flip_fabric147.BCM8879X=1 phy_tx_polarity_flip_fabric148.BCM8879X=0 @@ -713,56 +714,441 @@ phy_tx_polarity_flip_fabric149.BCM8879X=1 phy_tx_polarity_flip_fabric150.BCM8879X=0 phy_tx_polarity_flip_fabric151.BCM8879X=1 -phy_tx_polarity_flip_fabric152.BCM8879X=0 -phy_tx_polarity_flip_fabric153.BCM8879X=1 -phy_tx_polarity_flip_fabric154.BCM8879X=0 -phy_tx_polarity_flip_fabric155.BCM8879X=1 +phy_tx_polarity_flip_fabric152.BCM8879X=1 +phy_tx_polarity_flip_fabric153.BCM8879X=0 +phy_tx_polarity_flip_fabric154.BCM8879X=1 +phy_tx_polarity_flip_fabric155.BCM8879X=0 phy_tx_polarity_flip_fabric156.BCM8879X=0 -phy_tx_polarity_flip_fabric157.BCM8879X=0 -phy_tx_polarity_flip_fabric158.BCM8879X=1 +phy_tx_polarity_flip_fabric157.BCM8879X=1 +phy_tx_polarity_flip_fabric158.BCM8879X=0 phy_tx_polarity_flip_fabric159.BCM8879X=1 -phy_tx_polarity_flip_fabric160.BCM8879X=1 +phy_tx_polarity_flip_fabric160.BCM8879X=0 phy_tx_polarity_flip_fabric161.BCM8879X=1 phy_tx_polarity_flip_fabric162.BCM8879X=0 -phy_tx_polarity_flip_fabric163.BCM8879X=0 +phy_tx_polarity_flip_fabric163.BCM8879X=1 phy_tx_polarity_flip_fabric164.BCM8879X=1 -phy_tx_polarity_flip_fabric165.BCM8879X=1 -phy_tx_polarity_flip_fabric166.BCM8879X=0 +phy_tx_polarity_flip_fabric165.BCM8879X=0 +phy_tx_polarity_flip_fabric166.BCM8879X=1 phy_tx_polarity_flip_fabric167.BCM8879X=0 -phy_tx_polarity_flip_fabric168.BCM8879X=1 +phy_tx_polarity_flip_fabric168.BCM8879X=0 phy_tx_polarity_flip_fabric169.BCM8879X=1 phy_tx_polarity_flip_fabric170.BCM8879X=0 -phy_tx_polarity_flip_fabric171.BCM8879X=0 +phy_tx_polarity_flip_fabric171.BCM8879X=1 -phy_tx_polarity_flip_fabric172.BCM8879X=1 -phy_tx_polarity_flip_fabric173.BCM8879X=0 -phy_tx_polarity_flip_fabric174.BCM8879X=1 -phy_tx_polarity_flip_fabric175.BCM8879X=0 +phy_tx_polarity_flip_fabric172.BCM8879X=0 +phy_tx_polarity_flip_fabric173.BCM8879X=1 +phy_tx_polarity_flip_fabric174.BCM8879X=0 +phy_tx_polarity_flip_fabric175.BCM8879X=1 -phy_tx_polarity_flip_fabric176.BCM8879X=0 +phy_tx_polarity_flip_fabric176.BCM8879X=1 phy_tx_polarity_flip_fabric177.BCM8879X=0 phy_tx_polarity_flip_fabric178.BCM8879X=1 -phy_tx_polarity_flip_fabric179.BCM8879X=1 +phy_tx_polarity_flip_fabric179.BCM8879X=0 -phy_tx_polarity_flip_fabric180.BCM8879X=1 +phy_tx_polarity_flip_fabric180.BCM8879X=0 phy_tx_polarity_flip_fabric181.BCM8879X=1 phy_tx_polarity_flip_fabric182.BCM8879X=0 -phy_tx_polarity_flip_fabric183.BCM8879X=0 +phy_tx_polarity_flip_fabric183.BCM8879X=1 -phy_tx_polarity_flip_fabric184.BCM8879X=0 -phy_tx_polarity_flip_fabric185.BCM8879X=1 +phy_tx_polarity_flip_fabric184.BCM8879X=1 +phy_tx_polarity_flip_fabric185.BCM8879X=0 phy_tx_polarity_flip_fabric186.BCM8879X=1 phy_tx_polarity_flip_fabric187.BCM8879X=0 -phy_tx_polarity_flip_fabric188.BCM8879X=1 -phy_tx_polarity_flip_fabric189.BCM8879X=0 +phy_tx_polarity_flip_fabric188.BCM8879X=0 +phy_tx_polarity_flip_fabric189.BCM8879X=1 phy_tx_polarity_flip_fabric190.BCM8879X=0 phy_tx_polarity_flip_fabric191.BCM8879X=1 +port_init_cl72_0=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 +port_init_cl72_19=0 +port_init_cl72_20=0 +port_init_cl72_21=0 +port_init_cl72_22=0 +port_init_cl72_23=0 +port_init_cl72_24=0 +port_init_cl72_25=0 +port_init_cl72_26=0 +port_init_cl72_27=0 +port_init_cl72_28=0 +port_init_cl72_29=0 +port_init_cl72_30=0 +port_init_cl72_31=0 +port_init_cl72_32=0 +port_init_cl72_33=0 +port_init_cl72_34=0 +port_init_cl72_35=0 +port_init_cl72_36=0 +port_init_cl72_37=0 +port_init_cl72_38=0 +port_init_cl72_39=0 +port_init_cl72_40=0 +port_init_cl72_41=0 +port_init_cl72_42=0 +port_init_cl72_43=0 +port_init_cl72_44=0 +port_init_cl72_45=0 +port_init_cl72_46=0 +port_init_cl72_47=0 +port_init_cl72_48=0 +port_init_cl72_49=0 +port_init_cl72_50=0 +port_init_cl72_51=0 +port_init_cl72_52=0 +port_init_cl72_53=0 +port_init_cl72_54=0 +port_init_cl72_55=0 +port_init_cl72_56=0 +port_init_cl72_57=0 +port_init_cl72_58=0 +port_init_cl72_59=0 +port_init_cl72_60=0 +port_init_cl72_61=0 +port_init_cl72_62=0 +port_init_cl72_63=0 +port_init_cl72_64=0 +port_init_cl72_65=0 +port_init_cl72_66=0 +port_init_cl72_67=0 +port_init_cl72_68=0 +port_init_cl72_69=0 +port_init_cl72_70=0 +port_init_cl72_71=0 +port_init_cl72_72=0 +port_init_cl72_73=0 +port_init_cl72_74=0 +port_init_cl72_75=0 +port_init_cl72_76=0 +port_init_cl72_77=0 +port_init_cl72_78=0 +port_init_cl72_79=0 +port_init_cl72_80=0 +port_init_cl72_81=0 +port_init_cl72_82=0 +port_init_cl72_83=0 +port_init_cl72_84=0 +port_init_cl72_85=0 +port_init_cl72_86=0 +port_init_cl72_87=0 +port_init_cl72_88=0 +port_init_cl72_89=0 +port_init_cl72_90=0 +port_init_cl72_91=0 +port_init_cl72_92=0 +port_init_cl72_93=0 +port_init_cl72_94=0 +port_init_cl72_95=0 +port_init_cl72_96=0 +port_init_cl72_97=0 +port_init_cl72_98=0 +port_init_cl72_99=0 +port_init_cl72_100=0 +port_init_cl72_101=0 +port_init_cl72_102=0 +port_init_cl72_103=0 +port_init_cl72_104=0 +port_init_cl72_105=0 +port_init_cl72_106=0 +port_init_cl72_107=0 +port_init_cl72_108=0 +port_init_cl72_109=0 +port_init_cl72_110=0 +port_init_cl72_111=0 +port_init_cl72_112=0 +port_init_cl72_113=0 +port_init_cl72_114=0 +port_init_cl72_115=0 +port_init_cl72_116=0 +port_init_cl72_117=0 +port_init_cl72_118=0 +port_init_cl72_119=0 +port_init_cl72_120=0 +port_init_cl72_121=0 +port_init_cl72_122=0 +port_init_cl72_123=0 +port_init_cl72_124=0 +port_init_cl72_125=0 +port_init_cl72_126=0 +port_init_cl72_127=0 +port_init_cl72_128=0 +port_init_cl72_129=0 +port_init_cl72_130=0 +port_init_cl72_131=0 +port_init_cl72_132=0 +port_init_cl72_133=0 +port_init_cl72_134=0 +port_init_cl72_135=0 +port_init_cl72_136=0 +port_init_cl72_137=0 +port_init_cl72_138=0 +port_init_cl72_139=0 +port_init_cl72_140=0 +port_init_cl72_141=0 +port_init_cl72_142=0 +port_init_cl72_143=0 +port_init_cl72_144=0 +port_init_cl72_145=0 +port_init_cl72_146=0 +port_init_cl72_147=0 +port_init_cl72_148=0 +port_init_cl72_149=0 +port_init_cl72_150=0 +port_init_cl72_151=0 +port_init_cl72_152=0 +port_init_cl72_153=0 +port_init_cl72_154=0 +port_init_cl72_155=0 +port_init_cl72_156=0 +port_init_cl72_157=0 +port_init_cl72_158=0 +port_init_cl72_159=0 +port_init_cl72_160=0 +port_init_cl72_161=0 +port_init_cl72_162=0 +port_init_cl72_163=0 +port_init_cl72_164=0 +port_init_cl72_165=0 +port_init_cl72_166=0 +port_init_cl72_167=0 +port_init_cl72_168=0 +port_init_cl72_169=0 +port_init_cl72_170=0 +port_init_cl72_171=0 +port_init_cl72_172=0 +port_init_cl72_173=0 +port_init_cl72_174=0 +port_init_cl72_175=0 +port_init_cl72_176=0 +port_init_cl72_177=0 +port_init_cl72_178=0 +port_init_cl72_179=0 +port_init_cl72_180=0 +port_init_cl72_181=0 +port_init_cl72_182=0 +port_init_cl72_183=0 +port_init_cl72_184=0 +port_init_cl72_185=0 +port_init_cl72_186=0 +port_init_cl72_187=0 +port_init_cl72_188=0 +port_init_cl72_189=0 +port_init_cl72_190=0 +port_init_cl72_191=0 + +serdes_tx_taps_0.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_1.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_2.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_3.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_4.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_5.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_6.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_7.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_8.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_9.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_10.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_11.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_12.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_13.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_14.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_15.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_16.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_17.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_18.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_19.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_20.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_21.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_22.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_23.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_24.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_25.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_26.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_27.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_28.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_29.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_30.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_31.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_32.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_33.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_34.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_35.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_36.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_37.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_38.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_39.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_40.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_41.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_42.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_43.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_44.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_45.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_46.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_47.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_48.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_49.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_50.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_51.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_52.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_53.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_54.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_55.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_56.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_57.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_58.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_59.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_60.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_61.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_62.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_63.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_64.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_65.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_66.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_67.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_68.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_69.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_70.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_71.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_72.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_73.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_74.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_75.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_76.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_77.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_78.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_79.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_80.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_81.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_82.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_83.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_84.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_85.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_86.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_87.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_88.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_89.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_90.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_91.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_92.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_93.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_94.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_95.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_96.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_97.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_98.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_99.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_100.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_101.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_102.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_103.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_104.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_105.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_106.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_107.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_108.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_109.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_110.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_111.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_112.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_113.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_114.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_115.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_116.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_117.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_118.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_119.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_120.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_121.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_122.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_123.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_124.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_125.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_126.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_127.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_128.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_129.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_130.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_131.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_132.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_133.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_134.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_135.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_136.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_137.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_138.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_139.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_140.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_141.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_142.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_143.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_144.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_145.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_146.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_147.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_148.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_149.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_150.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_151.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_152.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_153.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_154.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_155.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_156.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_157.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_158.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_159.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_160.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_161.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_162.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_163.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_164.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_165.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_166.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_167.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_168.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_169.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_170.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_171.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_172.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_173.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_174.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_175.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_176.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_177.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_178.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_179.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_180.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_181.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_182.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_183.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_184.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_185.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_186.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_187.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_188.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_189.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_190.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_191.BCM8879X=pam4:-24:132:-12:0:0:0 serdes_lane_config_channel_mode_0.0=force_nr serdes_lane_config_channel_mode_1.0=force_nr diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/5/config-ramon-3-1.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/5/config-ramon-3-1.bcm index b4ddd3ef7cef..cd94ed157c46 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/5/config-ramon-3-1.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/5/config-ramon-3-1.bcm @@ -1,7 +1,8 @@ + appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=6 bcm_linkscan_interval.BCM8879X=0 -bcm_stat_interval.BCM8879X=0 +bcm_stat_interval.BCM8879X=4000000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 @@ -20,10 +21,10 @@ mdio_output_delay_int.BCM8879X=25 mem_cache_enable_parity.BCM8879X=1 mm_intr_enable.BCM8879X=0 mm_timeout_usec.BCM8879X=300000 -polled_irq_delay.BCM8879X=500000 +polled_irq_delay.BCM8879X=100000 polled_irq_mode.BCM8879X=1 port_fec.BCM8879X=7 -port_init_cl72.BCM8879X=1 +port_init_cl72.BCM8879X=0 port_init_speed.BCM8879X=53125 rate_ext_mdio_divisor.BCM8879X=14 rate_int_mdio_divisor.BCM8879X=50 @@ -42,134 +43,134 @@ tslam_dma_enable.BCM8879X=0 tslam_intr_enable.BCM8879X=0 tslam_timeout_usec.BCM8879X=5000000 -lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx1 -lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx3 +lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx1 lane_to_serdes_map_fabric_lane2.BCM8879X=rx2:tx2 -lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx0 +lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx3 -lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx5 -lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx6 -lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx7 -lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx4 +lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx4 +lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx5 +lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx7 -lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx10 -lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx8 -lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx11 -lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx9 +lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx11 -lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx13 -lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx15 +lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx13 lane_to_serdes_map_fabric_lane14.BCM8879X=rx14:tx14 -lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx12 +lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx15 -lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx18 -lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx16 -lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx17 +lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx18 lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx19 lane_to_serdes_map_fabric_lane20.BCM8879X=rx20:tx20 -lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx22 -lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx23 -lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx21 +lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx23 lane_to_serdes_map_fabric_lane24.BCM8879X=rx24:tx24 -lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx26 -lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx27 -lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx25 +lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx26 +lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx27 -lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx29 -lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx30 -lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx28 +lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx29 +lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx30 lane_to_serdes_map_fabric_lane31.BCM8879X=rx31:tx31 -lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx34 -lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx32 -lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx35 -lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx33 +lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx35 lane_to_serdes_map_fabric_lane36.BCM8879X=rx36:tx36 -lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx38 -lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx39 -lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx37 - -lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx43 -lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx42 -lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx40 -lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx41 - -lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx46 -lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx44 -lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx45 +lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx39 + +lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx40 +lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx41 +lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx42 +lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx43 + +lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx44 +lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx46 lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx47 -lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx49 -lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx50 -lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx51 -lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx48 +lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx51 -lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx54 +lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx52 lane_to_serdes_map_fabric_lane53.BCM8879X=rx53:tx53 -lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx55 -lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx52 +lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx55 -lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx57 -lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx58 -lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx59 -lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx56 +lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx56 +lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx57 +lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx58 +lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx59 -lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx61 -lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx60 +lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx60 +lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx61 lane_to_serdes_map_fabric_lane62.BCM8879X=rx62:tx62 lane_to_serdes_map_fabric_lane63.BCM8879X=rx63:tx63 lane_to_serdes_map_fabric_lane64.BCM8879X=rx64:tx64 -lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx66 -lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx65 +lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx66 lane_to_serdes_map_fabric_lane67.BCM8879X=rx67:tx67 -lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx69 -lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx70 -lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx71 -lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx68 +lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx71 -lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx74 -lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx72 -lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx75 -lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx73 +lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx72 +lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx75 -lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx78 -lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx76 -lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx79 -lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx77 +lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx76 +lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx77 +lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx78 +lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx79 lane_to_serdes_map_fabric_lane80.BCM8879X=rx80:tx80 -lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx82 -lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx81 +lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx82 lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx83 -lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx85 -lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx86 -lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx87 -lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx84 +lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx87 -lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx90 -lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx88 -lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx91 -lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx89 +lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx89 +lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx90 +lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx91 -lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx95 -lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx94 -lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx92 -lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx93 +lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx92 +lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx94 +lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx95 lane_to_serdes_map_fabric_lane96.BCM8879X=rx96:tx96 -lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx98 -lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx97 +lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx98 lane_to_serdes_map_fabric_lane99.BCM8879X=rx99:tx99 -lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx101 -lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx102 -lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx100 +lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx102 lane_to_serdes_map_fabric_lane103.BCM8879X=rx103:tx103 lane_to_serdes_map_fabric_lane104.BCM8879X=rx104:tx104 @@ -179,13 +180,13 @@ lane_to_serdes_map_fabric_lane107.BCM8879X=rx107:tx107 lane_to_serdes_map_fabric_lane108.BCM8879X=rx108:tx108 lane_to_serdes_map_fabric_lane109.BCM8879X=rx109:tx109 -lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx111 -lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx110 +lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx110 +lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx111 -lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx115 -lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx114 -lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx113 -lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx112 +lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx112 +lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx114 +lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx115 lane_to_serdes_map_fabric_lane116.BCM8879X=rx116:tx116 lane_to_serdes_map_fabric_lane117.BCM8879X=rx117:tx117 @@ -197,15 +198,15 @@ lane_to_serdes_map_fabric_lane121.BCM8879X=rx121:tx121 lane_to_serdes_map_fabric_lane122.BCM8879X=rx122:tx122 lane_to_serdes_map_fabric_lane123.BCM8879X=rx123:tx123 -lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx127 -lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx126 -lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx124 -lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx125 +lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx127 -lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx130 -lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx131 -lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx129 -lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx128 +lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx131 lane_to_serdes_map_fabric_lane132.BCM8879X=rx132:tx132 lane_to_serdes_map_fabric_lane133.BCM8879X=rx133:tx133 @@ -213,23 +214,23 @@ lane_to_serdes_map_fabric_lane134.BCM8879X=rx134:tx134 lane_to_serdes_map_fabric_lane135.BCM8879X=rx135:tx135 lane_to_serdes_map_fabric_lane136.BCM8879X=rx136:tx136 -lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx138 -lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx137 +lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx137 +lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx138 lane_to_serdes_map_fabric_lane139.BCM8879X=rx139:tx139 -lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx143 -lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx142 -lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx141 -lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx140 +lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx140 +lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx143 -lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx145 -lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx147 -lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx144 -lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx146 +lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx147 -lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx150 +lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx148 lane_to_serdes_map_fabric_lane149.BCM8879X=rx149:tx149 -lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx148 +lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx150 lane_to_serdes_map_fabric_lane151.BCM8879X=rx151:tx151 lane_to_serdes_map_fabric_lane152.BCM8879X=rx152:tx152 @@ -237,116 +238,116 @@ lane_to_serdes_map_fabric_lane153.BCM8879X=rx153:tx153 lane_to_serdes_map_fabric_lane154.BCM8879X=rx154:tx154 lane_to_serdes_map_fabric_lane155.BCM8879X=rx155:tx155 -lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx157 -lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx159 +lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx156 +lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx157 lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx158 -lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx156 +lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx159 lane_to_serdes_map_fabric_lane160.BCM8879X=rx160:tx160 -lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx162 -lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx161 +lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx162 lane_to_serdes_map_fabric_lane163.BCM8879X=rx163:tx163 -lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx166 -lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx164 -lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx165 +lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx166 lane_to_serdes_map_fabric_lane167.BCM8879X=rx167:tx167 -lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx170 -lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx168 -lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx169 +lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx168 +lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx170 lane_to_serdes_map_fabric_lane171.BCM8879X=rx171:tx171 -lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx173 -lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx174 -lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx175 -lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx172 +lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx172 +lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx173 +lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx174 +lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx175 lane_to_serdes_map_fabric_lane176.BCM8879X=rx176:tx176 -lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx178 -lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx177 +lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx178 lane_to_serdes_map_fabric_lane179.BCM8879X=rx179:tx179 lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx180 -lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx182 -lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx181 +lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx182 lane_to_serdes_map_fabric_lane183.BCM8879X=rx183:tx183 -lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx187 -lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx184 +lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx185 lane_to_serdes_map_fabric_lane186.BCM8879X=rx186:tx186 -lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx185 +lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx187 -lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx190 +lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx188 lane_to_serdes_map_fabric_lane189.BCM8879X=rx189:tx189 -lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx191 -lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx188 +lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx190 +lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx191 -phy_rx_polarity_flip_fabric0.BCM8879X=0 -phy_rx_polarity_flip_fabric1.BCM8879X=1 -phy_rx_polarity_flip_fabric2.BCM8879X=0 -phy_rx_polarity_flip_fabric3.BCM8879X=1 +phy_rx_polarity_flip_fabric0.BCM8879X=1 +phy_rx_polarity_flip_fabric1.BCM8879X=0 +phy_rx_polarity_flip_fabric2.BCM8879X=1 +phy_rx_polarity_flip_fabric3.BCM8879X=0 phy_rx_polarity_flip_fabric4.BCM8879X=1 phy_rx_polarity_flip_fabric5.BCM8879X=0 phy_rx_polarity_flip_fabric6.BCM8879X=1 phy_rx_polarity_flip_fabric7.BCM8879X=0 -phy_rx_polarity_flip_fabric8.BCM8879X=1 -phy_rx_polarity_flip_fabric9.BCM8879X=0 -phy_rx_polarity_flip_fabric10.BCM8879X=1 -phy_rx_polarity_flip_fabric11.BCM8879X=0 +phy_rx_polarity_flip_fabric8.BCM8879X=0 +phy_rx_polarity_flip_fabric9.BCM8879X=1 +phy_rx_polarity_flip_fabric10.BCM8879X=0 +phy_rx_polarity_flip_fabric11.BCM8879X=1 -phy_rx_polarity_flip_fabric12.BCM8879X=0 -phy_rx_polarity_flip_fabric13.BCM8879X=1 -phy_rx_polarity_flip_fabric14.BCM8879X=0 -phy_rx_polarity_flip_fabric15.BCM8879X=1 +phy_rx_polarity_flip_fabric12.BCM8879X=1 +phy_rx_polarity_flip_fabric13.BCM8879X=0 +phy_rx_polarity_flip_fabric14.BCM8879X=1 +phy_rx_polarity_flip_fabric15.BCM8879X=0 -phy_rx_polarity_flip_fabric16.BCM8879X=0 -phy_rx_polarity_flip_fabric17.BCM8879X=1 -phy_rx_polarity_flip_fabric18.BCM8879X=0 -phy_rx_polarity_flip_fabric19.BCM8879X=1 +phy_rx_polarity_flip_fabric16.BCM8879X=1 +phy_rx_polarity_flip_fabric17.BCM8879X=0 +phy_rx_polarity_flip_fabric18.BCM8879X=1 +phy_rx_polarity_flip_fabric19.BCM8879X=0 phy_rx_polarity_flip_fabric20.BCM8879X=0 phy_rx_polarity_flip_fabric21.BCM8879X=1 phy_rx_polarity_flip_fabric22.BCM8879X=0 phy_rx_polarity_flip_fabric23.BCM8879X=1 -phy_rx_polarity_flip_fabric24.BCM8879X=0 -phy_rx_polarity_flip_fabric25.BCM8879X=1 -phy_rx_polarity_flip_fabric26.BCM8879X=0 -phy_rx_polarity_flip_fabric27.BCM8879X=1 +phy_rx_polarity_flip_fabric24.BCM8879X=1 +phy_rx_polarity_flip_fabric25.BCM8879X=0 +phy_rx_polarity_flip_fabric26.BCM8879X=1 +phy_rx_polarity_flip_fabric27.BCM8879X=0 phy_rx_polarity_flip_fabric28.BCM8879X=1 phy_rx_polarity_flip_fabric29.BCM8879X=0 phy_rx_polarity_flip_fabric30.BCM8879X=1 phy_rx_polarity_flip_fabric31.BCM8879X=0 -phy_rx_polarity_flip_fabric32.BCM8879X=1 -phy_rx_polarity_flip_fabric33.BCM8879X=0 -phy_rx_polarity_flip_fabric34.BCM8879X=1 -phy_rx_polarity_flip_fabric35.BCM8879X=0 +phy_rx_polarity_flip_fabric32.BCM8879X=0 +phy_rx_polarity_flip_fabric33.BCM8879X=1 +phy_rx_polarity_flip_fabric34.BCM8879X=0 +phy_rx_polarity_flip_fabric35.BCM8879X=1 -phy_rx_polarity_flip_fabric36.BCM8879X=0 -phy_rx_polarity_flip_fabric37.BCM8879X=1 -phy_rx_polarity_flip_fabric38.BCM8879X=0 -phy_rx_polarity_flip_fabric39.BCM8879X=1 +phy_rx_polarity_flip_fabric36.BCM8879X=1 +phy_rx_polarity_flip_fabric37.BCM8879X=0 +phy_rx_polarity_flip_fabric38.BCM8879X=1 +phy_rx_polarity_flip_fabric39.BCM8879X=0 phy_rx_polarity_flip_fabric40.BCM8879X=0 phy_rx_polarity_flip_fabric41.BCM8879X=1 phy_rx_polarity_flip_fabric42.BCM8879X=0 phy_rx_polarity_flip_fabric43.BCM8879X=1 -phy_rx_polarity_flip_fabric44.BCM8879X=0 -phy_rx_polarity_flip_fabric45.BCM8879X=1 -phy_rx_polarity_flip_fabric46.BCM8879X=0 -phy_rx_polarity_flip_fabric47.BCM8879X=1 +phy_rx_polarity_flip_fabric44.BCM8879X=1 +phy_rx_polarity_flip_fabric45.BCM8879X=0 +phy_rx_polarity_flip_fabric46.BCM8879X=1 +phy_rx_polarity_flip_fabric47.BCM8879X=0 -phy_rx_polarity_flip_fabric48.BCM8879X=0 -phy_rx_polarity_flip_fabric49.BCM8879X=1 -phy_rx_polarity_flip_fabric50.BCM8879X=0 -phy_rx_polarity_flip_fabric51.BCM8879X=1 +phy_rx_polarity_flip_fabric48.BCM8879X=1 +phy_rx_polarity_flip_fabric49.BCM8879X=0 +phy_rx_polarity_flip_fabric50.BCM8879X=1 +phy_rx_polarity_flip_fabric51.BCM8879X=0 phy_rx_polarity_flip_fabric52.BCM8879X=0 phy_rx_polarity_flip_fabric53.BCM8879X=1 @@ -358,10 +359,10 @@ phy_rx_polarity_flip_fabric57.BCM8879X=1 phy_rx_polarity_flip_fabric58.BCM8879X=0 phy_rx_polarity_flip_fabric59.BCM8879X=1 -phy_rx_polarity_flip_fabric60.BCM8879X=1 -phy_rx_polarity_flip_fabric61.BCM8879X=0 -phy_rx_polarity_flip_fabric62.BCM8879X=1 -phy_rx_polarity_flip_fabric63.BCM8879X=0 +phy_rx_polarity_flip_fabric60.BCM8879X=0 +phy_rx_polarity_flip_fabric61.BCM8879X=1 +phy_rx_polarity_flip_fabric62.BCM8879X=0 +phy_rx_polarity_flip_fabric63.BCM8879X=1 phy_rx_polarity_flip_fabric64.BCM8879X=0 phy_rx_polarity_flip_fabric65.BCM8879X=1 @@ -373,78 +374,78 @@ phy_rx_polarity_flip_fabric69.BCM8879X=0 phy_rx_polarity_flip_fabric70.BCM8879X=1 phy_rx_polarity_flip_fabric71.BCM8879X=0 -phy_rx_polarity_flip_fabric72.BCM8879X=0 -phy_rx_polarity_flip_fabric73.BCM8879X=1 -phy_rx_polarity_flip_fabric74.BCM8879X=0 -phy_rx_polarity_flip_fabric75.BCM8879X=1 +phy_rx_polarity_flip_fabric72.BCM8879X=1 +phy_rx_polarity_flip_fabric73.BCM8879X=0 +phy_rx_polarity_flip_fabric74.BCM8879X=1 +phy_rx_polarity_flip_fabric75.BCM8879X=0 phy_rx_polarity_flip_fabric76.BCM8879X=0 phy_rx_polarity_flip_fabric77.BCM8879X=1 phy_rx_polarity_flip_fabric78.BCM8879X=0 phy_rx_polarity_flip_fabric79.BCM8879X=1 -phy_rx_polarity_flip_fabric80.BCM8879X=0 -phy_rx_polarity_flip_fabric81.BCM8879X=1 -phy_rx_polarity_flip_fabric82.BCM8879X=0 -phy_rx_polarity_flip_fabric83.BCM8879X=1 +phy_rx_polarity_flip_fabric80.BCM8879X=1 +phy_rx_polarity_flip_fabric81.BCM8879X=0 +phy_rx_polarity_flip_fabric82.BCM8879X=1 +phy_rx_polarity_flip_fabric83.BCM8879X=0 -phy_rx_polarity_flip_fabric84.BCM8879X=1 -phy_rx_polarity_flip_fabric85.BCM8879X=0 -phy_rx_polarity_flip_fabric86.BCM8879X=1 -phy_rx_polarity_flip_fabric87.BCM8879X=0 +phy_rx_polarity_flip_fabric84.BCM8879X=0 +phy_rx_polarity_flip_fabric85.BCM8879X=1 +phy_rx_polarity_flip_fabric86.BCM8879X=0 +phy_rx_polarity_flip_fabric87.BCM8879X=1 phy_rx_polarity_flip_fabric88.BCM8879X=1 phy_rx_polarity_flip_fabric89.BCM8879X=0 phy_rx_polarity_flip_fabric90.BCM8879X=1 phy_rx_polarity_flip_fabric91.BCM8879X=0 -phy_rx_polarity_flip_fabric92.BCM8879X=0 -phy_rx_polarity_flip_fabric93.BCM8879X=1 -phy_rx_polarity_flip_fabric94.BCM8879X=0 -phy_rx_polarity_flip_fabric95.BCM8879X=1 +phy_rx_polarity_flip_fabric92.BCM8879X=1 +phy_rx_polarity_flip_fabric93.BCM8879X=0 +phy_rx_polarity_flip_fabric94.BCM8879X=1 +phy_rx_polarity_flip_fabric95.BCM8879X=0 phy_rx_polarity_flip_fabric96.BCM8879X=0 -phy_rx_polarity_flip_fabric97.BCM8879X=0 +phy_rx_polarity_flip_fabric97.BCM8879X=1 phy_rx_polarity_flip_fabric98.BCM8879X=0 phy_rx_polarity_flip_fabric99.BCM8879X=1 -phy_rx_polarity_flip_fabric100.BCM8879X=0 -phy_rx_polarity_flip_fabric101.BCM8879X=1 +phy_rx_polarity_flip_fabric100.BCM8879X=1 +phy_rx_polarity_flip_fabric101.BCM8879X=0 phy_rx_polarity_flip_fabric102.BCM8879X=1 -phy_rx_polarity_flip_fabric103.BCM8879X=1 +phy_rx_polarity_flip_fabric103.BCM8879X=0 phy_rx_polarity_flip_fabric104.BCM8879X=0 phy_rx_polarity_flip_fabric105.BCM8879X=1 -phy_rx_polarity_flip_fabric106.BCM8879X=1 +phy_rx_polarity_flip_fabric106.BCM8879X=0 phy_rx_polarity_flip_fabric107.BCM8879X=1 -phy_rx_polarity_flip_fabric108.BCM8879X=1 -phy_rx_polarity_flip_fabric109.BCM8879X=0 -phy_rx_polarity_flip_fabric110.BCM8879X=1 -phy_rx_polarity_flip_fabric111.BCM8879X=0 +phy_rx_polarity_flip_fabric108.BCM8879X=0 +phy_rx_polarity_flip_fabric109.BCM8879X=1 +phy_rx_polarity_flip_fabric110.BCM8879X=0 +phy_rx_polarity_flip_fabric111.BCM8879X=1 -phy_rx_polarity_flip_fabric112.BCM8879X=0 -phy_rx_polarity_flip_fabric113.BCM8879X=1 -phy_rx_polarity_flip_fabric114.BCM8879X=0 -phy_rx_polarity_flip_fabric115.BCM8879X=1 +phy_rx_polarity_flip_fabric112.BCM8879X=1 +phy_rx_polarity_flip_fabric113.BCM8879X=0 +phy_rx_polarity_flip_fabric114.BCM8879X=1 +phy_rx_polarity_flip_fabric115.BCM8879X=0 -phy_rx_polarity_flip_fabric116.BCM8879X=1 -phy_rx_polarity_flip_fabric117.BCM8879X=0 -phy_rx_polarity_flip_fabric118.BCM8879X=1 -phy_rx_polarity_flip_fabric119.BCM8879X=0 +phy_rx_polarity_flip_fabric116.BCM8879X=0 +phy_rx_polarity_flip_fabric117.BCM8879X=1 +phy_rx_polarity_flip_fabric118.BCM8879X=0 +phy_rx_polarity_flip_fabric119.BCM8879X=1 -phy_rx_polarity_flip_fabric120.BCM8879X=0 +phy_rx_polarity_flip_fabric120.BCM8879X=1 phy_rx_polarity_flip_fabric121.BCM8879X=0 -phy_rx_polarity_flip_fabric122.BCM8879X=0 -phy_rx_polarity_flip_fabric123.BCM8879X=1 +phy_rx_polarity_flip_fabric122.BCM8879X=1 +phy_rx_polarity_flip_fabric123.BCM8879X=0 phy_rx_polarity_flip_fabric124.BCM8879X=1 -phy_rx_polarity_flip_fabric125.BCM8879X=1 -phy_rx_polarity_flip_fabric126.BCM8879X=0 -phy_rx_polarity_flip_fabric127.BCM8879X=1 +phy_rx_polarity_flip_fabric125.BCM8879X=0 +phy_rx_polarity_flip_fabric126.BCM8879X=1 +phy_rx_polarity_flip_fabric127.BCM8879X=0 phy_rx_polarity_flip_fabric128.BCM8879X=0 -phy_rx_polarity_flip_fabric129.BCM8879X=0 +phy_rx_polarity_flip_fabric129.BCM8879X=1 phy_rx_polarity_flip_fabric130.BCM8879X=0 phy_rx_polarity_flip_fabric131.BCM8879X=1 @@ -453,25 +454,25 @@ phy_rx_polarity_flip_fabric133.BCM8879X=0 phy_rx_polarity_flip_fabric134.BCM8879X=1 phy_rx_polarity_flip_fabric135.BCM8879X=0 -phy_rx_polarity_flip_fabric136.BCM8879X=1 -phy_rx_polarity_flip_fabric137.BCM8879X=0 -phy_rx_polarity_flip_fabric138.BCM8879X=1 -phy_rx_polarity_flip_fabric139.BCM8879X=0 +phy_rx_polarity_flip_fabric136.BCM8879X=0 +phy_rx_polarity_flip_fabric137.BCM8879X=1 +phy_rx_polarity_flip_fabric138.BCM8879X=0 +phy_rx_polarity_flip_fabric139.BCM8879X=1 -phy_rx_polarity_flip_fabric140.BCM8879X=0 -phy_rx_polarity_flip_fabric141.BCM8879X=1 -phy_rx_polarity_flip_fabric142.BCM8879X=0 -phy_rx_polarity_flip_fabric143.BCM8879X=1 +phy_rx_polarity_flip_fabric140.BCM8879X=1 +phy_rx_polarity_flip_fabric141.BCM8879X=0 +phy_rx_polarity_flip_fabric142.BCM8879X=1 +phy_rx_polarity_flip_fabric143.BCM8879X=0 -phy_rx_polarity_flip_fabric144.BCM8879X=0 -phy_rx_polarity_flip_fabric145.BCM8879X=1 -phy_rx_polarity_flip_fabric146.BCM8879X=0 -phy_rx_polarity_flip_fabric147.BCM8879X=1 +phy_rx_polarity_flip_fabric144.BCM8879X=1 +phy_rx_polarity_flip_fabric145.BCM8879X=0 +phy_rx_polarity_flip_fabric146.BCM8879X=1 +phy_rx_polarity_flip_fabric147.BCM8879X=0 -phy_rx_polarity_flip_fabric148.BCM8879X=1 -phy_rx_polarity_flip_fabric149.BCM8879X=0 -phy_rx_polarity_flip_fabric150.BCM8879X=1 -phy_rx_polarity_flip_fabric151.BCM8879X=0 +phy_rx_polarity_flip_fabric148.BCM8879X=0 +phy_rx_polarity_flip_fabric149.BCM8879X=1 +phy_rx_polarity_flip_fabric150.BCM8879X=0 +phy_rx_polarity_flip_fabric151.BCM8879X=1 phy_rx_polarity_flip_fabric152.BCM8879X=1 phy_rx_polarity_flip_fabric153.BCM8879X=0 @@ -480,28 +481,28 @@ phy_rx_polarity_flip_fabric155.BCM8879X=0 phy_rx_polarity_flip_fabric156.BCM8879X=0 phy_rx_polarity_flip_fabric157.BCM8879X=1 -phy_rx_polarity_flip_fabric158.BCM8879X=1 +phy_rx_polarity_flip_fabric158.BCM8879X=0 phy_rx_polarity_flip_fabric159.BCM8879X=1 -phy_rx_polarity_flip_fabric160.BCM8879X=0 +phy_rx_polarity_flip_fabric160.BCM8879X=1 phy_rx_polarity_flip_fabric161.BCM8879X=0 -phy_rx_polarity_flip_fabric162.BCM8879X=0 -phy_rx_polarity_flip_fabric163.BCM8879X=1 +phy_rx_polarity_flip_fabric162.BCM8879X=1 +phy_rx_polarity_flip_fabric163.BCM8879X=0 -phy_rx_polarity_flip_fabric164.BCM8879X=0 +phy_rx_polarity_flip_fabric164.BCM8879X=1 phy_rx_polarity_flip_fabric165.BCM8879X=0 -phy_rx_polarity_flip_fabric166.BCM8879X=0 -phy_rx_polarity_flip_fabric167.BCM8879X=1 +phy_rx_polarity_flip_fabric166.BCM8879X=1 +phy_rx_polarity_flip_fabric167.BCM8879X=0 -phy_rx_polarity_flip_fabric168.BCM8879X=0 -phy_rx_polarity_flip_fabric169.BCM8879X=1 -phy_rx_polarity_flip_fabric170.BCM8879X=0 -phy_rx_polarity_flip_fabric171.BCM8879X=1 +phy_rx_polarity_flip_fabric168.BCM8879X=1 +phy_rx_polarity_flip_fabric169.BCM8879X=0 +phy_rx_polarity_flip_fabric170.BCM8879X=1 +phy_rx_polarity_flip_fabric171.BCM8879X=0 -phy_rx_polarity_flip_fabric172.BCM8879X=1 -phy_rx_polarity_flip_fabric173.BCM8879X=0 -phy_rx_polarity_flip_fabric174.BCM8879X=1 -phy_rx_polarity_flip_fabric175.BCM8879X=0 +phy_rx_polarity_flip_fabric172.BCM8879X=0 +phy_rx_polarity_flip_fabric173.BCM8879X=1 +phy_rx_polarity_flip_fabric174.BCM8879X=0 +phy_rx_polarity_flip_fabric175.BCM8879X=1 phy_rx_polarity_flip_fabric176.BCM8879X=1 phy_rx_polarity_flip_fabric177.BCM8879X=0 @@ -509,79 +510,80 @@ phy_rx_polarity_flip_fabric178.BCM8879X=1 phy_rx_polarity_flip_fabric179.BCM8879X=0 phy_rx_polarity_flip_fabric180.BCM8879X=0 -phy_rx_polarity_flip_fabric181.BCM8879X=0 +phy_rx_polarity_flip_fabric181.BCM8879X=1 phy_rx_polarity_flip_fabric182.BCM8879X=0 phy_rx_polarity_flip_fabric183.BCM8879X=1 -phy_rx_polarity_flip_fabric184.BCM8879X=0 +phy_rx_polarity_flip_fabric184.BCM8879X=1 phy_rx_polarity_flip_fabric185.BCM8879X=0 -phy_rx_polarity_flip_fabric186.BCM8879X=0 -phy_rx_polarity_flip_fabric187.BCM8879X=1 +phy_rx_polarity_flip_fabric186.BCM8879X=1 +phy_rx_polarity_flip_fabric187.BCM8879X=0 phy_rx_polarity_flip_fabric188.BCM8879X=1 -phy_rx_polarity_flip_fabric189.BCM8879X=1 -phy_rx_polarity_flip_fabric190.BCM8879X=0 -phy_rx_polarity_flip_fabric191.BCM8879X=1 +phy_rx_polarity_flip_fabric189.BCM8879X=0 +phy_rx_polarity_flip_fabric190.BCM8879X=1 +phy_rx_polarity_flip_fabric191.BCM8879X=0 + phy_tx_polarity_flip_fabric0.BCM8879X=0 -phy_tx_polarity_flip_fabric1.BCM8879X=0 -phy_tx_polarity_flip_fabric2.BCM8879X=1 +phy_tx_polarity_flip_fabric1.BCM8879X=1 +phy_tx_polarity_flip_fabric2.BCM8879X=0 phy_tx_polarity_flip_fabric3.BCM8879X=1 -phy_tx_polarity_flip_fabric4.BCM8879X=1 -phy_tx_polarity_flip_fabric5.BCM8879X=0 -phy_tx_polarity_flip_fabric6.BCM8879X=1 -phy_tx_polarity_flip_fabric7.BCM8879X=0 +phy_tx_polarity_flip_fabric4.BCM8879X=0 +phy_tx_polarity_flip_fabric5.BCM8879X=1 +phy_tx_polarity_flip_fabric6.BCM8879X=0 +phy_tx_polarity_flip_fabric7.BCM8879X=1 -phy_tx_polarity_flip_fabric8.BCM8879X=0 +phy_tx_polarity_flip_fabric8.BCM8879X=1 phy_tx_polarity_flip_fabric9.BCM8879X=0 phy_tx_polarity_flip_fabric10.BCM8879X=1 -phy_tx_polarity_flip_fabric11.BCM8879X=1 +phy_tx_polarity_flip_fabric11.BCM8879X=0 phy_tx_polarity_flip_fabric12.BCM8879X=0 -phy_tx_polarity_flip_fabric13.BCM8879X=0 -phy_tx_polarity_flip_fabric14.BCM8879X=1 +phy_tx_polarity_flip_fabric13.BCM8879X=1 +phy_tx_polarity_flip_fabric14.BCM8879X=0 phy_tx_polarity_flip_fabric15.BCM8879X=1 -phy_tx_polarity_flip_fabric16.BCM8879X=1 +phy_tx_polarity_flip_fabric16.BCM8879X=0 phy_tx_polarity_flip_fabric17.BCM8879X=1 phy_tx_polarity_flip_fabric18.BCM8879X=0 -phy_tx_polarity_flip_fabric19.BCM8879X=0 +phy_tx_polarity_flip_fabric19.BCM8879X=1 phy_tx_polarity_flip_fabric20.BCM8879X=1 -phy_tx_polarity_flip_fabric21.BCM8879X=1 -phy_tx_polarity_flip_fabric22.BCM8879X=0 +phy_tx_polarity_flip_fabric21.BCM8879X=0 +phy_tx_polarity_flip_fabric22.BCM8879X=1 phy_tx_polarity_flip_fabric23.BCM8879X=0 -phy_tx_polarity_flip_fabric24.BCM8879X=1 +phy_tx_polarity_flip_fabric24.BCM8879X=0 phy_tx_polarity_flip_fabric25.BCM8879X=1 phy_tx_polarity_flip_fabric26.BCM8879X=0 -phy_tx_polarity_flip_fabric27.BCM8879X=0 +phy_tx_polarity_flip_fabric27.BCM8879X=1 -phy_tx_polarity_flip_fabric28.BCM8879X=1 -phy_tx_polarity_flip_fabric29.BCM8879X=0 +phy_tx_polarity_flip_fabric28.BCM8879X=0 +phy_tx_polarity_flip_fabric29.BCM8879X=1 phy_tx_polarity_flip_fabric30.BCM8879X=0 phy_tx_polarity_flip_fabric31.BCM8879X=1 -phy_tx_polarity_flip_fabric32.BCM8879X=0 +phy_tx_polarity_flip_fabric32.BCM8879X=1 phy_tx_polarity_flip_fabric33.BCM8879X=0 phy_tx_polarity_flip_fabric34.BCM8879X=1 -phy_tx_polarity_flip_fabric35.BCM8879X=1 +phy_tx_polarity_flip_fabric35.BCM8879X=0 -phy_tx_polarity_flip_fabric36.BCM8879X=1 +phy_tx_polarity_flip_fabric36.BCM8879X=0 phy_tx_polarity_flip_fabric37.BCM8879X=1 phy_tx_polarity_flip_fabric38.BCM8879X=0 -phy_tx_polarity_flip_fabric39.BCM8879X=0 +phy_tx_polarity_flip_fabric39.BCM8879X=1 -phy_tx_polarity_flip_fabric40.BCM8879X=0 -phy_tx_polarity_flip_fabric41.BCM8879X=1 +phy_tx_polarity_flip_fabric40.BCM8879X=1 +phy_tx_polarity_flip_fabric41.BCM8879X=0 phy_tx_polarity_flip_fabric42.BCM8879X=1 phy_tx_polarity_flip_fabric43.BCM8879X=0 -phy_tx_polarity_flip_fabric44.BCM8879X=1 +phy_tx_polarity_flip_fabric44.BCM8879X=0 phy_tx_polarity_flip_fabric45.BCM8879X=1 phy_tx_polarity_flip_fabric46.BCM8879X=0 -phy_tx_polarity_flip_fabric47.BCM8879X=0 +phy_tx_polarity_flip_fabric47.BCM8879X=1 phy_tx_polarity_flip_fabric48.BCM8879X=0 phy_tx_polarity_flip_fabric49.BCM8879X=1 @@ -590,43 +592,43 @@ phy_tx_polarity_flip_fabric51.BCM8879X=1 phy_tx_polarity_flip_fabric52.BCM8879X=1 phy_tx_polarity_flip_fabric53.BCM8879X=0 -phy_tx_polarity_flip_fabric54.BCM8879X=0 -phy_tx_polarity_flip_fabric55.BCM8879X=1 +phy_tx_polarity_flip_fabric54.BCM8879X=1 +phy_tx_polarity_flip_fabric55.BCM8879X=0 -phy_tx_polarity_flip_fabric56.BCM8879X=0 -phy_tx_polarity_flip_fabric57.BCM8879X=1 -phy_tx_polarity_flip_fabric58.BCM8879X=0 -phy_tx_polarity_flip_fabric59.BCM8879X=1 +phy_tx_polarity_flip_fabric56.BCM8879X=1 +phy_tx_polarity_flip_fabric57.BCM8879X=0 +phy_tx_polarity_flip_fabric58.BCM8879X=1 +phy_tx_polarity_flip_fabric59.BCM8879X=0 phy_tx_polarity_flip_fabric60.BCM8879X=1 phy_tx_polarity_flip_fabric61.BCM8879X=0 -phy_tx_polarity_flip_fabric62.BCM8879X=0 -phy_tx_polarity_flip_fabric63.BCM8879X=1 +phy_tx_polarity_flip_fabric62.BCM8879X=1 +phy_tx_polarity_flip_fabric63.BCM8879X=0 phy_tx_polarity_flip_fabric64.BCM8879X=1 -phy_tx_polarity_flip_fabric65.BCM8879X=1 -phy_tx_polarity_flip_fabric66.BCM8879X=0 +phy_tx_polarity_flip_fabric65.BCM8879X=0 +phy_tx_polarity_flip_fabric66.BCM8879X=1 phy_tx_polarity_flip_fabric67.BCM8879X=0 -phy_tx_polarity_flip_fabric68.BCM8879X=1 -phy_tx_polarity_flip_fabric69.BCM8879X=0 -phy_tx_polarity_flip_fabric70.BCM8879X=1 -phy_tx_polarity_flip_fabric71.BCM8879X=0 +phy_tx_polarity_flip_fabric68.BCM8879X=0 +phy_tx_polarity_flip_fabric69.BCM8879X=1 +phy_tx_polarity_flip_fabric70.BCM8879X=0 +phy_tx_polarity_flip_fabric71.BCM8879X=1 -phy_tx_polarity_flip_fabric72.BCM8879X=1 +phy_tx_polarity_flip_fabric72.BCM8879X=0 phy_tx_polarity_flip_fabric73.BCM8879X=1 phy_tx_polarity_flip_fabric74.BCM8879X=0 -phy_tx_polarity_flip_fabric75.BCM8879X=0 +phy_tx_polarity_flip_fabric75.BCM8879X=1 phy_tx_polarity_flip_fabric76.BCM8879X=1 -phy_tx_polarity_flip_fabric77.BCM8879X=1 -phy_tx_polarity_flip_fabric78.BCM8879X=0 +phy_tx_polarity_flip_fabric77.BCM8879X=0 +phy_tx_polarity_flip_fabric78.BCM8879X=1 phy_tx_polarity_flip_fabric79.BCM8879X=0 -phy_tx_polarity_flip_fabric80.BCM8879X=1 +phy_tx_polarity_flip_fabric80.BCM8879X=0 phy_tx_polarity_flip_fabric81.BCM8879X=1 phy_tx_polarity_flip_fabric82.BCM8879X=0 -phy_tx_polarity_flip_fabric83.BCM8879X=0 +phy_tx_polarity_flip_fabric83.BCM8879X=1 phy_tx_polarity_flip_fabric84.BCM8879X=1 phy_tx_polarity_flip_fabric85.BCM8879X=0 @@ -634,32 +636,32 @@ phy_tx_polarity_flip_fabric86.BCM8879X=1 phy_tx_polarity_flip_fabric87.BCM8879X=0 phy_tx_polarity_flip_fabric88.BCM8879X=0 -phy_tx_polarity_flip_fabric89.BCM8879X=0 -phy_tx_polarity_flip_fabric90.BCM8879X=1 +phy_tx_polarity_flip_fabric89.BCM8879X=1 +phy_tx_polarity_flip_fabric90.BCM8879X=0 phy_tx_polarity_flip_fabric91.BCM8879X=1 phy_tx_polarity_flip_fabric92.BCM8879X=0 phy_tx_polarity_flip_fabric93.BCM8879X=1 -phy_tx_polarity_flip_fabric94.BCM8879X=1 -phy_tx_polarity_flip_fabric95.BCM8879X=0 +phy_tx_polarity_flip_fabric94.BCM8879X=0 +phy_tx_polarity_flip_fabric95.BCM8879X=1 phy_tx_polarity_flip_fabric96.BCM8879X=1 -phy_tx_polarity_flip_fabric97.BCM8879X=1 -phy_tx_polarity_flip_fabric98.BCM8879X=0 +phy_tx_polarity_flip_fabric97.BCM8879X=0 +phy_tx_polarity_flip_fabric98.BCM8879X=1 phy_tx_polarity_flip_fabric99.BCM8879X=0 phy_tx_polarity_flip_fabric100.BCM8879X=0 -phy_tx_polarity_flip_fabric101.BCM8879X=0 +phy_tx_polarity_flip_fabric101.BCM8879X=1 phy_tx_polarity_flip_fabric102.BCM8879X=0 -phy_tx_polarity_flip_fabric103.BCM8879X=0 +phy_tx_polarity_flip_fabric103.BCM8879X=1 phy_tx_polarity_flip_fabric104.BCM8879X=1 phy_tx_polarity_flip_fabric105.BCM8879X=0 -phy_tx_polarity_flip_fabric106.BCM8879X=0 -phy_tx_polarity_flip_fabric107.BCM8879X=1 +phy_tx_polarity_flip_fabric106.BCM8879X=1 +phy_tx_polarity_flip_fabric107.BCM8879X=0 -phy_tx_polarity_flip_fabric108.BCM8879X=0 -phy_tx_polarity_flip_fabric109.BCM8879X=1 +phy_tx_polarity_flip_fabric108.BCM8879X=1 +phy_tx_polarity_flip_fabric109.BCM8879X=0 phy_tx_polarity_flip_fabric110.BCM8879X=1 phy_tx_polarity_flip_fabric111.BCM8879X=0 @@ -668,35 +670,35 @@ phy_tx_polarity_flip_fabric113.BCM8879X=1 phy_tx_polarity_flip_fabric114.BCM8879X=0 phy_tx_polarity_flip_fabric115.BCM8879X=1 -phy_tx_polarity_flip_fabric116.BCM8879X=0 -phy_tx_polarity_flip_fabric117.BCM8879X=1 -phy_tx_polarity_flip_fabric118.BCM8879X=0 -phy_tx_polarity_flip_fabric119.BCM8879X=1 +phy_tx_polarity_flip_fabric116.BCM8879X=1 +phy_tx_polarity_flip_fabric117.BCM8879X=0 +phy_tx_polarity_flip_fabric118.BCM8879X=1 +phy_tx_polarity_flip_fabric119.BCM8879X=0 -phy_tx_polarity_flip_fabric120.BCM8879X=1 -phy_tx_polarity_flip_fabric121.BCM8879X=0 -phy_tx_polarity_flip_fabric122.BCM8879X=1 -phy_tx_polarity_flip_fabric123.BCM8879X=0 +phy_tx_polarity_flip_fabric120.BCM8879X=0 +phy_tx_polarity_flip_fabric121.BCM8879X=1 +phy_tx_polarity_flip_fabric122.BCM8879X=0 +phy_tx_polarity_flip_fabric123.BCM8879X=1 -phy_tx_polarity_flip_fabric124.BCM8879X=1 -phy_tx_polarity_flip_fabric125.BCM8879X=0 -phy_tx_polarity_flip_fabric126.BCM8879X=1 -phy_tx_polarity_flip_fabric127.BCM8879X=0 +phy_tx_polarity_flip_fabric124.BCM8879X=0 +phy_tx_polarity_flip_fabric125.BCM8879X=1 +phy_tx_polarity_flip_fabric126.BCM8879X=0 +phy_tx_polarity_flip_fabric127.BCM8879X=1 -phy_tx_polarity_flip_fabric128.BCM8879X=0 -phy_tx_polarity_flip_fabric129.BCM8879X=1 -phy_tx_polarity_flip_fabric130.BCM8879X=0 -phy_tx_polarity_flip_fabric131.BCM8879X=1 +phy_tx_polarity_flip_fabric128.BCM8879X=1 +phy_tx_polarity_flip_fabric129.BCM8879X=0 +phy_tx_polarity_flip_fabric130.BCM8879X=1 +phy_tx_polarity_flip_fabric131.BCM8879X=0 phy_tx_polarity_flip_fabric132.BCM8879X=0 phy_tx_polarity_flip_fabric133.BCM8879X=1 phy_tx_polarity_flip_fabric134.BCM8879X=0 phy_tx_polarity_flip_fabric135.BCM8879X=1 -phy_tx_polarity_flip_fabric136.BCM8879X=0 +phy_tx_polarity_flip_fabric136.BCM8879X=1 phy_tx_polarity_flip_fabric137.BCM8879X=0 phy_tx_polarity_flip_fabric138.BCM8879X=1 -phy_tx_polarity_flip_fabric139.BCM8879X=1 +phy_tx_polarity_flip_fabric139.BCM8879X=0 phy_tx_polarity_flip_fabric140.BCM8879X=0 phy_tx_polarity_flip_fabric141.BCM8879X=1 @@ -704,39 +706,39 @@ phy_tx_polarity_flip_fabric142.BCM8879X=0 phy_tx_polarity_flip_fabric143.BCM8879X=1 phy_tx_polarity_flip_fabric144.BCM8879X=0 -phy_tx_polarity_flip_fabric145.BCM8879X=0 -phy_tx_polarity_flip_fabric146.BCM8879X=1 +phy_tx_polarity_flip_fabric145.BCM8879X=1 +phy_tx_polarity_flip_fabric146.BCM8879X=0 phy_tx_polarity_flip_fabric147.BCM8879X=1 -phy_tx_polarity_flip_fabric148.BCM8879X=0 -phy_tx_polarity_flip_fabric149.BCM8879X=1 -phy_tx_polarity_flip_fabric150.BCM8879X=0 -phy_tx_polarity_flip_fabric151.BCM8879X=1 +phy_tx_polarity_flip_fabric148.BCM8879X=1 +phy_tx_polarity_flip_fabric149.BCM8879X=0 +phy_tx_polarity_flip_fabric150.BCM8879X=1 +phy_tx_polarity_flip_fabric151.BCM8879X=0 phy_tx_polarity_flip_fabric152.BCM8879X=0 phy_tx_polarity_flip_fabric153.BCM8879X=1 phy_tx_polarity_flip_fabric154.BCM8879X=0 phy_tx_polarity_flip_fabric155.BCM8879X=1 -phy_tx_polarity_flip_fabric156.BCM8879X=0 +phy_tx_polarity_flip_fabric156.BCM8879X=1 phy_tx_polarity_flip_fabric157.BCM8879X=0 -phy_tx_polarity_flip_fabric158.BCM8879X=0 +phy_tx_polarity_flip_fabric158.BCM8879X=1 phy_tx_polarity_flip_fabric159.BCM8879X=0 -phy_tx_polarity_flip_fabric160.BCM8879X=1 +phy_tx_polarity_flip_fabric160.BCM8879X=0 phy_tx_polarity_flip_fabric161.BCM8879X=1 phy_tx_polarity_flip_fabric162.BCM8879X=0 -phy_tx_polarity_flip_fabric163.BCM8879X=0 +phy_tx_polarity_flip_fabric163.BCM8879X=1 phy_tx_polarity_flip_fabric164.BCM8879X=0 -phy_tx_polarity_flip_fabric165.BCM8879X=0 +phy_tx_polarity_flip_fabric165.BCM8879X=1 phy_tx_polarity_flip_fabric166.BCM8879X=0 -phy_tx_polarity_flip_fabric167.BCM8879X=0 +phy_tx_polarity_flip_fabric167.BCM8879X=1 -phy_tx_polarity_flip_fabric168.BCM8879X=1 +phy_tx_polarity_flip_fabric168.BCM8879X=0 phy_tx_polarity_flip_fabric169.BCM8879X=1 phy_tx_polarity_flip_fabric170.BCM8879X=0 -phy_tx_polarity_flip_fabric171.BCM8879X=0 +phy_tx_polarity_flip_fabric171.BCM8879X=1 phy_tx_polarity_flip_fabric172.BCM8879X=1 phy_tx_polarity_flip_fabric173.BCM8879X=0 @@ -744,25 +746,410 @@ phy_tx_polarity_flip_fabric174.BCM8879X=1 phy_tx_polarity_flip_fabric175.BCM8879X=0 phy_tx_polarity_flip_fabric176.BCM8879X=0 -phy_tx_polarity_flip_fabric177.BCM8879X=0 -phy_tx_polarity_flip_fabric178.BCM8879X=1 +phy_tx_polarity_flip_fabric177.BCM8879X=1 +phy_tx_polarity_flip_fabric178.BCM8879X=0 phy_tx_polarity_flip_fabric179.BCM8879X=1 -phy_tx_polarity_flip_fabric180.BCM8879X=0 +phy_tx_polarity_flip_fabric180.BCM8879X=1 phy_tx_polarity_flip_fabric181.BCM8879X=0 -phy_tx_polarity_flip_fabric182.BCM8879X=0 +phy_tx_polarity_flip_fabric182.BCM8879X=1 phy_tx_polarity_flip_fabric183.BCM8879X=0 -phy_tx_polarity_flip_fabric184.BCM8879X=1 -phy_tx_polarity_flip_fabric185.BCM8879X=0 -phy_tx_polarity_flip_fabric186.BCM8879X=1 -phy_tx_polarity_flip_fabric187.BCM8879X=0 +phy_tx_polarity_flip_fabric184.BCM8879X=0 +phy_tx_polarity_flip_fabric185.BCM8879X=1 +phy_tx_polarity_flip_fabric186.BCM8879X=0 +phy_tx_polarity_flip_fabric187.BCM8879X=1 -phy_tx_polarity_flip_fabric188.BCM8879X=1 -phy_tx_polarity_flip_fabric189.BCM8879X=0 +phy_tx_polarity_flip_fabric188.BCM8879X=0 +phy_tx_polarity_flip_fabric189.BCM8879X=1 phy_tx_polarity_flip_fabric190.BCM8879X=0 phy_tx_polarity_flip_fabric191.BCM8879X=1 +port_init_cl72_0=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 +port_init_cl72_19=0 +port_init_cl72_20=0 +port_init_cl72_21=0 +port_init_cl72_22=0 +port_init_cl72_23=0 +port_init_cl72_24=0 +port_init_cl72_25=0 +port_init_cl72_26=0 +port_init_cl72_27=0 +port_init_cl72_28=0 +port_init_cl72_29=0 +port_init_cl72_30=0 +port_init_cl72_31=0 +port_init_cl72_32=0 +port_init_cl72_33=0 +port_init_cl72_34=0 +port_init_cl72_35=0 +port_init_cl72_36=0 +port_init_cl72_37=0 +port_init_cl72_38=0 +port_init_cl72_39=0 +port_init_cl72_40=0 +port_init_cl72_41=0 +port_init_cl72_42=0 +port_init_cl72_43=0 +port_init_cl72_44=0 +port_init_cl72_45=0 +port_init_cl72_46=0 +port_init_cl72_47=0 +port_init_cl72_48=0 +port_init_cl72_49=0 +port_init_cl72_50=0 +port_init_cl72_51=0 +port_init_cl72_52=0 +port_init_cl72_53=0 +port_init_cl72_54=0 +port_init_cl72_55=0 +port_init_cl72_56=0 +port_init_cl72_57=0 +port_init_cl72_58=0 +port_init_cl72_59=0 +port_init_cl72_60=0 +port_init_cl72_61=0 +port_init_cl72_62=0 +port_init_cl72_63=0 +port_init_cl72_64=0 +port_init_cl72_65=0 +port_init_cl72_66=0 +port_init_cl72_67=0 +port_init_cl72_68=0 +port_init_cl72_69=0 +port_init_cl72_70=0 +port_init_cl72_71=0 +port_init_cl72_72=0 +port_init_cl72_73=0 +port_init_cl72_74=0 +port_init_cl72_75=0 +port_init_cl72_76=0 +port_init_cl72_77=0 +port_init_cl72_78=0 +port_init_cl72_79=0 +port_init_cl72_80=0 +port_init_cl72_81=0 +port_init_cl72_82=0 +port_init_cl72_83=0 +port_init_cl72_84=0 +port_init_cl72_85=0 +port_init_cl72_86=0 +port_init_cl72_87=0 +port_init_cl72_88=0 +port_init_cl72_89=0 +port_init_cl72_90=0 +port_init_cl72_91=0 +port_init_cl72_92=0 +port_init_cl72_93=0 +port_init_cl72_94=0 +port_init_cl72_95=0 +port_init_cl72_96=0 +port_init_cl72_97=0 +port_init_cl72_98=0 +port_init_cl72_99=0 +port_init_cl72_100=0 +port_init_cl72_101=0 +port_init_cl72_102=0 +port_init_cl72_103=0 +port_init_cl72_104=0 +port_init_cl72_105=0 +port_init_cl72_106=0 +port_init_cl72_107=0 +port_init_cl72_108=0 +port_init_cl72_109=0 +port_init_cl72_110=0 +port_init_cl72_111=0 +port_init_cl72_112=0 +port_init_cl72_113=0 +port_init_cl72_114=0 +port_init_cl72_115=0 +port_init_cl72_116=0 +port_init_cl72_117=0 +port_init_cl72_118=0 +port_init_cl72_119=0 +port_init_cl72_120=0 +port_init_cl72_121=0 +port_init_cl72_122=0 +port_init_cl72_123=0 +port_init_cl72_124=0 +port_init_cl72_125=0 +port_init_cl72_126=0 +port_init_cl72_127=0 +port_init_cl72_128=0 +port_init_cl72_129=0 +port_init_cl72_130=0 +port_init_cl72_131=0 +port_init_cl72_132=0 +port_init_cl72_133=0 +port_init_cl72_134=0 +port_init_cl72_135=0 +port_init_cl72_136=0 +port_init_cl72_137=0 +port_init_cl72_138=0 +port_init_cl72_139=0 +port_init_cl72_140=0 +port_init_cl72_141=0 +port_init_cl72_142=0 +port_init_cl72_143=0 +port_init_cl72_144=0 +port_init_cl72_145=0 +port_init_cl72_146=0 +port_init_cl72_147=0 +port_init_cl72_148=0 +port_init_cl72_149=0 +port_init_cl72_150=0 +port_init_cl72_151=0 +port_init_cl72_152=0 +port_init_cl72_153=0 +port_init_cl72_154=0 +port_init_cl72_155=0 +port_init_cl72_156=0 +port_init_cl72_157=0 +port_init_cl72_158=0 +port_init_cl72_159=0 +port_init_cl72_160=0 +port_init_cl72_161=0 +port_init_cl72_162=0 +port_init_cl72_163=0 +port_init_cl72_164=0 +port_init_cl72_165=0 +port_init_cl72_166=0 +port_init_cl72_167=0 +port_init_cl72_168=0 +port_init_cl72_169=0 +port_init_cl72_170=0 +port_init_cl72_171=0 +port_init_cl72_172=0 +port_init_cl72_173=0 +port_init_cl72_174=0 +port_init_cl72_175=0 +port_init_cl72_176=0 +port_init_cl72_177=0 +port_init_cl72_178=0 +port_init_cl72_179=0 +port_init_cl72_180=0 +port_init_cl72_181=0 +port_init_cl72_182=0 +port_init_cl72_183=0 +port_init_cl72_184=0 +port_init_cl72_185=0 +port_init_cl72_186=0 +port_init_cl72_187=0 +port_init_cl72_188=0 +port_init_cl72_189=0 +port_init_cl72_190=0 +port_init_cl72_191=0 + +serdes_tx_taps_0.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_1.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_2.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_3.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_4.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_5.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_6.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_7.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_8.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_9.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_10.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_11.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_12.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_13.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_14.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_15.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_16.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_17.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_18.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_19.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_20.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_21.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_22.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_23.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_24.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_25.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_26.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_27.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_28.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_29.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_30.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_31.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_32.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_33.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_34.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_35.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_36.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_37.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_38.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_39.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_40.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_41.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_42.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_43.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_44.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_45.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_46.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_47.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_48.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_49.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_50.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_51.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_52.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_53.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_54.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_55.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_56.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_57.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_58.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_59.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_60.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_61.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_62.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_63.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_64.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_65.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_66.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_67.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_68.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_69.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_70.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_71.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_72.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_73.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_74.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_75.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_76.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_77.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_78.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_79.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_80.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_81.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_82.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_83.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_84.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_85.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_86.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_87.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_88.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_89.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_90.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_91.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_92.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_93.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_94.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_95.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_96.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_97.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_98.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_99.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_100.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_101.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_102.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_103.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_104.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_105.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_106.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_107.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_108.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_109.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_110.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_111.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_112.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_113.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_114.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_115.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_116.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_117.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_118.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_119.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_120.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_121.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_122.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_123.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_124.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_125.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_126.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_127.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_128.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_129.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_130.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_131.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_132.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_133.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_134.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_135.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_136.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_137.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_138.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_139.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_140.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_141.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_142.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_143.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_144.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_145.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_146.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_147.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_148.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_149.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_150.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_151.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_152.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_153.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_154.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_155.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_156.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_157.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_158.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_159.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_160.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_161.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_162.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_163.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_164.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_165.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_166.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_167.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_168.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_169.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_170.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_171.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_172.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_173.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_174.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_175.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_176.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_177.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_178.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_179.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_180.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_181.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_182.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_183.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_184.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_185.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_186.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_187.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_188.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_189.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_190.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_191.BCM8879X=pam4:-24:132:-12:0:0:0 serdes_lane_config_channel_mode_0.0=force_nr serdes_lane_config_channel_mode_1.0=force_nr diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/6/config-ramon-4-0.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/6/config-ramon-4-0.bcm index ee9d150f6042..017ac5ccd40c 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/6/config-ramon-4-0.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/6/config-ramon-4-0.bcm @@ -1,7 +1,8 @@ + appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=7 bcm_linkscan_interval.BCM8879X=0 -bcm_stat_interval.BCM8879X=0 +bcm_stat_interval.BCM8879X=4000000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 @@ -20,10 +21,10 @@ mdio_output_delay_int.BCM8879X=25 mem_cache_enable_parity.BCM8879X=1 mm_intr_enable.BCM8879X=0 mm_timeout_usec.BCM8879X=300000 -polled_irq_delay.BCM8879X=500000 +polled_irq_delay.BCM8879X=100000 polled_irq_mode.BCM8879X=1 port_fec.BCM8879X=7 -port_init_cl72.BCM8879X=1 +port_init_cl72.BCM8879X=0 port_init_speed.BCM8879X=53125 rate_ext_mdio_divisor.BCM8879X=14 rate_int_mdio_divisor.BCM8879X=50 @@ -42,134 +43,134 @@ tslam_dma_enable.BCM8879X=0 tslam_intr_enable.BCM8879X=0 tslam_timeout_usec.BCM8879X=5000000 -lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx1 -lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx3 +lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx1 lane_to_serdes_map_fabric_lane2.BCM8879X=rx2:tx2 -lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx0 +lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx3 -lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx6 +lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx4 lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx5 -lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx7 -lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx4 +lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx7 -lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx10 -lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx8 -lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx11 -lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx9 +lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx11 -lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx13 -lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx15 +lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx13 lane_to_serdes_map_fabric_lane14.BCM8879X=rx14:tx14 -lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx12 +lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx15 -lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx18 -lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx16 -lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx19 -lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx17 +lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx18 +lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx19 lane_to_serdes_map_fabric_lane20.BCM8879X=rx20:tx20 -lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx22 -lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx23 -lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx21 +lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx23 lane_to_serdes_map_fabric_lane24.BCM8879X=rx24:tx24 -lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx26 -lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx27 -lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx25 +lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx26 +lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx27 -lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx29 -lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx30 -lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx28 +lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx29 +lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx30 lane_to_serdes_map_fabric_lane31.BCM8879X=rx31:tx31 -lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx34 -lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx32 -lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx35 -lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx33 +lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx35 lane_to_serdes_map_fabric_lane36.BCM8879X=rx36:tx36 -lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx38 -lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx39 -lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx37 +lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx39 -lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx43 -lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx42 -lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx40 -lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx41 +lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx40 +lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx41 +lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx42 +lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx43 lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx44 -lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx46 -lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx47 -lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx45 +lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx46 +lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx47 -lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx49 -lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx50 -lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx51 -lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx48 +lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx51 -lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx54 +lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx52 lane_to_serdes_map_fabric_lane53.BCM8879X=rx53:tx53 -lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx55 -lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx52 +lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx55 -lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx58 +lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx56 lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx57 -lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx59 -lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx56 +lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx58 +lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx59 -lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx61 -lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx60 +lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx60 +lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx61 lane_to_serdes_map_fabric_lane62.BCM8879X=rx62:tx62 lane_to_serdes_map_fabric_lane63.BCM8879X=rx63:tx63 lane_to_serdes_map_fabric_lane64.BCM8879X=rx64:tx64 -lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx66 -lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx65 +lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx66 lane_to_serdes_map_fabric_lane67.BCM8879X=rx67:tx67 -lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx69 -lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx70 -lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx71 -lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx68 +lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx71 -lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx74 -lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx72 -lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx75 -lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx73 +lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx72 +lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx75 -lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx78 -lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx76 -lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx79 -lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx77 +lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx76 +lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx77 +lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx78 +lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx79 lane_to_serdes_map_fabric_lane80.BCM8879X=rx80:tx80 -lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx82 -lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx83 -lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx81 +lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx82 +lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx83 -lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx85 -lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx86 -lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx87 -lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx84 +lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx87 -lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx90 -lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx88 -lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx91 -lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx89 +lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx89 +lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx90 +lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx91 -lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx95 -lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx94 -lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx92 -lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx93 +lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx92 +lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx94 +lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx95 lane_to_serdes_map_fabric_lane96.BCM8879X=rx96:tx96 -lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx98 -lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx97 +lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx98 lane_to_serdes_map_fabric_lane99.BCM8879X=rx99:tx99 -lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx101 -lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx102 -lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx100 +lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx102 lane_to_serdes_map_fabric_lane103.BCM8879X=rx103:tx103 lane_to_serdes_map_fabric_lane104.BCM8879X=rx104:tx104 @@ -182,10 +183,10 @@ lane_to_serdes_map_fabric_lane109.BCM8879X=rx109:tx109 lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx110 lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx111 -lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx115 -lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx114 -lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx113 -lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx112 +lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx112 +lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx114 +lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx115 lane_to_serdes_map_fabric_lane116.BCM8879X=rx116:tx116 lane_to_serdes_map_fabric_lane117.BCM8879X=rx117:tx117 @@ -197,15 +198,15 @@ lane_to_serdes_map_fabric_lane121.BCM8879X=rx121:tx121 lane_to_serdes_map_fabric_lane122.BCM8879X=rx122:tx122 lane_to_serdes_map_fabric_lane123.BCM8879X=rx123:tx123 -lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx127 -lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx126 -lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx124 -lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx125 +lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx127 -lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx131 -lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx130 -lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx129 -lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx128 +lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx131 lane_to_serdes_map_fabric_lane132.BCM8879X=rx132:tx132 lane_to_serdes_map_fabric_lane133.BCM8879X=rx133:tx133 @@ -213,23 +214,23 @@ lane_to_serdes_map_fabric_lane134.BCM8879X=rx134:tx134 lane_to_serdes_map_fabric_lane135.BCM8879X=rx135:tx135 lane_to_serdes_map_fabric_lane136.BCM8879X=rx136:tx136 -lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx138 -lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx137 +lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx137 +lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx138 lane_to_serdes_map_fabric_lane139.BCM8879X=rx139:tx139 -lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx143 -lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx142 -lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx141 -lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx140 +lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx140 +lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx143 -lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx145 -lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx147 -lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx144 -lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx146 +lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx147 -lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx150 +lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx148 lane_to_serdes_map_fabric_lane149.BCM8879X=rx149:tx149 -lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx148 +lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx150 lane_to_serdes_map_fabric_lane151.BCM8879X=rx151:tx151 lane_to_serdes_map_fabric_lane152.BCM8879X=rx152:tx152 @@ -237,91 +238,91 @@ lane_to_serdes_map_fabric_lane153.BCM8879X=rx153:tx153 lane_to_serdes_map_fabric_lane154.BCM8879X=rx154:tx154 lane_to_serdes_map_fabric_lane155.BCM8879X=rx155:tx155 -lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx157 -lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx159 -lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx156 -lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx158 +lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx156 +lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx157 +lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx158 +lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx159 lane_to_serdes_map_fabric_lane160.BCM8879X=rx160:tx160 -lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx162 -lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx161 +lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx162 lane_to_serdes_map_fabric_lane163.BCM8879X=rx163:tx163 -lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx166 -lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx164 -lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx165 +lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx166 lane_to_serdes_map_fabric_lane167.BCM8879X=rx167:tx167 -lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx170 -lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx168 -lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx169 +lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx168 +lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx170 lane_to_serdes_map_fabric_lane171.BCM8879X=rx171:tx171 -lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx173 -lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx174 -lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx175 -lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx172 +lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx172 +lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx173 +lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx174 +lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx175 lane_to_serdes_map_fabric_lane176.BCM8879X=rx176:tx176 -lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx178 -lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx177 +lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx178 lane_to_serdes_map_fabric_lane179.BCM8879X=rx179:tx179 -lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx182 -lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx180 -lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx181 +lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx180 +lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx182 lane_to_serdes_map_fabric_lane183.BCM8879X=rx183:tx183 -lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx187 -lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx184 +lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx185 lane_to_serdes_map_fabric_lane186.BCM8879X=rx186:tx186 -lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx185 +lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx187 -lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx190 +lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx188 lane_to_serdes_map_fabric_lane189.BCM8879X=rx189:tx189 -lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx191 -lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx188 +lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx190 +lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx191 -phy_rx_polarity_flip_fabric0.BCM8879X=0 -phy_rx_polarity_flip_fabric1.BCM8879X=1 -phy_rx_polarity_flip_fabric2.BCM8879X=0 -phy_rx_polarity_flip_fabric3.BCM8879X=1 +phy_rx_polarity_flip_fabric0.BCM8879X=1 +phy_rx_polarity_flip_fabric1.BCM8879X=0 +phy_rx_polarity_flip_fabric2.BCM8879X=1 +phy_rx_polarity_flip_fabric3.BCM8879X=0 -phy_rx_polarity_flip_fabric4.BCM8879X=1 -phy_rx_polarity_flip_fabric5.BCM8879X=0 -phy_rx_polarity_flip_fabric6.BCM8879X=1 -phy_rx_polarity_flip_fabric7.BCM8879X=0 +phy_rx_polarity_flip_fabric4.BCM8879X=0 +phy_rx_polarity_flip_fabric5.BCM8879X=1 +phy_rx_polarity_flip_fabric6.BCM8879X=0 +phy_rx_polarity_flip_fabric7.BCM8879X=1 phy_rx_polarity_flip_fabric8.BCM8879X=1 phy_rx_polarity_flip_fabric9.BCM8879X=0 phy_rx_polarity_flip_fabric10.BCM8879X=1 phy_rx_polarity_flip_fabric11.BCM8879X=0 -phy_rx_polarity_flip_fabric12.BCM8879X=1 -phy_rx_polarity_flip_fabric13.BCM8879X=0 +phy_rx_polarity_flip_fabric12.BCM8879X=0 +phy_rx_polarity_flip_fabric13.BCM8879X=1 phy_rx_polarity_flip_fabric14.BCM8879X=0 phy_rx_polarity_flip_fabric15.BCM8879X=1 -phy_rx_polarity_flip_fabric16.BCM8879X=0 -phy_rx_polarity_flip_fabric17.BCM8879X=1 -phy_rx_polarity_flip_fabric18.BCM8879X=0 -phy_rx_polarity_flip_fabric19.BCM8879X=1 +phy_rx_polarity_flip_fabric16.BCM8879X=1 +phy_rx_polarity_flip_fabric17.BCM8879X=0 +phy_rx_polarity_flip_fabric18.BCM8879X=1 +phy_rx_polarity_flip_fabric19.BCM8879X=0 -phy_rx_polarity_flip_fabric20.BCM8879X=0 -phy_rx_polarity_flip_fabric21.BCM8879X=1 +phy_rx_polarity_flip_fabric20.BCM8879X=1 +phy_rx_polarity_flip_fabric21.BCM8879X=0 phy_rx_polarity_flip_fabric22.BCM8879X=1 phy_rx_polarity_flip_fabric23.BCM8879X=0 -phy_rx_polarity_flip_fabric24.BCM8879X=0 -phy_rx_polarity_flip_fabric25.BCM8879X=1 -phy_rx_polarity_flip_fabric26.BCM8879X=0 -phy_rx_polarity_flip_fabric27.BCM8879X=1 +phy_rx_polarity_flip_fabric24.BCM8879X=1 +phy_rx_polarity_flip_fabric25.BCM8879X=0 +phy_rx_polarity_flip_fabric26.BCM8879X=1 +phy_rx_polarity_flip_fabric27.BCM8879X=0 -phy_rx_polarity_flip_fabric28.BCM8879X=1 -phy_rx_polarity_flip_fabric29.BCM8879X=0 -phy_rx_polarity_flip_fabric30.BCM8879X=1 -phy_rx_polarity_flip_fabric31.BCM8879X=0 +phy_rx_polarity_flip_fabric28.BCM8879X=0 +phy_rx_polarity_flip_fabric29.BCM8879X=1 +phy_rx_polarity_flip_fabric30.BCM8879X=0 +phy_rx_polarity_flip_fabric31.BCM8879X=1 phy_rx_polarity_flip_fabric32.BCM8879X=1 phy_rx_polarity_flip_fabric33.BCM8879X=0 @@ -330,11 +331,11 @@ phy_rx_polarity_flip_fabric35.BCM8879X=0 phy_rx_polarity_flip_fabric36.BCM8879X=0 phy_rx_polarity_flip_fabric37.BCM8879X=1 -phy_rx_polarity_flip_fabric38.BCM8879X=1 -phy_rx_polarity_flip_fabric39.BCM8879X=0 +phy_rx_polarity_flip_fabric38.BCM8879X=0 +phy_rx_polarity_flip_fabric39.BCM8879X=1 -phy_rx_polarity_flip_fabric40.BCM8879X=0 -phy_rx_polarity_flip_fabric41.BCM8879X=1 +phy_rx_polarity_flip_fabric40.BCM8879X=1 +phy_rx_polarity_flip_fabric41.BCM8879X=0 phy_rx_polarity_flip_fabric42.BCM8879X=1 phy_rx_polarity_flip_fabric43.BCM8879X=0 @@ -350,63 +351,63 @@ phy_rx_polarity_flip_fabric51.BCM8879X=1 phy_rx_polarity_flip_fabric52.BCM8879X=1 phy_rx_polarity_flip_fabric53.BCM8879X=0 -phy_rx_polarity_flip_fabric54.BCM8879X=0 -phy_rx_polarity_flip_fabric55.BCM8879X=1 +phy_rx_polarity_flip_fabric54.BCM8879X=1 +phy_rx_polarity_flip_fabric55.BCM8879X=0 -phy_rx_polarity_flip_fabric56.BCM8879X=1 -phy_rx_polarity_flip_fabric57.BCM8879X=0 +phy_rx_polarity_flip_fabric56.BCM8879X=0 +phy_rx_polarity_flip_fabric57.BCM8879X=1 phy_rx_polarity_flip_fabric58.BCM8879X=0 phy_rx_polarity_flip_fabric59.BCM8879X=1 -phy_rx_polarity_flip_fabric60.BCM8879X=1 -phy_rx_polarity_flip_fabric61.BCM8879X=0 -phy_rx_polarity_flip_fabric62.BCM8879X=1 -phy_rx_polarity_flip_fabric63.BCM8879X=0 +phy_rx_polarity_flip_fabric60.BCM8879X=0 +phy_rx_polarity_flip_fabric61.BCM8879X=1 +phy_rx_polarity_flip_fabric62.BCM8879X=0 +phy_rx_polarity_flip_fabric63.BCM8879X=1 -phy_rx_polarity_flip_fabric64.BCM8879X=0 -phy_rx_polarity_flip_fabric65.BCM8879X=1 -phy_rx_polarity_flip_fabric66.BCM8879X=0 -phy_rx_polarity_flip_fabric67.BCM8879X=1 +phy_rx_polarity_flip_fabric64.BCM8879X=1 +phy_rx_polarity_flip_fabric65.BCM8879X=0 +phy_rx_polarity_flip_fabric66.BCM8879X=1 +phy_rx_polarity_flip_fabric67.BCM8879X=0 -phy_rx_polarity_flip_fabric68.BCM8879X=1 -phy_rx_polarity_flip_fabric69.BCM8879X=0 -phy_rx_polarity_flip_fabric70.BCM8879X=1 -phy_rx_polarity_flip_fabric71.BCM8879X=0 +phy_rx_polarity_flip_fabric68.BCM8879X=0 +phy_rx_polarity_flip_fabric69.BCM8879X=1 +phy_rx_polarity_flip_fabric70.BCM8879X=0 +phy_rx_polarity_flip_fabric71.BCM8879X=1 -phy_rx_polarity_flip_fabric72.BCM8879X=0 -phy_rx_polarity_flip_fabric73.BCM8879X=1 -phy_rx_polarity_flip_fabric74.BCM8879X=0 -phy_rx_polarity_flip_fabric75.BCM8879X=1 +phy_rx_polarity_flip_fabric72.BCM8879X=1 +phy_rx_polarity_flip_fabric73.BCM8879X=0 +phy_rx_polarity_flip_fabric74.BCM8879X=1 +phy_rx_polarity_flip_fabric75.BCM8879X=0 -phy_rx_polarity_flip_fabric76.BCM8879X=0 -phy_rx_polarity_flip_fabric77.BCM8879X=1 +phy_rx_polarity_flip_fabric76.BCM8879X=1 +phy_rx_polarity_flip_fabric77.BCM8879X=0 phy_rx_polarity_flip_fabric78.BCM8879X=1 phy_rx_polarity_flip_fabric79.BCM8879X=0 phy_rx_polarity_flip_fabric80.BCM8879X=0 phy_rx_polarity_flip_fabric81.BCM8879X=1 -phy_rx_polarity_flip_fabric82.BCM8879X=1 -phy_rx_polarity_flip_fabric83.BCM8879X=0 +phy_rx_polarity_flip_fabric82.BCM8879X=0 +phy_rx_polarity_flip_fabric83.BCM8879X=1 phy_rx_polarity_flip_fabric84.BCM8879X=1 phy_rx_polarity_flip_fabric85.BCM8879X=0 phy_rx_polarity_flip_fabric86.BCM8879X=1 phy_rx_polarity_flip_fabric87.BCM8879X=0 -phy_rx_polarity_flip_fabric88.BCM8879X=1 -phy_rx_polarity_flip_fabric89.BCM8879X=0 -phy_rx_polarity_flip_fabric90.BCM8879X=1 -phy_rx_polarity_flip_fabric91.BCM8879X=0 +phy_rx_polarity_flip_fabric88.BCM8879X=0 +phy_rx_polarity_flip_fabric89.BCM8879X=1 +phy_rx_polarity_flip_fabric90.BCM8879X=0 +phy_rx_polarity_flip_fabric91.BCM8879X=1 -phy_rx_polarity_flip_fabric92.BCM8879X=0 -phy_rx_polarity_flip_fabric93.BCM8879X=1 -phy_rx_polarity_flip_fabric94.BCM8879X=0 -phy_rx_polarity_flip_fabric95.BCM8879X=1 +phy_rx_polarity_flip_fabric92.BCM8879X=1 +phy_rx_polarity_flip_fabric93.BCM8879X=0 +phy_rx_polarity_flip_fabric94.BCM8879X=1 +phy_rx_polarity_flip_fabric95.BCM8879X=0 -phy_rx_polarity_flip_fabric96.BCM8879X=0 -phy_rx_polarity_flip_fabric97.BCM8879X=1 -phy_rx_polarity_flip_fabric98.BCM8879X=0 -phy_rx_polarity_flip_fabric99.BCM8879X=1 +phy_rx_polarity_flip_fabric96.BCM8879X=1 +phy_rx_polarity_flip_fabric97.BCM8879X=0 +phy_rx_polarity_flip_fabric98.BCM8879X=1 +phy_rx_polarity_flip_fabric99.BCM8879X=0 phy_rx_polarity_flip_fabric100.BCM8879X=0 phy_rx_polarity_flip_fabric101.BCM8879X=1 @@ -418,10 +419,10 @@ phy_rx_polarity_flip_fabric105.BCM8879X=1 phy_rx_polarity_flip_fabric106.BCM8879X=0 phy_rx_polarity_flip_fabric107.BCM8879X=1 -phy_rx_polarity_flip_fabric108.BCM8879X=1 -phy_rx_polarity_flip_fabric109.BCM8879X=0 -phy_rx_polarity_flip_fabric110.BCM8879X=1 -phy_rx_polarity_flip_fabric111.BCM8879X=0 +phy_rx_polarity_flip_fabric108.BCM8879X=0 +phy_rx_polarity_flip_fabric109.BCM8879X=1 +phy_rx_polarity_flip_fabric110.BCM8879X=0 +phy_rx_polarity_flip_fabric111.BCM8879X=1 phy_rx_polarity_flip_fabric112.BCM8879X=0 phy_rx_polarity_flip_fabric113.BCM8879X=1 @@ -433,223 +434,223 @@ phy_rx_polarity_flip_fabric117.BCM8879X=0 phy_rx_polarity_flip_fabric118.BCM8879X=1 phy_rx_polarity_flip_fabric119.BCM8879X=0 -phy_rx_polarity_flip_fabric120.BCM8879X=0 -phy_rx_polarity_flip_fabric121.BCM8879X=1 -phy_rx_polarity_flip_fabric122.BCM8879X=0 -phy_rx_polarity_flip_fabric123.BCM8879X=1 +phy_rx_polarity_flip_fabric120.BCM8879X=1 +phy_rx_polarity_flip_fabric121.BCM8879X=0 +phy_rx_polarity_flip_fabric122.BCM8879X=1 +phy_rx_polarity_flip_fabric123.BCM8879X=0 phy_rx_polarity_flip_fabric124.BCM8879X=0 phy_rx_polarity_flip_fabric125.BCM8879X=1 phy_rx_polarity_flip_fabric126.BCM8879X=0 phy_rx_polarity_flip_fabric127.BCM8879X=1 -phy_rx_polarity_flip_fabric128.BCM8879X=0 -phy_rx_polarity_flip_fabric129.BCM8879X=1 -phy_rx_polarity_flip_fabric130.BCM8879X=0 -phy_rx_polarity_flip_fabric131.BCM8879X=1 +phy_rx_polarity_flip_fabric128.BCM8879X=1 +phy_rx_polarity_flip_fabric129.BCM8879X=0 +phy_rx_polarity_flip_fabric130.BCM8879X=1 +phy_rx_polarity_flip_fabric131.BCM8879X=0 -phy_rx_polarity_flip_fabric132.BCM8879X=1 -phy_rx_polarity_flip_fabric133.BCM8879X=0 -phy_rx_polarity_flip_fabric134.BCM8879X=1 -phy_rx_polarity_flip_fabric135.BCM8879X=0 +phy_rx_polarity_flip_fabric132.BCM8879X=0 +phy_rx_polarity_flip_fabric133.BCM8879X=1 +phy_rx_polarity_flip_fabric134.BCM8879X=0 +phy_rx_polarity_flip_fabric135.BCM8879X=1 phy_rx_polarity_flip_fabric136.BCM8879X=1 phy_rx_polarity_flip_fabric137.BCM8879X=0 phy_rx_polarity_flip_fabric138.BCM8879X=1 phy_rx_polarity_flip_fabric139.BCM8879X=0 -phy_rx_polarity_flip_fabric140.BCM8879X=0 -phy_rx_polarity_flip_fabric141.BCM8879X=1 -phy_rx_polarity_flip_fabric142.BCM8879X=0 -phy_rx_polarity_flip_fabric143.BCM8879X=1 +phy_rx_polarity_flip_fabric140.BCM8879X=1 +phy_rx_polarity_flip_fabric141.BCM8879X=0 +phy_rx_polarity_flip_fabric142.BCM8879X=1 +phy_rx_polarity_flip_fabric143.BCM8879X=0 -phy_rx_polarity_flip_fabric144.BCM8879X=0 -phy_rx_polarity_flip_fabric145.BCM8879X=1 -phy_rx_polarity_flip_fabric146.BCM8879X=0 -phy_rx_polarity_flip_fabric147.BCM8879X=1 +phy_rx_polarity_flip_fabric144.BCM8879X=1 +phy_rx_polarity_flip_fabric145.BCM8879X=0 +phy_rx_polarity_flip_fabric146.BCM8879X=1 +phy_rx_polarity_flip_fabric147.BCM8879X=0 phy_rx_polarity_flip_fabric148.BCM8879X=1 phy_rx_polarity_flip_fabric149.BCM8879X=0 phy_rx_polarity_flip_fabric150.BCM8879X=1 phy_rx_polarity_flip_fabric151.BCM8879X=0 -phy_rx_polarity_flip_fabric152.BCM8879X=1 -phy_rx_polarity_flip_fabric153.BCM8879X=0 -phy_rx_polarity_flip_fabric154.BCM8879X=1 -phy_rx_polarity_flip_fabric155.BCM8879X=0 +phy_rx_polarity_flip_fabric152.BCM8879X=0 +phy_rx_polarity_flip_fabric153.BCM8879X=1 +phy_rx_polarity_flip_fabric154.BCM8879X=0 +phy_rx_polarity_flip_fabric155.BCM8879X=1 -phy_rx_polarity_flip_fabric156.BCM8879X=0 -phy_rx_polarity_flip_fabric157.BCM8879X=1 -phy_rx_polarity_flip_fabric158.BCM8879X=0 -phy_rx_polarity_flip_fabric159.BCM8879X=1 +phy_rx_polarity_flip_fabric156.BCM8879X=1 +phy_rx_polarity_flip_fabric157.BCM8879X=0 +phy_rx_polarity_flip_fabric158.BCM8879X=1 +phy_rx_polarity_flip_fabric159.BCM8879X=0 -phy_rx_polarity_flip_fabric160.BCM8879X=0 -phy_rx_polarity_flip_fabric161.BCM8879X=1 -phy_rx_polarity_flip_fabric162.BCM8879X=0 -phy_rx_polarity_flip_fabric163.BCM8879X=1 +phy_rx_polarity_flip_fabric160.BCM8879X=1 +phy_rx_polarity_flip_fabric161.BCM8879X=0 +phy_rx_polarity_flip_fabric162.BCM8879X=1 +phy_rx_polarity_flip_fabric163.BCM8879X=0 phy_rx_polarity_flip_fabric164.BCM8879X=0 phy_rx_polarity_flip_fabric165.BCM8879X=1 phy_rx_polarity_flip_fabric166.BCM8879X=0 phy_rx_polarity_flip_fabric167.BCM8879X=1 -phy_rx_polarity_flip_fabric168.BCM8879X=0 -phy_rx_polarity_flip_fabric169.BCM8879X=1 -phy_rx_polarity_flip_fabric170.BCM8879X=0 -phy_rx_polarity_flip_fabric171.BCM8879X=1 +phy_rx_polarity_flip_fabric168.BCM8879X=1 +phy_rx_polarity_flip_fabric169.BCM8879X=0 +phy_rx_polarity_flip_fabric170.BCM8879X=1 +phy_rx_polarity_flip_fabric171.BCM8879X=0 phy_rx_polarity_flip_fabric172.BCM8879X=1 phy_rx_polarity_flip_fabric173.BCM8879X=0 phy_rx_polarity_flip_fabric174.BCM8879X=1 phy_rx_polarity_flip_fabric175.BCM8879X=0 -phy_rx_polarity_flip_fabric176.BCM8879X=1 -phy_rx_polarity_flip_fabric177.BCM8879X=0 -phy_rx_polarity_flip_fabric178.BCM8879X=1 -phy_rx_polarity_flip_fabric179.BCM8879X=0 +phy_rx_polarity_flip_fabric176.BCM8879X=0 +phy_rx_polarity_flip_fabric177.BCM8879X=1 +phy_rx_polarity_flip_fabric178.BCM8879X=0 +phy_rx_polarity_flip_fabric179.BCM8879X=1 -phy_rx_polarity_flip_fabric180.BCM8879X=0 -phy_rx_polarity_flip_fabric181.BCM8879X=1 -phy_rx_polarity_flip_fabric182.BCM8879X=0 -phy_rx_polarity_flip_fabric183.BCM8879X=1 +phy_rx_polarity_flip_fabric180.BCM8879X=1 +phy_rx_polarity_flip_fabric181.BCM8879X=0 +phy_rx_polarity_flip_fabric182.BCM8879X=1 +phy_rx_polarity_flip_fabric183.BCM8879X=0 phy_rx_polarity_flip_fabric184.BCM8879X=0 phy_rx_polarity_flip_fabric185.BCM8879X=1 phy_rx_polarity_flip_fabric186.BCM8879X=0 phy_rx_polarity_flip_fabric187.BCM8879X=1 -phy_rx_polarity_flip_fabric188.BCM8879X=0 -phy_rx_polarity_flip_fabric189.BCM8879X=1 -phy_rx_polarity_flip_fabric190.BCM8879X=0 -phy_rx_polarity_flip_fabric191.BCM8879X=1 +phy_rx_polarity_flip_fabric188.BCM8879X=1 +phy_rx_polarity_flip_fabric189.BCM8879X=0 +phy_rx_polarity_flip_fabric190.BCM8879X=1 +phy_rx_polarity_flip_fabric191.BCM8879X=0 phy_tx_polarity_flip_fabric0.BCM8879X=0 -phy_tx_polarity_flip_fabric1.BCM8879X=0 -phy_tx_polarity_flip_fabric2.BCM8879X=1 +phy_tx_polarity_flip_fabric1.BCM8879X=1 +phy_tx_polarity_flip_fabric2.BCM8879X=0 phy_tx_polarity_flip_fabric3.BCM8879X=1 -phy_tx_polarity_flip_fabric4.BCM8879X=0 -phy_tx_polarity_flip_fabric5.BCM8879X=1 +phy_tx_polarity_flip_fabric4.BCM8879X=1 +phy_tx_polarity_flip_fabric5.BCM8879X=0 phy_tx_polarity_flip_fabric6.BCM8879X=1 phy_tx_polarity_flip_fabric7.BCM8879X=0 phy_tx_polarity_flip_fabric8.BCM8879X=0 -phy_tx_polarity_flip_fabric9.BCM8879X=0 -phy_tx_polarity_flip_fabric10.BCM8879X=1 +phy_tx_polarity_flip_fabric9.BCM8879X=1 +phy_tx_polarity_flip_fabric10.BCM8879X=0 phy_tx_polarity_flip_fabric11.BCM8879X=1 -phy_tx_polarity_flip_fabric12.BCM8879X=0 -phy_tx_polarity_flip_fabric13.BCM8879X=1 +phy_tx_polarity_flip_fabric12.BCM8879X=1 +phy_tx_polarity_flip_fabric13.BCM8879X=0 phy_tx_polarity_flip_fabric14.BCM8879X=1 -phy_tx_polarity_flip_fabric15.BCM8879X=1 +phy_tx_polarity_flip_fabric15.BCM8879X=0 -phy_tx_polarity_flip_fabric16.BCM8879X=1 +phy_tx_polarity_flip_fabric16.BCM8879X=0 phy_tx_polarity_flip_fabric17.BCM8879X=1 -phy_tx_polarity_flip_fabric18.BCM8879X=1 -phy_tx_polarity_flip_fabric19.BCM8879X=0 +phy_tx_polarity_flip_fabric18.BCM8879X=0 +phy_tx_polarity_flip_fabric19.BCM8879X=1 -phy_tx_polarity_flip_fabric20.BCM8879X=1 +phy_tx_polarity_flip_fabric20.BCM8879X=0 phy_tx_polarity_flip_fabric21.BCM8879X=1 -phy_tx_polarity_flip_fabric22.BCM8879X=1 -phy_tx_polarity_flip_fabric23.BCM8879X=0 +phy_tx_polarity_flip_fabric22.BCM8879X=0 +phy_tx_polarity_flip_fabric23.BCM8879X=1 -phy_tx_polarity_flip_fabric24.BCM8879X=1 +phy_tx_polarity_flip_fabric24.BCM8879X=0 phy_tx_polarity_flip_fabric25.BCM8879X=1 phy_tx_polarity_flip_fabric26.BCM8879X=0 -phy_tx_polarity_flip_fabric27.BCM8879X=0 +phy_tx_polarity_flip_fabric27.BCM8879X=1 phy_tx_polarity_flip_fabric28.BCM8879X=1 phy_tx_polarity_flip_fabric29.BCM8879X=0 -phy_tx_polarity_flip_fabric30.BCM8879X=0 -phy_tx_polarity_flip_fabric31.BCM8879X=1 +phy_tx_polarity_flip_fabric30.BCM8879X=1 +phy_tx_polarity_flip_fabric31.BCM8879X=0 phy_tx_polarity_flip_fabric32.BCM8879X=0 -phy_tx_polarity_flip_fabric33.BCM8879X=0 -phy_tx_polarity_flip_fabric34.BCM8879X=1 +phy_tx_polarity_flip_fabric33.BCM8879X=1 +phy_tx_polarity_flip_fabric34.BCM8879X=0 phy_tx_polarity_flip_fabric35.BCM8879X=1 phy_tx_polarity_flip_fabric36.BCM8879X=1 -phy_tx_polarity_flip_fabric37.BCM8879X=1 +phy_tx_polarity_flip_fabric37.BCM8879X=0 phy_tx_polarity_flip_fabric38.BCM8879X=1 phy_tx_polarity_flip_fabric39.BCM8879X=0 phy_tx_polarity_flip_fabric40.BCM8879X=0 phy_tx_polarity_flip_fabric41.BCM8879X=1 phy_tx_polarity_flip_fabric42.BCM8879X=0 -phy_tx_polarity_flip_fabric43.BCM8879X=0 +phy_tx_polarity_flip_fabric43.BCM8879X=1 -phy_tx_polarity_flip_fabric44.BCM8879X=1 +phy_tx_polarity_flip_fabric44.BCM8879X=0 phy_tx_polarity_flip_fabric45.BCM8879X=1 phy_tx_polarity_flip_fabric46.BCM8879X=0 phy_tx_polarity_flip_fabric47.BCM8879X=1 -phy_tx_polarity_flip_fabric48.BCM8879X=0 -phy_tx_polarity_flip_fabric49.BCM8879X=1 +phy_tx_polarity_flip_fabric48.BCM8879X=1 +phy_tx_polarity_flip_fabric49.BCM8879X=0 phy_tx_polarity_flip_fabric50.BCM8879X=1 -phy_tx_polarity_flip_fabric51.BCM8879X=1 +phy_tx_polarity_flip_fabric51.BCM8879X=0 -phy_tx_polarity_flip_fabric52.BCM8879X=1 +phy_tx_polarity_flip_fabric52.BCM8879X=0 phy_tx_polarity_flip_fabric53.BCM8879X=1 phy_tx_polarity_flip_fabric54.BCM8879X=0 phy_tx_polarity_flip_fabric55.BCM8879X=1 -phy_tx_polarity_flip_fabric56.BCM8879X=0 +phy_tx_polarity_flip_fabric56.BCM8879X=1 phy_tx_polarity_flip_fabric57.BCM8879X=0 -phy_tx_polarity_flip_fabric58.BCM8879X=0 -phy_tx_polarity_flip_fabric59.BCM8879X=1 +phy_tx_polarity_flip_fabric58.BCM8879X=1 +phy_tx_polarity_flip_fabric59.BCM8879X=0 phy_tx_polarity_flip_fabric60.BCM8879X=1 phy_tx_polarity_flip_fabric61.BCM8879X=0 -phy_tx_polarity_flip_fabric62.BCM8879X=0 -phy_tx_polarity_flip_fabric63.BCM8879X=1 +phy_tx_polarity_flip_fabric62.BCM8879X=1 +phy_tx_polarity_flip_fabric63.BCM8879X=0 -phy_tx_polarity_flip_fabric64.BCM8879X=1 +phy_tx_polarity_flip_fabric64.BCM8879X=0 phy_tx_polarity_flip_fabric65.BCM8879X=1 phy_tx_polarity_flip_fabric66.BCM8879X=0 -phy_tx_polarity_flip_fabric67.BCM8879X=0 +phy_tx_polarity_flip_fabric67.BCM8879X=1 phy_tx_polarity_flip_fabric68.BCM8879X=1 phy_tx_polarity_flip_fabric69.BCM8879X=0 phy_tx_polarity_flip_fabric70.BCM8879X=1 phy_tx_polarity_flip_fabric71.BCM8879X=0 -phy_tx_polarity_flip_fabric72.BCM8879X=1 +phy_tx_polarity_flip_fabric72.BCM8879X=0 phy_tx_polarity_flip_fabric73.BCM8879X=1 -phy_tx_polarity_flip_fabric74.BCM8879X=1 -phy_tx_polarity_flip_fabric75.BCM8879X=0 +phy_tx_polarity_flip_fabric74.BCM8879X=0 +phy_tx_polarity_flip_fabric75.BCM8879X=1 -phy_tx_polarity_flip_fabric76.BCM8879X=1 +phy_tx_polarity_flip_fabric76.BCM8879X=0 phy_tx_polarity_flip_fabric77.BCM8879X=1 phy_tx_polarity_flip_fabric78.BCM8879X=0 phy_tx_polarity_flip_fabric79.BCM8879X=1 phy_tx_polarity_flip_fabric80.BCM8879X=1 -phy_tx_polarity_flip_fabric81.BCM8879X=1 -phy_tx_polarity_flip_fabric82.BCM8879X=0 -phy_tx_polarity_flip_fabric83.BCM8879X=1 +phy_tx_polarity_flip_fabric81.BCM8879X=0 +phy_tx_polarity_flip_fabric82.BCM8879X=1 +phy_tx_polarity_flip_fabric83.BCM8879X=0 -phy_tx_polarity_flip_fabric84.BCM8879X=1 -phy_tx_polarity_flip_fabric85.BCM8879X=0 -phy_tx_polarity_flip_fabric86.BCM8879X=1 -phy_tx_polarity_flip_fabric87.BCM8879X=0 +phy_tx_polarity_flip_fabric84.BCM8879X=0 +phy_tx_polarity_flip_fabric85.BCM8879X=1 +phy_tx_polarity_flip_fabric86.BCM8879X=0 +phy_tx_polarity_flip_fabric87.BCM8879X=1 -phy_tx_polarity_flip_fabric88.BCM8879X=0 +phy_tx_polarity_flip_fabric88.BCM8879X=1 phy_tx_polarity_flip_fabric89.BCM8879X=0 phy_tx_polarity_flip_fabric90.BCM8879X=1 -phy_tx_polarity_flip_fabric91.BCM8879X=1 +phy_tx_polarity_flip_fabric91.BCM8879X=0 phy_tx_polarity_flip_fabric92.BCM8879X=0 phy_tx_polarity_flip_fabric93.BCM8879X=1 -phy_tx_polarity_flip_fabric94.BCM8879X=1 -phy_tx_polarity_flip_fabric95.BCM8879X=0 +phy_tx_polarity_flip_fabric94.BCM8879X=0 +phy_tx_polarity_flip_fabric95.BCM8879X=1 -phy_tx_polarity_flip_fabric96.BCM8879X=1 +phy_tx_polarity_flip_fabric96.BCM8879X=0 phy_tx_polarity_flip_fabric97.BCM8879X=1 phy_tx_polarity_flip_fabric98.BCM8879X=0 -phy_tx_polarity_flip_fabric99.BCM8879X=0 +phy_tx_polarity_flip_fabric99.BCM8879X=1 -phy_tx_polarity_flip_fabric100.BCM8879X=0 -phy_tx_polarity_flip_fabric101.BCM8879X=1 +phy_tx_polarity_flip_fabric100.BCM8879X=1 +phy_tx_polarity_flip_fabric101.BCM8879X=0 phy_tx_polarity_flip_fabric102.BCM8879X=1 phy_tx_polarity_flip_fabric103.BCM8879X=0 @@ -658,28 +659,28 @@ phy_tx_polarity_flip_fabric105.BCM8879X=0 phy_tx_polarity_flip_fabric106.BCM8879X=1 phy_tx_polarity_flip_fabric107.BCM8879X=0 -phy_tx_polarity_flip_fabric108.BCM8879X=0 -phy_tx_polarity_flip_fabric109.BCM8879X=1 -phy_tx_polarity_flip_fabric110.BCM8879X=0 -phy_tx_polarity_flip_fabric111.BCM8879X=1 +phy_tx_polarity_flip_fabric108.BCM8879X=1 +phy_tx_polarity_flip_fabric109.BCM8879X=0 +phy_tx_polarity_flip_fabric110.BCM8879X=1 +phy_tx_polarity_flip_fabric111.BCM8879X=0 -phy_tx_polarity_flip_fabric112.BCM8879X=0 -phy_tx_polarity_flip_fabric113.BCM8879X=1 -phy_tx_polarity_flip_fabric114.BCM8879X=0 -phy_tx_polarity_flip_fabric115.BCM8879X=1 +phy_tx_polarity_flip_fabric112.BCM8879X=1 +phy_tx_polarity_flip_fabric113.BCM8879X=0 +phy_tx_polarity_flip_fabric114.BCM8879X=1 +phy_tx_polarity_flip_fabric115.BCM8879X=0 phy_tx_polarity_flip_fabric116.BCM8879X=0 phy_tx_polarity_flip_fabric117.BCM8879X=1 phy_tx_polarity_flip_fabric118.BCM8879X=0 phy_tx_polarity_flip_fabric119.BCM8879X=1 -phy_tx_polarity_flip_fabric120.BCM8879X=1 -phy_tx_polarity_flip_fabric121.BCM8879X=0 -phy_tx_polarity_flip_fabric122.BCM8879X=1 -phy_tx_polarity_flip_fabric123.BCM8879X=0 +phy_tx_polarity_flip_fabric120.BCM8879X=0 +phy_tx_polarity_flip_fabric121.BCM8879X=1 +phy_tx_polarity_flip_fabric122.BCM8879X=0 +phy_tx_polarity_flip_fabric123.BCM8879X=1 -phy_tx_polarity_flip_fabric124.BCM8879X=0 -phy_tx_polarity_flip_fabric125.BCM8879X=1 +phy_tx_polarity_flip_fabric124.BCM8879X=1 +phy_tx_polarity_flip_fabric125.BCM8879X=0 phy_tx_polarity_flip_fabric126.BCM8879X=1 phy_tx_polarity_flip_fabric127.BCM8879X=0 @@ -688,14 +689,14 @@ phy_tx_polarity_flip_fabric129.BCM8879X=1 phy_tx_polarity_flip_fabric130.BCM8879X=0 phy_tx_polarity_flip_fabric131.BCM8879X=1 -phy_tx_polarity_flip_fabric132.BCM8879X=0 -phy_tx_polarity_flip_fabric133.BCM8879X=1 -phy_tx_polarity_flip_fabric134.BCM8879X=0 -phy_tx_polarity_flip_fabric135.BCM8879X=1 +phy_tx_polarity_flip_fabric132.BCM8879X=1 +phy_tx_polarity_flip_fabric133.BCM8879X=0 +phy_tx_polarity_flip_fabric134.BCM8879X=1 +phy_tx_polarity_flip_fabric135.BCM8879X=0 phy_tx_polarity_flip_fabric136.BCM8879X=0 -phy_tx_polarity_flip_fabric137.BCM8879X=0 -phy_tx_polarity_flip_fabric138.BCM8879X=1 +phy_tx_polarity_flip_fabric137.BCM8879X=1 +phy_tx_polarity_flip_fabric138.BCM8879X=0 phy_tx_polarity_flip_fabric139.BCM8879X=1 phy_tx_polarity_flip_fabric140.BCM8879X=0 @@ -704,8 +705,8 @@ phy_tx_polarity_flip_fabric142.BCM8879X=0 phy_tx_polarity_flip_fabric143.BCM8879X=1 phy_tx_polarity_flip_fabric144.BCM8879X=0 -phy_tx_polarity_flip_fabric145.BCM8879X=0 -phy_tx_polarity_flip_fabric146.BCM8879X=1 +phy_tx_polarity_flip_fabric145.BCM8879X=1 +phy_tx_polarity_flip_fabric146.BCM8879X=0 phy_tx_polarity_flip_fabric147.BCM8879X=1 phy_tx_polarity_flip_fabric148.BCM8879X=0 @@ -713,56 +714,441 @@ phy_tx_polarity_flip_fabric149.BCM8879X=1 phy_tx_polarity_flip_fabric150.BCM8879X=0 phy_tx_polarity_flip_fabric151.BCM8879X=1 -phy_tx_polarity_flip_fabric152.BCM8879X=0 -phy_tx_polarity_flip_fabric153.BCM8879X=1 -phy_tx_polarity_flip_fabric154.BCM8879X=0 -phy_tx_polarity_flip_fabric155.BCM8879X=1 +phy_tx_polarity_flip_fabric152.BCM8879X=1 +phy_tx_polarity_flip_fabric153.BCM8879X=0 +phy_tx_polarity_flip_fabric154.BCM8879X=1 +phy_tx_polarity_flip_fabric155.BCM8879X=0 phy_tx_polarity_flip_fabric156.BCM8879X=0 -phy_tx_polarity_flip_fabric157.BCM8879X=0 -phy_tx_polarity_flip_fabric158.BCM8879X=1 +phy_tx_polarity_flip_fabric157.BCM8879X=1 +phy_tx_polarity_flip_fabric158.BCM8879X=0 phy_tx_polarity_flip_fabric159.BCM8879X=1 -phy_tx_polarity_flip_fabric160.BCM8879X=1 +phy_tx_polarity_flip_fabric160.BCM8879X=0 phy_tx_polarity_flip_fabric161.BCM8879X=1 phy_tx_polarity_flip_fabric162.BCM8879X=0 -phy_tx_polarity_flip_fabric163.BCM8879X=0 +phy_tx_polarity_flip_fabric163.BCM8879X=1 phy_tx_polarity_flip_fabric164.BCM8879X=1 -phy_tx_polarity_flip_fabric165.BCM8879X=1 -phy_tx_polarity_flip_fabric166.BCM8879X=0 +phy_tx_polarity_flip_fabric165.BCM8879X=0 +phy_tx_polarity_flip_fabric166.BCM8879X=1 phy_tx_polarity_flip_fabric167.BCM8879X=0 -phy_tx_polarity_flip_fabric168.BCM8879X=1 +phy_tx_polarity_flip_fabric168.BCM8879X=0 phy_tx_polarity_flip_fabric169.BCM8879X=1 phy_tx_polarity_flip_fabric170.BCM8879X=0 -phy_tx_polarity_flip_fabric171.BCM8879X=0 +phy_tx_polarity_flip_fabric171.BCM8879X=1 -phy_tx_polarity_flip_fabric172.BCM8879X=1 -phy_tx_polarity_flip_fabric173.BCM8879X=0 -phy_tx_polarity_flip_fabric174.BCM8879X=1 -phy_tx_polarity_flip_fabric175.BCM8879X=0 +phy_tx_polarity_flip_fabric172.BCM8879X=0 +phy_tx_polarity_flip_fabric173.BCM8879X=1 +phy_tx_polarity_flip_fabric174.BCM8879X=0 +phy_tx_polarity_flip_fabric175.BCM8879X=1 -phy_tx_polarity_flip_fabric176.BCM8879X=0 +phy_tx_polarity_flip_fabric176.BCM8879X=1 phy_tx_polarity_flip_fabric177.BCM8879X=0 phy_tx_polarity_flip_fabric178.BCM8879X=1 -phy_tx_polarity_flip_fabric179.BCM8879X=1 +phy_tx_polarity_flip_fabric179.BCM8879X=0 -phy_tx_polarity_flip_fabric180.BCM8879X=1 +phy_tx_polarity_flip_fabric180.BCM8879X=0 phy_tx_polarity_flip_fabric181.BCM8879X=1 phy_tx_polarity_flip_fabric182.BCM8879X=0 -phy_tx_polarity_flip_fabric183.BCM8879X=0 +phy_tx_polarity_flip_fabric183.BCM8879X=1 -phy_tx_polarity_flip_fabric184.BCM8879X=0 -phy_tx_polarity_flip_fabric185.BCM8879X=1 +phy_tx_polarity_flip_fabric184.BCM8879X=1 +phy_tx_polarity_flip_fabric185.BCM8879X=0 phy_tx_polarity_flip_fabric186.BCM8879X=1 phy_tx_polarity_flip_fabric187.BCM8879X=0 -phy_tx_polarity_flip_fabric188.BCM8879X=1 -phy_tx_polarity_flip_fabric189.BCM8879X=0 +phy_tx_polarity_flip_fabric188.BCM8879X=0 +phy_tx_polarity_flip_fabric189.BCM8879X=1 phy_tx_polarity_flip_fabric190.BCM8879X=0 phy_tx_polarity_flip_fabric191.BCM8879X=1 +port_init_cl72_0=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 +port_init_cl72_19=0 +port_init_cl72_20=0 +port_init_cl72_21=0 +port_init_cl72_22=0 +port_init_cl72_23=0 +port_init_cl72_24=0 +port_init_cl72_25=0 +port_init_cl72_26=0 +port_init_cl72_27=0 +port_init_cl72_28=0 +port_init_cl72_29=0 +port_init_cl72_30=0 +port_init_cl72_31=0 +port_init_cl72_32=0 +port_init_cl72_33=0 +port_init_cl72_34=0 +port_init_cl72_35=0 +port_init_cl72_36=0 +port_init_cl72_37=0 +port_init_cl72_38=0 +port_init_cl72_39=0 +port_init_cl72_40=0 +port_init_cl72_41=0 +port_init_cl72_42=0 +port_init_cl72_43=0 +port_init_cl72_44=0 +port_init_cl72_45=0 +port_init_cl72_46=0 +port_init_cl72_47=0 +port_init_cl72_48=0 +port_init_cl72_49=0 +port_init_cl72_50=0 +port_init_cl72_51=0 +port_init_cl72_52=0 +port_init_cl72_53=0 +port_init_cl72_54=0 +port_init_cl72_55=0 +port_init_cl72_56=0 +port_init_cl72_57=0 +port_init_cl72_58=0 +port_init_cl72_59=0 +port_init_cl72_60=0 +port_init_cl72_61=0 +port_init_cl72_62=0 +port_init_cl72_63=0 +port_init_cl72_64=0 +port_init_cl72_65=0 +port_init_cl72_66=0 +port_init_cl72_67=0 +port_init_cl72_68=0 +port_init_cl72_69=0 +port_init_cl72_70=0 +port_init_cl72_71=0 +port_init_cl72_72=0 +port_init_cl72_73=0 +port_init_cl72_74=0 +port_init_cl72_75=0 +port_init_cl72_76=0 +port_init_cl72_77=0 +port_init_cl72_78=0 +port_init_cl72_79=0 +port_init_cl72_80=0 +port_init_cl72_81=0 +port_init_cl72_82=0 +port_init_cl72_83=0 +port_init_cl72_84=0 +port_init_cl72_85=0 +port_init_cl72_86=0 +port_init_cl72_87=0 +port_init_cl72_88=0 +port_init_cl72_89=0 +port_init_cl72_90=0 +port_init_cl72_91=0 +port_init_cl72_92=0 +port_init_cl72_93=0 +port_init_cl72_94=0 +port_init_cl72_95=0 +port_init_cl72_96=0 +port_init_cl72_97=0 +port_init_cl72_98=0 +port_init_cl72_99=0 +port_init_cl72_100=0 +port_init_cl72_101=0 +port_init_cl72_102=0 +port_init_cl72_103=0 +port_init_cl72_104=0 +port_init_cl72_105=0 +port_init_cl72_106=0 +port_init_cl72_107=0 +port_init_cl72_108=0 +port_init_cl72_109=0 +port_init_cl72_110=0 +port_init_cl72_111=0 +port_init_cl72_112=0 +port_init_cl72_113=0 +port_init_cl72_114=0 +port_init_cl72_115=0 +port_init_cl72_116=0 +port_init_cl72_117=0 +port_init_cl72_118=0 +port_init_cl72_119=0 +port_init_cl72_120=0 +port_init_cl72_121=0 +port_init_cl72_122=0 +port_init_cl72_123=0 +port_init_cl72_124=0 +port_init_cl72_125=0 +port_init_cl72_126=0 +port_init_cl72_127=0 +port_init_cl72_128=0 +port_init_cl72_129=0 +port_init_cl72_130=0 +port_init_cl72_131=0 +port_init_cl72_132=0 +port_init_cl72_133=0 +port_init_cl72_134=0 +port_init_cl72_135=0 +port_init_cl72_136=0 +port_init_cl72_137=0 +port_init_cl72_138=0 +port_init_cl72_139=0 +port_init_cl72_140=0 +port_init_cl72_141=0 +port_init_cl72_142=0 +port_init_cl72_143=0 +port_init_cl72_144=0 +port_init_cl72_145=0 +port_init_cl72_146=0 +port_init_cl72_147=0 +port_init_cl72_148=0 +port_init_cl72_149=0 +port_init_cl72_150=0 +port_init_cl72_151=0 +port_init_cl72_152=0 +port_init_cl72_153=0 +port_init_cl72_154=0 +port_init_cl72_155=0 +port_init_cl72_156=0 +port_init_cl72_157=0 +port_init_cl72_158=0 +port_init_cl72_159=0 +port_init_cl72_160=0 +port_init_cl72_161=0 +port_init_cl72_162=0 +port_init_cl72_163=0 +port_init_cl72_164=0 +port_init_cl72_165=0 +port_init_cl72_166=0 +port_init_cl72_167=0 +port_init_cl72_168=0 +port_init_cl72_169=0 +port_init_cl72_170=0 +port_init_cl72_171=0 +port_init_cl72_172=0 +port_init_cl72_173=0 +port_init_cl72_174=0 +port_init_cl72_175=0 +port_init_cl72_176=0 +port_init_cl72_177=0 +port_init_cl72_178=0 +port_init_cl72_179=0 +port_init_cl72_180=0 +port_init_cl72_181=0 +port_init_cl72_182=0 +port_init_cl72_183=0 +port_init_cl72_184=0 +port_init_cl72_185=0 +port_init_cl72_186=0 +port_init_cl72_187=0 +port_init_cl72_188=0 +port_init_cl72_189=0 +port_init_cl72_190=0 +port_init_cl72_191=0 + +serdes_tx_taps_0.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_1.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_2.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_3.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_4.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_5.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_6.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_7.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_8.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_9.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_10.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_11.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_12.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_13.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_14.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_15.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_16.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_17.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_18.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_19.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_20.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_21.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_22.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_23.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_24.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_25.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_26.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_27.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_28.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_29.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_30.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_31.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_32.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_33.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_34.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_35.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_36.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_37.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_38.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_39.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_40.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_41.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_42.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_43.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_44.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_45.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_46.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_47.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_48.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_49.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_50.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_51.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_52.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_53.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_54.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_55.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_56.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_57.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_58.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_59.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_60.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_61.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_62.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_63.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_64.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_65.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_66.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_67.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_68.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_69.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_70.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_71.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_72.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_73.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_74.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_75.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_76.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_77.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_78.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_79.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_80.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_81.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_82.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_83.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_84.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_85.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_86.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_87.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_88.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_89.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_90.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_91.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_92.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_93.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_94.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_95.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_96.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_97.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_98.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_99.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_100.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_101.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_102.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_103.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_104.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_105.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_106.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_107.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_108.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_109.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_110.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_111.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_112.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_113.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_114.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_115.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_116.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_117.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_118.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_119.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_120.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_121.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_122.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_123.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_124.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_125.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_126.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_127.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_128.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_129.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_130.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_131.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_132.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_133.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_134.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_135.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_136.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_137.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_138.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_139.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_140.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_141.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_142.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_143.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_144.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_145.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_146.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_147.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_148.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_149.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_150.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_151.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_152.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_153.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_154.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_155.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_156.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_157.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_158.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_159.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_160.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_161.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_162.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_163.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_164.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_165.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_166.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_167.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_168.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_169.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_170.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_171.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_172.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_173.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_174.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_175.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_176.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_177.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_178.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_179.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_180.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_181.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_182.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_183.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_184.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_185.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_186.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_187.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_188.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_189.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_190.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_191.BCM8879X=pam4:-24:132:-12:0:0:0 serdes_lane_config_channel_mode_0.0=force_nr serdes_lane_config_channel_mode_1.0=force_nr diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/7/config-ramon-4-1.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/7/config-ramon-4-1.bcm index c5906b13cfcb..679e3fa07592 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/7/config-ramon-4-1.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/7/config-ramon-4-1.bcm @@ -1,7 +1,8 @@ + appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=8 bcm_linkscan_interval.BCM8879X=0 -bcm_stat_interval.BCM8879X=0 +bcm_stat_interval.BCM8879X=4000000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 @@ -20,10 +21,10 @@ mdio_output_delay_int.BCM8879X=25 mem_cache_enable_parity.BCM8879X=1 mm_intr_enable.BCM8879X=0 mm_timeout_usec.BCM8879X=300000 -polled_irq_delay.BCM8879X=500000 +polled_irq_delay.BCM8879X=100000 polled_irq_mode.BCM8879X=1 port_fec.BCM8879X=7 -port_init_cl72.BCM8879X=1 +port_init_cl72.BCM8879X=0 port_init_speed.BCM8879X=53125 rate_ext_mdio_divisor.BCM8879X=14 rate_int_mdio_divisor.BCM8879X=50 @@ -42,134 +43,134 @@ tslam_dma_enable.BCM8879X=0 tslam_intr_enable.BCM8879X=0 tslam_timeout_usec.BCM8879X=5000000 -lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx1 -lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx3 +lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx1 lane_to_serdes_map_fabric_lane2.BCM8879X=rx2:tx2 -lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx0 +lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx3 -lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx5 -lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx6 -lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx7 -lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx4 +lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx4 +lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx5 +lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx7 -lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx10 -lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx8 -lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx11 -lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx9 +lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx11 -lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx13 -lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx15 +lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx13 lane_to_serdes_map_fabric_lane14.BCM8879X=rx14:tx14 -lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx12 +lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx15 -lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx18 -lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx16 -lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx17 +lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx18 lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx19 lane_to_serdes_map_fabric_lane20.BCM8879X=rx20:tx20 -lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx22 -lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx23 -lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx21 +lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx23 lane_to_serdes_map_fabric_lane24.BCM8879X=rx24:tx24 -lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx26 -lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx27 -lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx25 +lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx26 +lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx27 -lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx29 -lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx30 -lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx28 +lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx29 +lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx30 lane_to_serdes_map_fabric_lane31.BCM8879X=rx31:tx31 -lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx34 -lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx32 -lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx35 -lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx33 +lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx35 lane_to_serdes_map_fabric_lane36.BCM8879X=rx36:tx36 -lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx38 -lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx39 -lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx37 - -lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx43 -lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx42 -lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx40 -lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx41 - -lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx46 -lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx44 -lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx45 +lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx39 + +lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx40 +lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx41 +lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx42 +lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx43 + +lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx44 +lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx46 lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx47 -lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx49 -lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx50 -lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx51 -lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx48 +lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx51 -lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx54 +lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx52 lane_to_serdes_map_fabric_lane53.BCM8879X=rx53:tx53 -lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx55 -lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx52 +lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx55 -lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx57 -lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx58 -lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx59 -lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx56 +lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx56 +lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx57 +lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx58 +lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx59 -lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx61 -lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx60 +lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx60 +lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx61 lane_to_serdes_map_fabric_lane62.BCM8879X=rx62:tx62 lane_to_serdes_map_fabric_lane63.BCM8879X=rx63:tx63 lane_to_serdes_map_fabric_lane64.BCM8879X=rx64:tx64 -lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx66 -lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx65 +lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx66 lane_to_serdes_map_fabric_lane67.BCM8879X=rx67:tx67 -lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx69 -lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx70 -lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx71 -lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx68 +lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx71 -lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx74 -lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx72 -lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx75 -lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx73 +lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx72 +lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx75 -lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx78 -lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx76 -lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx79 -lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx77 +lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx76 +lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx77 +lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx78 +lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx79 lane_to_serdes_map_fabric_lane80.BCM8879X=rx80:tx80 -lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx82 -lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx81 +lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx82 lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx83 -lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx85 -lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx86 -lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx87 -lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx84 +lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx87 -lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx90 -lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx88 -lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx91 -lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx89 +lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx89 +lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx90 +lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx91 -lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx95 -lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx94 -lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx92 -lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx93 +lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx92 +lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx94 +lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx95 lane_to_serdes_map_fabric_lane96.BCM8879X=rx96:tx96 -lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx98 -lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx97 +lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx98 lane_to_serdes_map_fabric_lane99.BCM8879X=rx99:tx99 -lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx101 -lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx102 -lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx100 +lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx102 lane_to_serdes_map_fabric_lane103.BCM8879X=rx103:tx103 lane_to_serdes_map_fabric_lane104.BCM8879X=rx104:tx104 @@ -179,13 +180,13 @@ lane_to_serdes_map_fabric_lane107.BCM8879X=rx107:tx107 lane_to_serdes_map_fabric_lane108.BCM8879X=rx108:tx108 lane_to_serdes_map_fabric_lane109.BCM8879X=rx109:tx109 -lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx111 -lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx110 +lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx110 +lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx111 -lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx115 -lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx114 -lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx113 -lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx112 +lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx112 +lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx114 +lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx115 lane_to_serdes_map_fabric_lane116.BCM8879X=rx116:tx116 lane_to_serdes_map_fabric_lane117.BCM8879X=rx117:tx117 @@ -197,15 +198,15 @@ lane_to_serdes_map_fabric_lane121.BCM8879X=rx121:tx121 lane_to_serdes_map_fabric_lane122.BCM8879X=rx122:tx122 lane_to_serdes_map_fabric_lane123.BCM8879X=rx123:tx123 -lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx127 -lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx126 -lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx124 -lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx125 +lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx127 -lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx130 -lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx131 -lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx129 -lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx128 +lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx131 lane_to_serdes_map_fabric_lane132.BCM8879X=rx132:tx132 lane_to_serdes_map_fabric_lane133.BCM8879X=rx133:tx133 @@ -213,23 +214,23 @@ lane_to_serdes_map_fabric_lane134.BCM8879X=rx134:tx134 lane_to_serdes_map_fabric_lane135.BCM8879X=rx135:tx135 lane_to_serdes_map_fabric_lane136.BCM8879X=rx136:tx136 -lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx138 -lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx137 +lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx137 +lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx138 lane_to_serdes_map_fabric_lane139.BCM8879X=rx139:tx139 -lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx143 -lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx142 -lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx141 -lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx140 +lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx140 +lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx143 -lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx145 -lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx147 -lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx144 -lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx146 +lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx147 -lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx150 +lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx148 lane_to_serdes_map_fabric_lane149.BCM8879X=rx149:tx149 -lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx148 +lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx150 lane_to_serdes_map_fabric_lane151.BCM8879X=rx151:tx151 lane_to_serdes_map_fabric_lane152.BCM8879X=rx152:tx152 @@ -237,116 +238,116 @@ lane_to_serdes_map_fabric_lane153.BCM8879X=rx153:tx153 lane_to_serdes_map_fabric_lane154.BCM8879X=rx154:tx154 lane_to_serdes_map_fabric_lane155.BCM8879X=rx155:tx155 -lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx157 -lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx159 +lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx156 +lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx157 lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx158 -lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx156 +lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx159 lane_to_serdes_map_fabric_lane160.BCM8879X=rx160:tx160 -lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx162 -lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx161 +lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx162 lane_to_serdes_map_fabric_lane163.BCM8879X=rx163:tx163 -lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx166 -lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx164 -lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx165 +lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx166 lane_to_serdes_map_fabric_lane167.BCM8879X=rx167:tx167 -lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx170 -lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx168 -lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx169 +lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx168 +lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx170 lane_to_serdes_map_fabric_lane171.BCM8879X=rx171:tx171 -lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx173 -lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx174 -lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx175 -lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx172 +lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx172 +lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx173 +lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx174 +lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx175 lane_to_serdes_map_fabric_lane176.BCM8879X=rx176:tx176 -lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx178 -lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx177 +lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx178 lane_to_serdes_map_fabric_lane179.BCM8879X=rx179:tx179 lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx180 -lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx182 -lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx181 +lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx182 lane_to_serdes_map_fabric_lane183.BCM8879X=rx183:tx183 -lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx187 -lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx184 +lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx185 lane_to_serdes_map_fabric_lane186.BCM8879X=rx186:tx186 -lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx185 +lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx187 -lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx190 +lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx188 lane_to_serdes_map_fabric_lane189.BCM8879X=rx189:tx189 -lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx191 -lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx188 +lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx190 +lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx191 -phy_rx_polarity_flip_fabric0.BCM8879X=0 -phy_rx_polarity_flip_fabric1.BCM8879X=1 -phy_rx_polarity_flip_fabric2.BCM8879X=0 -phy_rx_polarity_flip_fabric3.BCM8879X=1 +phy_rx_polarity_flip_fabric0.BCM8879X=1 +phy_rx_polarity_flip_fabric1.BCM8879X=0 +phy_rx_polarity_flip_fabric2.BCM8879X=1 +phy_rx_polarity_flip_fabric3.BCM8879X=0 phy_rx_polarity_flip_fabric4.BCM8879X=1 phy_rx_polarity_flip_fabric5.BCM8879X=0 phy_rx_polarity_flip_fabric6.BCM8879X=1 phy_rx_polarity_flip_fabric7.BCM8879X=0 -phy_rx_polarity_flip_fabric8.BCM8879X=1 -phy_rx_polarity_flip_fabric9.BCM8879X=0 -phy_rx_polarity_flip_fabric10.BCM8879X=1 -phy_rx_polarity_flip_fabric11.BCM8879X=0 +phy_rx_polarity_flip_fabric8.BCM8879X=0 +phy_rx_polarity_flip_fabric9.BCM8879X=1 +phy_rx_polarity_flip_fabric10.BCM8879X=0 +phy_rx_polarity_flip_fabric11.BCM8879X=1 -phy_rx_polarity_flip_fabric12.BCM8879X=0 -phy_rx_polarity_flip_fabric13.BCM8879X=1 -phy_rx_polarity_flip_fabric14.BCM8879X=0 -phy_rx_polarity_flip_fabric15.BCM8879X=1 +phy_rx_polarity_flip_fabric12.BCM8879X=1 +phy_rx_polarity_flip_fabric13.BCM8879X=0 +phy_rx_polarity_flip_fabric14.BCM8879X=1 +phy_rx_polarity_flip_fabric15.BCM8879X=0 -phy_rx_polarity_flip_fabric16.BCM8879X=0 -phy_rx_polarity_flip_fabric17.BCM8879X=1 -phy_rx_polarity_flip_fabric18.BCM8879X=0 -phy_rx_polarity_flip_fabric19.BCM8879X=1 +phy_rx_polarity_flip_fabric16.BCM8879X=1 +phy_rx_polarity_flip_fabric17.BCM8879X=0 +phy_rx_polarity_flip_fabric18.BCM8879X=1 +phy_rx_polarity_flip_fabric19.BCM8879X=0 phy_rx_polarity_flip_fabric20.BCM8879X=0 phy_rx_polarity_flip_fabric21.BCM8879X=1 phy_rx_polarity_flip_fabric22.BCM8879X=0 phy_rx_polarity_flip_fabric23.BCM8879X=1 -phy_rx_polarity_flip_fabric24.BCM8879X=0 -phy_rx_polarity_flip_fabric25.BCM8879X=1 -phy_rx_polarity_flip_fabric26.BCM8879X=0 -phy_rx_polarity_flip_fabric27.BCM8879X=1 +phy_rx_polarity_flip_fabric24.BCM8879X=1 +phy_rx_polarity_flip_fabric25.BCM8879X=0 +phy_rx_polarity_flip_fabric26.BCM8879X=1 +phy_rx_polarity_flip_fabric27.BCM8879X=0 phy_rx_polarity_flip_fabric28.BCM8879X=1 phy_rx_polarity_flip_fabric29.BCM8879X=0 phy_rx_polarity_flip_fabric30.BCM8879X=1 phy_rx_polarity_flip_fabric31.BCM8879X=0 -phy_rx_polarity_flip_fabric32.BCM8879X=1 -phy_rx_polarity_flip_fabric33.BCM8879X=0 -phy_rx_polarity_flip_fabric34.BCM8879X=1 -phy_rx_polarity_flip_fabric35.BCM8879X=0 +phy_rx_polarity_flip_fabric32.BCM8879X=0 +phy_rx_polarity_flip_fabric33.BCM8879X=1 +phy_rx_polarity_flip_fabric34.BCM8879X=0 +phy_rx_polarity_flip_fabric35.BCM8879X=1 -phy_rx_polarity_flip_fabric36.BCM8879X=0 -phy_rx_polarity_flip_fabric37.BCM8879X=1 -phy_rx_polarity_flip_fabric38.BCM8879X=0 -phy_rx_polarity_flip_fabric39.BCM8879X=1 +phy_rx_polarity_flip_fabric36.BCM8879X=1 +phy_rx_polarity_flip_fabric37.BCM8879X=0 +phy_rx_polarity_flip_fabric38.BCM8879X=1 +phy_rx_polarity_flip_fabric39.BCM8879X=0 phy_rx_polarity_flip_fabric40.BCM8879X=0 phy_rx_polarity_flip_fabric41.BCM8879X=1 phy_rx_polarity_flip_fabric42.BCM8879X=0 phy_rx_polarity_flip_fabric43.BCM8879X=1 -phy_rx_polarity_flip_fabric44.BCM8879X=0 -phy_rx_polarity_flip_fabric45.BCM8879X=1 -phy_rx_polarity_flip_fabric46.BCM8879X=0 -phy_rx_polarity_flip_fabric47.BCM8879X=1 +phy_rx_polarity_flip_fabric44.BCM8879X=1 +phy_rx_polarity_flip_fabric45.BCM8879X=0 +phy_rx_polarity_flip_fabric46.BCM8879X=1 +phy_rx_polarity_flip_fabric47.BCM8879X=0 -phy_rx_polarity_flip_fabric48.BCM8879X=0 -phy_rx_polarity_flip_fabric49.BCM8879X=1 -phy_rx_polarity_flip_fabric50.BCM8879X=0 -phy_rx_polarity_flip_fabric51.BCM8879X=1 +phy_rx_polarity_flip_fabric48.BCM8879X=1 +phy_rx_polarity_flip_fabric49.BCM8879X=0 +phy_rx_polarity_flip_fabric50.BCM8879X=1 +phy_rx_polarity_flip_fabric51.BCM8879X=0 phy_rx_polarity_flip_fabric52.BCM8879X=0 phy_rx_polarity_flip_fabric53.BCM8879X=1 @@ -358,10 +359,10 @@ phy_rx_polarity_flip_fabric57.BCM8879X=1 phy_rx_polarity_flip_fabric58.BCM8879X=0 phy_rx_polarity_flip_fabric59.BCM8879X=1 -phy_rx_polarity_flip_fabric60.BCM8879X=1 -phy_rx_polarity_flip_fabric61.BCM8879X=0 -phy_rx_polarity_flip_fabric62.BCM8879X=1 -phy_rx_polarity_flip_fabric63.BCM8879X=0 +phy_rx_polarity_flip_fabric60.BCM8879X=0 +phy_rx_polarity_flip_fabric61.BCM8879X=1 +phy_rx_polarity_flip_fabric62.BCM8879X=0 +phy_rx_polarity_flip_fabric63.BCM8879X=1 phy_rx_polarity_flip_fabric64.BCM8879X=0 phy_rx_polarity_flip_fabric65.BCM8879X=1 @@ -373,78 +374,78 @@ phy_rx_polarity_flip_fabric69.BCM8879X=0 phy_rx_polarity_flip_fabric70.BCM8879X=1 phy_rx_polarity_flip_fabric71.BCM8879X=0 -phy_rx_polarity_flip_fabric72.BCM8879X=0 -phy_rx_polarity_flip_fabric73.BCM8879X=1 -phy_rx_polarity_flip_fabric74.BCM8879X=0 -phy_rx_polarity_flip_fabric75.BCM8879X=1 +phy_rx_polarity_flip_fabric72.BCM8879X=1 +phy_rx_polarity_flip_fabric73.BCM8879X=0 +phy_rx_polarity_flip_fabric74.BCM8879X=1 +phy_rx_polarity_flip_fabric75.BCM8879X=0 phy_rx_polarity_flip_fabric76.BCM8879X=0 phy_rx_polarity_flip_fabric77.BCM8879X=1 phy_rx_polarity_flip_fabric78.BCM8879X=0 phy_rx_polarity_flip_fabric79.BCM8879X=1 -phy_rx_polarity_flip_fabric80.BCM8879X=0 -phy_rx_polarity_flip_fabric81.BCM8879X=1 -phy_rx_polarity_flip_fabric82.BCM8879X=0 -phy_rx_polarity_flip_fabric83.BCM8879X=1 +phy_rx_polarity_flip_fabric80.BCM8879X=1 +phy_rx_polarity_flip_fabric81.BCM8879X=0 +phy_rx_polarity_flip_fabric82.BCM8879X=1 +phy_rx_polarity_flip_fabric83.BCM8879X=0 -phy_rx_polarity_flip_fabric84.BCM8879X=1 -phy_rx_polarity_flip_fabric85.BCM8879X=0 -phy_rx_polarity_flip_fabric86.BCM8879X=1 -phy_rx_polarity_flip_fabric87.BCM8879X=0 +phy_rx_polarity_flip_fabric84.BCM8879X=0 +phy_rx_polarity_flip_fabric85.BCM8879X=1 +phy_rx_polarity_flip_fabric86.BCM8879X=0 +phy_rx_polarity_flip_fabric87.BCM8879X=1 phy_rx_polarity_flip_fabric88.BCM8879X=1 phy_rx_polarity_flip_fabric89.BCM8879X=0 phy_rx_polarity_flip_fabric90.BCM8879X=1 phy_rx_polarity_flip_fabric91.BCM8879X=0 -phy_rx_polarity_flip_fabric92.BCM8879X=0 -phy_rx_polarity_flip_fabric93.BCM8879X=1 -phy_rx_polarity_flip_fabric94.BCM8879X=0 -phy_rx_polarity_flip_fabric95.BCM8879X=1 +phy_rx_polarity_flip_fabric92.BCM8879X=1 +phy_rx_polarity_flip_fabric93.BCM8879X=0 +phy_rx_polarity_flip_fabric94.BCM8879X=1 +phy_rx_polarity_flip_fabric95.BCM8879X=0 phy_rx_polarity_flip_fabric96.BCM8879X=0 -phy_rx_polarity_flip_fabric97.BCM8879X=0 +phy_rx_polarity_flip_fabric97.BCM8879X=1 phy_rx_polarity_flip_fabric98.BCM8879X=0 phy_rx_polarity_flip_fabric99.BCM8879X=1 -phy_rx_polarity_flip_fabric100.BCM8879X=0 -phy_rx_polarity_flip_fabric101.BCM8879X=1 +phy_rx_polarity_flip_fabric100.BCM8879X=1 +phy_rx_polarity_flip_fabric101.BCM8879X=0 phy_rx_polarity_flip_fabric102.BCM8879X=1 -phy_rx_polarity_flip_fabric103.BCM8879X=1 +phy_rx_polarity_flip_fabric103.BCM8879X=0 phy_rx_polarity_flip_fabric104.BCM8879X=0 phy_rx_polarity_flip_fabric105.BCM8879X=1 -phy_rx_polarity_flip_fabric106.BCM8879X=1 +phy_rx_polarity_flip_fabric106.BCM8879X=0 phy_rx_polarity_flip_fabric107.BCM8879X=1 -phy_rx_polarity_flip_fabric108.BCM8879X=1 -phy_rx_polarity_flip_fabric109.BCM8879X=0 -phy_rx_polarity_flip_fabric110.BCM8879X=1 -phy_rx_polarity_flip_fabric111.BCM8879X=0 +phy_rx_polarity_flip_fabric108.BCM8879X=0 +phy_rx_polarity_flip_fabric109.BCM8879X=1 +phy_rx_polarity_flip_fabric110.BCM8879X=0 +phy_rx_polarity_flip_fabric111.BCM8879X=1 -phy_rx_polarity_flip_fabric112.BCM8879X=0 -phy_rx_polarity_flip_fabric113.BCM8879X=1 -phy_rx_polarity_flip_fabric114.BCM8879X=0 -phy_rx_polarity_flip_fabric115.BCM8879X=1 +phy_rx_polarity_flip_fabric112.BCM8879X=1 +phy_rx_polarity_flip_fabric113.BCM8879X=0 +phy_rx_polarity_flip_fabric114.BCM8879X=1 +phy_rx_polarity_flip_fabric115.BCM8879X=0 -phy_rx_polarity_flip_fabric116.BCM8879X=1 -phy_rx_polarity_flip_fabric117.BCM8879X=0 -phy_rx_polarity_flip_fabric118.BCM8879X=1 -phy_rx_polarity_flip_fabric119.BCM8879X=0 +phy_rx_polarity_flip_fabric116.BCM8879X=0 +phy_rx_polarity_flip_fabric117.BCM8879X=1 +phy_rx_polarity_flip_fabric118.BCM8879X=0 +phy_rx_polarity_flip_fabric119.BCM8879X=1 -phy_rx_polarity_flip_fabric120.BCM8879X=0 +phy_rx_polarity_flip_fabric120.BCM8879X=1 phy_rx_polarity_flip_fabric121.BCM8879X=0 -phy_rx_polarity_flip_fabric122.BCM8879X=0 -phy_rx_polarity_flip_fabric123.BCM8879X=1 +phy_rx_polarity_flip_fabric122.BCM8879X=1 +phy_rx_polarity_flip_fabric123.BCM8879X=0 phy_rx_polarity_flip_fabric124.BCM8879X=1 -phy_rx_polarity_flip_fabric125.BCM8879X=1 -phy_rx_polarity_flip_fabric126.BCM8879X=0 -phy_rx_polarity_flip_fabric127.BCM8879X=1 +phy_rx_polarity_flip_fabric125.BCM8879X=0 +phy_rx_polarity_flip_fabric126.BCM8879X=1 +phy_rx_polarity_flip_fabric127.BCM8879X=0 phy_rx_polarity_flip_fabric128.BCM8879X=0 -phy_rx_polarity_flip_fabric129.BCM8879X=0 +phy_rx_polarity_flip_fabric129.BCM8879X=1 phy_rx_polarity_flip_fabric130.BCM8879X=0 phy_rx_polarity_flip_fabric131.BCM8879X=1 @@ -453,25 +454,25 @@ phy_rx_polarity_flip_fabric133.BCM8879X=0 phy_rx_polarity_flip_fabric134.BCM8879X=1 phy_rx_polarity_flip_fabric135.BCM8879X=0 -phy_rx_polarity_flip_fabric136.BCM8879X=1 -phy_rx_polarity_flip_fabric137.BCM8879X=0 -phy_rx_polarity_flip_fabric138.BCM8879X=1 -phy_rx_polarity_flip_fabric139.BCM8879X=0 +phy_rx_polarity_flip_fabric136.BCM8879X=0 +phy_rx_polarity_flip_fabric137.BCM8879X=1 +phy_rx_polarity_flip_fabric138.BCM8879X=0 +phy_rx_polarity_flip_fabric139.BCM8879X=1 -phy_rx_polarity_flip_fabric140.BCM8879X=0 -phy_rx_polarity_flip_fabric141.BCM8879X=1 -phy_rx_polarity_flip_fabric142.BCM8879X=0 -phy_rx_polarity_flip_fabric143.BCM8879X=1 +phy_rx_polarity_flip_fabric140.BCM8879X=1 +phy_rx_polarity_flip_fabric141.BCM8879X=0 +phy_rx_polarity_flip_fabric142.BCM8879X=1 +phy_rx_polarity_flip_fabric143.BCM8879X=0 -phy_rx_polarity_flip_fabric144.BCM8879X=0 -phy_rx_polarity_flip_fabric145.BCM8879X=1 -phy_rx_polarity_flip_fabric146.BCM8879X=0 -phy_rx_polarity_flip_fabric147.BCM8879X=1 +phy_rx_polarity_flip_fabric144.BCM8879X=1 +phy_rx_polarity_flip_fabric145.BCM8879X=0 +phy_rx_polarity_flip_fabric146.BCM8879X=1 +phy_rx_polarity_flip_fabric147.BCM8879X=0 -phy_rx_polarity_flip_fabric148.BCM8879X=1 -phy_rx_polarity_flip_fabric149.BCM8879X=0 -phy_rx_polarity_flip_fabric150.BCM8879X=1 -phy_rx_polarity_flip_fabric151.BCM8879X=0 +phy_rx_polarity_flip_fabric148.BCM8879X=0 +phy_rx_polarity_flip_fabric149.BCM8879X=1 +phy_rx_polarity_flip_fabric150.BCM8879X=0 +phy_rx_polarity_flip_fabric151.BCM8879X=1 phy_rx_polarity_flip_fabric152.BCM8879X=1 phy_rx_polarity_flip_fabric153.BCM8879X=0 @@ -480,28 +481,28 @@ phy_rx_polarity_flip_fabric155.BCM8879X=0 phy_rx_polarity_flip_fabric156.BCM8879X=0 phy_rx_polarity_flip_fabric157.BCM8879X=1 -phy_rx_polarity_flip_fabric158.BCM8879X=1 +phy_rx_polarity_flip_fabric158.BCM8879X=0 phy_rx_polarity_flip_fabric159.BCM8879X=1 -phy_rx_polarity_flip_fabric160.BCM8879X=0 +phy_rx_polarity_flip_fabric160.BCM8879X=1 phy_rx_polarity_flip_fabric161.BCM8879X=0 -phy_rx_polarity_flip_fabric162.BCM8879X=0 -phy_rx_polarity_flip_fabric163.BCM8879X=1 +phy_rx_polarity_flip_fabric162.BCM8879X=1 +phy_rx_polarity_flip_fabric163.BCM8879X=0 -phy_rx_polarity_flip_fabric164.BCM8879X=0 +phy_rx_polarity_flip_fabric164.BCM8879X=1 phy_rx_polarity_flip_fabric165.BCM8879X=0 -phy_rx_polarity_flip_fabric166.BCM8879X=0 -phy_rx_polarity_flip_fabric167.BCM8879X=1 +phy_rx_polarity_flip_fabric166.BCM8879X=1 +phy_rx_polarity_flip_fabric167.BCM8879X=0 -phy_rx_polarity_flip_fabric168.BCM8879X=0 -phy_rx_polarity_flip_fabric169.BCM8879X=1 -phy_rx_polarity_flip_fabric170.BCM8879X=0 -phy_rx_polarity_flip_fabric171.BCM8879X=1 +phy_rx_polarity_flip_fabric168.BCM8879X=1 +phy_rx_polarity_flip_fabric169.BCM8879X=0 +phy_rx_polarity_flip_fabric170.BCM8879X=1 +phy_rx_polarity_flip_fabric171.BCM8879X=0 -phy_rx_polarity_flip_fabric172.BCM8879X=1 -phy_rx_polarity_flip_fabric173.BCM8879X=0 -phy_rx_polarity_flip_fabric174.BCM8879X=1 -phy_rx_polarity_flip_fabric175.BCM8879X=0 +phy_rx_polarity_flip_fabric172.BCM8879X=0 +phy_rx_polarity_flip_fabric173.BCM8879X=1 +phy_rx_polarity_flip_fabric174.BCM8879X=0 +phy_rx_polarity_flip_fabric175.BCM8879X=1 phy_rx_polarity_flip_fabric176.BCM8879X=1 phy_rx_polarity_flip_fabric177.BCM8879X=0 @@ -509,79 +510,80 @@ phy_rx_polarity_flip_fabric178.BCM8879X=1 phy_rx_polarity_flip_fabric179.BCM8879X=0 phy_rx_polarity_flip_fabric180.BCM8879X=0 -phy_rx_polarity_flip_fabric181.BCM8879X=0 +phy_rx_polarity_flip_fabric181.BCM8879X=1 phy_rx_polarity_flip_fabric182.BCM8879X=0 phy_rx_polarity_flip_fabric183.BCM8879X=1 -phy_rx_polarity_flip_fabric184.BCM8879X=0 +phy_rx_polarity_flip_fabric184.BCM8879X=1 phy_rx_polarity_flip_fabric185.BCM8879X=0 -phy_rx_polarity_flip_fabric186.BCM8879X=0 -phy_rx_polarity_flip_fabric187.BCM8879X=1 +phy_rx_polarity_flip_fabric186.BCM8879X=1 +phy_rx_polarity_flip_fabric187.BCM8879X=0 phy_rx_polarity_flip_fabric188.BCM8879X=1 -phy_rx_polarity_flip_fabric189.BCM8879X=1 -phy_rx_polarity_flip_fabric190.BCM8879X=0 -phy_rx_polarity_flip_fabric191.BCM8879X=1 +phy_rx_polarity_flip_fabric189.BCM8879X=0 +phy_rx_polarity_flip_fabric190.BCM8879X=1 +phy_rx_polarity_flip_fabric191.BCM8879X=0 + phy_tx_polarity_flip_fabric0.BCM8879X=0 -phy_tx_polarity_flip_fabric1.BCM8879X=0 -phy_tx_polarity_flip_fabric2.BCM8879X=1 +phy_tx_polarity_flip_fabric1.BCM8879X=1 +phy_tx_polarity_flip_fabric2.BCM8879X=0 phy_tx_polarity_flip_fabric3.BCM8879X=1 -phy_tx_polarity_flip_fabric4.BCM8879X=1 -phy_tx_polarity_flip_fabric5.BCM8879X=0 -phy_tx_polarity_flip_fabric6.BCM8879X=1 -phy_tx_polarity_flip_fabric7.BCM8879X=0 +phy_tx_polarity_flip_fabric4.BCM8879X=0 +phy_tx_polarity_flip_fabric5.BCM8879X=1 +phy_tx_polarity_flip_fabric6.BCM8879X=0 +phy_tx_polarity_flip_fabric7.BCM8879X=1 -phy_tx_polarity_flip_fabric8.BCM8879X=0 +phy_tx_polarity_flip_fabric8.BCM8879X=1 phy_tx_polarity_flip_fabric9.BCM8879X=0 phy_tx_polarity_flip_fabric10.BCM8879X=1 -phy_tx_polarity_flip_fabric11.BCM8879X=1 +phy_tx_polarity_flip_fabric11.BCM8879X=0 phy_tx_polarity_flip_fabric12.BCM8879X=0 -phy_tx_polarity_flip_fabric13.BCM8879X=0 -phy_tx_polarity_flip_fabric14.BCM8879X=1 +phy_tx_polarity_flip_fabric13.BCM8879X=1 +phy_tx_polarity_flip_fabric14.BCM8879X=0 phy_tx_polarity_flip_fabric15.BCM8879X=1 -phy_tx_polarity_flip_fabric16.BCM8879X=1 +phy_tx_polarity_flip_fabric16.BCM8879X=0 phy_tx_polarity_flip_fabric17.BCM8879X=1 phy_tx_polarity_flip_fabric18.BCM8879X=0 -phy_tx_polarity_flip_fabric19.BCM8879X=0 +phy_tx_polarity_flip_fabric19.BCM8879X=1 phy_tx_polarity_flip_fabric20.BCM8879X=1 -phy_tx_polarity_flip_fabric21.BCM8879X=1 -phy_tx_polarity_flip_fabric22.BCM8879X=0 +phy_tx_polarity_flip_fabric21.BCM8879X=0 +phy_tx_polarity_flip_fabric22.BCM8879X=1 phy_tx_polarity_flip_fabric23.BCM8879X=0 -phy_tx_polarity_flip_fabric24.BCM8879X=1 +phy_tx_polarity_flip_fabric24.BCM8879X=0 phy_tx_polarity_flip_fabric25.BCM8879X=1 phy_tx_polarity_flip_fabric26.BCM8879X=0 -phy_tx_polarity_flip_fabric27.BCM8879X=0 +phy_tx_polarity_flip_fabric27.BCM8879X=1 -phy_tx_polarity_flip_fabric28.BCM8879X=1 -phy_tx_polarity_flip_fabric29.BCM8879X=0 +phy_tx_polarity_flip_fabric28.BCM8879X=0 +phy_tx_polarity_flip_fabric29.BCM8879X=1 phy_tx_polarity_flip_fabric30.BCM8879X=0 phy_tx_polarity_flip_fabric31.BCM8879X=1 -phy_tx_polarity_flip_fabric32.BCM8879X=0 +phy_tx_polarity_flip_fabric32.BCM8879X=1 phy_tx_polarity_flip_fabric33.BCM8879X=0 phy_tx_polarity_flip_fabric34.BCM8879X=1 -phy_tx_polarity_flip_fabric35.BCM8879X=1 +phy_tx_polarity_flip_fabric35.BCM8879X=0 -phy_tx_polarity_flip_fabric36.BCM8879X=1 +phy_tx_polarity_flip_fabric36.BCM8879X=0 phy_tx_polarity_flip_fabric37.BCM8879X=1 phy_tx_polarity_flip_fabric38.BCM8879X=0 -phy_tx_polarity_flip_fabric39.BCM8879X=0 +phy_tx_polarity_flip_fabric39.BCM8879X=1 -phy_tx_polarity_flip_fabric40.BCM8879X=0 -phy_tx_polarity_flip_fabric41.BCM8879X=1 +phy_tx_polarity_flip_fabric40.BCM8879X=1 +phy_tx_polarity_flip_fabric41.BCM8879X=0 phy_tx_polarity_flip_fabric42.BCM8879X=1 phy_tx_polarity_flip_fabric43.BCM8879X=0 -phy_tx_polarity_flip_fabric44.BCM8879X=1 +phy_tx_polarity_flip_fabric44.BCM8879X=0 phy_tx_polarity_flip_fabric45.BCM8879X=1 phy_tx_polarity_flip_fabric46.BCM8879X=0 -phy_tx_polarity_flip_fabric47.BCM8879X=0 +phy_tx_polarity_flip_fabric47.BCM8879X=1 phy_tx_polarity_flip_fabric48.BCM8879X=0 phy_tx_polarity_flip_fabric49.BCM8879X=1 @@ -590,43 +592,43 @@ phy_tx_polarity_flip_fabric51.BCM8879X=1 phy_tx_polarity_flip_fabric52.BCM8879X=1 phy_tx_polarity_flip_fabric53.BCM8879X=0 -phy_tx_polarity_flip_fabric54.BCM8879X=0 -phy_tx_polarity_flip_fabric55.BCM8879X=1 +phy_tx_polarity_flip_fabric54.BCM8879X=1 +phy_tx_polarity_flip_fabric55.BCM8879X=0 -phy_tx_polarity_flip_fabric56.BCM8879X=0 -phy_tx_polarity_flip_fabric57.BCM8879X=1 -phy_tx_polarity_flip_fabric58.BCM8879X=0 -phy_tx_polarity_flip_fabric59.BCM8879X=1 +phy_tx_polarity_flip_fabric56.BCM8879X=1 +phy_tx_polarity_flip_fabric57.BCM8879X=0 +phy_tx_polarity_flip_fabric58.BCM8879X=1 +phy_tx_polarity_flip_fabric59.BCM8879X=0 phy_tx_polarity_flip_fabric60.BCM8879X=1 phy_tx_polarity_flip_fabric61.BCM8879X=0 -phy_tx_polarity_flip_fabric62.BCM8879X=0 -phy_tx_polarity_flip_fabric63.BCM8879X=1 +phy_tx_polarity_flip_fabric62.BCM8879X=1 +phy_tx_polarity_flip_fabric63.BCM8879X=0 phy_tx_polarity_flip_fabric64.BCM8879X=1 -phy_tx_polarity_flip_fabric65.BCM8879X=1 -phy_tx_polarity_flip_fabric66.BCM8879X=0 +phy_tx_polarity_flip_fabric65.BCM8879X=0 +phy_tx_polarity_flip_fabric66.BCM8879X=1 phy_tx_polarity_flip_fabric67.BCM8879X=0 -phy_tx_polarity_flip_fabric68.BCM8879X=1 -phy_tx_polarity_flip_fabric69.BCM8879X=0 -phy_tx_polarity_flip_fabric70.BCM8879X=1 -phy_tx_polarity_flip_fabric71.BCM8879X=0 +phy_tx_polarity_flip_fabric68.BCM8879X=0 +phy_tx_polarity_flip_fabric69.BCM8879X=1 +phy_tx_polarity_flip_fabric70.BCM8879X=0 +phy_tx_polarity_flip_fabric71.BCM8879X=1 -phy_tx_polarity_flip_fabric72.BCM8879X=1 +phy_tx_polarity_flip_fabric72.BCM8879X=0 phy_tx_polarity_flip_fabric73.BCM8879X=1 phy_tx_polarity_flip_fabric74.BCM8879X=0 -phy_tx_polarity_flip_fabric75.BCM8879X=0 +phy_tx_polarity_flip_fabric75.BCM8879X=1 phy_tx_polarity_flip_fabric76.BCM8879X=1 -phy_tx_polarity_flip_fabric77.BCM8879X=1 -phy_tx_polarity_flip_fabric78.BCM8879X=0 +phy_tx_polarity_flip_fabric77.BCM8879X=0 +phy_tx_polarity_flip_fabric78.BCM8879X=1 phy_tx_polarity_flip_fabric79.BCM8879X=0 -phy_tx_polarity_flip_fabric80.BCM8879X=1 +phy_tx_polarity_flip_fabric80.BCM8879X=0 phy_tx_polarity_flip_fabric81.BCM8879X=1 phy_tx_polarity_flip_fabric82.BCM8879X=0 -phy_tx_polarity_flip_fabric83.BCM8879X=0 +phy_tx_polarity_flip_fabric83.BCM8879X=1 phy_tx_polarity_flip_fabric84.BCM8879X=1 phy_tx_polarity_flip_fabric85.BCM8879X=0 @@ -634,32 +636,32 @@ phy_tx_polarity_flip_fabric86.BCM8879X=1 phy_tx_polarity_flip_fabric87.BCM8879X=0 phy_tx_polarity_flip_fabric88.BCM8879X=0 -phy_tx_polarity_flip_fabric89.BCM8879X=0 -phy_tx_polarity_flip_fabric90.BCM8879X=1 +phy_tx_polarity_flip_fabric89.BCM8879X=1 +phy_tx_polarity_flip_fabric90.BCM8879X=0 phy_tx_polarity_flip_fabric91.BCM8879X=1 phy_tx_polarity_flip_fabric92.BCM8879X=0 phy_tx_polarity_flip_fabric93.BCM8879X=1 -phy_tx_polarity_flip_fabric94.BCM8879X=1 -phy_tx_polarity_flip_fabric95.BCM8879X=0 +phy_tx_polarity_flip_fabric94.BCM8879X=0 +phy_tx_polarity_flip_fabric95.BCM8879X=1 phy_tx_polarity_flip_fabric96.BCM8879X=1 -phy_tx_polarity_flip_fabric97.BCM8879X=1 -phy_tx_polarity_flip_fabric98.BCM8879X=0 +phy_tx_polarity_flip_fabric97.BCM8879X=0 +phy_tx_polarity_flip_fabric98.BCM8879X=1 phy_tx_polarity_flip_fabric99.BCM8879X=0 phy_tx_polarity_flip_fabric100.BCM8879X=0 -phy_tx_polarity_flip_fabric101.BCM8879X=0 +phy_tx_polarity_flip_fabric101.BCM8879X=1 phy_tx_polarity_flip_fabric102.BCM8879X=0 -phy_tx_polarity_flip_fabric103.BCM8879X=0 +phy_tx_polarity_flip_fabric103.BCM8879X=1 phy_tx_polarity_flip_fabric104.BCM8879X=1 phy_tx_polarity_flip_fabric105.BCM8879X=0 -phy_tx_polarity_flip_fabric106.BCM8879X=0 -phy_tx_polarity_flip_fabric107.BCM8879X=1 +phy_tx_polarity_flip_fabric106.BCM8879X=1 +phy_tx_polarity_flip_fabric107.BCM8879X=0 -phy_tx_polarity_flip_fabric108.BCM8879X=0 -phy_tx_polarity_flip_fabric109.BCM8879X=1 +phy_tx_polarity_flip_fabric108.BCM8879X=1 +phy_tx_polarity_flip_fabric109.BCM8879X=0 phy_tx_polarity_flip_fabric110.BCM8879X=1 phy_tx_polarity_flip_fabric111.BCM8879X=0 @@ -668,35 +670,35 @@ phy_tx_polarity_flip_fabric113.BCM8879X=1 phy_tx_polarity_flip_fabric114.BCM8879X=0 phy_tx_polarity_flip_fabric115.BCM8879X=1 -phy_tx_polarity_flip_fabric116.BCM8879X=0 -phy_tx_polarity_flip_fabric117.BCM8879X=1 -phy_tx_polarity_flip_fabric118.BCM8879X=0 -phy_tx_polarity_flip_fabric119.BCM8879X=1 +phy_tx_polarity_flip_fabric116.BCM8879X=1 +phy_tx_polarity_flip_fabric117.BCM8879X=0 +phy_tx_polarity_flip_fabric118.BCM8879X=1 +phy_tx_polarity_flip_fabric119.BCM8879X=0 -phy_tx_polarity_flip_fabric120.BCM8879X=1 -phy_tx_polarity_flip_fabric121.BCM8879X=0 -phy_tx_polarity_flip_fabric122.BCM8879X=1 -phy_tx_polarity_flip_fabric123.BCM8879X=0 +phy_tx_polarity_flip_fabric120.BCM8879X=0 +phy_tx_polarity_flip_fabric121.BCM8879X=1 +phy_tx_polarity_flip_fabric122.BCM8879X=0 +phy_tx_polarity_flip_fabric123.BCM8879X=1 -phy_tx_polarity_flip_fabric124.BCM8879X=1 -phy_tx_polarity_flip_fabric125.BCM8879X=0 -phy_tx_polarity_flip_fabric126.BCM8879X=1 -phy_tx_polarity_flip_fabric127.BCM8879X=0 +phy_tx_polarity_flip_fabric124.BCM8879X=0 +phy_tx_polarity_flip_fabric125.BCM8879X=1 +phy_tx_polarity_flip_fabric126.BCM8879X=0 +phy_tx_polarity_flip_fabric127.BCM8879X=1 -phy_tx_polarity_flip_fabric128.BCM8879X=0 -phy_tx_polarity_flip_fabric129.BCM8879X=1 -phy_tx_polarity_flip_fabric130.BCM8879X=0 -phy_tx_polarity_flip_fabric131.BCM8879X=1 +phy_tx_polarity_flip_fabric128.BCM8879X=1 +phy_tx_polarity_flip_fabric129.BCM8879X=0 +phy_tx_polarity_flip_fabric130.BCM8879X=1 +phy_tx_polarity_flip_fabric131.BCM8879X=0 phy_tx_polarity_flip_fabric132.BCM8879X=0 phy_tx_polarity_flip_fabric133.BCM8879X=1 phy_tx_polarity_flip_fabric134.BCM8879X=0 phy_tx_polarity_flip_fabric135.BCM8879X=1 -phy_tx_polarity_flip_fabric136.BCM8879X=0 +phy_tx_polarity_flip_fabric136.BCM8879X=1 phy_tx_polarity_flip_fabric137.BCM8879X=0 phy_tx_polarity_flip_fabric138.BCM8879X=1 -phy_tx_polarity_flip_fabric139.BCM8879X=1 +phy_tx_polarity_flip_fabric139.BCM8879X=0 phy_tx_polarity_flip_fabric140.BCM8879X=0 phy_tx_polarity_flip_fabric141.BCM8879X=1 @@ -704,39 +706,39 @@ phy_tx_polarity_flip_fabric142.BCM8879X=0 phy_tx_polarity_flip_fabric143.BCM8879X=1 phy_tx_polarity_flip_fabric144.BCM8879X=0 -phy_tx_polarity_flip_fabric145.BCM8879X=0 -phy_tx_polarity_flip_fabric146.BCM8879X=1 +phy_tx_polarity_flip_fabric145.BCM8879X=1 +phy_tx_polarity_flip_fabric146.BCM8879X=0 phy_tx_polarity_flip_fabric147.BCM8879X=1 -phy_tx_polarity_flip_fabric148.BCM8879X=0 -phy_tx_polarity_flip_fabric149.BCM8879X=1 -phy_tx_polarity_flip_fabric150.BCM8879X=0 -phy_tx_polarity_flip_fabric151.BCM8879X=1 +phy_tx_polarity_flip_fabric148.BCM8879X=1 +phy_tx_polarity_flip_fabric149.BCM8879X=0 +phy_tx_polarity_flip_fabric150.BCM8879X=1 +phy_tx_polarity_flip_fabric151.BCM8879X=0 phy_tx_polarity_flip_fabric152.BCM8879X=0 phy_tx_polarity_flip_fabric153.BCM8879X=1 phy_tx_polarity_flip_fabric154.BCM8879X=0 phy_tx_polarity_flip_fabric155.BCM8879X=1 -phy_tx_polarity_flip_fabric156.BCM8879X=0 +phy_tx_polarity_flip_fabric156.BCM8879X=1 phy_tx_polarity_flip_fabric157.BCM8879X=0 -phy_tx_polarity_flip_fabric158.BCM8879X=0 +phy_tx_polarity_flip_fabric158.BCM8879X=1 phy_tx_polarity_flip_fabric159.BCM8879X=0 -phy_tx_polarity_flip_fabric160.BCM8879X=1 +phy_tx_polarity_flip_fabric160.BCM8879X=0 phy_tx_polarity_flip_fabric161.BCM8879X=1 phy_tx_polarity_flip_fabric162.BCM8879X=0 -phy_tx_polarity_flip_fabric163.BCM8879X=0 +phy_tx_polarity_flip_fabric163.BCM8879X=1 phy_tx_polarity_flip_fabric164.BCM8879X=0 -phy_tx_polarity_flip_fabric165.BCM8879X=0 +phy_tx_polarity_flip_fabric165.BCM8879X=1 phy_tx_polarity_flip_fabric166.BCM8879X=0 -phy_tx_polarity_flip_fabric167.BCM8879X=0 +phy_tx_polarity_flip_fabric167.BCM8879X=1 -phy_tx_polarity_flip_fabric168.BCM8879X=1 +phy_tx_polarity_flip_fabric168.BCM8879X=0 phy_tx_polarity_flip_fabric169.BCM8879X=1 phy_tx_polarity_flip_fabric170.BCM8879X=0 -phy_tx_polarity_flip_fabric171.BCM8879X=0 +phy_tx_polarity_flip_fabric171.BCM8879X=1 phy_tx_polarity_flip_fabric172.BCM8879X=1 phy_tx_polarity_flip_fabric173.BCM8879X=0 @@ -744,25 +746,410 @@ phy_tx_polarity_flip_fabric174.BCM8879X=1 phy_tx_polarity_flip_fabric175.BCM8879X=0 phy_tx_polarity_flip_fabric176.BCM8879X=0 -phy_tx_polarity_flip_fabric177.BCM8879X=0 -phy_tx_polarity_flip_fabric178.BCM8879X=1 +phy_tx_polarity_flip_fabric177.BCM8879X=1 +phy_tx_polarity_flip_fabric178.BCM8879X=0 phy_tx_polarity_flip_fabric179.BCM8879X=1 -phy_tx_polarity_flip_fabric180.BCM8879X=0 +phy_tx_polarity_flip_fabric180.BCM8879X=1 phy_tx_polarity_flip_fabric181.BCM8879X=0 -phy_tx_polarity_flip_fabric182.BCM8879X=0 +phy_tx_polarity_flip_fabric182.BCM8879X=1 phy_tx_polarity_flip_fabric183.BCM8879X=0 -phy_tx_polarity_flip_fabric184.BCM8879X=1 -phy_tx_polarity_flip_fabric185.BCM8879X=0 -phy_tx_polarity_flip_fabric186.BCM8879X=1 -phy_tx_polarity_flip_fabric187.BCM8879X=0 +phy_tx_polarity_flip_fabric184.BCM8879X=0 +phy_tx_polarity_flip_fabric185.BCM8879X=1 +phy_tx_polarity_flip_fabric186.BCM8879X=0 +phy_tx_polarity_flip_fabric187.BCM8879X=1 -phy_tx_polarity_flip_fabric188.BCM8879X=1 -phy_tx_polarity_flip_fabric189.BCM8879X=0 +phy_tx_polarity_flip_fabric188.BCM8879X=0 +phy_tx_polarity_flip_fabric189.BCM8879X=1 phy_tx_polarity_flip_fabric190.BCM8879X=0 phy_tx_polarity_flip_fabric191.BCM8879X=1 +port_init_cl72_0=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 +port_init_cl72_19=0 +port_init_cl72_20=0 +port_init_cl72_21=0 +port_init_cl72_22=0 +port_init_cl72_23=0 +port_init_cl72_24=0 +port_init_cl72_25=0 +port_init_cl72_26=0 +port_init_cl72_27=0 +port_init_cl72_28=0 +port_init_cl72_29=0 +port_init_cl72_30=0 +port_init_cl72_31=0 +port_init_cl72_32=0 +port_init_cl72_33=0 +port_init_cl72_34=0 +port_init_cl72_35=0 +port_init_cl72_36=0 +port_init_cl72_37=0 +port_init_cl72_38=0 +port_init_cl72_39=0 +port_init_cl72_40=0 +port_init_cl72_41=0 +port_init_cl72_42=0 +port_init_cl72_43=0 +port_init_cl72_44=0 +port_init_cl72_45=0 +port_init_cl72_46=0 +port_init_cl72_47=0 +port_init_cl72_48=0 +port_init_cl72_49=0 +port_init_cl72_50=0 +port_init_cl72_51=0 +port_init_cl72_52=0 +port_init_cl72_53=0 +port_init_cl72_54=0 +port_init_cl72_55=0 +port_init_cl72_56=0 +port_init_cl72_57=0 +port_init_cl72_58=0 +port_init_cl72_59=0 +port_init_cl72_60=0 +port_init_cl72_61=0 +port_init_cl72_62=0 +port_init_cl72_63=0 +port_init_cl72_64=0 +port_init_cl72_65=0 +port_init_cl72_66=0 +port_init_cl72_67=0 +port_init_cl72_68=0 +port_init_cl72_69=0 +port_init_cl72_70=0 +port_init_cl72_71=0 +port_init_cl72_72=0 +port_init_cl72_73=0 +port_init_cl72_74=0 +port_init_cl72_75=0 +port_init_cl72_76=0 +port_init_cl72_77=0 +port_init_cl72_78=0 +port_init_cl72_79=0 +port_init_cl72_80=0 +port_init_cl72_81=0 +port_init_cl72_82=0 +port_init_cl72_83=0 +port_init_cl72_84=0 +port_init_cl72_85=0 +port_init_cl72_86=0 +port_init_cl72_87=0 +port_init_cl72_88=0 +port_init_cl72_89=0 +port_init_cl72_90=0 +port_init_cl72_91=0 +port_init_cl72_92=0 +port_init_cl72_93=0 +port_init_cl72_94=0 +port_init_cl72_95=0 +port_init_cl72_96=0 +port_init_cl72_97=0 +port_init_cl72_98=0 +port_init_cl72_99=0 +port_init_cl72_100=0 +port_init_cl72_101=0 +port_init_cl72_102=0 +port_init_cl72_103=0 +port_init_cl72_104=0 +port_init_cl72_105=0 +port_init_cl72_106=0 +port_init_cl72_107=0 +port_init_cl72_108=0 +port_init_cl72_109=0 +port_init_cl72_110=0 +port_init_cl72_111=0 +port_init_cl72_112=0 +port_init_cl72_113=0 +port_init_cl72_114=0 +port_init_cl72_115=0 +port_init_cl72_116=0 +port_init_cl72_117=0 +port_init_cl72_118=0 +port_init_cl72_119=0 +port_init_cl72_120=0 +port_init_cl72_121=0 +port_init_cl72_122=0 +port_init_cl72_123=0 +port_init_cl72_124=0 +port_init_cl72_125=0 +port_init_cl72_126=0 +port_init_cl72_127=0 +port_init_cl72_128=0 +port_init_cl72_129=0 +port_init_cl72_130=0 +port_init_cl72_131=0 +port_init_cl72_132=0 +port_init_cl72_133=0 +port_init_cl72_134=0 +port_init_cl72_135=0 +port_init_cl72_136=0 +port_init_cl72_137=0 +port_init_cl72_138=0 +port_init_cl72_139=0 +port_init_cl72_140=0 +port_init_cl72_141=0 +port_init_cl72_142=0 +port_init_cl72_143=0 +port_init_cl72_144=0 +port_init_cl72_145=0 +port_init_cl72_146=0 +port_init_cl72_147=0 +port_init_cl72_148=0 +port_init_cl72_149=0 +port_init_cl72_150=0 +port_init_cl72_151=0 +port_init_cl72_152=0 +port_init_cl72_153=0 +port_init_cl72_154=0 +port_init_cl72_155=0 +port_init_cl72_156=0 +port_init_cl72_157=0 +port_init_cl72_158=0 +port_init_cl72_159=0 +port_init_cl72_160=0 +port_init_cl72_161=0 +port_init_cl72_162=0 +port_init_cl72_163=0 +port_init_cl72_164=0 +port_init_cl72_165=0 +port_init_cl72_166=0 +port_init_cl72_167=0 +port_init_cl72_168=0 +port_init_cl72_169=0 +port_init_cl72_170=0 +port_init_cl72_171=0 +port_init_cl72_172=0 +port_init_cl72_173=0 +port_init_cl72_174=0 +port_init_cl72_175=0 +port_init_cl72_176=0 +port_init_cl72_177=0 +port_init_cl72_178=0 +port_init_cl72_179=0 +port_init_cl72_180=0 +port_init_cl72_181=0 +port_init_cl72_182=0 +port_init_cl72_183=0 +port_init_cl72_184=0 +port_init_cl72_185=0 +port_init_cl72_186=0 +port_init_cl72_187=0 +port_init_cl72_188=0 +port_init_cl72_189=0 +port_init_cl72_190=0 +port_init_cl72_191=0 + +serdes_tx_taps_0.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_1.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_2.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_3.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_4.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_5.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_6.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_7.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_8.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_9.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_10.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_11.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_12.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_13.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_14.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_15.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_16.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_17.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_18.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_19.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_20.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_21.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_22.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_23.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_24.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_25.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_26.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_27.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_28.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_29.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_30.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_31.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_32.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_33.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_34.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_35.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_36.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_37.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_38.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_39.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_40.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_41.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_42.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_43.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_44.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_45.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_46.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_47.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_48.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_49.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_50.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_51.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_52.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_53.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_54.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_55.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_56.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_57.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_58.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_59.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_60.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_61.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_62.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_63.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_64.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_65.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_66.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_67.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_68.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_69.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_70.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_71.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_72.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_73.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_74.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_75.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_76.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_77.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_78.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_79.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_80.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_81.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_82.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_83.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_84.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_85.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_86.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_87.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_88.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_89.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_90.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_91.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_92.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_93.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_94.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_95.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_96.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_97.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_98.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_99.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_100.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_101.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_102.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_103.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_104.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_105.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_106.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_107.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_108.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_109.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_110.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_111.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_112.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_113.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_114.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_115.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_116.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_117.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_118.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_119.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_120.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_121.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_122.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_123.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_124.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_125.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_126.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_127.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_128.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_129.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_130.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_131.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_132.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_133.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_134.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_135.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_136.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_137.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_138.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_139.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_140.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_141.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_142.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_143.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_144.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_145.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_146.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_147.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_148.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_149.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_150.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_151.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_152.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_153.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_154.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_155.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_156.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_157.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_158.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_159.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_160.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_161.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_162.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_163.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_164.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_165.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_166.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_167.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_168.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_169.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_170.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_171.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_172.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_173.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_174.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_175.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_176.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_177.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_178.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_179.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_180.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_181.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_182.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_183.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_184.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_185.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_186.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_187.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_188.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_189.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_190.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_191.BCM8879X=pam4:-24:132:-12:0:0:0 serdes_lane_config_channel_mode_0.0=force_nr serdes_lane_config_channel_mode_1.0=force_nr diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/8/config-ramon-5-0.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/8/config-ramon-5-0.bcm index c482206649bc..4adac068b8eb 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/8/config-ramon-5-0.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/8/config-ramon-5-0.bcm @@ -1,7 +1,8 @@ + appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=9 bcm_linkscan_interval.BCM8879X=0 -bcm_stat_interval.BCM8879X=0 +bcm_stat_interval.BCM8879X=4000000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 @@ -20,10 +21,10 @@ mdio_output_delay_int.BCM8879X=25 mem_cache_enable_parity.BCM8879X=1 mm_intr_enable.BCM8879X=0 mm_timeout_usec.BCM8879X=300000 -polled_irq_delay.BCM8879X=500000 +polled_irq_delay.BCM8879X=100000 polled_irq_mode.BCM8879X=1 port_fec.BCM8879X=7 -port_init_cl72.BCM8879X=1 +port_init_cl72.BCM8879X=0 port_init_speed.BCM8879X=53125 rate_ext_mdio_divisor.BCM8879X=14 rate_int_mdio_divisor.BCM8879X=50 @@ -42,134 +43,134 @@ tslam_dma_enable.BCM8879X=0 tslam_intr_enable.BCM8879X=0 tslam_timeout_usec.BCM8879X=5000000 -lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx1 -lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx3 +lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx1 lane_to_serdes_map_fabric_lane2.BCM8879X=rx2:tx2 -lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx0 +lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx3 -lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx6 +lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx4 lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx5 -lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx7 -lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx4 +lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx7 -lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx10 -lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx8 -lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx11 -lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx9 +lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx11 -lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx13 -lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx15 +lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx13 lane_to_serdes_map_fabric_lane14.BCM8879X=rx14:tx14 -lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx12 +lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx15 -lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx18 -lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx16 -lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx19 -lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx17 +lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx18 +lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx19 lane_to_serdes_map_fabric_lane20.BCM8879X=rx20:tx20 -lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx22 -lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx23 -lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx21 +lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx23 lane_to_serdes_map_fabric_lane24.BCM8879X=rx24:tx24 -lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx26 -lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx27 -lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx25 +lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx26 +lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx27 -lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx29 -lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx30 -lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx28 +lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx29 +lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx30 lane_to_serdes_map_fabric_lane31.BCM8879X=rx31:tx31 -lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx34 -lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx32 -lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx35 -lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx33 +lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx35 lane_to_serdes_map_fabric_lane36.BCM8879X=rx36:tx36 -lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx38 -lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx39 -lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx37 +lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx39 -lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx43 -lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx42 -lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx40 -lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx41 +lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx40 +lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx41 +lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx42 +lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx43 lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx44 -lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx46 -lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx47 -lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx45 +lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx46 +lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx47 -lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx49 -lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx50 -lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx51 -lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx48 +lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx51 -lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx54 +lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx52 lane_to_serdes_map_fabric_lane53.BCM8879X=rx53:tx53 -lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx55 -lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx52 +lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx55 -lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx58 +lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx56 lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx57 -lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx59 -lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx56 +lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx58 +lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx59 -lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx61 -lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx60 +lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx60 +lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx61 lane_to_serdes_map_fabric_lane62.BCM8879X=rx62:tx62 lane_to_serdes_map_fabric_lane63.BCM8879X=rx63:tx63 lane_to_serdes_map_fabric_lane64.BCM8879X=rx64:tx64 -lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx66 -lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx65 +lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx66 lane_to_serdes_map_fabric_lane67.BCM8879X=rx67:tx67 -lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx69 -lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx70 -lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx71 -lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx68 +lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx71 -lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx74 -lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx72 -lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx75 -lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx73 +lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx72 +lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx75 -lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx78 -lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx76 -lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx79 -lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx77 +lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx76 +lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx77 +lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx78 +lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx79 lane_to_serdes_map_fabric_lane80.BCM8879X=rx80:tx80 -lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx82 -lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx83 -lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx81 +lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx82 +lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx83 -lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx85 -lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx86 -lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx87 -lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx84 +lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx87 -lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx90 -lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx88 -lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx91 -lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx89 +lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx89 +lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx90 +lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx91 -lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx95 -lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx94 -lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx92 -lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx93 +lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx92 +lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx94 +lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx95 lane_to_serdes_map_fabric_lane96.BCM8879X=rx96:tx96 -lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx98 -lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx97 +lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx98 lane_to_serdes_map_fabric_lane99.BCM8879X=rx99:tx99 -lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx101 -lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx102 -lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx100 +lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx102 lane_to_serdes_map_fabric_lane103.BCM8879X=rx103:tx103 lane_to_serdes_map_fabric_lane104.BCM8879X=rx104:tx104 @@ -182,10 +183,10 @@ lane_to_serdes_map_fabric_lane109.BCM8879X=rx109:tx109 lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx110 lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx111 -lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx115 -lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx114 -lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx113 -lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx112 +lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx112 +lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx114 +lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx115 lane_to_serdes_map_fabric_lane116.BCM8879X=rx116:tx116 lane_to_serdes_map_fabric_lane117.BCM8879X=rx117:tx117 @@ -197,15 +198,15 @@ lane_to_serdes_map_fabric_lane121.BCM8879X=rx121:tx121 lane_to_serdes_map_fabric_lane122.BCM8879X=rx122:tx122 lane_to_serdes_map_fabric_lane123.BCM8879X=rx123:tx123 -lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx127 -lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx126 -lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx124 -lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx125 +lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx127 -lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx131 -lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx130 -lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx129 -lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx128 +lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx131 lane_to_serdes_map_fabric_lane132.BCM8879X=rx132:tx132 lane_to_serdes_map_fabric_lane133.BCM8879X=rx133:tx133 @@ -213,23 +214,23 @@ lane_to_serdes_map_fabric_lane134.BCM8879X=rx134:tx134 lane_to_serdes_map_fabric_lane135.BCM8879X=rx135:tx135 lane_to_serdes_map_fabric_lane136.BCM8879X=rx136:tx136 -lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx138 -lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx137 +lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx137 +lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx138 lane_to_serdes_map_fabric_lane139.BCM8879X=rx139:tx139 -lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx143 -lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx142 -lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx141 -lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx140 +lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx140 +lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx143 -lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx145 -lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx147 -lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx144 -lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx146 +lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx147 -lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx150 +lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx148 lane_to_serdes_map_fabric_lane149.BCM8879X=rx149:tx149 -lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx148 +lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx150 lane_to_serdes_map_fabric_lane151.BCM8879X=rx151:tx151 lane_to_serdes_map_fabric_lane152.BCM8879X=rx152:tx152 @@ -237,91 +238,91 @@ lane_to_serdes_map_fabric_lane153.BCM8879X=rx153:tx153 lane_to_serdes_map_fabric_lane154.BCM8879X=rx154:tx154 lane_to_serdes_map_fabric_lane155.BCM8879X=rx155:tx155 -lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx157 -lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx159 -lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx156 -lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx158 +lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx156 +lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx157 +lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx158 +lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx159 lane_to_serdes_map_fabric_lane160.BCM8879X=rx160:tx160 -lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx162 -lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx161 +lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx162 lane_to_serdes_map_fabric_lane163.BCM8879X=rx163:tx163 -lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx166 -lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx164 -lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx165 +lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx166 lane_to_serdes_map_fabric_lane167.BCM8879X=rx167:tx167 -lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx170 -lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx168 -lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx169 +lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx168 +lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx170 lane_to_serdes_map_fabric_lane171.BCM8879X=rx171:tx171 -lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx173 -lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx174 -lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx175 -lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx172 +lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx172 +lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx173 +lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx174 +lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx175 lane_to_serdes_map_fabric_lane176.BCM8879X=rx176:tx176 -lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx178 -lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx177 +lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx178 lane_to_serdes_map_fabric_lane179.BCM8879X=rx179:tx179 -lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx182 -lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx180 -lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx181 +lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx180 +lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx182 lane_to_serdes_map_fabric_lane183.BCM8879X=rx183:tx183 -lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx187 -lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx184 +lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx185 lane_to_serdes_map_fabric_lane186.BCM8879X=rx186:tx186 -lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx185 +lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx187 -lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx190 +lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx188 lane_to_serdes_map_fabric_lane189.BCM8879X=rx189:tx189 -lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx191 -lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx188 +lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx190 +lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx191 -phy_rx_polarity_flip_fabric0.BCM8879X=0 -phy_rx_polarity_flip_fabric1.BCM8879X=1 -phy_rx_polarity_flip_fabric2.BCM8879X=0 -phy_rx_polarity_flip_fabric3.BCM8879X=1 +phy_rx_polarity_flip_fabric0.BCM8879X=1 +phy_rx_polarity_flip_fabric1.BCM8879X=0 +phy_rx_polarity_flip_fabric2.BCM8879X=1 +phy_rx_polarity_flip_fabric3.BCM8879X=0 -phy_rx_polarity_flip_fabric4.BCM8879X=1 -phy_rx_polarity_flip_fabric5.BCM8879X=0 -phy_rx_polarity_flip_fabric6.BCM8879X=1 -phy_rx_polarity_flip_fabric7.BCM8879X=0 +phy_rx_polarity_flip_fabric4.BCM8879X=0 +phy_rx_polarity_flip_fabric5.BCM8879X=1 +phy_rx_polarity_flip_fabric6.BCM8879X=0 +phy_rx_polarity_flip_fabric7.BCM8879X=1 phy_rx_polarity_flip_fabric8.BCM8879X=1 phy_rx_polarity_flip_fabric9.BCM8879X=0 phy_rx_polarity_flip_fabric10.BCM8879X=1 phy_rx_polarity_flip_fabric11.BCM8879X=0 -phy_rx_polarity_flip_fabric12.BCM8879X=1 -phy_rx_polarity_flip_fabric13.BCM8879X=0 +phy_rx_polarity_flip_fabric12.BCM8879X=0 +phy_rx_polarity_flip_fabric13.BCM8879X=1 phy_rx_polarity_flip_fabric14.BCM8879X=0 phy_rx_polarity_flip_fabric15.BCM8879X=1 -phy_rx_polarity_flip_fabric16.BCM8879X=0 -phy_rx_polarity_flip_fabric17.BCM8879X=1 -phy_rx_polarity_flip_fabric18.BCM8879X=0 -phy_rx_polarity_flip_fabric19.BCM8879X=1 +phy_rx_polarity_flip_fabric16.BCM8879X=1 +phy_rx_polarity_flip_fabric17.BCM8879X=0 +phy_rx_polarity_flip_fabric18.BCM8879X=1 +phy_rx_polarity_flip_fabric19.BCM8879X=0 -phy_rx_polarity_flip_fabric20.BCM8879X=0 -phy_rx_polarity_flip_fabric21.BCM8879X=1 +phy_rx_polarity_flip_fabric20.BCM8879X=1 +phy_rx_polarity_flip_fabric21.BCM8879X=0 phy_rx_polarity_flip_fabric22.BCM8879X=1 phy_rx_polarity_flip_fabric23.BCM8879X=0 -phy_rx_polarity_flip_fabric24.BCM8879X=0 -phy_rx_polarity_flip_fabric25.BCM8879X=1 -phy_rx_polarity_flip_fabric26.BCM8879X=0 -phy_rx_polarity_flip_fabric27.BCM8879X=1 +phy_rx_polarity_flip_fabric24.BCM8879X=1 +phy_rx_polarity_flip_fabric25.BCM8879X=0 +phy_rx_polarity_flip_fabric26.BCM8879X=1 +phy_rx_polarity_flip_fabric27.BCM8879X=0 -phy_rx_polarity_flip_fabric28.BCM8879X=1 -phy_rx_polarity_flip_fabric29.BCM8879X=0 -phy_rx_polarity_flip_fabric30.BCM8879X=1 -phy_rx_polarity_flip_fabric31.BCM8879X=0 +phy_rx_polarity_flip_fabric28.BCM8879X=0 +phy_rx_polarity_flip_fabric29.BCM8879X=1 +phy_rx_polarity_flip_fabric30.BCM8879X=0 +phy_rx_polarity_flip_fabric31.BCM8879X=1 phy_rx_polarity_flip_fabric32.BCM8879X=1 phy_rx_polarity_flip_fabric33.BCM8879X=0 @@ -330,11 +331,11 @@ phy_rx_polarity_flip_fabric35.BCM8879X=0 phy_rx_polarity_flip_fabric36.BCM8879X=0 phy_rx_polarity_flip_fabric37.BCM8879X=1 -phy_rx_polarity_flip_fabric38.BCM8879X=1 -phy_rx_polarity_flip_fabric39.BCM8879X=0 +phy_rx_polarity_flip_fabric38.BCM8879X=0 +phy_rx_polarity_flip_fabric39.BCM8879X=1 -phy_rx_polarity_flip_fabric40.BCM8879X=0 -phy_rx_polarity_flip_fabric41.BCM8879X=1 +phy_rx_polarity_flip_fabric40.BCM8879X=1 +phy_rx_polarity_flip_fabric41.BCM8879X=0 phy_rx_polarity_flip_fabric42.BCM8879X=1 phy_rx_polarity_flip_fabric43.BCM8879X=0 @@ -350,63 +351,63 @@ phy_rx_polarity_flip_fabric51.BCM8879X=1 phy_rx_polarity_flip_fabric52.BCM8879X=1 phy_rx_polarity_flip_fabric53.BCM8879X=0 -phy_rx_polarity_flip_fabric54.BCM8879X=0 -phy_rx_polarity_flip_fabric55.BCM8879X=1 +phy_rx_polarity_flip_fabric54.BCM8879X=1 +phy_rx_polarity_flip_fabric55.BCM8879X=0 -phy_rx_polarity_flip_fabric56.BCM8879X=1 -phy_rx_polarity_flip_fabric57.BCM8879X=0 +phy_rx_polarity_flip_fabric56.BCM8879X=0 +phy_rx_polarity_flip_fabric57.BCM8879X=1 phy_rx_polarity_flip_fabric58.BCM8879X=0 phy_rx_polarity_flip_fabric59.BCM8879X=1 -phy_rx_polarity_flip_fabric60.BCM8879X=1 -phy_rx_polarity_flip_fabric61.BCM8879X=0 -phy_rx_polarity_flip_fabric62.BCM8879X=1 -phy_rx_polarity_flip_fabric63.BCM8879X=0 +phy_rx_polarity_flip_fabric60.BCM8879X=0 +phy_rx_polarity_flip_fabric61.BCM8879X=1 +phy_rx_polarity_flip_fabric62.BCM8879X=0 +phy_rx_polarity_flip_fabric63.BCM8879X=1 -phy_rx_polarity_flip_fabric64.BCM8879X=0 -phy_rx_polarity_flip_fabric65.BCM8879X=1 -phy_rx_polarity_flip_fabric66.BCM8879X=0 -phy_rx_polarity_flip_fabric67.BCM8879X=1 +phy_rx_polarity_flip_fabric64.BCM8879X=1 +phy_rx_polarity_flip_fabric65.BCM8879X=0 +phy_rx_polarity_flip_fabric66.BCM8879X=1 +phy_rx_polarity_flip_fabric67.BCM8879X=0 -phy_rx_polarity_flip_fabric68.BCM8879X=1 -phy_rx_polarity_flip_fabric69.BCM8879X=0 -phy_rx_polarity_flip_fabric70.BCM8879X=1 -phy_rx_polarity_flip_fabric71.BCM8879X=0 +phy_rx_polarity_flip_fabric68.BCM8879X=0 +phy_rx_polarity_flip_fabric69.BCM8879X=1 +phy_rx_polarity_flip_fabric70.BCM8879X=0 +phy_rx_polarity_flip_fabric71.BCM8879X=1 -phy_rx_polarity_flip_fabric72.BCM8879X=0 -phy_rx_polarity_flip_fabric73.BCM8879X=1 -phy_rx_polarity_flip_fabric74.BCM8879X=0 -phy_rx_polarity_flip_fabric75.BCM8879X=1 +phy_rx_polarity_flip_fabric72.BCM8879X=1 +phy_rx_polarity_flip_fabric73.BCM8879X=0 +phy_rx_polarity_flip_fabric74.BCM8879X=1 +phy_rx_polarity_flip_fabric75.BCM8879X=0 -phy_rx_polarity_flip_fabric76.BCM8879X=0 -phy_rx_polarity_flip_fabric77.BCM8879X=1 +phy_rx_polarity_flip_fabric76.BCM8879X=1 +phy_rx_polarity_flip_fabric77.BCM8879X=0 phy_rx_polarity_flip_fabric78.BCM8879X=1 phy_rx_polarity_flip_fabric79.BCM8879X=0 phy_rx_polarity_flip_fabric80.BCM8879X=0 phy_rx_polarity_flip_fabric81.BCM8879X=1 -phy_rx_polarity_flip_fabric82.BCM8879X=1 -phy_rx_polarity_flip_fabric83.BCM8879X=0 +phy_rx_polarity_flip_fabric82.BCM8879X=0 +phy_rx_polarity_flip_fabric83.BCM8879X=1 phy_rx_polarity_flip_fabric84.BCM8879X=1 phy_rx_polarity_flip_fabric85.BCM8879X=0 phy_rx_polarity_flip_fabric86.BCM8879X=1 phy_rx_polarity_flip_fabric87.BCM8879X=0 -phy_rx_polarity_flip_fabric88.BCM8879X=1 -phy_rx_polarity_flip_fabric89.BCM8879X=0 -phy_rx_polarity_flip_fabric90.BCM8879X=1 -phy_rx_polarity_flip_fabric91.BCM8879X=0 +phy_rx_polarity_flip_fabric88.BCM8879X=0 +phy_rx_polarity_flip_fabric89.BCM8879X=1 +phy_rx_polarity_flip_fabric90.BCM8879X=0 +phy_rx_polarity_flip_fabric91.BCM8879X=1 -phy_rx_polarity_flip_fabric92.BCM8879X=0 -phy_rx_polarity_flip_fabric93.BCM8879X=1 -phy_rx_polarity_flip_fabric94.BCM8879X=0 -phy_rx_polarity_flip_fabric95.BCM8879X=1 +phy_rx_polarity_flip_fabric92.BCM8879X=1 +phy_rx_polarity_flip_fabric93.BCM8879X=0 +phy_rx_polarity_flip_fabric94.BCM8879X=1 +phy_rx_polarity_flip_fabric95.BCM8879X=0 -phy_rx_polarity_flip_fabric96.BCM8879X=0 -phy_rx_polarity_flip_fabric97.BCM8879X=1 -phy_rx_polarity_flip_fabric98.BCM8879X=0 -phy_rx_polarity_flip_fabric99.BCM8879X=1 +phy_rx_polarity_flip_fabric96.BCM8879X=1 +phy_rx_polarity_flip_fabric97.BCM8879X=0 +phy_rx_polarity_flip_fabric98.BCM8879X=1 +phy_rx_polarity_flip_fabric99.BCM8879X=0 phy_rx_polarity_flip_fabric100.BCM8879X=0 phy_rx_polarity_flip_fabric101.BCM8879X=1 @@ -418,10 +419,10 @@ phy_rx_polarity_flip_fabric105.BCM8879X=1 phy_rx_polarity_flip_fabric106.BCM8879X=0 phy_rx_polarity_flip_fabric107.BCM8879X=1 -phy_rx_polarity_flip_fabric108.BCM8879X=1 -phy_rx_polarity_flip_fabric109.BCM8879X=0 -phy_rx_polarity_flip_fabric110.BCM8879X=1 -phy_rx_polarity_flip_fabric111.BCM8879X=0 +phy_rx_polarity_flip_fabric108.BCM8879X=0 +phy_rx_polarity_flip_fabric109.BCM8879X=1 +phy_rx_polarity_flip_fabric110.BCM8879X=0 +phy_rx_polarity_flip_fabric111.BCM8879X=1 phy_rx_polarity_flip_fabric112.BCM8879X=0 phy_rx_polarity_flip_fabric113.BCM8879X=1 @@ -433,223 +434,223 @@ phy_rx_polarity_flip_fabric117.BCM8879X=0 phy_rx_polarity_flip_fabric118.BCM8879X=1 phy_rx_polarity_flip_fabric119.BCM8879X=0 -phy_rx_polarity_flip_fabric120.BCM8879X=0 -phy_rx_polarity_flip_fabric121.BCM8879X=1 -phy_rx_polarity_flip_fabric122.BCM8879X=0 -phy_rx_polarity_flip_fabric123.BCM8879X=1 +phy_rx_polarity_flip_fabric120.BCM8879X=1 +phy_rx_polarity_flip_fabric121.BCM8879X=0 +phy_rx_polarity_flip_fabric122.BCM8879X=1 +phy_rx_polarity_flip_fabric123.BCM8879X=0 phy_rx_polarity_flip_fabric124.BCM8879X=0 phy_rx_polarity_flip_fabric125.BCM8879X=1 phy_rx_polarity_flip_fabric126.BCM8879X=0 phy_rx_polarity_flip_fabric127.BCM8879X=1 -phy_rx_polarity_flip_fabric128.BCM8879X=0 -phy_rx_polarity_flip_fabric129.BCM8879X=1 -phy_rx_polarity_flip_fabric130.BCM8879X=0 -phy_rx_polarity_flip_fabric131.BCM8879X=1 +phy_rx_polarity_flip_fabric128.BCM8879X=1 +phy_rx_polarity_flip_fabric129.BCM8879X=0 +phy_rx_polarity_flip_fabric130.BCM8879X=1 +phy_rx_polarity_flip_fabric131.BCM8879X=0 -phy_rx_polarity_flip_fabric132.BCM8879X=1 -phy_rx_polarity_flip_fabric133.BCM8879X=0 -phy_rx_polarity_flip_fabric134.BCM8879X=1 -phy_rx_polarity_flip_fabric135.BCM8879X=0 +phy_rx_polarity_flip_fabric132.BCM8879X=0 +phy_rx_polarity_flip_fabric133.BCM8879X=1 +phy_rx_polarity_flip_fabric134.BCM8879X=0 +phy_rx_polarity_flip_fabric135.BCM8879X=1 phy_rx_polarity_flip_fabric136.BCM8879X=1 phy_rx_polarity_flip_fabric137.BCM8879X=0 phy_rx_polarity_flip_fabric138.BCM8879X=1 phy_rx_polarity_flip_fabric139.BCM8879X=0 -phy_rx_polarity_flip_fabric140.BCM8879X=0 -phy_rx_polarity_flip_fabric141.BCM8879X=1 -phy_rx_polarity_flip_fabric142.BCM8879X=0 -phy_rx_polarity_flip_fabric143.BCM8879X=1 +phy_rx_polarity_flip_fabric140.BCM8879X=1 +phy_rx_polarity_flip_fabric141.BCM8879X=0 +phy_rx_polarity_flip_fabric142.BCM8879X=1 +phy_rx_polarity_flip_fabric143.BCM8879X=0 -phy_rx_polarity_flip_fabric144.BCM8879X=0 -phy_rx_polarity_flip_fabric145.BCM8879X=1 -phy_rx_polarity_flip_fabric146.BCM8879X=0 -phy_rx_polarity_flip_fabric147.BCM8879X=1 +phy_rx_polarity_flip_fabric144.BCM8879X=1 +phy_rx_polarity_flip_fabric145.BCM8879X=0 +phy_rx_polarity_flip_fabric146.BCM8879X=1 +phy_rx_polarity_flip_fabric147.BCM8879X=0 phy_rx_polarity_flip_fabric148.BCM8879X=1 phy_rx_polarity_flip_fabric149.BCM8879X=0 phy_rx_polarity_flip_fabric150.BCM8879X=1 phy_rx_polarity_flip_fabric151.BCM8879X=0 -phy_rx_polarity_flip_fabric152.BCM8879X=1 -phy_rx_polarity_flip_fabric153.BCM8879X=0 -phy_rx_polarity_flip_fabric154.BCM8879X=1 -phy_rx_polarity_flip_fabric155.BCM8879X=0 +phy_rx_polarity_flip_fabric152.BCM8879X=0 +phy_rx_polarity_flip_fabric153.BCM8879X=1 +phy_rx_polarity_flip_fabric154.BCM8879X=0 +phy_rx_polarity_flip_fabric155.BCM8879X=1 -phy_rx_polarity_flip_fabric156.BCM8879X=0 -phy_rx_polarity_flip_fabric157.BCM8879X=1 -phy_rx_polarity_flip_fabric158.BCM8879X=0 -phy_rx_polarity_flip_fabric159.BCM8879X=1 +phy_rx_polarity_flip_fabric156.BCM8879X=1 +phy_rx_polarity_flip_fabric157.BCM8879X=0 +phy_rx_polarity_flip_fabric158.BCM8879X=1 +phy_rx_polarity_flip_fabric159.BCM8879X=0 -phy_rx_polarity_flip_fabric160.BCM8879X=0 -phy_rx_polarity_flip_fabric161.BCM8879X=1 -phy_rx_polarity_flip_fabric162.BCM8879X=0 -phy_rx_polarity_flip_fabric163.BCM8879X=1 +phy_rx_polarity_flip_fabric160.BCM8879X=1 +phy_rx_polarity_flip_fabric161.BCM8879X=0 +phy_rx_polarity_flip_fabric162.BCM8879X=1 +phy_rx_polarity_flip_fabric163.BCM8879X=0 phy_rx_polarity_flip_fabric164.BCM8879X=0 phy_rx_polarity_flip_fabric165.BCM8879X=1 phy_rx_polarity_flip_fabric166.BCM8879X=0 phy_rx_polarity_flip_fabric167.BCM8879X=1 -phy_rx_polarity_flip_fabric168.BCM8879X=0 -phy_rx_polarity_flip_fabric169.BCM8879X=1 -phy_rx_polarity_flip_fabric170.BCM8879X=0 -phy_rx_polarity_flip_fabric171.BCM8879X=1 +phy_rx_polarity_flip_fabric168.BCM8879X=1 +phy_rx_polarity_flip_fabric169.BCM8879X=0 +phy_rx_polarity_flip_fabric170.BCM8879X=1 +phy_rx_polarity_flip_fabric171.BCM8879X=0 phy_rx_polarity_flip_fabric172.BCM8879X=1 phy_rx_polarity_flip_fabric173.BCM8879X=0 phy_rx_polarity_flip_fabric174.BCM8879X=1 phy_rx_polarity_flip_fabric175.BCM8879X=0 -phy_rx_polarity_flip_fabric176.BCM8879X=1 -phy_rx_polarity_flip_fabric177.BCM8879X=0 -phy_rx_polarity_flip_fabric178.BCM8879X=1 -phy_rx_polarity_flip_fabric179.BCM8879X=0 +phy_rx_polarity_flip_fabric176.BCM8879X=0 +phy_rx_polarity_flip_fabric177.BCM8879X=1 +phy_rx_polarity_flip_fabric178.BCM8879X=0 +phy_rx_polarity_flip_fabric179.BCM8879X=1 -phy_rx_polarity_flip_fabric180.BCM8879X=0 -phy_rx_polarity_flip_fabric181.BCM8879X=1 -phy_rx_polarity_flip_fabric182.BCM8879X=0 -phy_rx_polarity_flip_fabric183.BCM8879X=1 +phy_rx_polarity_flip_fabric180.BCM8879X=1 +phy_rx_polarity_flip_fabric181.BCM8879X=0 +phy_rx_polarity_flip_fabric182.BCM8879X=1 +phy_rx_polarity_flip_fabric183.BCM8879X=0 phy_rx_polarity_flip_fabric184.BCM8879X=0 phy_rx_polarity_flip_fabric185.BCM8879X=1 phy_rx_polarity_flip_fabric186.BCM8879X=0 phy_rx_polarity_flip_fabric187.BCM8879X=1 -phy_rx_polarity_flip_fabric188.BCM8879X=0 -phy_rx_polarity_flip_fabric189.BCM8879X=1 -phy_rx_polarity_flip_fabric190.BCM8879X=0 -phy_rx_polarity_flip_fabric191.BCM8879X=1 +phy_rx_polarity_flip_fabric188.BCM8879X=1 +phy_rx_polarity_flip_fabric189.BCM8879X=0 +phy_rx_polarity_flip_fabric190.BCM8879X=1 +phy_rx_polarity_flip_fabric191.BCM8879X=0 phy_tx_polarity_flip_fabric0.BCM8879X=0 -phy_tx_polarity_flip_fabric1.BCM8879X=0 -phy_tx_polarity_flip_fabric2.BCM8879X=1 +phy_tx_polarity_flip_fabric1.BCM8879X=1 +phy_tx_polarity_flip_fabric2.BCM8879X=0 phy_tx_polarity_flip_fabric3.BCM8879X=1 -phy_tx_polarity_flip_fabric4.BCM8879X=0 -phy_tx_polarity_flip_fabric5.BCM8879X=1 +phy_tx_polarity_flip_fabric4.BCM8879X=1 +phy_tx_polarity_flip_fabric5.BCM8879X=0 phy_tx_polarity_flip_fabric6.BCM8879X=1 phy_tx_polarity_flip_fabric7.BCM8879X=0 phy_tx_polarity_flip_fabric8.BCM8879X=0 -phy_tx_polarity_flip_fabric9.BCM8879X=0 -phy_tx_polarity_flip_fabric10.BCM8879X=1 +phy_tx_polarity_flip_fabric9.BCM8879X=1 +phy_tx_polarity_flip_fabric10.BCM8879X=0 phy_tx_polarity_flip_fabric11.BCM8879X=1 -phy_tx_polarity_flip_fabric12.BCM8879X=0 -phy_tx_polarity_flip_fabric13.BCM8879X=1 +phy_tx_polarity_flip_fabric12.BCM8879X=1 +phy_tx_polarity_flip_fabric13.BCM8879X=0 phy_tx_polarity_flip_fabric14.BCM8879X=1 -phy_tx_polarity_flip_fabric15.BCM8879X=1 +phy_tx_polarity_flip_fabric15.BCM8879X=0 -phy_tx_polarity_flip_fabric16.BCM8879X=1 +phy_tx_polarity_flip_fabric16.BCM8879X=0 phy_tx_polarity_flip_fabric17.BCM8879X=1 -phy_tx_polarity_flip_fabric18.BCM8879X=1 -phy_tx_polarity_flip_fabric19.BCM8879X=0 +phy_tx_polarity_flip_fabric18.BCM8879X=0 +phy_tx_polarity_flip_fabric19.BCM8879X=1 -phy_tx_polarity_flip_fabric20.BCM8879X=1 +phy_tx_polarity_flip_fabric20.BCM8879X=0 phy_tx_polarity_flip_fabric21.BCM8879X=1 -phy_tx_polarity_flip_fabric22.BCM8879X=1 -phy_tx_polarity_flip_fabric23.BCM8879X=0 +phy_tx_polarity_flip_fabric22.BCM8879X=0 +phy_tx_polarity_flip_fabric23.BCM8879X=1 -phy_tx_polarity_flip_fabric24.BCM8879X=1 +phy_tx_polarity_flip_fabric24.BCM8879X=0 phy_tx_polarity_flip_fabric25.BCM8879X=1 phy_tx_polarity_flip_fabric26.BCM8879X=0 -phy_tx_polarity_flip_fabric27.BCM8879X=0 +phy_tx_polarity_flip_fabric27.BCM8879X=1 phy_tx_polarity_flip_fabric28.BCM8879X=1 phy_tx_polarity_flip_fabric29.BCM8879X=0 -phy_tx_polarity_flip_fabric30.BCM8879X=0 -phy_tx_polarity_flip_fabric31.BCM8879X=1 +phy_tx_polarity_flip_fabric30.BCM8879X=1 +phy_tx_polarity_flip_fabric31.BCM8879X=0 phy_tx_polarity_flip_fabric32.BCM8879X=0 -phy_tx_polarity_flip_fabric33.BCM8879X=0 -phy_tx_polarity_flip_fabric34.BCM8879X=1 +phy_tx_polarity_flip_fabric33.BCM8879X=1 +phy_tx_polarity_flip_fabric34.BCM8879X=0 phy_tx_polarity_flip_fabric35.BCM8879X=1 phy_tx_polarity_flip_fabric36.BCM8879X=1 -phy_tx_polarity_flip_fabric37.BCM8879X=1 +phy_tx_polarity_flip_fabric37.BCM8879X=0 phy_tx_polarity_flip_fabric38.BCM8879X=1 phy_tx_polarity_flip_fabric39.BCM8879X=0 phy_tx_polarity_flip_fabric40.BCM8879X=0 phy_tx_polarity_flip_fabric41.BCM8879X=1 phy_tx_polarity_flip_fabric42.BCM8879X=0 -phy_tx_polarity_flip_fabric43.BCM8879X=0 +phy_tx_polarity_flip_fabric43.BCM8879X=1 -phy_tx_polarity_flip_fabric44.BCM8879X=1 +phy_tx_polarity_flip_fabric44.BCM8879X=0 phy_tx_polarity_flip_fabric45.BCM8879X=1 phy_tx_polarity_flip_fabric46.BCM8879X=0 phy_tx_polarity_flip_fabric47.BCM8879X=1 -phy_tx_polarity_flip_fabric48.BCM8879X=0 -phy_tx_polarity_flip_fabric49.BCM8879X=1 +phy_tx_polarity_flip_fabric48.BCM8879X=1 +phy_tx_polarity_flip_fabric49.BCM8879X=0 phy_tx_polarity_flip_fabric50.BCM8879X=1 -phy_tx_polarity_flip_fabric51.BCM8879X=1 +phy_tx_polarity_flip_fabric51.BCM8879X=0 -phy_tx_polarity_flip_fabric52.BCM8879X=1 +phy_tx_polarity_flip_fabric52.BCM8879X=0 phy_tx_polarity_flip_fabric53.BCM8879X=1 phy_tx_polarity_flip_fabric54.BCM8879X=0 phy_tx_polarity_flip_fabric55.BCM8879X=1 -phy_tx_polarity_flip_fabric56.BCM8879X=0 +phy_tx_polarity_flip_fabric56.BCM8879X=1 phy_tx_polarity_flip_fabric57.BCM8879X=0 -phy_tx_polarity_flip_fabric58.BCM8879X=0 -phy_tx_polarity_flip_fabric59.BCM8879X=1 +phy_tx_polarity_flip_fabric58.BCM8879X=1 +phy_tx_polarity_flip_fabric59.BCM8879X=0 phy_tx_polarity_flip_fabric60.BCM8879X=1 phy_tx_polarity_flip_fabric61.BCM8879X=0 -phy_tx_polarity_flip_fabric62.BCM8879X=0 -phy_tx_polarity_flip_fabric63.BCM8879X=1 +phy_tx_polarity_flip_fabric62.BCM8879X=1 +phy_tx_polarity_flip_fabric63.BCM8879X=0 -phy_tx_polarity_flip_fabric64.BCM8879X=1 +phy_tx_polarity_flip_fabric64.BCM8879X=0 phy_tx_polarity_flip_fabric65.BCM8879X=1 phy_tx_polarity_flip_fabric66.BCM8879X=0 -phy_tx_polarity_flip_fabric67.BCM8879X=0 +phy_tx_polarity_flip_fabric67.BCM8879X=1 phy_tx_polarity_flip_fabric68.BCM8879X=1 phy_tx_polarity_flip_fabric69.BCM8879X=0 phy_tx_polarity_flip_fabric70.BCM8879X=1 phy_tx_polarity_flip_fabric71.BCM8879X=0 -phy_tx_polarity_flip_fabric72.BCM8879X=1 +phy_tx_polarity_flip_fabric72.BCM8879X=0 phy_tx_polarity_flip_fabric73.BCM8879X=1 -phy_tx_polarity_flip_fabric74.BCM8879X=1 -phy_tx_polarity_flip_fabric75.BCM8879X=0 +phy_tx_polarity_flip_fabric74.BCM8879X=0 +phy_tx_polarity_flip_fabric75.BCM8879X=1 -phy_tx_polarity_flip_fabric76.BCM8879X=1 +phy_tx_polarity_flip_fabric76.BCM8879X=0 phy_tx_polarity_flip_fabric77.BCM8879X=1 phy_tx_polarity_flip_fabric78.BCM8879X=0 phy_tx_polarity_flip_fabric79.BCM8879X=1 phy_tx_polarity_flip_fabric80.BCM8879X=1 -phy_tx_polarity_flip_fabric81.BCM8879X=1 -phy_tx_polarity_flip_fabric82.BCM8879X=0 -phy_tx_polarity_flip_fabric83.BCM8879X=1 +phy_tx_polarity_flip_fabric81.BCM8879X=0 +phy_tx_polarity_flip_fabric82.BCM8879X=1 +phy_tx_polarity_flip_fabric83.BCM8879X=0 -phy_tx_polarity_flip_fabric84.BCM8879X=1 -phy_tx_polarity_flip_fabric85.BCM8879X=0 -phy_tx_polarity_flip_fabric86.BCM8879X=1 -phy_tx_polarity_flip_fabric87.BCM8879X=0 +phy_tx_polarity_flip_fabric84.BCM8879X=0 +phy_tx_polarity_flip_fabric85.BCM8879X=1 +phy_tx_polarity_flip_fabric86.BCM8879X=0 +phy_tx_polarity_flip_fabric87.BCM8879X=1 -phy_tx_polarity_flip_fabric88.BCM8879X=0 +phy_tx_polarity_flip_fabric88.BCM8879X=1 phy_tx_polarity_flip_fabric89.BCM8879X=0 phy_tx_polarity_flip_fabric90.BCM8879X=1 -phy_tx_polarity_flip_fabric91.BCM8879X=1 +phy_tx_polarity_flip_fabric91.BCM8879X=0 phy_tx_polarity_flip_fabric92.BCM8879X=0 phy_tx_polarity_flip_fabric93.BCM8879X=1 -phy_tx_polarity_flip_fabric94.BCM8879X=1 -phy_tx_polarity_flip_fabric95.BCM8879X=0 +phy_tx_polarity_flip_fabric94.BCM8879X=0 +phy_tx_polarity_flip_fabric95.BCM8879X=1 -phy_tx_polarity_flip_fabric96.BCM8879X=1 +phy_tx_polarity_flip_fabric96.BCM8879X=0 phy_tx_polarity_flip_fabric97.BCM8879X=1 phy_tx_polarity_flip_fabric98.BCM8879X=0 -phy_tx_polarity_flip_fabric99.BCM8879X=0 +phy_tx_polarity_flip_fabric99.BCM8879X=1 -phy_tx_polarity_flip_fabric100.BCM8879X=0 -phy_tx_polarity_flip_fabric101.BCM8879X=1 +phy_tx_polarity_flip_fabric100.BCM8879X=1 +phy_tx_polarity_flip_fabric101.BCM8879X=0 phy_tx_polarity_flip_fabric102.BCM8879X=1 phy_tx_polarity_flip_fabric103.BCM8879X=0 @@ -658,28 +659,28 @@ phy_tx_polarity_flip_fabric105.BCM8879X=0 phy_tx_polarity_flip_fabric106.BCM8879X=1 phy_tx_polarity_flip_fabric107.BCM8879X=0 -phy_tx_polarity_flip_fabric108.BCM8879X=0 -phy_tx_polarity_flip_fabric109.BCM8879X=1 -phy_tx_polarity_flip_fabric110.BCM8879X=0 -phy_tx_polarity_flip_fabric111.BCM8879X=1 +phy_tx_polarity_flip_fabric108.BCM8879X=1 +phy_tx_polarity_flip_fabric109.BCM8879X=0 +phy_tx_polarity_flip_fabric110.BCM8879X=1 +phy_tx_polarity_flip_fabric111.BCM8879X=0 -phy_tx_polarity_flip_fabric112.BCM8879X=0 -phy_tx_polarity_flip_fabric113.BCM8879X=1 -phy_tx_polarity_flip_fabric114.BCM8879X=0 -phy_tx_polarity_flip_fabric115.BCM8879X=1 +phy_tx_polarity_flip_fabric112.BCM8879X=1 +phy_tx_polarity_flip_fabric113.BCM8879X=0 +phy_tx_polarity_flip_fabric114.BCM8879X=1 +phy_tx_polarity_flip_fabric115.BCM8879X=0 phy_tx_polarity_flip_fabric116.BCM8879X=0 phy_tx_polarity_flip_fabric117.BCM8879X=1 phy_tx_polarity_flip_fabric118.BCM8879X=0 phy_tx_polarity_flip_fabric119.BCM8879X=1 -phy_tx_polarity_flip_fabric120.BCM8879X=1 -phy_tx_polarity_flip_fabric121.BCM8879X=0 -phy_tx_polarity_flip_fabric122.BCM8879X=1 -phy_tx_polarity_flip_fabric123.BCM8879X=0 +phy_tx_polarity_flip_fabric120.BCM8879X=0 +phy_tx_polarity_flip_fabric121.BCM8879X=1 +phy_tx_polarity_flip_fabric122.BCM8879X=0 +phy_tx_polarity_flip_fabric123.BCM8879X=1 -phy_tx_polarity_flip_fabric124.BCM8879X=0 -phy_tx_polarity_flip_fabric125.BCM8879X=1 +phy_tx_polarity_flip_fabric124.BCM8879X=1 +phy_tx_polarity_flip_fabric125.BCM8879X=0 phy_tx_polarity_flip_fabric126.BCM8879X=1 phy_tx_polarity_flip_fabric127.BCM8879X=0 @@ -688,14 +689,14 @@ phy_tx_polarity_flip_fabric129.BCM8879X=1 phy_tx_polarity_flip_fabric130.BCM8879X=0 phy_tx_polarity_flip_fabric131.BCM8879X=1 -phy_tx_polarity_flip_fabric132.BCM8879X=0 -phy_tx_polarity_flip_fabric133.BCM8879X=1 -phy_tx_polarity_flip_fabric134.BCM8879X=0 -phy_tx_polarity_flip_fabric135.BCM8879X=1 +phy_tx_polarity_flip_fabric132.BCM8879X=1 +phy_tx_polarity_flip_fabric133.BCM8879X=0 +phy_tx_polarity_flip_fabric134.BCM8879X=1 +phy_tx_polarity_flip_fabric135.BCM8879X=0 phy_tx_polarity_flip_fabric136.BCM8879X=0 -phy_tx_polarity_flip_fabric137.BCM8879X=0 -phy_tx_polarity_flip_fabric138.BCM8879X=1 +phy_tx_polarity_flip_fabric137.BCM8879X=1 +phy_tx_polarity_flip_fabric138.BCM8879X=0 phy_tx_polarity_flip_fabric139.BCM8879X=1 phy_tx_polarity_flip_fabric140.BCM8879X=0 @@ -704,8 +705,8 @@ phy_tx_polarity_flip_fabric142.BCM8879X=0 phy_tx_polarity_flip_fabric143.BCM8879X=1 phy_tx_polarity_flip_fabric144.BCM8879X=0 -phy_tx_polarity_flip_fabric145.BCM8879X=0 -phy_tx_polarity_flip_fabric146.BCM8879X=1 +phy_tx_polarity_flip_fabric145.BCM8879X=1 +phy_tx_polarity_flip_fabric146.BCM8879X=0 phy_tx_polarity_flip_fabric147.BCM8879X=1 phy_tx_polarity_flip_fabric148.BCM8879X=0 @@ -713,56 +714,441 @@ phy_tx_polarity_flip_fabric149.BCM8879X=1 phy_tx_polarity_flip_fabric150.BCM8879X=0 phy_tx_polarity_flip_fabric151.BCM8879X=1 -phy_tx_polarity_flip_fabric152.BCM8879X=0 -phy_tx_polarity_flip_fabric153.BCM8879X=1 -phy_tx_polarity_flip_fabric154.BCM8879X=0 -phy_tx_polarity_flip_fabric155.BCM8879X=1 +phy_tx_polarity_flip_fabric152.BCM8879X=1 +phy_tx_polarity_flip_fabric153.BCM8879X=0 +phy_tx_polarity_flip_fabric154.BCM8879X=1 +phy_tx_polarity_flip_fabric155.BCM8879X=0 phy_tx_polarity_flip_fabric156.BCM8879X=0 -phy_tx_polarity_flip_fabric157.BCM8879X=0 -phy_tx_polarity_flip_fabric158.BCM8879X=1 +phy_tx_polarity_flip_fabric157.BCM8879X=1 +phy_tx_polarity_flip_fabric158.BCM8879X=0 phy_tx_polarity_flip_fabric159.BCM8879X=1 -phy_tx_polarity_flip_fabric160.BCM8879X=1 +phy_tx_polarity_flip_fabric160.BCM8879X=0 phy_tx_polarity_flip_fabric161.BCM8879X=1 phy_tx_polarity_flip_fabric162.BCM8879X=0 -phy_tx_polarity_flip_fabric163.BCM8879X=0 +phy_tx_polarity_flip_fabric163.BCM8879X=1 phy_tx_polarity_flip_fabric164.BCM8879X=1 -phy_tx_polarity_flip_fabric165.BCM8879X=1 -phy_tx_polarity_flip_fabric166.BCM8879X=0 +phy_tx_polarity_flip_fabric165.BCM8879X=0 +phy_tx_polarity_flip_fabric166.BCM8879X=1 phy_tx_polarity_flip_fabric167.BCM8879X=0 -phy_tx_polarity_flip_fabric168.BCM8879X=1 +phy_tx_polarity_flip_fabric168.BCM8879X=0 phy_tx_polarity_flip_fabric169.BCM8879X=1 phy_tx_polarity_flip_fabric170.BCM8879X=0 -phy_tx_polarity_flip_fabric171.BCM8879X=0 +phy_tx_polarity_flip_fabric171.BCM8879X=1 -phy_tx_polarity_flip_fabric172.BCM8879X=1 -phy_tx_polarity_flip_fabric173.BCM8879X=0 -phy_tx_polarity_flip_fabric174.BCM8879X=1 -phy_tx_polarity_flip_fabric175.BCM8879X=0 +phy_tx_polarity_flip_fabric172.BCM8879X=0 +phy_tx_polarity_flip_fabric173.BCM8879X=1 +phy_tx_polarity_flip_fabric174.BCM8879X=0 +phy_tx_polarity_flip_fabric175.BCM8879X=1 -phy_tx_polarity_flip_fabric176.BCM8879X=0 +phy_tx_polarity_flip_fabric176.BCM8879X=1 phy_tx_polarity_flip_fabric177.BCM8879X=0 phy_tx_polarity_flip_fabric178.BCM8879X=1 -phy_tx_polarity_flip_fabric179.BCM8879X=1 +phy_tx_polarity_flip_fabric179.BCM8879X=0 -phy_tx_polarity_flip_fabric180.BCM8879X=1 +phy_tx_polarity_flip_fabric180.BCM8879X=0 phy_tx_polarity_flip_fabric181.BCM8879X=1 phy_tx_polarity_flip_fabric182.BCM8879X=0 -phy_tx_polarity_flip_fabric183.BCM8879X=0 +phy_tx_polarity_flip_fabric183.BCM8879X=1 -phy_tx_polarity_flip_fabric184.BCM8879X=0 -phy_tx_polarity_flip_fabric185.BCM8879X=1 +phy_tx_polarity_flip_fabric184.BCM8879X=1 +phy_tx_polarity_flip_fabric185.BCM8879X=0 phy_tx_polarity_flip_fabric186.BCM8879X=1 phy_tx_polarity_flip_fabric187.BCM8879X=0 -phy_tx_polarity_flip_fabric188.BCM8879X=1 -phy_tx_polarity_flip_fabric189.BCM8879X=0 +phy_tx_polarity_flip_fabric188.BCM8879X=0 +phy_tx_polarity_flip_fabric189.BCM8879X=1 phy_tx_polarity_flip_fabric190.BCM8879X=0 phy_tx_polarity_flip_fabric191.BCM8879X=1 +port_init_cl72_0=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 +port_init_cl72_19=0 +port_init_cl72_20=0 +port_init_cl72_21=0 +port_init_cl72_22=0 +port_init_cl72_23=0 +port_init_cl72_24=0 +port_init_cl72_25=0 +port_init_cl72_26=0 +port_init_cl72_27=0 +port_init_cl72_28=0 +port_init_cl72_29=0 +port_init_cl72_30=0 +port_init_cl72_31=0 +port_init_cl72_32=0 +port_init_cl72_33=0 +port_init_cl72_34=0 +port_init_cl72_35=0 +port_init_cl72_36=0 +port_init_cl72_37=0 +port_init_cl72_38=0 +port_init_cl72_39=0 +port_init_cl72_40=0 +port_init_cl72_41=0 +port_init_cl72_42=0 +port_init_cl72_43=0 +port_init_cl72_44=0 +port_init_cl72_45=0 +port_init_cl72_46=0 +port_init_cl72_47=0 +port_init_cl72_48=0 +port_init_cl72_49=0 +port_init_cl72_50=0 +port_init_cl72_51=0 +port_init_cl72_52=0 +port_init_cl72_53=0 +port_init_cl72_54=0 +port_init_cl72_55=0 +port_init_cl72_56=0 +port_init_cl72_57=0 +port_init_cl72_58=0 +port_init_cl72_59=0 +port_init_cl72_60=0 +port_init_cl72_61=0 +port_init_cl72_62=0 +port_init_cl72_63=0 +port_init_cl72_64=0 +port_init_cl72_65=0 +port_init_cl72_66=0 +port_init_cl72_67=0 +port_init_cl72_68=0 +port_init_cl72_69=0 +port_init_cl72_70=0 +port_init_cl72_71=0 +port_init_cl72_72=0 +port_init_cl72_73=0 +port_init_cl72_74=0 +port_init_cl72_75=0 +port_init_cl72_76=0 +port_init_cl72_77=0 +port_init_cl72_78=0 +port_init_cl72_79=0 +port_init_cl72_80=0 +port_init_cl72_81=0 +port_init_cl72_82=0 +port_init_cl72_83=0 +port_init_cl72_84=0 +port_init_cl72_85=0 +port_init_cl72_86=0 +port_init_cl72_87=0 +port_init_cl72_88=0 +port_init_cl72_89=0 +port_init_cl72_90=0 +port_init_cl72_91=0 +port_init_cl72_92=0 +port_init_cl72_93=0 +port_init_cl72_94=0 +port_init_cl72_95=0 +port_init_cl72_96=0 +port_init_cl72_97=0 +port_init_cl72_98=0 +port_init_cl72_99=0 +port_init_cl72_100=0 +port_init_cl72_101=0 +port_init_cl72_102=0 +port_init_cl72_103=0 +port_init_cl72_104=0 +port_init_cl72_105=0 +port_init_cl72_106=0 +port_init_cl72_107=0 +port_init_cl72_108=0 +port_init_cl72_109=0 +port_init_cl72_110=0 +port_init_cl72_111=0 +port_init_cl72_112=0 +port_init_cl72_113=0 +port_init_cl72_114=0 +port_init_cl72_115=0 +port_init_cl72_116=0 +port_init_cl72_117=0 +port_init_cl72_118=0 +port_init_cl72_119=0 +port_init_cl72_120=0 +port_init_cl72_121=0 +port_init_cl72_122=0 +port_init_cl72_123=0 +port_init_cl72_124=0 +port_init_cl72_125=0 +port_init_cl72_126=0 +port_init_cl72_127=0 +port_init_cl72_128=0 +port_init_cl72_129=0 +port_init_cl72_130=0 +port_init_cl72_131=0 +port_init_cl72_132=0 +port_init_cl72_133=0 +port_init_cl72_134=0 +port_init_cl72_135=0 +port_init_cl72_136=0 +port_init_cl72_137=0 +port_init_cl72_138=0 +port_init_cl72_139=0 +port_init_cl72_140=0 +port_init_cl72_141=0 +port_init_cl72_142=0 +port_init_cl72_143=0 +port_init_cl72_144=0 +port_init_cl72_145=0 +port_init_cl72_146=0 +port_init_cl72_147=0 +port_init_cl72_148=0 +port_init_cl72_149=0 +port_init_cl72_150=0 +port_init_cl72_151=0 +port_init_cl72_152=0 +port_init_cl72_153=0 +port_init_cl72_154=0 +port_init_cl72_155=0 +port_init_cl72_156=0 +port_init_cl72_157=0 +port_init_cl72_158=0 +port_init_cl72_159=0 +port_init_cl72_160=0 +port_init_cl72_161=0 +port_init_cl72_162=0 +port_init_cl72_163=0 +port_init_cl72_164=0 +port_init_cl72_165=0 +port_init_cl72_166=0 +port_init_cl72_167=0 +port_init_cl72_168=0 +port_init_cl72_169=0 +port_init_cl72_170=0 +port_init_cl72_171=0 +port_init_cl72_172=0 +port_init_cl72_173=0 +port_init_cl72_174=0 +port_init_cl72_175=0 +port_init_cl72_176=0 +port_init_cl72_177=0 +port_init_cl72_178=0 +port_init_cl72_179=0 +port_init_cl72_180=0 +port_init_cl72_181=0 +port_init_cl72_182=0 +port_init_cl72_183=0 +port_init_cl72_184=0 +port_init_cl72_185=0 +port_init_cl72_186=0 +port_init_cl72_187=0 +port_init_cl72_188=0 +port_init_cl72_189=0 +port_init_cl72_190=0 +port_init_cl72_191=0 + +serdes_tx_taps_0.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_1.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_2.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_3.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_4.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_5.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_6.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_7.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_8.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_9.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_10.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_11.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_12.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_13.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_14.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_15.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_16.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_17.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_18.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_19.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_20.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_21.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_22.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_23.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_24.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_25.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_26.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_27.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_28.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_29.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_30.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_31.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_32.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_33.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_34.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_35.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_36.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_37.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_38.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_39.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_40.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_41.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_42.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_43.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_44.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_45.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_46.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_47.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_48.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_49.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_50.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_51.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_52.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_53.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_54.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_55.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_56.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_57.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_58.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_59.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_60.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_61.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_62.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_63.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_64.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_65.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_66.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_67.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_68.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_69.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_70.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_71.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_72.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_73.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_74.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_75.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_76.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_77.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_78.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_79.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_80.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_81.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_82.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_83.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_84.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_85.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_86.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_87.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_88.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_89.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_90.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_91.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_92.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_93.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_94.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_95.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_96.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_97.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_98.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_99.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_100.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_101.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_102.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_103.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_104.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_105.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_106.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_107.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_108.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_109.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_110.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_111.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_112.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_113.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_114.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_115.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_116.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_117.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_118.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_119.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_120.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_121.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_122.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_123.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_124.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_125.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_126.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_127.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_128.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_129.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_130.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_131.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_132.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_133.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_134.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_135.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_136.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_137.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_138.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_139.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_140.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_141.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_142.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_143.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_144.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_145.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_146.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_147.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_148.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_149.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_150.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_151.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_152.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_153.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_154.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_155.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_156.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_157.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_158.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_159.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_160.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_161.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_162.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_163.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_164.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_165.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_166.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_167.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_168.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_169.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_170.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_171.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_172.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_173.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_174.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_175.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_176.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_177.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_178.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_179.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_180.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_181.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_182.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_183.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_184.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_185.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_186.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_187.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_188.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_189.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_190.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_191.BCM8879X=pam4:-24:132:-12:0:0:0 serdes_lane_config_channel_mode_0.0=force_nr serdes_lane_config_channel_mode_1.0=force_nr diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/9/config-ramon-5-1.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/9/config-ramon-5-1.bcm index dd1a016d4540..31834cddc4bb 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/9/config-ramon-5-1.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/9/config-ramon-5-1.bcm @@ -1,7 +1,8 @@ + appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=10 bcm_linkscan_interval.BCM8879X=0 -bcm_stat_interval.BCM8879X=0 +bcm_stat_interval.BCM8879X=4000000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 @@ -20,10 +21,10 @@ mdio_output_delay_int.BCM8879X=25 mem_cache_enable_parity.BCM8879X=1 mm_intr_enable.BCM8879X=0 mm_timeout_usec.BCM8879X=300000 -polled_irq_delay.BCM8879X=500000 +polled_irq_delay.BCM8879X=100000 polled_irq_mode.BCM8879X=1 port_fec.BCM8879X=7 -port_init_cl72.BCM8879X=1 +port_init_cl72.BCM8879X=0 port_init_speed.BCM8879X=53125 rate_ext_mdio_divisor.BCM8879X=14 rate_int_mdio_divisor.BCM8879X=50 @@ -42,134 +43,134 @@ tslam_dma_enable.BCM8879X=0 tslam_intr_enable.BCM8879X=0 tslam_timeout_usec.BCM8879X=5000000 -lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx1 -lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx3 +lane_to_serdes_map_fabric_lane0.BCM8879X=rx0:tx0 +lane_to_serdes_map_fabric_lane1.BCM8879X=rx1:tx1 lane_to_serdes_map_fabric_lane2.BCM8879X=rx2:tx2 -lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx0 +lane_to_serdes_map_fabric_lane3.BCM8879X=rx3:tx3 -lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx5 -lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx6 -lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx7 -lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx4 +lane_to_serdes_map_fabric_lane4.BCM8879X=rx4:tx4 +lane_to_serdes_map_fabric_lane5.BCM8879X=rx5:tx5 +lane_to_serdes_map_fabric_lane6.BCM8879X=rx6:tx6 +lane_to_serdes_map_fabric_lane7.BCM8879X=rx7:tx7 -lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx10 -lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx8 -lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx11 -lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx9 +lane_to_serdes_map_fabric_lane8.BCM8879X=rx8:tx8 +lane_to_serdes_map_fabric_lane9.BCM8879X=rx9:tx9 +lane_to_serdes_map_fabric_lane10.BCM8879X=rx10:tx10 +lane_to_serdes_map_fabric_lane11.BCM8879X=rx11:tx11 -lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx13 -lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx15 +lane_to_serdes_map_fabric_lane12.BCM8879X=rx12:tx12 +lane_to_serdes_map_fabric_lane13.BCM8879X=rx13:tx13 lane_to_serdes_map_fabric_lane14.BCM8879X=rx14:tx14 -lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx12 +lane_to_serdes_map_fabric_lane15.BCM8879X=rx15:tx15 -lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx18 -lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx16 -lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx17 +lane_to_serdes_map_fabric_lane16.BCM8879X=rx16:tx16 +lane_to_serdes_map_fabric_lane17.BCM8879X=rx17:tx17 +lane_to_serdes_map_fabric_lane18.BCM8879X=rx18:tx18 lane_to_serdes_map_fabric_lane19.BCM8879X=rx19:tx19 lane_to_serdes_map_fabric_lane20.BCM8879X=rx20:tx20 -lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx22 -lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx23 -lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx21 +lane_to_serdes_map_fabric_lane21.BCM8879X=rx21:tx21 +lane_to_serdes_map_fabric_lane22.BCM8879X=rx22:tx22 +lane_to_serdes_map_fabric_lane23.BCM8879X=rx23:tx23 lane_to_serdes_map_fabric_lane24.BCM8879X=rx24:tx24 -lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx26 -lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx27 -lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx25 +lane_to_serdes_map_fabric_lane25.BCM8879X=rx25:tx25 +lane_to_serdes_map_fabric_lane26.BCM8879X=rx26:tx26 +lane_to_serdes_map_fabric_lane27.BCM8879X=rx27:tx27 -lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx29 -lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx30 -lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx28 +lane_to_serdes_map_fabric_lane28.BCM8879X=rx28:tx28 +lane_to_serdes_map_fabric_lane29.BCM8879X=rx29:tx29 +lane_to_serdes_map_fabric_lane30.BCM8879X=rx30:tx30 lane_to_serdes_map_fabric_lane31.BCM8879X=rx31:tx31 -lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx34 -lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx32 -lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx35 -lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx33 +lane_to_serdes_map_fabric_lane32.BCM8879X=rx32:tx32 +lane_to_serdes_map_fabric_lane33.BCM8879X=rx33:tx33 +lane_to_serdes_map_fabric_lane34.BCM8879X=rx34:tx34 +lane_to_serdes_map_fabric_lane35.BCM8879X=rx35:tx35 lane_to_serdes_map_fabric_lane36.BCM8879X=rx36:tx36 -lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx38 -lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx39 -lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx37 - -lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx43 -lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx42 -lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx40 -lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx41 - -lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx46 -lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx44 -lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx45 +lane_to_serdes_map_fabric_lane37.BCM8879X=rx37:tx37 +lane_to_serdes_map_fabric_lane38.BCM8879X=rx38:tx38 +lane_to_serdes_map_fabric_lane39.BCM8879X=rx39:tx39 + +lane_to_serdes_map_fabric_lane40.BCM8879X=rx40:tx40 +lane_to_serdes_map_fabric_lane41.BCM8879X=rx41:tx41 +lane_to_serdes_map_fabric_lane42.BCM8879X=rx42:tx42 +lane_to_serdes_map_fabric_lane43.BCM8879X=rx43:tx43 + +lane_to_serdes_map_fabric_lane44.BCM8879X=rx44:tx44 +lane_to_serdes_map_fabric_lane45.BCM8879X=rx45:tx45 +lane_to_serdes_map_fabric_lane46.BCM8879X=rx46:tx46 lane_to_serdes_map_fabric_lane47.BCM8879X=rx47:tx47 -lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx49 -lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx50 -lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx51 -lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx48 +lane_to_serdes_map_fabric_lane48.BCM8879X=rx48:tx48 +lane_to_serdes_map_fabric_lane49.BCM8879X=rx49:tx49 +lane_to_serdes_map_fabric_lane50.BCM8879X=rx50:tx50 +lane_to_serdes_map_fabric_lane51.BCM8879X=rx51:tx51 -lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx54 +lane_to_serdes_map_fabric_lane52.BCM8879X=rx52:tx52 lane_to_serdes_map_fabric_lane53.BCM8879X=rx53:tx53 -lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx55 -lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx52 +lane_to_serdes_map_fabric_lane54.BCM8879X=rx54:tx54 +lane_to_serdes_map_fabric_lane55.BCM8879X=rx55:tx55 -lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx57 -lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx58 -lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx59 -lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx56 +lane_to_serdes_map_fabric_lane56.BCM8879X=rx56:tx56 +lane_to_serdes_map_fabric_lane57.BCM8879X=rx57:tx57 +lane_to_serdes_map_fabric_lane58.BCM8879X=rx58:tx58 +lane_to_serdes_map_fabric_lane59.BCM8879X=rx59:tx59 -lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx61 -lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx60 +lane_to_serdes_map_fabric_lane60.BCM8879X=rx60:tx60 +lane_to_serdes_map_fabric_lane61.BCM8879X=rx61:tx61 lane_to_serdes_map_fabric_lane62.BCM8879X=rx62:tx62 lane_to_serdes_map_fabric_lane63.BCM8879X=rx63:tx63 lane_to_serdes_map_fabric_lane64.BCM8879X=rx64:tx64 -lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx66 -lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx65 +lane_to_serdes_map_fabric_lane65.BCM8879X=rx65:tx65 +lane_to_serdes_map_fabric_lane66.BCM8879X=rx66:tx66 lane_to_serdes_map_fabric_lane67.BCM8879X=rx67:tx67 -lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx69 -lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx70 -lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx71 -lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx68 +lane_to_serdes_map_fabric_lane68.BCM8879X=rx68:tx68 +lane_to_serdes_map_fabric_lane69.BCM8879X=rx69:tx69 +lane_to_serdes_map_fabric_lane70.BCM8879X=rx70:tx70 +lane_to_serdes_map_fabric_lane71.BCM8879X=rx71:tx71 -lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx74 -lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx72 -lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx75 -lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx73 +lane_to_serdes_map_fabric_lane72.BCM8879X=rx72:tx72 +lane_to_serdes_map_fabric_lane73.BCM8879X=rx73:tx73 +lane_to_serdes_map_fabric_lane74.BCM8879X=rx74:tx74 +lane_to_serdes_map_fabric_lane75.BCM8879X=rx75:tx75 -lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx78 -lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx76 -lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx79 -lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx77 +lane_to_serdes_map_fabric_lane76.BCM8879X=rx76:tx76 +lane_to_serdes_map_fabric_lane77.BCM8879X=rx77:tx77 +lane_to_serdes_map_fabric_lane78.BCM8879X=rx78:tx78 +lane_to_serdes_map_fabric_lane79.BCM8879X=rx79:tx79 lane_to_serdes_map_fabric_lane80.BCM8879X=rx80:tx80 -lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx82 -lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx81 +lane_to_serdes_map_fabric_lane81.BCM8879X=rx81:tx81 +lane_to_serdes_map_fabric_lane82.BCM8879X=rx82:tx82 lane_to_serdes_map_fabric_lane83.BCM8879X=rx83:tx83 -lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx85 -lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx86 -lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx87 -lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx84 +lane_to_serdes_map_fabric_lane84.BCM8879X=rx84:tx84 +lane_to_serdes_map_fabric_lane85.BCM8879X=rx85:tx85 +lane_to_serdes_map_fabric_lane86.BCM8879X=rx86:tx86 +lane_to_serdes_map_fabric_lane87.BCM8879X=rx87:tx87 -lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx90 -lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx88 -lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx91 -lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx89 +lane_to_serdes_map_fabric_lane88.BCM8879X=rx88:tx88 +lane_to_serdes_map_fabric_lane89.BCM8879X=rx89:tx89 +lane_to_serdes_map_fabric_lane90.BCM8879X=rx90:tx90 +lane_to_serdes_map_fabric_lane91.BCM8879X=rx91:tx91 -lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx95 -lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx94 -lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx92 -lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx93 +lane_to_serdes_map_fabric_lane92.BCM8879X=rx92:tx92 +lane_to_serdes_map_fabric_lane93.BCM8879X=rx93:tx93 +lane_to_serdes_map_fabric_lane94.BCM8879X=rx94:tx94 +lane_to_serdes_map_fabric_lane95.BCM8879X=rx95:tx95 lane_to_serdes_map_fabric_lane96.BCM8879X=rx96:tx96 -lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx98 -lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx97 +lane_to_serdes_map_fabric_lane97.BCM8879X=rx97:tx97 +lane_to_serdes_map_fabric_lane98.BCM8879X=rx98:tx98 lane_to_serdes_map_fabric_lane99.BCM8879X=rx99:tx99 -lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx101 -lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx102 -lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx100 +lane_to_serdes_map_fabric_lane100.BCM8879X=rx100:tx100 +lane_to_serdes_map_fabric_lane101.BCM8879X=rx101:tx101 +lane_to_serdes_map_fabric_lane102.BCM8879X=rx102:tx102 lane_to_serdes_map_fabric_lane103.BCM8879X=rx103:tx103 lane_to_serdes_map_fabric_lane104.BCM8879X=rx104:tx104 @@ -179,13 +180,13 @@ lane_to_serdes_map_fabric_lane107.BCM8879X=rx107:tx107 lane_to_serdes_map_fabric_lane108.BCM8879X=rx108:tx108 lane_to_serdes_map_fabric_lane109.BCM8879X=rx109:tx109 -lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx111 -lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx110 +lane_to_serdes_map_fabric_lane110.BCM8879X=rx110:tx110 +lane_to_serdes_map_fabric_lane111.BCM8879X=rx111:tx111 -lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx115 -lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx114 -lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx113 -lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx112 +lane_to_serdes_map_fabric_lane112.BCM8879X=rx112:tx112 +lane_to_serdes_map_fabric_lane113.BCM8879X=rx113:tx113 +lane_to_serdes_map_fabric_lane114.BCM8879X=rx114:tx114 +lane_to_serdes_map_fabric_lane115.BCM8879X=rx115:tx115 lane_to_serdes_map_fabric_lane116.BCM8879X=rx116:tx116 lane_to_serdes_map_fabric_lane117.BCM8879X=rx117:tx117 @@ -197,15 +198,15 @@ lane_to_serdes_map_fabric_lane121.BCM8879X=rx121:tx121 lane_to_serdes_map_fabric_lane122.BCM8879X=rx122:tx122 lane_to_serdes_map_fabric_lane123.BCM8879X=rx123:tx123 -lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx127 -lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx126 -lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx124 -lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx125 +lane_to_serdes_map_fabric_lane124.BCM8879X=rx124:tx124 +lane_to_serdes_map_fabric_lane125.BCM8879X=rx125:tx125 +lane_to_serdes_map_fabric_lane126.BCM8879X=rx126:tx126 +lane_to_serdes_map_fabric_lane127.BCM8879X=rx127:tx127 -lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx130 -lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx131 -lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx129 -lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx128 +lane_to_serdes_map_fabric_lane128.BCM8879X=rx128:tx128 +lane_to_serdes_map_fabric_lane129.BCM8879X=rx129:tx129 +lane_to_serdes_map_fabric_lane130.BCM8879X=rx130:tx130 +lane_to_serdes_map_fabric_lane131.BCM8879X=rx131:tx131 lane_to_serdes_map_fabric_lane132.BCM8879X=rx132:tx132 lane_to_serdes_map_fabric_lane133.BCM8879X=rx133:tx133 @@ -213,23 +214,23 @@ lane_to_serdes_map_fabric_lane134.BCM8879X=rx134:tx134 lane_to_serdes_map_fabric_lane135.BCM8879X=rx135:tx135 lane_to_serdes_map_fabric_lane136.BCM8879X=rx136:tx136 -lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx138 -lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx137 +lane_to_serdes_map_fabric_lane137.BCM8879X=rx137:tx137 +lane_to_serdes_map_fabric_lane138.BCM8879X=rx138:tx138 lane_to_serdes_map_fabric_lane139.BCM8879X=rx139:tx139 -lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx143 -lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx142 -lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx141 -lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx140 +lane_to_serdes_map_fabric_lane140.BCM8879X=rx140:tx140 +lane_to_serdes_map_fabric_lane141.BCM8879X=rx141:tx141 +lane_to_serdes_map_fabric_lane142.BCM8879X=rx142:tx142 +lane_to_serdes_map_fabric_lane143.BCM8879X=rx143:tx143 -lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx145 -lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx147 -lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx144 -lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx146 +lane_to_serdes_map_fabric_lane144.BCM8879X=rx144:tx144 +lane_to_serdes_map_fabric_lane145.BCM8879X=rx145:tx145 +lane_to_serdes_map_fabric_lane146.BCM8879X=rx146:tx146 +lane_to_serdes_map_fabric_lane147.BCM8879X=rx147:tx147 -lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx150 +lane_to_serdes_map_fabric_lane148.BCM8879X=rx148:tx148 lane_to_serdes_map_fabric_lane149.BCM8879X=rx149:tx149 -lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx148 +lane_to_serdes_map_fabric_lane150.BCM8879X=rx150:tx150 lane_to_serdes_map_fabric_lane151.BCM8879X=rx151:tx151 lane_to_serdes_map_fabric_lane152.BCM8879X=rx152:tx152 @@ -237,116 +238,116 @@ lane_to_serdes_map_fabric_lane153.BCM8879X=rx153:tx153 lane_to_serdes_map_fabric_lane154.BCM8879X=rx154:tx154 lane_to_serdes_map_fabric_lane155.BCM8879X=rx155:tx155 -lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx157 -lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx159 +lane_to_serdes_map_fabric_lane156.BCM8879X=rx156:tx156 +lane_to_serdes_map_fabric_lane157.BCM8879X=rx157:tx157 lane_to_serdes_map_fabric_lane158.BCM8879X=rx158:tx158 -lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx156 +lane_to_serdes_map_fabric_lane159.BCM8879X=rx159:tx159 lane_to_serdes_map_fabric_lane160.BCM8879X=rx160:tx160 -lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx162 -lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx161 +lane_to_serdes_map_fabric_lane161.BCM8879X=rx161:tx161 +lane_to_serdes_map_fabric_lane162.BCM8879X=rx162:tx162 lane_to_serdes_map_fabric_lane163.BCM8879X=rx163:tx163 -lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx166 -lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx164 -lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx165 +lane_to_serdes_map_fabric_lane164.BCM8879X=rx164:tx164 +lane_to_serdes_map_fabric_lane165.BCM8879X=rx165:tx165 +lane_to_serdes_map_fabric_lane166.BCM8879X=rx166:tx166 lane_to_serdes_map_fabric_lane167.BCM8879X=rx167:tx167 -lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx170 -lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx168 -lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx169 +lane_to_serdes_map_fabric_lane168.BCM8879X=rx168:tx168 +lane_to_serdes_map_fabric_lane169.BCM8879X=rx169:tx169 +lane_to_serdes_map_fabric_lane170.BCM8879X=rx170:tx170 lane_to_serdes_map_fabric_lane171.BCM8879X=rx171:tx171 -lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx173 -lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx174 -lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx175 -lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx172 +lane_to_serdes_map_fabric_lane172.BCM8879X=rx172:tx172 +lane_to_serdes_map_fabric_lane173.BCM8879X=rx173:tx173 +lane_to_serdes_map_fabric_lane174.BCM8879X=rx174:tx174 +lane_to_serdes_map_fabric_lane175.BCM8879X=rx175:tx175 lane_to_serdes_map_fabric_lane176.BCM8879X=rx176:tx176 -lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx178 -lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx177 +lane_to_serdes_map_fabric_lane177.BCM8879X=rx177:tx177 +lane_to_serdes_map_fabric_lane178.BCM8879X=rx178:tx178 lane_to_serdes_map_fabric_lane179.BCM8879X=rx179:tx179 lane_to_serdes_map_fabric_lane180.BCM8879X=rx180:tx180 -lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx182 -lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx181 +lane_to_serdes_map_fabric_lane181.BCM8879X=rx181:tx181 +lane_to_serdes_map_fabric_lane182.BCM8879X=rx182:tx182 lane_to_serdes_map_fabric_lane183.BCM8879X=rx183:tx183 -lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx187 -lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx184 +lane_to_serdes_map_fabric_lane184.BCM8879X=rx184:tx184 +lane_to_serdes_map_fabric_lane185.BCM8879X=rx185:tx185 lane_to_serdes_map_fabric_lane186.BCM8879X=rx186:tx186 -lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx185 +lane_to_serdes_map_fabric_lane187.BCM8879X=rx187:tx187 -lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx190 +lane_to_serdes_map_fabric_lane188.BCM8879X=rx188:tx188 lane_to_serdes_map_fabric_lane189.BCM8879X=rx189:tx189 -lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx191 -lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx188 +lane_to_serdes_map_fabric_lane190.BCM8879X=rx190:tx190 +lane_to_serdes_map_fabric_lane191.BCM8879X=rx191:tx191 -phy_rx_polarity_flip_fabric0.BCM8879X=0 -phy_rx_polarity_flip_fabric1.BCM8879X=1 -phy_rx_polarity_flip_fabric2.BCM8879X=0 -phy_rx_polarity_flip_fabric3.BCM8879X=1 +phy_rx_polarity_flip_fabric0.BCM8879X=1 +phy_rx_polarity_flip_fabric1.BCM8879X=0 +phy_rx_polarity_flip_fabric2.BCM8879X=1 +phy_rx_polarity_flip_fabric3.BCM8879X=0 phy_rx_polarity_flip_fabric4.BCM8879X=1 phy_rx_polarity_flip_fabric5.BCM8879X=0 phy_rx_polarity_flip_fabric6.BCM8879X=1 phy_rx_polarity_flip_fabric7.BCM8879X=0 -phy_rx_polarity_flip_fabric8.BCM8879X=1 -phy_rx_polarity_flip_fabric9.BCM8879X=0 -phy_rx_polarity_flip_fabric10.BCM8879X=1 -phy_rx_polarity_flip_fabric11.BCM8879X=0 +phy_rx_polarity_flip_fabric8.BCM8879X=0 +phy_rx_polarity_flip_fabric9.BCM8879X=1 +phy_rx_polarity_flip_fabric10.BCM8879X=0 +phy_rx_polarity_flip_fabric11.BCM8879X=1 -phy_rx_polarity_flip_fabric12.BCM8879X=0 -phy_rx_polarity_flip_fabric13.BCM8879X=1 -phy_rx_polarity_flip_fabric14.BCM8879X=0 -phy_rx_polarity_flip_fabric15.BCM8879X=1 +phy_rx_polarity_flip_fabric12.BCM8879X=1 +phy_rx_polarity_flip_fabric13.BCM8879X=0 +phy_rx_polarity_flip_fabric14.BCM8879X=1 +phy_rx_polarity_flip_fabric15.BCM8879X=0 -phy_rx_polarity_flip_fabric16.BCM8879X=0 -phy_rx_polarity_flip_fabric17.BCM8879X=1 -phy_rx_polarity_flip_fabric18.BCM8879X=0 -phy_rx_polarity_flip_fabric19.BCM8879X=1 +phy_rx_polarity_flip_fabric16.BCM8879X=1 +phy_rx_polarity_flip_fabric17.BCM8879X=0 +phy_rx_polarity_flip_fabric18.BCM8879X=1 +phy_rx_polarity_flip_fabric19.BCM8879X=0 phy_rx_polarity_flip_fabric20.BCM8879X=0 phy_rx_polarity_flip_fabric21.BCM8879X=1 phy_rx_polarity_flip_fabric22.BCM8879X=0 phy_rx_polarity_flip_fabric23.BCM8879X=1 -phy_rx_polarity_flip_fabric24.BCM8879X=0 -phy_rx_polarity_flip_fabric25.BCM8879X=1 -phy_rx_polarity_flip_fabric26.BCM8879X=0 -phy_rx_polarity_flip_fabric27.BCM8879X=1 +phy_rx_polarity_flip_fabric24.BCM8879X=1 +phy_rx_polarity_flip_fabric25.BCM8879X=0 +phy_rx_polarity_flip_fabric26.BCM8879X=1 +phy_rx_polarity_flip_fabric27.BCM8879X=0 phy_rx_polarity_flip_fabric28.BCM8879X=1 phy_rx_polarity_flip_fabric29.BCM8879X=0 phy_rx_polarity_flip_fabric30.BCM8879X=1 phy_rx_polarity_flip_fabric31.BCM8879X=0 -phy_rx_polarity_flip_fabric32.BCM8879X=1 -phy_rx_polarity_flip_fabric33.BCM8879X=0 -phy_rx_polarity_flip_fabric34.BCM8879X=1 -phy_rx_polarity_flip_fabric35.BCM8879X=0 +phy_rx_polarity_flip_fabric32.BCM8879X=0 +phy_rx_polarity_flip_fabric33.BCM8879X=1 +phy_rx_polarity_flip_fabric34.BCM8879X=0 +phy_rx_polarity_flip_fabric35.BCM8879X=1 -phy_rx_polarity_flip_fabric36.BCM8879X=0 -phy_rx_polarity_flip_fabric37.BCM8879X=1 -phy_rx_polarity_flip_fabric38.BCM8879X=0 -phy_rx_polarity_flip_fabric39.BCM8879X=1 +phy_rx_polarity_flip_fabric36.BCM8879X=1 +phy_rx_polarity_flip_fabric37.BCM8879X=0 +phy_rx_polarity_flip_fabric38.BCM8879X=1 +phy_rx_polarity_flip_fabric39.BCM8879X=0 phy_rx_polarity_flip_fabric40.BCM8879X=0 phy_rx_polarity_flip_fabric41.BCM8879X=1 phy_rx_polarity_flip_fabric42.BCM8879X=0 phy_rx_polarity_flip_fabric43.BCM8879X=1 -phy_rx_polarity_flip_fabric44.BCM8879X=0 -phy_rx_polarity_flip_fabric45.BCM8879X=1 -phy_rx_polarity_flip_fabric46.BCM8879X=0 -phy_rx_polarity_flip_fabric47.BCM8879X=1 +phy_rx_polarity_flip_fabric44.BCM8879X=1 +phy_rx_polarity_flip_fabric45.BCM8879X=0 +phy_rx_polarity_flip_fabric46.BCM8879X=1 +phy_rx_polarity_flip_fabric47.BCM8879X=0 -phy_rx_polarity_flip_fabric48.BCM8879X=0 -phy_rx_polarity_flip_fabric49.BCM8879X=1 -phy_rx_polarity_flip_fabric50.BCM8879X=0 -phy_rx_polarity_flip_fabric51.BCM8879X=1 +phy_rx_polarity_flip_fabric48.BCM8879X=1 +phy_rx_polarity_flip_fabric49.BCM8879X=0 +phy_rx_polarity_flip_fabric50.BCM8879X=1 +phy_rx_polarity_flip_fabric51.BCM8879X=0 phy_rx_polarity_flip_fabric52.BCM8879X=0 phy_rx_polarity_flip_fabric53.BCM8879X=1 @@ -358,10 +359,10 @@ phy_rx_polarity_flip_fabric57.BCM8879X=1 phy_rx_polarity_flip_fabric58.BCM8879X=0 phy_rx_polarity_flip_fabric59.BCM8879X=1 -phy_rx_polarity_flip_fabric60.BCM8879X=1 -phy_rx_polarity_flip_fabric61.BCM8879X=0 -phy_rx_polarity_flip_fabric62.BCM8879X=1 -phy_rx_polarity_flip_fabric63.BCM8879X=0 +phy_rx_polarity_flip_fabric60.BCM8879X=0 +phy_rx_polarity_flip_fabric61.BCM8879X=1 +phy_rx_polarity_flip_fabric62.BCM8879X=0 +phy_rx_polarity_flip_fabric63.BCM8879X=1 phy_rx_polarity_flip_fabric64.BCM8879X=0 phy_rx_polarity_flip_fabric65.BCM8879X=1 @@ -373,78 +374,78 @@ phy_rx_polarity_flip_fabric69.BCM8879X=0 phy_rx_polarity_flip_fabric70.BCM8879X=1 phy_rx_polarity_flip_fabric71.BCM8879X=0 -phy_rx_polarity_flip_fabric72.BCM8879X=0 -phy_rx_polarity_flip_fabric73.BCM8879X=1 -phy_rx_polarity_flip_fabric74.BCM8879X=0 -phy_rx_polarity_flip_fabric75.BCM8879X=1 +phy_rx_polarity_flip_fabric72.BCM8879X=1 +phy_rx_polarity_flip_fabric73.BCM8879X=0 +phy_rx_polarity_flip_fabric74.BCM8879X=1 +phy_rx_polarity_flip_fabric75.BCM8879X=0 phy_rx_polarity_flip_fabric76.BCM8879X=0 phy_rx_polarity_flip_fabric77.BCM8879X=1 phy_rx_polarity_flip_fabric78.BCM8879X=0 phy_rx_polarity_flip_fabric79.BCM8879X=1 -phy_rx_polarity_flip_fabric80.BCM8879X=0 -phy_rx_polarity_flip_fabric81.BCM8879X=1 -phy_rx_polarity_flip_fabric82.BCM8879X=0 -phy_rx_polarity_flip_fabric83.BCM8879X=1 +phy_rx_polarity_flip_fabric80.BCM8879X=1 +phy_rx_polarity_flip_fabric81.BCM8879X=0 +phy_rx_polarity_flip_fabric82.BCM8879X=1 +phy_rx_polarity_flip_fabric83.BCM8879X=0 -phy_rx_polarity_flip_fabric84.BCM8879X=1 -phy_rx_polarity_flip_fabric85.BCM8879X=0 -phy_rx_polarity_flip_fabric86.BCM8879X=1 -phy_rx_polarity_flip_fabric87.BCM8879X=0 +phy_rx_polarity_flip_fabric84.BCM8879X=0 +phy_rx_polarity_flip_fabric85.BCM8879X=1 +phy_rx_polarity_flip_fabric86.BCM8879X=0 +phy_rx_polarity_flip_fabric87.BCM8879X=1 phy_rx_polarity_flip_fabric88.BCM8879X=1 phy_rx_polarity_flip_fabric89.BCM8879X=0 phy_rx_polarity_flip_fabric90.BCM8879X=1 phy_rx_polarity_flip_fabric91.BCM8879X=0 -phy_rx_polarity_flip_fabric92.BCM8879X=0 -phy_rx_polarity_flip_fabric93.BCM8879X=1 -phy_rx_polarity_flip_fabric94.BCM8879X=0 -phy_rx_polarity_flip_fabric95.BCM8879X=1 +phy_rx_polarity_flip_fabric92.BCM8879X=1 +phy_rx_polarity_flip_fabric93.BCM8879X=0 +phy_rx_polarity_flip_fabric94.BCM8879X=1 +phy_rx_polarity_flip_fabric95.BCM8879X=0 phy_rx_polarity_flip_fabric96.BCM8879X=0 -phy_rx_polarity_flip_fabric97.BCM8879X=0 +phy_rx_polarity_flip_fabric97.BCM8879X=1 phy_rx_polarity_flip_fabric98.BCM8879X=0 phy_rx_polarity_flip_fabric99.BCM8879X=1 -phy_rx_polarity_flip_fabric100.BCM8879X=0 -phy_rx_polarity_flip_fabric101.BCM8879X=1 +phy_rx_polarity_flip_fabric100.BCM8879X=1 +phy_rx_polarity_flip_fabric101.BCM8879X=0 phy_rx_polarity_flip_fabric102.BCM8879X=1 -phy_rx_polarity_flip_fabric103.BCM8879X=1 +phy_rx_polarity_flip_fabric103.BCM8879X=0 phy_rx_polarity_flip_fabric104.BCM8879X=0 phy_rx_polarity_flip_fabric105.BCM8879X=1 -phy_rx_polarity_flip_fabric106.BCM8879X=1 +phy_rx_polarity_flip_fabric106.BCM8879X=0 phy_rx_polarity_flip_fabric107.BCM8879X=1 -phy_rx_polarity_flip_fabric108.BCM8879X=1 -phy_rx_polarity_flip_fabric109.BCM8879X=0 -phy_rx_polarity_flip_fabric110.BCM8879X=1 -phy_rx_polarity_flip_fabric111.BCM8879X=0 +phy_rx_polarity_flip_fabric108.BCM8879X=0 +phy_rx_polarity_flip_fabric109.BCM8879X=1 +phy_rx_polarity_flip_fabric110.BCM8879X=0 +phy_rx_polarity_flip_fabric111.BCM8879X=1 -phy_rx_polarity_flip_fabric112.BCM8879X=0 -phy_rx_polarity_flip_fabric113.BCM8879X=1 -phy_rx_polarity_flip_fabric114.BCM8879X=0 -phy_rx_polarity_flip_fabric115.BCM8879X=1 +phy_rx_polarity_flip_fabric112.BCM8879X=1 +phy_rx_polarity_flip_fabric113.BCM8879X=0 +phy_rx_polarity_flip_fabric114.BCM8879X=1 +phy_rx_polarity_flip_fabric115.BCM8879X=0 -phy_rx_polarity_flip_fabric116.BCM8879X=1 -phy_rx_polarity_flip_fabric117.BCM8879X=0 -phy_rx_polarity_flip_fabric118.BCM8879X=1 -phy_rx_polarity_flip_fabric119.BCM8879X=0 +phy_rx_polarity_flip_fabric116.BCM8879X=0 +phy_rx_polarity_flip_fabric117.BCM8879X=1 +phy_rx_polarity_flip_fabric118.BCM8879X=0 +phy_rx_polarity_flip_fabric119.BCM8879X=1 -phy_rx_polarity_flip_fabric120.BCM8879X=0 +phy_rx_polarity_flip_fabric120.BCM8879X=1 phy_rx_polarity_flip_fabric121.BCM8879X=0 -phy_rx_polarity_flip_fabric122.BCM8879X=0 -phy_rx_polarity_flip_fabric123.BCM8879X=1 +phy_rx_polarity_flip_fabric122.BCM8879X=1 +phy_rx_polarity_flip_fabric123.BCM8879X=0 phy_rx_polarity_flip_fabric124.BCM8879X=1 -phy_rx_polarity_flip_fabric125.BCM8879X=1 -phy_rx_polarity_flip_fabric126.BCM8879X=0 -phy_rx_polarity_flip_fabric127.BCM8879X=1 +phy_rx_polarity_flip_fabric125.BCM8879X=0 +phy_rx_polarity_flip_fabric126.BCM8879X=1 +phy_rx_polarity_flip_fabric127.BCM8879X=0 phy_rx_polarity_flip_fabric128.BCM8879X=0 -phy_rx_polarity_flip_fabric129.BCM8879X=0 +phy_rx_polarity_flip_fabric129.BCM8879X=1 phy_rx_polarity_flip_fabric130.BCM8879X=0 phy_rx_polarity_flip_fabric131.BCM8879X=1 @@ -453,25 +454,25 @@ phy_rx_polarity_flip_fabric133.BCM8879X=0 phy_rx_polarity_flip_fabric134.BCM8879X=1 phy_rx_polarity_flip_fabric135.BCM8879X=0 -phy_rx_polarity_flip_fabric136.BCM8879X=1 -phy_rx_polarity_flip_fabric137.BCM8879X=0 -phy_rx_polarity_flip_fabric138.BCM8879X=1 -phy_rx_polarity_flip_fabric139.BCM8879X=0 +phy_rx_polarity_flip_fabric136.BCM8879X=0 +phy_rx_polarity_flip_fabric137.BCM8879X=1 +phy_rx_polarity_flip_fabric138.BCM8879X=0 +phy_rx_polarity_flip_fabric139.BCM8879X=1 -phy_rx_polarity_flip_fabric140.BCM8879X=0 -phy_rx_polarity_flip_fabric141.BCM8879X=1 -phy_rx_polarity_flip_fabric142.BCM8879X=0 -phy_rx_polarity_flip_fabric143.BCM8879X=1 +phy_rx_polarity_flip_fabric140.BCM8879X=1 +phy_rx_polarity_flip_fabric141.BCM8879X=0 +phy_rx_polarity_flip_fabric142.BCM8879X=1 +phy_rx_polarity_flip_fabric143.BCM8879X=0 -phy_rx_polarity_flip_fabric144.BCM8879X=0 -phy_rx_polarity_flip_fabric145.BCM8879X=1 -phy_rx_polarity_flip_fabric146.BCM8879X=0 -phy_rx_polarity_flip_fabric147.BCM8879X=1 +phy_rx_polarity_flip_fabric144.BCM8879X=1 +phy_rx_polarity_flip_fabric145.BCM8879X=0 +phy_rx_polarity_flip_fabric146.BCM8879X=1 +phy_rx_polarity_flip_fabric147.BCM8879X=0 -phy_rx_polarity_flip_fabric148.BCM8879X=1 -phy_rx_polarity_flip_fabric149.BCM8879X=0 -phy_rx_polarity_flip_fabric150.BCM8879X=1 -phy_rx_polarity_flip_fabric151.BCM8879X=0 +phy_rx_polarity_flip_fabric148.BCM8879X=0 +phy_rx_polarity_flip_fabric149.BCM8879X=1 +phy_rx_polarity_flip_fabric150.BCM8879X=0 +phy_rx_polarity_flip_fabric151.BCM8879X=1 phy_rx_polarity_flip_fabric152.BCM8879X=1 phy_rx_polarity_flip_fabric153.BCM8879X=0 @@ -480,28 +481,28 @@ phy_rx_polarity_flip_fabric155.BCM8879X=0 phy_rx_polarity_flip_fabric156.BCM8879X=0 phy_rx_polarity_flip_fabric157.BCM8879X=1 -phy_rx_polarity_flip_fabric158.BCM8879X=1 +phy_rx_polarity_flip_fabric158.BCM8879X=0 phy_rx_polarity_flip_fabric159.BCM8879X=1 -phy_rx_polarity_flip_fabric160.BCM8879X=0 +phy_rx_polarity_flip_fabric160.BCM8879X=1 phy_rx_polarity_flip_fabric161.BCM8879X=0 -phy_rx_polarity_flip_fabric162.BCM8879X=0 -phy_rx_polarity_flip_fabric163.BCM8879X=1 +phy_rx_polarity_flip_fabric162.BCM8879X=1 +phy_rx_polarity_flip_fabric163.BCM8879X=0 -phy_rx_polarity_flip_fabric164.BCM8879X=0 +phy_rx_polarity_flip_fabric164.BCM8879X=1 phy_rx_polarity_flip_fabric165.BCM8879X=0 -phy_rx_polarity_flip_fabric166.BCM8879X=0 -phy_rx_polarity_flip_fabric167.BCM8879X=1 +phy_rx_polarity_flip_fabric166.BCM8879X=1 +phy_rx_polarity_flip_fabric167.BCM8879X=0 -phy_rx_polarity_flip_fabric168.BCM8879X=0 -phy_rx_polarity_flip_fabric169.BCM8879X=1 -phy_rx_polarity_flip_fabric170.BCM8879X=0 -phy_rx_polarity_flip_fabric171.BCM8879X=1 +phy_rx_polarity_flip_fabric168.BCM8879X=1 +phy_rx_polarity_flip_fabric169.BCM8879X=0 +phy_rx_polarity_flip_fabric170.BCM8879X=1 +phy_rx_polarity_flip_fabric171.BCM8879X=0 -phy_rx_polarity_flip_fabric172.BCM8879X=1 -phy_rx_polarity_flip_fabric173.BCM8879X=0 -phy_rx_polarity_flip_fabric174.BCM8879X=1 -phy_rx_polarity_flip_fabric175.BCM8879X=0 +phy_rx_polarity_flip_fabric172.BCM8879X=0 +phy_rx_polarity_flip_fabric173.BCM8879X=1 +phy_rx_polarity_flip_fabric174.BCM8879X=0 +phy_rx_polarity_flip_fabric175.BCM8879X=1 phy_rx_polarity_flip_fabric176.BCM8879X=1 phy_rx_polarity_flip_fabric177.BCM8879X=0 @@ -509,79 +510,80 @@ phy_rx_polarity_flip_fabric178.BCM8879X=1 phy_rx_polarity_flip_fabric179.BCM8879X=0 phy_rx_polarity_flip_fabric180.BCM8879X=0 -phy_rx_polarity_flip_fabric181.BCM8879X=0 +phy_rx_polarity_flip_fabric181.BCM8879X=1 phy_rx_polarity_flip_fabric182.BCM8879X=0 phy_rx_polarity_flip_fabric183.BCM8879X=1 -phy_rx_polarity_flip_fabric184.BCM8879X=0 +phy_rx_polarity_flip_fabric184.BCM8879X=1 phy_rx_polarity_flip_fabric185.BCM8879X=0 -phy_rx_polarity_flip_fabric186.BCM8879X=0 -phy_rx_polarity_flip_fabric187.BCM8879X=1 +phy_rx_polarity_flip_fabric186.BCM8879X=1 +phy_rx_polarity_flip_fabric187.BCM8879X=0 phy_rx_polarity_flip_fabric188.BCM8879X=1 -phy_rx_polarity_flip_fabric189.BCM8879X=1 -phy_rx_polarity_flip_fabric190.BCM8879X=0 -phy_rx_polarity_flip_fabric191.BCM8879X=1 +phy_rx_polarity_flip_fabric189.BCM8879X=0 +phy_rx_polarity_flip_fabric190.BCM8879X=1 +phy_rx_polarity_flip_fabric191.BCM8879X=0 + phy_tx_polarity_flip_fabric0.BCM8879X=0 -phy_tx_polarity_flip_fabric1.BCM8879X=0 -phy_tx_polarity_flip_fabric2.BCM8879X=1 +phy_tx_polarity_flip_fabric1.BCM8879X=1 +phy_tx_polarity_flip_fabric2.BCM8879X=0 phy_tx_polarity_flip_fabric3.BCM8879X=1 -phy_tx_polarity_flip_fabric4.BCM8879X=1 -phy_tx_polarity_flip_fabric5.BCM8879X=0 -phy_tx_polarity_flip_fabric6.BCM8879X=1 -phy_tx_polarity_flip_fabric7.BCM8879X=0 +phy_tx_polarity_flip_fabric4.BCM8879X=0 +phy_tx_polarity_flip_fabric5.BCM8879X=1 +phy_tx_polarity_flip_fabric6.BCM8879X=0 +phy_tx_polarity_flip_fabric7.BCM8879X=1 -phy_tx_polarity_flip_fabric8.BCM8879X=0 +phy_tx_polarity_flip_fabric8.BCM8879X=1 phy_tx_polarity_flip_fabric9.BCM8879X=0 phy_tx_polarity_flip_fabric10.BCM8879X=1 -phy_tx_polarity_flip_fabric11.BCM8879X=1 +phy_tx_polarity_flip_fabric11.BCM8879X=0 phy_tx_polarity_flip_fabric12.BCM8879X=0 -phy_tx_polarity_flip_fabric13.BCM8879X=0 -phy_tx_polarity_flip_fabric14.BCM8879X=1 +phy_tx_polarity_flip_fabric13.BCM8879X=1 +phy_tx_polarity_flip_fabric14.BCM8879X=0 phy_tx_polarity_flip_fabric15.BCM8879X=1 -phy_tx_polarity_flip_fabric16.BCM8879X=1 +phy_tx_polarity_flip_fabric16.BCM8879X=0 phy_tx_polarity_flip_fabric17.BCM8879X=1 phy_tx_polarity_flip_fabric18.BCM8879X=0 -phy_tx_polarity_flip_fabric19.BCM8879X=0 +phy_tx_polarity_flip_fabric19.BCM8879X=1 phy_tx_polarity_flip_fabric20.BCM8879X=1 -phy_tx_polarity_flip_fabric21.BCM8879X=1 -phy_tx_polarity_flip_fabric22.BCM8879X=0 +phy_tx_polarity_flip_fabric21.BCM8879X=0 +phy_tx_polarity_flip_fabric22.BCM8879X=1 phy_tx_polarity_flip_fabric23.BCM8879X=0 -phy_tx_polarity_flip_fabric24.BCM8879X=1 +phy_tx_polarity_flip_fabric24.BCM8879X=0 phy_tx_polarity_flip_fabric25.BCM8879X=1 phy_tx_polarity_flip_fabric26.BCM8879X=0 -phy_tx_polarity_flip_fabric27.BCM8879X=0 +phy_tx_polarity_flip_fabric27.BCM8879X=1 -phy_tx_polarity_flip_fabric28.BCM8879X=1 -phy_tx_polarity_flip_fabric29.BCM8879X=0 +phy_tx_polarity_flip_fabric28.BCM8879X=0 +phy_tx_polarity_flip_fabric29.BCM8879X=1 phy_tx_polarity_flip_fabric30.BCM8879X=0 phy_tx_polarity_flip_fabric31.BCM8879X=1 -phy_tx_polarity_flip_fabric32.BCM8879X=0 +phy_tx_polarity_flip_fabric32.BCM8879X=1 phy_tx_polarity_flip_fabric33.BCM8879X=0 phy_tx_polarity_flip_fabric34.BCM8879X=1 -phy_tx_polarity_flip_fabric35.BCM8879X=1 +phy_tx_polarity_flip_fabric35.BCM8879X=0 -phy_tx_polarity_flip_fabric36.BCM8879X=1 +phy_tx_polarity_flip_fabric36.BCM8879X=0 phy_tx_polarity_flip_fabric37.BCM8879X=1 phy_tx_polarity_flip_fabric38.BCM8879X=0 -phy_tx_polarity_flip_fabric39.BCM8879X=0 +phy_tx_polarity_flip_fabric39.BCM8879X=1 -phy_tx_polarity_flip_fabric40.BCM8879X=0 -phy_tx_polarity_flip_fabric41.BCM8879X=1 +phy_tx_polarity_flip_fabric40.BCM8879X=1 +phy_tx_polarity_flip_fabric41.BCM8879X=0 phy_tx_polarity_flip_fabric42.BCM8879X=1 phy_tx_polarity_flip_fabric43.BCM8879X=0 -phy_tx_polarity_flip_fabric44.BCM8879X=1 +phy_tx_polarity_flip_fabric44.BCM8879X=0 phy_tx_polarity_flip_fabric45.BCM8879X=1 phy_tx_polarity_flip_fabric46.BCM8879X=0 -phy_tx_polarity_flip_fabric47.BCM8879X=0 +phy_tx_polarity_flip_fabric47.BCM8879X=1 phy_tx_polarity_flip_fabric48.BCM8879X=0 phy_tx_polarity_flip_fabric49.BCM8879X=1 @@ -590,43 +592,43 @@ phy_tx_polarity_flip_fabric51.BCM8879X=1 phy_tx_polarity_flip_fabric52.BCM8879X=1 phy_tx_polarity_flip_fabric53.BCM8879X=0 -phy_tx_polarity_flip_fabric54.BCM8879X=0 -phy_tx_polarity_flip_fabric55.BCM8879X=1 +phy_tx_polarity_flip_fabric54.BCM8879X=1 +phy_tx_polarity_flip_fabric55.BCM8879X=0 -phy_tx_polarity_flip_fabric56.BCM8879X=0 -phy_tx_polarity_flip_fabric57.BCM8879X=1 -phy_tx_polarity_flip_fabric58.BCM8879X=0 -phy_tx_polarity_flip_fabric59.BCM8879X=1 +phy_tx_polarity_flip_fabric56.BCM8879X=1 +phy_tx_polarity_flip_fabric57.BCM8879X=0 +phy_tx_polarity_flip_fabric58.BCM8879X=1 +phy_tx_polarity_flip_fabric59.BCM8879X=0 phy_tx_polarity_flip_fabric60.BCM8879X=1 phy_tx_polarity_flip_fabric61.BCM8879X=0 -phy_tx_polarity_flip_fabric62.BCM8879X=0 -phy_tx_polarity_flip_fabric63.BCM8879X=1 +phy_tx_polarity_flip_fabric62.BCM8879X=1 +phy_tx_polarity_flip_fabric63.BCM8879X=0 phy_tx_polarity_flip_fabric64.BCM8879X=1 -phy_tx_polarity_flip_fabric65.BCM8879X=1 -phy_tx_polarity_flip_fabric66.BCM8879X=0 +phy_tx_polarity_flip_fabric65.BCM8879X=0 +phy_tx_polarity_flip_fabric66.BCM8879X=1 phy_tx_polarity_flip_fabric67.BCM8879X=0 -phy_tx_polarity_flip_fabric68.BCM8879X=1 -phy_tx_polarity_flip_fabric69.BCM8879X=0 -phy_tx_polarity_flip_fabric70.BCM8879X=1 -phy_tx_polarity_flip_fabric71.BCM8879X=0 +phy_tx_polarity_flip_fabric68.BCM8879X=0 +phy_tx_polarity_flip_fabric69.BCM8879X=1 +phy_tx_polarity_flip_fabric70.BCM8879X=0 +phy_tx_polarity_flip_fabric71.BCM8879X=1 -phy_tx_polarity_flip_fabric72.BCM8879X=1 +phy_tx_polarity_flip_fabric72.BCM8879X=0 phy_tx_polarity_flip_fabric73.BCM8879X=1 phy_tx_polarity_flip_fabric74.BCM8879X=0 -phy_tx_polarity_flip_fabric75.BCM8879X=0 +phy_tx_polarity_flip_fabric75.BCM8879X=1 phy_tx_polarity_flip_fabric76.BCM8879X=1 -phy_tx_polarity_flip_fabric77.BCM8879X=1 -phy_tx_polarity_flip_fabric78.BCM8879X=0 +phy_tx_polarity_flip_fabric77.BCM8879X=0 +phy_tx_polarity_flip_fabric78.BCM8879X=1 phy_tx_polarity_flip_fabric79.BCM8879X=0 -phy_tx_polarity_flip_fabric80.BCM8879X=1 +phy_tx_polarity_flip_fabric80.BCM8879X=0 phy_tx_polarity_flip_fabric81.BCM8879X=1 phy_tx_polarity_flip_fabric82.BCM8879X=0 -phy_tx_polarity_flip_fabric83.BCM8879X=0 +phy_tx_polarity_flip_fabric83.BCM8879X=1 phy_tx_polarity_flip_fabric84.BCM8879X=1 phy_tx_polarity_flip_fabric85.BCM8879X=0 @@ -634,32 +636,32 @@ phy_tx_polarity_flip_fabric86.BCM8879X=1 phy_tx_polarity_flip_fabric87.BCM8879X=0 phy_tx_polarity_flip_fabric88.BCM8879X=0 -phy_tx_polarity_flip_fabric89.BCM8879X=0 -phy_tx_polarity_flip_fabric90.BCM8879X=1 +phy_tx_polarity_flip_fabric89.BCM8879X=1 +phy_tx_polarity_flip_fabric90.BCM8879X=0 phy_tx_polarity_flip_fabric91.BCM8879X=1 phy_tx_polarity_flip_fabric92.BCM8879X=0 phy_tx_polarity_flip_fabric93.BCM8879X=1 -phy_tx_polarity_flip_fabric94.BCM8879X=1 -phy_tx_polarity_flip_fabric95.BCM8879X=0 +phy_tx_polarity_flip_fabric94.BCM8879X=0 +phy_tx_polarity_flip_fabric95.BCM8879X=1 phy_tx_polarity_flip_fabric96.BCM8879X=1 -phy_tx_polarity_flip_fabric97.BCM8879X=1 -phy_tx_polarity_flip_fabric98.BCM8879X=0 +phy_tx_polarity_flip_fabric97.BCM8879X=0 +phy_tx_polarity_flip_fabric98.BCM8879X=1 phy_tx_polarity_flip_fabric99.BCM8879X=0 phy_tx_polarity_flip_fabric100.BCM8879X=0 -phy_tx_polarity_flip_fabric101.BCM8879X=0 +phy_tx_polarity_flip_fabric101.BCM8879X=1 phy_tx_polarity_flip_fabric102.BCM8879X=0 -phy_tx_polarity_flip_fabric103.BCM8879X=0 +phy_tx_polarity_flip_fabric103.BCM8879X=1 phy_tx_polarity_flip_fabric104.BCM8879X=1 phy_tx_polarity_flip_fabric105.BCM8879X=0 -phy_tx_polarity_flip_fabric106.BCM8879X=0 -phy_tx_polarity_flip_fabric107.BCM8879X=1 +phy_tx_polarity_flip_fabric106.BCM8879X=1 +phy_tx_polarity_flip_fabric107.BCM8879X=0 -phy_tx_polarity_flip_fabric108.BCM8879X=0 -phy_tx_polarity_flip_fabric109.BCM8879X=1 +phy_tx_polarity_flip_fabric108.BCM8879X=1 +phy_tx_polarity_flip_fabric109.BCM8879X=0 phy_tx_polarity_flip_fabric110.BCM8879X=1 phy_tx_polarity_flip_fabric111.BCM8879X=0 @@ -668,35 +670,35 @@ phy_tx_polarity_flip_fabric113.BCM8879X=1 phy_tx_polarity_flip_fabric114.BCM8879X=0 phy_tx_polarity_flip_fabric115.BCM8879X=1 -phy_tx_polarity_flip_fabric116.BCM8879X=0 -phy_tx_polarity_flip_fabric117.BCM8879X=1 -phy_tx_polarity_flip_fabric118.BCM8879X=0 -phy_tx_polarity_flip_fabric119.BCM8879X=1 +phy_tx_polarity_flip_fabric116.BCM8879X=1 +phy_tx_polarity_flip_fabric117.BCM8879X=0 +phy_tx_polarity_flip_fabric118.BCM8879X=1 +phy_tx_polarity_flip_fabric119.BCM8879X=0 -phy_tx_polarity_flip_fabric120.BCM8879X=1 -phy_tx_polarity_flip_fabric121.BCM8879X=0 -phy_tx_polarity_flip_fabric122.BCM8879X=1 -phy_tx_polarity_flip_fabric123.BCM8879X=0 +phy_tx_polarity_flip_fabric120.BCM8879X=0 +phy_tx_polarity_flip_fabric121.BCM8879X=1 +phy_tx_polarity_flip_fabric122.BCM8879X=0 +phy_tx_polarity_flip_fabric123.BCM8879X=1 -phy_tx_polarity_flip_fabric124.BCM8879X=1 -phy_tx_polarity_flip_fabric125.BCM8879X=0 -phy_tx_polarity_flip_fabric126.BCM8879X=1 -phy_tx_polarity_flip_fabric127.BCM8879X=0 +phy_tx_polarity_flip_fabric124.BCM8879X=0 +phy_tx_polarity_flip_fabric125.BCM8879X=1 +phy_tx_polarity_flip_fabric126.BCM8879X=0 +phy_tx_polarity_flip_fabric127.BCM8879X=1 -phy_tx_polarity_flip_fabric128.BCM8879X=0 -phy_tx_polarity_flip_fabric129.BCM8879X=1 -phy_tx_polarity_flip_fabric130.BCM8879X=0 -phy_tx_polarity_flip_fabric131.BCM8879X=1 +phy_tx_polarity_flip_fabric128.BCM8879X=1 +phy_tx_polarity_flip_fabric129.BCM8879X=0 +phy_tx_polarity_flip_fabric130.BCM8879X=1 +phy_tx_polarity_flip_fabric131.BCM8879X=0 phy_tx_polarity_flip_fabric132.BCM8879X=0 phy_tx_polarity_flip_fabric133.BCM8879X=1 phy_tx_polarity_flip_fabric134.BCM8879X=0 phy_tx_polarity_flip_fabric135.BCM8879X=1 -phy_tx_polarity_flip_fabric136.BCM8879X=0 +phy_tx_polarity_flip_fabric136.BCM8879X=1 phy_tx_polarity_flip_fabric137.BCM8879X=0 phy_tx_polarity_flip_fabric138.BCM8879X=1 -phy_tx_polarity_flip_fabric139.BCM8879X=1 +phy_tx_polarity_flip_fabric139.BCM8879X=0 phy_tx_polarity_flip_fabric140.BCM8879X=0 phy_tx_polarity_flip_fabric141.BCM8879X=1 @@ -704,39 +706,39 @@ phy_tx_polarity_flip_fabric142.BCM8879X=0 phy_tx_polarity_flip_fabric143.BCM8879X=1 phy_tx_polarity_flip_fabric144.BCM8879X=0 -phy_tx_polarity_flip_fabric145.BCM8879X=0 -phy_tx_polarity_flip_fabric146.BCM8879X=1 +phy_tx_polarity_flip_fabric145.BCM8879X=1 +phy_tx_polarity_flip_fabric146.BCM8879X=0 phy_tx_polarity_flip_fabric147.BCM8879X=1 -phy_tx_polarity_flip_fabric148.BCM8879X=0 -phy_tx_polarity_flip_fabric149.BCM8879X=1 -phy_tx_polarity_flip_fabric150.BCM8879X=0 -phy_tx_polarity_flip_fabric151.BCM8879X=1 +phy_tx_polarity_flip_fabric148.BCM8879X=1 +phy_tx_polarity_flip_fabric149.BCM8879X=0 +phy_tx_polarity_flip_fabric150.BCM8879X=1 +phy_tx_polarity_flip_fabric151.BCM8879X=0 phy_tx_polarity_flip_fabric152.BCM8879X=0 phy_tx_polarity_flip_fabric153.BCM8879X=1 phy_tx_polarity_flip_fabric154.BCM8879X=0 phy_tx_polarity_flip_fabric155.BCM8879X=1 -phy_tx_polarity_flip_fabric156.BCM8879X=0 +phy_tx_polarity_flip_fabric156.BCM8879X=1 phy_tx_polarity_flip_fabric157.BCM8879X=0 -phy_tx_polarity_flip_fabric158.BCM8879X=0 +phy_tx_polarity_flip_fabric158.BCM8879X=1 phy_tx_polarity_flip_fabric159.BCM8879X=0 -phy_tx_polarity_flip_fabric160.BCM8879X=1 +phy_tx_polarity_flip_fabric160.BCM8879X=0 phy_tx_polarity_flip_fabric161.BCM8879X=1 phy_tx_polarity_flip_fabric162.BCM8879X=0 -phy_tx_polarity_flip_fabric163.BCM8879X=0 +phy_tx_polarity_flip_fabric163.BCM8879X=1 phy_tx_polarity_flip_fabric164.BCM8879X=0 -phy_tx_polarity_flip_fabric165.BCM8879X=0 +phy_tx_polarity_flip_fabric165.BCM8879X=1 phy_tx_polarity_flip_fabric166.BCM8879X=0 -phy_tx_polarity_flip_fabric167.BCM8879X=0 +phy_tx_polarity_flip_fabric167.BCM8879X=1 -phy_tx_polarity_flip_fabric168.BCM8879X=1 +phy_tx_polarity_flip_fabric168.BCM8879X=0 phy_tx_polarity_flip_fabric169.BCM8879X=1 phy_tx_polarity_flip_fabric170.BCM8879X=0 -phy_tx_polarity_flip_fabric171.BCM8879X=0 +phy_tx_polarity_flip_fabric171.BCM8879X=1 phy_tx_polarity_flip_fabric172.BCM8879X=1 phy_tx_polarity_flip_fabric173.BCM8879X=0 @@ -744,25 +746,410 @@ phy_tx_polarity_flip_fabric174.BCM8879X=1 phy_tx_polarity_flip_fabric175.BCM8879X=0 phy_tx_polarity_flip_fabric176.BCM8879X=0 -phy_tx_polarity_flip_fabric177.BCM8879X=0 -phy_tx_polarity_flip_fabric178.BCM8879X=1 +phy_tx_polarity_flip_fabric177.BCM8879X=1 +phy_tx_polarity_flip_fabric178.BCM8879X=0 phy_tx_polarity_flip_fabric179.BCM8879X=1 -phy_tx_polarity_flip_fabric180.BCM8879X=0 +phy_tx_polarity_flip_fabric180.BCM8879X=1 phy_tx_polarity_flip_fabric181.BCM8879X=0 -phy_tx_polarity_flip_fabric182.BCM8879X=0 +phy_tx_polarity_flip_fabric182.BCM8879X=1 phy_tx_polarity_flip_fabric183.BCM8879X=0 -phy_tx_polarity_flip_fabric184.BCM8879X=1 -phy_tx_polarity_flip_fabric185.BCM8879X=0 -phy_tx_polarity_flip_fabric186.BCM8879X=1 -phy_tx_polarity_flip_fabric187.BCM8879X=0 +phy_tx_polarity_flip_fabric184.BCM8879X=0 +phy_tx_polarity_flip_fabric185.BCM8879X=1 +phy_tx_polarity_flip_fabric186.BCM8879X=0 +phy_tx_polarity_flip_fabric187.BCM8879X=1 -phy_tx_polarity_flip_fabric188.BCM8879X=1 -phy_tx_polarity_flip_fabric189.BCM8879X=0 +phy_tx_polarity_flip_fabric188.BCM8879X=0 +phy_tx_polarity_flip_fabric189.BCM8879X=1 phy_tx_polarity_flip_fabric190.BCM8879X=0 phy_tx_polarity_flip_fabric191.BCM8879X=1 +port_init_cl72_0=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 +port_init_cl72_19=0 +port_init_cl72_20=0 +port_init_cl72_21=0 +port_init_cl72_22=0 +port_init_cl72_23=0 +port_init_cl72_24=0 +port_init_cl72_25=0 +port_init_cl72_26=0 +port_init_cl72_27=0 +port_init_cl72_28=0 +port_init_cl72_29=0 +port_init_cl72_30=0 +port_init_cl72_31=0 +port_init_cl72_32=0 +port_init_cl72_33=0 +port_init_cl72_34=0 +port_init_cl72_35=0 +port_init_cl72_36=0 +port_init_cl72_37=0 +port_init_cl72_38=0 +port_init_cl72_39=0 +port_init_cl72_40=0 +port_init_cl72_41=0 +port_init_cl72_42=0 +port_init_cl72_43=0 +port_init_cl72_44=0 +port_init_cl72_45=0 +port_init_cl72_46=0 +port_init_cl72_47=0 +port_init_cl72_48=0 +port_init_cl72_49=0 +port_init_cl72_50=0 +port_init_cl72_51=0 +port_init_cl72_52=0 +port_init_cl72_53=0 +port_init_cl72_54=0 +port_init_cl72_55=0 +port_init_cl72_56=0 +port_init_cl72_57=0 +port_init_cl72_58=0 +port_init_cl72_59=0 +port_init_cl72_60=0 +port_init_cl72_61=0 +port_init_cl72_62=0 +port_init_cl72_63=0 +port_init_cl72_64=0 +port_init_cl72_65=0 +port_init_cl72_66=0 +port_init_cl72_67=0 +port_init_cl72_68=0 +port_init_cl72_69=0 +port_init_cl72_70=0 +port_init_cl72_71=0 +port_init_cl72_72=0 +port_init_cl72_73=0 +port_init_cl72_74=0 +port_init_cl72_75=0 +port_init_cl72_76=0 +port_init_cl72_77=0 +port_init_cl72_78=0 +port_init_cl72_79=0 +port_init_cl72_80=0 +port_init_cl72_81=0 +port_init_cl72_82=0 +port_init_cl72_83=0 +port_init_cl72_84=0 +port_init_cl72_85=0 +port_init_cl72_86=0 +port_init_cl72_87=0 +port_init_cl72_88=0 +port_init_cl72_89=0 +port_init_cl72_90=0 +port_init_cl72_91=0 +port_init_cl72_92=0 +port_init_cl72_93=0 +port_init_cl72_94=0 +port_init_cl72_95=0 +port_init_cl72_96=0 +port_init_cl72_97=0 +port_init_cl72_98=0 +port_init_cl72_99=0 +port_init_cl72_100=0 +port_init_cl72_101=0 +port_init_cl72_102=0 +port_init_cl72_103=0 +port_init_cl72_104=0 +port_init_cl72_105=0 +port_init_cl72_106=0 +port_init_cl72_107=0 +port_init_cl72_108=0 +port_init_cl72_109=0 +port_init_cl72_110=0 +port_init_cl72_111=0 +port_init_cl72_112=0 +port_init_cl72_113=0 +port_init_cl72_114=0 +port_init_cl72_115=0 +port_init_cl72_116=0 +port_init_cl72_117=0 +port_init_cl72_118=0 +port_init_cl72_119=0 +port_init_cl72_120=0 +port_init_cl72_121=0 +port_init_cl72_122=0 +port_init_cl72_123=0 +port_init_cl72_124=0 +port_init_cl72_125=0 +port_init_cl72_126=0 +port_init_cl72_127=0 +port_init_cl72_128=0 +port_init_cl72_129=0 +port_init_cl72_130=0 +port_init_cl72_131=0 +port_init_cl72_132=0 +port_init_cl72_133=0 +port_init_cl72_134=0 +port_init_cl72_135=0 +port_init_cl72_136=0 +port_init_cl72_137=0 +port_init_cl72_138=0 +port_init_cl72_139=0 +port_init_cl72_140=0 +port_init_cl72_141=0 +port_init_cl72_142=0 +port_init_cl72_143=0 +port_init_cl72_144=0 +port_init_cl72_145=0 +port_init_cl72_146=0 +port_init_cl72_147=0 +port_init_cl72_148=0 +port_init_cl72_149=0 +port_init_cl72_150=0 +port_init_cl72_151=0 +port_init_cl72_152=0 +port_init_cl72_153=0 +port_init_cl72_154=0 +port_init_cl72_155=0 +port_init_cl72_156=0 +port_init_cl72_157=0 +port_init_cl72_158=0 +port_init_cl72_159=0 +port_init_cl72_160=0 +port_init_cl72_161=0 +port_init_cl72_162=0 +port_init_cl72_163=0 +port_init_cl72_164=0 +port_init_cl72_165=0 +port_init_cl72_166=0 +port_init_cl72_167=0 +port_init_cl72_168=0 +port_init_cl72_169=0 +port_init_cl72_170=0 +port_init_cl72_171=0 +port_init_cl72_172=0 +port_init_cl72_173=0 +port_init_cl72_174=0 +port_init_cl72_175=0 +port_init_cl72_176=0 +port_init_cl72_177=0 +port_init_cl72_178=0 +port_init_cl72_179=0 +port_init_cl72_180=0 +port_init_cl72_181=0 +port_init_cl72_182=0 +port_init_cl72_183=0 +port_init_cl72_184=0 +port_init_cl72_185=0 +port_init_cl72_186=0 +port_init_cl72_187=0 +port_init_cl72_188=0 +port_init_cl72_189=0 +port_init_cl72_190=0 +port_init_cl72_191=0 + +serdes_tx_taps_0.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_1.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_2.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_3.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_4.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_5.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_6.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_7.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_8.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_9.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_10.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_11.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_12.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_13.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_14.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_15.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_16.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_17.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_18.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_19.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_20.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_21.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_22.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_23.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_24.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_25.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_26.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_27.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_28.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_29.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_30.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_31.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_32.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_33.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_34.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_35.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_36.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_37.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_38.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_39.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_40.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_41.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_42.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_43.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_44.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_45.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_46.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_47.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_48.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_49.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_50.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_51.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_52.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_53.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_54.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_55.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_56.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_57.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_58.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_59.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_60.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_61.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_62.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_63.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_64.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_65.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_66.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_67.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_68.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_69.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_70.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_71.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_72.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_73.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_74.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_75.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_76.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_77.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_78.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_79.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_80.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_81.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_82.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_83.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_84.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_85.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_86.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_87.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_88.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_89.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_90.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_91.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_92.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_93.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_94.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_95.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_96.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_97.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_98.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_99.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_100.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_101.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_102.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_103.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_104.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_105.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_106.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_107.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_108.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_109.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_110.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_111.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_112.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_113.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_114.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_115.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_116.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_117.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_118.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_119.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_120.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_121.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_122.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_123.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_124.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_125.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_126.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_127.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_128.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_129.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_130.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_131.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_132.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_133.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_134.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_135.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_136.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_137.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_138.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_139.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_140.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_141.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_142.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_143.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_144.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_145.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_146.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_147.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_148.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_149.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_150.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_151.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_152.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_153.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_154.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_155.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_156.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_157.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_158.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_159.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_160.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_161.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_162.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_163.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_164.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_165.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_166.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_167.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_168.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_169.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_170.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_171.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_172.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_173.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_174.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_175.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_176.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_177.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_178.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_179.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_180.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_181.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_182.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_183.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_184.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_185.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_186.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_187.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_188.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_189.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_190.BCM8879X=pam4:-24:132:-12:0:0:0 +serdes_tx_taps_191.BCM8879X=pam4:-24:132:-12:0:0:0 serdes_lane_config_channel_mode_0.0=force_nr serdes_lane_config_channel_mode_1.0=force_nr 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 ec96ac39ae09..4e24bb3e8d92 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 @@ -9,6 +9,19 @@ "name": "FPGA1" } ], + "watchdog": { + "disarm": false + }, + "get_module_attributes": { + "model": false, + "serial": false, + "base_mac": false, + "system_eeprom_info": false + }, + "thermal_temperature": { + "minimum": 0, + "maximum": 110 + }, "fans": [], "fan_drawers": [ { @@ -16,7 +29,8 @@ "num_fans": 1, "fans": [ { - "name": "Fan0" + "name": "Fan0", + "speed": { "controllable": false } } ] }, @@ -25,7 +39,8 @@ "num_fans": 1, "fans": [ { - "name": "Fan1" + "name": "Fan1", + "speed": { "controllable": false } } ] }, @@ -34,7 +49,8 @@ "num_fans": 1, "fans": [ { - "name": "Fan2" + "name": "Fan2", + "speed": { "controllable": false } } ] }, @@ -43,7 +59,8 @@ "num_fans": 1, "fans": [ { - "name": "Fan3" + "name": "Fan3", + "speed": { "controllable": false } } ] } @@ -113,136 +130,184 @@ ], "thermals": [ { - "name": "temp_1" + "name": "temp_1(fan)", + "controllable": false }, { - "name": "temp_2" + "name": "temp_2", + "controllable": false }, { - "name": "temp_3(fan)" + "name": "temp_3", + "controllable": false }, { - "name": "temp_4(fan)" + "name": "temp_4(fan)", + "controllable": false }, { - "name": "sfm1_1(fan)" + "name": "temp_5(fan)", + "controllable": false }, { - "name": "sfm1_2" + "name": "sfm1_1(fan)", + "controllable": false }, { - "name": "sfm1_3" + "name": "sfm1_2", + "controllable": false }, { - "name": "sfm1_4" + "name": "sfm1_3", + "controllable": false }, { - "name": "sfm1_5" + "name": "sfm1_4(fan)", + "controllable": false }, { - "name": "sfm2_1(fan)" + "name": "sfm1_5(fan)", + "controllable": false }, { - "name": "sfm2_2" + "name": "sfm2_1(fan)", + "controllable": false }, { - "name": "sfm2_3" + "name": "sfm2_2", + "controllable": false }, { - "name": "sfm2_4" + "name": "sfm2_3", + "controllable": false }, { - "name": "sfm2_5" + "name": "sfm2_4(fan)", + "controllable": false }, { - "name": "sfm3_1(fan)" + "name": "sfm2_5(fan)", + "controllable": false }, { - "name": "sfm3_2" + "name": "sfm3_1(fan)", + "controllable": false }, { - "name": "sfm3_3" + "name": "sfm3_2", + "controllable": false }, { - "name": "sfm3_4" + "name": "sfm3_3", + "controllable": false }, { - "name": "sfm3_5" + "name": "sfm3_4(fan)", + "controllable": false }, { - "name": "sfm4_1(fan)" + "name": "sfm3_5(fan)", + "controllable": false }, { - "name": "sfm4_2" + "name": "sfm4_1(fan)", + "controllable": false }, { - "name": "sfm4_3" + "name": "sfm4_2", + "controllable": false }, { - "name": "sfm4_4" + "name": "sfm4_3", + "controllable": false }, { - "name": "sfm4_5" + "name": "sfm4_4(fan)", + "controllable": false }, { - "name": "sfm5_1(fan)" + "name": "sfm4_5(fan)", + "controllable": false }, { - "name": "sfm5_2" + "name": "sfm5_1(fan)", + "controllable": false }, { - "name": "sfm5_3" + "name": "sfm5_2", + "controllable": false }, { - "name": "sfm5_4" + "name": "sfm5_3", + "controllable": false }, { - "name": "sfm5_5" + "name": "sfm5_4(fan)", + "controllable": false }, { - "name": "sfm6_1(fan)" + "name": "sfm5_5(fan)", + "controllable": false }, { - "name": "sfm6_2" + "name": "sfm6_1(fan)", + "controllable": false }, { - "name": "sfm6_3" + "name": "sfm6_2", + "controllable": false }, { - "name": "sfm6_4" + "name": "sfm6_3", + "controllable": false }, { - "name": "sfm6_5" + "name": "sfm6_4(fan)", + "controllable": false }, { - "name": "sfm7_1(fan)" + "name": "sfm6_5(fan)", + "controllable": false }, { - "name": "sfm7_2" + "name": "sfm7_1(fan)", + "controllable": false }, { - "name": "sfm7_3" + "name": "sfm7_2", + "controllable": false }, { - "name": "sfm7_4" + "name": "sfm7_3", + "controllable": false }, { - "name": "sfm7_5" + "name": "sfm7_4(fan)", + "controllable": false }, { - "name": "sfm8_1(fan)" + "name": "sfm7_5(fan)", + "controllable": false }, { - "name": "sfm8_2" + "name": "sfm8_1(fan)", + "controllable": false }, { - "name": "sfm8_3" + "name": "sfm8_2", + "controllable": false + }, + { + "name": "sfm8_3", + "controllable": false }, { - "name": "sfm8_4" + "name": "sfm8_4(fan)", + "controllable": false }, { - "name": "sfm8_5" + "name": "sfm8_5(fan)", + "controllable": false } ], "sfps": [ diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/chassisdb.conf b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/chassisdb.conf index 26fefcd1827f..a2daf40b9fef 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/chassisdb.conf +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/chassisdb.conf @@ -1,4 +1,5 @@ start_chassis_db=1 -chassis_db_address=10.0.5.16 +chassis_db_address=10.6.0.100 lag_id_start=1 lag_id_end=512 +midplane_subnet=10.6.0.0/16 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 db906ccff28a..10a09a91e0e5 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 @@ -2,7 +2,7 @@ "options": [ { "key": "midplane_subnet", - "stringval": "10.0.5.0" + "stringval": "10.6.0.0/16" }, { "key": "midplane_monitor", 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 d128455d40fc..c5ff45d1848e 100755 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/platform_reboot +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/platform_reboot @@ -7,4 +7,6 @@ kick_date=`date -u` echo "last watchdog kick $kick_date" > /var/log/nokia-watchdog-last.log rm -f /sys/firmware/efi/efivars/dump-* sync +echo "Rebooting all Linecards" +python3 -c 'import sonic_platform.platform; platform_chassis = sonic_platform.platform.Platform().get_chassis(); platform_chassis.reboot_imms()' /sbin/reboot diff --git a/device/quanta/x86_64-quanta_ix7_rglbmc-r0/Quanta-IX7-32X/td3-ix7-32x100G.config.bcm b/device/quanta/x86_64-quanta_ix7_rglbmc-r0/Quanta-IX7-32X/td3-ix7-32x100G.config.bcm index 43ccba2a4956..d3ac8bbf1f23 100644 --- a/device/quanta/x86_64-quanta_ix7_rglbmc-r0/Quanta-IX7-32X/td3-ix7-32x100G.config.bcm +++ b/device/quanta/x86_64-quanta_ix7_rglbmc-r0/Quanta-IX7-32X/td3-ix7-32x100G.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ #polarity/lanemap is using TH2 style. core_clock_frequency=1525 dpp_clock_ratio=2:3 diff --git a/device/quanta/x86_64-quanta_ix8_rglbmc-r0/Quanta-IX8-56X/td3-ix8-48x25G+8x100G.config.bcm b/device/quanta/x86_64-quanta_ix8_rglbmc-r0/Quanta-IX8-56X/td3-ix8-48x25G+8x100G.config.bcm index 06ff6dc80037..25eaf07dc82a 100644 --- a/device/quanta/x86_64-quanta_ix8_rglbmc-r0/Quanta-IX8-56X/td3-ix8-48x25G+8x100G.config.bcm +++ b/device/quanta/x86_64-quanta_ix8_rglbmc-r0/Quanta-IX8-56X/td3-ix8-48x25G+8x100G.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ core_clock_frequency=1525 dpp_clock_ratio=2:3 mem_cache_enable=0 diff --git a/device/quanta/x86_64-quanta_ix8c_bwde-r0/Quanta-IX8C-56X/td3-ix8c-48x25G+8x100G.config.bcm b/device/quanta/x86_64-quanta_ix8c_bwde-r0/Quanta-IX8C-56X/td3-ix8c-48x25G+8x100G.config.bcm index bf2248fbe443..aa8c6d02c57d 100644 --- a/device/quanta/x86_64-quanta_ix8c_bwde-r0/Quanta-IX8C-56X/td3-ix8c-48x25G+8x100G.config.bcm +++ b/device/quanta/x86_64-quanta_ix8c_bwde-r0/Quanta-IX8C-56X/td3-ix8c-48x25G+8x100G.config.bcm @@ -1,4 +1,4 @@ -sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_issu/b870.6.4.1/ +sai_load_hw_config=/etc/bcm/flex/bcm56870_a0_premium_issu/b870.6.4.1/ bcm_tunnel_term_compatible_mode=1 core_clock_frequency=1525 dpp_clock_ratio=2:3 diff --git a/device/virtual/x86_64-kvm_x86_64-r0/pmon_daemon_control.json b/device/virtual/x86_64-kvm_x86_64-r0/pmon_daemon_control.json index 101db0ffea1a..35fd93caadcd 100644 --- a/device/virtual/x86_64-kvm_x86_64-r0/pmon_daemon_control.json +++ b/device/virtual/x86_64-kvm_x86_64-r0/pmon_daemon_control.json @@ -4,5 +4,6 @@ "skip_pcied": true, "skip_psud": true, "skip_syseepromd": true, - "skip_thermalctld": true + "skip_thermalctld": true, + "skip_ycabled": false } diff --git a/device/wnc/x86_64-wnc_osw1800-r0/OSW1800-48x6q/switch-tna-sai.conf b/device/wnc/x86_64-wnc_osw1800-r0/OSW1800-48x6q/switch-tna-sai.conf index 7cb3ddc48fc9..03b0924d4339 100644 --- a/device/wnc/x86_64-wnc_osw1800-r0/OSW1800-48x6q/switch-tna-sai.conf +++ b/device/wnc/x86_64-wnc_osw1800-r0/OSW1800-48x6q/switch-tna-sai.conf @@ -1,17 +1,9 @@ { - "instance": 0, "chip_list": [ { - "id": "asic-0", "chip_family": "Tofino", - "instance": 0, - "pcie_sysfs_prefix": "/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.0", - "pcie_domain": 0, - "pcie_bus": 5, - "pcie_fn": 0, - "pcie_dev": 0, - "pcie_int_mode": 1, - "sds_fw_path": "share/tofino_sds_fw/avago/firmware" + "sds_fw_path": "share/tofino_sds_fw/avago/firmware", + "instance": 0 } ], "p4_devices": [ @@ -28,7 +20,6 @@ } ], "program-name": "switch", - "sai": "lib/libsai.so", "bfrt-config": "share/switch/bf-rt.json", "model_json_path" : "share/switch/aug_model.json", "switchapi_port_add": false, @@ -36,5 +27,13 @@ } ] } + ], + "switch_options": [ + { + "device-id": 0, + "model_json_path": "share/switch/aug_model.json", + "non_default_port_ppgs": 5, + "switchapi_port_add": false + } ] } diff --git a/dockers/docker-base-bullseye/Dockerfile.j2 b/dockers/docker-base-bullseye/Dockerfile.j2 index 3ac14a4841c4..cae555174174 100644 --- a/dockers/docker-base-bullseye/Dockerfile.j2 +++ b/dockers/docker-base-bullseye/Dockerfile.j2 @@ -1,10 +1,11 @@ +{% set prefix = DEFAULT_CONTAINER_REGISTRY %} {% from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %} {% if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/debian-debootstrap:armhf-bullseye +FROM {{ prefix }}multiarch/debian-debootstrap:armhf-bullseye {% elif CONFIGURED_ARCH == "arm64" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/debian-debootstrap:arm64-bullseye +FROM {{ prefix }}multiarch/debian-debootstrap:arm64-bullseye {% else %} -FROM {{DOCKER_BASE_ARCH}}/debian:bullseye +FROM {{ prefix }}{{DOCKER_BASE_ARCH}}/debian:bullseye {% endif %} # Clean documentation in FROM image @@ -101,7 +102,7 @@ RUN apt-get -y purge \ RUN apt-get clean -y && \ apt-get autoclean -y && \ apt-get autoremove -y && \ - rm -rf /var/lib/apt/lists/* /tmp/* + rm -rf /var/lib/apt/lists/* /tmp/* ~/.cache COPY ["etc/rsyslog.conf", "/etc/rsyslog.conf"] COPY ["etc/rsyslog.d/*", "/etc/rsyslog.d/"] diff --git a/dockers/docker-base-buster/Dockerfile.j2 b/dockers/docker-base-buster/Dockerfile.j2 index ac3fd7743e77..52c784e9a7fe 100644 --- a/dockers/docker-base-buster/Dockerfile.j2 +++ b/dockers/docker-base-buster/Dockerfile.j2 @@ -1,10 +1,11 @@ +{% set prefix = DEFAULT_CONTAINER_REGISTRY %} {% from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %} {% if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/debian-debootstrap:armhf-buster +FROM {{ prefix }}multiarch/debian-debootstrap:armhf-buster {% elif CONFIGURED_ARCH == "arm64" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/debian-debootstrap:arm64-buster +FROM {{ prefix }}multiarch/debian-debootstrap:arm64-buster {% else %} -FROM {{DOCKER_BASE_ARCH}}/debian:buster +FROM {{ prefix }}{{DOCKER_BASE_ARCH}}/debian:buster {% endif %} # Clean documentation in FROM image @@ -120,7 +121,7 @@ RUN apt-get -y purge \ RUN apt-get clean -y && \ apt-get autoclean -y && \ apt-get autoremove -y && \ - rm -rf /var/lib/apt/lists/* /tmp/* + rm -rf /var/lib/apt/lists/* /tmp/* ~/.cache/ COPY ["etc/rsyslog.conf", "/etc/rsyslog.conf"] COPY ["etc/rsyslog.d/*", "/etc/rsyslog.d/"] diff --git a/dockers/docker-base-stretch/Dockerfile.j2 b/dockers/docker-base-stretch/Dockerfile.j2 index b77814bb2820..5603dc502792 100644 --- a/dockers/docker-base-stretch/Dockerfile.j2 +++ b/dockers/docker-base-stretch/Dockerfile.j2 @@ -1,10 +1,11 @@ +{% set prefix = DEFAULT_CONTAINER_REGISTRY %} {% from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %} {% if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/debian-debootstrap:armhf-stretch +FROM {{ prefix }}multiarch/debian-debootstrap:armhf-stretch {% elif CONFIGURED_ARCH == "arm64" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/debian-debootstrap:arm64-stretch +FROM {{ prefix }}multiarch/debian-debootstrap:arm64-stretch {% else %} -FROM {{DOCKER_BASE_ARCH}}/debian:stretch +FROM {{ prefix }}{{DOCKER_BASE_ARCH}}/debian:stretch {% endif %} # Clean documentation in FROM image diff --git a/dockers/docker-base/Dockerfile.j2 b/dockers/docker-base/Dockerfile.j2 index 616a4cde7aff..15df3fe8a754 100644 --- a/dockers/docker-base/Dockerfile.j2 +++ b/dockers/docker-base/Dockerfile.j2 @@ -1,9 +1,10 @@ +{% set prefix = DEFAULT_CONTAINER_REGISTRY %} {% if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/debian-debootstrap:armhf-jessie +FROM {{ prefix }}multiarch/debian-debootstrap:armhf-jessie {% elif CONFIGURED_ARCH == "arm64" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/debian-debootstrap:arm64-jessie +FROM {{ prefix }}multiarch/debian-debootstrap:arm64-jessie {% else %} -FROM {{DOCKER_BASE_ARCH}}/debian:jessie +FROM {{ prefix }}{{DOCKER_BASE_ARCH}}/debian:jessie {% endif %} ## Remove retired jessie-updates repo diff --git a/dockers/docker-config-engine-bullseye/Dockerfile.j2 b/dockers/docker-config-engine-bullseye/Dockerfile.j2 index 84785d0669f1..9d0ca97c7604 100644 --- a/dockers/docker-config-engine-bullseye/Dockerfile.j2 +++ b/dockers/docker-config-engine-bullseye/Dockerfile.j2 @@ -49,4 +49,4 @@ RUN apt-get purge -y \ apt-get clean -y && \ apt-get autoclean -y && \ apt-get autoremove -y && \ - rm -rf /debs /python-wheels + rm -rf /debs /python-wheels ~/.cache diff --git a/dockers/docker-config-engine-buster/Dockerfile.j2 b/dockers/docker-config-engine-buster/Dockerfile.j2 index 3022546a068c..1e7a64bfcd36 100644 --- a/dockers/docker-config-engine-buster/Dockerfile.j2 +++ b/dockers/docker-config-engine-buster/Dockerfile.j2 @@ -49,4 +49,4 @@ RUN apt-get purge -y \ apt-get clean -y && \ apt-get autoclean -y && \ apt-get autoremove -y && \ - rm -rf /debs /python-wheels + rm -rf /debs /python-wheels ~/.cache diff --git a/dockers/docker-database/Dockerfile.j2 b/dockers/docker-database/Dockerfile.j2 index aef22e24379c..f75d258222a0 100644 --- a/dockers/docker-database/Dockerfile.j2 +++ b/dockers/docker-database/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 +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 @@ -11,22 +11,7 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update # Install redis-server -{% if CONFIGURED_ARCH == "armhf" %} -RUN curl -k -o redis-tools_6.0.6-1~bpo10+1_armhf.deb "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" -RUN curl -k -o redis-server_6.0.6-1~bpo10+1_armhf.deb "https://sonicstorage.blob.core.windows.net/packages/redis/redis-server_6.0.6-1_bpo10+1_armhf.deb?sv=2015-04-05&sr=b&sig=xTdayvm0RBguxi9suyv855jKRjU%2FmKQ8nHuct4WSX%2FA%3D&se=2030-10-24T04%3A22%3A05Z&sp=r" -RUN dpkg -i redis-tools_6.0.6-1~bpo10+1_armhf.deb redis-server_6.0.6-1~bpo10+1_armhf.deb || apt-get install -f -RUN rm redis-tools_6.0.6-1~bpo10+1_armhf.deb redis-server_6.0.6-1~bpo10+1_armhf.deb -{% elif CONFIGURED_ARCH == "arm64" %} -RUN curl -o redis-tools_6.0.6-1~bpo10+1_arm64.deb "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" -RUN curl -o redis-server_6.0.6-1~bpo10+1_arm64.deb "https://sonicstorage.blob.core.windows.net/packages/redis/redis-server_6.0.6-1_bpo10+1_arm64.deb?sv=2015-04-05&sr=b&sig=622w2KzIKIjAaaA0Bz12MzU%2BUBzY2AiXFIFfuKNoKSk%3D&se=2030-10-24T04%3A21%3A44Z&sp=r" -RUN dpkg -i redis-tools_6.0.6-1~bpo10+1_arm64.deb redis-server_6.0.6-1~bpo10+1_arm64.deb || apt-get install -f -RUN rm redis-tools_6.0.6-1~bpo10+1_arm64.deb redis-server_6.0.6-1~bpo10+1_arm64.deb -{% else %} -RUN curl -o redis-tools_6.0.6-1~bpo10+1_amd64.deb "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" -RUN curl -o redis-server_6.0.6-1~bpo10+1_amd64.deb "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" -RUN dpkg -i redis-tools_6.0.6-1~bpo10+1_amd64.deb redis-server_6.0.6-1~bpo10+1_amd64.deb || apt-get install -f -RUN rm redis-tools_6.0.6-1~bpo10+1_amd64.deb redis-server_6.0.6-1~bpo10+1_amd64.deb -{% endif %} +RUN apt-get install -y redis-tools redis-server {% if docker_database_debs.strip() -%} # Copy locally-built Debian package dependencies diff --git a/dockers/docker-dhcp-relay/Dockerfile.j2 b/dockers/docker-dhcp-relay/Dockerfile.j2 index 2d2afd922471..f214edc8516c 100644 --- a/dockers/docker-dhcp-relay/Dockerfile.j2 +++ b/dockers/docker-dhcp-relay/Dockerfile.j2 @@ -30,7 +30,7 @@ RUN apt-get clean -y && \ COPY ["docker_init.sh", "start.sh", "/usr/bin/"] COPY ["docker-dhcp-relay.supervisord.conf.j2", "port-name-alias-map.txt.j2", "wait_for_intf.sh.j2", "/usr/share/sonic/templates/"] -COPY ["dhcp-relay.programs.j2", "dhcpv4-relay.agents.j2", "dhcpv6-relay.agents.j2", "dhcpv6-relay.monitors.j2", "/usr/share/sonic/templates/"] +COPY ["dhcp-relay.programs.j2", "dhcpv4-relay.agents.j2", "dhcpv6-relay.agents.j2", "dhcp-relay.monitors.j2", "/usr/share/sonic/templates/"] COPY ["files/supervisor-proc-exit-listener", "/usr/bin"] COPY ["critical_processes", "/etc/supervisor"] COPY ["cli", "/cli/"] diff --git a/dockers/docker-dhcp-relay/cli-plugin-tests/test_show_dhcpv6_helper.py b/dockers/docker-dhcp-relay/cli-plugin-tests/test_show_dhcpv6_helper.py index 1f079c5ac965..fcb15b98082d 100644 --- a/dockers/docker-dhcp-relay/cli-plugin-tests/test_show_dhcpv6_helper.py +++ b/dockers/docker-dhcp-relay/cli-plugin-tests/test_show_dhcpv6_helper.py @@ -34,7 +34,8 @@ def test_show_dhcpv6_helper(self, test_name, test_data, fs): fs.create_file(DBCONFIG_PATH) MockConfigDb.set_config_db(test_data["config_db"]) runner = CliRunner() - table = MockConfigDb.get_table(self, "DHCP_RELAY") + config_db = MockConfigDb() + table = config_db.get_table("DHCP_RELAY") result = show.get_data(table, "Vlan1000") assert result == expected_table diff --git a/dockers/docker-dhcp-relay/dhcpv6-relay.monitors.j2 b/dockers/docker-dhcp-relay/dhcp-relay.monitors.j2 similarity index 97% rename from dockers/docker-dhcp-relay/dhcpv6-relay.monitors.j2 rename to dockers/docker-dhcp-relay/dhcp-relay.monitors.j2 index 9f2d0f01b59f..ae11105ae3ba 100644 --- a/dockers/docker-dhcp-relay/dhcpv6-relay.monitors.j2 +++ b/dockers/docker-dhcp-relay/dhcp-relay.monitors.j2 @@ -59,8 +59,6 @@ command=/usr/sbin/dhcpmon -id {{ vlan_name }} {% if prefix | ipv4 %} -im {{ name }}{% endif -%} {% endfor %} {% endif %} -{% if relay_for_ipv4.flag %} -4{% endif %} -{% if relay_for_ipv6.flag %} -6{% endif %} priority=4 autostart=false diff --git a/dockers/docker-dhcp-relay/docker-dhcp-relay.supervisord.conf.j2 b/dockers/docker-dhcp-relay/docker-dhcp-relay.supervisord.conf.j2 index 664e1f36c05e..41a13dd496ad 100644 --- a/dockers/docker-dhcp-relay/docker-dhcp-relay.supervisord.conf.j2 +++ b/dockers/docker-dhcp-relay/docker-dhcp-relay.supervisord.conf.j2 @@ -65,6 +65,6 @@ dependent_startup_wait_for=rsyslogd:running {% include 'dhcpv6-relay.agents.j2' %} {% endfor %} -{% include 'dhcpv6-relay.monitors.j2' %} +{% include 'dhcp-relay.monitors.j2' %} {% endif %} {% endif %} diff --git a/dockers/docker-fpm-frr/base_image_files/TSA b/dockers/docker-fpm-frr/base_image_files/TSA index e96c76dd67b2..6b2ddb264834 100755 --- a/dockers/docker-fpm-frr/base_image_files/TSA +++ b/dockers/docker-fpm-frr/base_image_files/TSA @@ -1,3 +1,12 @@ #!/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 +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 176b10c684c8..3fed7bb644f5 100755 --- a/dockers/docker-fpm-frr/base_image_files/TSB +++ b/dockers/docker-fpm-frr/base_image_files/TSB @@ -1,3 +1,10 @@ #!/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 +fi + /usr/bin/TS TSB diff --git a/dockers/docker-fpm-frr/base_image_files/TSC b/dockers/docker-fpm-frr/base_image_files/TSC index 09d1409c50c7..12af5d621af7 100755 --- a/dockers/docker-fpm-frr/base_image_files/TSC +++ b/dockers/docker-fpm-frr/base_image_files/TSC @@ -3,3 +3,9 @@ /usr/bin/TS TSC portstat -p 5 + +if [[ "$(sonic-cfggen -d -v DEVICE_METADATA.localhost.subtype | tr [:upper:] [:lower:])" == *"dualtor"* ]] +then + echo + show mux status +fi diff --git a/dockers/docker-fpm-frr/frr/bgpd/templates/internal/peer-group.conf.j2 b/dockers/docker-fpm-frr/frr/bgpd/templates/internal/peer-group.conf.j2 index 0b15136c555a..e14094a652e5 100644 --- a/dockers/docker-fpm-frr/frr/bgpd/templates/internal/peer-group.conf.j2 +++ b/dockers/docker-fpm-frr/frr/bgpd/templates/internal/peer-group.conf.j2 @@ -1,14 +1,12 @@ ! ! template: bgpd/templates/internal/peer-group.conf.j2 -{% from "common/functions.conf.j2" import get_ipv4_loopback_address %} -{% from "common/functions.conf.j2" import get_ipv6_loopback_address %} ! neighbor INTERNAL_PEER_V4 peer-group neighbor INTERNAL_PEER_V6 peer-group address-family ipv4 {% if CONFIG_DB__DEVICE_METADATA['localhost']['switch_type'] == 'chassis-packet' %} - neighbor INTERNAL_PEER_V4 update-source {{ get_ipv4_loopback_address(CONFIG_DB__LOOPBACK_INTERFACE, "Loopback4096") | ip }} + neighbor INTERNAL_PEER_V4 update-source Loopback4096 {% elif CONFIG_DB__DEVICE_METADATA['localhost']['sub_role'] == 'BackEnd' %} neighbor INTERNAL_PEER_V4 route-reflector-client {% endif %} @@ -19,7 +17,7 @@ exit-address-family address-family ipv6 {% if CONFIG_DB__DEVICE_METADATA['localhost']['switch_type'] == 'chassis-packet' %} - neighbor INTERNAL_PEER_V6 update-source {{ get_ipv6_loopback_address(CONFIG_DB__LOOPBACK_INTERFACE, "Loopback4096") | ip }} + neighbor INTERNAL_PEER_V6 update-source Loopback4096 {% elif CONFIG_DB__DEVICE_METADATA['localhost']['sub_role'] == 'BackEnd' %} neighbor INTERNAL_PEER_V6 route-reflector-client {% endif %} diff --git a/dockers/docker-fpm-frr/frr/bgpd/templates/voq_chassis/instance.conf.j2 b/dockers/docker-fpm-frr/frr/bgpd/templates/voq_chassis/instance.conf.j2 index 1783b875ad2a..4f7bde5ddf1a 100644 --- a/dockers/docker-fpm-frr/frr/bgpd/templates/voq_chassis/instance.conf.j2 +++ b/dockers/docker-fpm-frr/frr/bgpd/templates/voq_chassis/instance.conf.j2 @@ -4,7 +4,11 @@ bgp bestpath as-path multipath-relax bgp bestpath peer-type multipath-relax ! - neighbor {{ neighbor_addr }} peer-group VOQ_CHASSIS_PEER +{% if neighbor_addr | ipv4 %} + neighbor {{ neighbor_addr }} peer-group VOQ_CHASSIS_V4_PEER +{% elif neighbor_addr | ipv6 %} + neighbor {{ neighbor_addr }} peer-group VOQ_CHASSIS_V6_PEER +{% endif %} neighbor {{ neighbor_addr }} remote-as {{ bgp_session['asn'] }} neighbor {{ neighbor_addr }} description {{ bgp_session['name'] }} neighbor {{ neighbor_addr }} timers 3 10 diff --git a/dockers/docker-fpm-frr/frr/bgpd/templates/voq_chassis/peer-group.conf.j2 b/dockers/docker-fpm-frr/frr/bgpd/templates/voq_chassis/peer-group.conf.j2 index 8266c0c82d7f..ec563b380cc6 100644 --- a/dockers/docker-fpm-frr/frr/bgpd/templates/voq_chassis/peer-group.conf.j2 +++ b/dockers/docker-fpm-frr/frr/bgpd/templates/voq_chassis/peer-group.conf.j2 @@ -1,22 +1,27 @@ ! ! template: bgpd/templates/voq_chassis/peer-group.conf.j2 ! - neighbor VOQ_CHASSIS_PEER peer-group + neighbor VOQ_CHASSIS_V4_PEER peer-group + neighbor VOQ_CHASSIS_V6_PEER peer-group address-family ipv4 {% if CONFIG_DB__DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %} - neighbor VOQ_CHASSIS_PEER allowas-in 1 + neighbor VOQ_CHASSIS_V4_PEER allowas-in 1 {% endif %} - neighbor VOQ_CHASSIS_PEER activate - neighbor VOQ_CHASSIS_PEER addpath-tx-all-paths - neighbor VOQ_CHASSIS_PEER soft-reconfiguration inbound + neighbor VOQ_CHASSIS_V4_PEER activate + neighbor VOQ_CHASSIS_V4_PEER addpath-tx-all-paths + neighbor VOQ_CHASSIS_V4_PEER soft-reconfiguration inbound + neighbor VOQ_CHASSIS_V4_PEER route-map FROM_VOQ_CHASSIS_V4_PEER in + neighbor VOQ_CHASSIS_V4_PEER route-map TO_VOQ_CHASSIS_V4_PEER out exit-address-family address-family ipv6 {% if CONFIG_DB__DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %} - neighbor VOQ_CHASSIS_PEER allowas-in 1 + neighbor VOQ_CHASSIS_V6_PEER allowas-in 1 {% endif %} - neighbor VOQ_CHASSIS_PEER activate - neighbor VOQ_CHASSIS_PEER addpath-tx-all-paths - neighbor VOQ_CHASSIS_PEER soft-reconfiguration inbound + neighbor VOQ_CHASSIS_V6_PEER activate + neighbor VOQ_CHASSIS_V6_PEER addpath-tx-all-paths + neighbor VOQ_CHASSIS_V6_PEER soft-reconfiguration inbound + neighbor VOQ_CHASSIS_V4_PEER route-map FROM_VOQ_CHASSIS_V6_PEER in + neighbor VOQ_CHASSIS_V4_PEER route-map TO_VOQ_CHASSIS_V6_PEER out exit-address-family ! ! end of template: bgpd/templates/voq_chassis/peer-group.conf.j2 diff --git a/dockers/docker-fpm-frr/frr/bgpd/templates/voq_chassis/policies.conf.j2 b/dockers/docker-fpm-frr/frr/bgpd/templates/voq_chassis/policies.conf.j2 index 4c853d4f3220..c26db7bde241 100644 --- a/dockers/docker-fpm-frr/frr/bgpd/templates/voq_chassis/policies.conf.j2 +++ b/dockers/docker-fpm-frr/frr/bgpd/templates/voq_chassis/policies.conf.j2 @@ -1,7 +1,18 @@ ! ! template: bgpd/templates/voq_chassis/policies.conf.j2 ! +route-map FROM_VOQ_CHASSIS_V4_PEER permit 100 ! +route-map TO_VOQ_CHASSIS_V4_PEER permit 100 +! +! +route-map FROM_VOQ_CHASSIS_V6_PEER permit 1 + set ipv6 next-hop prefer-global + on-match next +! +route-map FROM_VOQ_CHASSIS_V6_PEER permit 100 +! +route-map TO_VOQ_CHASSIS_V6_PEER permit 100 ! ! end of template: bgpd/templates/voq_chassis/policies.conf.j2 ! diff --git a/dockers/docker-lldp/lldpmgrd b/dockers/docker-lldp/lldpmgrd index a6eb84bcab93..9e85406d4510 100755 --- a/dockers/docker-lldp/lldpmgrd +++ b/dockers/docker-lldp/lldpmgrd @@ -30,6 +30,8 @@ VERSION = "1.0" SYSLOG_IDENTIFIER = "lldpmgrd" PORT_INIT_TIMEOUT = 300 +FAILED_CMD_TIMEOUT = 6 +RETRY_LIMIT = 5 class LldpManager(daemon_base.DaemonBase): @@ -41,7 +43,8 @@ class LldpManager(daemon_base.DaemonBase): state_db: Handle to Redis State database via swsscommon lib config_db: Handle to Redis Config database via swsscommon lib pending_cmds: Dictionary where key is port name, value is pending - LLDP configuration command to run + LLDP configuration command to run + and the last timestamp that this command was failed (used for retry mechanism) """ REDIS_TIMEOUT_MS = 0 @@ -58,6 +61,11 @@ class LldpManager(daemon_base.DaemonBase): self.REDIS_TIMEOUT_MS, False) + # Open a handle to the State database + self.state_db = swsscommon.DBConnector("STATE_DB", + self.REDIS_TIMEOUT_MS, + False) + self.pending_cmds = {} self.hostname = "None" self.mgmt_ip = "None" @@ -66,6 +74,7 @@ class LldpManager(daemon_base.DaemonBase): self.port_table = swsscommon.Table(self.config_db, swsscommon.CFG_PORT_TABLE_NAME) self.mgmt_table = swsscommon.Table(self.config_db, swsscommon.CFG_MGMT_INTERFACE_TABLE_NAME) self.app_port_table = swsscommon.Table(self.appl_db, swsscommon.APP_PORT_TABLE_NAME) + self.state_port_table = swsscommon.Table(self.state_db, swsscommon.STATE_PORT_TABLE_NAME) def update_hostname(self, hostname): cmd = "lldpcli configure system hostname {0}".format(hostname) @@ -99,32 +108,25 @@ class LldpManager(daemon_base.DaemonBase): def is_port_up(self, port_name): """ - Determine if a port is up or down by looking into the oper-status for the port in - PORT TABLE in the Application DB + Determine if a port is up or down by looking into the netdev_oper_status for the port in + PORT TABLE in the State DB """ # Retrieve all entires for this port from the Port table - (status, fvp) = self.app_port_table.get(port_name) + (status, fvp) = self.state_port_table.get(port_name) if status: # Convert list of tuples to a dictionary port_table_dict = dict(fvp) # Get the oper-status for the port - if "oper_status" in port_table_dict: - port_oper_status = port_table_dict.get("oper_status") - self.log_info("Port name {} oper status: {}".format(port_name, port_oper_status)) + if "netdev_oper_status" in port_table_dict: + port_oper_status = port_table_dict.get("netdev_oper_status") return port_oper_status == "up" else: return False else: - # Retrieve PortInitDone entry from the Port table - (init_status, init_fvp) = self.port_table.get("PortInitDone") - # The initialization procedure is done, but don't have this port entry - if init_status: - self.log_error("Port '{}' not found in {} table in App DB".format( - port_name, swsscommon.APP_PORT_TABLE_NAME)) return False - def generate_pending_lldp_config_cmd_for_port(self, port_name): + def generate_pending_lldp_config_cmd_for_port(self, port_name, port_table_dict): """ For port `port_name`, look up the description and alias in the Config database, then form the appropriate lldpcli configuration command and run it. @@ -135,27 +137,16 @@ class LldpManager(daemon_base.DaemonBase): # asic-to-asic communication in VOQ based chassis system. We do not configure LLDP on these. if port_name.startswith(inband_prefix()): return - - # Retrieve all entires for this port from the Port table - (status, fvp) = self.port_table.get(port_name) - if status: - # Convert list of tuples to a dictionary - port_table_dict = dict(fvp) - - # Get the port alias. If None or empty string, use port name instead - port_alias = port_table_dict.get("alias") - if not port_alias: - self.log_info("Unable to retrieve port alias for port '{}'. Using port name instead.".format(port_name)) - port_alias = port_name - - # Get the port description. If None or empty string, we'll skip this configuration - port_desc = port_table_dict.get("description") - - else: - self.log_error("Port '{}' not found in {} table in Config DB. Using port name instead of port alias.".format( - port_name, swsscommon.CFG_PORT_TABLE_NAME)) + + # Get the port alias. If None or empty string, use port name instead + port_alias = port_table_dict.get("alias") + if not port_alias: + self.log_info("Unable to retrieve port alias for port '{}'. Using port name instead.".format(port_name)) port_alias = port_name - + + # Get the port description. If None or empty string, we'll skip this configuration + port_desc = port_table_dict.get("description") + lldpcli_cmd = "lldpcli configure ports {0} lldp portidsubtype local {1}".format(port_name, port_alias) # if there is a description available, also configure that @@ -166,17 +157,25 @@ class LldpManager(daemon_base.DaemonBase): # Add the command to our dictionary of pending commands, overwriting any # previous pending command for this port - self.pending_cmds[port_name] = lldpcli_cmd + self.pending_cmds[port_name] = { 'cmd': lldpcli_cmd, 'failed_count': 0} def process_pending_cmds(self): # List of port names (keys of elements) to delete from self.pending_cmds to_delete = [] - for (port_name, cmd) in self.pending_cmds.items(): - self.log_debug("Running command: '{}'".format(cmd)) + for (port_name, port_item) in self.pending_cmds.items(): + cmd = port_item['cmd'] - rc, stderr = run_cmd(self, cmd) + # check if linux port is up + if not self.is_port_up(port_name): + self.log_info("port %s is not up, continue"%port_name) + continue + + if 'failed_timestamp' in port_item and time.time()-port_item['failed_timestamp']= RETRY_LIMIT: + self.log_error("Command failed '{}': {} - command was failed {} times, disabling retry".format(cmd, stderr, RETRY_LIMIT+1)) + # not retrying again + to_delete.append(port_name) + else: + self.pending_cmds[port_name]['failed_count'] += 1 + self.pending_cmds[port_name]['failed_timestamp'] = time.time() + self.log_info("Command failed '{}': {} - cmd failed {} times, retrying again".format(cmd, stderr, self.pending_cmds[port_name]['failed_count'])) + # Delete all successful commands from self.pending_cmds for port_name in to_delete: self.pending_cmds.pop(port_name, None) @@ -268,10 +274,6 @@ class LldpManager(daemon_base.DaemonBase): sel = swsscommon.Select() - # Subscribe to PORT table notifications in the Config DB - sst_confdb = swsscommon.SubscriberStateTable(self.config_db, swsscommon.CFG_PORT_TABLE_NAME) - sel.addSelectable(sst_confdb) - # Subscribe to PORT table notifications in the App DB sst_appdb = swsscommon.SubscriberStateTable(self.appl_db, swsscommon.APP_PORT_TABLE_NAME) sel.addSelectable(sst_appdb) @@ -289,17 +291,6 @@ class LldpManager(daemon_base.DaemonBase): (state, c) = sel.select(SELECT_TIMEOUT_MS) if state == swsscommon.Select.OBJECT: - (key, op, fvp) = sst_confdb.pop() - if fvp: - fvp_dict = dict(fvp) - - # handle config change - if ("alias" in fvp_dict or "description" in fvp_dict) and (op in ["SET", "DEL"]): - if self.is_port_up(key): - self.generate_pending_lldp_config_cmd_for_port(key) - else: - self.pending_cmds.pop(key, None) - (key, op, fvp) = sst_mgmt_ip_confdb.pop() if key: self.lldp_process_mgmt_info_change(op, dict(fvp), key) @@ -310,15 +301,16 @@ class LldpManager(daemon_base.DaemonBase): (key, op, fvp) = sst_appdb.pop() if (key != "PortInitDone") and (key != "PortConfigDone"): - if fvp: - fvp_dict = dict(fvp) - - # handle port status change - if "oper_status" in fvp_dict: - if "up" in fvp_dict.get("oper_status"): - self.generate_pending_lldp_config_cmd_for_port(key) + if op == "SET": + if fvp: + if "up" in dict(fvp).get("oper_status",""): + self.generate_pending_lldp_config_cmd_for_port(key, dict(fvp)) else: self.pending_cmds.pop(key, None) + elif op == "DEL": + self.pending_cmds.pop(key, None) + else: + self.log_error("unknown operation") elif key == "PortInitDone": port_init_done = True diff --git a/dockers/docker-macsec/Dockerfile.j2 b/dockers/docker-macsec/Dockerfile.j2 index 0239d6529096..586983533e77 100644 --- a/dockers/docker-macsec/Dockerfile.j2 +++ b/dockers/docker-macsec/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 +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 diff --git a/dockers/docker-mux/Dockerfile.j2 b/dockers/docker-mux/Dockerfile.j2 index 66ec315f0809..f7e1ee3b4454 100755 --- a/dockers/docker-mux/Dockerfile.j2 +++ b/dockers/docker-mux/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 +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 diff --git a/dockers/docker-orchagent/Dockerfile.j2 b/dockers/docker-orchagent/Dockerfile.j2 index bf86e70d520f..ea4e0abbc2ef 100755 --- a/dockers/docker-orchagent/Dockerfile.j2 +++ b/dockers/docker-orchagent/Dockerfile.j2 @@ -40,7 +40,6 @@ RUN ln -s -f /usr/bin/gcc-8 /usr/bin/aarch64-linux-gnu-gcc # Dependencies of restore_neighbors.py RUN pip3 install \ - scapy==2.4.4 \ pyroute2==0.5.14 \ netifaces==0.10.9 @@ -57,6 +56,14 @@ RUN apt-get remove -y gcc-8 {{ install_debian_packages(docker_orchagent_debs.split(' ')) }} {%- endif %} +{% if docker_orchagent_whls.strip() -%} +# Copy locally-built Python wheel dependencies +{{ copy_files("python-wheels/", docker_orchagent_whls.split(' '), "/python-wheels/") }} + +# Install locally-built Python wheel dependencies +{{ install_python_wheels(docker_orchagent_whls.split(' ')) }} +{% endif %} + # Clean up RUN apt-get purge -y \ build-essential \ @@ -64,16 +71,20 @@ RUN apt-get purge -y \ apt-get clean -y && \ apt-get autoclean -y && \ apt-get autoremove -y && \ - rm -rf /debs + rm -rf /debs ~/.cache 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 ["enable_counters.py", "tunnel_packet_handler.py", "/usr/bin/"] -COPY ["docker-init.sh", "orchagent.sh", "swssconfig.sh", "buffermgrd.sh", "/usr/bin/"] +COPY ["orchagent.sh", "swssconfig.sh", "buffermgrd.sh", "/usr/bin/"] COPY ["files/supervisor-proc-exit-listener", "/usr/bin"] # Copy all Jinja2 template files into the templates folder COPY ["*.j2", "/usr/share/sonic/templates/"] +RUN sonic-cfggen -a "{\"ENABLE_ASAN\":\"{{ENABLE_ASAN}}\"}" -t /usr/share/sonic/templates/docker-init.j2 > /usr/bin/docker-init.sh +RUN rm -f /usr/share/sonic/templates/docker-init.j2 +RUN chmod 755 /usr/bin/docker-init.sh + ENTRYPOINT ["/usr/bin/docker-init.sh"] diff --git a/dockers/docker-orchagent/docker-init.sh b/dockers/docker-orchagent/docker-init.j2 similarity index 82% rename from dockers/docker-orchagent/docker-init.sh rename to dockers/docker-orchagent/docker-init.j2 index 86070ff24db9..5b3850613dac 100755 --- a/dockers/docker-orchagent/docker-init.sh +++ b/dockers/docker-orchagent/docker-init.j2 @@ -6,17 +6,24 @@ mkdir -p /etc/supervisor/conf.d/ CFGGEN_PARAMS=" \ -d \ +{% if ENABLE_ASAN == "y" %} + -a "{\"ENABLE_ASAN\":\"{{ENABLE_ASAN}}\"}" \ +{% endif %} -y /etc/sonic/constants.yml \ -t /usr/share/sonic/templates/switch.json.j2,/etc/swss/config.d/switch.json \ + -t /usr/share/sonic/templates/vxlan.json.j2,/etc/swss/config.d/vxlan.json \ -t /usr/share/sonic/templates/ipinip.json.j2,/etc/swss/config.d/ipinip.json \ -t /usr/share/sonic/templates/ports.json.j2,/etc/swss/config.d/ports.json \ -t /usr/share/sonic/templates/vlan_vars.j2 \ -t /usr/share/sonic/templates/ndppd.conf.j2,/etc/ndppd.conf \ -t /usr/share/sonic/templates/critical_processes.j2,/etc/supervisor/critical_processes \ -t /usr/share/sonic/templates/supervisord.conf.j2,/etc/supervisor/conf.d/supervisord.conf + -t /usr/share/sonic/templates/wait_for_link.sh.j2,/usr/bin/wait_for_link.sh \ " VLAN=$(sonic-cfggen $CFGGEN_PARAMS) +chmod +x /usr/bin/wait_for_link.sh + # Executed platform specific initialization tasks. if [ -x /usr/share/sonic/platform/platform-init ]; then /usr/share/sonic/platform/platform-init diff --git a/dockers/docker-orchagent/enable_counters.py b/dockers/docker-orchagent/enable_counters.py index 7d25643bba43..c45a931e0553 100755 --- a/dockers/docker-orchagent/enable_counters.py +++ b/dockers/docker-orchagent/enable_counters.py @@ -38,16 +38,18 @@ def enable_rates(): def enable_counters(): db = swsssdk.ConfigDBConnector() db.connect() - enable_counter_group(db, 'PORT') - enable_counter_group(db, 'RIF') - enable_counter_group(db, 'QUEUE') - enable_counter_group(db, 'PFCWD') - enable_counter_group(db, 'PG_WATERMARK') - enable_counter_group(db, 'PG_DROP') - enable_counter_group(db, 'QUEUE_WATERMARK') - enable_counter_group(db, 'BUFFER_POOL_WATERMARK') - enable_counter_group(db, 'PORT_BUFFER_DROP') - enable_counter_group(db, 'ACL') + default_enabled_counters = ['PORT', 'RIF', 'QUEUE', 'PFCWD', 'PG_WATERMARK', 'PG_DROP', + 'QUEUE_WATERMARK', 'BUFFER_POOL_WATERMARK', 'PORT_BUFFER_DROP', 'ACL'] + + # Enable those default counters + for key in default_enabled_counters: + enable_counter_group(db, key) + + # Set FLEX_COUNTER_DELAY_STATUS to false for those non-default counters + keys = db.get_keys('FLEX_COUNTER_TABLE') + for key in keys: + if key not in default_enabled_counters: + enable_counter_group(db, key) enable_rates() diff --git a/dockers/docker-orchagent/ndppd.conf b/dockers/docker-orchagent/ndppd.conf index b9dbc293ed2a..86297de94a45 100644 --- a/dockers/docker-orchagent/ndppd.conf +++ b/dockers/docker-orchagent/ndppd.conf @@ -6,4 +6,15 @@ autorestart=unexpected stdout_logfile=syslog stderr_logfile=syslog dependent_startup=true -dependent_startup_wait_for=vlanmgrd:running +dependent_startup_wait_for=wait_for_link:exited + +[program:wait_for_link] +command=/usr/bin/wait_for_link.sh +priority=7 +autostart=false +autorestart=false +startsecs=0 +stdout_logfile=syslog +stderr_logfile=syslog +dependent_startup=true +dependent_startup_wait_for=swssconfig:exited \ No newline at end of file diff --git a/dockers/docker-orchagent/orchagent.sh b/dockers/docker-orchagent/orchagent.sh index aaa047a42036..7585e4896cf4 100755 --- a/dockers/docker-orchagent/orchagent.sh +++ b/dockers/docker-orchagent/orchagent.sh @@ -5,6 +5,7 @@ SWSS_VARS_FILE=/usr/share/sonic/templates/swss_vars.j2 # Retrieve SWSS vars from sonic-cfggen SWSS_VARS=$(sonic-cfggen -d -y /etc/sonic/sonic_version.yml -t $SWSS_VARS_FILE) || exit 1 export platform=$(echo $SWSS_VARS | jq -r '.asic_type') +export sub_platform=$(echo $SWSS_VARS | jq -r '.asic_subtype') MAC_ADDRESS=$(echo $SWSS_VARS | jq -r '.mac') if [ "$MAC_ADDRESS" == "None" ] || [ -z "$MAC_ADDRESS" ]; then diff --git a/dockers/docker-orchagent/supervisord.conf.j2 b/dockers/docker-orchagent/supervisord.conf.j2 index 51ead0db7c3f..7cd31a113223 100644 --- a/dockers/docker-orchagent/supervisord.conf.j2 +++ b/dockers/docker-orchagent/supervisord.conf.j2 @@ -49,6 +49,9 @@ stdout_logfile=syslog 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" +{% endif %} {%- endif %} {% if is_fabric_asic == 0 %} @@ -61,6 +64,9 @@ stdout_logfile=syslog 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" +{% endif %} {%- endif %} [program:orchagent] @@ -72,6 +78,9 @@ stdout_logfile=syslog 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" +{% endif %} [program:swssconfig] command=/usr/bin/swssconfig.sh @@ -84,6 +93,9 @@ stdout_logfile=syslog 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" +{% endif %} {% if is_fabric_asic == 0 %} [program:restore_neighbors] @@ -111,6 +123,9 @@ stdout_logfile=syslog 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" +{% endif %} {%- endif %} {% if is_fabric_asic == 0 %} @@ -123,6 +138,9 @@ stdout_logfile=syslog 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" +{% endif %} {%- endif %} {% if is_fabric_asic == 0 %} @@ -135,6 +153,9 @@ stdout_logfile=syslog 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" +{% endif %} {%- endif %} {% if is_fabric_asic == 0 %} @@ -147,6 +168,9 @@ stdout_logfile=syslog 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" +{% endif %} {%- endif %} {% if is_fabric_asic == 0 %} @@ -159,6 +183,9 @@ stdout_logfile=syslog 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" +{% endif %} {%- endif %} {% if is_fabric_asic == 0 %} @@ -171,6 +198,9 @@ stdout_logfile=syslog 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" +{% endif %} {%- endif %} {% if is_fabric_asic == 0 %} @@ -183,6 +213,9 @@ stdout_logfile=syslog 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" +{% endif %} {%- endif %} {% if is_fabric_asic == 0 %} @@ -195,6 +228,9 @@ stdout_logfile=syslog 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" +{% endif %} {%- endif %} {% if is_fabric_asic == 0 %} @@ -207,6 +243,9 @@ stdout_logfile=syslog 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" +{% endif %} {%- endif %} {% if is_fabric_asic == 0 %} @@ -219,6 +258,9 @@ stdout_logfile=syslog 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" +{% endif %} {%- endif %} [program:enable_counters] @@ -241,6 +283,9 @@ stdout_logfile=syslog 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" +{% endif %} {%- endif %} {% if is_fabric_asic == 0 %} diff --git a/dockers/docker-orchagent/switch.json.j2 b/dockers/docker-orchagent/switch.json.j2 index fa0ef4b44ed7..30ad703bc2cf 100644 --- a/dockers/docker-orchagent/switch.json.j2 +++ b/dockers/docker-orchagent/switch.json.j2 @@ -3,7 +3,7 @@ {% set hash_seed = 0 %} {% set hash_seed_offset = 0 %} {% if DEVICE_METADATA.localhost.type %} -{% if "ToRRouter" in DEVICE_METADATA.localhost.type %} +{% if "ToRRouter" in DEVICE_METADATA.localhost.type or DEVICE_METADATA.localhost.type in ["EPMS", "MgmtTsToR"] %} {% set hash_seed = 0 %} {% elif "LeafRouter" in DEVICE_METADATA.localhost.type %} {% set hash_seed = 10 %} diff --git a/dockers/docker-orchagent/swssconfig.sh b/dockers/docker-orchagent/swssconfig.sh index 929e70769a69..701d44ca8a3c 100755 --- a/dockers/docker-orchagent/swssconfig.sh +++ b/dockers/docker-orchagent/swssconfig.sh @@ -58,7 +58,7 @@ if [[ "$SYSTEM_WARM_START" == "true" ]] || [[ "$SWSS_WARM_START" == "true" ]]; t exit 0 fi -SWSSCONFIG_ARGS="ipinip.json ports.json switch.json " +SWSSCONFIG_ARGS="ipinip.json ports.json switch.json vxlan.json" for file in $SWSSCONFIG_ARGS; do swssconfig /etc/swss/config.d/$file diff --git a/dockers/docker-orchagent/tunnel_packet_handler.py b/dockers/docker-orchagent/tunnel_packet_handler.py index 7d9f7f561260..682316eb6d49 100755 --- a/dockers/docker-orchagent/tunnel_packet_handler.py +++ b/dockers/docker-orchagent/tunnel_packet_handler.py @@ -9,15 +9,17 @@ """ import subprocess import time - from datetime import datetime from ipaddress import ip_interface + +from swsssdk import ConfigDBConnector, SonicV2Connector +from sonic_py_common import logger as log + from pyroute2 import IPRoute from scapy.layers.inet import IP from scapy.layers.inet6 import IPv6 from scapy.sendrecv import AsyncSniffer -from swsssdk import ConfigDBConnector, SonicV2Connector -from sonic_py_common import logger as log + logger = log.Logger() @@ -36,6 +38,10 @@ class TunnelPacketHandler(object): + """ + This class handles unroutable tunnel packets that are trapped + to the CPU from the ASIC. + """ def __init__(self): self.config_db = ConfigDBConnector() @@ -45,6 +51,10 @@ def __init__(self): self._portchannel_intfs = None self.up_portchannels = None self.netlink_api = IPRoute() + self.sniffer = None + self.self_ip = '' + self.packet_filter = '' + self.sniff_intfs = [] @property def portchannel_intfs(self): @@ -68,19 +78,32 @@ def portchannel_intfs(self): return self._portchannel_intfs - def get_portchannel_index_mapping(self): + def get_intf_name(self, msg): + """ + Gets the interface name for a netlink msg + + Returns: + (str) The interface name, or the empty string if no interface + name was found + """ + attr_list = msg.get('attrs', list()) + + for attribute, val in attr_list: + if attribute == 'IFLA_IFNAME': + return val + + return '' + + def netlink_msg_is_for_portchannel(self, msg): """ - Gets a mapping of interface kernel indices to portchannel interfaces + Determines if a netlink message is about a PortChannel interface Returns: (list) integers representing kernel indices """ - index_map = {} - for portchannel in self.portchannel_intfs: - index = self.netlink_api.link_lookup(ifname=portchannel[0])[0] - index_map[index] = portchannel + ifname = self.get_intf_name(msg) - return index_map + return ifname in [name for name, _ in self.portchannel_intfs] def get_up_portchannels(self): """ @@ -89,15 +112,16 @@ def get_up_portchannels(self): Returns: (list) of interface names which are up, as strings """ - pc_index_map = self.get_portchannel_index_mapping() - pc_indices = list(pc_index_map.keys()) - link_statuses = self.netlink_api.get_links(*pc_indices) + portchannel_intf_names = [name for name, _ in self.portchannel_intfs] + link_statuses = [] + for intf in portchannel_intf_names: + status = self.netlink_api.link("get", ifname=intf) + link_statuses.append(status[0]) up_portchannels = [] for status in link_statuses: if status['state'] == 'up': - port_index = status['index'] - up_portchannels.append(pc_index_map[port_index][0]) + up_portchannels.append(self.get_intf_name(status)) return up_portchannels @@ -117,7 +141,7 @@ def all_portchannels_established(self): STATE_DB, intf_table_name, STATE_KEY - ) + ) if intf_state and intf_state.lower() != 'ok': return False @@ -177,13 +201,13 @@ def get_ipinip_tunnel_addrs(self): tunnel_type = tunnel_table[TUNNEL_TYPE_KEY].lower() self_loopback_ip = tunnel_table[DST_IP_KEY] peer_loopback_ip = self.config_db.get_entry( - PEER_SWITCH_TABLE, peer_switch - )[ADDRESS_IPV4_KEY] - except KeyError as e: + PEER_SWITCH_TABLE, peer_switch + )[ADDRESS_IPV4_KEY] + except KeyError as error: logger.log_warning( 'PEER_SWITCH or TUNNEL table missing data, ' 'could not find key {}' - .format(e) + .format(error) ) return None, None @@ -242,15 +266,47 @@ def sniffer_restart_required(self, messages): come back up, we need to restart the sniffer to be able to sniff traffic on the interface that has come back up. """ - pc_index_map = self.get_portchannel_index_mapping() for msg in messages: - if msg['index'] in pc_index_map: + if self.netlink_msg_is_for_portchannel(msg): if msg['state'] == 'up': logger.log_info('{} came back up, sniffer restart required' - .format(pc_index_map[msg['index']])) + .format(self.get_intf_name(msg))) return True return False + def start_sniffer(self): + """ + Starts an AsyncSniffer and waits for it to inititalize fully + """ + self.sniffer = AsyncSniffer( + iface=self.sniff_intfs, + filter=self.packet_filter, + prn=self.ping_inner_dst, + store=0 + ) + self.sniffer.start() + + while not hasattr(self.sniffer, 'stop_cb'): + time.sleep(0.1) + + def ping_inner_dst(self, packet): + """ + Pings the inner destination IP for an encapsulated packet + + Args: + packet: The encapsulated packet received + """ + inner_packet_type = self.get_inner_pkt_type(packet) + if inner_packet_type and packet[IP].dst == self.self_ip: + cmds = ['timeout', '0.2', 'ping', '-c1', + '-W1', '-i0', '-n', '-q'] + if inner_packet_type == IPv6: + cmds.append('-6') + dst_ip = packet[IP].payload[inner_packet_type].dst + cmds.append(dst_ip) + logger.log_info("Running command '{}'".format(' '.join(cmds))) + subprocess.run(cmds, stdout=subprocess.DEVNULL) + def listen_for_tunnel_pkts(self): """ Listens for tunnel packets that are trapped to CPU @@ -258,60 +314,33 @@ def listen_for_tunnel_pkts(self): These packets may be trapped if there is no neighbor info for the inner packet destination IP in the hardware. """ - - def _ping_inner_dst(packet): - """ - Pings the inner destination IP for an encapsulated packet - - Args: - packet: The encapsulated packet received - """ - inner_packet_type = self.get_inner_pkt_type(packet) - if inner_packet_type and packet[IP].dst == self_ip: - cmds = ['timeout', '0.2', 'ping', '-c1', - '-W1', '-i0', '-n', '-q'] - if inner_packet_type == IPv6: - cmds.append('-6') - dst_ip = packet[IP].payload[inner_packet_type].dst - cmds.append(dst_ip) - logger.log_info("Running command '{}'".format(' '.join(cmds))) - subprocess.run(cmds, stdout=subprocess.DEVNULL) - - self_ip, peer_ip = self.get_ipinip_tunnel_addrs() - if self_ip is None or peer_ip is None: + self.self_ip, peer_ip = self.get_ipinip_tunnel_addrs() + if self.self_ip is None or peer_ip is None: logger.log_notice('Could not get tunnel addresses from ' 'config DB, exiting...') return None - packet_filter = 'host {} and host {}'.format(self_ip, peer_ip) + self.packet_filter = 'host {} and host {}'.format(self.self_ip, peer_ip) logger.log_notice('Starting tunnel packet handler for {}' - .format(packet_filter)) - - sniff_intfs = self.get_up_portchannels() - logger.log_info("Listening on interfaces {}".format(sniff_intfs)) + .format(self.packet_filter)) - sniffer = AsyncSniffer( - iface=sniff_intfs, - filter=packet_filter, - prn=_ping_inner_dst + self.sniff_intfs = self.get_up_portchannels() + logger.log_info("Listening on interfaces {}".format(self.sniff_intfs)) - ) - sniffer.start() + self.start_sniffer() while True: msgs = self.wait_for_netlink_msgs() if self.sniffer_restart_required(msgs): - sniffer.stop() + self.sniffer.stop() sniff_intfs = self.get_up_portchannels() logger.log_notice('Restarting tunnel packet handler on ' 'interfaces {}'.format(sniff_intfs)) - sniffer = AsyncSniffer( - iface=sniff_intfs, - filter=packet_filter, - prn=_ping_inner_dst - ) - sniffer.start() + self.start_sniffer() def run(self): + """ + Entry point for the TunnelPacketHandler class + """ self.wait_for_portchannels() self.listen_for_tunnel_pkts() diff --git a/dockers/docker-orchagent/vxlan.json.j2 b/dockers/docker-orchagent/vxlan.json.j2 new file mode 100644 index 000000000000..f0b73467326c --- /dev/null +++ b/dockers/docker-orchagent/vxlan.json.j2 @@ -0,0 +1,11 @@ +[ + { + "SWITCH_TABLE:switch": { +{% if DEVICE_METADATA.localhost.vxlan_port_range == 'enable' %} + "vxlan_sport": "0xFF00", + "vxlan_mask": "8" +{% endif %} + }, + "OP": "SET" + } +] diff --git a/dockers/docker-orchagent/wait_for_link.sh.j2 b/dockers/docker-orchagent/wait_for_link.sh.j2 new file mode 100644 index 000000000000..980b472b3e0a --- /dev/null +++ b/dockers/docker-orchagent/wait_for_link.sh.j2 @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +VLAN_TABLE_PREFIX="VLAN_TABLE" + +function wait_until_iface_ready +{ + TABLE_PREFIX=$1 + IFACE=$2 + + echo "Waiting until interface $IFACE is ready..." + + # Wait for the interface to come up + # (i.e., interface is present in STATE_DB and state is "ok") + while true; do + RESULT=$(sonic-db-cli STATE_DB HGET "${TABLE_PREFIX}|${IFACE}" "state" 2> /dev/null) + if [ x"$RESULT" == x"ok" ]; then + break + fi + + sleep 1 + done + + echo "Interface ${IFACE} is ready!" +} + + +# Wait for all interfaces to be up and ready +{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %} +wait_until_iface_ready ${VLAN_TABLE_PREFIX} {{ name }} +{% endfor %} diff --git a/dockers/docker-platform-monitor/docker-pmon.supervisord.conf.j2 b/dockers/docker-platform-monitor/docker-pmon.supervisord.conf.j2 index fb1cdf2caab9..4a13d76edb0a 100644 --- a/dockers/docker-platform-monitor/docker-pmon.supervisord.conf.j2 +++ b/dockers/docker-platform-monitor/docker-pmon.supervisord.conf.j2 @@ -46,10 +46,10 @@ dependent_startup_wait_for=rsyslogd:running command=/usr/local/bin/chassis_db_init priority=3 autostart=false -autorestart=unexpected +autorestart=false stdout_logfile=syslog stderr_logfile=syslog -startsecs=10 +startsecs=0 dependent_startup=true dependent_startup_wait_for=rsyslogd:running {% endif %} @@ -110,10 +110,29 @@ dependent_startup=true dependent_startup_wait_for=rsyslogd:running {% endif %} +{% if 'subtype' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['subtype'] == 'DualToR' %} +{% if not skip_ycabled %} +[program:ycabled] +{% if delay_ycabled %} +command=bash -c "sleep 30 && nice -n -20 python3 /usr/local/bin/ycabled" +{% else %} +command=nice -n -20 python3 /usr/local/bin/ycabled +{% endif %} +priority=7 +autostart=false +autorestart=unexpected +stdout_logfile=syslog +stderr_logfile=syslog +startsecs=10 +dependent_startup=true +dependent_startup_wait_for=rsyslogd:running +{% endif %} +{% endif %} + {% if not skip_psud %} [program:psud] command={% if API_VERSION == 3 and 'psud' not in python2_daemons %}python3 {% else %} python2 {% endif %}/usr/local/bin/psud -priority=7 +priority=8 autostart=false autorestart=unexpected stdout_logfile=syslog @@ -126,7 +145,7 @@ dependent_startup_wait_for=rsyslogd:running {% if not skip_syseepromd %} [program:syseepromd] command={% if API_VERSION == 3 and 'syseepromd' not in python2_daemons %}python3 {% else %} python2 {% endif %}/usr/local/bin/syseepromd -priority=8 +priority=9 autostart=false autorestart=unexpected stdout_logfile=syslog @@ -139,7 +158,7 @@ dependent_startup_wait_for=rsyslogd:running {% if not skip_thermalctld %} [program:thermalctld] command={% if API_VERSION == 3 and 'thermalctld' not in python2_daemons %}python3 {% else %} python2 {% endif %}/usr/local/bin/thermalctld -priority=9 +priority=10 autostart=false autorestart=unexpected stdout_logfile=syslog @@ -152,8 +171,8 @@ dependent_startup_wait_for=rsyslogd:running {% if not skip_pcied %} [program:pcied] -command={% if API_VERSION == 3 and 'pcied' not in python2_daemons %}python3 {% else %} python2 {% endif %}/usr/local/bin/pcied -priority=10 +command=/usr/local/bin/pcied +priority=11 autostart=false autorestart=unexpected stdout_logfile=syslog diff --git a/dockers/docker-platform-monitor/docker_init.j2 b/dockers/docker-platform-monitor/docker_init.j2 index 1d22e19b239b..c93d1790bd00 100755 --- a/dockers/docker-platform-monitor/docker_init.j2 +++ b/dockers/docker-platform-monitor/docker_init.j2 @@ -105,9 +105,9 @@ confvar="{\"HAVE_SENSORS_CONF\":$HAVE_SENSORS_CONF, \"HAVE_FANCONTROL_CONF\":$HA if [ -e $PMON_DAEMON_CONTROL_FILE ]; then - sonic-cfggen -j $PMON_DAEMON_CONTROL_FILE -a "$confvar" -t $SUPERVISOR_CONF_TEMPLATE > $SUPERVISOR_CONF_FILE + sonic-cfggen -d -j $PMON_DAEMON_CONTROL_FILE -a "$confvar" -t $SUPERVISOR_CONF_TEMPLATE > $SUPERVISOR_CONF_FILE else - sonic-cfggen -a "$confvar" -t $SUPERVISOR_CONF_TEMPLATE > $SUPERVISOR_CONF_FILE + sonic-cfggen -d -a "$confvar" -t $SUPERVISOR_CONF_TEMPLATE > $SUPERVISOR_CONF_FILE fi exec /usr/local/bin/supervisord diff --git a/dockers/docker-ptf-sai/Dockerfile.j2 b/dockers/docker-ptf-sai/Dockerfile.j2 new file mode 100644 index 000000000000..1e284bd368ea --- /dev/null +++ b/dockers/docker-ptf-sai/Dockerfile.j2 @@ -0,0 +1,41 @@ +{% from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %} +FROM docker-ptf + +# Make apt-get non-interactive +ENV DEBIAN_FRONTEND=noninteractive + +# Set the apt source, update package cache and install necessary packages +RUN apt-get update \ + && apt-get upgrade -y \ + && apt-get dist-upgrade -y \ + && apt-get install -y \ + python3-pip + +RUN pip3 install crc16 \ + netifaces \ + getmac \ + packet_helper \ + psutil \ + scapy==2.4.4 \ + scapy_helper \ + pysubnettree \ + xmlrunner + +COPY \ +{% for deb in docker_ptf_sai_debs.split(' ') -%} +debs/{{ deb }}{{' '}} +{%- endfor -%} +debs/ + +RUN dpkg -i \ +{% for deb in docker_ptf_sai_debs.split(' ') -%} +debs/{{ deb }}{{' '}} +{%- endfor %} + +# Remove old ptf package +RUN dpkg -r python-ptf + +# Install new ptf package +RUN git clone https://github.com/p4lang/ptf.git \ + && cd ptf \ + && python3.7 setup.py install --single-version-externally-managed --record /tmp/ptf_install.txt diff --git a/dockers/docker-ptf/Dockerfile.j2 b/dockers/docker-ptf/Dockerfile.j2 index b152e94e99b0..d999d01e0026 100644 --- a/dockers/docker-ptf/Dockerfile.j2 +++ b/dockers/docker-ptf/Dockerfile.j2 @@ -1,9 +1,10 @@ +{% set prefix = DEFAULT_CONTAINER_REGISTRY %} {% if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/debian-debootstrap:armhf-stretch +FROM {{ prefix }}multiarch/debian-debootstrap:armhf-stretch {% elif CONFIGURED_ARCH == "arm64" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/debian-debootstrap:arm64-stretch +FROM {{ prefix }}multiarch/debian-debootstrap:arm64-stretch {% else %} -FROM debian:buster +FROM {{ prefix }}debian:buster {% endif %} MAINTAINER Pavel Shirshov diff --git a/dockers/docker-router-advertiser/Dockerfile.j2 b/dockers/docker-router-advertiser/Dockerfile.j2 index 7d225cbd4e79..44e2430077cb 100644 --- a/dockers/docker-router-advertiser/Dockerfile.j2 +++ b/dockers/docker-router-advertiser/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 +FROM docker-config-engine-bullseye ARG docker_container_name ARG image_version @@ -15,7 +15,7 @@ ENV IMAGE_VERSION=$image_version RUN apt-get update # Install radvd Debian package -RUN apt-get -y install radvd=1:2.17-2 +RUN apt-get -y install radvd {% if docker_router_advertiser_debs.strip() -%} # Copy built Debian packages diff --git a/dockers/docker-router-advertiser/docker-router-advertiser.supervisord.conf.j2 b/dockers/docker-router-advertiser/docker-router-advertiser.supervisord.conf.j2 index 7562444946ed..22f33e412195 100644 --- a/dockers/docker-router-advertiser/docker-router-advertiser.supervisord.conf.j2 +++ b/dockers/docker-router-advertiser/docker-router-advertiser.supervisord.conf.j2 @@ -45,7 +45,7 @@ dependent_startup_wait_for=rsyslogd:running {%- set vlan_v6 = namespace(count=0) -%} {%- if DEVICE_METADATA.localhost.deployment_id != "8" -%} {%- if DEVICE_METADATA.localhost.type -%} - {%- if "ToRRouter" in DEVICE_METADATA.localhost.type or DEVICE_METADATA.localhost.type == "EPMS" -%} + {%- if "ToRRouter" in DEVICE_METADATA.localhost.type or DEVICE_METADATA.localhost.type in ["EPMS", "MgmtTsToR"] -%} {%- if VLAN_INTERFACE -%} {%- for (name, prefix) in VLAN_INTERFACE|pfx_filter -%} {# If this VLAN has an IPv6 address... #} diff --git a/dockers/docker-router-advertiser/radvd.conf.j2 b/dockers/docker-router-advertiser/radvd.conf.j2 index 1d1e9e952f1c..3880ef960760 100644 --- a/dockers/docker-router-advertiser/radvd.conf.j2 +++ b/dockers/docker-router-advertiser/radvd.conf.j2 @@ -10,9 +10,21 @@ {# If our configuration has VLAN interfaces... #} {% if VLAN_INTERFACE %} -{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %} -{# If this VLAN has an IPv6 address... #} +{% set vlan_list = dict() %} +{% for (name,prefix) in VLAN_INTERFACE|pfx_filter %} +{% if name is not in vlan_list and prefix | ipv6 %} +{% set prefix_list = [] %} +{% set _ = vlan_list.update({name: prefix_list}) %} +{% endif %} {% if prefix | ipv6 %} +{# If our configuration has VLAN interfaces... #} +{% set prefix_list = vlan_list.get(name) %} +{% set _ = prefix_list.append(prefix) %} +{% set _ = vlan_list.update({name: prefix_list}) %} +{% endif %} +{% endfor %} +{% endif %} +{% for name, prefixes in vlan_list.items() %} interface {{ name }} { IgnoreIfMissing on; @@ -23,6 +35,7 @@ interface {{ name }} AdvOtherConfigFlag off; AdvLinkMTU 9100; AdvHomeAgentFlag off; +{% for prefix in prefixes %} prefix {{ prefix | network }}/{{ prefix | prefixlen }} { AdvOnLink on; AdvAutonomous off; @@ -30,8 +43,7 @@ interface {{ name }} AdvValidLifetime infinity; AdvPreferredLifetime infinity; }; +{% endfor %} }; -{% endif %} {% endfor %} -{% endif %} diff --git a/dockers/docker-snmp/snmpd.conf.j2 b/dockers/docker-snmp/snmpd.conf.j2 index b83fbffda025..585fb5353e5b 100644 --- a/dockers/docker-snmp/snmpd.conf.j2 +++ b/dockers/docker-snmp/snmpd.conf.j2 @@ -82,7 +82,7 @@ sysLocation {{ SNMP.LOCATION.Location }} sysLocation public {% endif %} {% if SNMP is defined and SNMP.CONTACT is defined %} -sysContact {{ SNMP.CONTACT.keys()[0] }} {{ SNMP.CONTACT.values()[0] }} +sysContact {{ SNMP.CONTACT.keys() | first }} {{ SNMP.CONTACT.values() | first }} {% else %} sysContact Azure Cloud Switch vteam {% endif %} diff --git a/dockers/docker-sonic-mgmt-framework/Dockerfile.j2 b/dockers/docker-sonic-mgmt-framework/Dockerfile.j2 index a9a9beaa7585..937c5368483a 100644 --- a/dockers/docker-sonic-mgmt-framework/Dockerfile.j2 +++ b/dockers/docker-sonic-mgmt-framework/Dockerfile.j2 @@ -15,7 +15,7 @@ RUN pip3 install connexion==2.7.0 \ certifi==2017.4.17 \ python-dateutil==2.6.0 \ six==1.11.0 \ - urllib3==1.21.1 + urllib3==1.26.5 COPY \ {% for deb in docker_sonic_mgmt_framework_debs.split(' ') -%} @@ -34,6 +34,6 @@ COPY ["supervisord.conf", "/etc/supervisor/conf.d/"] RUN apt-get remove -y g++ python3-dev RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y -RUN rm -rf /debs +RUN rm -rf /debs ~/.cache ENTRYPOINT ["/usr/local/bin/supervisord"] diff --git a/dockers/docker-sonic-mgmt/Dockerfile.j2 b/dockers/docker-sonic-mgmt/Dockerfile.j2 index aa0e18ab255f..99ad9fa8fb80 100755 --- a/dockers/docker-sonic-mgmt/Dockerfile.j2 +++ b/dockers/docker-sonic-mgmt/Dockerfile.j2 @@ -1,4 +1,5 @@ -FROM ubuntu:18.04 +{% set prefix = DEFAULT_CONTAINER_REGISTRY %} +FROM {{ prefix }}ubuntu:18.04 ENV DEBIAN_FRONTEND=noninteractive @@ -21,7 +22,6 @@ RUN apt-get update && apt-get install -y build-essential \ python \ python-dev \ python-scapy \ - python-setuptools \ python-pip \ python3-pip \ python3-venv \ @@ -33,6 +33,7 @@ RUN apt-get update && apt-get install -y build-essential \ telnet \ vim +RUN pip install setuptools==44.1.1 RUN pip install cffi==1.10.0 \ contextlib2==0.6.0.post1 \ cryptography==3.3.2 \ @@ -69,10 +70,12 @@ RUN pip install cffi==1.10.0 \ rpyc \ six \ tabulate \ + statistics \ textfsm \ virtualenv \ retry \ thrift==0.11.0 \ + allure-pytest==2.8.22 \ && git clone https://github.com/p4lang/scapy-vxlan.git \ && cd scapy-vxlan \ && python setup.py install \ @@ -176,12 +179,74 @@ RUN python -m virtualenv --system-site-packages env-201811 RUN env-201811/bin/pip install cryptography==3.3.2 ansible==2.0.0.2 RUN python3 -m venv env-python3 -RUN env-python3/bin/pip3 install cryptography==3.3.2 azure-kusto-data azure-kusto-ingest defusedxml pytest aiohttp # NOTE: There is an ordering dependency for pycryptodome. Leaving this at # the end until we figure that out. RUN pip install pycryptodome==3.9.8 -# Install allure-pytest library -RUN pip install --upgrade setuptools \ - && pip install allure-pytest==2.8.22 +# Activating a virtualenv. The virtualenv automatically works for RUN, ENV and CMD. +ENV VIRTUAL_ENV=env-python3 +ARG BACKUP_OF_PATH="$PATH" +ENV PATH="$VIRTUAL_ENV/bin:$PATH" + +ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 PYTHONIOENCODING=UTF-8 + +RUN python3 -m pip install --upgrade --ignore-installed pip setuptools==58.4.0 + +RUN python3 -m pip install setuptools-rust \ + aiohttp \ + defusedxml \ + azure-kusto-ingest \ + azure-kusto-data \ + cffi \ + contextlib2==0.6.0.post1 \ + cryptography==3.3.2 \ + "future>=0.16.0" \ + gitpython \ + ipaddr \ + ipython==5.4.1 \ + ixnetwork-restpy==1.0.64 \ + ixnetwork-open-traffic-generator==0.0.79 \ + snappi[ixnetwork,convergence]==0.5.11 \ + jinja2==2.7.2 \ + jsonpatch \ + lxml \ + natsort \ + netaddr \ + netmiko==2.4.2 \ + paramiko==2.7.1 \ + passlib \ + pexpect \ + prettytable \ + psutil \ + pyasn1==0.4.8 \ + pyfiglet \ + pylint==1.8.1 \ + pyro4 \ + pysnmp==4.4.12 \ + pytest-repeat \ + pytest-html \ + pytest-xdist==1.28.0 \ + pytest \ + redis \ + requests \ + rpyc \ + six \ + tabulate \ + textfsm \ + virtualenv \ + wheel==0.33.6 \ + pysubnettree \ + nnpy \ + dpkt \ + pycryptodome==3.9.8 \ + ansible==2.8.12 \ + pytest-ansible \ + allure-pytest==2.8.22 \ + retry \ + thrift==0.11.0 \ + ptf \ + scapy==2.4.5 + +# Deactivating a virtualenv. +ENV PATH="$BACKUP_OF_PATH" diff --git a/dockers/docker-sonic-p4rt/Dockerfile.j2 b/dockers/docker-sonic-p4rt/Dockerfile.j2 index c27dadad6cf7..8708518340c8 100644 --- a/dockers/docker-sonic-p4rt/Dockerfile.j2 +++ b/dockers/docker-sonic-p4rt/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 +FROM docker-config-engine-bullseye ARG docker_container_name ARG git_commit diff --git a/dockers/docker-sonic-restapi/supervisord.conf b/dockers/docker-sonic-restapi/supervisord.conf index a873ba03d7da..c95b4b6b92d8 100644 --- a/dockers/docker-sonic-restapi/supervisord.conf +++ b/dockers/docker-sonic-restapi/supervisord.conf @@ -4,7 +4,7 @@ logfile_backups=2 nodaemon=true [eventlistener:dependent-startup] -command=python -m supervisord_dependent_startup +command=python3 -m supervisord_dependent_startup autostart=true autorestart=unexpected startretries=0 @@ -13,7 +13,7 @@ events=PROCESS_STATE buffer_size=1024 [eventlistener:supervisor-proc-exit-listener] -command=python2 /usr/bin/supervisor-proc-exit-listener --container-name restapi +command=/usr/bin/supervisor-proc-exit-listener --container-name restapi events=PROCESS_STATE_EXITED,PROCESS_STATE_RUNNING autostart=true autorestart=false diff --git a/dockers/docker-sonic-telemetry/base_image_files/monit_telemetry b/dockers/docker-sonic-telemetry/base_image_files/monit_telemetry index b3ba8b25fe1a..3941aecd4b0c 100644 --- a/dockers/docker-sonic-telemetry/base_image_files/monit_telemetry +++ b/dockers/docker-sonic-telemetry/base_image_files/monit_telemetry @@ -2,4 +2,4 @@ ## Monit configuration for telemetry container ############################################################################### check program container_memory_telemetry with path "/usr/bin/memory_checker telemetry 419430400" - if status == 3 for 10 times within 20 cycles then exec "/usr/bin/restart_service telemetry" + if status == 3 for 10 times within 20 cycles then exec "/usr/bin/restart_service telemetry" repeat every 2 cycles diff --git a/files/Aboot/boot0.j2 b/files/Aboot/boot0.j2 index 38eb8b5fe78a..2510695d1363 100644 --- a/files/Aboot/boot0.j2 +++ b/files/Aboot/boot0.j2 @@ -351,7 +351,9 @@ extract_image() { unzip -oq "$swipath" -x boot0 "$dockerfs" -d "$image_path" ## detect rootfs type - rootfs_type=`grep " $target_path " /proc/mounts | cut -d' ' -f3` + local mountstr="$(grep " $target_path " /proc/mounts)" + local rootdev="$(echo $mountstr | cut -f1 -d' ')" + rootfs_type="$(echo $mountstr | cut -d' ' -f3)" info "Extracting $dockerfs from swi" ## Unpacking dockerfs delayed diff --git a/files/apt/sources.list.amd64 b/files/apt/sources.list.amd64 index 04a2b143532d..fb0a1e994932 100644 --- a/files/apt/sources.list.amd64 +++ b/files/apt/sources.list.amd64 @@ -1,15 +1,13 @@ ## Debian mirror on Microsoft Azure ## Ref: http://debian-archive.trafficmanager.net/ -deb [arch=amd64] http://deb.debian.org/debian/ bullseye main contrib non-free -deb-src [arch=amd64] http://deb.debian.org/debian/ bullseye main contrib non-free -#deb [arch=amd64] http://debian-archive.trafficmanager.net/debian/ bullseye main contrib non-free -#deb-src [arch=amd64] http://debian-archive.trafficmanager.net/debian/ bullseye main contrib non-free -#deb [arch=amd64] http://debian-archive.trafficmanager.net/debian-security/ bullseye/updates main contrib non-free -#deb-src [arch=amd64] http://debian-archive.trafficmanager.net/debian-security/ bullseye/updates main contrib non-free -#deb [arch=amd64] http://debian-archive.trafficmanager.net/debian/ bullseye-backports main contrib non-free -#deb [arch=amd64] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free -#deb-src [arch=amd64] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free -#deb [arch=amd64] http://packages.trafficmanager.net/debian/debian-security/ bullseye_updates main contrib non-free -#deb-src [arch=amd64] http://packages.trafficmanager.net/debian/debian-security/ bullseye_updates main contrib non-free -#deb [arch=amd64] http://packages.trafficmanager.net/debian/debian bullseye-backports main contrib non-free +deb [arch=amd64] http://debian-archive.trafficmanager.net/debian/ bullseye main contrib non-free +deb-src [arch=amd64] http://debian-archive.trafficmanager.net/debian/ bullseye main contrib non-free +deb [arch=amd64] http://debian-archive.trafficmanager.net/debian-security/ bullseye-security main contrib non-free +deb-src [arch=amd64] http://debian-archive.trafficmanager.net/debian-security/ bullseye-security main contrib non-free +deb [arch=amd64] http://debian-archive.trafficmanager.net/debian/ bullseye-backports main contrib non-free +deb [arch=amd64] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free +deb-src [arch=amd64] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free +deb [arch=amd64] http://packages.trafficmanager.net/debian/debian-security/ bullseye-security main contrib non-free +deb-src [arch=amd64] http://packages.trafficmanager.net/debian/debian-security/ bullseye-security main contrib non-free +deb [arch=amd64] http://packages.trafficmanager.net/debian/debian bullseye-backports main contrib non-free diff --git a/files/apt/sources.list.arm64 b/files/apt/sources.list.arm64 index abd625070414..75bebe1a91d1 100644 --- a/files/apt/sources.list.arm64 +++ b/files/apt/sources.list.arm64 @@ -1,13 +1,13 @@ ## Debian mirror for ARM ## Not the repo mirror site can change in future, and needs to be updated to be in sync -deb [arch=arm64] http://deb.debian.org/debian bullseye main contrib non-free -deb-src [arch=arm64] http://deb.debian.org/debian bullseye main contrib non-free -deb [arch=arm64] http://deb.debian.org/debian bullseye-updates main contrib non-free -deb-src [arch=arm64] http://deb.debian.org/debian bullseye-updates main contrib non-free -deb [arch=arm64] http://ftp.debian.org/debian bullseye-backports main -# deb [arch=arm64] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free -# deb-src [arch=arm64] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free -# deb [arch=arm64] http://packages.trafficmanager.net/debian/debian bullseye-updates main contrib non-free -# deb-src [arch=arm64] http://packages.trafficmanager.net/debian/debian bullseye-updates main contrib non-free -# deb [arch=arm64] http://packages.trafficmanager.net/debian/debian bullseye-backports main +deb [arch=arm64] http://debian-archive.trafficmanager.net/debian/ bullseye main contrib non-free +deb-src [arch=arm64] http://debian-archive.trafficmanager.net/debian/ bullseye main contrib non-free +deb [arch=arm64] http://debian-archive.trafficmanager.net/debian-security/ bullseye-security main contrib non-free +deb-src [arch=arm64] http://debian-archive.trafficmanager.net/debian-security/ bullseye-security main contrib non-free +deb [arch=arm64] http://debian-archive.trafficmanager.net/debian/ bullseye-backports main contrib non-free +deb [arch=arm64] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free +deb-src [arch=arm64] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free +deb [arch=arm64] http://packages.trafficmanager.net/debian/debian-security/ bullseye-security main contrib non-free +deb-src [arch=arm64] http://packages.trafficmanager.net/debian/debian-security/ bullseye-security main contrib non-free +deb [arch=arm64] http://packages.trafficmanager.net/debian/debian bullseye-backports main contrib non-free diff --git a/files/apt/sources.list.armhf b/files/apt/sources.list.armhf index ded8e27e6b2b..4f9d4d0a9020 100644 --- a/files/apt/sources.list.armhf +++ b/files/apt/sources.list.armhf @@ -3,11 +3,16 @@ deb [arch=armhf] http://deb.debian.org/debian bullseye main contrib non-free deb-src [arch=armhf] http://deb.debian.org/debian bullseye main contrib non-free -deb [arch=armhf] http://deb.debian.org/debian bullseye-updates main contrib non-free -deb-src [arch=armhf] http://deb.debian.org/debian bullseye-updates main contrib non-free -deb [arch=armhf] http://ftp.debian.org/debian bullseye-backports main -# deb [arch=armhf] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free -# deb-src [arch=armhf] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free -# deb [arch=armhf] http://packages.trafficmanager.net/debian/debian bullseye-updates main contrib non-free -# deb-src [arch=armhf] http://packages.trafficmanager.net/debian/debian bullseye-updates main contrib non-free -# deb [arch=armhf] http://packages.trafficmanager.net/debian/debian bullseye-backports main +deb [arch=armhf] http://security.debian.org bullseye-security main contrib non-free +deb-src [arch=armhf] http://security.debian.org bullseye-security main contrib non-free +deb [arch=armhf] http://deb.debian.org/debian bullseye-backports main contrib non-free +#deb [arch=armhf] http://debian-archive.trafficmanager.net/debian/ bullseye main contrib non-free +#deb-src [arch=armhf] http://debian-archive.trafficmanager.net/debian/ bullseye main contrib non-free +#deb [arch=armhf] http://debian-archive.trafficmanager.net/debian-security/ bullseye-security main contrib non-free +#deb-src [arch=armhf] http://debian-archive.trafficmanager.net/debian-security/ bullseye-security main contrib non-free +#deb [arch=armhf] http://debian-archive.trafficmanager.net/debian/ bullseye-backports main contrib non-free +deb [arch=armhf] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free +deb-src [arch=armhf] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free +deb [arch=armhf] http://packages.trafficmanager.net/debian/debian-security/ bullseye-security main contrib non-free +deb-src [arch=armhf] http://packages.trafficmanager.net/debian/debian-security/ bullseye-security main contrib non-free +deb [arch=armhf] http://packages.trafficmanager.net/debian/debian bullseye-backports main contrib non-free diff --git a/files/build_templates/buffers_config.j2 b/files/build_templates/buffers_config.j2 index d0ff3ade1072..a67316af5f3d 100644 --- a/files/build_templates/buffers_config.j2 +++ b/files/build_templates/buffers_config.j2 @@ -101,7 +101,9 @@ def {%- endif %} {%- else %} {%- for port in PORT %} - {%- if PORT_ALL.append(port) %}{%- endif %} + {%- if not port.startswith('Ethernet-Rec') and not port.startswith('Ethernet-IB') %} + {%- if PORT_ALL.append(port) %}{%- endif %} + {%- endif %} {%- endfor %} {%- endif %} @@ -131,7 +133,6 @@ def {%- if port_names_list_inactive.append(port) %}{%- endif %} {%- endfor %} {%- set port_names_inactive = port_names_list_inactive | join(',') %} - { "CABLE_LENGTH": { "AZURE": { diff --git a/files/build_templates/docker_image_ctl.j2 b/files/build_templates/docker_image_ctl.j2 index e16ec4e20eee..81efc39231e9 100644 --- a/files/build_templates/docker_image_ctl.j2 +++ b/files/build_templates/docker_image_ctl.j2 @@ -233,6 +233,11 @@ start() { source $ASIC_CONF fi + PLATFORM_ENV_CONF=/usr/share/sonic/device/$PLATFORM/platform_env.conf + if [ -f "$PLATFORM_ENV_CONF" ]; then + source $PLATFORM_ENV_CONF + fi + {%- if docker_container_name == "database" %} # Don't mount HWSKU in {{docker_container_name}} container. HWSKU="" @@ -302,6 +307,10 @@ start() { if [ ! -f /etc/sonic/zero_profiles.json ] && [ -f /usr/share/sonic/templates/zero_profiles.j2 ]; then sonic-cfggen -d -t /usr/share/sonic/device/$PLATFORM/zero_profiles.j2 > /etc/sonic/zero_profiles.json fi + + {%- if enable_asan == "y" %} + mkdir -p /var/log/asan + {%- endif %} {%- endif %} # In Multi ASIC platforms the global database config file database_global.json will exist. @@ -417,6 +426,7 @@ start() { {%- endif %} {%- if sonic_asic_platform == "broadcom" %} {%- if docker_container_name == "syncd" %} + --shm-size=${SYNCD_SHM_SIZE:-64m} \ -v /var/run/docker-syncd$DEV:/var/run/sswsyncd \ {%- endif %} {%- endif %} @@ -426,6 +436,9 @@ start() { {%- if docker_container_name == "swss" %} -e ASIC_VENDOR={{ sonic_asic_platform }} \ {%- endif -%} +{%- if docker_container_name in ["swss", "syncd"] and enable_asan == "y" %} + -v /var/log/asan/:/var/log/asan \ +{%- endif -%} {%- if docker_container_name == "bgp" %} -v /etc/sonic/frr/$DEV:/etc/frr:rw \ {%- endif %} @@ -486,6 +499,8 @@ stop() { {%- elif docker_container_name == "teamd" %} # Longer timeout of 60 sec to wait for Portchannels to be cleaned. /usr/local/bin/container stop -t 60 $DOCKERNAME + {%- elif docker_container_name in ["swss", "syncd"] and enable_asan == "y" %} + /usr/local/bin/container stop -t 60 $DOCKERNAME {%- else %} /usr/local/bin/container stop $DOCKERNAME {%- endif %} diff --git a/files/build_templates/init_cfg.json.j2 b/files/build_templates/init_cfg.json.j2 index e1320214e02c..a7f1e54a4e15 100644 --- a/files/build_templates/init_cfg.json.j2 +++ b/files/build_templates/init_cfg.json.j2 @@ -36,7 +36,7 @@ ("swss", "enabled", false, "enabled"), ("syncd", "enabled", false, "enabled"), ("teamd", "enabled", false, "enabled")] %} -{% do features.append(("dhcp_relay", "{% if not (DEVICE_METADATA is defined and DEVICE_METADATA['localhost'] is defined and DEVICE_METADATA['localhost']['type'] is defined and DEVICE_METADATA['localhost']['type'] != 'ToRRouter') %}enabled{% else %}disabled{% endif %}", false, "enabled")) %} +{% do features.append(("dhcp_relay", "{% if not (DEVICE_METADATA is defined and DEVICE_METADATA['localhost'] is defined and DEVICE_METADATA['localhost']['type'] is defined and DEVICE_METADATA['localhost']['type'] is not in ['ToRRouter', 'EPMS', 'MgmtTsToR', 'MgmtToRRouter']) %}enabled{% else %}disabled{% endif %}", false, "enabled")) %} {%- if sonic_asic_platform == "vs" %}{% do features.append(("gbsyncd", "enabled", false, "enabled")) %}{% endif %} {%- if include_iccpd == "y" %}{% do features.append(("iccpd", "disabled", false, "enabled")) %}{% endif %} {%- if include_mgmt_framework == "y" %}{% do features.append(("mgmt-framework", "enabled", true, "enabled")) %}{% endif %} diff --git a/files/build_templates/macsec.service.j2 b/files/build_templates/macsec.service.j2 deleted file mode 100644 index b8ffbafcbd2c..000000000000 --- a/files/build_templates/macsec.service.j2 +++ /dev/null @@ -1,19 +0,0 @@ -[Unit] -Description=MACsec container -Requires=swss.service -After=swss.service syncd.service -BindsTo=sonic.target -After=sonic.target -StartLimitIntervalSec=1200 -StartLimitBurst=3 - -[Service] -User=root -ExecStartPre=/usr/bin/macsec.sh start -ExecStart=/usr/bin/macsec.sh wait -ExecStop=/usr/bin/macsec.sh stop -Restart=always -RestartSec=30 - -[Install] -WantedBy=sonic.target \ No newline at end of file diff --git a/files/build_templates/per_namespace/macsec.service.j2 b/files/build_templates/per_namespace/macsec.service.j2 new file mode 100644 index 000000000000..fc862241f33f --- /dev/null +++ b/files/build_templates/per_namespace/macsec.service.j2 @@ -0,0 +1,20 @@ +[Unit] +Description=MACsec container +Requires=swss{% if multi_instance == 'true' %}@%i{% endif %}.service +After=swss{% if multi_instance == 'true' %}@%i{% endif %}.service +After=syncd{% if multi_instance == 'true' %}@%i{% endif %}.service +BindsTo=sonic.target +After=sonic.target +StartLimitIntervalSec=1200 +StartLimitBurst=3 + +[Service] +User={{ sonicadmin_user }} +ExecStartPre=/usr/bin/{{docker_container_name}}.sh start{% if multi_instance == 'true' %} %i{% endif %} +ExecStart=/usr/bin/{{docker_container_name}}.sh wait{% if multi_instance == 'true' %} %i{% endif %} +ExecStop=/usr/bin/{{docker_container_name}}.sh stop{% if multi_instance == 'true' %} %i{% endif %} +Restart=always +RestartSec=30 + +[Install] +WantedBy=sonic.target diff --git a/files/build_templates/qos_config.j2 b/files/build_templates/qos_config.j2 index cdfb721a45e3..9df061283034 100644 --- a/files/build_templates/qos_config.j2 +++ b/files/build_templates/qos_config.j2 @@ -1,6 +1,8 @@ {%- set PORT_ALL = [] %} {%- for port in PORT %} - {%- if PORT_ALL.append(port) %}{% endif %} + {%- if not port.startswith('Ethernet-Rec') and not port.startswith('Ethernet-IB') %} + {%- if PORT_ALL.append(port) %}{% endif %} + {%- endif %} {%- endfor %} {%- if PORT_ALL | sort_by_port_index %}{% endif %} @@ -27,9 +29,17 @@ {%- endfor %} {%- set port_names_active = port_names_list_active | join(',') -%} +{%- 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 port_names_list_extra_queues.append(port) %}{%- endif %} + {% endif %} +{%- endfor %} {%- set pfc_to_pg_map_supported_asics = ['mellanox', 'barefoot', 'marvell'] -%} {%- set backend_device_types = ['BackEndToRRouter', 'BackEndLeafRouter'] -%} +{%- set apollo_resource_types = ['DL-NPU-Apollo'] -%} { @@ -61,6 +71,9 @@ "7": "7" } }, +{% if generate_tc_to_queue_map is defined %} + {{- generate_tc_to_queue_map() }} +{% else %} "TC_TO_QUEUE_MAP": { "AZURE": { "0": "0", @@ -73,6 +86,7 @@ "7": "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' %} "DOT1P_TO_TC_MAP": { "AZURE": { @@ -86,6 +100,8 @@ "7": "7" } }, +{% elif generate_dscp_to_tc_map is defined %} + {{- generate_dscp_to_tc_map() }} {% else %} "DSCP_TO_TC_MAP": { "AZURE": { @@ -156,6 +172,22 @@ } }, {% endif %} +{% if 'resource_type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['resource_type'] in apollo_resource_types %} + "SCHEDULER": { + "scheduler.0": { + "type" : "DWRR", + "weight": "1" + }, + "scheduler.1": { + "type" : "DWRR", + "weight": "1" + }, + "scheduler.2": { + "type" : "DWRR", + "weight": "100" + } + }, +{% else %} "SCHEDULER": { "scheduler.0": { "type" : "DWRR", @@ -166,6 +198,7 @@ "weight": "15" } }, +{% endif %} {% if asic_type in pfc_to_pg_map_supported_asics %} "PFC_PRIORITY_TO_PRIORITY_GROUP_MAP": { "AZURE": { @@ -188,7 +221,12 @@ {% if asic_type in pfc_to_pg_map_supported_asics %} "pfc_to_pg_map" : "AZURE", {% endif %} - "pfc_enable" : "3,4" +{% if port in port_names_list_extra_queues %} + "pfc_enable" : "2,3,4,6", +{% else %} + "pfc_enable" : "3,4", +{% endif %} + "pfcwd_sw_enable" : "3,4" }{% if not loop.last %},{% endif %} {% endfor %} @@ -221,12 +259,21 @@ "wred_profile": "AZURE_LOSSLESS" }, {% endfor %} +{% if 'resource_type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['resource_type'] in apollo_resource_types %} +{% for port in PORT_ACTIVE %} + "{{ port }}|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, +{% endfor %} +{% else %} {% for port in PORT_ACTIVE %} "{{ port }}|4": { "scheduler" : "scheduler.1", "wred_profile": "AZURE_LOSSLESS" }, {% endfor %} +{% endif %} {% for port in PORT_ACTIVE %} "{{ port }}|0": { "scheduler": "scheduler.0" @@ -239,7 +286,12 @@ {% endfor %} {% for port in PORT_ACTIVE %} "{{ port }}|2": { + {% if port in port_names_list_extra_queues %} + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + {% else %} "scheduler": "scheduler.0" + {% endif %} }, {% endfor %} {% for port in PORT_ACTIVE %} @@ -249,7 +301,12 @@ {% endfor %} {% for port in PORT_ACTIVE %} "{{ port }}|6": { + {% if port in port_names_list_extra_queues %} + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + {% else %} "scheduler": "scheduler.0" + {% endif %} }{% 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 3efb5ae0690b..a49e29406eeb 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -75,12 +75,6 @@ else sudo chroot $FILESYSTEM_ROOT $DOCKER_CTL_SCRIPT start fi -# Apply apt configuration files -sudo cp $IMAGE_CONFIGS/apt/sources.list $FILESYSTEM_ROOT/etc/apt/ -sudo mkdir -p $FILESYSTEM_ROOT/etc/apt/sources.list.d/ -sudo cp -R $IMAGE_CONFIGS/apt/sources.list.d/${CONFIGURED_ARCH}/* $FILESYSTEM_ROOT/etc/apt/sources.list.d/ -cat $IMAGE_CONFIGS/apt/sonic-dev.gpg.key | sudo LANG=C chroot $FILESYSTEM_ROOT apt-key add - - # Update apt's snapshot of its repos sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get update @@ -131,8 +125,10 @@ sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip3 install psutil sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip3 install ipaddr # Install Python module for grpcio and grpcio-toole -sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip3 install "grpcio==1.39.0" -sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip3 install "grpcio-tools==1.39.0" +if [[ $CONFIGURED_ARCH == amd64 ]]; then + sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip3 install "grpcio==1.39.0" + sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip3 install "grpcio-tools==1.39.0" +fi # Install SwSS SDK Python 3 package # Note: the scripts will be overwritten by corresponding Python 2 package @@ -328,7 +324,7 @@ sudo cp $IMAGE_CONFIGS/monit/restart_service $FILESYSTEM_ROOT/usr/bin/ sudo chmod 755 $FILESYSTEM_ROOT/usr/bin/restart_service # Install custom-built smartmontools -sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/smartmontools_*.deb +sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install smartmontools=7.2-1 # Install custom-built openssh sshd sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/openssh-server_*.deb @@ -648,11 +644,13 @@ if [ $MULTIARCH_QEMU_ENVIRON == y ]; then fi {% if installer_images.strip() -%} -clean_proc() { - sudo umount /proc || true -} -trap_push clean_proc +## ensure proc is mounted sudo mount proc /proc -t proc || true +if [[ $CONFIGURED_ARCH == armhf ]]; then + # A workaround to fix the armhf build hung issue, caused by sonic-platform-nokia-7215_1.0_armhf.deb post installation script + ps -eo pid,cmd | grep python | grep "/etc/entropy.py" | awk '{print $1}' | xargs sudo kill -9 2>/dev/null || true +fi + sudo mkdir $FILESYSTEM_ROOT/target sudo mount --bind target $FILESYSTEM_ROOT/target sudo LANG=C DOCKER_HOST="$DOCKER_HOST" chroot $FILESYSTEM_ROOT docker info @@ -732,7 +730,6 @@ if [ $MULTIARCH_QEMU_ENVIRON == y ]; then else sudo chroot $FILESYSTEM_ROOT $DOCKER_CTL_SCRIPT stop fi -sudo umount /proc || true sudo bash -c "echo { > $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/ctr_image_names.json" {% for entry in feature_vs_image_names.split(' ') -%} diff --git a/files/build_templates/sonic_version.yml.j2 b/files/build_templates/sonic_version.yml.j2 index 34486061ea8a..bc6fb54189d4 100644 --- a/files/build_templates/sonic_version.yml.j2 +++ b/files/build_templates/sonic_version.yml.j2 @@ -7,6 +7,9 @@ debian_version: '{{ debian_version }}' kernel_version: '{{ kernel_version }}' {% endif -%} asic_type: {{ asic_type }} +{% if asic_subtype is defined and asic_subtype != '' -%} +asic_subtype: '{{ asic_subtype }}' +{% endif -%} commit_id: '{{ commit_id }}' branch: '{{ branch }}' {% if release is defined and release != '' -%} @@ -23,4 +26,6 @@ built_by: {{ built_by }} {{ name }}: {{ version }} {% endfor -%} {% endif -%} - +{% if ENABLE_ASAN == "y" -%} +asan: 'yes' +{% endif -%} diff --git a/files/build_templates/swss_vars.j2 b/files/build_templates/swss_vars.j2 index df5e4d038f51..1cd95d16a6d6 100644 --- a/files/build_templates/swss_vars.j2 +++ b/files/build_templates/swss_vars.j2 @@ -1,5 +1,8 @@ { "asic_type": "{{ asic_type }}", + {% if asic_subtype is defined and asic_subtype != '' -%} + "asic_subtype": "{{ asic_subtype }}", + {% endif -%} "asic_id": "{{ DEVICE_METADATA.localhost.asic_id }}", "mac": "{{ DEVICE_METADATA.localhost.mac }}", "resource_type": "{{ DEVICE_METADATA.localhost.resource_type }}", diff --git a/files/image_config/apt/sonic-dev.gpg.key b/files/image_config/apt/sonic-dev.gpg.key deleted file mode 100644 index fb9a37901bc7..000000000000 --- a/files/image_config/apt/sonic-dev.gpg.key +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1 - -mQENBFQ1bTIBCAC7oGfkv/ck0XsLuG8cdcSB2ISqxFAcBvH9BitEtxmpW2uhykKk -xY4rVD/4Uys1s3PF1/64QfPR+hYcewueOwz0ZAcLyFXXk4McICXaPq3NrLiWYKKX -UZLnrPzcrGZoW/kHDDp4OmBiDmT1PGvZlpuimwkMCusUzIr7Cbbp2dIy8MERL5tA -LcgLu3KL6clJ+aTW2jgepI1D7sTepOeGd7eRSb5njKg2M7k/93v/7MipZxiVtyXH -B74YiK6jSbst5JpuYsLa/Dqryvx7Xq3n53oif892pv3euTduo1fYw8Hgh/OOYdeT -c9WCj03KA1jCSFURjdrug0kR8BPlfjqtRLXFABEBAAG0JE1TIE9wZW4gVGVjaCA8 -aW50ZXJvcEBtaWNyb3NvZnQuY29tPokBOAQTAQIAIgUCVDVtMgIbAwYLCQgHAwIG -FQgCCQoLBBYCAwECHgECF4AACgkQsCxG30F6CJO1uAf/cmL68bM8YgF/61hkaY56 -LqrppUTJH/w4fKq47Pf6KfgSLvxfNU6soi2KHYRjIvTRx3tV4vUM5n2plaQg2s8V -/Epg4FeIRTk75YwiHAzLhLnp5cdUaTvC4j4mwxoB6j9Ty+fXJwQ0MvpDhIZb9vM4 -GXw/fEQHCT4f3gx4nReeqE+FB2wVHleX9+Lpodu98JyJTKJRBRHYLqy6S+/lyp2W -aBlsI1LOqBcx1uRK24U7duIpbYwIyrx0cafSruqR2GjVdu+imkhHyUn52VbzYhq1 -af0rqYiZ1VOamVOG0By8+hVyNa1MLc1K2uWGs0o5fDe9F5/swbvLHVXI+M50Vs+m -J7kBDQRUNW0yAQgAu7DkTVj0ZQC4F7bFivAwrdby8gCakTXOl1kcK622hjRJ8nam -aZeW+eADfLRsTmdUmXgZu1YWS5Gn2ZVngC8SGPUBT071+oRETCz4uNB7IimB9QfP -++orI6o2vmnVVsq5wWCbEdNU+TCVv1zjrYev5lwckkKpjHt6o8MNoX2DFuQymSyR -eZKaqhdKmcji4Ke7OIYqwgPjch3wxzE1b5gNOR/iwxWyjjOffZPLr/VhIfIJRs86 -dSXrwjHtEh810SKDLghHM0VAdY34nyC5ZZ61yhts5HtQDFK+9mNpH1mkc4gDBlgG -266pVvknumK6lPNm/osF/cpjWmEw24ypcQIvOQARAQABiQEfBBgBAgAJBQJUNW0y -AhsMAAoJELAsRt9BegiTMBUH/0sZ6gZy7mCTSAYT+NSXLFtGC2zNUVL80SWvfgYm -k9XPVI22MrefZfQ6M01RylyxtWXjRM8UoN8SDKWPpXumzJf831f/7om5zwutaG7b -tjDPYqRKJSbAIFZu2mN+uLrNQ2SV6XK7FoV0dtcrEX9S7RICb6i19D+70+Oh/qgU -R04H1jqS29XBzqAlIzdBoA+sYAwbOIJsSL3YyNQcUv3B5+5yR/bo/L8pnUJt6iuL -nWW+mi7r8gWPHDSrcdYq1TmmlOM7CwZPgWRZzkQPSeZz52Tt7IP47eyGJ09U4PIf -FtMH1ElL2UgHoA/F9Q88e7LkztaTqE59uXWbIYyuSMJVvRU= -=sb3d ------END PGP PUBLIC KEY BLOCK----- diff --git a/files/image_config/apt/sources.list.d/amd64/debian_archive_trafficmanager_net_debian.list b/files/image_config/apt/sources.list.d/amd64/debian_archive_trafficmanager_net_debian.list deleted file mode 100644 index db55f3dd60cf..000000000000 --- a/files/image_config/apt/sources.list.d/amd64/debian_archive_trafficmanager_net_debian.list +++ /dev/null @@ -1,3 +0,0 @@ -deb [arch=amd64] http://debian-archive.trafficmanager.net/debian/ bullseye main contrib non-free -#deb [arch=amd64] http://debian-archive.trafficmanager.net/debian-security/ bullseye/updates main contrib non-free -deb [arch=amd64] http://debian-archive.trafficmanager.net/debian/ bullseye-backports main contrib non-free diff --git a/files/image_config/apt/sources.list.d/arm64/debian_mirror_arm64.list b/files/image_config/apt/sources.list.d/arm64/debian_mirror_arm64.list deleted file mode 100644 index a34ce92658cc..000000000000 --- a/files/image_config/apt/sources.list.d/arm64/debian_mirror_arm64.list +++ /dev/null @@ -1,9 +0,0 @@ -deb [arch=arm64] http://deb.debian.org/debian bullseye main contrib non-free -deb-src [arch=arm64] http://deb.debian.org/debian bullseye main contrib non-free -deb [arch=arm64] http://deb.debian.org/debian bullseye-updates main contrib non-free -deb-src [arch=arm64] http://deb.debian.org/debian bullseye-updates main contrib non-free -deb [arch=arm64] http://security.debian.org bullseye-security main contrib non-free -deb-src [arch=arm64] http://security.debian.org bullseye-security main contrib non-free -deb [arch=arm64] https://download.docker.com/linux/debian bullseye stable -deb [arch=arm64] http://ftp.debian.org/debian bullseye-backports main - diff --git a/files/image_config/apt/sources.list.d/armhf/debian_mirror_armhf.list b/files/image_config/apt/sources.list.d/armhf/debian_mirror_armhf.list deleted file mode 100644 index 7c4865525feb..000000000000 --- a/files/image_config/apt/sources.list.d/armhf/debian_mirror_armhf.list +++ /dev/null @@ -1,9 +0,0 @@ -deb [arch=armhf] http://deb.debian.org/debian bullseye main contrib non-free -deb-src [arch=armhf] http://deb.debian.org/debian bullseye main contrib non-free -deb [arch=armhf] http://deb.debian.org/debian bullseye-updates main contrib non-free -deb-src [arch=armhf] http://deb.debian.org/debian bullseye-updates main contrib non-free -deb [arch=armhf] http://security.debian.org bullseye-security main contrib non-free -deb-src [arch=armhf] http://security.debian.org bullseye-security main contrib non-free -deb [arch=armhf] https://download.docker.com/linux/debian bullseye stable -deb [arch=armhf] http://ftp.debian.org/debian bullseye-backports main - diff --git a/files/image_config/bash/bash.bashrc b/files/image_config/bash/bash.bashrc index 0f19263ae04a..96f54776f945 100644 --- a/files/image_config/bash/bash.bashrc +++ b/files/image_config/bash/bash.bashrc @@ -55,7 +55,7 @@ if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-no fi # Automatically log out console ttyS* sessions after 15 minutes of inactivity -tty | grep ttyS >/dev/null && TMOUT=900 +tty | egrep -q '^/dev/ttyS[[:digit:]]+$' && TMOUT=900 # if SSH_TARGET_CONSOLE_LINE was set, attach to console line interactive cli directly if [ -n "$SSH_TARGET_CONSOLE_LINE" ]; then diff --git a/files/image_config/interfaces/interfaces-config.sh b/files/image_config/interfaces/interfaces-config.sh index 5753bebd378d..646fd7a94e71 100755 --- a/files/image_config/interfaces/interfaces-config.sh +++ b/files/image_config/interfaces/interfaces-config.sh @@ -1,6 +1,8 @@ #!/bin/bash -ifdown --force eth0 +if [[ $(ifquery --running eth0) ]]; then + ifdown --force eth0 +fi # Check if ZTP DHCP policy has been installed if [ -e /etc/network/ifupdown2/policy.d/ztp_dhcp.json ]; then diff --git a/files/image_config/logrotate/rsyslog.j2 b/files/image_config/logrotate/rsyslog.j2 index dd360dc8608e..28a7d9dd2ee0 100644 --- a/files/image_config/logrotate/rsyslog.j2 +++ b/files/image_config/logrotate/rsyslog.j2 @@ -24,7 +24,6 @@ } /var/log/auth.log -/var/log/arista.log /var/log/cron.log /var/log/syslog /var/log/teamd.log @@ -57,7 +56,7 @@ # should be disabled, just in case they get created and rotated RESERVED_SPACE_KB=4096 - VARL_LOG_SIZE_KB={{var_log_kb}} + VAR_LOG_SIZE_KB={{var_log_kb}} # Limit usable space to 90% of the partition minus the reserved space for other logs USABLE_SPACE_KB=$(( (VAR_LOG_SIZE_KB * 90 / 100) - RESERVED_SPACE_KB)) diff --git a/files/image_config/monit/container_checker b/files/image_config/monit/container_checker index 2a000d1e6bb7..a67a96a0c18c 100755 --- a/files/image_config/monit/container_checker +++ b/files/image_config/monit/container_checker @@ -20,7 +20,7 @@ import docker import sys import swsssdk -from sonic_py_common import multi_asic +from sonic_py_common import multi_asic, device_info from swsscommon import swsscommon @@ -32,7 +32,7 @@ def get_expected_running_containers(): value of field 'has_global_scope', the number of ASICs and the value of field 'has_per_asic_scope'. If the device has single ASIC, the container name was put into the list. - @return: A set which contains the expected running containers and a set that has + @return: A set which contains the expected running containers and a set that has containers marked as "always_enabled". """ config_db = swsssdk.ConfigDBConnector() @@ -41,7 +41,7 @@ def get_expected_running_containers(): expected_running_containers = set() always_running_containers = set() - + for container_name in feature_table.keys(): if feature_table[container_name]["state"] not in ["disabled", "always_disabled"]: if multi_asic.is_multi_asic(): @@ -51,14 +51,22 @@ def get_expected_running_containers(): num_asics = multi_asic.get_num_asics() for asic_id in range(num_asics): expected_running_containers.add(container_name + str(asic_id)) - elif feature_table[container_name]["state"] == 'always_enabled': - always_running_containers.add(container_name) else: expected_running_containers.add(container_name) - + if feature_table[container_name]["state"] == 'always_enabled': + if multi_asic.is_multi_asic(): + if feature_table[container_name]["has_global_scope"] == "True": + always_running_containers.add(container_name) + 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)) + 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 - def get_current_running_from_DB(always_running_containers): """ @summary: This function will get the current running container list @@ -74,7 +82,7 @@ def get_current_running_from_DB(always_running_containers): state_db = swsscommon.DBConnector("STATE_DB", 0) tbl = swsscommon.Table(state_db, "FEATURE") if not tbl.getKeys(): - return False, None + return running_containers for name in tbl.getKeys(): data = dict(tbl.get(name)[1]) @@ -93,7 +101,7 @@ def get_current_running_from_DB(always_running_containers): print("Failed to get container '{}'. Error: '{}'".format(name, err)) pass - return True, running_containers + return running_containers def get_current_running_from_dockers(): @@ -120,13 +128,12 @@ def get_current_running_containers(always_running_containers): """ @summary: This function will get the list of currently running containers. If available in STATE-DB, get from DB else from list of dockers. - + @return: A set of currently running containers. """ - ret, current_running_containers = get_current_running_from_DB(always_running_containers) - if not ret: - current_running_containers = get_current_running_from_dockers() + current_running_containers = get_current_running_from_DB(always_running_containers) + current_running_containers.update(get_current_running_from_dockers()) return current_running_containers diff --git a/files/image_config/monit/memory_checker b/files/image_config/monit/memory_checker index 4f7912c1e56c..3cd0f2d80225 100755 --- a/files/image_config/monit/memory_checker +++ b/files/image_config/monit/memory_checker @@ -85,6 +85,8 @@ def check_memory_usage(container_name, threshold_value): if mem_usage_bytes > 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)) sys.exit(3) else: syslog.syslog(syslog.LOG_ERR, "[memory_checker] Failed to retrieve memory value from '{}'" diff --git a/files/image_config/platform/rc.local b/files/image_config/platform/rc.local index b01c802f086f..7043da9fe143 100755 --- a/files/image_config/platform/rc.local +++ b/files/image_config/platform/rc.local @@ -225,11 +225,10 @@ if [ ! -e /host/machine.conf ]; then grub_installation_needed="TRUE" fi + migrate_nos_configuration umount /mnt/onie-boot fi -migrate_nos_configuration - . /host/machine.conf program_console_speed diff --git a/files/image_config/sudoers/sudoers b/files/image_config/sudoers/sudoers index f09445e1ed67..fb371c59b8ad 100644 --- a/files/image_config/sudoers/sudoers +++ b/files/image_config/sudoers/sudoers @@ -64,6 +64,9 @@ ALL ALL=NOPASSWD: READ_ONLY_CMDS # Prevent password related command into syslog Defaults!PASSWD_CMDS !syslog +# Make sure sudo password prompt times out after 5 mins +Defaults passwd_timeout=5 + # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d diff --git a/files/initramfs-tools/arista-net b/files/initramfs-tools/arista-net index 8759746458d6..bfa4f8a6507c 100644 --- a/files/initramfs-tools/arista-net +++ b/files/initramfs-tools/arista-net @@ -47,7 +47,9 @@ arista_net_rename() { local new_name="$2" local from_name="$3" devname=$(arista_net_devname "$device_path" "$from_name") - [ -n "$devname" ] && ip link set "$devname" name "$new_name" + if [ -n "$devname" ]; then + ip link set "$devname" name "$new_name" + fi } # Sets the MAC address to the value passed by Aboot through /proc/cmdline @@ -95,19 +97,33 @@ fi # Iterate over all the net_maX items found in the cmdline two times. # First time renaming the interfaces to maX. # The second time renaming them to their final name ethX. -if [ -n "$aboot_flag" -a "$platform_flag" == 'rook' ]; then - for item in $items; do - key="${item%=*}" - value="${item#*=}" - arista_net_rename "$value" "$key" eth - done - for item in $items; do - key="${item%=*}" - value="${item#*=}" - index="${key#ma}" - index="$(( $index - 1 ))" - newKey="eth$index" - arista_net_rename "$value" "$newKey" ma - done +if [ -n "$aboot_flag" ]; then + if [ "$platform_flag" = 'rook' -o "$platform_flag" = 'lorikeet' ]; then + # Rename existing ethX interfaces to tmpX + for x in $(ls /sys/class/net/); do + case $x in + eth*) + value="${x#*eth}" + newname="tmp$value" + ip link set $x down + ip link set $x name "$newname" + ;; + *) + esac + done + for item in $items; do + key="${item%=*}" + value="${item#*=}" + arista_net_rename "$value" "$key" tmp + done + for item in $items; do + key="${item%=*}" + value="${item#*=}" + index="${key#ma}" + index="$(( $index - 1 ))" + newKey="eth$index" + arista_net_rename "$value" "$newKey" ma + done + fi fi diff --git a/files/initramfs-tools/mke2fs b/files/initramfs-tools/mke2fs index 1f98f20c23c4..2c6d45ea5bc9 100644 --- a/files/initramfs-tools/mke2fs +++ b/files/initramfs-tools/mke2fs @@ -21,6 +21,7 @@ copy_exec /usr/sbin/mke2fs /usr/local/sbin/ copy_exec /sbin/sfdisk copy_exec /sbin/fdisk copy_exec /sbin/resize2fs +copy_exec /sbin/tune2fs copy_exec /sbin/findfs fstypes="ext4 ext3" diff --git a/files/initramfs-tools/union-mount.j2 b/files/initramfs-tools/union-mount.j2 index c680e69300d1..c9dd19204406 100644 --- a/files/initramfs-tools/union-mount.j2 +++ b/files/initramfs-tools/union-mount.j2 @@ -132,7 +132,8 @@ case "${ROOT}" in ;; *) ## Mount the raw partition again - mount ${ROOT} ${rootmnt}/host + mount -t ext4 ${ROOT} ${rootmnt}/host + tune2fs -m 0 -r 0 ${ROOT} ;; esac diff --git a/files/initramfs-tools/varlog b/files/initramfs-tools/varlog index e8063e41a59c..980b24523452 100644 --- a/files/initramfs-tools/varlog +++ b/files/initramfs-tools/varlog @@ -11,17 +11,27 @@ case $1 in ;; esac +logs_inram=false + # Extract kernel parameters set -- $(cat /proc/cmdline) for x in "$@"; do case "$x" in varlog_size=*) varlog_size="${x#varlog_size=}" + ;; + logs_inram=on) + logs_inram=true + ;; esac done [ -z "$varlog_size" ] && exit 0 +# If logs are being stored in memory, then don't bother +# creating the log file just to have it deleted afterwards. +$logs_inram && exit 0 + # exit when the var_log.ext4 exists and the size matches if [ -e "${rootmnt}/host/disk-img/var-log.ext4" ]; then cur_varlog_size=$(ls -l ${rootmnt}/host/disk-img/var-log.ext4 | awk '{print $5}') diff --git a/files/scripts/gbsyncd.sh b/files/scripts/gbsyncd.sh index 512ceed2d747..0990de5d8257 100755 --- a/files/scripts/gbsyncd.sh +++ b/files/scripts/gbsyncd.sh @@ -3,7 +3,11 @@ . /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 } function waitplatform() { diff --git a/files/scripts/swss.sh b/files/scripts/swss.sh index 4f8f1b1af054..40acaa33c573 100755 --- a/files/scripts/swss.sh +++ b/files/scripts/swss.sh @@ -112,11 +112,13 @@ start_peer_and_dependent_services() { check_warm_boot if [[ x"$WARM_BOOT" != x"true" ]]; then - if [[ ! -z $DEV ]]; then - /bin/systemctl start ${PEER}@$DEV - else - /bin/systemctl start ${PEER} - fi + for peer in ${PEER}; do + if [[ ! -z $DEV ]]; then + /bin/systemctl start ${peer}@$DEV + else + /bin/systemctl start ${peer} + fi + done for dep in ${DEPENDENT}; do /bin/systemctl start ${dep} done @@ -143,11 +145,13 @@ stop_peer_and_dependent_services() { for dep in ${DEPENDENT}; do /bin/systemctl stop ${dep} done - if [[ ! -z $DEV ]]; then - /bin/systemctl stop ${PEER}@$DEV - else - /bin/systemctl stop ${PEER} - fi + for peer in ${PEER}; do + if [[ ! -z $DEV ]]; then + /bin/systemctl stop ${peer}@$DEV + else + /bin/systemctl stop ${peer} + fi + done fi } @@ -207,11 +211,18 @@ wait() { # NOTE: This assumes Docker containers share the same names as their # corresponding services for SECS in {1..60}; do - if [[ ! -z $DEV ]]; then - RUNNING=$(docker inspect -f '{{.State.Running}}' ${PEER}$DEV) - else - RUNNING=$(docker inspect -f '{{.State.Running}}' ${PEER}) - fi + ALL_PEERS_RUNNING=true + for peer in ${PEER}; do + if [[ ! -z $DEV ]]; then + RUNNING=$(docker inspect -f '{{.State.Running}}' ${peer}$DEV) + else + RUNNING=$(docker inspect -f '{{.State.Running}}' ${peer}) + fi + if [[ x"$RUNNING" != x"true" ]]; then + ALL_PEERS_RUNNING=false + break + fi + done ALL_DEPS_RUNNING=true for dep in ${MULTI_INST_DEPENDENT}; do if [[ ! -z $DEV ]]; then @@ -225,7 +236,7 @@ wait() { fi done - if [[ x"$RUNNING" == x"true" && x"$ALL_DEPS_RUNNING" == x"true" ]]; then + if [[ x"$ALL_PEERS_RUNNING" == x"true" && x"$ALL_DEPS_RUNNING" == x"true" ]]; then break else sleep 1 @@ -243,7 +254,7 @@ wait() { done if [[ ! -z $DEV ]]; then - /usr/bin/docker-wait-any -s ${SERVICE}$DEV -d ${PEER}$DEV ${ALL_DEPS} + /usr/bin/docker-wait-any -s ${SERVICE}$DEV -d `printf "%s$DEV " ${PEER}` ${ALL_DEPS} else /usr/bin/docker-wait-any -s ${SERVICE} -d ${PEER} ${ALL_DEPS} fi @@ -283,6 +294,17 @@ stop() { stop_peer_and_dependent_services } +function check_peer_gbsyncd() +{ + PLATFORM=`$SONIC_DB_CLI CONFIG_DB hget 'DEVICE_METADATA|localhost' platform` + HWSKU=`$SONIC_DB_CLI CONFIG_DB hget 'DEVICE_METADATA|localhost' hwsku` + GEARBOX_CONFIG=/usr/share/sonic/device/$PLATFORM/$HWSKU/$DEV/gearbox_config.json + + if [ -f $GEARBOX_CONFIG ]; then + PEER="$PEER gbsyncd" + fi +} + if [ "$DEV" ]; then NET_NS="$NAMESPACE_PREFIX$DEV" #name of the network namespace SONIC_DB_CLI="sonic-db-cli -n $NET_NS" @@ -291,6 +313,7 @@ else SONIC_DB_CLI="sonic-db-cli" fi +check_peer_gbsyncd read_dependent_services case "$1" in diff --git a/files/scripts/syncd.sh b/files/scripts/syncd.sh index 95c3e3841ba8..889495e8c50a 100755 --- a/files/scripts/syncd.sh +++ b/files/scripts/syncd.sh @@ -28,6 +28,14 @@ function startplatform() { debug "Firmware update procedure ended" fi + if [[ x"$sonic_asic_platform" == x"barefoot" ]]; then + is_usb0=$(ls /sys/class/net | grep usb0) + if [[ "$is_usb0" == "usb0" ]]; then + /usr/bin/ip link set usb0 down + /usr/bin/ip link set usb0 up + fi + fi + if [[ x"$WARM_BOOT" != x"true" ]]; then if [ x$sonic_asic_platform == x'cavium' ]; then /etc/init.d/xpnet.sh start diff --git a/files/scripts/syncd_common.sh b/files/scripts/syncd_common.sh index 3bb7c9fe6b6e..3adfb6cbfcf9 100755 --- a/files/scripts/syncd_common.sh +++ b/files/scripts/syncd_common.sh @@ -48,6 +48,15 @@ function check_warm_boot() fi } +function check_fast_boot() +{ + if [[ $($SONIC_DB_CLI STATE_DB GET "FAST_REBOOT|system") == "1" ]]; then + FAST_BOOT="true" + else + FAST_BOOT="false" + fi +} + function wait_for_database_service() { # Wait for redis server start before database clean @@ -140,10 +149,14 @@ stop() { lock_service_state_change check_warm_boot + check_fast_boot debug "Warm boot flag: ${SERVICE}$DEV ${WARM_BOOT}." + debug "Fast boot flag: ${SERVICE}$DEV ${FAST_BOOT}." if [[ x"$WARM_BOOT" == x"true" ]]; then TYPE=warm + elif [[ x"$FAST_BOOT" == x"true" ]]; then + TYPE=fast else TYPE=cold fi diff --git a/files/scripts/teamd.sh b/files/scripts/teamd.sh index 57b70913e917..4de3f25c4dbd 100755 --- a/files/scripts/teamd.sh +++ b/files/scripts/teamd.sh @@ -93,13 +93,17 @@ stop() { # We call `docker kill teamd` to ensure the container stops as quickly as possible, # Note: teamd must be killed before syncd, because it will send the last packet through CPU port docker exec -i ${SERVICE}$DEV pkill -USR2 -f ${TEAMD_CMD} || [ $? == 1 ] + fi + + if [[ x"$WARM_BOOT" == x"true" ]] || [[ x"$FAST_BOOT" == x"true" ]]; then while docker exec -i ${SERVICE}$DEV pgrep -f ${TEAMD_CMD} > /dev/null; do sleep 0.05 done docker kill ${SERVICE}$DEV &> /dev/null || debug "Docker ${SERVICE}$DEV is not running ($?) ..." + else + /usr/bin/${SERVICE}.sh stop $DEV fi - /usr/bin/${SERVICE}.sh stop $DEV debug "Stopped ${SERVICE}$DEV service..." } diff --git a/files/scripts/write_standby.py b/files/scripts/write_standby.py index 4c5455803fac..53cf5265ecde 100755 --- a/files/scripts/write_standby.py +++ b/files/scripts/write_standby.py @@ -91,7 +91,7 @@ def tunnel_exists(self): tunnel_key_pattern = 'ASIC_STATE:SAI_OBJECT_TYPE_TUNNEL:*' return len(self.asic_db.keys('ASIC_DB', tunnel_key_pattern)) > 0 - def wait_for_tunnel(self, interval=1, timeout=30): + def wait_for_tunnel(self, interval=1, timeout=60): """ Waits until the IP-in-IP tunnel has been created diff --git a/installer/x86_64/install.sh b/installer/x86_64/install.sh index 733dea43da64..dbab4d54ab72 100755 --- a/installer/x86_64/install.sh +++ b/installer/x86_64/install.sh @@ -652,7 +652,7 @@ fi # Note: assume that apparmor is supported in the kernel demo_grub_entry="$demo_volume_revision_label" if [ "$install_env" = "sonic" ]; then - old_sonic_menuentry=$(cat /host/grub/grub.cfg | sed "/$running_sonic_revision/,/}/!d") + old_sonic_menuentry=$(cat /host/grub/grub.cfg | sed "/^menuentry '${demo_volume_label}-${running_sonic_revision}'/,/}/!d") grub_cfg_root=$(echo $old_sonic_menuentry | sed -e "s/.*root\=\(.*\)rw.*/\1/") onie_menuentry=$(cat /host/grub/grub.cfg | sed "/menuentry ONIE/,/}/!d") elif [ "$install_env" = "build" ]; then diff --git a/platform/barefoot/bfn-modules/modules/bf_ioctl.h b/platform/barefoot/bfn-modules/modules/bf_ioctl.h index 0644feb7c8c1..fcb8f86ae7e5 100644 --- a/platform/barefoot/bfn-modules/modules/bf_ioctl.h +++ b/platform/barefoot/bfn-modules/modules/bf_ioctl.h @@ -1,7 +1,7 @@ /******************************************************************************* Barefoot Networks Switch ASIC Linux driver Copyright(c) 2015 - 2019 Barefoot Networks, Inc. - + This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License, version 2, as published by the Free Software Foundation. @@ -39,6 +39,7 @@ typedef uint64_t phys_addr_t; #define BF_IOC_MAGIC 'b' #define BF_TBUS_MSIX_INDICES_MAX 3 +#define BF_TBUS_MSIX_INDICES_MIN 1 typedef struct bf_dma_bus_map_s { diff --git a/platform/barefoot/bfn-modules/modules/bf_kdrv.c b/platform/barefoot/bfn-modules/modules/bf_kdrv.c index 2bddc72cbbf7..4f48de9ba99b 100644 --- a/platform/barefoot/bfn-modules/modules/bf_kdrv.c +++ b/platform/barefoot/bfn-modules/modules/bf_kdrv.c @@ -37,6 +37,7 @@ #include #include #include +#include #include #include "bf_ioctl.h" #include "bf_kdrv.h" @@ -60,6 +61,7 @@ extern int bf_kpkt_init(struct pci_dev *pdev, u8 *bar0_vaddr, void **adapter_ptr, int dev_id, + int subdev_id, int pci_use_highmem, unsigned long head_room, int kpkt_dr_int_en, @@ -72,14 +74,15 @@ extern void bf_kpkt_set_pci_error(void *adapter_ptr, u8 pci_error); /* Keep any global information here that must survive even after the * bf_pci_dev is free-ed up. */ -struct bf_global { +struct bf_global_s { struct bf_pci_dev *bfdev; struct cdev *bf_cdev; struct fasync_struct *async_queue; + /* Pending user space error signal. */ + bool pending_signal; }; -static int bf_major; -static int bf_minor[BF_MAX_DEVICE_CNT] = {0}; +static int bf_minor[BF_MAX_DEV_SUBDEV_CNT] = {0}; static struct class *bf_class = NULL; static char *intr_mode = NULL; static int kpkt_mode = 0; @@ -91,7 +94,10 @@ static enum bf_intr_mode bf_intr_mode_default = BF_INTR_MODE_MSI; static spinlock_t bf_nonisr_lock; /* dev->minor should index into this array */ -static struct bf_global bf_global[BF_MAX_DEVICE_CNT]; +static struct bf_global_s bf_global[BF_MAX_DEV_SUBDEV_CNT]; + +/* global tofino3 info to group subdevices to a parent device */ +static struct bf_tof3_info_s bf_tof3_info[BF_MAX_DEVICE_CNT]; static void bf_add_listener(struct bf_pci_dev *bfdev, struct bf_listener *listener) { @@ -145,7 +151,7 @@ static int bf_get_next_minor_no(int *minor) { int i; spin_lock(&bf_nonisr_lock); - for (i = 0; i < BF_MAX_DEVICE_CNT; i++) { + for (i = 0; i < BF_MAX_DEV_SUBDEV_CNT; i++) { if (bf_minor[i] == 0) { *minor = i; bf_minor[i] = 1; /* mark it as taken */ @@ -276,7 +282,7 @@ static irqreturn_t bf_pci_irqhandler(int irq, struct bf_pci_dev *bfdev) { bf_kpkt_irqhandler(irq, bfdev->adapter_ptr); } } else if (bfdev->mode == BF_INTR_MODE_MSIX) { - if (bfdev->info.tof_type == BF_TOFINO_2 && bf_irq_is_tbus_msix(bfdev,irq)) { + if ((bfdev->info.tof_type == BF_TOFINO_2 || bfdev->info.tof_type == BF_TOFINO_3) && bf_irq_is_tbus_msix(bfdev, irq)) { bf_kpkt_irqhandler(irq, bfdev->adapter_ptr); } } @@ -470,6 +476,7 @@ static int bf_mmap(struct file *filep, struct vm_area_struct *vma) { static int bf_fasync(int fd, struct file *filep, int mode) { int minor; + int res; if (!filep->private_data) { return (-EINVAL); @@ -479,17 +486,32 @@ static int bf_fasync(int fd, struct file *filep, int mode) { return (-EINVAL); } if (mode == 0 && &bf_global[minor].async_queue == NULL) { + bf_global[minor].pending_signal = false; return 0; /* nothing to do */ } - return (fasync_helper(fd, filep, mode, &bf_global[minor].async_queue)); + res = fasync_helper(fd, filep, mode, &bf_global[minor].async_queue); + if (bf_global[minor].pending_signal && bf_global[minor].async_queue) { + kill_fasync(&bf_global[minor].async_queue, SIGIO, POLL_ERR); + } + bf_global[minor].pending_signal = false; + return res; } static int bf_open(struct inode *inode, struct file *filep) { + unsigned id; struct bf_pci_dev *bfdev; struct bf_listener *listener; int i; - bfdev = bf_global[iminor(inode)].bfdev; + id = iminor(inode); + if (id >= BF_MAX_DEVICE_CNT) { + return (-EINVAL); + } + + bfdev = bf_global[id].bfdev; + if (bfdev->in_use) { + return (-EBUSY); + } listener = kmalloc(sizeof(*listener), GFP_KERNEL); if (listener) { listener->bfdev = bfdev; @@ -500,6 +522,7 @@ static int bf_open(struct inode *inode, struct file *filep) { listener->event_count[i] = atomic_read(&bfdev->info.event[i]); } filep->private_data = listener; + bfdev->in_use = 1; return 0; } else { return (-ENOMEM); @@ -512,6 +535,7 @@ static int bf_release(struct inode *inode, struct file *filep) { bf_fasync(-1, filep, 0); /* empty any process id in the notification list */ if (listener->bfdev) { bf_remove_listener(listener->bfdev, listener); + listener->bfdev->in_use = 0; } kfree(listener); return 0; @@ -645,7 +669,15 @@ static long bf_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) } switch(cmd) { case BF_IOCMAPDMAADDR: -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0) +#if defined(RHEL_RELEASE_CODE) +#if defined(RHEL_RELEASE_VERSION) +#if RHEL_RELEASE_CODE > RHEL_RELEASE_VERSION(7, 9) + if (access_ok(addr, sizeof(bf_dma_bus_map_t))) { +#else + if (access_ok(VERIFY_WRITE, addr, sizeof(bf_dma_bus_map_t))) { +#endif +#endif /* RHEL_RELEASE_CODE && RHEL_RELEASE_VERSION */ +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0) if (access_ok(addr, sizeof(bf_dma_bus_map_t))) { #else if (access_ok(VERIFY_WRITE, addr, sizeof(bf_dma_bus_map_t))) { @@ -669,7 +701,15 @@ static long bf_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) } break; case BF_IOCUNMAPDMAADDR: -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0) +#if defined(RHEL_RELEASE_CODE) +#if defined(RHEL_RELEASE_VERSION) +#if RHEL_RELEASE_CODE > RHEL_RELEASE_VERSION(7, 9) + if (access_ok(addr, sizeof(bf_dma_bus_map_t))) { +#else + if (access_ok(VERIFY_WRITE, addr, sizeof(bf_dma_bus_map_t))) { +#endif +#endif /* RHEL_RELEASE_CODE && RHEL_RELEASE_VERSION */ +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0) if (access_ok(addr, sizeof(bf_dma_bus_map_t))) { #else if (access_ok(VERIFY_READ, addr, sizeof(bf_dma_bus_map_t))) { @@ -692,21 +732,39 @@ static long bf_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) } else { int i; bf_tbus_msix_indices_t msix_ind; - if (copy_from_user(&msix_ind, addr, sizeof(bf_tbus_msix_indices_t))) { - return EFAULT; - } - if (msix_ind.cnt > BF_TBUS_MSIX_INDICES_MAX) { - return EINVAL; - } - for (i = 0; i < msix_ind.cnt; i++) { - if (msix_ind.indices[i] >= BF_MSIX_ENTRY_CNT) { +#if defined(RHEL_RELEASE_CODE) +#if defined(RHEL_RELEASE_VERSION) +#if RHEL_RELEASE_CODE > RHEL_RELEASE_VERSION(7, 9) + if (access_ok(addr, sizeof(bf_tbus_msix_indices_t))) { +#else + if (access_ok(VERIFY_WRITE, addr, sizeof(bf_tbus_msix_indices_t))) { +#endif +#endif /* RHEL_RELEASE_CODE && RHEL_RELEASE_VERSION */ +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0) + if (access_ok(addr, sizeof(bf_tbus_msix_indices_t))) { +#else + if (access_ok(VERIFY_READ, addr, sizeof(bf_tbus_msix_indices_t))) { +#endif + if (copy_from_user(&msix_ind, addr, sizeof(bf_tbus_msix_indices_t))) { + return EFAULT; + } + if (msix_ind.cnt < BF_TBUS_MSIX_INDICES_MIN || + msix_ind.cnt > BF_TBUS_MSIX_INDICES_MAX) { return EINVAL; } + for (i = 0; i < msix_ind.cnt; i++) { + if (msix_ind.indices[i] < 0 || + msix_ind.indices[i] >= BF_MSIX_ENTRY_CNT) { + return EINVAL; + } + } + for (i = 0; i < msix_ind.cnt; i++) { + bfdev->info.tbus_msix_ind[i] = msix_ind.indices[i]; + } + bfdev->info.tbus_msix_map_enable = 1; + } else { + return EFAULT; } - for (i = 0; i < msix_ind.cnt; i++) { - bfdev->info.tbus_msix_ind[i] = msix_ind.indices[i]; - } - bfdev->info.tbus_msix_map_enable = 1; } break; case BF_GET_INTR_MODE: @@ -761,7 +819,7 @@ static int bf_major_init(struct bf_pci_dev *bfdev, int minor) { goto fail_dev_add; } - bf_major = MAJOR(bf_dev); + bfdev->info.major = MAJOR(bf_dev); bf_global[minor].bf_cdev = cdev; return 0; @@ -771,33 +829,93 @@ static int bf_major_init(struct bf_pci_dev *bfdev, int minor) { } static void bf_major_cleanup(struct bf_pci_dev *bfdev, int minor) { - unregister_chrdev_region(MKDEV(bf_major, 0), BF_MAX_DEVICE_CNT); + unregister_chrdev_region(MKDEV(bfdev->info.major, 0), BF_MAX_DEVICE_CNT); cdev_del(bf_global[minor].bf_cdev); } static int bf_init_cdev(struct bf_pci_dev *bfdev, int minor) { int ret; ret = bf_major_init(bfdev, minor); - if (ret) return ret; - - bf_class = class_create(THIS_MODULE, BF_CLASS_NAME); - if (!bf_class) { - printk(KERN_ERR "create_class failed for bf_dev\n"); - ret = -ENODEV; - goto err_class_register; - } - return 0; - -err_class_register: - bf_major_cleanup(bfdev, minor); return ret; } static void bf_remove_cdev(struct bf_pci_dev *bfdev) { - class_destroy(bf_class); bf_major_cleanup(bfdev, bfdev->info.minor); } +/* return the first unused dev_id based on invalid chip_id */ +static int bf_multisub_tof_unused_devid_get(void) { + int i; + for (i = 0; i < BF_MAX_DEVICE_CNT; i++) { + if ((bf_tof3_info[i]).minor[0] == -1 && + (bf_tof3_info[i]).minor[1] == -1) { + return i; + } + } + return -1; +} + +/* special case handling for TOF3. each subdevice creates its own device node + * device node is named as /dev/bfs +*/ +static int bf_tof3_register_device(struct device *parent, + struct bf_pci_dev *bfdev) { + struct bf_dev_info *info = &bfdev->info; + int minor = 0; + u8 *bf_base_addr; + volatile u32 *bf_addr; + int dev_id = 0, subdev_id = 0, ret = 0; + + if (!info || !info->version) { + return -EINVAL; + } + bf_base_addr = (info->mem[0].internal_addr); + if (!bf_base_addr) { + return -ENODEV; + } + /* *** TBD for multi Tofino(with 2 subdevices) systems *** */ + /* We must be able to identify multiple sub devices as belonging to one + physical Tofino(3) device. We have not figured that out yet. + until then, we support only one CB device per host CPU */ + bf_addr = (u32 *)((u8 *)bf_base_addr + TOFINO3_MISC_PAD_STATUS_OFFSET); +#if 1 /* USING EMULATOR where subdevice info is not possible to have */ + bf_multisub_tof_unused_devid_get(); /* keep compiler happy */ + subdev_id = 0; + if (bf_get_next_minor_no(&minor)) { + return -EINVAL; + } + dev_id = minor; +#else + subdev_id = (int)(*bf_addr & TOFINO3_MISC_PAD_STATUS_DIEID0); + if (bf_get_next_minor_no(&minor)) { + return -EINVAL; + } + /* we cannot assume the order in which sub devices are probed */ + if (subdev_id == 0) { + dev_id = bf_multisub_tof_unused_devid_get(); + bf_tof3_info[dev_id].dev_id = dev_id; /* back reference */ + (bf_tof3_info[dev_id].minor)[subdev_id] = minor; + } else { + dev_id = 0; /* TBD : for Tofino with multi sub devices */ + (bf_tof3_info[dev_id].minor)[subdev_id] = minor; + } +#endif + ret = bf_init_cdev(bfdev, minor); + if (ret) { + printk(KERN_ERR "BF: device cdev creation failed dev_id %d\n", dev_id); + return ret; + } + info->tof3_info = &(bf_tof3_info[dev_id]); + info->dev_id = dev_id; + info->subdev_id = subdev_id; + printk(KERN_NOTICE "BF: registering dev_id %d subdev_id %d\n", + dev_id, subdev_id); + info->dev = device_create(bf_class, parent, MKDEV(bfdev->info.major, minor), + bfdev, "bf%ds%1d", dev_id, subdev_id); + info->minor = minor; + return 0; +} + /** * bf_register_device - register a new userspace mem device * @parent: parent device @@ -808,7 +926,7 @@ static void bf_remove_cdev(struct bf_pci_dev *bfdev) { int bf_register_device(struct device *parent, struct bf_pci_dev *bfdev) { struct bf_dev_info *info = &bfdev->info; int i, j, ret = 0; - int minor; + int minor = 0; if (!parent || !info || !info->version) { return -EINVAL; @@ -820,25 +938,33 @@ int bf_register_device(struct device *parent, struct bf_pci_dev *bfdev) { atomic_set(&info->event[i], 0); } - if (bf_get_next_minor_no(&minor)) { - return -EINVAL; - } + if (info->tof_type == BF_TOFINO_3) { + if ((ret = bf_tof3_register_device(parent, bfdev)) != 0) { + printk(KERN_ERR "BF: TOF3 device cdev creation failed %d\n", ret); + return ret; + } + } else { + if (bf_get_next_minor_no(&minor)) { + return -EINVAL; + } - ret = bf_init_cdev(bfdev, minor); - if (ret) { - printk(KERN_ERR "BF: device cdev creation failed\n"); - return ret; - } + ret = bf_init_cdev(bfdev, minor); + if (ret) { + printk(KERN_ERR "BF: device cdev creation failed\n"); + return ret; + } - info->dev = device_create( - bf_class, parent, MKDEV(bf_major, minor), bfdev, "bf%d", minor); + info->dev = device_create( + bf_class, parent, MKDEV(bfdev->info.major, minor), bfdev, "bf%d", minor); + info->minor = minor; + info->dev_id = minor; + info->subdev_id = 0; + } if (!info->dev) { printk(KERN_ERR "BF: device creation failed\n"); return -ENODEV; } - info->minor = minor; - /* bind ISRs and request interrupts */ if (info->irq && (bfdev->mode != BF_INTR_MODE_NONE)) { /* @@ -906,6 +1032,33 @@ int bf_register_device(struct device *parent, struct bf_pci_dev *bfdev) { return 0; } +/* special case handling for TOF3. return minor number only after all + * sub devices using the minor number are unregistered */ +static int bf_tof3_unregister_device(struct bf_pci_dev *bfdev) { + struct bf_dev_info *info = &bfdev->info; +#if 1 //HACK until emulator implements efuse + bf_return_minor_no(info->minor); +#else + int j, dev_id, subdev_id, found; + + if (!info->tof3_info) { + printk(KERN_ERR "BF TOF3 bad info in tof3_unregister_device\n"); + return -1; + } + dev_id = info->tof3_info->dev_id; + subdev_id = info->subdev_id; + if (dev_id >= BF_MAX_DEVICE_CNT || subdev_id >= BF_MAX_SUBDEV_CNT) { + return -1; + } + /* update bf_tof3_info structure for the device being unregistered */ + (bf_tof3_info[dev_id].minor)[subdev_id] = -1; + /* return the minor number */ + bf_return_minor_no(info->minor); + info->subdev_id = -1; +#endif + return 0; +} + /** * bf_unregister_device - register a new userspace mem device * @bfdev: bf pci device @@ -914,8 +1067,12 @@ int bf_register_device(struct device *parent, struct bf_pci_dev *bfdev) { */ void bf_unregister_device(struct bf_pci_dev *bfdev) { struct bf_dev_info *info = &bfdev->info; - int i; + int i, ret; + if (!info) { + printk(KERN_ERR "BF: bad data in device unregister\n"); + return; + } if (info->irq) { if (bfdev->mode == BF_INTR_MODE_LEGACY) { free_irq(info->irq, (void *)&(bfdev->bf_int_vec[0])); @@ -929,9 +1086,16 @@ void bf_unregister_device(struct bf_pci_dev *bfdev) { } } } - device_destroy(bf_class, MKDEV(bf_major, info->minor)); + device_destroy(bf_class, MKDEV(info->major, info->minor)); bf_remove_cdev(bfdev); - bf_return_minor_no(info->minor); + if (bfdev->info.tof_type == BF_TOFINO_3) { + if ((ret = bf_tof3_unregister_device(bfdev)) != 0) { + printk(KERN_ERR "BF: TOF3 device cdev unregister failed %d\n", ret); + return; + } + } else { + bf_return_minor_no(info->minor); + } return; } @@ -944,13 +1108,13 @@ static void bf_disable_int_dma(struct bf_pci_dev *bfdev) { u32 *bf_addr; volatile u32 val; - /* maskinterrupts and DMA */ + /* mask interrupts and DMA */ bf_base_addr = (bfdev->info.mem[0].internal_addr); /* return if called before mmap */ if (!bf_base_addr) { return; } - /* mask interrupt at shadow level */ + /* mask interrupts at shadow level */ bf_addr = (u32 *)((u8 *)bf_base_addr + 0xc0); for (i = 0; i < 16; i++) { *bf_addr = 0xffffffffUL; @@ -968,8 +1132,6 @@ static int bf_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { int err, pci_use_highmem; int i, num_irq; - memset(bf_global, 0, sizeof(bf_global)); - bfdev = kzalloc(sizeof(struct bf_pci_dev), GFP_KERNEL); if (!bfdev) { return -ENOMEM; @@ -995,6 +1157,9 @@ static int bf_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { case TOFINO2_DEV_ID_B0: bfdev->info.tof_type = BF_TOFINO_2; break; + case TOFINO3_DEV_ID_A0: + bfdev->info.tof_type = BF_TOFINO_3; + break; default: bfdev->info.tof_type = BF_TOFINO_1; break; @@ -1005,6 +1170,8 @@ static int bf_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { bfdev->info.tbus_msix_ind[i] = BF_TBUS_MSIX_BASE_INDEX_TOF1 + i; } else if (bfdev->info.tof_type == BF_TOFINO_2) { bfdev->info.tbus_msix_ind[i] = BF_TBUS_MSIX_INDEX_INVALID; + } else if (bfdev->info.tof_type == BF_TOFINO_3) { + bfdev->info.tbus_msix_ind[i] = BF_TBUS_MSIX_INDEX_INVALID; } } /* @@ -1068,7 +1235,6 @@ static int bf_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { bfdev->info.version = "0.2"; bfdev->info.owner = THIS_MODULE; bfdev->pdev = pdev; - switch (bf_intr_mode_default) { #ifdef CONFIG_PCI_MSI case BF_INTR_MODE_MSIX: @@ -1113,6 +1279,7 @@ static int bf_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { } #endif /* LINUX_VERSION_CODE */ /* ** intentional no-break */ + /* FALLTHRU */ case BF_INTR_MODE_MSI: #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 14, 0) num_irq = pci_enable_msi_block(pdev, BF_MSI_ENTRY_CNT); @@ -1150,6 +1317,7 @@ static int bf_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { #endif /* LINUX_VERSION_CODE */ #endif /* CONFIG_PCI_MSI */ /* fall back to Legacy Interrupt, intentional no-break */ + /* FALLTHRU */ case BF_INTR_MODE_LEGACY: if (pci_intx_mask_supported(pdev)) { @@ -1161,6 +1329,7 @@ static int bf_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { } printk(KERN_NOTICE " bf PCI INTx mask not supported\n"); /* fall back to no Interrupt, intentional no-break */ + /* FALLTHRU */ case BF_INTR_MODE_NONE: bfdev->info.irq = 0; bfdev->info.num_irq = 0; @@ -1183,6 +1352,7 @@ static int bf_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { bf_global[bfdev->info.minor].async_queue = NULL; bf_global[bfdev->info.minor].bfdev = bfdev; + bf_global[bfdev->info.minor].pending_signal = false; dev_info(&pdev->dev, "bf device %d registered with irq %ld\n", @@ -1194,15 +1364,18 @@ static int bf_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { err = bf_kpkt_init(pdev, bfdev->info.mem[0].internal_addr, &bfdev->adapter_ptr, - bfdev->info.minor, + bfdev->info.dev_id, + bfdev->info.subdev_id, pci_use_highmem, kpkt_hd_room, kpkt_dr_int_en, kpkt_rx_count); if (err == 0) { - printk(KERN_ALERT "bf_kpkt kernel processing enabled\n"); + printk(KERN_ALERT "bf_kpkt kernel processing enabled for dev %d subdev_id %d\n", + bfdev->info.dev_id, bfdev->info.subdev_id); } else { - printk(KERN_ALERT "error starting bf_kpkt kernel processing\n"); + printk(KERN_ERR "error starting bf_kpkt kernel processing for dev %d subdev_id %d\n", + bfdev->info.dev_id, bfdev->info.subdev_id); bfdev->adapter_ptr = NULL; } } @@ -1316,16 +1489,29 @@ static pci_ers_result_t bf_pci_mmio_enabled(struct pci_dev *dev) { struct bf_pci_dev *bfdev = pci_get_drvdata(dev); printk(KERN_ERR "BF pci_mmio_enabled invoked after pci error\n"); - #if KERNEL_VERSION(5, 8, 0) <= LINUX_VERSION_CODE - pci_aer_clear_nonfatal_status(dev); - #else - pci_cleanup_aer_uncorrect_error_status(dev); - #endif +#if defined(RHEL_RELEASE_CODE) +#if defined(RHEL_RELEASE_VERSION) +#if RHEL_RELEASE_CODE > RHEL_RELEASE_VERSION(7, 9) + pci_aer_clear_nonfatal_status(dev); +#else + pci_cleanup_aer_uncorrect_error_status(dev); +#endif +#endif /* RHEL_RELEASE_CODE && RHEL_RELEASE_VERSION */ +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0) + pci_aer_clear_nonfatal_status(dev); +#else + pci_cleanup_aer_uncorrect_error_status(dev); +#endif + if (bfdev) { /* send a signal to the user space program of the error */ int minor = bfdev->info.minor; - if (minor < BF_MAX_DEVICE_CNT && bf_global[minor].async_queue) { - kill_fasync(&bf_global[minor].async_queue, SIGIO, POLL_ERR); + if (minor < BF_MAX_DEVICE_CNT) { + if (bf_global[minor].async_queue) { + kill_fasync(&bf_global[minor].async_queue, SIGIO, POLL_ERR); + } else { + bf_global[minor].pending_signal = true; + } } } return PCI_ERS_RESULT_RECOVERED; @@ -1389,6 +1575,7 @@ static const struct pci_device_id bf_pci_tbl[] = { {PCI_VDEVICE(BF, TOFINO2_DEV_ID_A0), 0}, {PCI_VDEVICE(BF, TOFINO2_DEV_ID_A00), 0}, {PCI_VDEVICE(BF, TOFINO2_DEV_ID_B0), 0}, + {PCI_VDEVICE(INTEL, TOFINO3_DEV_ID_A0), 0}, /* required last entry */ {.device = 0}}; @@ -1409,12 +1596,36 @@ static struct pci_driver bf_pci_driver = {.name = "bf", static int __init bfdrv_init(void) { int ret; + pr_info("%s: %s - version %s\n", DRV_NAME(kpkt_mode), + DRV_DESCRIPTION(kpkt_mode),DRV_VERSION); + pr_info("%s: %s\n", DRV_NAME(kpkt_mode),DRV_COPYRIGHT); + memset(bf_global, 0, sizeof(bf_global)); + memset(bf_tof3_info, 0xff, sizeof(bf_tof3_info)); + bf_class = class_create(THIS_MODULE, BF_CLASS_NAME); + if (!bf_class) { + printk(KERN_ERR "create_class failed for bf device\n"); + return -ENODEV; + } else { + printk(KERN_NOTICE "bf device class created\n"); + } + ret = bf_config_intr_mode(intr_mode); + + if (ret < 0) { + printk(KERN_ERR "config interrupt mode failed for bf device\n"); + if (bf_class) { + class_destroy(bf_class); + bf_class = NULL; + } + return ret; + } + /* do not enable DR interrupt if not using MSI or not in kpkt mode */ if ((bf_intr_mode_default != BF_INTR_MODE_MSI && bf_intr_mode_default != BF_INTR_MODE_LEGACY) || kpkt_mode == 0) { kpkt_dr_int_en = 0; } + if (kpkt_mode) { printk(KERN_NOTICE "kpkt_mode %d hd_room %d dr_int_en %d rx_count %d\n", kpkt_mode, @@ -1422,15 +1633,17 @@ static int __init bfdrv_init(void) { kpkt_dr_int_en, kpkt_rx_count); } - if (ret < 0) { - return ret; - } + spin_lock_init(&bf_nonisr_lock); return pci_register_driver(&bf_pci_driver); } static void __exit bfdrv_exit(void) { + pr_info("%s: module unloading ...\n", DRV_NAME(kpkt_mode)); pci_unregister_driver(&bf_pci_driver); + class_destroy(bf_class); + pr_info("%s: module unloaded successfully\n", DRV_NAME(kpkt_mode)); + bf_class = NULL; intr_mode = NULL; kpkt_mode = 0; } diff --git a/platform/barefoot/bfn-modules/modules/bf_kdrv.h b/platform/barefoot/bfn-modules/modules/bf_kdrv.h index de5ca4bbc71c..d2fb6e7dce06 100644 --- a/platform/barefoot/bfn-modules/modules/bf_kdrv.h +++ b/platform/barefoot/bfn-modules/modules/bf_kdrv.h @@ -1,7 +1,7 @@ /******************************************************************************* Barefoot Networks Switch ASIC Linux driver Copyright(c) 2015 - 2019 Barefoot Networks, Inc. - + This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License, version 2, as published by the Free Software Foundation. @@ -35,11 +35,13 @@ typedef uint64_t phys_addr_t; #endif #define PCI_VENDOR_ID_BF 0x1d1c +#define PCI_VENDOR_ID_INTEL 0x8086 #define TOFINO_DEV_ID_A0 0x01 #define TOFINO_DEV_ID_B0 0x10 #define TOFINO2_DEV_ID_A0 0x0100 #define TOFINO2_DEV_ID_A00 0x0000 #define TOFINO2_DEV_ID_B0 0x0110 +#define TOFINO3_DEV_ID_A0 0x0DA2 #ifndef PCI_MSIX_ENTRY_SIZE #define PCI_MSIX_ENTRY_SIZE 16 @@ -51,7 +53,9 @@ typedef uint64_t phys_addr_t; #endif #define BF_CLASS_NAME "bf" -#define BF_MAX_DEVICE_CNT 256 +#define BF_MAX_DEVICE_CNT 8 +#define BF_MAX_SUBDEV_CNT 2 +#define BF_MAX_DEV_SUBDEV_CNT (BF_MAX_DEVICE_CNT * BF_MAX_SUBDEV_CNT) #define BF_INTR_MODE_NONE_NAME "none" #define BF_INTR_MODE_LEGACY_NAME "legacy" #define BF_INTR_MODE_MSI_NAME "msi" @@ -64,11 +68,22 @@ typedef uint64_t phys_addr_t; #define BF_TBUS_MSIX_INDEX_INVALID (0) #define BF_TBUS_MSIX_BASE_INDEX_TOF1 (32) +#define TOFINO3_MISC_PAD_STATUS_OFFSET 0x80238UL +#define TOFINO3_MISC_PAD_STATUS_DIEID0 (1 << 3) + +#define DRV_NAME(kpkt_mode) (kpkt_mode ? "bf_kpkt" : "bf_kdrv") +#define DRV_DESCRIPTION(kpkt_mode) (kpkt_mode ? \ + "Intel(R) Switch ASIC Linux Packet Driver" : \ + "Intel(R) Switch ASIC Linux Driver" ) +#define DRV_COPYRIGHT "Copyright (c) 2015-2022 Intel Corporation." +#define DRV_VERSION "1.0" + /* Tofino generation type */ typedef enum { BF_TOFINO_NONE = 0, BF_TOFINO_1, BF_TOFINO_2, + BF_TOFINO_3, } bf_tof_type; /* device memory */ @@ -86,10 +101,16 @@ struct bf_listener { struct bf_listener *next; }; +struct bf_tof3_info_s { + int dev_id; + int minor[BF_MAX_SUBDEV_CNT]; +}; + /* device information */ struct bf_dev_info { struct module *owner; struct device *dev; + int major; int minor; atomic_t event[BF_MSIX_ENTRY_CNT]; wait_queue_head_t wait; @@ -104,6 +125,9 @@ struct bf_dev_info { /* msix index assigned to tbus MSIX for Tofino-2 only */ int tbus_msix_ind[BF_TBUS_MSIX_INDICES_MAX]; int tbus_msix_map_enable; + struct bf_tof3_info_s *tof3_info; + int dev_id; /* same as minor number for T1 and T2 */ + int subdev_id; int pci_error_state; /* was there a pci bus error */ }; @@ -126,6 +150,7 @@ struct bf_pci_dev { struct bf_listener * listener_head; /* head of a singly linked list of listeners */ void *adapter_ptr; /* pkt processing adapter */ + int in_use; /* indicates a user space process is using the device */ }; /* TBD: Need to build with CONFIG_PCI_MSI */ diff --git a/platform/barefoot/bfn-platform.mk b/platform/barefoot/bfn-platform.mk index 077ee109f9cd..f12bbaa8a966 100644 --- a/platform/barefoot/bfn-platform.mk +++ b/platform/barefoot/bfn-platform.mk @@ -1,4 +1,4 @@ -BFN_PLATFORM = bfnplatform_20211216_sai_1.9.1_deb10.deb +BFN_PLATFORM = bfnplatform_20220408_sai_1.9.1_deb10.deb $(BFN_PLATFORM)_URL = "https://github.com/barefootnetworks/sonic-release-pkgs/raw/dev/$(BFN_PLATFORM)" SONIC_ONLINE_DEBS += $(BFN_PLATFORM) diff --git a/platform/barefoot/bfn-sai.mk b/platform/barefoot/bfn-sai.mk index 1e837ba4a90c..a0a1d2348dea 100644 --- a/platform/barefoot/bfn-sai.mk +++ b/platform/barefoot/bfn-sai.mk @@ -1,4 +1,4 @@ -BFN_SAI = bfnsdk_20211216_sai_1.9.1_deb10.deb +BFN_SAI = bfnsdk_20220408_sai_1.9.1_deb10.deb $(BFN_SAI)_URL = "https://github.com/barefootnetworks/sonic-release-pkgs/raw/dev/$(BFN_SAI)" $(BFN_SAI)_DEPENDS += $(LIBNL_GENL3_DEV) diff --git a/platform/barefoot/docker-syncd-bfn-rpc.mk b/platform/barefoot/docker-syncd-bfn-rpc.mk index fe1f498d5add..a2a741cea1e1 100644 --- a/platform/barefoot/docker-syncd-bfn-rpc.mk +++ b/platform/barefoot/docker-syncd-bfn-rpc.mk @@ -2,7 +2,7 @@ DOCKER_SYNCD_BFN_RPC = docker-syncd-bfn-rpc.gz $(DOCKER_SYNCD_BFN_RPC)_PATH = $(PLATFORM_PATH)/docker-syncd-bfn-rpc -$(DOCKER_SYNCD_BFN_RPC)_DEPENDS += $(SYNCD_RPC) $(LIBTHRIFT) $(PTF) +$(DOCKER_SYNCD_BFN_RPC)_DEPENDS += $(SYNCD_RPC) $(LIBTHRIFT_0_14_1) $(PTF) $(DOCKER_SYNCD_BFN_RPC)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) ifeq ($(INSTALL_DEBUG_TOOLS), y) $(DOCKER_SYNCD_BFN_RPC)_DEPENDS += $(SYNCD_RPC_DBG) \ diff --git a/platform/barefoot/docker-syncd-bfn/Dockerfile.j2 b/platform/barefoot/docker-syncd-bfn/Dockerfile.j2 index 7071b0c8b51e..e085ef130aed 100755 --- a/platform/barefoot/docker-syncd-bfn/Dockerfile.j2 +++ b/platform/barefoot/docker-syncd-bfn/Dockerfile.j2 @@ -22,6 +22,7 @@ RUN apt-get install -y \ libunwind8-dev \ libpython3.4 \ libc-ares2 \ + libedit2 \ libgoogle-perftools4 RUN dpkg -i \ diff --git a/platform/barefoot/libsaithrift-dev.mk b/platform/barefoot/libsaithrift-dev.mk index 0289a41b2910..0fb5ca0cb81d 100644 --- a/platform/barefoot/libsaithrift-dev.mk +++ b/platform/barefoot/libsaithrift-dev.mk @@ -1,18 +1,23 @@ # libsaithrift-dev package - SAI_VER = 0.9.4 - -LIBSAITHRIFT_DEV = libsaithrift-dev_$(SAI_VER)_amd64.deb +LIBSAITHRIFT_DEV = libsaithrift-dev_$(SAI_VER)_$(CONFIGURED_ARCH).deb $(LIBSAITHRIFT_DEV)_SRC_PATH = $(SRC_PATH)/sonic-sairedis/SAI -$(LIBSAITHRIFT_DEV)_DEPENDS += $(LIBTHRIFT) $(LIBTHRIFT_DEV) $(PYTHON_THRIFT) $(THRIFT_COMPILER) $(BFN_SAI) $(BFN_SAI_DEV) -$(LIBSAITHRIFT_DEV)_RDEPENDS += $(LIBTHRIFT) $(BFN_SAI) +$(LIBSAITHRIFT_DEV)_DEPENDS += $(LIBTHRIFT_0_14_1) $(LIBTHRIFT_0_14_1_DEV) \ + $(PYTHON3_THRIFT_0_14_1) $(THRIFT_0_14_1_COMPILER) \ + $(BFN_SAI) + +#$(LIBSAIVS) $(LIBSAIVS_DEV) $(LIBSAIMETADATA) $(LIBSAIMETADATA_DEV) + +# $(LIBSAITHRIFT_DEV)_BUILD_ENV = platform=v + +$(LIBSAITHRIFT_DEV)_RDEPENDS += $(LIBTHRIFT_0_14_1) $(BFN_SAI) SONIC_DPKG_DEBS += $(LIBSAITHRIFT_DEV) 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_0_14_1) $(BFN_SAI) $(eval $(call add_extra_package,$(LIBSAITHRIFT_DEV),$(SAISERVER))) SAISERVER_DBG = saiserver-dbg_$(SAI_VER)_amd64.deb diff --git a/platform/barefoot/one-image.mk b/platform/barefoot/one-image.mk index 8ed212c6f7a8..a4565b47916b 100644 --- a/platform/barefoot/one-image.mk +++ b/platform/barefoot/one-image.mk @@ -12,6 +12,7 @@ $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(BFN_NEWPORT_BF_PLATFORM_MODULE) $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(WNC_OSW1800_PLATFORM_MODULE) $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(INGRASYS_S9180_32X_PLATFORM_MODULE) $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(INGRASYS_S9280_64X_PLATFORM_MODULE) +$(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(BFN_MONTARA_QS_PLATFORM_MODULE) ifeq ($(INSTALL_DEBUG_TOOLS),y) $(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_DBG_IMAGES) $(SONIC_ONE_IMAGE)_DOCKERS += $(filter-out $(patsubst %-$(DBG_IMAGE_MARK).gz,%.gz, $(SONIC_INSTALL_DOCKER_DBG_IMAGES)), $(SONIC_INSTALL_DOCKER_IMAGES)) diff --git a/platform/barefoot/platform-modules-accton.mk b/platform/barefoot/platform-modules-accton.mk new file mode 100644 index 000000000000..077c23d7bfd6 --- /dev/null +++ b/platform/barefoot/platform-modules-accton.mk @@ -0,0 +1,11 @@ +# BFN Platform modules + +BFN_MONTARA_QS_PLATFORM_MODULE_VERSION = 1.1 + +export BFN_MONTARA_QS_PLATFORM_MODULE_VERSION + +BFN_MONTARA_QS_PLATFORM_MODULE = sonic-platform-accton-wedge100bf-32qs_$(BFN_MONTARA_QS_PLATFORM_MODULE_VERSION)_amd64.deb +$(BFN_MONTARA_QS_PLATFORM_MODULE)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-modules-accton +$(BFN_MONTARA_QS_PLATFORM_MODULE)_DEPENDS += $(LINUX_HEADERS) $(LINUX_HEADERS_COMMON) +$(BFN_MONTARA_QS_PLATFORM_MODULE)_PLATFORM = x86_64-accton_wedge100bf_32qs-r0 +SONIC_DPKG_DEBS += $(BFN_MONTARA_QS_PLATFORM_MODULE) diff --git a/platform/barefoot/rules.mk b/platform/barefoot/rules.mk index 98dcef0f7b8a..8e717ba49ec6 100644 --- a/platform/barefoot/rules.mk +++ b/platform/barefoot/rules.mk @@ -1,6 +1,7 @@ include $(PLATFORM_PATH)/platform-modules-arista.mk include $(PLATFORM_PATH)/platform-modules-bfn.mk include $(PLATFORM_PATH)/platform-modules-bfn-montara.mk +include $(PLATFORM_PATH)/platform-modules-accton.mk include $(PLATFORM_PATH)/platform-modules-bfn-newport.mk include $(PLATFORM_PATH)/platform-modules-wnc-osw1800.mk include $(PLATFORM_PATH)/platform-modules-ingrasys.mk @@ -24,7 +25,8 @@ $(SYNCD)_DEPENDS += $(BFN_SAI) $(BFN_INGRASYS_PLATFORM) $(BFN_PLATFORM) $(SYNCD)_UNINSTALLS += $(BFN_SAI) ifeq ($(ENABLE_SYNCD_RPC),y) -$(SYNCD)_DEPENDS += $(LIBSAITHRIFT_DEV) +$(SYNCD)_DEPENDS := $(filter-out $(LIBTHRIFT_DEV),$($(SYNCD)_DEPENDS)) +$(SYNCD)_DEPENDS += $(LIBSAITHRIFT_DEV) $(LIBTHRIFT_0_14_1_DEV) endif # Runtime dependency on sai is set only for syncd diff --git a/platform/barefoot/sonic-platform-modules-accton/debian/changelog b/platform/barefoot/sonic-platform-modules-accton/debian/changelog new file mode 100644 index 000000000000..8cbad8e1f551 --- /dev/null +++ b/platform/barefoot/sonic-platform-modules-accton/debian/changelog @@ -0,0 +1,11 @@ +sonic-accton-platform-modules (1.1) unstable; urgency=low + + * Remove bfn asic kernel modules from platform package + + -- Support Mon, 22 Oct 2018 15:40:00 -0800 + +sonic-accton-platform-modules (1.0) unstable; urgency=low + + * Initial release + + -- Support Mon, 11 Nov 2015 11:11:11 -0800 diff --git a/platform/barefoot/sonic-platform-modules-accton/debian/compat b/platform/barefoot/sonic-platform-modules-accton/debian/compat new file mode 100644 index 000000000000..ec635144f600 --- /dev/null +++ b/platform/barefoot/sonic-platform-modules-accton/debian/compat @@ -0,0 +1 @@ +9 diff --git a/platform/barefoot/sonic-platform-modules-accton/debian/control b/platform/barefoot/sonic-platform-modules-accton/debian/control new file mode 100644 index 000000000000..ba76bc7cfa3f --- /dev/null +++ b/platform/barefoot/sonic-platform-modules-accton/debian/control @@ -0,0 +1,12 @@ +Source: sonic-accton-platform-modules +Section: main +Priority: extra +Maintainer: Support +Build-Depends: debhelper (>= 9.0.0), bzip2 +Standards-Version: 3.9.3 + +Package: sonic-platform-accton-wedge100bf-32qs +Architecture: amd64 +Depends: linux-image-4.19.0-12-2-amd64-unsigned +Description: kernel modules for platform devices such as fan, led, sfp + diff --git a/platform/barefoot/sonic-platform-modules-accton/debian/rules b/platform/barefoot/sonic-platform-modules-accton/debian/rules new file mode 100755 index 000000000000..35fdb0d5bdbe --- /dev/null +++ b/platform/barefoot/sonic-platform-modules-accton/debian/rules @@ -0,0 +1,110 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +include /usr/share/dpkg/pkg-info.mk + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +export INSTALL_MOD_DIR:=extra + +PYTHON ?= python2 +PYTHON3 ?= python3 + +PACKAGE_PRE_NAME := sonic-platform-accton +KVERSION ?= $(shell uname -r) +KERNEL_SRC := /lib/modules/$(KVERSION) +MOD_SRC_DIR:= $(shell pwd) +MODULE_DIRS := wedge100bf-32qs +MODULE_DIR := modules +UTILS_DIR := utils +SERVICE_DIR := service +CONF_DIR := conf + +%: + dh $@ --with systemd,python2,python3 --buildsystem=pybuild + +clean: + dh_testdir + dh_testroot + dh_clean + +build: + #make modules -C $(KERNEL_SRC)/build M=$(MODULE_SRC) + (for mod in $(MODULE_DIRS); do \ + make modules -C $(KERNEL_SRC)/build M=$(MOD_SRC_DIR)/$${mod}/modules; \ + $(PYTHON) $${mod}/setup.py build; \ + cd $(MOD_SRC_DIR)/$${mod}; \ + if [ -f sonic_platform_setup.py ]; then \ + $(PYTHON3) sonic_platform_setup.py bdist_wheel -d $(MOD_SRC_DIR)/$${mod}; \ + echo "Finished makig whl package for $$mod"; \ + fi; \ + cd $(MOD_SRC_DIR); \ + done) + +binary: binary-arch binary-indep + # Nothing to do + +binary-arch: + # Nothing to do + +#install: build + #dh_testdir + #dh_testroot + #dh_clean -k + #dh_installdirs + +binary-indep: + dh_testdir + dh_installdirs + + # Custom package commands + (for mod in $(MODULE_DIRS); do \ + if [ -d $${mod}/$(MODULE_DIR) ]; then \ + dh_installdirs -p$(PACKAGE_PRE_NAME)-$${mod} $(KERNEL_SRC)/$(INSTALL_MOD_DIR); \ + cp $(MOD_SRC_DIR)/$${mod}/$(MODULE_DIR)/*.ko debian/$(PACKAGE_PRE_NAME)-$${mod}/$(KERNEL_SRC)/$(INSTALL_MOD_DIR); \ + fi; \ + if [ -d $${mod}/$(UTILS_DIR) ]; then \ + dh_installdirs -p$(PACKAGE_PRE_NAME)-$${mod} /usr/local/bin; \ + cp $(MOD_SRC_DIR)/$${mod}/$(UTILS_DIR)/* debian/$(PACKAGE_PRE_NAME)-$${mod}/usr/local/bin/; \ + fi; \ + if [ -d $${mod}/$(SERVICE_DIR) ]; then \ + dh_installdirs -p$(PACKAGE_PRE_NAME)-$${mod} /lib/systemd/system; \ + cp $(MOD_SRC_DIR)/$${mod}/$(SERVICE_DIR)/*.service debian/$(PACKAGE_PRE_NAME)-$${mod}/lib/systemd/system/; \ + fi; \ + if [ -f $${mod}/setup.py ]; then \ + $(PYTHON) $${mod}/setup.py install --root=$(MOD_SRC_DIR)/debian/$(PACKAGE_PRE_NAME)-$${mod} --install-layout=deb; \ + fi; \ + if [ -f $${mod}/sonic_platform_setup.py ]; then \ + cd $(MOD_SRC_DIR)/$${mod}; \ + $(PYTHON3) sonic_platform_setup.py install --root=$(MOD_SRC_DIR)/debian/$(PACKAGE_PRE_NAME)-$${mod} --install-layout=deb; \ + echo "Insalled whl package for $$mod"; \ + cd $(MOD_SRC_DIR); \ + fi; \ + if [ $$mod = "wedge100bf-32qs" ]; then \ + dh_installdirs -p$(PACKAGE_PRE_NAME)-$${mod} etc/network/interfaces.d; \ + cp $(MOD_SRC_DIR)/$${mod}/$(CONF_DIR)/* debian/$(PACKAGE_PRE_NAME)-$${mod}/etc/network/interfaces.d; \ + fi; \ + done) + # Resuming debhelper scripts + dh_testroot + dh_install + dh_installchangelogs + dh_installdocs + dh_systemd_enable + dh_installinit + dh_systemd_start + dh_link + dh_fixperms + dh_compress + dh_strip + dh_installdeb + dh_gencontrol + dh_md5sums + dh_builddeb +.PHONY: build binary binary-arch binary-indep clean \ No newline at end of file diff --git a/platform/barefoot/sonic-platform-modules-accton/debian/sonic-platform-accton-wedge100bf-32qs.install b/platform/barefoot/sonic-platform-modules-accton/debian/sonic-platform-accton-wedge100bf-32qs.install new file mode 100644 index 000000000000..8a5e4a4bd64e --- /dev/null +++ b/platform/barefoot/sonic-platform-modules-accton/debian/sonic-platform-accton-wedge100bf-32qs.install @@ -0,0 +1,2 @@ +wedge100bf-32qs/sonic_platform-1.0-py3-none-any.whl usr/share/sonic/device/x86_64-accton_wedge100bf_32qs-r0 + diff --git a/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/LICENSE b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/LICENSE new file mode 100644 index 000000000000..676cdeec726b --- /dev/null +++ b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/LICENSE @@ -0,0 +1,15 @@ +Copyright (C) 2016 Microsoft, Inc + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +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 for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. diff --git a/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/MAINTAINERS b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/MAINTAINERS new file mode 100644 index 000000000000..3e69704ff6dd --- /dev/null +++ b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/MAINTAINERS @@ -0,0 +1,3 @@ +# This file describes the maintainers for wedge100bf-32qs +# See the SONiC project governance document for more information +Mailinglist = sonicproject@googlegroups.com diff --git a/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/README.md b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/README.md new file mode 100644 index 000000000000..17d59593fbfb --- /dev/null +++ b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/README.md @@ -0,0 +1,2 @@ +# wedge100bf-32qs +Device drivers for support of BFN platform for the SONiC project diff --git a/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/classes/__init__.py b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/classes/__init__.py new file mode 100755 index 000000000000..e69de29bb2d1 diff --git a/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/conf/usb0 b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/conf/usb0 new file mode 100644 index 000000000000..f1dd054cc6f6 --- /dev/null +++ b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/conf/usb0 @@ -0,0 +1,5 @@ +# BMC interface +auto usb0 +allow-hotplug usb0 +iface usb0 inet6 +up ifconfig usb0 txqueuelen 64 diff --git a/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/modules/Makefile b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/modules/Makefile new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/setup.py b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/setup.py new file mode 100755 index 000000000000..2c151a8a7bdd --- /dev/null +++ b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/setup.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +import os +from setuptools import setup +os.listdir + +setup( + name='wedge100bf-32qs', + version='1.0', + description='Module to initialize Accton wedge100bf-32qs platforms', + + packages=['wedge100bf-32qs'], + package_dir={'wedge100bf-32qs': 'wedge100bf-32qs/classes'}, +) diff --git a/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/sonic_platform b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/sonic_platform new file mode 120000 index 000000000000..7d33d95d18bc --- /dev/null +++ b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/sonic_platform @@ -0,0 +1 @@ +../../sonic-platform-modules-bfn-montara/sonic_platform/ \ No newline at end of file diff --git a/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/sonic_platform_setup.py b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/sonic_platform_setup.py new file mode 100644 index 000000000000..14e1bb6b6c02 --- /dev/null +++ b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/sonic_platform_setup.py @@ -0,0 +1,32 @@ +from setuptools import setup + +setup( + name='sonic-platform', + version='1.0', + description='SONiC platform API implementation', + license='Apache 2.0', + author='SONiC Team', + author_email='', + url='https://github.com/Azure/sonic-buildimage', + maintainer='Barefoot', + maintainer_email='', + packages=[ + 'sonic_platform', + 'sonic_platform/pltfm_mgr_rpc', + 'sonic_platform/bfn_extensions', + ], + package_data = {'sonic_platform':['logging.conf']}, + classifiers=[ + 'Development Status :: 3 - Alpha', + 'Environment :: Plugins', + 'Intended Audience :: Developers', + 'Intended Audience :: Information Technology', + 'Intended Audience :: System Administrators', + 'License :: OSI Approved :: Apache Software License', + 'Natural Language :: English', + 'Operating System :: POSIX :: Linux', + 'Programming Language :: Python :: 2.7', + 'Topic :: Utilities', + ], + keywords='sonic SONiC platform PLATFORM', +) diff --git a/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/utils/bf-fancontrol b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/utils/bf-fancontrol new file mode 100755 index 000000000000..7407c2d7241d --- /dev/null +++ b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/utils/bf-fancontrol @@ -0,0 +1,3 @@ +#!/bin/bash + +python3 -m sonic_platform.bfn_extensions.platform_fancontrol "$@" diff --git a/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/utils/sensors b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/utils/sensors new file mode 100755 index 000000000000..5f06a9c99b05 --- /dev/null +++ b/platform/barefoot/sonic-platform-modules-accton/wedge100bf-32qs/utils/sensors @@ -0,0 +1,11 @@ +#!/bin/bash + +DOCKER_EXEC_FLAGS="i" + +# Determine whether stdout is on a terminal +if [ -t 1 ] ; then + DOCKER_EXEC_FLAGS+="t" +fi + +python3 -m sonic_platform.bfn_extensions.platform_sensors "$@" +docker exec -$DOCKER_EXEC_FLAGS pmon sensors "$@" diff --git a/platform/barefoot/sonic-platform-modules-arista b/platform/barefoot/sonic-platform-modules-arista index 376e6a22debb..9b61f8bdbe65 160000 --- a/platform/barefoot/sonic-platform-modules-arista +++ b/platform/barefoot/sonic-platform-modules-arista @@ -1 +1 @@ -Subproject commit 376e6a22debbc5880ee91fd02c0c2023d347884e +Subproject commit 9b61f8bdbe657e8798bc40c09039a6e0a7f5d150 diff --git a/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/chassis.py b/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/chassis.py index 85f860b377f5..6d0e8b8c120c 100644 --- a/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/chassis.py +++ b/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/chassis.py @@ -1,8 +1,12 @@ #!/usr/bin/env python try: + import os import time import syslog + import logging + import logging.config + import yaml from sonic_platform_base.chassis_base import ChassisBase from sonic_platform.sfp import Sfp @@ -10,7 +14,7 @@ from sonic_platform.fan_drawer import fan_drawer_list_get from sonic_platform.thermal import thermal_list_get from eeprom import Eeprom - from sonic_platform.thermal_manager import ThermalManager + from platform_utils import file_create from sonic_platform.platform_thrift_client import pltfm_mgr_ready from sonic_platform.platform_thrift_client import thrift_try @@ -20,6 +24,7 @@ except ImportError as e: raise ImportError(str(e) + "- required module not found") +NUM_COMPONENT = 2 class Chassis(ChassisBase): """ Platform-specific Chassis class @@ -41,12 +46,16 @@ def __init__(self): self.__thermals = None self.__psu_list = None self.__sfp_list = None - self.__thermal_mngr = None - self.__polling_thermal_time = 30 self.ready = False self.phy_port_cur_state = {} self.qsfp_interval = self.QSFP_CHECK_INTERVAL + self.__initialize_components() + + with open(os.path.dirname(__file__) + "/logging.conf", 'r') as f: + config_dict = yaml.load(f, yaml.SafeLoader) + file_create(config_dict['handlers']['file']['filename'], '646') + logging.config.dictConfig(config_dict) @property def _eeprom(self): @@ -114,16 +123,6 @@ def _sfp_list(self): def _sfp_list(self, value): pass - @property - def _thermal_mngr(self): - if self.__thermal_mngr is None: - self.__thermal_mngr = ThermalManager(self.__polling_thermal_time) - return self.__thermal_mngr - - @_thermal_mngr.setter - def _thermal_mngr(self, value): - self.__thermal_mngr = ThermalManager(value) - def __update_port_info(self): def qsfp_max_port_get(client): return client.pltfm_mgr.pltfm_mgr_qsfp_get_max_port() @@ -141,6 +140,12 @@ def qsfp_max_port_get(client): self.PORT_END = self.QSFP_PORT_END self.PORTS_IN_BLOCK = self.QSFP_PORT_END + def __initialize_components(self): + from sonic_platform.component import Components + for index in range(0, NUM_COMPONENT): + component = Components(index) + self._component_list.append(component) + def get_name(self): """ Retrieves the name of the chassis @@ -346,10 +351,3 @@ def get_status_led(self): specified. """ return self.system_led - - def get_thermal_manager(self): - return self._thermal_mngr - - def __del__(self): - if self.__thermal_mngr is not None: - self.__thermal_mngr.stop() diff --git a/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/component.py b/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/component.py new file mode 100644 index 000000000000..47a0993bf3e5 --- /dev/null +++ b/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/component.py @@ -0,0 +1,318 @@ +try: + import os + import subprocess + from sonic_platform_base.component_base import ComponentBase + from platform_thrift_client import thrift_try + import json + from collections import OrderedDict + from sonic_py_common import device_info + +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +def get_bios_version(): + """ + Retrieves the firmware version of the BIOS + Returns: + A string containing the firmware version of the BIOS + """ + try: + cmd = ['dmidecode', '-s', 'bios-version'] + if os.geteuid() != 0: + cmd.insert(0, 'sudo') + return subprocess.check_output(cmd).strip().decode() + except subprocess.CalledProcessError as e: + raise RuntimeError("Failed to get BIOS version") + +def get_bmc_version(): + """ + Retrieves the firmware version of the BMC + Returns: + A string containing the firmware version of the BMC + """ + ver = "N/A" + def bmc_get(client): + return client.pltfm_mgr.pltfm_mgr_chss_mgmt_bmc_ver_get() + try: + ver = thrift_try(bmc_get) + except Exception: + pass + + return ver + +class BFPlatformComponentsParser(object): + """ + BFPlatformComponentsParser + """ + CHASSIS_KEY = "chassis" + MODULE_KEY = "module" + COMPONENT_KEY = "component" + FIRMWARE_KEY = "firmware" + + def __init__(self, platform_components_path): + self.__chassis_component_map = OrderedDict() + self.__component_list = [] + self.__bf_model = "" + self.__parse_platform_components(platform_components_path) + + def __is_str(self, obj): + return isinstance(obj, str) + + def __is_dict(self, obj): + return isinstance(obj, dict) + + def __parser_fail(self, msg): + raise RuntimeError("Failed to parse \"{}\": {}".format(PLATFORM_COMPONENTS_FILE, msg)) + + def __parser_platform_fail(self, msg): + self.__parser_fail("invalid platform schema: {}".format(msg)) + + def __parser_chassis_fail(self, msg): + self.__parser_fail("invalid chassis schema: {}".format(msg)) + + def __parser_component_fail(self, msg): + self.__parser_fail("invalid component schema: {}".format(msg)) + + def __parse_component_section(self, section, component, is_module_component=False): + if not self.__is_dict(component): + self.__parser_component_fail("dictionary is expected: key={}".format(self.COMPONENT_KEY)) + + if not component: + return + + missing_key = None + + for key1, value1 in component.items(): + if not self.__is_dict(value1): + self.__parser_component_fail("dictionary is expected: key={}".format(key1)) + + self.__chassis_component_map[section][key1] = OrderedDict() + + if value1: + if len(value1) < 1 or len(value1) > 3: + self.__parser_component_fail("unexpected number of records: key={}".format(key1)) + + if self.FIRMWARE_KEY not in value1: + missing_key = self.FIRMWARE_KEY + break + + for key2, value2 in value1.items(): + if not self.__is_str(value2): + self.__parser_component_fail("string is expected: key={}".format(key2)) + + self.__chassis_component_map[section][key1] = value1 + + if missing_key is not None: + self.__parser_component_fail("\"{}\" key hasn't been found".format(missing_key)) + + def __parse_chassis_section(self, chassis): + self.__chassis_component_map = OrderedDict() + + if not self.__is_dict(chassis): + self.__parser_chassis_fail("dictionary is expected: key={}".format(self.CHASSIS_KEY)) + + if not chassis: + self.__parser_chassis_fail("dictionary is empty: key={}".format(self.CHASSIS_KEY)) + + if len(chassis) != 1: + self.__parser_chassis_fail("unexpected number of records: key={}".format(self.CHASSIS_KEY)) + + for key, value in chassis.items(): + if not self.__is_dict(value): + self.__parser_chassis_fail("dictionary is expected: key={}".format(key)) + + if not value: + self.__parser_chassis_fail("dictionary is empty: key={}".format(key)) + + if self.COMPONENT_KEY not in value: + self.__parser_chassis_fail("\"{}\" key hasn't been found".format(self.COMPONENT_KEY)) + + if len(value) != 1: + self.__parser_chassis_fail("unexpected number of records: key={}".format(key)) + + self.__chassis_component_map[key] = OrderedDict() + self.__parse_component_section(key, value[self.COMPONENT_KEY]) + + def get_components_list(self): + self.__component_list = [] + for key, value in self.__chassis_component_map[self.__bf_model].items(): + self.__component_list.append(key) + + return self.__component_list + + def get_chassis_component_map(self): + return self.__chassis_component_map + + def __parse_platform_components(self, platform_components_path): + with open(platform_components_path) as platform_components: + data = json.load(platform_components) + kkey, val = list(data[self.CHASSIS_KEY].items())[0] + self.__bf_model = kkey + + if not self.__is_dict(data): + self.__parser_platform_fail("dictionary is expected: key=root") + + if not data: + self.__parser_platform_fail("dictionary is empty: key=root") + + if self.CHASSIS_KEY not in data: + self.__parser_platform_fail("\"{}\" key hasn't been found".format(self.CHASSIS_KEY)) + + if len(data) != 1: + self.__parser_platform_fail("unexpected number of records: key=root") + + self.__parse_chassis_section(data[self.CHASSIS_KEY]) + + chassis_component_map = property(fget=get_chassis_component_map) + +class Components(ComponentBase): + """BFN Montara Platform-specific Component class""" + bf_platform = device_info.get_path_to_platform_dir() + bf_platform_json = "{}/platform_components.json".format(bf_platform.strip()) + bpcp = BFPlatformComponentsParser(bf_platform_json) + + def __init__(self, component_index=0): + try: + self.index = component_index + self.name = "N/A" + self.version = "N/A" + self.description = "N/A" + self.name = self.bpcp.get_components_list()[self.index] + except IndexError as e: + print("Error: No components found in plaform_components.json") + + if (self.name == "BMC"): + self.version = get_bmc_version() + self.description = "Chassis BMC" + elif (self.name == "BIOS"): + self.version = get_bios_version() + self.description = "Chassis BIOS" + + def get_name(self): + """ + Retrieves the name of the component + Returns: + A string containing the name of the component + """ + if not self.name: + return "N/A" + return self.name + + def get_description(self): + """ + Retrieves the description of the component + Returns: + A string containing the description of the component + """ + return self.description + + def get_firmware_version(self): + """ + Retrieves the firmware version of the component + Returns: + A string containing the firmware version of the component + """ + return self.version + + def install_firmware(self, image_path): + """ + Installs firmware to the component + Args: + image_path: A string, path to firmware image + Returns: + A boolean, True if install was successful, False if not + """ + return False + + def get_presence(self): + """ + Retrieves the presence of the component + Returns: + bool: True if component is present, False if not + """ + return True + + def get_model(self): + """ + Retrieves the model number (or part number) of the component + Returns: + string: Model/part number of component + """ + return 'N/A' + + def get_serial(self): + """ + Retrieves the serial number of the component + Returns: + string: Serial number of component + """ + return 'N/A' + + def get_status(self): + """ + Retrieves the operational status of the component + Returns: + A boolean value, True if component is operating properly, False if not + """ + return True + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + If the agent cannot determine the parent-relative position + for some reason, or if the associated value of + entPhysicalContainedIn is'0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device + or -1 if cannot determine the position + """ + return -1 + + def is_replaceable(self): + """ + Indicate whether this component is replaceable. + Returns: + bool: True if it is replaceable. + """ + return False + + def get_available_firmware_version(self, image_path): + return 'None' + + def get_firmware_update_notification(self, image_path): + """ + Retrieves a notification on what should be done in order to complete + the component firmware update + + Args: + image_path: A string, path to firmware image + + Returns: + A string containing the component firmware update notification if required. + By default 'None' value will be used, which indicates that no actions are required + """ + return 'None' + + def update_firmware(self, image_path): + """ + Updates firmware of the component + + This API performs firmware update: it assumes firmware installation and loading in a single call. + In case platform component requires some extra steps (apart from calling Low Level Utility) + to load the installed firmware (e.g, reboot, power cycle, etc.) - this will be done automatically by API + + Args: + image_path: A string, path to firmware image + + Raises: + RuntimeError: update failed + """ + return False + + def auto_update_firmware(self, image_path, boot_action): + """ + Default handling of attempted automatic update for a component + Will skip the installation if the boot_action is 'warm' or 'fast' and will call update_firmware() + if boot_action is fast. + """ + return 1 diff --git a/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/eeprom.py b/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/eeprom.py index ec7112b3c093..2335c02863d9 100644 --- a/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/eeprom.py +++ b/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/eeprom.py @@ -1,11 +1,7 @@ try: import os import sys - import errno import datetime - import logging - import logging.config - import yaml import re sys.path.append(os.path.dirname(__file__)) @@ -17,6 +13,7 @@ from sonic_platform_base.sonic_eeprom import eeprom_base from sonic_platform_base.sonic_eeprom import eeprom_tlvinfo + from platform_utils import file_create from platform_thrift_client import thrift_try except ImportError as e: @@ -45,18 +42,8 @@ class Eeprom(eeprom_tlvinfo.TlvInfoDecoder): def __init__(self): - with open(os.path.dirname(__file__) + "/logging.conf", 'r') as f: - config_dict = yaml.load(f, yaml.SafeLoader) - logging.config.dictConfig(config_dict) - - if not os.path.exists(os.path.dirname(_EEPROM_SYMLINK)): - try: - os.makedirs(os.path.dirname(_EEPROM_SYMLINK)) - except OSError as e: - if e.errno != errno.EEXIST: - raise - - open(_EEPROM_SYMLINK, 'a').close() + file_create(_EEPROM_SYMLINK, '646') + file_create(_EEPROM_STATUS, '646') with open(_EEPROM_STATUS, 'w') as f: f.write("initializing..") @@ -152,3 +139,4 @@ def modelstr(self): def revision_str(self): return self.__tlv_get(self._TLV_CODE_LABEL_REVISION) + diff --git a/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/platform_utils.py b/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/platform_utils.py new file mode 100644 index 000000000000..81e78ee01041 --- /dev/null +++ b/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/platform_utils.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python + +try: + import os + import subprocess + +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +def file_create(path, mode=None): + def run_cmd(cmd): + if os.geteuid() != 0: + cmd.insert(0, 'sudo') + subprocess.check_output(cmd) + + file_path = os.path.dirname(path) + if not os.path.exists(file_path): + run_cmd(['mkdir', '-p', file_path]) + if not os.path.isfile(path): + run_cmd(['touch', path]) + if (mode is not None): + run_cmd(['chmod', mode, path]) diff --git a/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/pltfm_mgr_rpc/pltfm_mgr_rpc.py b/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/pltfm_mgr_rpc/pltfm_mgr_rpc.py index 419ac57ebb22..0fa03d58b31a 100644 --- a/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/pltfm_mgr_rpc/pltfm_mgr_rpc.py +++ b/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/pltfm_mgr_rpc/pltfm_mgr_rpc.py @@ -1,5 +1,5 @@ # -# Autogenerated by Thrift Compiler (0.13.0) +# Autogenerated by Thrift Compiler (0.14.1) # # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING # @@ -74,6 +74,26 @@ def pltfm_mgr_fan_info_get(self, fan_num): """ pass + def pltfm_mgr_qsfp_cached_num_bytes_get(self, port_num, page, offset, length): + """ + Parameters: + - port_num + - page + - offset + - length + + """ + pass + + def pltfm_mgr_qsfp_cached_page_get(self, port_num, page): + """ + Parameters: + - port_num + - page + + """ + pass + def pltfm_mgr_qsfp_presence_get(self, port_num): """ Parameters: @@ -284,6 +304,9 @@ def pltfm_mgr_sensor_info_get(self, options): """ pass + def pltfm_mgr_chss_mgmt_bmc_ver_get(self): + pass + class Client(Iface): def __init__(self, iprot, oprot=None): @@ -552,6 +575,82 @@ def recv_pltfm_mgr_fan_info_get(self): raise result.ouch raise TApplicationException(TApplicationException.MISSING_RESULT, "pltfm_mgr_fan_info_get failed: unknown result") + def pltfm_mgr_qsfp_cached_num_bytes_get(self, port_num, page, offset, length): + """ + Parameters: + - port_num + - page + - offset + - length + + """ + self.send_pltfm_mgr_qsfp_cached_num_bytes_get(port_num, page, offset, length) + return self.recv_pltfm_mgr_qsfp_cached_num_bytes_get() + + def send_pltfm_mgr_qsfp_cached_num_bytes_get(self, port_num, page, offset, length): + self._oprot.writeMessageBegin('pltfm_mgr_qsfp_cached_num_bytes_get', TMessageType.CALL, self._seqid) + args = pltfm_mgr_qsfp_cached_num_bytes_get_args() + args.port_num = port_num + args.page = page + args.offset = offset + args.length = length + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_pltfm_mgr_qsfp_cached_num_bytes_get(self): + iprot = self._iprot + (fname, mtype, rseqid) = iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(iprot) + iprot.readMessageEnd() + raise x + result = pltfm_mgr_qsfp_cached_num_bytes_get_result() + result.read(iprot) + iprot.readMessageEnd() + if result.success is not None: + return result.success + if result.ouch is not None: + raise result.ouch + raise TApplicationException(TApplicationException.MISSING_RESULT, "pltfm_mgr_qsfp_cached_num_bytes_get failed: unknown result") + + def pltfm_mgr_qsfp_cached_page_get(self, port_num, page): + """ + Parameters: + - port_num + - page + + """ + self.send_pltfm_mgr_qsfp_cached_page_get(port_num, page) + return self.recv_pltfm_mgr_qsfp_cached_page_get() + + def send_pltfm_mgr_qsfp_cached_page_get(self, port_num, page): + self._oprot.writeMessageBegin('pltfm_mgr_qsfp_cached_page_get', TMessageType.CALL, self._seqid) + args = pltfm_mgr_qsfp_cached_page_get_args() + args.port_num = port_num + args.page = page + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_pltfm_mgr_qsfp_cached_page_get(self): + iprot = self._iprot + (fname, mtype, rseqid) = iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(iprot) + iprot.readMessageEnd() + raise x + result = pltfm_mgr_qsfp_cached_page_get_result() + result.read(iprot) + iprot.readMessageEnd() + if result.success is not None: + return result.success + if result.ouch is not None: + raise result.ouch + raise TApplicationException(TApplicationException.MISSING_RESULT, "pltfm_mgr_qsfp_cached_page_get failed: unknown result") + def pltfm_mgr_qsfp_presence_get(self, port_num): """ Parameters: @@ -1444,6 +1543,34 @@ def recv_pltfm_mgr_sensor_info_get(self): raise result.ouch raise TApplicationException(TApplicationException.MISSING_RESULT, "pltfm_mgr_sensor_info_get failed: unknown result") + def pltfm_mgr_chss_mgmt_bmc_ver_get(self): + self.send_pltfm_mgr_chss_mgmt_bmc_ver_get() + return self.recv_pltfm_mgr_chss_mgmt_bmc_ver_get() + + def send_pltfm_mgr_chss_mgmt_bmc_ver_get(self): + self._oprot.writeMessageBegin('pltfm_mgr_chss_mgmt_bmc_ver_get', TMessageType.CALL, self._seqid) + args = pltfm_mgr_chss_mgmt_bmc_ver_get_args() + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_pltfm_mgr_chss_mgmt_bmc_ver_get(self): + iprot = self._iprot + (fname, mtype, rseqid) = iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(iprot) + iprot.readMessageEnd() + raise x + result = pltfm_mgr_chss_mgmt_bmc_ver_get_result() + result.read(iprot) + iprot.readMessageEnd() + if result.success is not None: + return result.success + if result.ouch is not None: + raise result.ouch + raise TApplicationException(TApplicationException.MISSING_RESULT, "pltfm_mgr_chss_mgmt_bmc_ver_get failed: unknown result") + class Processor(Iface, TProcessor): def __init__(self, handler): @@ -1457,6 +1584,8 @@ def __init__(self, handler): self._processMap["pltfm_mgr_pwr_rail_info_get"] = Processor.process_pltfm_mgr_pwr_rail_info_get self._processMap["pltfm_mgr_fan_speed_set"] = Processor.process_pltfm_mgr_fan_speed_set self._processMap["pltfm_mgr_fan_info_get"] = Processor.process_pltfm_mgr_fan_info_get + self._processMap["pltfm_mgr_qsfp_cached_num_bytes_get"] = Processor.process_pltfm_mgr_qsfp_cached_num_bytes_get + self._processMap["pltfm_mgr_qsfp_cached_page_get"] = Processor.process_pltfm_mgr_qsfp_cached_page_get self._processMap["pltfm_mgr_qsfp_presence_get"] = Processor.process_pltfm_mgr_qsfp_presence_get self._processMap["pltfm_mgr_qsfp_detect_transceiver"] = Processor.process_pltfm_mgr_qsfp_detect_transceiver self._processMap["pltfm_mgr_qsfp_info_get"] = Processor.process_pltfm_mgr_qsfp_info_get @@ -1483,6 +1612,7 @@ def __init__(self, handler): self._processMap["pltfm_mgr_qsfp_pwr_override_set"] = Processor.process_pltfm_mgr_qsfp_pwr_override_set self._processMap["pltfm_mgr_qsfp_lpmode_set"] = Processor.process_pltfm_mgr_qsfp_lpmode_set self._processMap["pltfm_mgr_sensor_info_get"] = Processor.process_pltfm_mgr_sensor_info_get + self._processMap["pltfm_mgr_chss_mgmt_bmc_ver_get"] = Processor.process_pltfm_mgr_chss_mgmt_bmc_ver_get self._on_message_begin = None def on_message_begin(self, func): @@ -1710,6 +1840,58 @@ def process_pltfm_mgr_fan_info_get(self, seqid, iprot, oprot): oprot.writeMessageEnd() oprot.trans.flush() + def process_pltfm_mgr_qsfp_cached_num_bytes_get(self, seqid, iprot, oprot): + args = pltfm_mgr_qsfp_cached_num_bytes_get_args() + args.read(iprot) + iprot.readMessageEnd() + result = pltfm_mgr_qsfp_cached_num_bytes_get_result() + try: + result.success = self._handler.pltfm_mgr_qsfp_cached_num_bytes_get(args.port_num, args.page, args.offset, args.length) + msg_type = TMessageType.REPLY + except TTransport.TTransportException: + raise + except InvalidPltfmMgrOperation as ouch: + msg_type = TMessageType.REPLY + result.ouch = ouch + except TApplicationException as ex: + logging.exception('TApplication exception in handler') + msg_type = TMessageType.EXCEPTION + result = ex + except Exception: + logging.exception('Unexpected exception in handler') + msg_type = TMessageType.EXCEPTION + result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error') + oprot.writeMessageBegin("pltfm_mgr_qsfp_cached_num_bytes_get", msg_type, seqid) + result.write(oprot) + oprot.writeMessageEnd() + oprot.trans.flush() + + def process_pltfm_mgr_qsfp_cached_page_get(self, seqid, iprot, oprot): + args = pltfm_mgr_qsfp_cached_page_get_args() + args.read(iprot) + iprot.readMessageEnd() + result = pltfm_mgr_qsfp_cached_page_get_result() + try: + result.success = self._handler.pltfm_mgr_qsfp_cached_page_get(args.port_num, args.page) + msg_type = TMessageType.REPLY + except TTransport.TTransportException: + raise + except InvalidPltfmMgrOperation as ouch: + msg_type = TMessageType.REPLY + result.ouch = ouch + except TApplicationException as ex: + logging.exception('TApplication exception in handler') + msg_type = TMessageType.EXCEPTION + result = ex + except Exception: + logging.exception('Unexpected exception in handler') + msg_type = TMessageType.EXCEPTION + result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error') + oprot.writeMessageBegin("pltfm_mgr_qsfp_cached_page_get", msg_type, seqid) + result.write(oprot) + oprot.writeMessageEnd() + oprot.trans.flush() + def process_pltfm_mgr_qsfp_presence_get(self, seqid, iprot, oprot): args = pltfm_mgr_qsfp_presence_get_args() args.read(iprot) @@ -2386,6 +2568,32 @@ def process_pltfm_mgr_sensor_info_get(self, seqid, iprot, oprot): oprot.writeMessageEnd() oprot.trans.flush() + def process_pltfm_mgr_chss_mgmt_bmc_ver_get(self, seqid, iprot, oprot): + args = pltfm_mgr_chss_mgmt_bmc_ver_get_args() + args.read(iprot) + iprot.readMessageEnd() + result = pltfm_mgr_chss_mgmt_bmc_ver_get_result() + try: + result.success = self._handler.pltfm_mgr_chss_mgmt_bmc_ver_get() + msg_type = TMessageType.REPLY + except TTransport.TTransportException: + raise + except InvalidPltfmMgrOperation as ouch: + msg_type = TMessageType.REPLY + result.ouch = ouch + except TApplicationException as ex: + logging.exception('TApplication exception in handler') + msg_type = TMessageType.EXCEPTION + result = ex + except Exception: + logging.exception('Unexpected exception in handler') + msg_type = TMessageType.EXCEPTION + result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error') + oprot.writeMessageBegin("pltfm_mgr_chss_mgmt_bmc_ver_get", msg_type, seqid) + result.write(oprot) + oprot.writeMessageEnd() + oprot.trans.flush() + # HELPER FUNCTIONS AND STRUCTURES @@ -2585,8 +2793,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -2703,8 +2910,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -2839,8 +3045,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -2942,11 +3147,295 @@ def __ne__(self, other): all_structs.append(pltfm_mgr_pwr_supply_info_get_args) pltfm_mgr_pwr_supply_info_get_args.thrift_spec = ( None, # 0 - (1, TType.I16, 'ps_num', None, None, ), # 1 + (1, TType.I16, 'ps_num', None, None, ), # 1 +) + + +class pltfm_mgr_pwr_supply_info_get_result(object): + """ + Attributes: + - success + - ouch + + """ + + + def __init__(self, success=None, ouch=None,): + self.success = success + self.ouch = ouch + + def read(self, iprot): + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 0: + if ftype == TType.STRUCT: + self.success = pltfm_mgr_pwr_supply_info_t() + self.success.read(iprot) + else: + iprot.skip(ftype) + elif fid == 1: + if ftype == TType.STRUCT: + self.ouch = InvalidPltfmMgrOperation.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin('pltfm_mgr_pwr_supply_info_get_result') + if self.success is not None: + oprot.writeFieldBegin('success', TType.STRUCT, 0) + self.success.write(oprot) + oprot.writeFieldEnd() + if self.ouch is not None: + oprot.writeFieldBegin('ouch', TType.STRUCT, 1) + self.ouch.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ['%s=%r' % (key, value) + for key, value in self.__dict__.items()] + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) +all_structs.append(pltfm_mgr_pwr_supply_info_get_result) +pltfm_mgr_pwr_supply_info_get_result.thrift_spec = ( + (0, TType.STRUCT, 'success', [pltfm_mgr_pwr_supply_info_t, None], None, ), # 0 + (1, TType.STRUCT, 'ouch', [InvalidPltfmMgrOperation, None], None, ), # 1 +) + + +class pltfm_mgr_pwr_rail_info_get_args(object): + """ + Attributes: + - ps_num + + """ + + + def __init__(self, ps_num=None,): + self.ps_num = ps_num + + def read(self, iprot): + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I16: + self.ps_num = iprot.readI16() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin('pltfm_mgr_pwr_rail_info_get_args') + if self.ps_num is not None: + oprot.writeFieldBegin('ps_num', TType.I16, 1) + oprot.writeI16(self.ps_num) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ['%s=%r' % (key, value) + for key, value in self.__dict__.items()] + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) +all_structs.append(pltfm_mgr_pwr_rail_info_get_args) +pltfm_mgr_pwr_rail_info_get_args.thrift_spec = ( + None, # 0 + (1, TType.I16, 'ps_num', None, None, ), # 1 +) + + +class pltfm_mgr_pwr_rail_info_get_result(object): + """ + Attributes: + - success + - ouch + + """ + + + def __init__(self, success=None, ouch=None,): + self.success = success + self.ouch = ouch + + def read(self, iprot): + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 0: + if ftype == TType.STRUCT: + self.success = pltfm_mgr_pwr_rail_info_t() + self.success.read(iprot) + else: + iprot.skip(ftype) + elif fid == 1: + if ftype == TType.STRUCT: + self.ouch = InvalidPltfmMgrOperation.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin('pltfm_mgr_pwr_rail_info_get_result') + if self.success is not None: + oprot.writeFieldBegin('success', TType.STRUCT, 0) + self.success.write(oprot) + oprot.writeFieldEnd() + if self.ouch is not None: + oprot.writeFieldBegin('ouch', TType.STRUCT, 1) + self.ouch.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ['%s=%r' % (key, value) + for key, value in self.__dict__.items()] + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) +all_structs.append(pltfm_mgr_pwr_rail_info_get_result) +pltfm_mgr_pwr_rail_info_get_result.thrift_spec = ( + (0, TType.STRUCT, 'success', [pltfm_mgr_pwr_rail_info_t, None], None, ), # 0 + (1, TType.STRUCT, 'ouch', [InvalidPltfmMgrOperation, None], None, ), # 1 +) + + +class pltfm_mgr_fan_speed_set_args(object): + """ + Attributes: + - fan_num + - percent + + """ + + + def __init__(self, fan_num=None, percent=None,): + self.fan_num = fan_num + self.percent = percent + + def read(self, iprot): + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I32: + self.fan_num = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.percent = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin('pltfm_mgr_fan_speed_set_args') + if self.fan_num is not None: + oprot.writeFieldBegin('fan_num', TType.I32, 1) + oprot.writeI32(self.fan_num) + oprot.writeFieldEnd() + if self.percent is not None: + oprot.writeFieldBegin('percent', TType.I32, 2) + oprot.writeI32(self.percent) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ['%s=%r' % (key, value) + for key, value in self.__dict__.items()] + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) +all_structs.append(pltfm_mgr_fan_speed_set_args) +pltfm_mgr_fan_speed_set_args.thrift_spec = ( + None, # 0 + (1, TType.I32, 'fan_num', None, None, ), # 1 + (2, TType.I32, 'percent', None, None, ), # 2 ) -class pltfm_mgr_pwr_supply_info_get_result(object): +class pltfm_mgr_fan_speed_set_result(object): """ Attributes: - success @@ -2969,15 +3458,13 @@ def read(self, iprot): if ftype == TType.STOP: break if fid == 0: - if ftype == TType.STRUCT: - self.success = pltfm_mgr_pwr_supply_info_t() - self.success.read(iprot) + if ftype == TType.I32: + self.success = iprot.readI32() else: iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -2989,10 +3476,10 @@ def write(self, oprot): if oprot._fast_encode is not None and self.thrift_spec is not None: oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) return - oprot.writeStructBegin('pltfm_mgr_pwr_supply_info_get_result') + oprot.writeStructBegin('pltfm_mgr_fan_speed_set_result') if self.success is not None: - oprot.writeFieldBegin('success', TType.STRUCT, 0) - self.success.write(oprot) + oprot.writeFieldBegin('success', TType.I32, 0) + oprot.writeI32(self.success) oprot.writeFieldEnd() if self.ouch is not None: oprot.writeFieldBegin('ouch', TType.STRUCT, 1) @@ -3014,23 +3501,23 @@ def __eq__(self, other): def __ne__(self, other): return not (self == other) -all_structs.append(pltfm_mgr_pwr_supply_info_get_result) -pltfm_mgr_pwr_supply_info_get_result.thrift_spec = ( - (0, TType.STRUCT, 'success', [pltfm_mgr_pwr_supply_info_t, None], None, ), # 0 +all_structs.append(pltfm_mgr_fan_speed_set_result) +pltfm_mgr_fan_speed_set_result.thrift_spec = ( + (0, TType.I32, 'success', None, None, ), # 0 (1, TType.STRUCT, 'ouch', [InvalidPltfmMgrOperation, None], None, ), # 1 ) -class pltfm_mgr_pwr_rail_info_get_args(object): +class pltfm_mgr_fan_info_get_args(object): """ Attributes: - - ps_num + - fan_num """ - def __init__(self, ps_num=None,): - self.ps_num = ps_num + def __init__(self, fan_num=None,): + self.fan_num = fan_num def read(self, iprot): if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: @@ -3042,8 +3529,8 @@ def read(self, iprot): if ftype == TType.STOP: break if fid == 1: - if ftype == TType.I16: - self.ps_num = iprot.readI16() + if ftype == TType.I32: + self.fan_num = iprot.readI32() else: iprot.skip(ftype) else: @@ -3055,10 +3542,10 @@ def write(self, oprot): if oprot._fast_encode is not None and self.thrift_spec is not None: oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) return - oprot.writeStructBegin('pltfm_mgr_pwr_rail_info_get_args') - if self.ps_num is not None: - oprot.writeFieldBegin('ps_num', TType.I16, 1) - oprot.writeI16(self.ps_num) + oprot.writeStructBegin('pltfm_mgr_fan_info_get_args') + if self.fan_num is not None: + oprot.writeFieldBegin('fan_num', TType.I32, 1) + oprot.writeI32(self.fan_num) oprot.writeFieldEnd() oprot.writeFieldStop() oprot.writeStructEnd() @@ -3076,14 +3563,14 @@ def __eq__(self, other): def __ne__(self, other): return not (self == other) -all_structs.append(pltfm_mgr_pwr_rail_info_get_args) -pltfm_mgr_pwr_rail_info_get_args.thrift_spec = ( +all_structs.append(pltfm_mgr_fan_info_get_args) +pltfm_mgr_fan_info_get_args.thrift_spec = ( None, # 0 - (1, TType.I16, 'ps_num', None, None, ), # 1 + (1, TType.I32, 'fan_num', None, None, ), # 1 ) -class pltfm_mgr_pwr_rail_info_get_result(object): +class pltfm_mgr_fan_info_get_result(object): """ Attributes: - success @@ -3107,14 +3594,13 @@ def read(self, iprot): break if fid == 0: if ftype == TType.STRUCT: - self.success = pltfm_mgr_pwr_rail_info_t() + self.success = pltfm_mgr_fan_info_t() self.success.read(iprot) else: iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -3126,7 +3612,7 @@ def write(self, oprot): if oprot._fast_encode is not None and self.thrift_spec is not None: oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) return - oprot.writeStructBegin('pltfm_mgr_pwr_rail_info_get_result') + oprot.writeStructBegin('pltfm_mgr_fan_info_get_result') if self.success is not None: oprot.writeFieldBegin('success', TType.STRUCT, 0) self.success.write(oprot) @@ -3151,25 +3637,29 @@ def __eq__(self, other): def __ne__(self, other): return not (self == other) -all_structs.append(pltfm_mgr_pwr_rail_info_get_result) -pltfm_mgr_pwr_rail_info_get_result.thrift_spec = ( - (0, TType.STRUCT, 'success', [pltfm_mgr_pwr_rail_info_t, None], None, ), # 0 +all_structs.append(pltfm_mgr_fan_info_get_result) +pltfm_mgr_fan_info_get_result.thrift_spec = ( + (0, TType.STRUCT, 'success', [pltfm_mgr_fan_info_t, None], None, ), # 0 (1, TType.STRUCT, 'ouch', [InvalidPltfmMgrOperation, None], None, ), # 1 ) -class pltfm_mgr_fan_speed_set_args(object): +class pltfm_mgr_qsfp_cached_num_bytes_get_args(object): """ Attributes: - - fan_num - - percent + - port_num + - page + - offset + - length """ - def __init__(self, fan_num=None, percent=None,): - self.fan_num = fan_num - self.percent = percent + def __init__(self, port_num=None, page=None, offset=None, length=None,): + self.port_num = port_num + self.page = page + self.offset = offset + self.length = length def read(self, iprot): if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: @@ -3182,12 +3672,22 @@ def read(self, iprot): break if fid == 1: if ftype == TType.I32: - self.fan_num = iprot.readI32() + self.port_num = iprot.readI32() else: iprot.skip(ftype) elif fid == 2: if ftype == TType.I32: - self.percent = iprot.readI32() + self.page = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I32: + self.offset = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I32: + self.length = iprot.readI32() else: iprot.skip(ftype) else: @@ -3199,14 +3699,22 @@ def write(self, oprot): if oprot._fast_encode is not None and self.thrift_spec is not None: oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) return - oprot.writeStructBegin('pltfm_mgr_fan_speed_set_args') - if self.fan_num is not None: - oprot.writeFieldBegin('fan_num', TType.I32, 1) - oprot.writeI32(self.fan_num) + oprot.writeStructBegin('pltfm_mgr_qsfp_cached_num_bytes_get_args') + if self.port_num is not None: + oprot.writeFieldBegin('port_num', TType.I32, 1) + oprot.writeI32(self.port_num) oprot.writeFieldEnd() - if self.percent is not None: - oprot.writeFieldBegin('percent', TType.I32, 2) - oprot.writeI32(self.percent) + if self.page is not None: + oprot.writeFieldBegin('page', TType.I32, 2) + oprot.writeI32(self.page) + oprot.writeFieldEnd() + if self.offset is not None: + oprot.writeFieldBegin('offset', TType.I32, 3) + oprot.writeI32(self.offset) + oprot.writeFieldEnd() + if self.length is not None: + oprot.writeFieldBegin('length', TType.I32, 4) + oprot.writeI32(self.length) oprot.writeFieldEnd() oprot.writeFieldStop() oprot.writeStructEnd() @@ -3224,15 +3732,17 @@ def __eq__(self, other): def __ne__(self, other): return not (self == other) -all_structs.append(pltfm_mgr_fan_speed_set_args) -pltfm_mgr_fan_speed_set_args.thrift_spec = ( +all_structs.append(pltfm_mgr_qsfp_cached_num_bytes_get_args) +pltfm_mgr_qsfp_cached_num_bytes_get_args.thrift_spec = ( None, # 0 - (1, TType.I32, 'fan_num', None, None, ), # 1 - (2, TType.I32, 'percent', None, None, ), # 2 + (1, TType.I32, 'port_num', None, None, ), # 1 + (2, TType.I32, 'page', None, None, ), # 2 + (3, TType.I32, 'offset', None, None, ), # 3 + (4, TType.I32, 'length', None, None, ), # 4 ) -class pltfm_mgr_fan_speed_set_result(object): +class pltfm_mgr_qsfp_cached_num_bytes_get_result(object): """ Attributes: - success @@ -3255,14 +3765,13 @@ def read(self, iprot): if ftype == TType.STOP: break if fid == 0: - if ftype == TType.I32: - self.success = iprot.readI32() + if ftype == TType.STRING: + self.success = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -3274,10 +3783,10 @@ def write(self, oprot): if oprot._fast_encode is not None and self.thrift_spec is not None: oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) return - oprot.writeStructBegin('pltfm_mgr_fan_speed_set_result') + oprot.writeStructBegin('pltfm_mgr_qsfp_cached_num_bytes_get_result') if self.success is not None: - oprot.writeFieldBegin('success', TType.I32, 0) - oprot.writeI32(self.success) + oprot.writeFieldBegin('success', TType.STRING, 0) + oprot.writeString(self.success.encode('utf-8') if sys.version_info[0] == 2 else self.success) oprot.writeFieldEnd() if self.ouch is not None: oprot.writeFieldBegin('ouch', TType.STRUCT, 1) @@ -3299,23 +3808,25 @@ def __eq__(self, other): def __ne__(self, other): return not (self == other) -all_structs.append(pltfm_mgr_fan_speed_set_result) -pltfm_mgr_fan_speed_set_result.thrift_spec = ( - (0, TType.I32, 'success', None, None, ), # 0 +all_structs.append(pltfm_mgr_qsfp_cached_num_bytes_get_result) +pltfm_mgr_qsfp_cached_num_bytes_get_result.thrift_spec = ( + (0, TType.STRING, 'success', 'UTF8', None, ), # 0 (1, TType.STRUCT, 'ouch', [InvalidPltfmMgrOperation, None], None, ), # 1 ) -class pltfm_mgr_fan_info_get_args(object): +class pltfm_mgr_qsfp_cached_page_get_args(object): """ Attributes: - - fan_num + - port_num + - page """ - def __init__(self, fan_num=None,): - self.fan_num = fan_num + def __init__(self, port_num=None, page=None,): + self.port_num = port_num + self.page = page def read(self, iprot): if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: @@ -3328,7 +3839,12 @@ def read(self, iprot): break if fid == 1: if ftype == TType.I32: - self.fan_num = iprot.readI32() + self.port_num = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.page = iprot.readI32() else: iprot.skip(ftype) else: @@ -3340,10 +3856,14 @@ def write(self, oprot): if oprot._fast_encode is not None and self.thrift_spec is not None: oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) return - oprot.writeStructBegin('pltfm_mgr_fan_info_get_args') - if self.fan_num is not None: - oprot.writeFieldBegin('fan_num', TType.I32, 1) - oprot.writeI32(self.fan_num) + oprot.writeStructBegin('pltfm_mgr_qsfp_cached_page_get_args') + if self.port_num is not None: + oprot.writeFieldBegin('port_num', TType.I32, 1) + oprot.writeI32(self.port_num) + oprot.writeFieldEnd() + if self.page is not None: + oprot.writeFieldBegin('page', TType.I32, 2) + oprot.writeI32(self.page) oprot.writeFieldEnd() oprot.writeFieldStop() oprot.writeStructEnd() @@ -3361,14 +3881,15 @@ def __eq__(self, other): def __ne__(self, other): return not (self == other) -all_structs.append(pltfm_mgr_fan_info_get_args) -pltfm_mgr_fan_info_get_args.thrift_spec = ( +all_structs.append(pltfm_mgr_qsfp_cached_page_get_args) +pltfm_mgr_qsfp_cached_page_get_args.thrift_spec = ( None, # 0 - (1, TType.I32, 'fan_num', None, None, ), # 1 + (1, TType.I32, 'port_num', None, None, ), # 1 + (2, TType.I32, 'page', None, None, ), # 2 ) -class pltfm_mgr_fan_info_get_result(object): +class pltfm_mgr_qsfp_cached_page_get_result(object): """ Attributes: - success @@ -3391,15 +3912,13 @@ def read(self, iprot): if ftype == TType.STOP: break if fid == 0: - if ftype == TType.STRUCT: - self.success = pltfm_mgr_fan_info_t() - self.success.read(iprot) + if ftype == TType.STRING: + self.success = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -3411,10 +3930,10 @@ def write(self, oprot): if oprot._fast_encode is not None and self.thrift_spec is not None: oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) return - oprot.writeStructBegin('pltfm_mgr_fan_info_get_result') + oprot.writeStructBegin('pltfm_mgr_qsfp_cached_page_get_result') if self.success is not None: - oprot.writeFieldBegin('success', TType.STRUCT, 0) - self.success.write(oprot) + oprot.writeFieldBegin('success', TType.STRING, 0) + oprot.writeString(self.success.encode('utf-8') if sys.version_info[0] == 2 else self.success) oprot.writeFieldEnd() if self.ouch is not None: oprot.writeFieldBegin('ouch', TType.STRUCT, 1) @@ -3436,9 +3955,9 @@ def __eq__(self, other): def __ne__(self, other): return not (self == other) -all_structs.append(pltfm_mgr_fan_info_get_result) -pltfm_mgr_fan_info_get_result.thrift_spec = ( - (0, TType.STRUCT, 'success', [pltfm_mgr_fan_info_t, None], None, ), # 0 +all_structs.append(pltfm_mgr_qsfp_cached_page_get_result) +pltfm_mgr_qsfp_cached_page_get_result.thrift_spec = ( + (0, TType.STRING, 'success', 'UTF8', None, ), # 0 (1, TType.STRUCT, 'ouch', [InvalidPltfmMgrOperation, None], None, ), # 1 ) @@ -3534,8 +4053,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -3670,8 +4188,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -3801,13 +4318,12 @@ def read(self, iprot): break if fid == 0: if ftype == TType.STRING: - self.success = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.success = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -3923,8 +4439,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -4071,8 +4586,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -4207,8 +4721,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -4367,8 +4880,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -4503,8 +5015,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -4644,8 +5155,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -4788,8 +5298,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -4932,8 +5441,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -5077,8 +5585,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -5222,8 +5729,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -5367,8 +5873,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -5511,8 +6016,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -5655,8 +6159,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -5799,8 +6302,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -5938,8 +6440,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -6074,8 +6575,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -6211,8 +6711,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -6359,8 +6858,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -6495,8 +6993,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -6631,8 +7128,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -6791,8 +7287,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -6939,8 +7434,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -7006,7 +7500,7 @@ def read(self, iprot): break if fid == 1: if ftype == TType.STRING: - self.options = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.options = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) else: @@ -7070,13 +7564,12 @@ def read(self, iprot): break if fid == 0: if ftype == TType.STRING: - self.success = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.success = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 1: if ftype == TType.STRUCT: - self.ouch = InvalidPltfmMgrOperation() - self.ouch.read(iprot) + self.ouch = InvalidPltfmMgrOperation.read(iprot) else: iprot.skip(ftype) else: @@ -7118,6 +7611,121 @@ def __ne__(self, other): (0, TType.STRING, 'success', 'UTF8', None, ), # 0 (1, TType.STRUCT, 'ouch', [InvalidPltfmMgrOperation, None], None, ), # 1 ) + + +class pltfm_mgr_chss_mgmt_bmc_ver_get_args(object): + + + def read(self, iprot): + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin('pltfm_mgr_chss_mgmt_bmc_ver_get_args') + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ['%s=%r' % (key, value) + for key, value in self.__dict__.items()] + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) +all_structs.append(pltfm_mgr_chss_mgmt_bmc_ver_get_args) +pltfm_mgr_chss_mgmt_bmc_ver_get_args.thrift_spec = ( +) + + +class pltfm_mgr_chss_mgmt_bmc_ver_get_result(object): + """ + Attributes: + - success + - ouch + + """ + + + def __init__(self, success=None, ouch=None,): + self.success = success + self.ouch = ouch + + def read(self, iprot): + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 0: + if ftype == TType.STRING: + self.success = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() + else: + iprot.skip(ftype) + elif fid == 1: + if ftype == TType.STRUCT: + self.ouch = InvalidPltfmMgrOperation.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin('pltfm_mgr_chss_mgmt_bmc_ver_get_result') + if self.success is not None: + oprot.writeFieldBegin('success', TType.STRING, 0) + oprot.writeString(self.success.encode('utf-8') if sys.version_info[0] == 2 else self.success) + oprot.writeFieldEnd() + if self.ouch is not None: + oprot.writeFieldBegin('ouch', TType.STRUCT, 1) + self.ouch.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ['%s=%r' % (key, value) + for key, value in self.__dict__.items()] + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) +all_structs.append(pltfm_mgr_chss_mgmt_bmc_ver_get_result) +pltfm_mgr_chss_mgmt_bmc_ver_get_result.thrift_spec = ( + (0, TType.STRING, 'success', 'UTF8', None, ), # 0 + (1, TType.STRUCT, 'ouch', [InvalidPltfmMgrOperation, None], None, ), # 1 +) fix_spec(all_structs) del all_structs - diff --git a/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/pltfm_mgr_rpc/ttypes.py b/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/pltfm_mgr_rpc/ttypes.py index da4a62d4eeff..501596941664 100644 --- a/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/pltfm_mgr_rpc/ttypes.py +++ b/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/pltfm_mgr_rpc/ttypes.py @@ -1,5 +1,5 @@ # -# Autogenerated by Thrift Compiler (0.13.0) +# Autogenerated by Thrift Compiler (0.14.1) # # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING # @@ -16,6 +16,24 @@ all_structs = [] +class qsfp_eeprom_page_t(object): + PAGE0_LOWER = 0 + PAGE0_UPPER = 1 + PAGE3 = 2 + + _VALUES_TO_NAMES = { + 0: "PAGE0_LOWER", + 1: "PAGE0_UPPER", + 2: "PAGE3", + } + + _NAMES_TO_VALUES = { + "PAGE0_LOWER": 0, + "PAGE0_UPPER": 1, + "PAGE3": 2, + } + + class pltfm_mgr_sys_tmp_t(object): """ Attributes: @@ -241,37 +259,37 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 2: if ftype == TType.STRING: - self.prod_name = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.prod_name = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 3: if ftype == TType.STRING: - self.prod_part_num = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.prod_part_num = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 4: if ftype == TType.STRING: - self.sys_asm_part_num = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.sys_asm_part_num = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 5: if ftype == TType.STRING: - self.bfn_pcba_part_num = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.bfn_pcba_part_num = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 6: if ftype == TType.STRING: - self.bfn_pcbb_part_num = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.bfn_pcbb_part_num = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 7: if ftype == TType.STRING: - self.odm_pcba_part_num = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.odm_pcba_part_num = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 8: if ftype == TType.STRING: - self.odm_pcba_ser_num = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.odm_pcba_ser_num = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 9: @@ -291,42 +309,42 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 12: if ftype == TType.STRING: - self.prod_ser_num = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.prod_ser_num = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 13: if ftype == TType.STRING: - self.prod_ast_tag = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.prod_ast_tag = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 14: if ftype == TType.STRING: - self.sys_mfger = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.sys_mfger = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 15: if ftype == TType.STRING: - self.sys_mfg_date = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.sys_mfg_date = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 16: if ftype == TType.STRING: - self.pcb_mfger = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.pcb_mfger = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 17: if ftype == TType.STRING: - self.assembled_at = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.assembled_at = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 18: if ftype == TType.STRING: - self.loc_mac_addr = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.loc_mac_addr = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 19: if ftype == TType.STRING: - self.ext_mac_addr = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.ext_mac_addr = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 20: @@ -336,7 +354,7 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 21: if ftype == TType.STRING: - self.location = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.location = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 22: @@ -535,17 +553,17 @@ def read(self, iprot): iprot.skip(ftype) elif fid == 8: if ftype == TType.STRING: - self.model = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.model = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 9: if ftype == TType.STRING: - self.serial = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.serial = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) elif fid == 10: if ftype == TType.STRING: - self.rev = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString() + self.rev = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() else: iprot.skip(ftype) else: @@ -1278,26 +1296,39 @@ class InvalidPltfmMgrOperation(TException): def __init__(self, code=None,): - self.code = code + super(InvalidPltfmMgrOperation, self).__setattr__('code', code) - def read(self, iprot): - if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: - iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) - return + def __setattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __delattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __hash__(self): + return hash(self.__class__) ^ hash((self.code, )) + + @classmethod + def read(cls, iprot): + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and cls.thrift_spec is not None: + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) iprot.readStructBegin() + code = None while True: (fname, ftype, fid) = iprot.readFieldBegin() if ftype == TType.STOP: break if fid == 1: if ftype == TType.I32: - self.code = iprot.readI32() + code = iprot.readI32() else: iprot.skip(ftype) else: iprot.skip(ftype) iprot.readFieldEnd() iprot.readStructEnd() + return cls( + code=code, + ) def write(self, oprot): if oprot._fast_encode is not None and self.thrift_spec is not None: diff --git a/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/thermal.py b/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/thermal.py index ef3c571ac301..e5034f09f558 100644 --- a/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/thermal.py +++ b/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/thermal.py @@ -1,8 +1,11 @@ try: import subprocess - + from collections import namedtuple + import json from bfn_extensions.platform_sensors import platform_sensors_get from sonic_platform_base.thermal_base import ThermalBase + from sonic_py_common import device_info + import logging except ImportError as e: raise ImportError (str(e) + "- required module not found") @@ -18,6 +21,8 @@ temp2_input: 37.000 ... ''' +Threshold = namedtuple('Threshold', ['crit', 'max', 'min', 'alarm']) + def _sensors_chip_parsed(data: str): def kv(line): k, v, *_ = [t.strip(': ') for t in line.split(':') if t] + [''] @@ -68,27 +73,89 @@ def _value_get(d: dict, key_prefix, key_suffix=''): # Thermal -> ThermalBase -> DeviceBase class Thermal(ThermalBase): + _thresholds = dict() + _max_temperature = 100.0 + _min_temperature = 0.0 + _min_high_threshold_temperature = 35.0 + def __init__(self, chip, label, index = 0): self.__chip = chip self.__label = label self.__name = f"{chip}:{label}".lower().replace(' ', '-') self.__collect_temp = [] self.__index = index + self.__high_threshold = None + self.__low_threshold = None + f = None + try: + path = device_info.get_path_to_platform_dir() + '/' + 'thermal_thresholds.json' + f = open(path) + except FileNotFoundError: + logging.warning('can not open the file') + + if f is not None: + self.__get_thresholds(f) + + def __get_thresholds(self, f): + def_threshold_json = json.load(f) + all_data = def_threshold_json["thermals"] + for i in all_data: + for key, value in i.items(): + self._thresholds[key] = Threshold(*value) + + def check_in_range(self, temperature): + temp_f = float(temperature) + return temp_f > self._min_temperature and temp_f <= self._max_temperature + + def check_high_threshold(self, temperature, attr_suffix): + temp_f = float(temperature) + check_range = True + if attr_suffix == 'max': + if temp_f < self._min_high_threshold_temperature: + if self.__name in self._thresholds: + temp = self._thresholds[self.__name].max + self.set_high_threshold(temp) + check_range = False + return check_range def __get(self, attr_prefix, attr_suffix): sensor_data = _sensors_get().get(self.__chip, {}).get(self.__label, {}) value = _value_get(sensor_data, attr_prefix, attr_suffix) - return value if value is not None else -999.9 + if value is not None and self.check_in_range(value) and self.check_high_threshold(value, attr_suffix): + return value + elif self.__name in self._thresholds and attr_prefix == 'temp': + if attr_suffix == 'crit': + return self._thresholds[self.__name].crit + elif attr_suffix == 'max': + if self.__high_threshold is None: + return self._thresholds[self.__name].max + else: + return self.__high_threshold + elif attr_suffix == 'min': + if self.__low_threshold is None: + return self._thresholds[self.__name].min + else: + return self.__low_threshold + elif attr_suffix == 'alarm': + return self._thresholds[self.__name].alarm + else: + return 1.0 + else: + return 0.05 # ThermalBase interface methods: def get_temperature(self) -> float: temp = self.__get('temp', 'input') self.__collect_temp.append(float(temp)) self.__collect_temp.sort() + if len(self.__collect_temp) == 3: + del self.__collect_temp[1] return float(temp) def get_high_threshold(self) -> float: - return float(self.__get('temp', 'max')) + if self.__high_threshold is None: + return float(self.__get('temp', 'max')) + return float(self.__high_threshold) def get_high_critical_threshold(self) -> float: return float(self.__get('temp', 'crit')) @@ -113,28 +180,38 @@ def is_replaceable(self): return False def get_low_threshold(self) -> float: - return float(self.__get('temp', 'min')) + if self.__low_threshold is None: + return float(self.__get('temp', 'min')) + return float(self.__low_threshold) def get_serial(self): return 'N/A' def get_minimum_recorded(self) -> float: - temp = self.__collect_temp[0] if len(self.__collect_temp) > 0 else 0.1 + temp = self.__collect_temp[0] if len(self.__collect_temp) > 0 else self.get_temperature() + temp = temp if temp <= 100.0 else 100.0 temp = temp if temp > 0.0 else 0.1 return float(temp) def get_maximum_recorded(self) -> float: - temp = self.__collect_temp[-1] if len(self.__collect_temp) > 0 else 100.0 + temp = self.__collect_temp[-1] if len(self.__collect_temp) > 0 else self.get_temperature() temp = temp if temp <= 100.0 else 100.0 + temp = temp if temp > 0.0 else 0.1 return float(temp) def get_position_in_parent(self): return self.__index def set_high_threshold(self, temperature): + if self.check_in_range(temperature): + self.__high_threshold = temperature + return True return False def set_low_threshold(self, temperature): + if self.check_in_range(temperature): + self.__low_threshold = temperature + return True return False def thermal_list_get(): diff --git a/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/thermal_manager.py b/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/thermal_manager.py deleted file mode 100644 index 1f932f2d3ce6..000000000000 --- a/platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/thermal_manager.py +++ /dev/null @@ -1,67 +0,0 @@ -try: - from threading import Timer -except ImportError as e: - raise ImportError (str(e) + "- required module not found") - -class ThermalManager(): - def __init__(self, polling_time = 30.0): - self.__polling_thermal_time = polling_time - self.__thermals = None - self.__timer = None - self.__chassis = None - - def start(self): - self.work() - self.__timer = Timer(self.__polling_thermal_time, self.start) - self.__timer.start() - - def work(self): - if self.__chassis is not None: - self.__thermals = self.__chassis._thermal_list - for term in self.__thermals: - self.check(term) - - def check(self, sensor): - temperature = sensor.get_temperature() - if temperature is not None: - temp_high = sensor.get_high_threshold() - temp_low = sensor.get_low_threshold() - if temp_high > -999.0: - if temperature > temp_high: - print('Sensor ', sensor.get_name(), ' temperature more then', temp_high, '!!!') - else: - print('Sensor ', sensor.get_name(), ' has no high temperature threshold') - - if temp_low > -999.0: - if temperature < temp_low: - print('Sensor ', sensor.get_name(), ' temperature less then', temp_low, '!!!') - else: - print('Sensor ', sensor.get_name(), ' has no low temperature threshold') - - def stop(self): - if self.__timer is not None: - self.__timer.cancel() - - def __del__(self): - if self.__timer is not None: - self.__timer.cancel() - - # for compatibility with old version - def run_policy(self, chassis_def): - self.__chassis = chassis_def - - def get_interval(self): - return self.__polling_thermal_time - - def initialize(self): - pass - - def load(self, json_file): - pass - - def init_thermal_algorithm(self, chassis_def): - self.__chassis = chassis_def - self.start() - - def deinitialize(self): - self.stop() diff --git a/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_ioctl.c b/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_ioctl.c index b0792556caf6..8f4a5ca7fc6a 100644 --- a/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_ioctl.c +++ b/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_ioctl.c @@ -110,9 +110,10 @@ int bf_fpga_ioctl(struct bf_pci_dev *bfdev, /* copy read data to user area */ for (i = 0; i < i2c_op.num_i2c; i++) { if (i2c_op.i2c_inst[i].rd_cnt) { - if (copy_to_user(&(((bf_fpga_i2c_t *)addr)->i2c_inst[i].rd_buf), - &i2c_op.i2c_inst[i].rd_buf, - i2c_op.i2c_inst[i].rd_cnt)) { + if (copy_to_user( + &(((bf_fpga_i2c_t *)addr)->i2c_inst[i].fpga_i2c_buf.rd_buf), + &i2c_op.i2c_inst[i].fpga_i2c_buf.rd_buf, + i2c_op.i2c_inst[i].rd_cnt)) { return -EFAULT; } } diff --git a/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_ioctl.h b/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_ioctl.h index 4c5eb7bf0386..f7035647af50 100644 --- a/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_ioctl.h +++ b/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_ioctl.h @@ -93,7 +93,7 @@ typedef struct bf_fpga_i2c_inst_s { unsigned char wr_buf[BF_FPGA_MAX_I2C_WR_DATA]; /* write data source buffer */ unsigned char rd_buf[BF_FPGA_MAX_I2C_RD_DATA]; /* read data dest buffer */ - }; + } fpga_i2c_buf; unsigned char status; unsigned char retry_cnt; /* if fpga maintains retry count */ unsigned char mux; /* if fpga maintains internal MUX */ diff --git a/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_main.c b/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_main.c index 563cc5120df1..9910117b72cb 100644 --- a/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_main.c +++ b/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_main.c @@ -120,7 +120,7 @@ static void bf_remove_listener(struct bf_pci_dev *bfdev, /* in case of certain error conditions, this function might be called after * bf_pci_remove() - */ + */ if (!bfdev || !listener) { return; } @@ -294,7 +294,12 @@ static int bf_setup_bars(struct pci_dev *dev, struct bf_dev_info *info) { int i, iom, ret; unsigned long flags; static const char *bar_names[BF_MAX_BAR_MAPS] = { - "BAR0", "BAR1", "BAR2", "BAR3", "BAR4", "BAR5", + "BAR0", + "BAR1", + "BAR2", + "BAR3", + "BAR4", + "BAR5", }; iom = 0; @@ -849,7 +854,7 @@ static void fpga_print_build_date(u32 build_date) { month = (char)(build_date & 0x0f); build_date >>= 4; day = (char)(build_date & 0x1f); - printk(KERN_ALERT "fpga version %02d/%02d/%2d %02d:%02d:%02d", + printk(KERN_ALERT "fpga build %02d/%02d/%2d %02d:%02d:%02d", month, day, year, @@ -991,6 +996,7 @@ static int bf_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { } #endif /* LINUX_VERSION_CODE */ /* ** intentional no-break */ + /* FALLTHRU */ case BF_INTR_MODE_MSI: #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 14, 0) num_irq = pci_enable_msi_block(pdev, BF_MSI_ENTRY_CNT); @@ -1032,7 +1038,8 @@ static int bf_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { } #endif /* LINUX_VERSION_CODE */ #endif /* CONFIG_PCI_MSI */ - /* fall back to Legacy Interrupt, intentional no-break */ + /* fall back to Legacy Interrupt, intentional no-break */ + /* FALLTHRU */ case BF_INTR_MODE_LEGACY: if (pci_intx_mask_supported(pdev)) { @@ -1044,6 +1051,7 @@ static int bf_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { } printk(KERN_NOTICE "bf_fpga PCI INTx mask not supported\n"); /* fall back to no Interrupt, intentional no-break */ + /* FALLTHRU */ case BF_INTR_MODE_NONE: bfdev->info.irq = 0; bfdev->info.num_irq = 0; @@ -1084,7 +1092,7 @@ static int bf_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { build_date = *((u32 *)(bfdev->info.mem[0].internal_addr) + (BF_FPGA_BUILD_DATE / 4)); fpga_print_build_date(build_date); - printk(KERN_ALERT "bf_fpga version %hu:%hu probe ok\n", + printk(KERN_ALERT "bf_fpga version %hu.%hu probe ok\n", (u16)(build_ver >> 16), (u16)(build_ver)); return 0; @@ -1239,6 +1247,7 @@ static int bf_config_intr_mode(char *intr_str) { static const struct pci_device_id bf_pci_tbl[] = { {PCI_VDEVICE(BF, BF_FPGA_DEV_ID_JBAY_0), 0}, + {PCI_VDEVICE(BF, BF_FPGA_DEV_ID_CB_0), 0}, /* required last entry */ {.device = 0}}; diff --git a/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_priv.h b/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_priv.h index 7515bde7458d..5d259fb8a9f7 100644 --- a/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_priv.h +++ b/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_priv.h @@ -28,6 +28,7 @@ #define PCI_VENDOR_ID_BF 0x1d1c #define BF_FPGA_DEV_ID_JBAY_0 0x01F0 +#define BF_FPGA_DEV_ID_CB_0 0x01F1 #ifndef PCI_MSIX_ENTRY_SIZE #define PCI_MSIX_ENTRY_SIZE 16 @@ -123,8 +124,8 @@ struct bf_pci_dev { u8 instance; char name[16]; struct bf_int_vector bf_int_vec[BF_MSIX_ENTRY_CNT]; - struct bf_listener * - listener_head; /* head of a singly linked list of listeners */ + struct bf_listener + *listener_head; /* head of a singly linked list of listeners */ struct bf_fpga_sysfs_buff fpga_sysfs_buff[BF_FPGA_SYSFS_CNT]; struct bf_fpga_sysfs_buff fpga_sysfs_new_device; struct bf_fpga_sysfs_buff fpga_sysfs_rm_device; diff --git a/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_sysfs.c b/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_sysfs.c index 6970a7a95985..6d5259e6a46e 100644 --- a/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_sysfs.c +++ b/platform/barefoot/sonic-platform-modules-bfn-newport/modules/bf_fpga_sysfs.c @@ -76,7 +76,7 @@ static ssize_t bf_fpga_sysfs_i2c_get(struct device *dev, i2c_op.i2c_inst[0].status); return -EIO; } - memcpy(buf, i2c_op.i2c_inst[0].rd_buf, cur_cnt); + memcpy(buf, i2c_op.i2c_inst[0].fpga_i2c_buf.rd_buf, cur_cnt); buf += cur_cnt; size += cur_cnt; cur_size -= cur_cnt; @@ -108,7 +108,7 @@ static ssize_t bf_fpga_sysfs_i2c_set(struct device *dev, } i2c_op.i2c_inst[0].wr_cnt = cur_cnt; i2c_op.i2c_inst[0].rd_cnt = 0; - memcpy(i2c_op.i2c_inst[0].wr_buf, buf, cur_cnt); + memcpy(i2c_op.i2c_inst[0].fpga_i2c_buf.wr_buf, buf, cur_cnt); i2c_op.num_i2c = 1; i2c_op.one_time = 1; i2c_op.inst_hndl.bus_id = sysfs_buf->bus_id; diff --git a/platform/barefoot/sonic-platform-modules-bfn-newport/modules/i2c/bf_fpga_i2c.c b/platform/barefoot/sonic-platform-modules-bfn-newport/modules/i2c/bf_fpga_i2c.c index c8ebd3e63c6f..1f0520990188 100644 --- a/platform/barefoot/sonic-platform-modules-bfn-newport/modules/i2c/bf_fpga_i2c.c +++ b/platform/barefoot/sonic-platform-modules-bfn-newport/modules/i2c/bf_fpga_i2c.c @@ -146,11 +146,11 @@ static int fpga_i2c_enqueue(int bus_id, wd0 |= (I2C_WR_ADDR_DATA | (delay << I2C_DELAY_SHF)); wd1 |= (i2c_inst->i2c_addr << I2C_DEV_ADDR_SHF); /* copy the first byte into register address */ - wd1 |= ((i2c_inst->wr_buf[0]) << I2C_CMD_OFFSET); + wd1 |= ((i2c_inst->fpga_i2c_buf.wr_buf[0]) << I2C_CMD_OFFSET); wd1 |= ((num_wr - 1) << I2C_WR_CNT_SHF); if (num_wr <= 9) { /* copy data into instruction area */ - memcpy(i2c_data, &i2c_inst->wr_buf[1], (num_wr - 1)); + memcpy(i2c_data, &i2c_inst->fpga_i2c_buf.wr_buf[1], (num_wr - 1)); bf_fpga_i2c_reg_write32( i2c_ctrl, Bf_FPGA_I2C_INST_DATA_LO(inst_id), i2c_data[0]); bf_fpga_i2c_reg_write32( @@ -159,7 +159,7 @@ static int fpga_i2c_enqueue(int bus_id, /* copy the data in data area */ int len = num_wr - 1; uint32_t addr; - uint8_t *val = (uint8_t *)(&i2c_inst->wr_buf[1]); + uint8_t *val = (uint8_t *)(&i2c_inst->fpga_i2c_buf.wr_buf[1]); /* store the data pointer Note the indexing required by FPGA specs */ i2c_data[0] = BF_FPGA_I2C_DATA_AREA(inst_id); addr = i2c_data[0]; @@ -195,11 +195,11 @@ static int fpga_i2c_enqueue(int bus_id, wd1 |= (i2c_inst->i2c_addr << I2C_DEV_ADDR_SHF); /* 1st byte of the write buf goes into "register address" field */ wd1 |= ((num_wr - 1) << I2C_WR_CNT_SHF); - wd1 |= ((i2c_inst->wr_buf[0]) << I2C_CMD_OFFSET); + wd1 |= ((i2c_inst->fpga_i2c_buf.wr_buf[0]) << I2C_CMD_OFFSET); wd1 |= ((num_rd) << I2C_RD_CNT_SHF); /* less than 8 bytes data goes to the instruction area */ if ((num_wr - 1 + num_rd) <= 8) { - memcpy(i2c_data, &i2c_inst->wr_buf[1], (num_wr - 1)); + memcpy(i2c_data, &i2c_inst->fpga_i2c_buf.wr_buf[1], (num_wr - 1)); bf_fpga_i2c_reg_write32( i2c_ctrl, Bf_FPGA_I2C_INST_DATA_LO(inst_id), i2c_data[0]); bf_fpga_i2c_reg_write32( @@ -207,7 +207,7 @@ static int fpga_i2c_enqueue(int bus_id, } else { int len = num_wr - 1; uint32_t addr; - uint8_t *val = (uint8_t *)(&i2c_inst->wr_buf[1]); + uint8_t *val = (uint8_t *)(&i2c_inst->fpga_i2c_buf.wr_buf[1]); /* store the data area pointer */ i2c_data[0] = BF_FPGA_I2C_DATA_AREA(inst_id); addr = i2c_data[0]; @@ -419,7 +419,7 @@ int fpga_i2c_oneshot(bf_fpga_i2c_t *i2c_op) { i, offset, i2c_op->i2c_inst[i].rd_cnt, - i2c_op->i2c_inst[i].rd_buf)) { + i2c_op->i2c_inst[i].fpga_i2c_buf.rd_buf)) { ret = BF_FPGA_EIO; goto oneshot_error_exit; } diff --git a/platform/broadcom/docker-saiserver-brcm.mk b/platform/broadcom/docker-saiserver-brcm.mk index d39759ac7f21..f4f9cdd42a49 100644 --- a/platform/broadcom/docker-saiserver-brcm.mk +++ b/platform/broadcom/docker-saiserver-brcm.mk @@ -1,13 +1,16 @@ # docker image for brcm saiserver -DOCKER_SAISERVER_BRCM = docker-saiserver-brcm.gz +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) SONIC_DOCKER_IMAGES += $(DOCKER_SAISERVER_BRCM) +SONIC_BUSTER_DOCKERS += $(DOCKER_SAISERVER_BRCM) + +#Support two versions of saiserver +$(DOCKER_SAISERVER_BRCM)_CONTAINER_NAME = saiserver$(SAITHRIFT_VER) -$(DOCKER_SAISERVER_BRCM)_CONTAINER_NAME = saiserver $(DOCKER_SAISERVER_BRCM)_RUN_OPT += --privileged -t $(DOCKER_SAISERVER_BRCM)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf $(DOCKER_SAISERVER_BRCM)_RUN_OPT += -v /var/run/docker-saiserver:/var/run/sswsyncd diff --git a/platform/broadcom/docker-saiserver-brcm/start.sh b/platform/broadcom/docker-saiserver-brcm/start.sh index 494c0e9126c2..81813b57ff9d 100755 --- a/platform/broadcom/docker-saiserver-brcm/start.sh +++ b/platform/broadcom/docker-saiserver-brcm/start.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +HWSKU_DIR=/usr/share/sonic/hwsku start_bcm() { @@ -7,11 +8,37 @@ start_bcm() [ -e /dev/linux-kernel-bde ] || mknod /dev/linux-kernel-bde c 127 0 } +generate_profile() +{ + # There are two ways to specify the contents of the SAI_INIT_CONFIG_FILE and they are mutually exclusive + # via current method (sai.profile.j2) or new method (config.bcm.j2) + # If delta is large, use sai.profile.j2 which basically require the user to select which config file to use + # If delta is small, use config.bcm.j2 where additional SAI INIT config properties are added + # based on specific device metadata requirement + # in this case sai.profile should have been modified to use the path /etc/sai.d/config.bcm + # There is also a possibility that both sai.profile.j2 and config.bcm.j2 are absent. in that cacse just copy + # sai.profile to the new /etc/said directory. + + # Create/Copy the sai.profile to /etc/sai.d/sai.profile + mkdir -p /etc/sai.d/ + + if [ -f $HWSKU_DIR/sai.profile.j2 ]; then + sonic-cfggen -d -t $HWSKU_DIR/sai.profile.j2 > /etc/sai.d/sai.profile + else + if [ -f $HWSKU_DIR/config.bcm.j2 ]; then + sonic-cfggen -d -t $HWSKU_DIR/config.bcm.j2 > /etc/sai.d/config.bcm + fi + if [ -f $HWSKU_DIR/sai.profile ]; then + cp $HWSKU_DIR/sai.profile /etc/sai.d/sai.profile + fi + fi +} rm -f /var/run/rsyslogd.pid supervisorctl start rsyslogd +generate_profile start_bcm supervisorctl start saiserver diff --git a/platform/broadcom/docker-saiserver-brcm/supervisord.conf b/platform/broadcom/docker-saiserver-brcm/supervisord.conf index ccb107b3d1f8..3574cd782b78 100644 --- a/platform/broadcom/docker-saiserver-brcm/supervisord.conf +++ b/platform/broadcom/docker-saiserver-brcm/supervisord.conf @@ -20,7 +20,7 @@ stdout_logfile=syslog stderr_logfile=syslog [program:saiserver] -command=/usr/sbin/saiserver -p /usr/share/sonic/hwsku/sai.profile -f /usr/share/sonic/hwsku/port_config.ini +command=/usr/sbin/saiserver -p /etc/sai.d/sai.profile -f /usr/share/sonic/hwsku/port_config.ini priority=3 autostart=false autorestart=false diff --git a/platform/broadcom/libsaithrift-dev.mk b/platform/broadcom/libsaithrift-dev.mk index 543ea63e7f4e..c1bd9b90de13 100644 --- a/platform/broadcom/libsaithrift-dev.mk +++ b/platform/broadcom/libsaithrift-dev.mk @@ -2,19 +2,28 @@ SAI_VER = 0.9.4 -LIBSAITHRIFT_DEV = libsaithrift-dev_$(SAI_VER)_amd64.deb +LIBSAITHRIFT_DEV = libsaithrift$(SAITHRIFT_VER)-dev_$(SAI_VER)_amd64.deb $(LIBSAITHRIFT_DEV)_SRC_PATH = $(SRC_PATH)/sonic-sairedis/SAI -$(LIBSAITHRIFT_DEV)_DEPENDS += $(LIBTHRIFT) $(LIBTHRIFT_DEV) $(PYTHON_THRIFT) $(THRIFT_COMPILER) $(BRCM_SAI) $(BRCM_SAI_DEV) -$(LIBSAITHRIFT_DEV)_RDEPENDS += $(LIBTHRIFT) $(BRCM_SAI) +#Support two different versions of thrift +ifeq ($(SAITHRIFT_V2),y) +$(LIBSAITHRIFT_DEV)_DEPENDS += $(LIBTHRIFT_0_14_1) $(LIBTHRIFT_0_14_1_DEV) $(PYTHON3_THRIFT_0_14_1) $(THRIFT_0_14_1_COMPILER) +$(LIBSAITHRIFT_DEV)_RDEPENDS += $(LIBTHRIFT_0_14_1) +$(LIBSAITHRIFT_DEV)_BUILD_ENV = SAITHRIFTV2=true SAITHRIFT_VER=v2 +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) SONIC_DPKG_DEBS += $(LIBSAITHRIFT_DEV) -PYTHON_SAITHRIFT = python-saithrift_$(SAI_VER)_amd64.deb +PYTHON_SAITHRIFT = python-saithrift$(SAITHRIFT_VER)_$(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 = saiserver$(SAITHRIFT_VER)_$(SAI_VER)_amd64.deb +$(SAISERVER)_RDEPENDS += $(LIBSAITHRIFT_DEV) $(eval $(call add_extra_package,$(LIBSAITHRIFT_DEV),$(SAISERVER))) -SAISERVER_DBG = saiserver-dbg_$(SAI_VER)_amd64.deb +SAISERVER_DBG = saiserver$(SAITHRIFT_VER)-dbg_$(SAI_VER)_amd64.deb $(SAISERVER_DBG)_RDEPENDS += $(SAISERVER) $(eval $(call add_extra_package,$(LIBSAITHRIFT_DEV),$(SAISERVER_DBG))) diff --git a/platform/broadcom/sai-modules.mk b/platform/broadcom/sai-modules.mk index b4f28f125687..1236e06d6240 100644 --- a/platform/broadcom/sai-modules.mk +++ b/platform/broadcom/sai-modules.mk @@ -1,6 +1,6 @@ # Broadcom SAI modules -BRCM_OPENNSL_KERNEL_VERSION = 6.0.0.13 +BRCM_OPENNSL_KERNEL_VERSION = 6.1.0.3 BRCM_OPENNSL_KERNEL = opennsl-modules_$(BRCM_OPENNSL_KERNEL_VERSION)_amd64.deb $(BRCM_OPENNSL_KERNEL)_SRC_PATH = $(PLATFORM_PATH)/saibcm-modules @@ -10,7 +10,7 @@ $(BRCM_OPENNSL_KERNEL)_MACHINE = broadcom SONIC_DPKG_DEBS += $(BRCM_OPENNSL_KERNEL) # SAI bcm modules for DNX family ASIC -BRCM_DNX_OPENNSL_KERNEL_VERSION = 6.0.0.13 +BRCM_DNX_OPENNSL_KERNEL_VERSION = 6.1.0.3 BRCM_DNX_OPENNSL_KERNEL = opennsl-modules-dnx_$(BRCM_DNX_OPENNSL_KERNEL_VERSION)_amd64.deb $(BRCM_DNX_OPENNSL_KERNEL)_SRC_PATH = $(PLATFORM_PATH)/saibcm-modules-dnx diff --git a/platform/broadcom/sai.mk b/platform/broadcom/sai.mk index fd3b3627235f..1ec8d915e5bd 100644 --- a/platform/broadcom/sai.mk +++ b/platform/broadcom/sai.mk @@ -1,5 +1,5 @@ -LIBSAIBCM_VERSION = 6.0.0.13 -LIBSAIBCM_BRANCH_NAME = REL_6.0 +LIBSAIBCM_VERSION = 6.1.0.3 +LIBSAIBCM_BRANCH_NAME = REL_6.1 LIBSAIBCM_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/$(LIBSAIBCM_BRANCH_NAME)/$(LIBSAIBCM_VERSION)" BRCM_SAI = libsaibcm_$(LIBSAIBCM_VERSION)_amd64.deb diff --git a/platform/broadcom/saibcm-modules-dnx b/platform/broadcom/saibcm-modules-dnx index 3fc83d5e5f9d..6bf58f8310bc 160000 --- a/platform/broadcom/saibcm-modules-dnx +++ b/platform/broadcom/saibcm-modules-dnx @@ -1 +1 @@ -Subproject commit 3fc83d5e5f9d1abad3ddf7fa6767b8cdd6121232 +Subproject commit 6bf58f8310bcb29168ae5b2dabed84fc942429fc diff --git a/platform/broadcom/saibcm-modules/debian/changelog b/platform/broadcom/saibcm-modules/debian/changelog index e9e36aaaf302..0ff357c57279 100644 --- a/platform/broadcom/saibcm-modules/debian/changelog +++ b/platform/broadcom/saibcm-modules/debian/changelog @@ -1,3 +1,9 @@ +opennsl (6.1.0.3) unstable; urgency=medium + + * Update to Broadcom SAI 6.1.0.3 + + -- Tejaswini Chadaga Fri, 24 MAR 2022 12:30:00 +0000 + opennsl (6.0.0.13) unstable; urgency=medium * Update to Broadcom SAI 6.0.0.13 diff --git a/platform/broadcom/saibcm-modules/debian/opennsl-modules.init b/platform/broadcom/saibcm-modules/debian/opennsl-modules.init index 09112f5331ce..62274eaa36aa 100755 --- a/platform/broadcom/saibcm-modules/debian/opennsl-modules.init +++ b/platform/broadcom/saibcm-modules/debian/opennsl-modules.init @@ -14,17 +14,27 @@ function create_devices() { - rm -f /dev/linux-knet-cb - rm -f /dev/linux-bcm-knet - rm -f /dev/linux-bcm-bde - rm -f /dev/linux-kernel-bde - rm -f /dev/linux_ngbde - - mknod /dev/linux_ngbde c 120 0 - mknod /dev/linux-knet-cb c 121 0 - mknod /dev/linux-bcm-knet c 122 0 - mknod /dev/linux-bcm-bde c 126 0 - mknod /dev/linux-kernel-bde c 127 0 + if [[ $is_ltsw_chip -eq 1 ]]; then + rm -f /dev/linux_ngbde + rm -f /dev/linux_ngknet + rm -f /dev/linux_ngknetcb + + mknod /dev/linux_ngbde c 120 0 + mknod /dev/linux_ngknet c 121 0 + mknod /dev/linux_ngknetcb c 122 0 + else + rm -f /dev/linux-knet-cb + rm -f /dev/linux-bcm-knet + rm -f /dev/linux-bcm-bde + rm -f /dev/linux-kernel-bde + rm -f /dev/linux_ngbde + + mknod /dev/linux_ngbde c 120 0 + mknod /dev/linux-knet-cb c 121 0 + mknod /dev/linux-bcm-knet c 122 0 + mknod /dev/linux-bcm-bde c 126 0 + mknod /dev/linux-kernel-bde c 127 0 + fi } # linux-kernel-bde debug=4 ==> Verbose level debug @@ -33,6 +43,44 @@ function create_devices() # Events(0x20) and Instance(0x4000) # level logs function load_kernel_modules() +{ + if [[ $is_ltsw_chip -eq 1 ]]; then + insmod /lib/modules/$(uname -r)/extra/psample.ko + 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 linux-bcm-knet use_rx_skb=1 rx_buffer_size=9238 debug=0x5020 default_mtu=9100 + modprobe linux-knet-cb + modprobe linux_ngbde + fi +} + +function remove_kernel_modules() +{ + if [[ $is_ltsw_chip -eq 1 ]]; then + rmmod linux_ngknetcb + rmmod linux_ngknet + rmmod linux_ngbde + rmmod psample.ko + else + rmmod psample.ko + rmmod linux-knet-cb + rmmod linux-bcm-knet + rmmod linux-user-bde + rmmod linux-kernel-bde + rmmod linux_ngbde + fi +} + +function load_platform_env() { . /host/machine.conf @@ -47,37 +95,18 @@ function load_kernel_modules() # Set the default configuration for dmasize and usemsi parameters dmasize=32M usemsi=0 + is_ltsw_chip=0 # Source the platform env file env_file="/usr/share/sonic/device/$platform/platform_env.conf" source $env_file - - 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 linux-bcm-knet use_rx_skb=1 rx_buffer_size=9238 debug=0x5020 default_mtu=9100 - modprobe linux-knet-cb - modprobe linux_ngbde -} - -function remove_kernel_modules() -{ - rmmod psample.ko - rmmod linux-knet-cb - rmmod linux-bcm-knet - rmmod linux-user-bde - rmmod linux-kernel-bde - rmmod linux_ngbde } case "$1" in start) echo -n "Load OpenNSL kernel modules... " + load_platform_env create_devices load_kernel_modules @@ -87,6 +116,7 @@ start) stop) echo -n "Unload OpenNSL kernel modules... " + load_platform_env remove_kernel_modules echo "done." diff --git a/platform/broadcom/saibcm-modules/debian/opennsl-modules.install b/platform/broadcom/saibcm-modules/debian/opennsl-modules.install index 59bf020cb22c..c739b6a5fc40 100644 --- a/platform/broadcom/saibcm-modules/debian/opennsl-modules.install +++ b/platform/broadcom/saibcm-modules/debian/opennsl-modules.install @@ -4,3 +4,5 @@ systems/linux/user/x86-smp_generic_64-2_6/linux-user-bde.ko lib/modules/5.10.0-8 systems/linux/user/x86-smp_generic_64-2_6/linux-knet-cb.ko lib/modules/5.10.0-8-2-amd64/extra systemd/opennsl-modules.service lib/systemd/system sdklt/linux/bde/linux_ngbde.ko lib/modules/5.10.0-8-2-amd64/extra +sdklt/linux/knet/linux_ngknet.ko lib/modules/5.10.0-8-2-amd64/extra +sdklt/linux/knetcb/linux_ngknetcb.ko lib/modules/5.10.0-8-2-amd64/extra diff --git a/platform/broadcom/saibcm-modules/make/Make.config b/platform/broadcom/saibcm-modules/make/Make.config index b6f42bf65c48..01869634e295 100644 --- a/platform/broadcom/saibcm-modules/make/Make.config +++ b/platform/broadcom/saibcm-modules/make/Make.config @@ -120,7 +120,12 @@ ifndef SDKBUILD SDKBUILD :=build endif +ifdef SDK_OUTDIR +BLDROOT = ${SDK_OUTDIR}/${SDKBUILD}/$(if ${BLDCONFIG},${BLDCONFIG}/)${target}${all_suffix}${bldroot_suffix} +export DEST_DIR := ${SDK_OUTDIR}/${SDKBUILD}$(if ${BLDCONFIG},/${BLDCONFIG})$(DEST_DIR_SUFFIX) +else BLDROOT = ${SDK}/${SDKBUILD}/$(if ${BLDCONFIG},${BLDCONFIG}/)${target}${all_suffix}${bldroot_suffix} +endif endif # ifeq "$(HOSTTYPE)" "Windows2000PC" diff --git a/platform/broadcom/saibcm-modules/systems/linux/user/common/Makefile b/platform/broadcom/saibcm-modules/systems/linux/user/common/Makefile index 3dc6425e6ee0..7a342f6ef60e 100644 --- a/platform/broadcom/saibcm-modules/systems/linux/user/common/Makefile +++ b/platform/broadcom/saibcm-modules/systems/linux/user/common/Makefile @@ -69,8 +69,12 @@ kernel-override=linux-$(platform) ifdef BLDCONFIG KERN_BLDROOT=${SDK}/${SDKBUILD}/${BLDCONFIG}/$(kernel-override)$(bldroot_suffix) else +ifdef SDK_OUTDIR +KERN_BLDROOT=${SDK_OUTDIR}/${SDKBUILD}/$(kernel-override)$(bldroot_suffix) +else KERN_BLDROOT=${SDK}/${SDKBUILD}/$(kernel-override)$(bldroot_suffix) endif +endif ifeq (,$(kernel_version)) kernel_version=2_4 diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/modules/Makefile b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/modules/Makefile old mode 100755 new mode 100644 index f845f2e17d86..41953f866b6c --- a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/modules/Makefile +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/modules/Makefile @@ -4,10 +4,7 @@ obj-m:= x86-64-accton-as4630-54pe-cpld.o x86-64-accton-as4630-54pe-psu.o \ else ifeq (,$(KERNEL_SRC)) -#$(error KERNEL_SRC is not defined) -KVERSION=3.16.0-8-amd64 -KERNEL_DIR = /usr/src/linux-headers-$(KVERSION)/ -KERNELDIR:=$(KERNEL_DIR) +$(error KERNEL_SRC is not defined) else KERNELDIR:=$(KERNEL_SRC) endif diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/modules/x86-64-accton-as4630-54pe-cpld.c b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/modules/x86-64-accton-as4630-54pe-cpld.c old mode 100755 new mode 100644 index 3a3c594f9fa8..0e9fc11aca81 --- a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/modules/x86-64-accton-as4630-54pe-cpld.c +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/modules/x86-64-accton-as4630-54pe-cpld.c @@ -598,7 +598,6 @@ static u8 is_fan_fault(struct as4630_54pe_cpld_data *data, enum fan_id id) return ret; } - static ssize_t fan_show_value(struct device *dev, struct device_attribute *da, char *buf) { diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/modules/x86-64-accton-as4630-54pe-leds.c b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/modules/x86-64-accton-as4630-54pe-leds.c old mode 100755 new mode 100644 index 34c22fd82aa1..e758dd5cc47b --- a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/modules/x86-64-accton-as4630-54pe-leds.c +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/modules/x86-64-accton-as4630-54pe-leds.c @@ -64,7 +64,7 @@ static struct accton_as4630_54pe_led_data *ledctl = NULL; #define LED_TYPE_POE_REG_MASK (0x2|0x1) #define LED_MODE_POE_GREEN_VALUE 0x1 #define LED_MODE_POE_AMBER_VALUE 0x2 -#define LED_MODE_POE_OFF_VALUE 0x0 +#define LED_MODE_POE_OFF_VALUE 0x3 #define LED_TYPE_STK1_REG_MASK 0x20 #define LED_MODE_STK1_GREEN_VALUE 0x0 @@ -74,20 +74,20 @@ static struct accton_as4630_54pe_led_data *ledctl = NULL; #define LED_MODE_STK2_GREEN_VALUE 0x0 #define LED_MODE_STK2_OFF_VALUE 0x10 -#define LED_TYPE_FAN_REG_MASK (0x20|0x10) -#define LED_MODE_FAN_AMBER_VALUE 0x20 -#define LED_MODE_FAN_GREEN_VALUE 0x10 -#define LED_MODE_FAN_OFF_VALUE (0x0) +#define LED_TYPE_FAN_REG_MASK (0x8|0x4) +#define LED_MODE_FAN_AMBER_VALUE 0x8 +#define LED_MODE_FAN_GREEN_VALUE 0x4 +#define LED_MODE_FAN_OFF_VALUE (0xC) -#define LED_TYPE_PSU2_REG_MASK (0x8|0x4) -#define LED_MODE_PSU2_AMBER_VALUE 0x8 -#define LED_MODE_PSU2_GREEN_VALUE 0x4 -#define LED_MODE_PSU2_OFF_VALUE (0x0) +#define LED_TYPE_PSU2_REG_MASK (0x80|0x40) +#define LED_MODE_PSU2_AMBER_VALUE 0x80 +#define LED_MODE_PSU2_GREEN_VALUE 0x40 +#define LED_MODE_PSU2_OFF_VALUE (0xC0) #define LED_TYPE_PSU1_REG_MASK (0x2|0x1) #define LED_MODE_PSU1_AMBER_VALUE 0x2 #define LED_MODE_PSU1_GREEN_VALUE 0x1 -#define LED_MODE_PSU1_OFF_VALUE (0x0) +#define LED_MODE_PSU1_OFF_VALUE (0x3) enum led_type { LED_TYPE_DIAG, @@ -106,8 +106,8 @@ struct led_reg { }; static const struct led_reg led_reg_map[] = { - {(1<reg_val[0]); + return led_reg_val_to_light_mode(LED_TYPE_FAN, ledctl->reg_val[1]); } static void accton_as4630_54pe_led_psu1_set(struct led_classdev *led_cdev, @@ -395,7 +395,7 @@ static void accton_as4630_54pe_led_psu2_set(struct led_classdev *led_cdev, static enum led_brightness accton_as4630_54pe_led_psu2_get(struct led_classdev *cdev) { accton_as4630_54pe_led_update(); - return led_reg_val_to_light_mode(LED_TYPE_PSU2, ledctl->reg_val[0]); + return led_reg_val_to_light_mode(LED_TYPE_PSU2, ledctl->reg_val[1]); } static struct led_classdev accton_as4630_54pe_leds[] = { @@ -405,7 +405,7 @@ static struct led_classdev accton_as4630_54pe_leds[] = { .brightness_set = accton_as4630_54pe_led_diag_set, .brightness_get = accton_as4630_54pe_led_diag_get, .flags = LED_CORE_SUSPENDRESUME, - .max_brightness = LED_MODE_GREEN, + .max_brightness = LED_MODE_GREEN_BLINK, }, [LED_TYPE_PRI] = { .name = "pri", diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/modules/x86-64-accton-as4630-54pe-psu.c b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/modules/x86-64-accton-as4630-54pe-psu.c old mode 100755 new mode 100644 diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/service/as4630-54pe-platform-handle-mgmt-interface.service b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/service/as4630-54pe-platform-handle-mgmt-interface.service new file mode 100644 index 000000000000..d978b1fe6845 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/service/as4630-54pe-platform-handle-mgmt-interface.service @@ -0,0 +1,11 @@ +[Unit] +Description=Accton AS4630-54PE Platform handle management interface service +After=sysinit.target + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/local/bin/handle_mgmt_interface.sh + +[Install] +WantedBy=multi-user.target diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/service/pddf-platform-init.service b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/service/pddf-platform-init.service new file mode 120000 index 000000000000..0fd9f25b6c5e --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/service/pddf-platform-init.service @@ -0,0 +1 @@ +../../../../pddf/i2c/service/pddf-platform-init.service \ No newline at end of file diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/__init__.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/__init__.py new file mode 100644 index 000000000000..f0201e717796 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/__init__.py @@ -0,0 +1,3 @@ +# All the derived classes for PDDF +__all__ = ["platform", "chassis", "sfp", "psu", "thermal"] +from . import platform diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/chassis.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/chassis.py new file mode 100644 index 000000000000..1dfca24ab32b --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/chassis.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python + +############################################################################# +# PDDF +# Module contains an implementation of SONiC Chassis API +# +############################################################################# + +try: + import sys + from sonic_platform_pddf_base.pddf_chassis import PddfChassis + from .event import SfpEvent +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +NUM_COMPONENT = 2 + +class Chassis(PddfChassis): + """ + PDDF Platform-specific Chassis class + """ + + SYSLED_DEV_NAME = "SYS_LED" + + def __init__(self, pddf_data=None, pddf_plugin_data=None): + PddfChassis.__init__(self, pddf_data, pddf_plugin_data) + self.__initialize_components() + self._sfpevent = SfpEvent(self.get_all_sfps()) + + def __initialize_components(self): + from sonic_platform.component import Component + for index in range(NUM_COMPONENT): + component = Component(index) + self._component_list.append(component) + + # Provide the functions/variables below for which implementation is to be overwritten + def get_change_event(self, timeout=0): + return self._sfpevent.get_sfp_event(timeout) + + def get_sfp(self, index): + """ + Retrieves sfp represented by (1-based) index + + Args: + index: An integer, the index (1-based) of the sfp to retrieve. + The index should be the sequence of a physical port in a chassis, + starting from 1. + For example, 1 for Ethernet0, 2 for Ethernet4 and so on. + + Returns: + An object derived from SfpBase representing the specified sfp + """ + sfp = None + + try: + # The index will start from 1 + sfp = self._sfp_list[index-1] + except IndexError: + sys.stderr.write("SFP index {} out of range (1-{})\n".format( + index, len(self._sfp_list))) + return sfp + + def initizalize_system_led(self): + return + + def get_status_led(self): + return self.get_system_led(self.SYSLED_DEV_NAME) + + def set_status_led(self, color): + return self.set_system_led(self.SYSLED_DEV_NAME, color) diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/component.py new file mode 100644 index 000000000000..22696341523d --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/component.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python + +############################################################################# +# +# Module contains an implementation of SONiC Platform Base API and +# provides the component information (such as CPLD, FPGA, BIOS etc) which are available in the platform +# +############################################################################# + +try: + import subprocess + from sonic_platform_base.component_base import ComponentBase +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +BIOS_VERSION_PATH = "/sys/class/dmi/id/bios_version" +#COMPONENT_NAME_LIST = ["CPLD1"] +COMPONENT_LIST = [ + ("CPLD1", "CPLD 1"), + ("BIOS", "Basic Input/Output System") +] + +class Component(ComponentBase): + """Platform-specific Component class""" + + + def __init__(self, component_index): + self.index = component_index + self.name = self.get_name() + self.cpld_mapping = { + 0: ['3', '0x60'] + } + + + def get_name(self): + """ + Retrieves the name of the component + Returns: + A string containing the name of the component + """ + return COMPONENT_LIST[self.index][0] + + def get_description(self): + """ + Retrieves the description of the component + Returns: + A string containing the description of the component + """ + return COMPONENT_LIST[self.index][1] + + def __get_bios_version(self): + # Retrieves the BIOS firmware version + try: + with open(BIOS_VERSION_PATH, 'r') as fd: + bios_version = fd.read() + return bios_version.strip() + except Exception as e: + return None + + def get_firmware_version(self): + """ + Retrieves the firmware version of module + Returns: + string: The firmware versions of the module + """ + fw_version = None + if self.name == "BIOS": + fw_version = self.__get_bios_version() + elif "CPLD" in self.name: + cmd = "i2cget -f -y {0} {1} 0x1".format(self.cpld_mapping[self.index][0], self.cpld_mapping[self.index][1]) + status, value = subprocess.getstatusoutput(cmd) + if not status: + fw_version = value.rstrip() + + return fw_version + + def install_firmware(self, image_path): + """ + Install firmware to module + Args: + image_path: A string, path to firmware image + Returns: + A boolean, True if install successfully, False if not + """ + raise NotImplementedError diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/eeprom.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/eeprom.py new file mode 100644 index 000000000000..a87ecc9f6feb --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/eeprom.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +try: + from sonic_platform_pddf_base.pddf_eeprom import PddfEeprom +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class Eeprom(PddfEeprom): + + def __init__(self, pddf_data=None, pddf_plugin_data=None): + PddfEeprom.__init__(self, pddf_data, pddf_plugin_data) + + # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/event.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/event.py new file mode 100644 index 000000000000..d5dac6d7f7e0 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/event.py @@ -0,0 +1,60 @@ +try: + import time + from sonic_py_common.logger import Logger +except ImportError as e: + raise ImportError(repr(e) + " - required module not found") + +POLL_INTERVAL_IN_SEC = 1 + +class SfpEvent: + ''' Listen to insert/remove sfp events ''' + + def __init__(self, sfp_list): + self._sfp_list = sfp_list + self._logger = Logger() + self._sfp_change_event_data = {'present': 0} + + def get_presence_bitmap(self): + bitmap = 0 + for sfp in self._sfp_list: + modpres = sfp.get_presence() + i=sfp.get_position_in_parent() - 1 + if modpres: + bitmap = bitmap | (1 << i) + return bitmap + + def get_sfp_event(self, timeout=2000): + port_dict = {} + change_dict = {} + change_dict['sfp'] = port_dict + + if timeout < 1000: + cd_ms = 1000 + else: + cd_ms = timeout + + while cd_ms > 0: + bitmap = self.get_presence_bitmap() + changed_ports = self._sfp_change_event_data['present'] ^ bitmap + if changed_ports != 0: + break + time.sleep(POLL_INTERVAL_IN_SEC) + # timeout=0 means wait for event forever + if timeout != 0: + cd_ms = cd_ms - POLL_INTERVAL_IN_SEC * 1000 + + if changed_ports != 0: + for sfp in self._sfp_list: + i=sfp.get_position_in_parent() - 1 + if (changed_ports & (1 << i)): + if (bitmap & (1 << i)) == 0: + port_dict[i+1] = '0' + else: + port_dict[i+1] = '1' + + + # Update the cache dict + self._sfp_change_event_data['present'] = bitmap + return True, change_dict + else: + return True, change_dict diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/fan.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/fan.py new file mode 100644 index 000000000000..ef8deaffb6fa --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/fan.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python + + +try: + from sonic_platform_pddf_base.pddf_fan import PddfFan +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class Fan(PddfFan): + """PDDF Platform-Specific Fan class""" + + def __init__(self, tray_idx, fan_idx=0, pddf_data=None, pddf_plugin_data=None, is_psu_fan=False, psu_index=0): + # idx is 0-based + PddfFan.__init__(self, tray_idx, fan_idx, pddf_data, pddf_plugin_data, is_psu_fan, psu_index) + + # Provide the functions/variables below for which implementation is to be overwritten + # Since AS4630 psu_fan airflow direction cant be read from sysfs, it is fixed as 'F2B' or 'Exhaust' + def get_direction(self): + """ + Retrieves the direction of fan + + Returns: + A string, either FAN_DIRECTION_INTAKE or FAN_DIRECTION_EXHAUST + depending on fan direction + """ + if self.is_psu_fan: + direction = self.FAN_DIRECTION_EXHAUST + + else: + idx = (self.fantray_index-1)*self.platform['num_fans_pertray'] + self.fan_index + attr = "fan" + str(idx) + "_direction" + output = self.pddf_obj.get_attr_name_output("FAN-CTRL", attr) + if not output: + return False + + mode = output['mode'] + val = output['status'] + + val = val.rstrip() + vmap = self.plugin_data['FAN']['direction'][mode]['valmap'] + if val in vmap: + direction = vmap[val] + else: + direction = val + + return direction + diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/fan_drawer.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/fan_drawer.py new file mode 100644 index 000000000000..3b9bb607f632 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/fan_drawer.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + + +try: + from sonic_platform_pddf_base.pddf_fan_drawer import PddfFanDrawer +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class FanDrawer(PddfFanDrawer): + """PDDF Platform-Specific Fan-Drawer class""" + + def __init__(self, tray_idx, pddf_data=None, pddf_plugin_data=None): + # idx is 0-based + PddfFanDrawer.__init__(self, tray_idx, pddf_data, pddf_plugin_data) + + # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/platform.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/platform.py new file mode 100644 index 000000000000..406b1179ae1b --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/platform.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +############################################################################# +# PDDF +# Module contains an implementation of SONiC Platform Base API and +# provides the platform information +# +############################################################################# + + +try: + from sonic_platform_pddf_base.pddf_platform import PddfPlatform +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class Platform(PddfPlatform): + """ + PDDF Platform-Specific Platform Class + """ + + def __init__(self): + PddfPlatform.__init__(self) + + # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/psu.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/psu.py new file mode 100644 index 000000000000..f002f5e0394a --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/psu.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python +# + + +try: + from sonic_platform_pddf_base.pddf_psu import PddfPsu +except ImportError as e: + raise ImportError (str(e) + "- required module not found") + + +class Psu(PddfPsu): + """PDDF Platform-Specific PSU class""" + + PLATFORM_PSU_CAPACITY = 1200 + + def __init__(self, index, pddf_data=None, pddf_plugin_data=None): + PddfPsu.__init__(self, index, pddf_data, pddf_plugin_data) + + # Provide the functions/variables below for which implementation is to be overwritten + def get_capacity(self): + """ + Gets the capacity (maximum output power) of the PSU in watts + + Returns: + An integer, the capacity of PSU + """ + return (self.PLATFORM_PSU_CAPACITY) + + def get_type(self): + """ + Gets the type of the PSU + + Returns: + A string, the type of PSU (AC/DC) + """ + ptype = "AC" + # Currently the platform supports only AC type of PSUs + #try: + #import sonic_platform.platform + #ch=sonic_platform.platform.Platform().get_chassis() + #e=ch.sys_eeprom.read_eeprom() + #ret, prod_name = ch.sys_eeprom.get_tlv_field(e,0x21) + #if ret: + #prod_name = prod_name[2] + ##print("Product name is {}".format(prod_name)) + #if '48V' in prod_name: + #ptype = 'DC' + #except Exception as e: + #print("Error while trying to read syseeprom to get PSU type") + + return ptype diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/sfp.py new file mode 100644 index 000000000000..c9fb07d6364f --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/sfp.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python + +try: + from sonic_platform_pddf_base.pddf_sfp import PddfSfp +except ImportError as e: + raise ImportError (str(e) + "- required module not found") + + +class Sfp(PddfSfp): + """ + PDDF Platform-Specific Sfp class + """ + + def __init__(self, index, pddf_data=None, pddf_plugin_data=None): + PddfSfp.__init__(self, index, pddf_data, pddf_plugin_data) + + # Provide the functions/variables below for which implementation is to be overwritten + def get_position_in_parent(self): + """Retrieves 1-based relative physical position in parent device.""" + return self.port_index diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/thermal.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/thermal.py new file mode 100644 index 000000000000..77d6ec7ae886 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/thermal.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + + +try: + from sonic_platform_pddf_base.pddf_thermal import PddfThermal +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + + +class Thermal(PddfThermal): + """PDDF Platform-Specific Thermal class""" + + def __init__(self, index, pddf_data=None, pddf_plugin_data=None, is_psu_thermal=False, psu_index=0): + PddfThermal.__init__(self, index, pddf_data, pddf_plugin_data, is_psu_thermal, psu_index) + + # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/watchdog.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/watchdog.py new file mode 100644 index 000000000000..fe8554f6ec73 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform/watchdog.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +############################################################################# +# +# Module contains an implementation of platform specific watchdog API's +# +############################################################################# + +try: + from sonic_platform_pddf_base.pddf_watchdog import PddfWatchdog +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class Watchdog(PddfWatchdog): + """ + PDDF Platform-specific Chassis class + """ + + def __init__(self): + PddfWatchdog.__init__(self) + self.timeout = 180 + + # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform_setup.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform_setup.py new file mode 100644 index 000000000000..59dad237f3b4 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/sonic_platform_setup.py @@ -0,0 +1,25 @@ +from setuptools import setup + +setup( + name='sonic-platform', + version='1.0', + description='SONiC platform API implementation on Accton Platforms using PDDF', + license='Apache 2.0', + author='SONiC Team', + author_email='linuxnetdev@microsoft.com', + url='https://github.com/Azure/sonic-buildimage', + packages=['sonic_platform'], + classifiers=[ + 'Development Status :: 3 - Alpha', + 'Environment :: Plugins', + 'Intended Audience :: Developers', + 'Intended Audience :: Information Technology', + 'Intended Audience :: System Administrators', + 'License :: OSI Approved :: Apache Software License', + 'Natural Language :: English', + 'Operating System :: POSIX :: Linux', + 'Programming Language :: Python :: 3.7', + 'Topic :: Utilities', + ], + keywords='sonic SONiC platform PLATFORM', +) diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/accton_as4630_54pe_pddf_monitor.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/accton_as4630_54pe_pddf_monitor.py new file mode 100755 index 000000000000..d9299b96a3b2 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/accton_as4630_54pe_pddf_monitor.py @@ -0,0 +1,332 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -* +# Copyright (c) 2019 Edgecore Networks Corporation +# +# 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 +# +# THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR +# CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT +# LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS +# FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. +# +# See the Apache Version 2.0 License for specific language governing +# permissions and limitations under the License. +# +# HISTORY: +# mm/dd/yyyy (A.D.)# +# 10/24/2019:Jostar create for as4630_54pe thermal plan +# ------------------------------------------------------------------ + +try: + import os + import sys + import getopt + import subprocess + import logging + import logging.handlers + import time + from sonic_platform import platform +except ImportError as e: + raise ImportError('%s - required module not found' % str(e)) + +# Deafults +VERSION = '1.0' +FUNCTION_NAME = '/usr/local/bin/accton_as4630_54pe_pddf_monitor' + + + + + +# Temperature Policy +# If any fan fail , please set fan speed register to 16 +# The max value of fan speed register is 14 +# LM77(48)+LM75(4B)+LM75(4A) > 140, Set 10 +# LM77(48)+LM75(4B)+LM75(4A) > 150, Set 12 +# LM77(48)+LM75(4B)+LM75(4A) > 160, Set 14 +# LM77(48)+LM75(4B)+LM75(4A) < 140, Set 8 +# LM77(48)+LM75(4B)+LM75(4A) < 150, Set 10 +# LM77(48)+LM75(4B)+LM75(4A) < 160, Set 12 +# Reset DUT:LM77(48)>=70C +# +class switch(object): + def __init__(self, value): + self.value = value + self.fall = False + + def __iter__(self): + """Return the match method once, then stop""" + yield self.match + raise StopIteration + + def match(self, *args): + """Indicate whether or not to enter a case suite""" + if self.fall or not args: + return True + elif self.value in args: # changed for v1.5, see below + self.fall = True + return True + else: + return False + + +def as4630_54pe_set_fan_speed(pwm): + # This platform has 2 fans controlled by one register on CPLD and 3rd fan by another register + # Hence, we need to change the speed for all + if pwm < 0 or pwm > 100: + print("Error: Wrong duty cycle value %d" % (pwm)) + platform_chassis.get_fan(0).set_speed(pwm) + platform_chassis.get_fan(2).set_speed(pwm) + + return 0 + + +fan_policy_state = 0 +fan_fail = 0 +fan_fail_list = [0, 0, 0] +alarm_state = 0 # 0->default or clear, 1-->alarm detect +test_temp = 0 +simulate_temp_decline = 0 +test_temp_list = [0, 0, 0] +temp_test_data = 0 +test_temp_revert = 0 +platform_chassis = None +# Make a class we can use to capture stdout and sterr in the log + + +class device_monitor(object): + # static temp var + temp = 0 + new_pwm = 0 + pwm = 0 + ori_pwm = 0 + default_pwm = 0x4 + + def __init__(self, log_file, log_level): + """Needs a logger and a logger level.""" + # set up logging to file + logging.basicConfig( + filename=log_file, + filemode='w', + level=log_level, + format='[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s', + datefmt='%H:%M:%S' + ) + # set up logging to console + if log_level == logging.DEBUG: + console = logging.StreamHandler() + console.setLevel(log_level) + formatter = logging.Formatter('%(asctime)-15s %(name)-12s: %(levelname)-8s %(message)s') + console.setFormatter(formatter) + logging.getLogger('').addHandler(console) + + sys_handler = logging.handlers.SysLogHandler(address='/dev/log') + sys_handler.setLevel(logging.WARNING) + logging.getLogger('').addHandler(sys_handler) + + def get_state_from_fan_policy(self, temp, policy): + state = 0 + for i in range(0, len(policy)): + if (temp > policy[i][2]): # temp_down + if temp <= policy[i][3]: # temp_up + state = i + + return state + + def manage_fans(self): + global fan_policy_state + global fan_fail + global fan_fail_list + global test_temp + global simulate_temp_decline + global test_temp_list + global alarm_state + global temp_test_data + global test_temp_revert + global platform_chassis + NUM_FANS = 3 + LEVEL_FAN_MIN = 0 + LEVEL_FAN_NORMAL = 1 + LEVEL_FAN_MID = 2 + LEVEL_FAN_HIGH = 3 + LEVEL_TEMP_CRITICAL = 4 + fan_policy = { + LEVEL_FAN_MIN: [50, 8, 0, 140000], + LEVEL_FAN_NORMAL: [62, 10, 140000, 150000], + LEVEL_FAN_MID: [75, 12, 150000, 160000], + LEVEL_FAN_HIGH: [88, 14, 160000, 240000], + LEVEL_TEMP_CRITICAL: [100, 16, 240000, 300000], + } + temp = [0, 0, 0] + + #thermal = ThermalUtil() + #fan = FanUtil() + # Supposedly all the fans are set with same duty cycle + ori_duty_cycle = platform_chassis.get_fan(0).get_speed() + new_duty_cycle = 0 + + if test_temp == 0: + for i in range(0, 3): + temp[i] = platform_chassis.get_thermal(i).get_temperature() + if temp[i] == 0.0 or temp[i] is None: + + logging.warning("Get temp-%d fail", i) + return False + temp[i] = int(temp[i]*1000) + else: + if test_temp_revert == 0: + temp_test_data = temp_test_data+2000 + else: + if temp_test_data > 0: + temp_test_data = temp_test_data-2000 + else: + # Stop the simulation + sys.exit('Simulation Ends !') + + for i in range(0, 3): + temp[i] = test_temp_list[i]+temp_test_data + fan_fail = 0 + + temp_val = 0 + for i in range(0, 3): + if temp[i] is None: + break + temp_val += temp[i] + + # Check Fan status + for i in range(NUM_FANS): + if not platform_chassis.get_fan(i).get_status(): + if test_temp == 0: + fan_fail = 1 + if fan_fail_list[i] == 0: + fan_fail_list[i] = 1 + else: + if fan_fail_list[i] == 1: + fan_fail_list[i] = 0 + + if sum(fan_fail_list) == NUM_FANS: + # Critical: Either all the fans are faulty or they are removed, shutdown the system + logging.critical('Alarm for all fan faulty/absent is detected') + logging.critical("Alarm for all fan faulty/absent is detected, reset DUT") + cmd_str = "i2cset -y -f 3 0x60 0x4 0xE4" + time.sleep(2) + subprocess.getstatusoutput('sync; sync; sync') + subprocess.getstatusoutput(cmd_str) + elif sum(fan_fail_list) != 0: + # Set the 100% speed only for first fan failure detection + logging.warning('Fan_{} failed, set remaining fan speed to 100%'.format( + ' Fan_'.join(str(item+1) for item, val in enumerate(fan_fail_list) if val == 1))) + new_pwm = 100 + as4630_54pe_set_fan_speed(new_pwm) + else: + fan_fail = 0 + + ori_state = fan_policy_state + fan_policy_state = self.get_state_from_fan_policy(temp_val, fan_policy) + + if fan_policy_state > LEVEL_TEMP_CRITICAL or fan_policy_state < LEVEL_FAN_MIN: + logging.error("Get error fan current_state\n") + return 0 + + # Decision : Decide new fan pwm percent. + if fan_fail == 0 and ori_duty_cycle != fan_policy[fan_policy_state][0]: + new_duty_cycle = fan_policy[fan_policy_state][0] + as4630_54pe_set_fan_speed(new_duty_cycle) + if test_temp == 1: + time.sleep(3) + status, output = subprocess.getstatusoutput('pddf_fanutil getspeed') + logging.debug('\n%s\n', output) + + if temp[0] >= 70000: # LM77-48 + # critical case*/ + logging.critical('Alarm for temperature critical is detected') + logging.critical("Alarm-Critical for temperature critical is detected, reset DUT") + # Update the reboot cause file to reflect that critical temperature + # has been crossed. Upon next boot, the contents of this file will + # be used to determine the cause of the previous reboot + status, output = subprocess.getstatusoutput( + 'echo "Thermal Overload: Other" > /host/reboot-cause/reboot-cause.txt') + status, output = subprocess.getstatusoutput( + 'echo "System rebooted because alarm for critical temperature (70 C) is detected [Time: $(eval date)]" >> /host/reboot-cause/reboot-cause.txt') + if status: + logging.warning('Reboot cause file not updated. {}'.format(output)) + + cmd_str = "i2cset -y -f 3 0x60 0x4 0xE4" + subprocess.getstatusoutput('sync; sync; sync') + time.sleep(3) + subprocess.getstatusoutput(cmd_str) + + logging.debug('ori_state=%d, current_state=%d, temp_val=%d\n\n', ori_state, fan_policy_state, temp_val) + + if ori_state < LEVEL_FAN_HIGH: + if fan_policy_state >= LEVEL_FAN_HIGH: + if alarm_state == 0: + logging.warning('Alarm for temperature high is detected') + alarm_state = 1 + # Add a mechanism to decrease the test_temp values + if simulate_temp_decline == 1: + logging.info('Temperature decline simulation is ON. Testing temperature will decrease now') + test_temp_revert = 1 + + if fan_policy_state < LEVEL_FAN_MID: + if alarm_state == 1: + logging.warning('Alarm for temperature high is cleared') + alarm_state = 0 + + return True + + +def main(argv): + # Check if PDDF mode is enabled + if not os.path.exists('/usr/share/sonic/platform/pddf_support'): + print("PDDF mode is not enabled") + return 0 + + log_file = '%s.log' % FUNCTION_NAME + log_level = logging.INFO + global test_temp + global simulate_temp_decline + if len(sys.argv) != 1: + try: + opts, args = getopt.getopt(argv, 'hdlt:', ['lfile=']) + except getopt.GetoptError: + print('Usage: %s [-d] [-l ]' % sys.argv[0]) + return 0 + for opt, arg in opts: + if opt == '-h': + print('Usage: %s [-d] [-l ]' % sys.argv[0]) + return 0 + elif opt in ('-d', '--debug'): + log_level = logging.DEBUG + elif opt in ('-l', '--lfile'): + log_file = arg + + if sys.argv[1] == '-t': + if len(sys.argv) != 6: + print("temp test, need input temp decline option and three temp values") + return 0 + + i = 0 + simulate_temp_decline = int(sys.argv[2]) + for x in range(3, 6): + test_temp_list[i] = int(sys.argv[x])*1000 + i = i+1 + test_temp = 1 + log_level = logging.DEBUG + print(test_temp_list) + + global platform_chassis + platform_chassis = platform.Platform().get_chassis() + + as4630_54pe_set_fan_speed(50) + + monitor = device_monitor(log_file, log_level) + # Loop forever, doing something useful hopefully: + while True: + monitor.manage_fans() + time.sleep(10) # 10sec + + +if __name__ == '__main__': + main(sys.argv[1:]) diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/accton_as4630_54pe_util.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/accton_as4630_54pe_util.py index f0081b33b2c3..b954da8726d2 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/accton_as4630_54pe_util.py +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/accton_as4630_54pe_util.py @@ -30,6 +30,7 @@ import sys import logging import time +import os PROJECT_NAME = 'as4630_54pe' version = '0.0.1' @@ -88,8 +89,8 @@ if DEBUG == True: - print((sys.argv[0])) - print(('ARGV :', sys.argv[1:])) + print(sys.argv[0]) + print('ARGV :', sys.argv[1:]) def main(): @@ -107,7 +108,7 @@ def main(): if DEBUG == True: print(options) print(args) - print((len(sys.argv))) + print(len(sys.argv)) for opt, arg in options: if opt in ('-h', '--help'): @@ -118,13 +119,16 @@ def main(): elif opt in ('-f', '--force'): FORCE = 1 else: - print("TEST") logging.info('no option') for arg in args: if arg == 'install': do_install() elif arg == 'clean': do_uninstall() + elif arg == 'api': + do_sonic_platform_install() + elif arg == 'api_clean': + do_sonic_platform_clean() else: show_help() @@ -132,12 +136,12 @@ def main(): return 0 def show_help(): - print(( __doc__ % {'scriptName' : sys.argv[0].split("/")[-1]})) + print( __doc__ % {'scriptName' : sys.argv[0].split("/")[-1]}) sys.exit(0) def my_log(txt): if DEBUG == True: - print(("[ACCTON DBG]: ",txt)) + print("[ACCTON DBG]: ",txt) return def log_os_system(cmd, show): @@ -151,7 +155,7 @@ def log_os_system(cmd, show): if status: logging.info('Failed :'+cmd) if show: - print(('Failed :'+cmd)) + print('Failed :'+cmd) return status, output def driver_inserted(): @@ -167,6 +171,8 @@ def driver_inserted(): kos = [ 'depmod -ae', 'modprobe i2c_dev', +'modprobe i2c_i801', +'modprobe i2c_ismt', 'modprobe i2c_mux_pca954x force_deselect_on_exit=1', 'modprobe ym2651y', 'modprobe x86_64_accton_as4630_54pe_cpld', @@ -176,17 +182,7 @@ def driver_inserted(): def driver_install(): global FORCE - - ret=log_os_system("lsmod|grep i2c_ismt",1) - my_log("rmmond i2cismt") - log_os_system("rmmod i2c_ismt", 1) - log_os_system("rmmod i2c_i801", 1) - log_os_system("modprobe i2c-i801", 1) - time.sleep(1) - log_os_system("modprobe i2c-ismt", 1) - - - + for i in range(0,len(kos)): status, output = log_os_system(kos[i], 1) if status: @@ -226,6 +222,13 @@ def device_install(): if FORCE == 0: return status + # set all pca954x idle_disconnect + cmd = 'echo -2 | tee /sys/bus/i2c/drivers/pca954x/*-00*/idle_state' + status, output = log_os_system(cmd, 1) + if status: + print(output) + if FORCE == 0: + return status for i in range(0,len(sfp_map)): if(i < 4): opt='optoe2' @@ -287,6 +290,44 @@ def system_ready(): return False return True +PLATFORM_ROOT_PATH = '/usr/share/sonic/device' +PLATFORM_API2_WHL_FILE_PY3 ='sonic_platform-1.0-py3-none-any.whl' +def do_sonic_platform_install(): + device_path = "{}{}{}{}".format(PLATFORM_ROOT_PATH, '/x86_64-accton_', PROJECT_NAME, '-r0') + SONIC_PLATFORM_BSP_WHL_PKG_PY3 = "/".join([device_path, PLATFORM_API2_WHL_FILE_PY3]) + + #Check API2.0 on py whl file + status, output = log_os_system("pip3 show sonic-platform > /dev/null 2>&1", 0) + if status: + if os.path.exists(SONIC_PLATFORM_BSP_WHL_PKG_PY3): + status, output = log_os_system("pip3 install "+ SONIC_PLATFORM_BSP_WHL_PKG_PY3, 1) + if status: + print ("Error: Failed to install {}".format(PLATFORM_API2_WHL_FILE_PY3)) + return status + else: + print("Successfully installed {} package".format(PLATFORM_API2_WHL_FILE_PY3)) + else: + print('{} is not found'.format(PLATFORM_API2_WHL_FILE_PY3)) + else: + print('{} has installed'.format(PLATFORM_API2_WHL_FILE_PY3)) + + return + +def do_sonic_platform_clean(): + status, output = log_os_system("pip3 show sonic-platform > /dev/null 2>&1", 0) + if status: + print('{} does not install, not need to uninstall'.format(PLATFORM_API2_WHL_FILE_PY2)) + + else: + status, output = log_os_system("pip3 uninstall sonic-platform -y", 0) + if status: + print('Error: Failed to uninstall {}'.format(PLATFORM_API2_WHL_FILE_PY3)) + return status + else: + print('{} is uninstalled'.format(PLATFORM_API2_WHL_FILE_PY3)) + + return + def do_install(): if driver_inserted() == False: status = driver_install() @@ -294,25 +335,28 @@ def do_install(): if FORCE == 0: return status else: - print((PROJECT_NAME.upper()+" drivers detected....")) + print(PROJECT_NAME.upper()+" drivers detected....") if not device_exist(): status = device_install() if status: if FORCE == 0: return status else: - print((PROJECT_NAME.upper()+" devices detected....")) + print(PROJECT_NAME.upper()+" devices detected....") for i in range(len(cpld_set)): status, output = log_os_system(cpld_set[i], 1) if status: if FORCE == 0: return status + + do_sonic_platform_install() + return def do_uninstall(): if not device_exist(): - print((PROJECT_NAME.upper()+" has no device installed....")) + print(PROJECT_NAME.upper()+" has no device installed....") else: print("Removing device....") status = device_uninstall() @@ -321,7 +365,7 @@ def do_uninstall(): return status if driver_inserted()== False : - print((PROJECT_NAME.upper()+" has no driver installed....")) + print(PROJECT_NAME.upper()+" has no driver installed....") else: print("Removing installed driver....") status = driver_uninstall() @@ -329,6 +373,8 @@ def do_uninstall(): if FORCE == 0: return status + do_sonic_platform_clean() + return def device_exist(): diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/handle_mgmt_interface.sh b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/handle_mgmt_interface.sh new file mode 100755 index 000000000000..e1acd16a0161 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/handle_mgmt_interface.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +#Due to the hardware design, as4630-54pe use "eth2" instead of "eth0" as management interface. +#Rename netdev "eth0" and "eth2" to swap original "eth2" to "eth0". + +ifconfig eth0 down +ip link set eth0 name eth3 +ip link set eth2 name eth0 +ifconfig eth0 up diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/pddf_post_device_create.sh b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/pddf_post_device_create.sh new file mode 100755 index 000000000000..d820352ac7e0 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/pddf_post_device_create.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +echo "Setting LED MAC Mode.." +i2cset -y -f 3 0x60 0x2a 0xff +i2cset -y -f 3 0x60 0x2b 0xff +i2cset -y -f 3 0x60 0x86 0x89 +echo "Setting LED MAC Mode..DONE" +# Turn off STK1 and STK2 LED. Bit5:4 to 0x11 +#i2cset -y -f 3 0x60 0xb5 +stk_val=$(i2cget -y -f 3 0x60 0x31) +new_val=$((${stk_val}|0x30)) +i2cset -y -f 3 0x60 0x31 ${new_val} +echo "STK LEDs are turned off successfully" + diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/pddf_switch_svc.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/pddf_switch_svc.py new file mode 100755 index 000000000000..5a505e19f19b --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/pddf_switch_svc.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python +# Script to stop and start the respective platforms default services. +# This will be used while switching the pddf->non-pddf mode and vice versa + +import commands + +def check_pddf_support(): + return True + +def stop_platform_svc(): + status, output = commands.getstatusoutput("systemctl disable as4630-54pe-platform-monitor-fan.service") + if status: + print "Disable as4630-54pe-platform-monitor-fan.service failed %d"%status + return False + status, output = commands.getstatusoutput("systemctl stop as4630-54pe-platform-monitor-fan.service") + if status: + print "Stop as4630-54pe-platform-monitor-fan.service failed %d"%status + return False + + status, output = commands.getstatusoutput("systemctl disable as4630-54pe-platform-monitor-psu.service") + if status: + print "Disable as4630-54pe-platform-monitor-psu.service failed %d"%status + return False + status, output = commands.getstatusoutput("systemctl stop as4630-54pe-platform-monitor-psu.service") + if status: + print "Stop as4630-54pe-platform-monitor-psu.service failed %d"%status + return False + + status, output = commands.getstatusoutput("systemctl disable as4630-54pe-platform-monitor.service") + if status: + print "Disable as4630-54pe-platform-monitor.service failed %d"%status + return False + status, output = commands.getstatusoutput("systemctl stop as4630-54pe-platform-monitor.service") + if status: + print "Stop as4630-54pe-platform-monitor.service failed %d"%status + return False + + status, output = commands.getstatusoutput("/usr/local/bin/accton_as4630_54pe_util.py clean") + if status: + print "accton_as4630_54pe_util.py clean command failed %d"%status + return False + + # HACK , stop the pddf-platform-init service if it is active + status, output = commands.getstatusoutput("systemctl stop pddf-platform-init.service") + if status: + print "Stop pddf-platform-init.service along with other platform serives failed %d"%status + return False + status, output = commands.getstatusoutput("systemctl stop as4630-54pe-pddf-platform-monitor.service") + if status: + print "Stop as4630-54pe-pddf-platform-monitor.service along with other platform serives failed %d"%status + return False + + return True + +def start_platform_svc(): + status, output = commands.getstatusoutput("/usr/local/bin/accton_as4630_54pe_util.py install") + if status: + print "accton_as4630_54pe_util.py install command failed %d"%status + return False + + status, output = commands.getstatusoutput("systemctl enable as4630-54pe-platform-monitor-fan.service") + if status: + print "Enable as4630-54pe-platform-monitor-fan.service failed %d"%status + return False + status, output = commands.getstatusoutput("systemctl start as4630-54pe-platform-monitor-fan.service") + if status: + print "Start as4630-54pe-platform-monitor-fan.service failed %d"%status + return False + + status, output = commands.getstatusoutput("systemctl enable as4630-54pe-platform-monitor-psu.service") + if status: + print "Enable as4630-54pe-platform-monitor-psu.service failed %d"%status + return False + status, output = commands.getstatusoutput("systemctl start as4630-54pe-platform-monitor-psu.service") + if status: + print "Start as4630-54pe-platform-monitor-psu.service failed %d"%status + return False + + status, output = commands.getstatusoutput("systemctl enable as4630-54pe-platform-monitor.service") + if status: + print "Enable as4630-54pe-platform-monitor.service failed %d"%status + return False + status, output = commands.getstatusoutput("systemctl start as4630-54pe-platform-monitor.service") + if status: + print "Start as4630-54pe-platform-monitor.service failed %d"%status + return False + + return True + +def start_platform_pddf(): + status, output = commands.getstatusoutput("systemctl start pddf-platform-init.service") + if status: + print "Start pddf-platform-init.service failed %d"%status + return False + status, output = commands.getstatusoutput("systemctl start as4630-54pe-pddf-platform-monitor.service") + if status: + print "Start as4630-54pe-pddf-platform-monitor.service failed %d"%status + return False + + return True + +def stop_platform_pddf(): + status, output = commands.getstatusoutput("systemctl stop pddf-platform-init.service") + if status: + print "Stop pddf-platform-init.service failed %d"%status + return False + status, output = commands.getstatusoutput("systemctl stop as4630-54pe-pddf-platform-monitor.service") + if status: + print "Stop as4630-54pe-pddf-platform-monitor.service failed %d"%status + return False + + return True + +def main(): + pass + +if __name__ == "__main__": + main() diff --git a/platform/broadcom/sonic-platform-modules-accton/as5835-54x/classes/fanutil.py b/platform/broadcom/sonic-platform-modules-accton/as5835-54x/classes/fanutil.py index e60236c9c781..b8b4820f9e4a 100644 --- a/platform/broadcom/sonic-platform-modules-accton/as5835-54x/classes/fanutil.py +++ b/platform/broadcom/sonic-platform-modules-accton/as5835-54x/classes/fanutil.py @@ -104,7 +104,7 @@ def _get_fan_node_val(self, fan_num, node_num): return None try: - val_file.close() + val_file.close() except: logging.debug('GET. unable to close file. device_path:%s', device_path) return None @@ -135,7 +135,7 @@ def _set_fan_node_val(self, fan_num, node_num, val): val_file.write(content) try: - val_file.close() + val_file.close() except: logging.debug('GET. unable to close file. device_path:%s', device_path) return None @@ -224,14 +224,3 @@ def get_fan_status(self, fan_num): return True -#def main(): -# fan = FanUtil() -# -# print 'get_size_node_map : %d' % fan.get_size_node_map() -# print 'get_size_path_map : %d' % fan.get_size_path_map() -# for x in range(fan.get_idx_fan_start(), fan.get_num_fans()+1): -# for y in range(fan.get_idx_node_start(), fan.get_num_nodes()+1): -# print fan.get_fan_to_device_path(x, y) -# -#if __name__ == '__main__': -# main() diff --git a/platform/broadcom/sonic-platform-modules-accton/as5835-54x/classes/thermalutil.py b/platform/broadcom/sonic-platform-modules-accton/as5835-54x/classes/thermalutil.py index ceb9ab464026..4e8ef9adcbe7 100644 --- a/platform/broadcom/sonic-platform-modules-accton/as5835-54x/classes/thermalutil.py +++ b/platform/broadcom/sonic-platform-modules-accton/as5835-54x/classes/thermalutil.py @@ -22,7 +22,6 @@ # ------------------------------------------------------------------ try: - import os import time import logging import glob @@ -34,7 +33,7 @@ class ThermalUtil(object): """Platform-specific ThermalUtil class""" THERMAL_NUM_MAX = 4 - THERMAL_NUM_1_IDX = 1 # 1_ON_CPU_BROAD. LM75 + THERMAL_NUM_1_IDX = 1 # 1_ON_CPU_BROAD. LM75 THERMAL_NUM_2_IDX = 2 # 2_ON_MAIN_BROAD. LM75 THERMAL_NUM_3_IDX = 3 # 3_ON_MAIN_BROAD. LM75 THERMAL_NUM_4_IDX = 4 # 4_ON_MAIN_BROAD. LM75 @@ -42,88 +41,52 @@ class ThermalUtil(object): """ Dictionary where key1 = thermal id index (integer) starting from 1 value = path to fan device file (string) """ - #_thermal_to_device_path_mapping = {} - - _thermal_to_device_node_mapping = { - THERMAL_NUM_1_IDX: ['18', '4b'], - THERMAL_NUM_2_IDX: ['19', '4c'], - THERMAL_NUM_3_IDX: ['20', '49'], - THERMAL_NUM_4_IDX: ['21', '4a'], - } + thermal_sysfspath ={ - THERMAL_NUM_1_IDX: ["/sys/bus/i2c/devices/18-004b/hwmon/hwmon3/temp1_input"], - THERMAL_NUM_2_IDX: ["/sys/bus/i2c/devices/19-004c/hwmon/hwmon4/temp1_input"], - THERMAL_NUM_3_IDX: ["/sys/bus/i2c/devices/20-0049/hwmon/hwmon5/temp1_input"], - THERMAL_NUM_4_IDX: ["/sys/bus/i2c/devices/21-004a/hwmon/hwmon6/temp1_input"], + THERMAL_NUM_1_IDX: ["/sys/bus/i2c/devices/18-004b/hwmon/hwmon*/temp1_input"], + THERMAL_NUM_2_IDX: ["/sys/bus/i2c/devices/19-004c/hwmon/hwmon*/temp1_input"], + THERMAL_NUM_3_IDX: ["/sys/bus/i2c/devices/20-0049/hwmon/hwmon*/temp1_input"], + THERMAL_NUM_4_IDX: ["/sys/bus/i2c/devices/21-004a/hwmon/hwmon*/temp1_input"], } - #def __init__(self): - def _get_thermal_val(self, thermal_num): + def get_thermal_val(self, thermal_num): if thermal_num < self.THERMAL_NUM_1_IDX or thermal_num > self.THERMAL_NUM_MAX: logging.debug('GET. Parameter error. thermal_num, %d', thermal_num) return None - device_path = self.get_thermal_to_device_path(thermal_num) - if(os.path.isfile(device_path)): - for filename in glob.glob(device_path): - try: - val_file = open(filename, 'r') - except IOError as e: - logging.error('GET. unable to open file: %s', str(e)) - return None + device_path = self.get_thermal_path(thermal_num) + for filename in glob.glob(device_path): + try: + val_file = open(filename, 'r') + except IOError as e: + logging.error('GET. unable to open file: %s', str(e)) + return None content = val_file.readline().rstrip() if content == '': logging.debug('GET. content is NULL. device_path:%s', device_path) return None try: - val_file.close() + val_file.close() except: logging.debug('GET. unable to close file. device_path:%s', device_path) return None return int(content) - - else: - print("No such device_path=%s"%device_path) - return 0 + + return 0 def get_num_thermals(self): return self.THERMAL_NUM_MAX - - def get_idx_thermal_start(self): - return self.THERMAL_NUM_1_IDX - - def get_size_node_map(self): - return len(self._thermal_to_device_node_mapping) - - def get_size_path_map(self): - return len(self.thermal_sysfspath) - - def get_thermal_to_device_path(self, thermal_num): + + def get_thermal_path(self, thermal_num): return self.thermal_sysfspath[thermal_num][0] - def get_thermal_1_val(self): - return self._get_thermal_val(self.THERMAL_NUM_1_IDX) - - def get_thermal_2_val(self): - return self._get_thermal_val(self.THERMAL_NUM_2_IDX) - - def get_thermal_3_val(self): - return self._get_thermal_val(self.THERMAL_NUM_3_IDX) - - def get_thermal_temp(self): - return (self._get_thermal_val(self.THERMAL_NUM_1_IDX) + self._get_thermal_val(self.THERMAL_NUM_2_IDX) +self._get_thermal_val(self.THERMAL_NUM_3_IDX)) - def main(): thermal = ThermalUtil() - print("termal1=%d" %thermal._get_thermal_val(1)) - print("termal2=%d" %thermal._get_thermal_val(2)) - print("termal3=%d" %thermal._get_thermal_val(3)) - print("termal4=%d" %thermal._get_thermal_val(4)) -# -# print 'get_size_node_map : %d' % thermal.get_size_node_map() -# print 'get_size_path_map : %d' % thermal.get_size_path_map() -# for x in range(thermal.get_idx_thermal_start(), thermal.get_num_thermals()+1): -# print thermal.get_thermal_to_device_path(x) -# + logging.basicConfig(level=logging.DEBUG) + logging.debug('thermal1=%d', thermal.get_thermal_val(1)) + logging.debug('thermal2=%d', thermal.get_thermal_val(2)) + logging.debug('thermal3=%d', thermal.get_thermal_val(3)) + logging.debug('thermal4=%d', thermal.get_thermal_val(4)) + if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/platform/broadcom/sonic-platform-modules-accton/as5835-54x/utils/accton_as5835_54x_monitor.py b/platform/broadcom/sonic-platform-modules-accton/as5835-54x/utils/accton_as5835_54x_monitor.py index e3b3fe742db9..49a12cd51ece 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as5835-54x/utils/accton_as5835_54x_monitor.py +++ b/platform/broadcom/sonic-platform-modules-accton/as5835-54x/utils/accton_as5835_54x_monitor.py @@ -91,11 +91,11 @@ def manage_fans(self): thermal = ThermalUtil() fan = FanUtil() - temp2 = thermal.get_thermal_2_val() + temp2 = thermal.get_thermal_val(2) if temp2 is None: return False - temp3 = thermal.get_thermal_3_val() + temp3 = thermal.get_thermal_val(3) if temp3 is None: return False diff --git a/platform/broadcom/sonic-platform-modules-accton/as5835-54x/utils/accton_as5835_54x_util.py b/platform/broadcom/sonic-platform-modules-accton/as5835-54x/utils/accton_as5835_54x_util.py index dc26ae1c8192..5292d1ec3b18 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as5835-54x/utils/accton_as5835_54x_util.py +++ b/platform/broadcom/sonic-platform-modules-accton/as5835-54x/utils/accton_as5835_54x_util.py @@ -48,8 +48,8 @@ if DEBUG == True: - print((sys.argv[0])) - print(("ARGV :", sys.argv[1:])) + print(sys.argv[0]) + print("ARGV :", sys.argv[1:]) def main(): @@ -67,7 +67,7 @@ def main(): if DEBUG == True: print(options) print(args) - print((len(sys.argv))) + print(len(sys.argv)) for opt, arg in options: if opt in ('-h', '--help'): @@ -96,13 +96,13 @@ def main(): return 0 def show_help(): - print((__doc__ % {'scriptName' : sys.argv[0].split("/")[-1]})) + print(__doc__ % {'scriptName' : sys.argv[0].split("/")[-1]}) sys.exit(0) def my_log(txt): if DEBUG == True: - print(("[Debug]"+txt)) + print("[Debug]"+txt) return def log_os_system(cmd, show): @@ -113,7 +113,7 @@ def log_os_system(cmd, show): if status: logging.info('Failed :'+cmd) if show: - print(('Failed :'+cmd)) + print('Failed :'+cmd) return status, output def driver_check(): @@ -128,6 +128,8 @@ def driver_check(): kos = [ 'modprobe i2c_dev', +'modprobe i2c_i801', +'modprobe i2c_ismt', 'modprobe i2c_mux_pca954x force_deselect_on_exit=1', 'modprobe accton_as5835_54x_cpld' , 'modprobe ym2651y' , @@ -282,9 +284,21 @@ def device_install(): print(output) if FORCE == 0: return status + + # set all pca954x idle_disconnect + cmd = 'echo -2 | tee /sys/bus/i2c/drivers/pca954x/*-00*/idle_state' + status, output = log_os_system(cmd, 1) + if status: + print(output) + if FORCE == 0: + return status for i in range(49, 55): #Set qsfp port to normal state log_os_system("echo 0 > /sys/bus/i2c/devices/3-0062/module_reset_" + str(i), 1) + for i in range(1, 39): #Set disable tx_disable to sfp port + log_os_system("echo 0 > /sys/bus/i2c/devices/3-0061/module_tx_disable_" + str(i), 1) + for i in range(39, 49): #Set disable tx_disable to sfp port + log_os_system("echo 0 > /sys/bus/i2c/devices/3-0062/module_tx_disable_" + str(i), 1) for i in range(0,len(sfp_map)): if i < qsfp_start: @@ -348,31 +362,29 @@ def do_sonic_platform_install(): if os.path.exists(SONIC_PLATFORM_BSP_WHL_PKG_PY3): status, output = log_os_system("pip3 install "+ SONIC_PLATFORM_BSP_WHL_PKG_PY3, 1) if status: - print(("Error: Failed to install {}".format(PLATFORM_API2_WHL_FILE_PY3) )) + print("Error: Failed to install {}".format(PLATFORM_API2_WHL_FILE_PY3) ) return status else: - print(("Successfully installed {} package".format(PLATFORM_API2_WHL_FILE_PY3) )) + print("Successfully installed {} package".format(PLATFORM_API2_WHL_FILE_PY3) ) else: - print(('{} is not found'.format(PLATFORM_API2_WHL_FILE_PY3))) + print('{} is not found'.format(PLATFORM_API2_WHL_FILE_PY3)) else: - print(('{} has installed'.format(PLATFORM_API2_WHL_FILE_PY3))) + print('{} has installed'.format(PLATFORM_API2_WHL_FILE_PY3)) return def do_sonic_platform_clean(): status, output = log_os_system("pip3 show sonic-platform > /dev/null 2>&1", 0) if status: - print(('{} does not install, not need to uninstall'.format(PLATFORM_API2_WHL_FILE_PY3))) + print('{} does not install, not need to uninstall'.format(PLATFORM_API2_WHL_FILE_PY3)) else: status, output = log_os_system("pip3 uninstall sonic-platform -y", 0) if status: - print(('Error: Failed to uninstall {}'.format(PLATFORM_API2_WHL_FILE_PY3))) + print('Error: Failed to uninstall {}'.format(PLATFORM_API2_WHL_FILE_PY3)) return status else: - print(('{} is uninstalled'.format(PLATFORM_API2_WHL_FILE_PY3))) - - return + print('{} is uninstalled'.format(PLATFORM_API2_WHL_FILE_PY3)) def do_install(): print("Checking system....") @@ -383,7 +395,7 @@ def do_install(): if FORCE == 0: return status else: - print((PROJECT_NAME.upper()+" drivers detected....")) + print(PROJECT_NAME.upper()+" drivers detected....") if not device_exist(): print("No device, installing....") status = device_install() @@ -391,7 +403,7 @@ def do_install(): if FORCE == 0: return status else: - print((PROJECT_NAME.upper()+" devices detected....")) + print(PROJECT_NAME.upper()+" devices detected....") do_sonic_platform_install() @@ -400,7 +412,7 @@ def do_install(): def do_uninstall(): print("Checking system....") if not device_exist(): - print((PROJECT_NAME.upper() +" has no device installed....")) + print(PROJECT_NAME.upper() +" has no device installed....") else: print("Removing device....") status = device_uninstall() @@ -409,7 +421,7 @@ def do_uninstall(): return status if driver_check()== False : - print((PROJECT_NAME.upper() +" has no driver installed....")) + print(PROJECT_NAME.upper() +" has no driver installed....") else: print("Removing installed driver....") status = driver_uninstall() diff --git a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/classes/fanutil.py b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/classes/fanutil.py index affed9ad804d..7c994864318c 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/classes/fanutil.py +++ b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/classes/fanutil.py @@ -112,7 +112,7 @@ def _get_fan_node_val(self, fan_num, node_num): return None try: - val_file.close() + val_file.close() except: logging.debug('GET. unable to close file. device_path:%s', device_path) return None @@ -143,7 +143,7 @@ def _set_fan_node_val(self, fan_num, node_num, val): val_file.write(content) try: - val_file.close() + val_file.close() except: logging.debug('GET. unable to close file. device_path:%s', device_path) return None diff --git a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/modules/Makefile b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/modules/Makefile index 85c066571c2f..6789630def0b 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/modules/Makefile +++ b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/modules/Makefile @@ -1,7 +1,12 @@ ifneq ($(KERNELRELEASE),) obj-m:= accton_i2c_cpld.o \ accton_as7326_56x_fan.o accton_as7326_56x_leds.o \ - accton_as7326_56x_psu.o ym2651y.o + accton_as7326_56x_psu.o ym2651y.o \ + pddf_custom_psu.o + + +CFLAGS_pddf_custom_psu.o := -I$(M)/../../../../pddf/i2c/modules/include +KBUILD_EXTRA_SYMBOLS := $(M)/../../../../pddf/i2c/Module.symvers.PDDF else ifeq (,$(KERNEL_SRC)) diff --git a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/modules/accton_as7326_56x_leds.c b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/modules/accton_as7326_56x_leds.c index 7214ae55d3f9..035f9ad82ec8 100644 --- a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/modules/accton_as7326_56x_leds.c +++ b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/modules/accton_as7326_56x_leds.c @@ -146,7 +146,7 @@ static int accton_getLedReg(enum led_type type, u8 *reg) int i; for (i = 0; i < ARRAY_SIZE(led_reg_map); i++) { - if(led_reg_map[i].types ==type)) { + if (led_reg_map[i].types ==type) { *reg = led_reg_map[i].reg_addr; return 0; } diff --git a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/modules/pddf_custom_psu.c b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/modules/pddf_custom_psu.c new file mode 100644 index 000000000000..18c3edf72a8c --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/modules/pddf_custom_psu.c @@ -0,0 +1,206 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "pddf_psu_defs.h" + +ssize_t pddf_get_custom_psu_model_name(struct device *dev, struct device_attribute *da, char *buf); +ssize_t pddf_get_custom_psu_serial_num(struct device *dev, struct device_attribute *da, char *buf); +extern PSU_SYSFS_ATTR_DATA access_psu_model_name; +extern PSU_SYSFS_ATTR_DATA access_psu_serial_num; + +#define MAX_MODEL_NAME 16 +#define MAX_SERIAL_NUMBER 19 + +enum psu_type { + PSU_TYPE_AC_110V, + PSU_TYPE_DC_48V, + PSU_TYPE_DC_12V, + PSU_TYPE_AC_ACBEL_FSF019, + PSU_TYPE_AC_ACBEL_FSF045 +}; + +struct model_name_info { + enum psu_type type; + u8 offset; + u8 length; + u8 chk_length; + char* model_name; +}; + +struct serial_number_info { + enum psu_type type; + u8 offset; + u8 length; + u8 chk_length; + char* serial_number; +}; + +struct model_name_info models[] = { +{PSU_TYPE_AC_110V, 0x20, 8, 8, "YM-2651Y"}, +{PSU_TYPE_DC_48V, 0x20, 8, 8, "YM-2651V"}, +{PSU_TYPE_DC_12V, 0x00, 11, 11, "PSU-12V-750"}, +{PSU_TYPE_AC_ACBEL_FSF019, 0x15, 10, 7, "FSF019-"}, +{PSU_TYPE_AC_ACBEL_FSF045, 0x15, 10, 7, "FSF045-"} + +}; + +struct serial_number_info serials[] = { +{PSU_TYPE_AC_110V, 0x2e, 18, 18, "YM-2651Y"}, +{PSU_TYPE_DC_48V, 0x2e, 18, 18, "YM-2651V"}, +{PSU_TYPE_DC_12V, 0x2e, 18, 18, "PSU-12V-750"}, +{PSU_TYPE_AC_ACBEL_FSF019, 0x2e, 16, 16, "FSF019-"}, +{PSU_TYPE_AC_ACBEL_FSF019, 0x2e, 16, 16, "FSF045-"} + +}; + +struct pddf_psu_data { + char model_name[MAX_MODEL_NAME+1]; + char serial_number[MAX_SERIAL_NUMBER+1]; +}; + + +static int pddf_psu_read_block(struct i2c_client *client, u8 command, u8 *data, + int data_len) +{ + int result = 0; + int retry_count = 10; + + while (retry_count) { + retry_count--; + + result = i2c_smbus_read_i2c_block_data(client, command, data_len, data); + + if (unlikely(result < 0)) { + msleep(10); + continue; + } + + if (unlikely(result != data_len)) { + result = -EIO; + msleep(10); + continue; + } + + result = 0; + break; + } + + return result; +} + +ssize_t pddf_get_custom_psu_serial_num(struct device *dev, struct device_attribute *da, char *buf) +{ + struct i2c_client *client = to_i2c_client(dev); + struct pddf_psu_data data; + int i, status; + + for (i = 0; i < ARRAY_SIZE(models); i++) { + memset(data.serial_number, 0, sizeof(data.serial_number)); + + status = pddf_psu_read_block(client, models[i].offset, + data.model_name, models[i].length); + if (status < 0) { + data.model_name[0] = '\0'; + dev_dbg(&client->dev, "unable to read model name from (0x%x) offset(0x%x)\n", + client->addr, models[i].offset); + return status; + } + else { + data.model_name[models[i].length] = '\0'; + } + + /* Determine if the model name is known, if not, read next index + */ + if (strncmp(data.model_name, models[i].model_name, models[i].chk_length) == 0) { + status = pddf_psu_read_block(client, serials[i].offset, + data.serial_number, serials[i].length); + + if (status < 0) { + data.serial_number[0] = '\0'; + dev_dbg(&client->dev, "unable to read serial num from (0x%x) offset(0x%x)\n", + client->addr, serials[i].offset); + return status; + } + else { + data.serial_number[serials[i].length] = '\0'; + return sprintf(buf, "%s\n", data.serial_number); + } + + return 0; + } + else { + data.serial_number[0] = '\0'; + } + } + + return -ENODATA; + + +} + +ssize_t pddf_get_custom_psu_model_name(struct device *dev, struct device_attribute *da, char *buf) +{ + struct i2c_client *client = to_i2c_client(dev); + struct pddf_psu_data data; + int i, status; + + for (i = 0; i < ARRAY_SIZE(models); i++) { + memset(data.model_name, 0, sizeof(data.model_name)); + + status = pddf_psu_read_block(client, models[i].offset, + data.model_name, models[i].length); + if (status < 0) { + data.model_name[0] = '\0'; + dev_dbg(&client->dev, "unable to read model name from (0x%x) offset(0x%x)\n", + client->addr, models[i].offset); + return status; + } + else { + data.model_name[models[i].length] = '\0'; + } + + /* Determine if the model name is known, if not, read next index + */ + if (strncmp(data.model_name, models[i].model_name, models[i].chk_length) == 0) { + return sprintf(buf, "%s\n", data.model_name); + } + else { + data.model_name[0] = '\0'; + } + } + + return -ENODATA; + +} + +static int __init pddf_custom_psu_init(void) +{ + access_psu_serial_num.show = pddf_get_custom_psu_serial_num; + access_psu_serial_num.do_get = NULL; + + access_psu_model_name.show = pddf_get_custom_psu_model_name; + access_psu_model_name.do_get = NULL; + + return 0; +} + +static void __exit pddf_custom_psu_exit(void) +{ + return; +} + +MODULE_AUTHOR("Broadcom"); +MODULE_DESCRIPTION("pddf custom psu api"); +MODULE_LICENSE("GPL"); + +module_init(pddf_custom_psu_init); +module_exit(pddf_custom_psu_exit); + diff --git a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/service/as7326-platform-handle_mac.service b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/service/as7326-platform-handle_mac.service index ac196c219b91..3d03ec4f1540 100644 --- a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/service/as7326-platform-handle_mac.service +++ b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/service/as7326-platform-handle_mac.service @@ -1,6 +1,6 @@ [Unit] Description=Accton AS7326-56X Platform MAC handle service -Before=opennsl-modules.service pddf-platform-init.service +Before=opennsl-modules.service After=local-fs.target [Service] diff --git a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/sonic_platform/fan_drawer.py b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/sonic_platform/fan_drawer.py new file mode 100644 index 000000000000..3b9bb607f632 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/sonic_platform/fan_drawer.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + + +try: + from sonic_platform_pddf_base.pddf_fan_drawer import PddfFanDrawer +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class FanDrawer(PddfFanDrawer): + """PDDF Platform-Specific Fan-Drawer class""" + + def __init__(self, tray_idx, pddf_data=None, pddf_plugin_data=None): + # idx is 0-based + PddfFanDrawer.__init__(self, tray_idx, pddf_data, pddf_plugin_data) + + # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/sonic_platform/thermal.py b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/sonic_platform/thermal.py index 5b829fc26caa..77d6ec7ae886 100644 --- a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/sonic_platform/thermal.py +++ b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/sonic_platform/thermal.py @@ -11,7 +11,7 @@ class Thermal(PddfThermal): """PDDF Platform-Specific Thermal class""" - def __init__(self, index, pddf_data=None, pddf_plugin_data=None): - PddfThermal.__init__(self, index, pddf_data, pddf_plugin_data) + def __init__(self, index, pddf_data=None, pddf_plugin_data=None, is_psu_thermal=False, psu_index=0): + PddfThermal.__init__(self, index, pddf_data, pddf_plugin_data, is_psu_thermal, psu_index) # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/accton_as7326_monitor.py b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/accton_as7326_monitor.py index 56f1bd585428..ec3a4c133cdd 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/accton_as7326_monitor.py +++ b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/accton_as7326_monitor.py @@ -166,14 +166,14 @@ def manage_fans(self): thermal = ThermalUtil() fan = FanUtil() - fan_dir=fan.get_fan_dir(1) - if fan_dir > 1: - fan_dri=1 #something wrong, set fan_dir to default val - if fan_dir < 0: - fan_dri=1 #something wrong, set fan_dir to default val + #fan_dir=fan.get_fan_dir(1) + #if fan_dir > 1: + # fan_dri=1 #something wrong, set fan_dir to default val + #if fan_dir < 0: + # fan_dri=1 #something wrong, set fan_dir to default val ori_pwm=fan.get_fan_duty_cycle() new_pwm=0 - logging.debug('fan_dir=%d, ori_pwm=%d', fan_dir, ori_pwm) + #logging.debug('fan_dir=%d, ori_pwm=%d', fan_dir, ori_pwm) logging.debug('test_temp=%d', test_temp) if test_temp==0: temp1 = thermal._get_thermal_val(1) diff --git a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/accton_as7326_util.py b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/accton_as7326_util.py index 997f8a64359d..c3e1c50366b7 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/accton_as7326_util.py +++ b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/accton_as7326_util.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # Copyright (C) 2016 Accton Networks, Inc. # @@ -14,15 +14,6 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . -# -# -# Description: -# Due to adoption of optoe drivers, sideband signals of SFPs are moved -# into cpld drivers. Add a new dict, cpld_of_module, for mapping this -# attributes to corresponding cpld nodes. -# - - """ Usage: %(scriptName)s [options] command object @@ -34,18 +25,14 @@ command: install : install drivers and generate related sysfs nodes clean : uninstall drivers and remove related sysfs nodes - show : show all systen status - sff : dump SFP eeprom - set : change board setting with fan|led|sfp """ - import subprocess import getopt import sys import logging import re import time - +import os @@ -96,41 +83,21 @@ def main(): for arg in args: if arg == 'install': do_install() + elif arg == 'api': + do_sonic_platform_install() + elif arg == 'api_clean': + do_sonic_platform_clean() elif arg == 'clean': do_uninstall() - elif arg == 'show': - device_traversal() - elif arg == 'sff': - if len(args)!=2: - show_eeprom_help() - elif int(args[1]) ==0 or int(args[1]) > DEVICE_NO['sfp']: - show_eeprom_help() - else: - show_eeprom(args[1]) - return - elif arg == 'set': - if len(args)<3: - show_set_help() - else: - set_device(args[1:]) - return else: show_help() - - return 0 def show_help(): print(__doc__ % {'scriptName' : sys.argv[0].split("/")[-1]}) sys.exit(0) -def show_set_help(): - cmd = sys.argv[0].split("/")[-1]+ " " + args[0] - print(cmd +" [led|sfp|fan]") - print(" use \""+ cmd + " led 0-4 \" to set led color") - print(" use \""+ cmd + " fan 0-100\" to set fan duty percetage") - print(" use \""+ cmd + " sfp 1-56 {0|1}\" to set sfp# tx_disable") - sys.exit(0) + def dis_i2c_ir3570a(addr): cmd = "i2cset -y 0 0x%x 0xE5 0x01" % addr @@ -156,11 +123,6 @@ def ir3570_check(): return ret -def show_eeprom_help(): - cmd = sys.argv[0].split("/")[-1]+ " " + args[0] - print(" use \""+ cmd + " 1-56 \" to dump sfp# eeprom") - sys.exit(0) - def my_log(txt): if DEBUG == True: print("[ROY]"+txt) @@ -174,7 +136,7 @@ def log_os_system(cmd, show): if status: logging.info('Failed :'+cmd) if show: - print(('Failed :'+cmd)) + print('Failed :'+cmd) return status, output def driver_check(): @@ -189,7 +151,7 @@ def driver_check(): kos = [ 'modprobe i2c_dev', -'modprobe i2c_mux_pca954x force_deselect_on_exit=1', +'modprobe i2c_mux_pca954x', 'modprobe accton_i2c_cpld' , 'modprobe ym2651y' , 'modprobe accton_as7326_56x_fan' , @@ -207,6 +169,8 @@ def driver_install(): if status: if FORCE == 0: return status + print("Done driver_install") + return 0 def driver_uninstall(): @@ -224,12 +188,8 @@ def driver_uninstall(): return status return 0 -led_prefix ='/sys/class/leds/accton_'+PROJECT_NAME+'_led::' -hwmon_types = {'led': ['diag','fan','loc','psu1','psu2']} -hwmon_nodes = {'led': ['brightness'] } -hwmon_prefix ={'led': led_prefix} - i2c_prefix = '/sys/bus/i2c/devices/' +''' i2c_bus = {'fan': ['11-0066'] , 'thermal': ['15-0048','15-0049', '15-004a', '15-004b'] , 'psu': ['17-0051','13-0053'], @@ -238,7 +198,7 @@ def driver_uninstall(): 'thermal': ['hwmon/hwmon*/temp1_input'] , 'psu': ['psu_present ', 'psu_power_good'] , 'sfp': ['module_present_', 'module_tx_disable_']} - +''' sfp_map = [ 42,41,44,43,47,45,46,50, 48,49,52,51,53,56,55,54, @@ -268,7 +228,6 @@ def driver_uninstall(): 'echo pca9548 0x74 > /sys/bus/i2c/devices/i2c-36/new_device', 'echo pca9548 0x75 > /sys/bus/i2c/devices/i2c-37/new_device', 'echo pca9548 0x76 > /sys/bus/i2c/devices/i2c-38/new_device', -'echo 24c04 0x56 > /sys/bus/i2c/devices/i2c-0/new_device', 'echo as7326_56x_fan 0x66 > /sys/bus/i2c/devices/i2c-11/new_device ', 'echo lm75 0x48 > /sys/bus/i2c/devices/i2c-15/new_device', @@ -286,12 +245,22 @@ def driver_uninstall(): mknod2 =[ ] +#EERPOM +eeprom_mknod =[ +'echo 24c04 0x56 > /sys/bus/i2c/devices/i2c-0/new_device', +'echo 24c02 0x57 > /sys/bus/i2c/devices/i2c-0/new_device' +] def i2c_order_check(): # This project has only 1 i2c bus. return 0 +def eeprom_check(): + cmd = "i2cget -y -f 0 0x56" + status, output = subprocess.getstatusoutput(cmd) + return status + def device_install(): global FORCE @@ -320,6 +289,30 @@ def device_install(): print(output) if FORCE == 0: return status + + # set all pca954x idle_disconnect + cmd = 'echo -2 | tee /sys/bus/i2c/drivers/pca954x/*-00*/idle_state' + status, output = log_os_system(cmd, 1) + if status: + print(output) + if FORCE == 0: + return status + + # initiate IDPROM + # Close 0x77 mux to make sure if the I2C address of IDPROM is 0x56 or 0x57 + log_os_system("i2cset -f -y 0 0x77 0 ", 1) + ret=eeprom_check() + if ret==0: + log_os_system(eeprom_mknod[0], 1) #old board, 0x56 eeprom + time.sleep(0.2) + exists = os.path.isfile('/sys/bus/i2c/devices/0-0056/eeprom') + if (exists is False): + subprocess.call('echo 0x56 > /sys/bus/i2c/devices/i2c-0/delete_device', shell=True) + log_os_system(eeprom_mknod[1], 1) + else: + log_os_system(eeprom_mknod[1], 1) #new board, 0x57 eeprom + + for i in range(0,len(sfp_map)): if i < qsfp_start or i >= qsfp_end: status, output =log_os_system("echo optoe2 0x50 > /sys/bus/i2c/devices/i2c-"+str(sfp_map[i])+"/new_device", 1) @@ -329,6 +322,7 @@ def device_install(): print(output) if FORCE == 0: return status + print("Done device_install") return def device_uninstall(): @@ -364,6 +358,23 @@ def device_uninstall(): if FORCE == 0: return status + #Deal with for del 0x56 or 0x57 sysfs device + exists = os.path.isfile('/sys/bus/i2c/devices/0-0056/eeprom') + + if (exists is True): + target = eeprom_mknod[0] #0x56 + else: + target = eeprom_mknod[1] #0x57 + + temp = target.split() + del temp[1] + temp[-1] = temp[-1].replace('new_device', 'delete_device') + status, output = log_os_system(" ".join(temp), 1) + if status: + print(output) + if FORCE == 0: + return status + return def system_ready(): @@ -372,6 +383,44 @@ def system_ready(): if not device_exist(): return False return True +PLATFORM_ROOT_PATH = '/usr/share/sonic/device' +PLATFORM_API2_WHL_FILE_PY3 ='sonic_platform-1.0-py3-none-any.whl' +def do_sonic_platform_install(): + device_path = "{}{}{}{}".format(PLATFORM_ROOT_PATH, '/x86_64-accton_', PROJECT_NAME, '-r0') + SONIC_PLATFORM_BSP_WHL_PKG_PY3 = "/".join([device_path, PLATFORM_API2_WHL_FILE_PY3]) + + #Check API2.0 on py whl file + status, output = log_os_system("pip3 show sonic-platform > /dev/null 2>&1", 0) + if status: + if os.path.exists(SONIC_PLATFORM_BSP_WHL_PKG_PY3): + status, output = log_os_system("pip3 install "+ SONIC_PLATFORM_BSP_WHL_PKG_PY3, 1) + if status: + print("Error: Failed to install {}".format(PLATFORM_API2_WHL_FILE_PY3)) + return status + else: + print("Successfully installed {} package".format(PLATFORM_API2_WHL_FILE_PY3)) + else: + print('{} is not found'.format(PLATFORM_API2_WHL_FILE_PY3)) + else: + print('{} has installed'.format(PLATFORM_API2_WHL_FILE_PY3)) + + return + +def do_sonic_platform_clean(): + status, output = log_os_system("pip3 show sonic-platform > /dev/null 2>&1", 0) + if status: + print('{} does not install, not need to uninstall'.format(PLATFORM_API2_WHL_FILE_PY3)) + + else: + status, output = log_os_system("pip3 uninstall sonic-platform -y", 0) + if status: + print('Error: Failed to uninstall {}'.format(PLATFORM_API2_WHL_FILE_PY3)) + return status + else: + print('{} is uninstalled'.format(PLATFORM_API2_WHL_FILE_PY3)) + + + return def do_install(): print("Checking system....") @@ -394,6 +443,9 @@ def do_install(): return status else: print(PROJECT_NAME.upper()+" devices detected....") + + do_sonic_platform_install() + return def do_uninstall(): @@ -416,185 +468,8 @@ def do_uninstall(): if FORCE == 0: return status - return - -def devices_info(): - global DEVICE_NO - global ALL_DEVICE - global i2c_bus, hwmon_types - for key in DEVICE_NO: - ALL_DEVICE[key]= {} - for i in range(0,DEVICE_NO[key]): - ALL_DEVICE[key][key+str(i+1)] = [] - - for key in i2c_bus: - buses = i2c_bus[key] - nodes = i2c_nodes[key] - for i in range(0,len(buses)): - for j in range(0,len(nodes)): - if 'fan' == key: - for k in range(0,DEVICE_NO[key]): - node = key+str(k+1) - path = i2c_prefix+ buses[i]+"/fan"+str(k+1)+"_"+ nodes[j] - my_log(node+": "+ path) - ALL_DEVICE[key][node].append(path) - elif 'sfp' == key: - for k in range(0,DEVICE_NO[key]): - for lk in cpld_of_module: - if k in cpld_of_module[lk]: - cpld_str = lk - node = key+str(k+1) - path = i2c_prefix+ lk + "/"+ nodes[j] + str(k+1) - my_log(node+": "+ path) - ALL_DEVICE[key][node].append(path) - else: - node = key+str(i+1) - path = i2c_prefix+ buses[i]+"/"+ nodes[j] - my_log(node+": "+ path) - ALL_DEVICE[key][node].append(path) - - for key in hwmon_types: - itypes = hwmon_types[key] - nodes = hwmon_nodes[key] - for i in range(0,len(itypes)): - for j in range(0,len(nodes)): - node = key+"_"+itypes[i] - path = hwmon_prefix[key]+ itypes[i]+"/"+ nodes[j] - my_log(node+": "+ path) - ALL_DEVICE[key][ key+str(i+1)].append(path) - - #show dict all in the order - if DEBUG == True: - for i in sorted(ALL_DEVICE.keys()): - print((i+": ")) - for j in sorted(ALL_DEVICE[i].keys()): - print((" "+j)) - for k in (ALL_DEVICE[i][j]): - print((" "+" "+k)) - return - -def show_eeprom(index): - if system_ready()==False: - print("System's not ready.") - print("Please install first!") - return - - if len(ALL_DEVICE)==0: - devices_info() - node = ALL_DEVICE['sfp'] ['sfp'+str(index)][0] - node = node.replace(node.split("/")[-1], 'eeprom') - # check if got hexdump command in current environment - ret, log = log_os_system("which hexdump", 0) - ret, log2 = log_os_system("which busybox hexdump", 0) - if len(log): - hex_cmd = 'hexdump' - elif len(log2): - hex_cmd = ' busybox hexdump' - else: - log = 'Failed : no hexdump cmd!!' - logging.info(log) - print(log) - return 1 - - print(node + ":") - ret, log = log_os_system("cat "+node+"| "+hex_cmd+" -C", 1) - if ret==0: - print(log) - else: - print("**********device no found**********") - return - -def set_device(args): - global DEVICE_NO - global ALL_DEVICE - if system_ready()==False: - print("System's not ready.") - print("Please install first!") - return - - if len(ALL_DEVICE)==0: - devices_info() - - if args[0]=='led': - if int(args[1])>4: - show_set_help() - return - #print ALL_DEVICE['led'] - for i in range(0,len(ALL_DEVICE['led'])): - for k in (ALL_DEVICE['led']['led'+str(i+1)]): - ret, log = log_os_system("echo "+args[1]+" >"+k, 1) - if ret: - return ret - elif args[0]=='fan': - if int(args[1])>100: - show_set_help() - return - #print ALL_DEVICE['fan'] - #fan1~6 is all fine, all fan share same setting - node = ALL_DEVICE['fan'] ['fan1'][0] - node = node.replace(node.split("/")[-1], 'fan_duty_cycle_percentage') - ret, log = log_os_system("cat "+ node, 1) - if ret==0: - print(("Previous fan duty: " + log.strip() +"%")) - ret, log = log_os_system("echo "+args[1]+" >"+node, 1) - if ret==0: - print(("Current fan duty: " + args[1] +"%")) - return ret - elif args[0]=='sfp': - if int(args[1])> DEVICE_NO[args[0]] or int(args[1])==0: - show_set_help() - return - if len(args)<2: - show_set_help() - return - - if int(args[2])>1: - show_set_help() - return - - #print ALL_DEVICE[args[0]] - for i in range(0,len(ALL_DEVICE[args[0]])): - for j in ALL_DEVICE[args[0]][args[0]+str(args[1])]: - if j.find('tx_disable')!= -1: - ret, log = log_os_system("echo "+args[2]+" >"+ j, 1) - if ret: - return ret - return + do_sonic_platform_clean() -#get digits inside a string. -#Ex: 31 for "sfp31" -def get_value(input): - digit = re.findall('\d+', input) - return int(digit[0]) - -def device_traversal(): - if system_ready()==False: - print("System's not ready.") - print("Please install first!") - return - - if len(ALL_DEVICE)==0: - devices_info() - for i in sorted(ALL_DEVICE.keys()): - print("============================================") - print((i.upper()+": ")) - print("============================================") - - for j in sorted(list(ALL_DEVICE[i].keys()), key=get_value): - print(" "+j+":", end=' ') - for k in (ALL_DEVICE[i][j]): - ret, log = log_os_system("cat "+k, 0) - func = k.split("/")[-1].strip() - func = re.sub(j+'_','',func,1) - func = re.sub(i.lower()+'_','',func,1) - if ret==0: - print(func+"="+log+" ", end=' ') - else: - print(func+"="+"X"+" ", end=' ') - print() - print("----------------------------------------------------------------") - - print() return def device_exist(): diff --git a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/pddf_post_driver_install.sh b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/pddf_post_driver_install.sh new file mode 100755 index 000000000000..b2dc4ded1f6d --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/pddf_post_driver_install.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +dis_i2c_ir3570a() +{ + local addr=$1 + + i2cset -y -a 0 $addr 0xE5 0x01 &>/dev/null + i2cset -y -a 0 $addr 0x12 0x02 &>/dev/null +} + + +ir3570_check() +{ + dump=`i2cdump -y 0 0x42 s 0x9a |awk 'END {print $2}'` + if [ $dump -eq 24 ]; then + echo "Disabling i2c function of ir3570a" + dis_i2c_ir3570a 0x4 + fi +} + +ir3570_check + +echo "AS7326 post PDDF driver install completed" diff --git a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/pre_pddf_init.sh b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/pre_pddf_init.sh new file mode 100755 index 000000000000..8b8c45ef54e7 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/pre_pddf_init.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# Steps to check syseeprom i2c address +modprobe i2c-i801 +modprobe i2c-dev +use_57_eeprom=true +i2cget -y -f 0 0x56 0x0 +if [ $? -eq 0 ]; then + use_57_eeprom=false + echo "The board has system EEPROM at I2C address 0x56." +fi + +if $use_57_eeprom ; then + echo "The board has system EEPROM at I2C address 0x57." + # syseeprom is at the i2c address 0x57. Change the PDDF JSON file + if [ -f /usr/share/sonic/device/x86_64-accton_as7326_56x-r0/pddf_support ] && \ + [ -f /usr/share/sonic/device/x86_64-accton_as7326_56x-r0/pddf/pddf-device.json ]; then + sed -i 's@"topo_info": {"parent_bus": "0x0", "dev_addr": "0x56", "dev_type": "24c04"},@\ + "topo_info": {"parent_bus": "0x0", "dev_addr": "0x57", "dev_type": "24c02"},@g' \ + /usr/share/sonic/device/x86_64-accton_as7326_56x-r0/pddf/pddf-device.json + sync + fi +fi diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/service/as7712-pddf-platform-monitor.service b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/service/as7712-pddf-platform-monitor.service new file mode 100644 index 000000000000..d0bd9940a348 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/service/as7712-pddf-platform-monitor.service @@ -0,0 +1,16 @@ +[Unit] +Description=Accton AS7712 Platform Monitoring service +Before=pmon.service +After=pddf-platform-init.service +DefaultDependencies=no + +[Service] +ExecStart=/usr/local/bin/accton_as7712_pddf_monitor.py +KillSignal=SIGKILL +SuccessExitStatus=SIGKILL + +# Resource Limitations +LimitCORE=infinity + +[Install] +WantedBy=multi-user.target diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/service/pddf-platform-init.service b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/service/pddf-platform-init.service new file mode 120000 index 000000000000..0fd9f25b6c5e --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/service/pddf-platform-init.service @@ -0,0 +1 @@ +../../../../pddf/i2c/service/pddf-platform-init.service \ No newline at end of file diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/__init__.py b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/__init__.py new file mode 100644 index 000000000000..f0201e717796 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/__init__.py @@ -0,0 +1,3 @@ +# All the derived classes for PDDF +__all__ = ["platform", "chassis", "sfp", "psu", "thermal"] +from . import platform diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/chassis.py b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/chassis.py new file mode 100644 index 000000000000..d2edce411665 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/chassis.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python + +############################################################################# +# PDDF +# Module contains an implementation of SONiC Chassis API +# +############################################################################# + +try: + import sys + from sonic_platform_pddf_base.pddf_chassis import PddfChassis + from .event import SfpEvent +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +NUM_COMPONENT = 4 + +class Chassis(PddfChassis): + """ + PDDF Platform-specific Chassis class + """ + + def __init__(self, pddf_data=None, pddf_plugin_data=None): + PddfChassis.__init__(self, pddf_data, pddf_plugin_data) + self.__initialize_components() + self._sfpevent = SfpEvent(self.get_all_sfps()) + + def __initialize_components(self): + from sonic_platform.component import Component + for index in range(NUM_COMPONENT): + component = Component(index) + self._component_list.append(component) + + # Provide the functions/variables below for which implementation is to be overwritten + def get_change_event(self, timeout=0): + return self._sfpevent.get_sfp_event(timeout) + + def get_sfp(self, index): + """ + Retrieves sfp represented by (1-based) index + + Args: + index: An integer, the index (1-based) of the sfp to retrieve. + The index should be the sequence of a physical port in a chassis, + starting from 1. + For example, 1 for Ethernet0, 2 for Ethernet4 and so on. + + Returns: + An object derived from SfpBase representing the specified sfp + """ + sfp = None + + try: + # The index will start from 1 + sfp = self._sfp_list[index-1] + except IndexError: + sys.stderr.write("SFP index {} out of range (1-{})\n".format( + index, len(self._sfp_list))) + return sfp diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/component.py new file mode 100644 index 000000000000..148584216fca --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/component.py @@ -0,0 +1,115 @@ +############################################################################# +# +# Component contains an implementation of SONiC Platform Base API and +# provides the components firmware management function +# +############################################################################# + +try: + import subprocess + from sonic_platform_base.component_base import ComponentBase +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + +CPLD_ADDR_MAPPING = { + "CPLD1": ['4', '0x60'], + "CPLD2": ['5', '0x62'], + "CPLD3": ['6', '0x64'] +} +SYSFS_PATH = "/sys/bus/i2c/devices/" +BIOS_VERSION_PATH = "/sys/class/dmi/id/bios_version" +COMPONENT_LIST= [ + ("CPLD1", "CPLD 1"), + ("CPLD2", "CPLD 2"), + ("CPLD3", "CPLD 3"), + ("BIOS", "Basic Input/Output System") + +] + +class Component(ComponentBase): + """Platform-specific Component class""" + + DEVICE_TYPE = "component" + + def __init__(self, component_index=0): + self.index = component_index + self.name = self.get_name() + + def __run_command(self, command): + # Run bash command and print output to stdout + try: + process = subprocess.Popen( + shlex.split(command), stdout=subprocess.PIPE) + while True: + output = process.stdout.readline() + if output == '' and process.poll() is not None: + break + rc = process.poll() + if rc != 0: + return False + except Exception: + return False + return True + + def __get_bios_version(self): + # Retrieves the BIOS firmware version + try: + with open(BIOS_VERSION_PATH, 'r') as fd: + bios_version = fd.read() + return bios_version.strip() + except Exception as e: + return None + + def __get_cpld_version(self): + # Retrieves the CPLD firmware version + cpld_version = dict() + for cpld_name in CPLD_ADDR_MAPPING: + cmd = "i2cget -f -y {0} {1} 0x1".format(CPLD_ADDR_MAPPING[cpld_name][0], CPLD_ADDR_MAPPING[cpld_name][1]) + status, value = subprocess.getstatusoutput(cmd) + if not status: + cpld_version_raw = value.rstrip() + cpld_version[cpld_name] = "{}".format(int(cpld_version_raw,16)) + + return cpld_version + + def get_name(self): + """ + Retrieves the name of the component + Returns: + A string containing the name of the component + """ + return COMPONENT_LIST[self.index][0] + + def get_description(self): + """ + Retrieves the description of the component + Returns: + A string containing the description of the component + """ + return COMPONENT_LIST[self.index][1] + + def get_firmware_version(self): + """ + Retrieves the firmware version of module + Returns: + string: The firmware versions of the module + """ + fw_version = None + + if self.name == "BIOS": + fw_version = self.__get_bios_version() + elif "CPLD" in self.name: + cpld_version = self.__get_cpld_version() + fw_version = cpld_version.get(self.name) + + return fw_version + + def install_firmware(self, image_path): + """ + Install firmware to module + Args: + image_path: A string, path to firmware image + Returns: + A boolean, True if install successfully, False if not + """ + raise NotImplementedError diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/eeprom.py b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/eeprom.py new file mode 100644 index 000000000000..a87ecc9f6feb --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/eeprom.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +try: + from sonic_platform_pddf_base.pddf_eeprom import PddfEeprom +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class Eeprom(PddfEeprom): + + def __init__(self, pddf_data=None, pddf_plugin_data=None): + PddfEeprom.__init__(self, pddf_data, pddf_plugin_data) + + # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/event.py b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/event.py new file mode 100644 index 000000000000..d5dac6d7f7e0 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/event.py @@ -0,0 +1,60 @@ +try: + import time + from sonic_py_common.logger import Logger +except ImportError as e: + raise ImportError(repr(e) + " - required module not found") + +POLL_INTERVAL_IN_SEC = 1 + +class SfpEvent: + ''' Listen to insert/remove sfp events ''' + + def __init__(self, sfp_list): + self._sfp_list = sfp_list + self._logger = Logger() + self._sfp_change_event_data = {'present': 0} + + def get_presence_bitmap(self): + bitmap = 0 + for sfp in self._sfp_list: + modpres = sfp.get_presence() + i=sfp.get_position_in_parent() - 1 + if modpres: + bitmap = bitmap | (1 << i) + return bitmap + + def get_sfp_event(self, timeout=2000): + port_dict = {} + change_dict = {} + change_dict['sfp'] = port_dict + + if timeout < 1000: + cd_ms = 1000 + else: + cd_ms = timeout + + while cd_ms > 0: + bitmap = self.get_presence_bitmap() + changed_ports = self._sfp_change_event_data['present'] ^ bitmap + if changed_ports != 0: + break + time.sleep(POLL_INTERVAL_IN_SEC) + # timeout=0 means wait for event forever + if timeout != 0: + cd_ms = cd_ms - POLL_INTERVAL_IN_SEC * 1000 + + if changed_ports != 0: + for sfp in self._sfp_list: + i=sfp.get_position_in_parent() - 1 + if (changed_ports & (1 << i)): + if (bitmap & (1 << i)) == 0: + port_dict[i+1] = '0' + else: + port_dict[i+1] = '1' + + + # Update the cache dict + self._sfp_change_event_data['present'] = bitmap + return True, change_dict + else: + return True, change_dict diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/fan.py b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/fan.py new file mode 100644 index 000000000000..34019ac99188 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/fan.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + + +try: + from sonic_platform_pddf_base.pddf_fan import PddfFan +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class Fan(PddfFan): + """PDDF Platform-Specific Fan class""" + + def __init__(self, tray_idx, fan_idx=0, pddf_data=None, pddf_plugin_data=None, is_psu_fan=False, psu_index=0): + # idx is 0-based + PddfFan.__init__(self, tray_idx, fan_idx, pddf_data, pddf_plugin_data, is_psu_fan, psu_index) + + # Provide the functions/variables below for which implementation is to be overwritten e.g. + #def get_name(self): + ## Since AS7712 has two fans in a tray, modifying this function to return proper name + #if self.is_psu_fan: + #return "PSU_FAN{}".format(self.fan_index) + #else: + #return "Fantray{}_{}".format(self.fantray_index, {1:'Front', 2:'Rear'}.get(self.fan_index,'none')) + diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/fan_drawer.py b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/fan_drawer.py new file mode 100644 index 000000000000..3b9bb607f632 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/fan_drawer.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + + +try: + from sonic_platform_pddf_base.pddf_fan_drawer import PddfFanDrawer +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class FanDrawer(PddfFanDrawer): + """PDDF Platform-Specific Fan-Drawer class""" + + def __init__(self, tray_idx, pddf_data=None, pddf_plugin_data=None): + # idx is 0-based + PddfFanDrawer.__init__(self, tray_idx, pddf_data, pddf_plugin_data) + + # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/platform.py b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/platform.py new file mode 100644 index 000000000000..406b1179ae1b --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/platform.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +############################################################################# +# PDDF +# Module contains an implementation of SONiC Platform Base API and +# provides the platform information +# +############################################################################# + + +try: + from sonic_platform_pddf_base.pddf_platform import PddfPlatform +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class Platform(PddfPlatform): + """ + PDDF Platform-Specific Platform Class + """ + + def __init__(self): + PddfPlatform.__init__(self) + + # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/psu.py b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/psu.py new file mode 100644 index 000000000000..2450957e256b --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/psu.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python +# + + +try: + from sonic_platform_pddf_base.pddf_psu import PddfPsu +except ImportError as e: + raise ImportError (str(e) + "- required module not found") + + +class Psu(PddfPsu): + """PDDF Platform-Specific PSU class""" + + PLATFORM_PSU_CAPACITY = 650 + + def __init__(self, index, pddf_data=None, pddf_plugin_data=None): + PddfPsu.__init__(self, index, pddf_data, pddf_plugin_data) + + # Provide the functions/variables below for which implementation is to be overwritten + def get_capacity(self): + """ + Gets the capacity (maximum output power) of the PSU in watts + + Returns: + An integer, the capacity of PSU + """ + return (self.PLATFORM_PSU_CAPACITY) + + def get_type(self): + """ + Gets the type of the PSU + + Returns: + A string, the type of PSU (AC/DC) + """ + ptype = "AC" + # Currently the platform supports only AC type of PSUs + try: + import sonic_platform.platform + ch=sonic_platform.platform.Platform().get_chassis() + e=ch.sys_eeprom.read_eeprom() + ret, prod_name = ch.sys_eeprom.get_tlv_field(e,0x21) + if ret: + prod_name = prod_name[2].decode('ascii') + #print "Product name is {}".format(prod_name) + if '48V' in prod_name: + ptype = 'DC' + except Exception as e: + print("Error while trying to read syseeprom to get PSU type - {}".format(repr(e))) + + return ptype diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/sfp.py new file mode 100644 index 000000000000..c9fb07d6364f --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/sfp.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python + +try: + from sonic_platform_pddf_base.pddf_sfp import PddfSfp +except ImportError as e: + raise ImportError (str(e) + "- required module not found") + + +class Sfp(PddfSfp): + """ + PDDF Platform-Specific Sfp class + """ + + def __init__(self, index, pddf_data=None, pddf_plugin_data=None): + PddfSfp.__init__(self, index, pddf_data, pddf_plugin_data) + + # Provide the functions/variables below for which implementation is to be overwritten + def get_position_in_parent(self): + """Retrieves 1-based relative physical position in parent device.""" + return self.port_index diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/thermal.py b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/thermal.py new file mode 100644 index 000000000000..77d6ec7ae886 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/thermal.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + + +try: + from sonic_platform_pddf_base.pddf_thermal import PddfThermal +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + + +class Thermal(PddfThermal): + """PDDF Platform-Specific Thermal class""" + + def __init__(self, index, pddf_data=None, pddf_plugin_data=None, is_psu_thermal=False, psu_index=0): + PddfThermal.__init__(self, index, pddf_data, pddf_plugin_data, is_psu_thermal, psu_index) + + # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/watchdog.py b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/watchdog.py new file mode 100644 index 000000000000..fe8554f6ec73 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform/watchdog.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +############################################################################# +# +# Module contains an implementation of platform specific watchdog API's +# +############################################################################# + +try: + from sonic_platform_pddf_base.pddf_watchdog import PddfWatchdog +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class Watchdog(PddfWatchdog): + """ + PDDF Platform-specific Chassis class + """ + + def __init__(self): + PddfWatchdog.__init__(self) + self.timeout = 180 + + # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform_setup.py b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform_setup.py new file mode 100644 index 000000000000..59dad237f3b4 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/sonic_platform_setup.py @@ -0,0 +1,25 @@ +from setuptools import setup + +setup( + name='sonic-platform', + version='1.0', + description='SONiC platform API implementation on Accton Platforms using PDDF', + license='Apache 2.0', + author='SONiC Team', + author_email='linuxnetdev@microsoft.com', + url='https://github.com/Azure/sonic-buildimage', + packages=['sonic_platform'], + classifiers=[ + 'Development Status :: 3 - Alpha', + 'Environment :: Plugins', + 'Intended Audience :: Developers', + 'Intended Audience :: Information Technology', + 'Intended Audience :: System Administrators', + 'License :: OSI Approved :: Apache Software License', + 'Natural Language :: English', + 'Operating System :: POSIX :: Linux', + 'Programming Language :: Python :: 3.7', + 'Topic :: Utilities', + ], + keywords='sonic SONiC platform PLATFORM', +) diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/utils/accton_as7712_pddf_monitor.py b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/utils/accton_as7712_pddf_monitor.py new file mode 100755 index 000000000000..34d74876d87d --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/utils/accton_as7712_pddf_monitor.py @@ -0,0 +1,264 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2017 Accton Technology Corporation +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# 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 for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# ------------------------------------------------------------------ +# HISTORY: +# mm/dd/yyyy (A.D.) +# 11/13/2017: Polly Hsu, Create +# ------------------------------------------------------------------ + +try: + import sys + import getopt + import logging + import logging.config + import logging.handlers + import signal + import time # this is only being used as part of the example + import subprocess + from sonic_platform import platform +except ImportError as e: + raise ImportError('%s - required module not found' % str(e)) + +# Deafults +VERSION = '1.0' +FUNCTION_NAME = 'accton_as7712_monitor' +DUTY_MAX = 100 + +fan_state = [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] # init state=2, insert=1, remove=0 +# For AC power Front to Back : +# If any fan fail, please fan speed register to 15 +# The max value of Fan speed register is 9 +# [LM75(48) + LM75(49) + LM75(4A)] > 174 => set Fan speed value from 4 to 5 +# [LM75(48) + LM75(49) + LM75(4A)] > 182 => set Fan speed value from 5 to 7 +# [LM75(48) + LM75(49) + LM75(4A)] > 190 => set Fan speed value from 7 to 9 +# +# [LM75(48) + LM75(49) + LM75(4A)] < 170 => set Fan speed value from 5 to 4 +# [LM75(48) + LM75(49) + LM75(4A)] < 178 => set Fan speed value from 7 to 5 +# [LM75(48) + LM75(49) + LM75(4A)] < 186 => set Fan speed value from 9 to 7 +# +# +# For AC power Back to Front : +# If any fan fail, please fan speed register to 15 +# The max value of Fan speed register is 10 +# [LM75(48) + LM75(49) + LM75(4A)] > 140 => set Fan speed value from 4 to 5 +# [LM75(48) + LM75(49) + LM75(4A)] > 150 => set Fan speed value from 5 to 7 +# [LM75(48) + LM75(49) + LM75(4A)] > 160 => set Fan speed value from 7 to 10 +# +# [LM75(48) + LM75(49) + LM75(4A)] < 135 => set Fan speed value from 5 to 4 +# [LM75(48) + LM75(49) + LM75(4A)] < 145 => set Fan speed value from 7 to 5 +# [LM75(48) + LM75(49) + LM75(4A)] < 155 => set Fan speed value from 10 to 7 +# + +# 2.If no matched fan speed is found from the policy, +# use FAN_DUTY_CYCLE_MIN as default speed +# Get current temperature +# 4.Decision 3: Decide new fan speed depend on fan direction/current fan speed/temperature + + +def as7712_set_fan_duty_cycle(dc): + # PWM register is same for all the FANs + if dc < 0 or dc > 100: + print("Error: Wrong duty cycle value %d" % (dc)) + return -1 + + platform_chassis.get_fan(0).set_speed(dc) + + return 0 + + +# Make a class we can use to capture stdout and sterr in the log +platform_chassis = None + + +class accton_as7712_monitor(object): + # static temp var + _ori_temp = 0 + _new_perc = 0 + _ori_perc = 0 + + llog = logging.getLogger("["+FUNCTION_NAME+"]") + + def __init__(self, log_console, log_file): + """Needs a logger and a logger level.""" + + formatter = logging.Formatter('%(name)s %(message)s') + sys_handler = logging.handlers.SysLogHandler(address='/dev/log') + sys_handler.setFormatter(formatter) + sys_handler.ident = 'common' + sys_handler.setLevel(logging.WARNING) # only fatal for syslog + self.llog.addHandler(sys_handler) + self.llog.setLevel(logging.DEBUG) + + if log_file: + fh = logging.FileHandler(log_file) + fh.setLevel(logging.INFO) + formatter = logging.Formatter('%(asctime)-15s %(name)s %(message)s') + fh.setFormatter(formatter) + self.llog.addHandler(fh) + + # set up logging to console + if log_console: + console = logging.StreamHandler() + console.setLevel(logging.DEBUG) # For debugging + formatter = logging.Formatter('%(asctime)-15s %(name)s %(message)s') + console.setFormatter(formatter) + self.llog.addHandler(console) + + def manage_fans(self): + fan_policy_f2b = { + 0: [32, 0, 174000], + 1: [38, 170000, 182000], + 2: [50, 178000, 190000], + 3: [63, 186000, 0], + } + fan_policy_b2f = { + 0: [32, 0, 140000], + 1: [38, 135000, 150000], + 2: [50, 145000, 160000], + 3: [69, 155000, 0], + } + + global fan_state + global platform_chassis + FAN_STATE_REMOVE = 0 + FAN_STATE_INSERT = 1 + + get_temp = 0 + for t in range(0, 3): + get_temp = get_temp + platform_chassis.get_thermal(t).get_temperature()*1000 + + cur_duty_cycle = 0 + + for x in range(platform_chassis.get_num_fans()): + fan_status = platform_chassis.get_fan(x).get_status() + fan_present = platform_chassis.get_fan(x).get_presence() + + if fan_present == 1: + if fan_state[x] != 1: + fan_state[x] = FAN_STATE_INSERT + #self.llog.debug("FAN-%d present is detected", x) + else: + if fan_state[x] != 0: + fan_state[x] = FAN_STATE_REMOVE + self.llog.warning("Alarm for FAN-%d absent is detected", x) + + if fan_status is None: + self.llog.warning('SET new_perc to %d (FAN stauts is None. fan_num:%d)', DUTY_MAX, x) + as7712_set_fan_duty_cycle(DUTY_MAX) + + if fan_status is False: + self.llog.warning('SET new_perc to %d (FAN fault. fan_num:%d)', DUTY_MAX, x) + as7712_set_fan_duty_cycle(DUTY_MAX) + + #self.llog.debug('INFO. fan_status is True (fan_num:%d)', x) + + # Determine the current fan duty cycle from a working fan + if not cur_duty_cycle: + cur_duty_cycle = platform_chassis.get_fan(x).get_speed() + + if fan_status is not None and fan_status is not False: + # Assuming all the fans have the same direction + fan_dir = platform_chassis.get_fan(0).get_direction() + if fan_dir == 1: + policy = fan_policy_f2b + else: + policy = fan_policy_b2f + + new_duty_cycle = cur_duty_cycle + + for x in range(0, 4): + if x == 4: + as7712_set_fan_duty_cycle(policy[0][0]) + break + + if get_temp > policy[x][2] and x != 3: + new_duty_cycle = policy[x+1][0] + self.llog.debug('THERMAL temp UP, temp %d > %d , new_duty_cycle=%d', + get_temp, policy[x][2], new_duty_cycle) + elif get_temp < policy[x][1]: + new_duty_cycle = policy[x-1][0] + self.llog.debug('THERMAL temp down, temp %d < %d , new_duty_cycle=%d', + get_temp, policy[x][1], new_duty_cycle) + break + + if new_duty_cycle == cur_duty_cycle: + return True + else: + if (new_duty_cycle == policy[3][0]) and (cur_duty_cycle < policy[3][0]): + self.llog.warning('Alarm for temperature high is detected') + elif (new_duty_cycle < policy[3][0]) and (cur_duty_cycle == policy[3][0]): + self.llog.warning('Alarm for temperature high is cleared') + else: + pass + + self.llog.debug('set new_duty_cycle=%d (old dc: %d)', new_duty_cycle, cur_duty_cycle) + as7712_set_fan_duty_cycle(new_duty_cycle) + + return True + + +def sig_handler(signum, frame): + logging.critical('INFO:Cause signal %d, set fan speed max.', signum) + as7712_set_fan_duty_cycle(DUTY_MAX) + sys.exit(0) + + +def main(argv): + + log_console = 0 + log_file = "" + + if len(sys.argv) != 1: + try: + opts, args = getopt.getopt(argv, 'hdl') + except getopt.GetoptError: + print('Usage: %s [-d] [-l]' % sys.argv[0]) + return 0 + for opt, arg in opts: + if opt == '-h': + print('Usage: %s [-d] [-l]' % sys.argv[0]) + return 0 + elif opt in ('-d'): + log_console = 1 + elif opt in ('-l'): + log_file = '%s.log' % sys.argv[0] + + signal.signal(signal.SIGINT, sig_handler) + signal.signal(signal.SIGTERM, sig_handler) + + global platform_chassis + platform_chassis = platform.Platform().get_chassis() + + # Disable the fan watchdog + status, output = subprocess.getstatusoutput('i2cset -f -y 2 0x66 0x33 0x0') + if status: + print("Error: Unable to disable fan speed watchdog") + + # Set any smaple speed of 100% + as7712_set_fan_duty_cycle(100) + + # Start the monitoring + monitor = accton_as7712_monitor(log_console, log_file) + # Loop forever, doing something useful hopefully: + while True: + monitor.manage_fans() + time.sleep(10) + + +if __name__ == '__main__': + main(sys.argv[1:]) diff --git a/platform/broadcom/sonic-platform-modules-accton/as7712-32x/utils/pddf_switch_svc.py b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/utils/pddf_switch_svc.py new file mode 100755 index 000000000000..3ed3f7604e73 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7712-32x/utils/pddf_switch_svc.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python +# Script to stop and start the respective platforms default services. +# This will be used while switching the pddf->non-pddf mode and vice versa +import commands + +def check_pddf_support(): + return True + +def stop_platform_svc(): + status, output = commands.getstatusoutput("systemctl stop as7712-platform-init.service") + if status: + print("Stop as7712-platform-init.service failed %d"%status) + return False + status, output = commands.getstatusoutput("systemctl disable as7712-platform-init.service") + if status: + print("Disable as7712-platform-init.service failed %d"%status) + return False + + status, output = commands.getstatusoutput("/usr/local/bin/accton_as7712_util.py clean") + if status: + print("accton_as7712_util.py clean command failed %d"%status) + return False + + # HACK , stop the pddf-platform-init service if it is active + status, output = commands.getstatusoutput("systemctl stop pddf-platform-init.service") + if status: + print("Stop pddf-platform-init.service along with other platform serives failed %d"%status) + return False + + return True + +def start_platform_svc(): + status, output = commands.getstatusoutput("/usr/local/bin/accton_as7712_util.py install") + if status: + print("accton_as7712_util.py install command failed %d"%status) + return False + + status, output = commands.getstatusoutput("systemctl enable as7712-platform-init.service") + if status: + print("Enable as7712-platform-init.service failed %d"%status) + return False + status, output = commands.getstatusoutput("systemctl start as7712-platform-init.service") + if status: + print("Start as7712-platform-init.service failed %d"%status) + return False + + return True + +def start_platform_pddf(): + status, output = commands.getstatusoutput("systemctl start pddf-platform-init.service") + if status: + print("Start pddf-platform-init.service failed %d"%status) + return False + + return True + +def stop_platform_pddf(): + status, output = commands.getstatusoutput("systemctl stop pddf-platform-init.service") + if status: + print("Stop pddf-platform-init.service failed %d"%status) + return False + + return True + +def main(): + pass + +if __name__ == "__main__": + main() + diff --git a/platform/broadcom/sonic-platform-modules-accton/as7726-32x/modules/Makefile b/platform/broadcom/sonic-platform-modules-accton/as7726-32x/modules/Makefile index 5b5e6912c56a..f591a9157a62 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as7726-32x/modules/Makefile +++ b/platform/broadcom/sonic-platform-modules-accton/as7726-32x/modules/Makefile @@ -1,7 +1,11 @@ ifneq ($(KERNELRELEASE),) obj-m:= accton_as7726_32x_cpld.o accton_as7726_32x_fan.o \ - accton_as7726_32x_leds.o accton_as7726_32x_psu.o ym2651y.o - + accton_as7726_32x_leds.o accton_as7726_32x_psu.o ym2651y.o \ + pddf_custom_psu.o + +CFLAGS_pddf_custom_psu.o := -I$(M)/../../../../pddf/i2c/modules/include +KBUILD_EXTRA_SYMBOLS := $(M)/../../../../pddf/i2c/Module.symvers.PDDF + else ifeq (,$(KERNEL_SRC)) #$(error KERNEL_SRC is not defined) diff --git a/platform/broadcom/sonic-platform-modules-accton/as7726-32x/modules/pddf_custom_psu.c b/platform/broadcom/sonic-platform-modules-accton/as7726-32x/modules/pddf_custom_psu.c new file mode 100644 index 000000000000..bf94146167a2 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7726-32x/modules/pddf_custom_psu.c @@ -0,0 +1,207 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "pddf_psu_defs.h" + +ssize_t pddf_get_custom_psu_model_name(struct device *dev, struct device_attribute *da, char *buf); +ssize_t pddf_get_custom_psu_serial_num(struct device *dev, struct device_attribute *da, char *buf); +extern PSU_SYSFS_ATTR_DATA access_psu_model_name; +extern PSU_SYSFS_ATTR_DATA access_psu_serial_num; + +#define MAX_MODEL_NAME 16 +#define MAX_SERIAL_NUMBER 19 + +enum psu_type { + PSU_TYPE_AC_110V, + PSU_TYPE_DC_48V, + PSU_TYPE_DC_12V, + PSU_TYPE_AC_ACBEL_FSF019, + PSU_TYPE_AC_ACBEL_FSF045 +}; + +struct model_name_info { + enum psu_type type; + u8 offset; + u8 length; + u8 chk_length; + char* model_name; +}; + +struct serial_number_info { + enum psu_type type; + u8 offset; + u8 length; + u8 chk_length; + char* serial_number; +}; + +struct model_name_info models[] = { +{PSU_TYPE_AC_110V, 0x20, 8, 8, "YM-2651Y"}, +{PSU_TYPE_DC_48V, 0x20, 8, 8, "YM-2651V"}, +{PSU_TYPE_DC_12V, 0x00, 11, 11, "PSU-12V-750"}, +{PSU_TYPE_AC_ACBEL_FSF019, 0x15, 10, 7, "FSF019-"}, +{PSU_TYPE_AC_ACBEL_FSF045, 0x15, 10, 7, "FSF045-"} + +}; + +struct serial_number_info serials[] = { +{PSU_TYPE_AC_110V, 0x2e, 18, 18, "YM-2651Y"}, +{PSU_TYPE_DC_48V, 0x2e, 18, 18, "YM-2651V"}, +{PSU_TYPE_DC_12V, 0x2e, 18, 18, "PSU-12V-750"}, +{PSU_TYPE_AC_ACBEL_FSF019, 0x2e, 16, 16, "FSF019-"}, +{PSU_TYPE_AC_ACBEL_FSF019, 0x2e, 16, 16, "FSF045-"} + +}; + +struct pddf_psu_data { + char model_name[MAX_MODEL_NAME+1]; + char serial_number[MAX_SERIAL_NUMBER+1]; +}; + + +static int pddf_psu_read_block(struct i2c_client *client, u8 command, u8 *data, + int data_len) +{ + int result = 0; + int retry_count = 10; + + while (retry_count) { + retry_count--; + + result = i2c_smbus_read_i2c_block_data(client, command, data_len, data); + + if (unlikely(result < 0)) { + msleep(10); + continue; + } + + if (unlikely(result != data_len)) { + result = -EIO; + msleep(10); + continue; + } + + result = 0; + break; + } + + return result; +} + +ssize_t pddf_get_custom_psu_serial_num(struct device *dev, struct device_attribute *da, char *buf) +{ + struct i2c_client *client = to_i2c_client(dev); + struct pddf_psu_data data; + int i, status; + + for (i = 0; i < ARRAY_SIZE(models); i++) { + memset(data.serial_number, 0, sizeof(data.serial_number)); + + status = pddf_psu_read_block(client, models[i].offset, + data.model_name, models[i].length); + if (status < 0) { + data.model_name[0] = '\0'; + dev_dbg(&client->dev, "unable to read model name from (0x%x) offset(0x%x)\n", + client->addr, models[i].offset); + return status; + } + else { + data.model_name[models[i].length] = '\0'; + } + + /* Determine if the model name is known, if not, read next index + */ + if (strncmp(data.model_name, models[i].model_name, models[i].chk_length) == 0) { + + status = pddf_psu_read_block(client, serials[i].offset, + data.serial_number, serials[i].length); + if (status < 0) { + data.serial_number[0] = '\0'; + dev_dbg(&client->dev, "unable to read serial num from (0x%x) offset(0x%x)\n", + client->addr, serials[i].offset); + return status; + } + else { + data.serial_number[serials[i].length] = '\0'; + return sprintf(buf, "%s\n", data.serial_number); + } + + return 0; + } + else { + data.serial_number[0] = '\0'; + } + } + + return -ENODATA; + + +} + +ssize_t pddf_get_custom_psu_model_name(struct device *dev, struct device_attribute *da, char *buf) +{ + struct i2c_client *client = to_i2c_client(dev); + struct pddf_psu_data data; + int i, status; + + for (i = 0; i < ARRAY_SIZE(models); i++) { + memset(data.model_name, 0, sizeof(data.model_name)); + + status = pddf_psu_read_block(client, models[i].offset, + data.model_name, models[i].length); + if (status < 0) { + data.model_name[0] = '\0'; + dev_dbg(&client->dev, "unable to read model name from (0x%x) offset(0x%x)\n", + client->addr, models[i].offset); + return status; + } + else { + data.model_name[models[i].length] = '\0'; + } + + /* Determine if the model name is known, if not, read next index + */ + if (strncmp(data.model_name, models[i].model_name, models[i].chk_length) == 0) { + return sprintf(buf, "%s\n", data.model_name); + } + else { + data.model_name[0] = '\0'; + } + } + + return -ENODATA; + +} + +static int __init pddf_custom_psu_init(void) +{ + access_psu_serial_num.show = pddf_get_custom_psu_serial_num; + access_psu_serial_num.do_get = NULL; + + access_psu_model_name.show = pddf_get_custom_psu_model_name; + access_psu_model_name.do_get = NULL; + + return 0; +} + +static void __exit pddf_custom_psu_exit(void) +{ + printk(KERN_ERR "pddf_custom_psu_exit\n"); + return; +} + +MODULE_AUTHOR("Broadcom"); +MODULE_DESCRIPTION("pddf custom psu api"); +MODULE_LICENSE("GPL"); + +module_init(pddf_custom_psu_init); +module_exit(pddf_custom_psu_exit); + diff --git a/platform/broadcom/sonic-platform-modules-accton/as7726-32x/sonic_platform/fan_drawer.py b/platform/broadcom/sonic-platform-modules-accton/as7726-32x/sonic_platform/fan_drawer.py new file mode 100644 index 000000000000..3b9bb607f632 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7726-32x/sonic_platform/fan_drawer.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + + +try: + from sonic_platform_pddf_base.pddf_fan_drawer import PddfFanDrawer +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class FanDrawer(PddfFanDrawer): + """PDDF Platform-Specific Fan-Drawer class""" + + def __init__(self, tray_idx, pddf_data=None, pddf_plugin_data=None): + # idx is 0-based + PddfFanDrawer.__init__(self, tray_idx, pddf_data, pddf_plugin_data) + + # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as7726-32x/sonic_platform/thermal.py b/platform/broadcom/sonic-platform-modules-accton/as7726-32x/sonic_platform/thermal.py index 5b829fc26caa..77d6ec7ae886 100644 --- a/platform/broadcom/sonic-platform-modules-accton/as7726-32x/sonic_platform/thermal.py +++ b/platform/broadcom/sonic-platform-modules-accton/as7726-32x/sonic_platform/thermal.py @@ -11,7 +11,7 @@ class Thermal(PddfThermal): """PDDF Platform-Specific Thermal class""" - def __init__(self, index, pddf_data=None, pddf_plugin_data=None): - PddfThermal.__init__(self, index, pddf_data, pddf_plugin_data) + def __init__(self, index, pddf_data=None, pddf_plugin_data=None, is_psu_thermal=False, psu_index=0): + PddfThermal.__init__(self, index, pddf_data, pddf_plugin_data, is_psu_thermal, psu_index) # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as7726-32x/utils/pddf_post_driver_install.sh b/platform/broadcom/sonic-platform-modules-accton/as7726-32x/utils/pddf_post_driver_install.sh index c33f0b0c9797..484e5c976b4c 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as7726-32x/utils/pddf_post_driver_install.sh +++ b/platform/broadcom/sonic-platform-modules-accton/as7726-32x/utils/pddf_post_driver_install.sh @@ -4,8 +4,8 @@ dis_i2c_ir3570a() { local addr=$1 - i2cset -y 0 $addr 0xE5 0x01 &>/dev/null - i2cset -y 0 $addr 0x12 0x02 &>/dev/null + i2cset -y -a 0 $addr 0xE5 0x01 &>/dev/null + i2cset -y -a 0 $addr 0x12 0x02 &>/dev/null } diff --git a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/classes/fanutil.py b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/classes/fanutil.py index f4807487bf38..519aaa76749d 100644 --- a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/classes/fanutil.py +++ b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/classes/fanutil.py @@ -104,7 +104,7 @@ def _get_fan_node_val(self, fan_num, node_num): return None try: - val_file.close() + val_file.close() except: logging.debug('GET. unable to close file. device_path:%s', device_path) return None @@ -135,7 +135,7 @@ def _set_fan_node_val(self, fan_num, node_num, val): val_file.write(content) try: - val_file.close() + val_file.close() except: logging.debug('GET. unable to close file. device_path:%s', device_path) return None diff --git a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/classes/thermalutil.py b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/classes/thermalutil.py index 65e872c6beb8..2a4afca9b7e0 100644 --- a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/classes/thermalutil.py +++ b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/classes/thermalutil.py @@ -81,11 +81,11 @@ def _get_thermal_node_val(self, thermal_num): return None try: - val_file.close() + val_file.close() except: logging.debug('GET. unable to close file. device_path:%s', device_path) return None - + return int(content) diff --git a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/modules/Makefile b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/modules/Makefile index 906b595883f6..3e3a9ac38a3e 100644 --- a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/modules/Makefile +++ b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/modules/Makefile @@ -1,2 +1,6 @@ -obj-m:=x86-64-accton-as7816-64x-fan.o x86-64-accton-as7816-64x-sfp.o x86-64-accton-as7816-64x-leds.o \ +obj-m:=x86-64-accton-as7816-64x-fan.o x86-64-accton-as7816-64x-leds.o \ x86-64-accton-as7816-64x-psu.o accton_i2c_cpld.o ym2651y.o pddf_custom_fan.o + +CFLAGS_pddf_custom_fan.o := -I$(M)/../../../../pddf/i2c/modules/include +KBUILD_EXTRA_SYMBOLS := $(M)/../../../../pddf/i2c/Module.symvers.PDDF + diff --git a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/modules/pddf_custom_fan.c b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/modules/pddf_custom_fan.c index 2e738d685d75..accd79e1c8a2 100644 --- a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/modules/pddf_custom_fan.c +++ b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/modules/pddf_custom_fan.c @@ -9,8 +9,8 @@ #include #include #include -#include "../../../../pddf/i2c/modules/include/pddf_fan_defs.h" -#include "../../../../pddf/i2c/modules/include/pddf_fan_driver.h" +#include "pddf_fan_defs.h" +#include "pddf_fan_driver.h" extern FAN_SYSFS_ATTR_DATA data_fan1_input; extern FAN_SYSFS_ATTR_DATA data_fan2_input; diff --git a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/service/as7816-64x-platform-init.service b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/service/as7816-64x-platform-init.service new file mode 100644 index 000000000000..7f3b7d87f99f --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/service/as7816-64x-platform-init.service @@ -0,0 +1,17 @@ +[Unit] +Description=Accton AS7816-64X Platform initialization service +Before=pmon.service determine-reboot-cause.service +After=sysinit.target +DefaultDependencies=no + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/local/bin/accton_as7816_64x_util.py install +ExecStop=/usr/local/bin/accton_as7816_64x_util.py clean + +# Resource Limitations +LimitCORE=infinity + +[Install] +WantedBy=multi-user.target diff --git a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/service/as7816-64x-platform-monitor.service b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/service/as7816-64x-platform-monitor.service new file mode 100644 index 000000000000..f361642e69fc --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/service/as7816-64x-platform-monitor.service @@ -0,0 +1,17 @@ +[Unit] +Description=Accton AS7816-64X Platform Monitoring service +Before=pmon.service +After=as7816-64x-platform-init.service +Requires=as7816-64x-platform-init.service +DefaultDependencies=no + +[Service] +ExecStart=/usr/local/bin/accton_as7816_64x_monitor.py +KillSignal=SIGKILL +SuccessExitStatus=SIGKILL + +# Resource Limitations +LimitCORE=infinity + +[Install] +WantedBy=multi-user.target diff --git a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/service/as7816-platform-init.service b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/service/as7816-platform-init.service deleted file mode 100755 index 486ed74f8243..000000000000 --- a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/service/as7816-platform-init.service +++ /dev/null @@ -1,13 +0,0 @@ -[Unit] -Description=Accton AS7816-64X Platform initialization service -Before=pmon.service -After=sysinit.target -DefaultDependencies=no - -[Service] -ExecStartPre=/usr/local/bin/accton_as7816_util.py install -ExecStart=/usr/local/bin/accton_as7816_monitor.py -RemainAfterExit=yes - -[Install] -WantedBy=multi-user.target diff --git a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/sonic_platform/fan_drawer.py b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/sonic_platform/fan_drawer.py new file mode 100644 index 000000000000..3b9bb607f632 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/sonic_platform/fan_drawer.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + + +try: + from sonic_platform_pddf_base.pddf_fan_drawer import PddfFanDrawer +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class FanDrawer(PddfFanDrawer): + """PDDF Platform-Specific Fan-Drawer class""" + + def __init__(self, tray_idx, pddf_data=None, pddf_plugin_data=None): + # idx is 0-based + PddfFanDrawer.__init__(self, tray_idx, pddf_data, pddf_plugin_data) + + # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/sonic_platform/thermal.py b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/sonic_platform/thermal.py index 5b829fc26caa..77d6ec7ae886 100644 --- a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/sonic_platform/thermal.py +++ b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/sonic_platform/thermal.py @@ -11,7 +11,7 @@ class Thermal(PddfThermal): """PDDF Platform-Specific Thermal class""" - def __init__(self, index, pddf_data=None, pddf_plugin_data=None): - PddfThermal.__init__(self, index, pddf_data, pddf_plugin_data) + def __init__(self, index, pddf_data=None, pddf_plugin_data=None, is_psu_thermal=False, psu_index=0): + PddfThermal.__init__(self, index, pddf_data, pddf_plugin_data, is_psu_thermal, psu_index) # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/accton_as7816_monitor.py b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/accton_as7816_64x_monitor.py similarity index 99% rename from platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/accton_as7816_monitor.py rename to platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/accton_as7816_64x_monitor.py index d98cec58d2e5..f3ed87398bc1 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/accton_as7816_monitor.py +++ b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/accton_as7816_64x_monitor.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # Copyright (C) 2017 Accton Technology Corporation # diff --git a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/accton_as7816_util.py b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/accton_as7816_64x_util.py similarity index 80% rename from platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/accton_as7816_util.py rename to platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/accton_as7816_64x_util.py index 525f2786647e..1e9314fb824e 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/accton_as7816_util.py +++ b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/accton_as7816_64x_util.py @@ -48,8 +48,8 @@ if DEBUG == True: - print((sys.argv[0])) - print(('ARGV :', sys.argv[1:] )) + print(sys.argv[0]) + print('ARGV :', sys.argv[1:] ) def main(): @@ -67,7 +67,7 @@ def main(): if DEBUG == True: print(options) print(args) - print((len(sys.argv))) + print(len(sys.argv)) for opt, arg in options: if opt in ('-h', '--help'): @@ -81,9 +81,14 @@ def main(): logging.info('no option') for arg in args: if arg == 'install': - do_install() + do_install() elif arg == 'clean': - do_uninstall() + do_uninstall() + elif arg == 'api': + do_sonic_platform_install() + elif arg == 'api_clean': + do_sonic_platform_clean() + else: show_help() @@ -91,7 +96,7 @@ def main(): return 0 def show_help(): - print(( __doc__ % {'scriptName' : sys.argv[0].split("/")[-1]})) + print( __doc__ % {'scriptName' : sys.argv[0].split("/")[-1]}) sys.exit(0) @@ -114,13 +119,13 @@ def ir3570_check(): else: ret = 0 except Exception as e: - print(("Error on ir3570_check() e:" + str(e))) + print("Error on ir3570_check() e:" + str(e)) return -1 return ret def my_log(txt): if DEBUG == True: - print(("[ROY]"+txt)) + print("[ROY]"+txt) return def log_os_system(cmd, show): @@ -131,7 +136,7 @@ def log_os_system(cmd, show): if status: logging.info('Failed :'+cmd) if show: - print(('Failed :'+cmd)) + print('Failed :'+cmd) return status, output def driver_check(): @@ -298,7 +303,44 @@ def system_ready(): if not device_exist(): return False return True - + +PLATFORM_ROOT_PATH = '/usr/share/sonic/device' +PLATFORM_API2_WHL_FILE_PY3 ='sonic_platform-1.0-py3-none-any.whl' +def do_sonic_platform_install(): + device_path = "{}{}{}{}".format(PLATFORM_ROOT_PATH, '/x86_64-accton_', PROJECT_NAME, '-r0') + SONIC_PLATFORM_BSP_WHL_PKG_PY3 = "/".join([device_path, PLATFORM_API2_WHL_FILE_PY3]) + + #Check API2.0 on py whl file + status, output = log_os_system("pip3 show sonic-platform > /dev/null 2>&1", 0) + if status: + if os.path.exists(SONIC_PLATFORM_BSP_WHL_PKG_PY3): + status, output = log_os_system("pip3 install "+ SONIC_PLATFORM_BSP_WHL_PKG_PY3, 1) + if status: + print("Error: Failed to install {}".format(PLATFORM_API2_WHL_FILE_PY3)) + return status + else: + print("Successfully installed {} package".format(PLATFORM_API2_WHL_FILE_PY3)) + else: + print('{} is not found'.format(PLATFORM_API2_WHL_FILE_PY3)) + else: + print('{} has installed'.format(PLATFORM_API2_WHL_FILE_PY3)) + + return + +def do_sonic_platform_clean(): + status, output = log_os_system("pip3 show sonic-platform > /dev/null 2>&1", 0) + if status: + print('{} does not install, not need to uninstall'.format(PLATFORM_API2_WHL_FILE_PY3)) + + else: + status, output = log_os_system("pip3 uninstall sonic-platform -y", 0) + if status: + print('Error: Failed to uninstall {}'.format(PLATFORM_API2_WHL_FILE_PY3)) + return status + else: + print('{} is uninstalled'.format(PLATFORM_API2_WHL_FILE_PY3)) + + return def do_install(): print("Checking system....") if driver_check() == False: @@ -308,7 +350,7 @@ def do_install(): if FORCE == 0: return status else: - print((PROJECT_NAME.upper()+" drivers detected....")) + print(PROJECT_NAME.upper()+" drivers detected....") ir3570_check() @@ -319,13 +361,15 @@ def do_install(): if FORCE == 0: return status else: - print((PROJECT_NAME.upper()+" devices detected....")) + print(PROJECT_NAME.upper()+" devices detected....") + do_sonic_platform_install() + return def do_uninstall(): print("Checking system....") if not device_exist(): - print((PROJECT_NAME.upper() +" has no device installed....")) + print(PROJECT_NAME.upper() +" has no device installed....") else: print("Removing device....") status = device_uninstall() @@ -334,7 +378,7 @@ def do_uninstall(): return status if driver_check()== False : - print((PROJECT_NAME.upper() +" has no driver installed....")) + print(PROJECT_NAME.upper() +" has no driver installed....") else: print("Removing installed driver....") status = driver_uninstall() @@ -342,6 +386,8 @@ def do_uninstall(): if FORCE == 0: return status + do_sonic_platform_clean() + return def device_exist(): diff --git a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/pddf_post_driver_install.sh b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/pddf_post_driver_install.sh new file mode 100755 index 000000000000..9783c323b606 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/pddf_post_driver_install.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +dis_i2c_ir3570a() +{ + local addr=$1 + + i2cset -y -a 0 $addr 0xE5 0x01 &>/dev/null + i2cset -y -a 0 $addr 0x12 0x02 &>/dev/null +} + + +ir3570_check() +{ + dump=`i2cdump -y 0 0x42 s 0x9a |awk 'END {print $2}'` + if [ $dump -eq 24 ]; then + echo "Disabling i2c function of ir3570a" + dis_i2c_ir3570a 0x4 + fi +} + +ir3570_check + +echo "AS7816 post PDDF driver install completed" diff --git a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/pre_pddf_init.sh b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/pre_pddf_init.sh new file mode 100755 index 000000000000..b13c90f84781 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/pre_pddf_init.sh @@ -0,0 +1,151 @@ +#!/bin/bash + +# Steps to check syseeprom i2c address +modprobe i2c-i801 +modprobe i2c-dev +at_id=false + +(i2cset -y -f 0 0x77 0x1) > /dev/null 2>&1 +(i2cset -y -f 0 0x76 0x4) > /dev/null 2>&1 + + +(i2cget -y -f 0 0x60 0xfd) > /dev/null 2>&1 +if [ $? -eq 0 ]; then + echo "get at_id" + + at_1=$(i2cget -y -f 0 0x60 0xfd) + + if [[ ${at_1} -eq 0x41 ]]; then + echo "get at_1 is 0x41" + at_2=$(i2cget -y -f 0 0x60 0xfe) + + if [[ ${at_2} -eq 0x54 ]]; then + echo "get at_2 is 0x54" + at_id=true + fi + else + cpld_id=$(i2cget -y -f 0 0x60 0x1) #This CPD version that not support to record at_id + if [[ ${cpld_id} -eq 0x5 ]]; then + at_id=true + fi + + fi +fi + +if $at_id ; then + echo "This CPLD is for AT used PSU" + echo "PSU-1 pmbus use parent_bus:0x9, dev_addr:0x58" + echo "PSU-1 eeprom use parent_bus:0x9, dev_addr:0x50" + echo "PSU-2 pmbus use parent_bus:0xa, dev_addr:0x5b" + echo "PSU-2 eeprom use parent_bus:0xa, dev_addr:0x53" + + if [ -f /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf_support ] && \ + [ -f /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json ]; then + #Change the PDDF JSON file + sed -i 's@{ "chn":"0", "dev":"PSU2"},@\ + { "chn":"0", "dev":"PSU1" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + sed -i 's@{ "chn":"1", "dev":"PSU1"}@\ + { "chn":"1", "dev":"PSU2" }@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + + sed -i 's@"topo_info":{ "parent_bus":"0xa", "dev_addr":"0x5b", "dev_type":"psu_pmbus"},@\ + "topo_info": {"parent_bus":"0x9", "dev_addr":"0x58" , "dev_type": "psu_pmbus" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + sed -i 's@{ "attr_name":"psu_model_name", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x9a", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10"},@\ + { "attr_name":"psu_model_name", "attr_devaddr":"0x58" , "attr_devtype":"pmbus", "attr_offset":"0x9a", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + sed -i 's@{ "attr_name":"psu_mfr_id", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10"},@\ + { "attr_name":"psu_mfr_id", "attr_devaddr":"0x58" , "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + sed -i 's@{ "attr_name":"psu_fan_dir", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0xc3", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"5"},@\ + { "attr_name":"psu_fan_dir", "attr_devaddr":"0x58" , "attr_devtype":"pmbus", "attr_offset":"0xc3", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"5" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + sed -i 's@{ "attr_name":"psu_v_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8b", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"},@\ + { "attr_name":"psu_v_out", "attr_devaddr":"0x58" , "attr_devtype":"pmbus", "attr_offset":"0x8b", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + sed -i 's@{ "attr_name":"psu_i_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8c", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"},@\ + { "attr_name":"psu_i_out", "attr_devaddr":"0x58" , "attr_devtype":"pmbus", "attr_offset":"0x8c", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + sed -i 's@{ "attr_name":"psu_p_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x96", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"},@\ + { "attr_name":"psu_p_out", "attr_devaddr":"0x58" , "attr_devtype":"pmbus", "attr_offset":"0x96", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + sed -i 's@{ "attr_name":"psu_fan1_speed_rpm", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x90", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"},@\ + { "attr_name":"psu_fan1_speed_rpm", "attr_devaddr":"0x58" , "attr_devtype":"pmbus", "attr_offset":"0x90", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + sed -i 's@{ "attr_name":"psu_temp1_input", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8d", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}@\ + { "attr_name":"psu_temp1_input", "attr_devaddr":"0x58" , "attr_devtype":"pmbus", "attr_offset":"0x8d", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" }@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + + sed -i 's@"topo_info":{ "parent_bus":"0xa", "dev_addr":"0x53", "dev_type":"psu_eeprom"},@\ + "topo_info": {"parent_bus":"0x9", "dev_addr":"0x50" , "dev_type": "psu_eeprom" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + + + sed -i 's@"topo_info": { "parent_bus":"0x9", "dev_addr":"0x58", "dev_type":"psu_pmbus"},@\ + "topo_info": {"parent_bus":"0xa", "dev_addr":"0x5b", "dev_type": "psu_pmbus" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + + sed -i 's@{ "attr_name":"psu_model_name", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x9a", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10"},@\ + { "attr_name":"psu_model_name", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x9a", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + + sed -i 's@{ "attr_name":"psu_mfr_id", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10"},@\ + { "attr_name":"psu_mfr_id", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + sed -i 's@{ "attr_name":"psu_fan_dir", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0xc3", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"5"},@\ + { "attr_name":"psu_fan_dir", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0xc3", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"5" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + sed -i 's@{ "attr_name":"psu_v_out", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x8b", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"},@\ + { "attr_name":"psu_v_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8b", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + sed -i 's@{ "attr_name":"psu_i_out", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x8c", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"},@\ + { "attr_name":"psu_i_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8c", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + sed -i 's@{ "attr_name":"psu_p_out", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x96", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"},@\ + { "attr_name":"psu_p_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x96", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + sed -i 's@{ "attr_name":"psu_fan1_speed_rpm", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x90", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"},@\ + { "attr_name":"psu_fan1_speed_rpm", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x90", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + sed -i 's@{ "attr_name":"psu_temp1_input", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x8d", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}@\ + { "attr_name":"psu_temp1_input", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8d", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" }@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + + sed -i 's@"topo_info":{ "parent_bus":"0x9", "dev_addr":"0x50", "dev_type":"psu_eeprom"},@\ + "topo_info": {"parent_bus":"0xa", "dev_addr":"0x53", "dev_type": "psu_eeprom" },@g' \ + /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json + sync + fi +fi + +(i2cset -y -f 0 0x76 0x0) > /dev/null 2>&1 +(i2cset -y -f 0 0x77 0x0) > /dev/null 2>&1 +echo "Pre PDDF init steps completed successully" + +#For others, psu i2c bus use below, +#PSU-1 pmbus use "parent_bus":"0xa", "dev_addr":"0x5b" +#PSU-1 eeprom use "parent_bus":"0xa", "dev_addr":"0x53" +#PSU-2 pmbus use "parent_bus":"0x9", "dev_addr":"0x58" +#PSU-2 eeprom use "parent_bus":"0x9", "dev_addr":"0x50" diff --git a/platform/broadcom/sonic-platform-modules-accton/as9716-32d/modules/Makefile b/platform/broadcom/sonic-platform-modules-accton/as9716-32d/modules/Makefile index 7bb532a1f531..d3811d459f04 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as9716-32d/modules/Makefile +++ b/platform/broadcom/sonic-platform-modules-accton/as9716-32d/modules/Makefile @@ -1,8 +1,11 @@ ifneq ($(KERNELRELEASE),) obj-m:= accton_as9716_32d_cpld.o accton_as9716_32d_fan.o \ accton_as9716_32d_leds.o accton_as9716_32d_psu.o accton_i2c_psu.o \ - pddf_custom_psu.o + pddf_custom_psu.o accton_as9716_32d_ioport.o +CFLAGS_pddf_custom_psu.o := -I$(M)/../../../../pddf/i2c/modules/include +KBUILD_EXTRA_SYMBOLS := $(M)/../../../../pddf/i2c/Module.symvers.PDDF + else ifeq (,$(KERNEL_SRC)) #$(error KERNEL_SRC is not defined) diff --git a/platform/broadcom/sonic-platform-modules-accton/as9716-32d/modules/accton_as9716_32d_ioport.c b/platform/broadcom/sonic-platform-modules-accton/as9716-32d/modules/accton_as9716_32d_ioport.c new file mode 100644 index 000000000000..e6d9e8adf373 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as9716-32d/modules/accton_as9716_32d_ioport.c @@ -0,0 +1,180 @@ +/* + * A hwmon driver for the Accton as9926 24d fan + * + * Copyright (C) 2016 Accton Technology Corporation. + * Brandon Chuang + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DRVNAME "as9716_32d_ioport" +#define IOPORT_I2C_MUX_RST 0x50D + +static ssize_t show_i2c_mux_rst(struct device *dev, struct device_attribute *da, + char *buf); +static ssize_t set_i2c_mux_rst(struct device *dev, struct device_attribute *da, + const char *buf, size_t count); + +static struct as9716_ioport_data *data = NULL; + +/* ioport data */ +struct as9716_ioport_data { + struct platform_device *pdev; + struct device *hwmon_dev; + struct mutex update_lock; +}; + +/* sysfs attributes for hwmon + */ +static SENSOR_DEVICE_ATTR(i2c_mux_rst, S_IRUGO | S_IWUSR, show_i2c_mux_rst, + set_i2c_mux_rst, 0); + +static struct attribute *sys_attributes[] = { + &sensor_dev_attr_i2c_mux_rst.dev_attr.attr, + NULL +}; + +static struct attribute_group sys_group = { + .attrs = sys_attributes, +}; + +static ssize_t show_i2c_mux_rst(struct device *dev, struct device_attribute *da, + char *buf) +{ + u8 val = 0; + mutex_lock(&data->update_lock); + val = inb(IOPORT_I2C_MUX_RST); + mutex_unlock(&data->update_lock); + return sprintf(buf, "%d\n", !(val & 0xEF)); +} + +static ssize_t set_i2c_mux_rst(struct device *dev, struct device_attribute *da, + const char *buf, size_t count) +{ + u8 val = 0; + long value = 0; + int status = 0; + + status = kstrtol(buf, 10, &value); + if (status) + return status; + + mutex_lock(&data->update_lock); + + val = inb(IOPORT_I2C_MUX_RST); + if (value) + outb(val & 0xEF, IOPORT_I2C_MUX_RST); + else + outb(val | 0x10, IOPORT_I2C_MUX_RST); + + mutex_unlock(&data->update_lock); + return count; +} + +static int as9716_32d_ioport_probe(struct platform_device *pdev) +{ + int status = -1; + + request_region(IOPORT_I2C_MUX_RST, 1, "mux_rst"); + + /* Register sysfs hooks */ + status = sysfs_create_group(&pdev->dev.kobj, &sys_group); + if (status) { + goto exit; + } + + dev_info(&pdev->dev, "device created\n"); + return 0; + +exit: + sysfs_remove_group(&pdev->dev.kobj, &sys_group); + return status; +} + +static int as9716_32d_ioport_remove(struct platform_device *pdev) +{ + sysfs_remove_group(&pdev->dev.kobj, &sys_group); + release_region(IOPORT_I2C_MUX_RST, 1); + return 0; +} + +static struct platform_driver as9716_32d_ioport_driver = { + .probe = as9716_32d_ioport_probe, + .remove = as9716_32d_ioport_remove, + .driver = { + .name = DRVNAME, + .owner = THIS_MODULE, + }, +}; + +static int __init as9716_32d_ioport_init(void) +{ + int ret; + + data = kzalloc(sizeof(struct as9716_ioport_data), GFP_KERNEL); + if (!data) { + ret = -ENOMEM; + goto alloc_err; + } + + mutex_init(&data->update_lock); + + ret = platform_driver_register(&as9716_32d_ioport_driver); + if (ret < 0) + goto dri_reg_err; + + data->pdev = platform_device_register_simple(DRVNAME, -1, NULL, 0); + if (IS_ERR(data->pdev)) { + ret = PTR_ERR(data->pdev); + goto dev_reg_err; + } + + return 0; + +dev_reg_err: + platform_driver_unregister(&as9716_32d_ioport_driver); +dri_reg_err: + kfree(data); +alloc_err: + return ret; +} + +static void __exit as9716_32d_ioport_exit(void) +{ + platform_device_unregister(data->pdev); + platform_driver_unregister(&as9716_32d_ioport_driver); + kfree(data); +} + +module_init(as9716_32d_ioport_init); +module_exit(as9716_32d_ioport_exit); + +MODULE_AUTHOR("Brandon Chuang "); +MODULE_DESCRIPTION("as9716_32d_ioport driver"); +MODULE_LICENSE("GPL"); diff --git a/platform/broadcom/sonic-platform-modules-accton/as9716-32d/modules/pddf_custom_psu.c b/platform/broadcom/sonic-platform-modules-accton/as9716-32d/modules/pddf_custom_psu.c index 9c4dd7f66131..05f27f6fed97 100644 --- a/platform/broadcom/sonic-platform-modules-accton/as9716-32d/modules/pddf_custom_psu.c +++ b/platform/broadcom/sonic-platform-modules-accton/as9716-32d/modules/pddf_custom_psu.c @@ -9,7 +9,7 @@ #include #include #include -#include "../../../../pddf/i2c/modules/include/pddf_psu_defs.h" +#include "pddf_psu_defs.h" ssize_t pddf_show_custom_psu_v_out(struct device *dev, struct device_attribute *da, char *buf); extern PSU_SYSFS_ATTR_DATA access_psu_v_out; @@ -22,13 +22,9 @@ extern PSU_SYSFS_ATTR_DATA access_psu_serial_num; #define MAX_SERIAL_NUMBER 19 enum psu_type { - PSU_TYPE_AC_110V, - PSU_TYPE_DC_48V, - PSU_TYPE_DC_12V, PSU_TYPE_AC_ACBEL_FSF019, PSU_TYPE_AC_ACBEL_FSH082, PSU_TYPE_YESM1300 - }; struct model_name_info { @@ -48,23 +44,15 @@ struct serial_number_info { }; struct model_name_info models[] = { -{PSU_TYPE_AC_110V, 0x20, 8, 8, "YM-2651Y"}, -{PSU_TYPE_DC_48V, 0x20, 8, 8, "YM-2651V"}, -{PSU_TYPE_DC_12V, 0x00, 11, 11, "PSU-12V-750"}, {PSU_TYPE_AC_ACBEL_FSF019, 0x15, 10, 7, "FSF019-"}, {PSU_TYPE_AC_ACBEL_FSH082, 0x20, 10, 7, "FSH082-"}, {PSU_TYPE_YESM1300, 0x20, 11, 8, "YESM1300"}, - }; struct serial_number_info serials[] = { -{PSU_TYPE_AC_110V, 0x2e, 18, 18, "YM-2651Y"}, -{PSU_TYPE_DC_48V, 0x2e, 18, 18, "YM-2651V"}, -{PSU_TYPE_DC_12V, 0x2e, 18, 18, "PSU-12V-750"}, {PSU_TYPE_AC_ACBEL_FSF019, 0x2e, 16, 16, "FSF019-"}, {PSU_TYPE_AC_ACBEL_FSH082, 0x35, 18, 18, "FSH082-"}, {PSU_TYPE_YESM1300, 0x35, 20, 19, "YESM1300"}, - }; struct pddf_psu_data { diff --git a/platform/broadcom/sonic-platform-modules-accton/as9716-32d/sonic_platform/fan_drawer.py b/platform/broadcom/sonic-platform-modules-accton/as9716-32d/sonic_platform/fan_drawer.py new file mode 100644 index 000000000000..3b9bb607f632 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as9716-32d/sonic_platform/fan_drawer.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + + +try: + from sonic_platform_pddf_base.pddf_fan_drawer import PddfFanDrawer +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class FanDrawer(PddfFanDrawer): + """PDDF Platform-Specific Fan-Drawer class""" + + def __init__(self, tray_idx, pddf_data=None, pddf_plugin_data=None): + # idx is 0-based + PddfFanDrawer.__init__(self, tray_idx, pddf_data, pddf_plugin_data) + + # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as9716-32d/sonic_platform/thermal.py b/platform/broadcom/sonic-platform-modules-accton/as9716-32d/sonic_platform/thermal.py index 5b829fc26caa..77d6ec7ae886 100644 --- a/platform/broadcom/sonic-platform-modules-accton/as9716-32d/sonic_platform/thermal.py +++ b/platform/broadcom/sonic-platform-modules-accton/as9716-32d/sonic_platform/thermal.py @@ -11,7 +11,7 @@ class Thermal(PddfThermal): """PDDF Platform-Specific Thermal class""" - def __init__(self, index, pddf_data=None, pddf_plugin_data=None): - PddfThermal.__init__(self, index, pddf_data, pddf_plugin_data) + def __init__(self, index, pddf_data=None, pddf_plugin_data=None, is_psu_thermal=False, psu_index=0): + PddfThermal.__init__(self, index, pddf_data, pddf_plugin_data, is_psu_thermal, psu_index) # Provide the functions/variables below for which implementation is to be overwritten diff --git a/platform/broadcom/sonic-platform-modules-accton/as9716-32d/utils/pddf_post_driver_install.sh b/platform/broadcom/sonic-platform-modules-accton/as9716-32d/utils/pddf_post_driver_install.sh index 7fbd7f97d03a..61eb4c0fd5c7 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as9716-32d/utils/pddf_post_driver_install.sh +++ b/platform/broadcom/sonic-platform-modules-accton/as9716-32d/utils/pddf_post_driver_install.sh @@ -4,8 +4,8 @@ dis_i2c_ir3570a() { local addr=$1 - i2cset -y 0 $addr 0xE5 0x01 &>/dev/null - i2cset -y 0 $addr 0x12 0x02 &>/dev/null + i2cset -y -a 0 $addr 0xE5 0x01 &>/dev/null + i2cset -y -a 0 $addr 0x12 0x02 &>/dev/null } @@ -18,6 +18,52 @@ ir3570_check() fi } +# Some initializations +#============================================================ +# cpld_reset_stop +#i2cset -y 0 0x65 0x3 0x0 + +# Select the mux channels +i2cset -y 0 0x77 0x1 +i2cset -y 0 0x76 0x4 + +# Diag LED: Boot successfully (SOLID GREEN) --- DO THIS STEP IN POST DEVICE CREATION +# i2cset -y 0 0x60 0x64 4 + +# 10G Merlin Ports +# SetModeXFI() +echo "Set Mux(retimer) to 2x10G XFI." +i2cset -y 0 0x76 0x20 +i2cset -y 0 0x18 0x7 0x3 +i2cset -y 0 0x19 0x7 0x3 +i2cset -y 0 0x1a 0x7 0x3 +i2cset -y 0 0x1b 0x7 0x3 + + +# SetVOD() +#set channel B +i2cset -y 0 0x18 0xff 0x05 +i2cset -y 0 0x19 0xff 0x05 +#write output voltage to 800mV +i2cset -y 0 0x18 0x2d 0x82 +i2cset -y 0 0x19 0x2d 0x82 +#write de-emphasis to -3.5dB +i2cset -y 0 0x18 0x15 0x12 +i2cset -y 0 0x19 0x15 0x12 +#read output voltage +#i2cget -y 0 0x18 0x2d +#i2cget -y 0 0x19 0x2d +#read de-emphasis +#i2cget -y 0 0x18 0x15 +#i2cget -y 0 0x19 0x15 +#clr channel B +i2cset -y 0 0x18 0xff 0x00 +i2cset -y 0 0x19 0xff 0x00 + +# De-select the mux channels which were selected for above configs +i2cset -y 0 0x76 0x0 +i2cset -y 0 0x77 0x0 + ir3570_check echo "AS9716 post PDDF driver install completed" diff --git a/platform/broadcom/sonic-platform-modules-accton/as9716-32d/utils/pre_pddf_init.sh b/platform/broadcom/sonic-platform-modules-accton/as9716-32d/utils/pre_pddf_init.sh new file mode 100755 index 000000000000..7fe01e294f08 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as9716-32d/utils/pre_pddf_init.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Steps to check syseeprom i2c address +modprobe i2c-i801 +modprobe i2c-dev +use_57_eeprom=false +(i2cget -y -f 0 0x57 0x0) > /dev/null 2>&1 +if [ $? -eq 0 ]; then + use_57_eeprom=true +fi + +if $use_57_eeprom ; then + echo "The board has system EEPROM at I2C address 0x57" + if [ -f /usr/share/sonic/device/x86_64-accton_as9716_32d-r0/pddf_support ] && \ + [ -f /usr/share/sonic/device/x86_64-accton_as9716_32d-r0/pddf/pddf-device.json ]; then + # syseeprom is at the i2c address 0x57. Change the PDDF JSON file + sed -i 's@"topo_info": {"parent_bus": "0x0", "dev_addr": "0x56", "dev_type": "24c02"},@\ + "topo_info": {"parent_bus": "0x0", "dev_addr": "0x57", "dev_type": "24c02"},@g' \ + /usr/share/sonic/device/x86_64-accton_as9716_32d-r0/pddf/pddf-device.json + sync + fi +fi diff --git a/platform/broadcom/sonic-platform-modules-accton/common/modules/ym2651y.c b/platform/broadcom/sonic-platform-modules-accton/common/modules/ym2651y.c index 5834b1d4ef8b..20cef5d61a38 100755 --- a/platform/broadcom/sonic-platform-modules-accton/common/modules/ym2651y.c +++ b/platform/broadcom/sonic-platform-modules-accton/common/modules/ym2651y.c @@ -42,7 +42,8 @@ enum chips { YM2651, YM2401, YM2851, - YPEB1200AM + YM1401A, + YPEB1200AM }; /* Each client has this additional data @@ -66,8 +67,9 @@ struct ym2651y_data { u16 fan_duty_cycle[2]; /* Register value */ u8 fan_dir[4]; /* Register value */ u8 pmbus_revision; /* Register value */ + u8 mfr_serial[21]; /* Register value */ u8 mfr_id[10]; /* Register value */ - u8 mfr_model[10]; /* Register value */ + u8 mfr_model[16]; /* Register value */ u8 mfr_revsion[3]; /* Register value */ u16 mfr_vin_min; /* Register value */ u16 mfr_vin_max; /* Register value */ @@ -113,9 +115,11 @@ enum ym2651y_sysfs_attributes { PSU_FAN1_SPEED, PSU_FAN1_DUTY_CYCLE, PSU_PMBUS_REVISION, + PSU_SERIAL_NUM, PSU_MFR_ID, PSU_MFR_MODEL, PSU_MFR_REVISION, + PSU_MFR_SERIAL, PSU_MFR_VIN_MIN, PSU_MFR_VIN_MAX, PSU_MFR_VOUT_MIN, @@ -141,9 +145,11 @@ static SENSOR_DEVICE_ATTR(psu_fan1_speed_rpm, S_IRUGO, show_linear, NULL, PSU_FA static SENSOR_DEVICE_ATTR(psu_fan1_duty_cycle_percentage, S_IWUSR | S_IRUGO, show_linear, set_fan_duty_cycle, PSU_FAN1_DUTY_CYCLE); static SENSOR_DEVICE_ATTR(psu_fan_dir, S_IRUGO, show_ascii, NULL, PSU_FAN_DIRECTION); static SENSOR_DEVICE_ATTR(psu_pmbus_revision, S_IRUGO, show_byte, NULL, PSU_PMBUS_REVISION); +static SENSOR_DEVICE_ATTR(psu_serial_num, S_IRUGO, show_ascii, NULL, PSU_SERIAL_NUM); static SENSOR_DEVICE_ATTR(psu_mfr_id, S_IRUGO, show_ascii, NULL, PSU_MFR_ID); static SENSOR_DEVICE_ATTR(psu_mfr_model, S_IRUGO, show_ascii, NULL, PSU_MFR_MODEL); static SENSOR_DEVICE_ATTR(psu_mfr_revision, S_IRUGO, show_ascii, NULL, PSU_MFR_REVISION); +static SENSOR_DEVICE_ATTR(psu_mfr_serial, S_IRUGO, show_ascii, NULL, PSU_MFR_SERIAL); static SENSOR_DEVICE_ATTR(psu_mfr_vin_min, S_IRUGO, show_linear, NULL, PSU_MFR_VIN_MIN); static SENSOR_DEVICE_ATTR(psu_mfr_vin_max, S_IRUGO, show_linear, NULL, PSU_MFR_VIN_MAX); static SENSOR_DEVICE_ATTR(psu_mfr_vout_min, S_IRUGO, show_linear, NULL, PSU_MFR_VOUT_MIN); @@ -175,9 +181,11 @@ static struct attribute *ym2651y_attributes[] = { &sensor_dev_attr_psu_fan1_duty_cycle_percentage.dev_attr.attr, &sensor_dev_attr_psu_fan_dir.dev_attr.attr, &sensor_dev_attr_psu_pmbus_revision.dev_attr.attr, + &sensor_dev_attr_psu_serial_num.dev_attr.attr, &sensor_dev_attr_psu_mfr_id.dev_attr.attr, &sensor_dev_attr_psu_mfr_model.dev_attr.attr, &sensor_dev_attr_psu_mfr_revision.dev_attr.attr, + &sensor_dev_attr_psu_mfr_serial.dev_attr.attr, &sensor_dev_attr_psu_mfr_vin_min.dev_attr.attr, &sensor_dev_attr_psu_mfr_vin_max.dev_attr.attr, &sensor_dev_attr_psu_mfr_pout_max.dev_attr.attr, @@ -362,14 +370,17 @@ static ssize_t show_ascii(struct device *dev, struct device_attribute *da, } ptr = data->fan_dir; break; + case PSU_MFR_SERIAL: /* psu_mfr_serial */ + ptr = data->mfr_serial+1; /* The first byte is the count byte of string. */ + break; case PSU_MFR_ID: /* psu_mfr_id */ - ptr = data->mfr_id; + ptr = data->mfr_id+1; /* The first byte is the count byte of string. */ break; case PSU_MFR_MODEL: /* psu_mfr_model */ - ptr = data->mfr_model; + ptr = data->mfr_model+1; /* The first byte is the count byte of string. */ break; case PSU_MFR_REVISION: /* psu_mfr_revision */ - ptr = data->mfr_revsion; + ptr = data->mfr_revsion+1; break; default: return 0; @@ -415,7 +426,7 @@ static ssize_t show_vout(struct device *dev, struct device_attribute *da, struct i2c_client *client = to_i2c_client(dev); struct ym2651y_data *data = i2c_get_clientdata(client); - if (data->chip == YM2401) { + if (data->chip == YM2401 || data->chip==YM1401A) { return show_vout_by_mode(dev, da, buf); } else { @@ -493,6 +504,7 @@ static const struct i2c_device_id ym2651y_id[] = { { "ym2651", YM2651 }, { "ym2401", YM2401 }, { "ym2851", YM2851 }, + { "ym1401a",YM1401A}, { "ype1200am", YPEB1200AM }, {} }; @@ -561,8 +573,8 @@ static struct ym2651y_data *ym2651y_update_device(struct device *dev) if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || !data->valid) { - int i, status; - u8 command; + int i, status, length; + u8 command, buf; u8 fan_dir[5] = {0}; struct reg_data_byte regs_byte[] = { {0x19, &data->capability}, {0x20, &data->vout_mode}, @@ -599,6 +611,7 @@ static struct ym2651y_data *ym2651y_update_device(struct device *dev) dev_dbg(&client->dev, "reg %d, err %d\n", regs_byte[i].reg, status); *(regs_byte[i].value) = 0; + goto exit; } else { *(regs_byte[i].value) = status; @@ -614,6 +627,7 @@ static struct ym2651y_data *ym2651y_update_device(struct device *dev) dev_dbg(&client->dev, "reg %d, err %d\n", regs_word[i].reg, status); *(regs_word[i].value) = 0; + goto exit; } else { *(regs_word[i].value) = status; @@ -626,6 +640,7 @@ static struct ym2651y_data *ym2651y_update_device(struct device *dev) if (status < 0) { dev_dbg(&client->dev, "reg %d, err %d\n", command, status); + goto exit; } strncpy(data->fan_dir, fan_dir+1, ARRAY_SIZE(data->fan_dir)-1); @@ -642,12 +657,61 @@ static struct ym2651y_data *ym2651y_update_device(struct device *dev) /* Read mfr_model */ command = 0x9a; - status = ym2651y_read_block(client, command, data->mfr_model, - ARRAY_SIZE(data->mfr_model)-1); - data->mfr_model[ARRAY_SIZE(data->mfr_model)-1] = '\0'; + length = 1; + /* Read first byte to determine the length of data */ + status = ym2651y_read_block(client, command, &buf, length); + if (status < 0) { + dev_dbg(&client->dev, "reg %d, err %d\n", command, status); + goto exit; + } + status = ym2651y_read_block(client, command, data->mfr_model, buf+1); + + if ((buf+1) >= (ARRAY_SIZE(data->mfr_model)-1)) + { + data->mfr_model[ARRAY_SIZE(data->mfr_model)-1] = '\0'; + } + else + data->mfr_model[buf+1] = '\0'; if (status < 0) + { dev_dbg(&client->dev, "reg %d, err %d\n", command, status); + goto exit; + } + + /*YM-1401A PSU doens't support to get serial_num, so ignore it. + *It's vout doesn't support linear, so let it use show_vout_by_mode(). + */ + if(!strncmp("YM-1401A", data->mfr_model+1, strlen("YM-1401A"))) + { + data->chip=YM1401A; + } + else + { + /* Read mfr_serial */ + command = 0x9e; + length = 1; + /* Read first byte to determine the length of data */ + status = ym2651y_read_block(client, command, &buf, length); + if (status < 0) { + dev_dbg(&client->dev, "reg %d, err %d\n", command, status); + goto exit; + } + status = ym2651y_read_block(client, command, data->mfr_serial, buf+1); + + if ((buf+1) >= (ARRAY_SIZE(data->mfr_serial)-1)) + { + data->mfr_serial[ARRAY_SIZE(data->mfr_serial)-1] = '\0'; + } + else + data->mfr_serial[buf+1] = '\0'; + + if (status < 0) + { + dev_dbg(&client->dev, "reg %d, err %d\n", command, status); + goto exit; + } + } /* Read mfr_revsion */ command = 0x9b; @@ -656,12 +720,16 @@ static struct ym2651y_data *ym2651y_update_device(struct device *dev) data->mfr_revsion[ARRAY_SIZE(data->mfr_revsion)-1] = '\0'; if (status < 0) + { dev_dbg(&client->dev, "reg %d, err %d\n", command, status); + goto exit; + } data->last_updated = jiffies; data->valid = 1; } + exit: mutex_unlock(&data->update_lock); return data; diff --git a/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as4630-54pe.install b/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as4630-54pe.install new file mode 100644 index 000000000000..4ba26bed2625 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as4630-54pe.install @@ -0,0 +1 @@ +as4630-54pe/sonic_platform-1.0-py3-none-any.whl usr/share/sonic/device/x86_64-accton_as4630_54pe-r0/pddf diff --git a/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as4630-54pe.postinst b/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as4630-54pe.postinst new file mode 100644 index 000000000000..23bebd3b295c --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as4630-54pe.postinst @@ -0,0 +1,8 @@ +# Special arrangement to make PDDF mode default +# Disable monitor, monitor-fan, monitor-psu (not enabling them would imply they will be disabled by default) +# Enable pddf-platform-monitor +depmod -a +systemctl enable pddf-platform-init.service +systemctl start pddf-platform-init.service +systemctl enable as4630-54pe-pddf-platform-monitor.service +systemctl start as4630-54pe-pddf-platform-monitor.service diff --git a/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7326-56x.postinst b/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7326-56x.postinst index 94fd9cf67df8..035f07e57165 100644 --- a/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7326-56x.postinst +++ b/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7326-56x.postinst @@ -2,24 +2,6 @@ # Disable monitor, monitor-fan, monitor-psu (not enabling them would imply they will be disabled by default) # Enable pddf-platform-monitor -# Steps to check syseeprom i2c address -modprobe i2c-i801 -modprobe i2c-dev -use_57_eeprom=true -(i2cget -y -f 0 0x56 0x0) > /dev/null 2>&1 -if [ $? -eq 0 ]; then - use_57_eeprom=false -fi - -if $use_57_eeprom ; then - echo "The board has system EEPROM at I2C address 0x57" - # syseeprom is at the i2c address 0x57. Change the PDDF JSON file - sed -i 's@"topo_info": {"parent_bus": "0x0", "dev_addr": "0x56", "dev_type": "24c04"},@\ - "topo_info": {"parent_bus": "0x0", "dev_addr": "0x57", "dev_type": "24c02"},@g' \ - /usr/share/sonic/device/x86_64-accton_as7326_56x-r0/pddf/pddf-device.json - sync -fi - depmod -a systemctl enable as7326-platform-handle_mac.service systemctl start as7326-platform-handle_mac.service diff --git a/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7712-32x.install b/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7712-32x.install new file mode 100644 index 000000000000..7236da0e9aec --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7712-32x.install @@ -0,0 +1 @@ +as7712-32x/sonic_platform-1.0-py3-none-any.whl usr/share/sonic/device/x86_64-accton_as7712_32x-r0/pddf diff --git a/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7712-32x.postinst b/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7712-32x.postinst new file mode 100644 index 000000000000..4a393ec7035a --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7712-32x.postinst @@ -0,0 +1,8 @@ +# Special arrangement to make PDDF mode default +# Disable monitor, monitor-fan, monitor-psu (not enabling them would imply they will be disabled by default) +# Enable pddf-platform-monitor +depmod -a +systemctl enable pddf-platform-init.service +systemctl start pddf-platform-init.service +systemctl enable as7712-pddf-platform-monitor.service +systemctl start as7712-pddf-platform-monitor.service diff --git a/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7726-32x.postinst b/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7726-32x.postinst index efe159144770..b1c403623c95 100644 --- a/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7726-32x.postinst +++ b/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7726-32x.postinst @@ -2,6 +2,8 @@ # Disable monitor, monitor-fan, monitor-psu (not enabling them would imply they will be disabled by default) # Enable pddf-platform-monitor depmod -a +systemctl enable as7726-32x-platform-handle_mac.service +systemctl start as7726-32x-platform-handle_mac.service systemctl enable pddf-platform-init.service systemctl start pddf-platform-init.service systemctl enable as7726-32x-pddf-platform-monitor.service diff --git a/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7816-64x.postinst b/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7816-64x.postinst index 4757a3cce27c..872ef60f26f5 100644 --- a/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7816-64x.postinst +++ b/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as7816-64x.postinst @@ -2,153 +2,6 @@ # Disable monitor, monitor-fan, monitor-psu (not enabling them would imply they will be disabled by default) # Enable pddf-platform-monitor -# Steps to check syseeprom i2c address -modprobe i2c-i801 -modprobe i2c-dev -at_id=false - -(i2cset -y -f 0 0x77 0x1) > /dev/null 2>&1 -(i2cset -y -f 0 0x76 0x4) > /dev/null 2>&1 - - -(i2cget -y -f 0 0x60 0xfd) > /dev/null 2>&1 -if [ $? -eq 0 ]; then - echo "get at_id" - - at_1=$(i2cget -y -f 0 0x60 0xfd) - - if [ ${at_1} = '0x41' ]; then - echo "get at_1 is 0x41" - at_2=$(i2cget -y -f 0 0x60 0xfe) - - if [ ${at_2} = '0x54' ]; then - echo "get at_2 is 0x54" - at_id=true - fi - fi - -else - cpld_id=$(i2cget -y -f 1 0x60 0x1) #This CPD version that not support to record at_id - if [ ${cpld_id} = '0x5' ]; then - at_id=true - fi -fi - -if $at_id ; then - echo "This CPLD is for AT used PSU" - echo "PSU-1 pmbus use parent_bus:0x9, dev_addr:0x58" - echo "PSU-1 eeprom use parent_bus:0x9, dev_addr:0x50" - echo "PSU-2 pmbus use parent_bus:0xa, dev_addr:0x5b" - echo "PSU-2 eeprom use parent_bus:0xa, dev_addr:0x53" - - #Change the PDDF JSON file - sed -i 's@{ "chn":"0", "dev":"PSU2"},@\ - { "chn":"0", "dev":"PSU1" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - sed -i 's@{ "chn":"1", "dev":"PSU1"}@\ - { "chn":"1", "dev":"PSU2" }@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - - sed -i 's@"topo_info":{ "parent_bus":"0xa", "dev_addr":"0x5b", "dev_type":"psu_pmbus"},@\ - "topo_info": {"parent_bus":"0x9", "dev_addr":"0x58" , "dev_type": "psu_pmbus" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - sed -i 's@{ "attr_name":"psu_model_name", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x9a", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10"},@\ - { "attr_name":"psu_model_name", "attr_devaddr":"0x58" , "attr_devtype":"pmbus", "attr_offset":"0x9a", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - sed -i 's@{ "attr_name":"psu_mfr_id", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10"},@\ - { "attr_name":"psu_mfr_id", "attr_devaddr":"0x58" , "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - sed -i 's@{ "attr_name":"psu_fan_dir", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0xc3", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"5"},@\ - { "attr_name":"psu_fan_dir", "attr_devaddr":"0x58" , "attr_devtype":"pmbus", "attr_offset":"0xc3", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"5" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - sed -i 's@{ "attr_name":"psu_v_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8b", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"},@\ - { "attr_name":"psu_v_out", "attr_devaddr":"0x58" , "attr_devtype":"pmbus", "attr_offset":"0x8b", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - sed -i 's@{ "attr_name":"psu_i_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8c", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"},@\ - { "attr_name":"psu_i_out", "attr_devaddr":"0x58" , "attr_devtype":"pmbus", "attr_offset":"0x8c", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - sed -i 's@{ "attr_name":"psu_p_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x96", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"},@\ - { "attr_name":"psu_p_out", "attr_devaddr":"0x58" , "attr_devtype":"pmbus", "attr_offset":"0x96", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - sed -i 's@{ "attr_name":"psu_fan1_speed_rpm", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x90", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"},@\ - { "attr_name":"psu_fan1_speed_rpm", "attr_devaddr":"0x58" , "attr_devtype":"pmbus", "attr_offset":"0x90", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - sed -i 's@{ "attr_name":"psu_temp1_input", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8d", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}@\ - { "attr_name":"psu_temp1_input", "attr_devaddr":"0x58" , "attr_devtype":"pmbus", "attr_offset":"0x8d", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" }@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - - sed -i 's@"topo_info":{ "parent_bus":"0xa", "dev_addr":"0x53", "dev_type":"psu_eeprom"},@\ - "topo_info": {"parent_bus":"0x9", "dev_addr":"0x50" , "dev_type": "psu_pmbus" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - - - sed -i 's@"topo_info": { "parent_bus":"0x9", "dev_addr":"0x58", "dev_type":"psu_pmbus"},@\ - "topo_info": {"parent_bus":"0xa", "dev_addr":"0x5b", "dev_type": "psu_pmbus" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - - sed -i 's@{ "attr_name":"psu_model_name", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x9a", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10"},@\ - { "attr_name":"psu_model_name", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x9a", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - - sed -i 's@{ "attr_name":"psu_mfr_id", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10"},@\ - { "attr_name":"psu_mfr_id", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0X99", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"10" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - sed -i 's@{ "attr_name":"psu_fan_dir", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0xc3", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"5"},@\ - { "attr_name":"psu_fan_dir", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0xc3", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"5" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - sed -i 's@{ "attr_name":"psu_v_out", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x8b", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"},@\ - { "attr_name":"psu_v_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8b", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - sed -i 's@{ "attr_name":"psu_i_out", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x8c", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"},@\ - { "attr_name":"psu_i_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8c", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - sed -i 's@{ "attr_name":"psu_p_out", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x96", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"},@\ - { "attr_name":"psu_p_out", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x96", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - sed -i 's@{ "attr_name":"psu_fan1_speed_rpm", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x90", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"},@\ - { "attr_name":"psu_fan1_speed_rpm", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x90", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - sed -i 's@{ "attr_name":"psu_temp1_input", "attr_devaddr":"0x58", "attr_devtype":"pmbus", "attr_offset":"0x8d", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2"}@\ - { "attr_name":"psu_temp1_input", "attr_devaddr":"0x5b", "attr_devtype":"pmbus", "attr_offset":"0x8d", "attr_mask":"0x0", "attr_cmpval":"0xff", "attr_len":"2" }@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync - - sed -i 's@"topo_info":{ "parent_bus":"0x9", "dev_addr":"0x50", "dev_type":"psu_eeprom"},@\ - "topo_info": {"parent_bus":"0xa", "dev_addr":"0x53", "dev_type": "psu_pmbus" },@g' \ - /usr/share/sonic/device/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json - sync -fi - -(i2cset -y -f 0 0x76 0x0) > /dev/null 2>&1 -(i2cset -y -f 0 0x77 0x0) > /dev/null 2>&1 - - -#For other CPLD that use below -#PSU-1 pmbus use "parent_bus":"0x21", "dev_addr":"0x5b" -#PSU-1 eeprom use "parent_bus":"0x21", "dev_addr":"0x53" -#PSU-2 pmbus use "parent_bus":"0x20", "dev_addr":"0x58" -#PSU-2 eeprom use "parent_bus":"0x20", "dev_addr":"0x50" - depmod -a systemctl enable pddf-platform-init.service systemctl start pddf-platform-init.service diff --git a/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as9716-32d.postinst b/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as9716-32d.postinst index 7c3d8822693e..e0905718a849 100644 --- a/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as9716-32d.postinst +++ b/platform/broadcom/sonic-platform-modules-accton/debian/sonic-platform-accton-as9716-32d.postinst @@ -2,25 +2,8 @@ # Disable monitor, monitor-fan, monitor-psu (not enabling them would imply they will be disabled by default) # Enable pddf-platform-monitor -# Steps to check syseeprom i2c address -modprobe i2c-i801 -modprobe i2c-dev -use_57_eeprom=false -(i2cget -y -f 0 0x57 0x0) > /dev/null 2>&1 -if [ $? -eq 0 ]; then - use_57_eeprom=true -fi - -if $use_57_eeprom ; then - echo "The board has system EEPROM at I2C address 0x57" - # syseeprom is at the i2c address 0x57. Change the PDDF JSON file - sed -i 's@"topo_info": {"parent_bus": "0x0", "dev_addr": "0x56", "dev_type": "24c02"},@\ - "topo_info": {"parent_bus": "0x0", "dev_addr": "0x57", "dev_type": "24c02"},@g' \ - /usr/share/sonic/device/x86_64-accton_as9716_32d-r0/pddf/pddf-device.json - sync -fi - depmod -a +#systemctl daemon-reload systemctl enable pddf-platform-init.service systemctl start pddf-platform-init.service systemctl enable as9716-32d-pddf-platform-monitor.service diff --git a/platform/broadcom/sonic-platform-modules-arista b/platform/broadcom/sonic-platform-modules-arista index 376e6a22debb..9b61f8bdbe65 160000 --- a/platform/broadcom/sonic-platform-modules-arista +++ b/platform/broadcom/sonic-platform-modules-arista @@ -1 +1 @@ -Subproject commit 376e6a22debbc5880ee91fd02c0c2023d347884e +Subproject commit 9b61f8bdbe657e8798bc40c09039a6e0a7f5d150 diff --git a/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-dx010.init b/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-dx010.init index 21587bfbd3fd..12f8fc61f2ea 100644 --- a/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-dx010.init +++ b/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-dx010.init @@ -61,19 +61,19 @@ start) [ $found -eq 0 ] && echo "cannot find iSMT" && exit 1 i2cset -y ${devnum} 0x70 0x10 0x00 0x01 i - sleep 1 + sleep 0.1 # Attach PCA9548 0x71 Channel Extender for Main Board echo pca9548 0x71 > /sys/bus/i2c/devices/i2c-${devnum}/new_device - sleep 1 + sleep 0.1 # Attach PCA9548 0x73 Channel Extender for CPU Board echo pca9548 0x73 > /sys/bus/i2c/devices/i2c-${devnum}/new_device - sleep 1 + sleep 0.1 # Attach PCA9548 0x77 Channel Extender for Fan's EEPROMs echo pca9548 0x77 > /sys/bus/i2c/devices/i2c-${devnum}/new_device - sleep 1 + sleep 0.1 # Attach syseeprom echo 24lc64t 0x50 > /sys/bus/i2c/devices/i2c-12/new_device @@ -106,7 +106,7 @@ start) echo pca9505 0x20 > /sys/bus/i2c/devices/i2c-17/new_device modprobe dx010_cpld - sleep 2 + sleep 1 # Export platform gpio sysfs export_gpio 10 "in" # Fan 1 present @@ -148,15 +148,14 @@ start) done bus_en=8 - sleep 1 cfg_r=`i2cget -y -f 8 0x60 0xD1` ((cfg_w=$cfg_r+$bus_en)) i2cset -y -f 8 0x60 0xD1 $cfg_w - sleep 1 + sleep 0.1 cfg_r=`i2cget -y -f 9 0x20 0xD1` ((cfg_w=$cfg_r+$bus_en)) i2cset -y -f 9 0x20 0xD1 $cfg_w - sleep 1 + sleep 0.1 /bin/sh /usr/local/bin/platform_api_mgnt.sh init diff --git a/platform/broadcom/sonic-platform-modules-cel/services/platform_api/sonic_platform/eeprom.py b/platform/broadcom/sonic-platform-modules-cel/services/platform_api/sonic_platform/eeprom.py index 7756c0f2f839..1e06e7b80e62 100644 --- a/platform/broadcom/sonic-platform-modules-cel/services/platform_api/sonic_platform/eeprom.py +++ b/platform/broadcom/sonic-platform-modules-cel/services/platform_api/sonic_platform/eeprom.py @@ -45,7 +45,7 @@ def _parse_output(self, decode_output): for line in lines: try: match = re.search( - '(0x[0-9a-fA-F]{2})([\s]+[\S]+[\s]+)([\S]+)', line) + '(0x[0-9a-fA-F]{2})([\s]+[\S]+[\s]+)(.*$)', line) if match is not None: idx = match.group(1) value = match.group(3).rstrip('\0') diff --git a/platform/broadcom/sonic-platform-modules-dell/common/ipmihelper.py b/platform/broadcom/sonic-platform-modules-dell/common/ipmihelper.py index d95329c40de2..3908f90bdad4 100644 --- a/platform/broadcom/sonic-platform-modules-dell/common/ipmihelper.py +++ b/platform/broadcom/sonic-platform-modules-dell/common/ipmihelper.py @@ -90,7 +90,10 @@ def get_twos_complement(val, bits): R_exp = get_twos_complement((factors[6] & 0xF0) >> 4, 4) B_exp = get_twos_complement(factors[6] & 0x0F, 4) - converted_reading = ((M * raw_value) + (B * 10**B_exp)) * 10**R_exp + if R_exp < 0: + converted_reading = ((M * raw_value) + (B * 10**B_exp)) / 10**(-R_exp) + else: + converted_reading = ((M * raw_value) + (B * 10**B_exp)) * 10**R_exp return True, converted_reading diff --git a/platform/broadcom/sonic-platform-modules-dell/common/onie_stage_fwpkg b/platform/broadcom/sonic-platform-modules-dell/common/onie_stage_fwpkg index 1ceaf32fe8c1..dcc74a09a91e 100755 --- a/platform/broadcom/sonic-platform-modules-dell/common/onie_stage_fwpkg +++ b/platform/broadcom/sonic-platform-modules-dell/common/onie_stage_fwpkg @@ -45,7 +45,7 @@ function show_help_and_exit() echo " " echo " Available options:" echo " -h, -? : getting this help" - echo " -o [fwpkg] : stages the firmware update package" + echo " -a [fwpkg] : stages the firmware update package" exit 0 } diff --git a/platform/broadcom/sonic-platform-modules-dell/common/sonic_platform/hwaccess.py b/platform/broadcom/sonic-platform-modules-dell/common/sonic_platform/hwaccess.py index 373f71bdd5bf..642a6ddc6fc8 100644 --- a/platform/broadcom/sonic-platform-modules-dell/common/sonic_platform/hwaccess.py +++ b/platform/broadcom/sonic-platform-modules-dell/common/sonic_platform/hwaccess.py @@ -39,7 +39,10 @@ def pci_set_value(resource, val, offset): # Read I2C device def i2c_get(bus, i2caddr, ofs): - return int(subprocess.check_output(['/usr/sbin/i2cget', '-y', str(bus), str(i2caddr), str(ofs)]), 16) + try: + return int(subprocess.check_output(['/usr/sbin/i2cget', '-y', str(bus), str(i2caddr), str(ofs)]), 16) + except (FileNotFoundError, subprocess.CalledProcessError): + return -1 def io_reg_read(io_resource, offset): fd = os.open(io_resource, os.O_RDONLY) diff --git a/platform/broadcom/sonic-platform-modules-dell/debian/platform-modules-s6100.install b/platform/broadcom/sonic-platform-modules-dell/debian/platform-modules-s6100.install index cac4ffbf65db..4770ac7c2caf 100644 --- a/platform/broadcom/sonic-platform-modules-dell/debian/platform-modules-s6100.install +++ b/platform/broadcom/sonic-platform-modules-dell/debian/platform-modules-s6100.install @@ -1,6 +1,6 @@ s6100/scripts/iom_power_*.sh usr/local/bin s6100/scripts/s6100_platform.sh usr/local/bin -s6100/scripts/s6100_i2c_enumeration.sh usr/local/bin +s6100/scripts/s6100_platform_startup.sh usr/local/bin s6100/scripts/s6100_bitbang_reset.sh usr/local/bin s6100/scripts/pcisysfs.py usr/bin common/dell_i2c_utils.sh usr/local/bin @@ -33,7 +33,7 @@ s6100/systemd/s6100-ssd-monitor.service etc/systemd/system s6100/systemd/s6100-ssd-monitor.timer etc/systemd/system s6100/systemd/s6100-ssd-upgrade-status.service etc/systemd/system s6100/systemd/s6100-reboot-cause.service etc/systemd/system -s6100/systemd/s6100-i2c-enumerate.service etc/systemd/system +s6100/systemd/s6100-platform-startup.service etc/systemd/system s6100/scripts/s6100_serial_getty_monitor etc/monit/conf.d common/fw-updater usr/local/bin common/onie_mode_set usr/local/bin diff --git a/platform/broadcom/sonic-platform-modules-dell/n3248pxe/modules/dell_n3248pxe_platform.c b/platform/broadcom/sonic-platform-modules-dell/n3248pxe/modules/dell_n3248pxe_platform.c index 1c5d07bffaba..5fb106f186b3 100644 --- a/platform/broadcom/sonic-platform-modules-dell/n3248pxe/modules/dell_n3248pxe_platform.c +++ b/platform/broadcom/sonic-platform-modules-dell/n3248pxe/modules/dell_n3248pxe_platform.c @@ -853,6 +853,41 @@ static ssize_t fan_led_store(struct device *dev, struct device_attribute *devatt return count; } +static ssize_t watchdog_show(struct device *dev, + struct device_attribute *devattr, char *buf) +{ + s32 ret; + u8 data = 0; + struct cpld_platform_data *pdata = dev->platform_data; + + ret = i2c_smbus_read_byte_data(pdata[cpu_cpld].client, 0x7); + if (ret < 0) + return sprintf(buf, "read error"); + data = ret; + + return sprintf(buf, "%x\n", data); +} + +static ssize_t watchdog_store(struct device *dev, struct device_attribute *devattr, const char *buf, size_t count) +{ + s32 ret, err; + unsigned long val; + u8 data = 0; + struct cpld_platform_data *pdata = dev->platform_data; + + err = kstrtoul(buf, 10, &val); + if (err) + return err; + + if (data) + { + ret = i2c_smbus_write_byte_data(pdata[cpu_cpld].client, 0x7, data); + if (ret < 0) + return ret; + } + + return count; +} static ssize_t power_good_show(struct device *dev, struct device_attribute *devattr, char *buf) @@ -947,6 +982,7 @@ static DEVICE_ATTR_RO(psu1_prs); static DEVICE_ATTR_RO(psu0_status); static DEVICE_ATTR_RO(psu1_status); static DEVICE_ATTR_RW(system_led); +static DEVICE_ATTR_RW(watchdog); static DEVICE_ATTR_RW(locator_led); static DEVICE_ATTR_RW(power_led); static DEVICE_ATTR_RW(master_led); @@ -988,6 +1024,7 @@ static struct attribute *n3248pxe_cpld_attrs[] = { &dev_attr_psu0_status.attr, &dev_attr_psu1_status.attr, &dev_attr_system_led.attr, + &dev_attr_watchdog.attr, &dev_attr_locator_led.attr, &dev_attr_power_led.attr, &dev_attr_master_led.attr, diff --git a/platform/broadcom/sonic-platform-modules-dell/n3248pxe/sonic_platform/watchdog.py b/platform/broadcom/sonic-platform-modules-dell/n3248pxe/sonic_platform/watchdog.py index 876aa4beda51..00277c2872f6 100644 --- a/platform/broadcom/sonic-platform-modules-dell/n3248pxe/sonic_platform/watchdog.py +++ b/platform/broadcom/sonic-platform-modules-dell/n3248pxe/sonic_platform/watchdog.py @@ -11,7 +11,6 @@ try: import ctypes - import subprocess from sonic_platform_base.watchdog_base import WatchdogBase except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -29,43 +28,53 @@ class Watchdog(WatchdogBase): Abstract base class for interfacing with a hardware watchdog module """ - TIMERS = [15,20,30,40,50,60,65,70] + TIMERS = [15,20,30,40,50,60,65,70,80,100,120,140,160,180,210,240] armed_time = 0 timeout = 0 CLOCK_MONOTONIC = 1 def __init__(self): + WatchdogBase.__init__(self) self._librt = ctypes.CDLL('librt.so.1', use_errno=True) self._clock_gettime = self._librt.clock_gettime self._clock_gettime.argtypes=[ctypes.c_int, ctypes.POINTER(_timespec)] + self.watchdog_reg = "watchdog" - def _get_command_result(self, cmdline): + def _get_cpld_register(self, reg_name): + # On successful read, returns the value read from given + # reg name and on failure rethrns 'ERR' + cpld_dir = "/sys/devices/platform/dell-n3248pxe-cpld.0/" + cpld_reg_file = cpld_dir + '/' + reg_name try: - proc = subprocess.Popen(cmdline.split(), stdout=subprocess.PIPE, - stderr=subprocess.STDOUT) - stdout = proc.communicate()[0] - proc.wait() - result = stdout.rstrip('\n') - except OSError: - result = None + with open(cpld_reg_file, 'r') as fd: + rv = fd.read() + except IOError : return 'ERR' + return rv.strip('\r\n').lstrip(' ') - return result + def _set_cpld_register(self, reg_name, value): + # On successful write, returns the value will be written on + # reg_name and on failure returns 'ERR' + + cpld_dir = "/sys/devices/platform/dell-n3248pxe-cpld.0/" + cpld_reg_file = cpld_dir + '/' + reg_name + + try: + with open(cpld_reg_file, 'w') as fd: + rv = fd.write(str(value)) + except Exception: + rv = 'ERR' + + return rv def _get_reg_val(self): - # 0x31 = CPLD I2C Base Address - # 0x07 = Watchdog Function Register - value = self._get_command_result("/usr/sbin/i2cget -y 601 0x31 0x07") - if not value: - return None - else: - return int(value, 16) + value = self._get_cpld_register(self.watchdog_reg).strip() + if value == 'ERR': return False + + return int(value,16) def _set_reg_val(self,val): - # 0x31 = CPLD I2C Base Address - # 0x07 = Watchdog Function Register - value = self._get_command_result("/usr/sbin/i2cset -y 601 0x31 0x07 %s" - % (val)) + value = self._set_cpld_register(self.watchdog_reg, val) return value def _get_time(self): @@ -93,7 +102,7 @@ def arm(self, seconds): """ timer_offset = -1 for key,timer_seconds in enumerate(self.TIMERS): - if seconds <= timer_seconds: + if seconds > 0 and seconds <= timer_seconds: timer_offset = key seconds = timer_seconds break @@ -101,40 +110,29 @@ def arm(self, seconds): if timer_offset == -1: return -1 - # Extracting 5th to 7th bits for WD timer values - # 000 - 15 sec - # 001 - 20 sec - # 010 - 30 sec - # 011 - 40 sec - # 100 - 50 sec - # 101 - 60 sec - # 110 - 65 sec - # 111 - 70 sec + # Extracting 5th to 8th bits for WD timer values reg_val = self._get_reg_val() - wd_timer_offset = (reg_val >> 4) & 0x7 + wd_timer_offset = (reg_val >> 4) & 0xF if wd_timer_offset != timer_offset: - # Setting 5th to 7th bits + # Setting 5th to 8th bits # value from timer_offset self.disarm() - self._set_reg_val(reg_val | (timer_offset << 4)) + self._set_reg_val((reg_val & 0x0F) | (timer_offset << 4)) if self.is_armed(): # Setting last bit to WD Timer punch # Last bit = WD Timer punch self._set_reg_val(reg_val & 0xFE) - self.armed_time = self._get_time() - self.timeout = seconds else: # Setting 4th bit to enable WD # 4th bit = Enable WD reg_val = self._get_reg_val() self._set_reg_val(reg_val | 0x8) - self.armed_time = self._get_time() - self.timeout = seconds - + self.armed_time = self._get_time() + self.timeout = seconds return seconds def disarm(self): @@ -207,4 +205,3 @@ def get_remaining_time(self): return self.timeout - diff_time return 0 - diff --git a/platform/broadcom/sonic-platform-modules-dell/n3248te/modules/dell_n3248te_platform.c b/platform/broadcom/sonic-platform-modules-dell/n3248te/modules/dell_n3248te_platform.c index f7a13c2a739f..92ee30af312f 100644 --- a/platform/broadcom/sonic-platform-modules-dell/n3248te/modules/dell_n3248te_platform.c +++ b/platform/broadcom/sonic-platform-modules-dell/n3248te/modules/dell_n3248te_platform.c @@ -572,7 +572,7 @@ static ssize_t system_led_show(struct device *dev, struct device_attribute *deva if (ret < 0) return sprintf(buf, "read error"); - data = (u8)(ret & 0x30) >> 5; + data = (u8)(ret & 0x30) >> 4; switch (data) { @@ -878,6 +878,42 @@ static ssize_t fan_led_store(struct device *dev, struct device_attribute *devatt return count; } +static ssize_t watchdog_show(struct device *dev, + struct device_attribute *devattr, char *buf) +{ + s32 ret; + u8 data = 0; + struct cpld_platform_data *pdata = dev->platform_data; + + ret = i2c_smbus_read_byte_data(pdata[cpu_cpld].client, 0x7); + if (ret < 0) + return sprintf(buf, "read error"); + data = ret; + + return sprintf(buf, "%x\n", data); +} + +static ssize_t watchdog_store(struct device *dev, struct device_attribute *devattr, const char *buf, size_t count) +{ + s32 ret, err; + unsigned long val; + u8 data = 0; + struct cpld_platform_data *pdata = dev->platform_data; + + err = kstrtoul(buf, 10, &val); + if (err) + return err; + + data = (u8) val; + if (data) + { + ret = i2c_smbus_write_byte_data(pdata[cpu_cpld].client, 0x7, data); + if (ret < 0) + return ret; + } + + return count; +} static ssize_t power_good_show(struct device *dev, struct device_attribute *devattr, char *buf) @@ -974,6 +1010,7 @@ static DEVICE_ATTR_RO(psu1_prs); static DEVICE_ATTR_RO(psu0_status); static DEVICE_ATTR_RO(psu1_status); static DEVICE_ATTR_RW(system_led); +static DEVICE_ATTR_RW(watchdog); static DEVICE_ATTR_RW(locator_led); static DEVICE_ATTR_RW(power_led); static DEVICE_ATTR_RW(master_led); @@ -1017,6 +1054,7 @@ static struct attribute *n3248te_cpld_attrs[] = { &dev_attr_psu0_status.attr, &dev_attr_psu1_status.attr, &dev_attr_system_led.attr, + &dev_attr_watchdog.attr, &dev_attr_locator_led.attr, &dev_attr_power_led.attr, &dev_attr_master_led.attr, diff --git a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/chassis.py b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/chassis.py index 9686892f6f2a..ddc254881ca3 100644 --- a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/chassis.py +++ b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/chassis.py @@ -19,7 +19,6 @@ from sonic_platform.psu import Psu from sonic_platform.thermal import Thermal from sonic_platform.watchdog import Watchdog - from sonic_platform.fan import Fan from sonic_platform.fan_drawer import FanDrawer except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -62,6 +61,12 @@ class Chassis(ChassisBase): 53: 24, 54: 25, } + SYSTEM_LED_COLORS = { + "green", + "blink_green", + "yellow", + "blink_yellow" + } def __init__(self): ChassisBase.__init__(self) @@ -89,8 +94,6 @@ def __init__(self): self._watchdog = Watchdog() self._num_sfps = 54 self._num_fans = MAX_N3248TE_FANTRAY * MAX_N3248TE_FAN - self._fan_list = [Fan(i, j) for i in range(MAX_N3248TE_FANTRAY) \ - for j in range(MAX_N3248TE_FAN)] for k in range(MAX_N3248TE_FANTRAY): fandrawer = FanDrawer(k) self._fan_drawer_list.append(fandrawer) @@ -105,6 +108,7 @@ def __init__(self): self._global_port_pres_dict[port_num] = '1' if presence else '0' self._watchdog = Watchdog() + self.status_led_reg = "system_led" self.locator_led_reg = "locator_led" self.LOCATOR_LED_ON = "blink_blue" self.LOCATOR_LED_OFF = self.STATUS_LED_COLOR_OFF @@ -114,7 +118,8 @@ def _get_cpld_register(self, reg_name): # reg name and on failure rethrns 'ERR' cpld_reg_file = self.CPLD_DIR + '/' + reg_name try: - rv = open(cpld_reg_file, 'r').read() + with open(cpld_reg_file, 'r') as fd: + rv = fd.read() except IOError : return 'ERR' return rv.strip('\r\n').lstrip(' ') @@ -125,7 +130,6 @@ def _set_cpld_register(self, reg_name, value): cpld_reg_file = self.CPLD_DIR + '/' + reg_name if (not os.path.isfile(cpld_reg_file)): - #print "open error" return rv try: @@ -136,6 +140,40 @@ def _set_cpld_register(self, reg_name, value): return rv + def get_status_led(self): + """ + Gets the current system LED color + + Returns: + A string that represents the supported color + """ + + color = self._get_cpld_register(self.status_led_reg) + + if color not in list(self.SYSTEM_LED_COLORS): + return self.sys_ledcolor + + return color + + def initizalize_system_led(self): + self.sys_ledcolor = "green" + + def set_status_led(self,color): + """ + Set system LED status based on the color type passed in the argument. + Argument: Color to be set + Returns: + bool: True is specified color is set, Otherwise return False + """ + + if color not in list(self.SYSTEM_LED_COLORS): + return False + if(not self._set_cpld_register(self.status_led_reg, color)): + return False + + self.sys_ledcolor = color + return True + # check for this event change for sfp / do we need to handle timeout/sleep def get_change_event(self, timeout=0): @@ -193,7 +231,7 @@ def get_name(self): Returns: string: The name of the chassis """ - return self._eeprom.modelstr().decode() + return self._eeprom.modelstr() def get_presence(self): """ @@ -348,3 +386,28 @@ def get_locator_led(self): return self.LOCATOR_LED_OFF else: return self.LOCATOR_LED_OFF + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + Returns: + integer: The 1-based relative physical position in parent + device or -1 if cannot determine the position + """ + return -1 + + def is_replaceable(self): + """ + Indicate whether Chassis is replaceable. + Returns: + bool: True if it is replaceable. + """ + return False + def get_revision(self): + """ + Retrives the hardware revision of the device + + Returns: + string: Revision value of device + """ + return self._eeprom.revision_str() diff --git a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/component.py index ec0dba2ab5b9..ccf90f881b0b 100644 --- a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/component.py +++ b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/component.py @@ -80,3 +80,52 @@ def install_firmware(self, image_path): A boolean, True if install was successful, False if not """ return False + + def get_presence(self): + """ + Retrieves the presence of the component + Returns: + bool: True if present, False if not + """ + return True + + def get_model(self): + """ + Retrieves the part number of the component + Returns: + string: Part number of component + """ + return 'NA' + + def get_serial(self): + """ + Retrieves the serial number of the component + Returns: + string: Serial number of component + """ + return 'NA' + + def get_status(self): + """ + Retrieves the operational status of the component + Returns: + bool: True if component is operating properly, False if not + """ + return True + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + Returns: + integer: The 1-based relative physical position in parent + device or -1 if cannot determine the position + """ + return -1 + + def is_replaceable(self): + """ + Indicate whether component is replaceable. + Returns: + bool: True if it is replaceable. + """ + return False diff --git a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/eeprom.py b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/eeprom.py index 75584cbc80b0..1c1c5c6df07a 100644 --- a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/eeprom.py +++ b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/eeprom.py @@ -1,7 +1,7 @@ #!/usr/bin/env python ############################################################################# -# DellEmc Z9332F +# DellEmc N3248TE # # Platform and model specific eeprom subclass, inherits from the base class, # and provides the followings: @@ -11,7 +11,6 @@ try: import os.path from sonic_eeprom import eeprom_tlvinfo - import binascii except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -75,9 +74,9 @@ def base_mac_addr(self, e): (is_valid, t) = self.get_tlv_field( self.eeprom_data, self._TLV_CODE_MAC_BASE) if not is_valid or t[1] != 6: - return super(eeprom_tlvinfo.TlvInfoDecoder, self).switchaddrstr(t) + return super(TlvInfoDecoder, self).switchaddrstr(e) - return ":".join([binascii.b2a_hex(T) for T in t[2]]) + return ":".join(["{:02x}".format(T) for T in t[2]]).upper() def modelstr(self): """ @@ -88,7 +87,7 @@ def modelstr(self): if not is_valid: return "N/A" - return results[2] + return results[2].decode('ascii') def part_number_str(self): """ @@ -99,7 +98,7 @@ def part_number_str(self): if not is_valid: return "N/A" - return results[2] + return results[2].decode('ascii') def serial_str(self): """ @@ -110,7 +109,7 @@ def serial_str(self): if not is_valid: return "N/A" - return results[2] + return results[2].decode('ascii') def revision_str(self): """ @@ -121,7 +120,7 @@ def revision_str(self): if not is_valid: return "N/A" - return results[2] + return results[2].decode('ascii') def system_eeprom_info(self): """ @@ -130,5 +129,3 @@ def system_eeprom_info(self): found in the system EEPROM. """ return self.eeprom_tlv_dict - - diff --git a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/fan.py b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/fan.py index 873ae4163a84..e82dc91cc686 100644 --- a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/fan.py +++ b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/fan.py @@ -1,7 +1,7 @@ #!/usr/bin/env python ######################################################################## -# DellEMC Z9332F +# DellEMC N3248TE # # Module contains an implementation of SONiC Platform Base API and # provides the Fans' information which are available in the platform. @@ -26,15 +26,19 @@ def __init__(self, fantray_index=0, fan_index=0, psu_fan=False, dependency=None) self.presence_reg = "fan{}_prs".format(fantray_index) self.dir_reg = "fan{}_dir".format(fantray_index) self.rpm_file = "/sys/bus/i2c/devices/7-002c/fan{}_input".format(fantray_index+1) + self.status_file = "/sys/bus/i2c/devices/7-002c/fan{}_fault".format(fantray_index+1) self.eeprom = "/sys/bus/i2c/devices/{}-0050/eeprom".format(15 + fantray_index) self.fantray_index = fantray_index + self.fan_index = fan_index else: - self.presence_reg = "psu{}_prs".format(fantray_index) - self.psu_index = fantray_index + self.psu_index = fan_index - 1 self.dependancy = dependency + self.presence_reg = "psu{}_prs".format(self.psu_index) + self.status_reg = "psu{}_status".format(self.psu_index) self.dir_reg = "" - self.dps_hwmon = "/sys/bus/i2c/devices/{}-005e/hwmon/".format(fantray_index+10) - self.eeprom = "/sys/bus/i2c/devices/{}-0056/eeprom".format(10 + fantray_index) + self.dps_hwmon = "/sys/bus/i2c/devices/{}-005e/hwmon/".format(self.psu_index + 10) + self.eeprom = "/sys/bus/i2c/devices/{}-0056/eeprom".format(self.psu_index + 10) + self.fan_index = fan_index self.max_speed = 0 def _get_cpld_register(self, reg_name): @@ -43,7 +47,8 @@ def _get_cpld_register(self, reg_name): cpld_dir = "/sys/devices/platform/dell-n3248te-cpld.0/" cpld_reg_file = cpld_dir + '/' + reg_name try: - buf = open(cpld_reg_file, 'r').read() + with open(cpld_reg_file, 'r')as fd: + buf = fd.read() except (IOError, AttributeError): return 'ERR' return buf.strip('\r\n').lstrip(' ') @@ -55,9 +60,9 @@ def get_name(self): String: The name of the device """ if self.is_psu_fan: - return "PSU{} Fan".format(self.psu_index) + return "PSU{} Fan".format(self.psu_index+1) else: - return "Fan{}".format(self.fantray_index+1) + return "FanTray{}-Fan{}".format(self.fantray_index+1, self.fan_index+1) def get_model(self): """ @@ -95,6 +100,8 @@ def get_presence(self): return False if int(presence,0) == 1: return True + else: + return False def get_status(self): """ @@ -102,7 +109,20 @@ def get_status(self): Returns: bool: True if FAN is operating properly, False if not """ - return True + if not self.is_psu_fan: + status = open(self.status_file, "rb").read() + if int(status, 0) == 1: + return False + else: + return True + else: + status = self._get_cpld_register(self.status_reg) + if status == 'ERR': + return False + if int(status, 0) == 1: + return True + else: + return False def get_direction(self): """ @@ -118,7 +138,7 @@ def get_direction(self): """ if not self.is_psu_fan: val = self._get_cpld_register(self.dir_reg) - direction = 'Exhaust' if val == 'F2B' else 'Intake' + direction = 'exhaust' if val == 'F2B' else 'intake' if direction == 'ERR': return None else: @@ -126,7 +146,7 @@ def get_direction(self): val = open(self.eeprom, "rb").read()[0xe1:0xe8] except Exception: return None - direction = 'Exhaust' if val == 'FORWARD' else 'Intake' + direction = 'exhaust' if val == 'FORWARD' else 'intake' return direction def get_speed(self): @@ -167,3 +187,68 @@ def get_speed_rpm(self): except Exception: return None return fan_speed + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + Returns: + integer: The 1-based relative physical position in parent + device or -1 if cannot determine the position + """ + return self.fan_index + + def is_replaceable(self): + """ + Indicate whether Fan is replaceable. + Returns: + bool: True if it is replaceable. + """ + return False + + def get_speed_tolerance(self): + """ + Retrieves the speed tolerance of the fan + Returns: + An integer, the percentage of variance from target speed which is + considered tolerable + """ + if self.get_presence(): + # The tolerance value is fixed as 20% for all the DellEMC platforms + tolerance = 20 + else: + tolerance = 0 + + return tolerance + + def set_status_led(self, color): + """ + Set led to expected color + Args: + color: A string representing the color with which to set the + fan status LED + Returns: + bool: True if set success, False if fail. + """ + # N3248TE has led only on FanTray and not available for seperate fans + return True + + def get_status_led(self): + """ + Gets the current system LED color + + Returns: + A string that represents the supported color + """ + + return None + + def get_target_speed(self): + """ + Retrieves the target (expected) speed of the fan + Returns: + An integer, the percentage of full fan speed, in the range 0 (off) + to 100 (full speed) + """ + # Return current speed to avoid false thermalctld alarm. + return self.get_speed() + diff --git a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/fan_drawer.py b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/fan_drawer.py index 5142827554db..1812f427cc33 100644 --- a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/fan_drawer.py +++ b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/fan_drawer.py @@ -14,20 +14,51 @@ except ImportError as e: raise ImportError(str(e) + "- required module not found") -N3248TE_FANS_PER_FANTRAY = 2 +N3248TE_FANS_PER_FANTRAY = 1 class FanDrawer(FanDrawerBase): """DellEMC Platform-specific Fan class""" + FANTRAY_LED_COLORS = { + "off", + "green", + "yellow" + } + def __init__(self, fantray_index): FanDrawerBase.__init__(self) # FanTray is 1-based in DellEMC platforms + self.fantray_led_reg = "fan{}_led".format(fantray_index) self.fantrayindex = fantray_index + 1 for i in range(N3248TE_FANS_PER_FANTRAY): self._fan_list.append(Fan(fantray_index, i)) + def _get_cpld_register(self, reg_name): + # On successful read, returns the value read from given + # reg name and on failure rethrns 'ERR' + cpld_dir = "/sys/devices/platform/dell-n3248te-cpld.0/" + cpld_reg_file = cpld_dir + '/' + reg_name + try: + rv = open(cpld_reg_file, 'r').read() + except IOError : return 'ERR' + return rv.strip('\r\n').lstrip(' ') + + def _set_cpld_register(self, reg_name, value): + # On successful write, returns the value will be written on + # reg_name and on failure returns 'ERR' + cpld_dir = "/sys/devices/platform/dell-n3248te-cpld.0/" + cpld_reg_file = cpld_dir + '/' + reg_name + + try: + with open(cpld_reg_file, 'w') as fd: + rv = fd.write(str(value)) + except Exception: + rv = 'ERR' + + return rv + def get_name(self): """ Retrieves the fan drawer name @@ -35,3 +66,93 @@ def get_name(self): string: The name of the device """ return "FanTray{}".format(self.fantrayindex) + + def get_status_led(self): + """ + Gets the current system LED color + + Returns: + A string that represents the supported color + """ + + color = self._get_cpld_register(self.fantray_led_reg) + + #if color not in list(self.FANTRAY_LED_COLORS): + # return self.sys_ledcolor + + return color + + def set_status_led(self,color): + """ + Set system LED status based on the color type passed in the argument. + Argument: Color to be set + Returns: + bool: True is specified color is set, Otherwise return False + """ + + if color not in list(self.FANTRAY_LED_COLORS): + return False + + if(not self._set_cpld_register(self.fantray_led_reg, color)): + return False + + return True + + def get_presence(self): + """ + Retrives the presence of the fan drawer + Returns: + bool: True if fan_tray is present, False if not + """ + return self.get_fan(0).get_presence() + + def get_model(self): + """ + Retrieves the part number of the fan drawer + Returns: + string: Part number of fan drawer + """ + return "NA" + + def get_serial(self): + """ + Retrieves the serial number of the fan drawer + Returns: + string: Serial number of the fan drawer + """ + return "NA" + + def get_status(self): + """ + Retrieves the operational status of the fan drawer + Returns: + bool: True if fan drawer is operating properly, False if not + """ + return True + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + Returns: + integer: The 1-based relative physical position in parent + device or -1 if cannot determine the position + """ + return self.fantrayindex + + def is_replaceable(self): + """ + Indicate whether this fan drawer is replaceable. + Returns: + bool: True if it is replaceable, False if not + """ + return True + + def get_maximum_consumed_power(self): + """ + Retrives the maximum power drawn by Fan Drawer + + Returns: + A float, with value of the maximum consumable power of the + component. + """ + return 0.0 diff --git a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/psu.py b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/psu.py index 30d4f2bd6c2a..b2f06785f0dc 100644 --- a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/psu.py +++ b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/psu.py @@ -1,7 +1,7 @@ #!/usr/bin/env python ######################################################################## -# DellEMC Z9332F +# DellEMC N3248TE # # Module contains an implementation of SONiC Platform Base API and # provides the PSUs' information which are available in the platform @@ -38,7 +38,8 @@ def _get_cpld_register(self, reg_name): cpld_dir = "/sys/devices/platform/dell-n3248te-cpld.0/" cpld_reg_file = cpld_dir + '/' + reg_name try: - rv = open(cpld_reg_file, 'r').read() + with open(cpld_reg_file, 'r') as fd: + rv = fd.read() except IOError : return 'ERR' return rv.strip('\r\n').lstrip(' ') @@ -46,7 +47,8 @@ def _get_dps_register(self, reg_name): try : dps_dir = self.dps_hwmon + '/' + os.listdir(self.dps_hwmon)[0] dps_reg_file = dps_dir + '/' + reg_name - rv = open(dps_reg_file, 'r').read() + with open(dps_reg_file, 'r') as fd: + rv = fd.read() except (IOError, OSError) : return 'ERR' return rv @@ -91,7 +93,9 @@ def get_presence(self): self.dps_hwmon_exist = os.path.exists(self.dps_hwmon) if not self.dps_hwmon_exist: self._reload_dps_module() - return int(presence, 0) + if int(presence, 0) == 1: + return True + return False def get_model(self): """ @@ -103,7 +107,7 @@ def get_model(self): try: val = open(self.eeprom, "rb").read()[0x50:0x62] except Exception: val = None - return val.decode() + return val.decode('ascii') def get_serial(self): """ @@ -115,7 +119,22 @@ def get_serial(self): try: val = open(self.eeprom, "rb").read()[0xc4:0xd9] except Exception: val = None - return val.decode() + return val.decode('ascii') + + def get_revision(self): + """ + Retrieves the serial number of the PSU + + Returns: + string: Serial number of PSU + """ + try: val = open(self.eeprom, "rb").read()[0xc4:0xd9] + except Exception: + val = None + if val != "NA" and len(val) == 23: + return val[-3:] + else: + return "NA" def get_status(self): """ @@ -126,7 +145,9 @@ def get_status(self): """ status = self._get_cpld_register(self.psu_status).strip() if status == 'ERR' : return False - return int(status, 0) + if int(status, 0) == 1: + return True + return False def get_voltage(self): """ @@ -141,7 +162,7 @@ def get_voltage(self): voltage = int(volt_reading)/1000 except Exception: return None - return "{:.1f}".format(voltage) + return float(voltage) def get_current(self): """ @@ -156,7 +177,7 @@ def get_current(self): current = int(curr_reading)/1000 except Exception: return None - return "{:.1f}".format(current) + return float(current) def get_power(self): """ @@ -168,10 +189,10 @@ def get_power(self): """ power_reading = self._get_dps_register(self.psu_power_reg) try: - power = int(power_reading)/1000 + power = int(power_reading)/(1000*1000) except Exception: return None - return "{:.1f}".format(power) + return float(power) def get_powergood_status(self): """ @@ -204,4 +225,21 @@ def get_type(self): try: val = open(self.eeprom, "rb").read()[0xe8:0xea] except Exception: return None - return val + return val.decode() + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + Returns: + integer: The 1-based relative physical position in parent + device or -1 if cannot determine the position + """ + return self.index + + def is_replaceable(self): + """ + Indicate whether this PSU is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True + diff --git a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/sfp.py index a69c2b4419d5..3a6b0a4cd4cc 100644 --- a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/sfp.py +++ b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/sfp.py @@ -1,7 +1,7 @@ #!/usr/bin/env python ############################################################################# -# DELLEMC S5248F +# DELLEMC N3248TE # # Module contains an implementation of SONiC Platform Base API and # provides the platform information @@ -17,6 +17,25 @@ except ImportError as e: raise ImportError(str(e) + "- required module not found") +SFP_PORT_START = 49 +SFP_PORT_END = 54 + +QSFP_INFO_OFFSET = 128 +SFP_INFO_OFFSET = 0 +QSFP_DD_PAGE0 = 0 + +SFP_TYPE_LIST = [ + '0x3' # SFP/SFP+/SFP28 and later +] +QSFP_TYPE_LIST = [ + '0xc', # QSFP + '0xd', # QSFP+ or later + '0x11' # QSFP28 or later +] +QSFP_DD_TYPE_LIST = [ + '0x18' #QSFP_DD Type +] + class Sfp(SfpOptoeBase): """ DELLEMC Platform-specific Sfp class @@ -32,7 +51,7 @@ def get_eeprom_path(self): return self.eeprom_path def get_name(self): - return "SFP/SFP+/SFP28" + return "SFP/SFP+/SFP28" if self.index < 53 else "QSFP+ or later" def pci_mem_read(self, mm, offset): mm.seek(offset) @@ -67,7 +86,8 @@ def pci_get_value(self, resource, offset): def _get_cpld_register(self, reg): reg_file = '/sys/devices/platform/dell-n3248te-cpld.0/' + reg try: - rv = open(reg_file, 'r').read() + with open(reg_file, 'r') as fd: + rv = fd.read() except IOError : return 'ERR' return rv.strip('\r\n').lstrip(' ') @@ -106,7 +126,7 @@ def reset(self): """ Reset the SFP and returns all user settings to their default state """ - return True + return False def set_lpmode(self, lpmode): """ @@ -125,4 +145,42 @@ def get_max_port_power(self): """ Retrieves the maximumum power allowed on the port in watts """ - return 2.5 + return 5.0 if self.sfp_type == 'QSFP' else 2.5 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True + + def get_error_description(self): + """ + Retrives the error descriptions of the SFP module + Returns: + String that represents the current error descriptions of vendor specific errors + In case there are multiple errors, they should be joined by '|', + like: "Bad EEPROM|Unsupported cable" + """ + if not self.get_presence(): + return self.SFP_STATUS_UNPLUGGED + else: + if not os.path.isfile(self.eeprom_path): + return "EEPROM driver is not attached" + + if self.sfp_type == 'SFP': + offset = SFP_INFO_OFFSET + elif self.sfp_type == 'QSFP': + offset = QSFP_INFO_OFFSET + elif self.sfp_type == 'QSFP_DD': + offset = QSFP_DD_PAGE0 + + try: + with open(self.eeprom_path, mode="rb", buffering=0) as eeprom: + eeprom.seek(offset) + eeprom.read(1) + except OSError as e: + return "EEPROM read failed ({})".format(e.strerror) + + return self.SFP_STATUS_OK diff --git a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/thermal.py b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/thermal.py index 96edda7c14d4..b07eb5d075e1 100644 --- a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/thermal.py +++ b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/thermal.py @@ -1,7 +1,7 @@ #!/usr/bin/env python ######################################################################## -# DellEMC Z9332F +# DellEMC N3248TE # # Module contains an implementation of SONiC Platform Base API and # provides the Thermals' information which are available in the platform @@ -144,3 +144,20 @@ def set_low_threshold(self, temperature): """ # Thermal threshold values are pre-defined based on HW. return False + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + Returns: + integer: The 1-based relative physical position in parent + device or -1 if cannot determine the position + """ + return self.index + + def is_replaceable(self): + """ + Indicate whether this Thermal is replaceable. + Returns: + bool: True if it is replaceable. + """ + return False diff --git a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/watchdog.py b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/watchdog.py index ebd4706b4215..1e077e45d122 100644 --- a/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/watchdog.py +++ b/platform/broadcom/sonic-platform-modules-dell/n3248te/sonic_platform/watchdog.py @@ -11,7 +11,6 @@ try: import ctypes - import subprocess from sonic_platform_base.watchdog_base import WatchdogBase except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -29,43 +28,53 @@ class Watchdog(WatchdogBase): Abstract base class for interfacing with a hardware watchdog module """ - TIMERS = [15,20,30,40,50,60,65,70] + TIMERS = [15,20,30,40,50,60,65,70,80,100,120,140,160,180,210,240] armed_time = 0 timeout = 0 CLOCK_MONOTONIC = 1 def __init__(self): + WatchdogBase.__init__(self) self._librt = ctypes.CDLL('librt.so.1', use_errno=True) self._clock_gettime = self._librt.clock_gettime self._clock_gettime.argtypes=[ctypes.c_int, ctypes.POINTER(_timespec)] + self.watchdog_reg = "watchdog" - def _get_command_result(self, cmdline): + def _get_cpld_register(self, reg_name): + # On successful read, returns the value read from given + # reg name and on failure rethrns 'ERR' + cpld_dir = "/sys/devices/platform/dell-n3248te-cpld.0/" + cpld_reg_file = cpld_dir + '/' + reg_name try: - proc = subprocess.Popen(cmdline.split(), stdout=subprocess.PIPE, - stderr=subprocess.STDOUT) - stdout = proc.communicate()[0] - proc.wait() - result = stdout.rstrip('\n') - except OSError: - result = None + with open(cpld_reg_file, 'r') as fd: + rv = fd.read() + except IOError : return 'ERR' + return rv.strip('\r\n').lstrip(' ') - return result + def _set_cpld_register(self, reg_name, value): + # On successful write, returns the value will be written on + # reg_name and on failure returns 'ERR' + + cpld_dir = "/sys/devices/platform/dell-n3248te-cpld.0/" + cpld_reg_file = cpld_dir + '/' + reg_name + + try: + with open(cpld_reg_file, 'w') as fd: + rv = fd.write(str(value)) + except Exception: + rv = 'ERR' + + return rv def _get_reg_val(self): - # 0x31 = CPLD I2C Base Address - # 0x07 = Watchdog Function Register - value = self._get_command_result("/usr/sbin/i2cget -y 601 0x31 0x07") - if not value: - return None - else: - return int(value, 16) + value = self._get_cpld_register(self.watchdog_reg).strip() + if value == 'ERR': return False + + return int(value,16) def _set_reg_val(self,val): - # 0x31 = CPLD I2C Base Address - # 0x07 = Watchdog Function Register - value = self._get_command_result("/usr/sbin/i2cset -y 601 0x31 0x07 %s" - % (val)) + value = self._set_cpld_register(self.watchdog_reg, val) return value def _get_time(self): @@ -93,7 +102,7 @@ def arm(self, seconds): """ timer_offset = -1 for key,timer_seconds in enumerate(self.TIMERS): - if seconds <= timer_seconds: + if seconds > 0 and seconds <= timer_seconds: timer_offset = key seconds = timer_seconds break @@ -101,41 +110,30 @@ def arm(self, seconds): if timer_offset == -1: return -1 - # Extracting 5th to 7th bits for WD timer values - # 000 - 15 sec - # 001 - 20 sec - # 010 - 30 sec - # 011 - 40 sec - # 100 - 50 sec - # 101 - 60 sec - # 110 - 65 sec - # 111 - 70 sec + # Extracting 5th to 8th bits for WD timer values reg_val = self._get_reg_val() - wd_timer_offset = (reg_val >> 4) & 0x7 + wd_timer_offset = (reg_val >> 4) & 0xF if wd_timer_offset != timer_offset: - # Setting 5th to 7th bits + # Setting 5th to 8th bits # value from timer_offset self.disarm() - self._set_reg_val(reg_val | (timer_offset << 4)) + self._set_reg_val((reg_val & 0x0F) | (timer_offset << 4)) if self.is_armed(): # Setting last bit to WD Timer punch # Last bit = WD Timer punch self._set_reg_val(reg_val & 0xFE) - self.armed_time = self._get_time() - self.timeout = seconds - return seconds else: # Setting 4th bit to enable WD # 4th bit = Enable WD reg_val = self._get_reg_val() self._set_reg_val(reg_val | 0x8) - self.armed_time = self._get_time() - self.timeout = seconds - return seconds + self.armed_time = self._get_time() + self.timeout = seconds + return seconds def disarm(self): """ @@ -183,7 +181,7 @@ def get_remaining_time(self): their watchdog timer. If the watchdog is not armed, returns -1. - S5232 doesnot have hardware support to show remaining time. + N3248PXE doesnot have hardware support to show remaining time. Due to this limitation, this API is implemented in software. This API would return correct software time difference if it is called from the process which armed the watchdog timer. @@ -207,4 +205,3 @@ def get_remaining_time(self): return self.timeout - diff_time return 0 - diff --git a/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/fast-reboot_plugin b/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/fast-reboot_plugin index 683dcc6733ae..20a5d8cf5ac2 100755 --- a/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/fast-reboot_plugin +++ b/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/fast-reboot_plugin @@ -8,4 +8,4 @@ fi io_rd_wr.py --set --val 40 --offset 0x131 io_rd_wr.py --set --val 06 --offset 210; io_rd_wr.py --set --val 0B --offset 211; io_rd_wr.py --set --val aa --offset 213 -/usr/local/bin/s6100_i2c_enumeration.sh deinit & > /dev/null +/usr/local/bin/s6100_platform_startup.sh deinit & > /dev/null diff --git a/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/reboot_plugin b/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/reboot_plugin index 4ccfecdfe2af..84b525fe6bac 100755 --- a/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/reboot_plugin +++ b/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/reboot_plugin @@ -5,4 +5,4 @@ if [[ -d /sys/devices/platform/SMF.512/hwmon/ ]]; then echo 0xcc > mb_poweron_reason fi -/usr/local/bin/s6100_i2c_enumeration.sh deinit & > /dev/null +/usr/local/bin/s6100_platform_startup.sh deinit & > /dev/null 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 2afa571aa809..15763bbc9e36 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 @@ -2,20 +2,6 @@ #platform init script for Dell S6100 -install_python_api_package() { - device="/usr/share/sonic/device" - platform=$(/usr/local/bin/sonic-cfggen -H -v DEVICE_METADATA.localhost.platform) - rv=$(pip3 install $device/$platform/sonic_platform-1.0-py3-none-any.whl) -} - -remove_python_api_package() { - rv=$(pip3 show sonic-platform > /dev/null 2>/dev/null) - if [ $? -eq 0 ]; then - rv=$(pip3 uninstall -y sonic-platform > /dev/null 2>/dev/null) - fi -} - - if [[ "$1" == "init" ]]; then pericom="/sys/bus/pci/devices/0000:08:00.0" @@ -38,30 +24,31 @@ if [[ "$1" == "init" ]]; then systemctl start --no-block s6100-ssd-upgrade-status.service - is_fast_warm=$(cat /proc/cmdline | grep SONIC_BOOT_TYPE | wc -l) - - if [[ "$is_fast_warm" == "1" ]]; then - systemctl start --no-block s6100-i2c-enumerate.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 - systemctl start s6100-i2c-enumerate.service + systemctl start --no-block s6100-platform-startup.service fi - echo -2 > /sys/bus/i2c/drivers/pca954x/0-0070/idle_state - echo -2 > /sys/bus/i2c/drivers/pca954x/4-0071/idle_state - echo -2 > /sys/bus/i2c/drivers/pca954x/6-0071/idle_state - echo -2 > /sys/bus/i2c/drivers/pca954x/6-0072/idle_state - echo -2 > /sys/bus/i2c/drivers/pca954x/7-0071/idle_state - echo -2 > /sys/bus/i2c/drivers/pca954x/7-0072/idle_state - echo -2 > /sys/bus/i2c/drivers/pca954x/8-0071/idle_state - echo -2 > /sys/bus/i2c/drivers/pca954x/8-0072/idle_state - echo -2 > /sys/bus/i2c/drivers/pca954x/9-0071/idle_state - echo -2 > /sys/bus/i2c/drivers/pca954x/9-0072/idle_state - - install_python_api_package - monit reload - elif [[ "$1" == "deinit" ]]; then - /usr/local/bin/s6100_i2c_enumeration.sh deinit + /usr/local/bin/s6100_platform_startup.sh deinit modprobe -r dell_s6100_lpc modprobe -r dell_s6100_iom_cpld @@ -69,7 +56,6 @@ elif [[ "$1" == "deinit" ]]; then modprobe -r i2c-dev modprobe -r dell_ich modprobe -r nvram - remove_python_api_package else echo "s6100_platform : Invalid option !" fi diff --git a/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/s6100_i2c_enumeration.sh b/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/s6100_platform_startup.sh similarity index 89% rename from platform/broadcom/sonic-platform-modules-dell/s6100/scripts/s6100_i2c_enumeration.sh rename to platform/broadcom/sonic-platform-modules-dell/s6100/scripts/s6100_platform_startup.sh index d00fec233eaa..d6f6d74cf290 100755 --- a/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/s6100_i2c_enumeration.sh +++ b/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/s6100_platform_startup.sh @@ -1,9 +1,22 @@ #!/bin/bash -### DellEMC S6100 I2C MUX Enumeration script +### DellEMC S6100 Platform Startup script source dell_i2c_utils.sh +install_python_api_package() { + device="/usr/share/sonic/device" + platform=$(/usr/local/bin/sonic-cfggen -H -v DEVICE_METADATA.localhost.platform) + rv=$(pip3 install $device/$platform/sonic_platform-1.0-py3-none-any.whl) +} + +remove_python_api_package() { + rv=$(pip3 show sonic-platform > /dev/null 2>/dev/null) + if [ $? -eq 0 ]; then + rv=$(pip3 uninstall -y sonic-platform > /dev/null 2>/dev/null) + fi +} + init_devnum() { found=0 for devnum in 0 1; do @@ -292,6 +305,20 @@ if [[ "$1" == "init" ]]; then switch_board_qsfp_lpmode "disable" /usr/local/bin/s6100_bitbang_reset.sh xcvr_presence_interrupts "enable" + + echo -2 > /sys/bus/i2c/drivers/pca954x/0-0070/idle_state + echo -2 > /sys/bus/i2c/drivers/pca954x/4-0071/idle_state + echo -2 > /sys/bus/i2c/drivers/pca954x/6-0071/idle_state + echo -2 > /sys/bus/i2c/drivers/pca954x/6-0072/idle_state + echo -2 > /sys/bus/i2c/drivers/pca954x/7-0071/idle_state + echo -2 > /sys/bus/i2c/drivers/pca954x/7-0072/idle_state + echo -2 > /sys/bus/i2c/drivers/pca954x/8-0071/idle_state + echo -2 > /sys/bus/i2c/drivers/pca954x/8-0072/idle_state + echo -2 > /sys/bus/i2c/drivers/pca954x/9-0071/idle_state + echo -2 > /sys/bus/i2c/drivers/pca954x/9-0072/idle_state + + install_python_api_package + monit reload elif [[ "$1" == "deinit" ]]; then xcvr_presence_interrupts "disable" switch_board_sfp "delete_device" @@ -302,4 +329,6 @@ elif [[ "$1" == "deinit" ]]; then switch_board_qsfp "delete_device" switch_board_qsfp_mux "delete_device" cpu_board_mux "delete_device" + + remove_python_api_package fi diff --git a/platform/broadcom/sonic-platform-modules-dell/s6100/sonic_platform/chassis.py b/platform/broadcom/sonic-platform-modules-dell/s6100/sonic_platform/chassis.py index c93420886639..47e63f52a17d 100755 --- a/platform/broadcom/sonic-platform-modules-dell/s6100/sonic_platform/chassis.py +++ b/platform/broadcom/sonic-platform-modules-dell/s6100/sonic_platform/chassis.py @@ -20,6 +20,7 @@ from sonic_platform.psu import Psu from sonic_platform.thermal import Thermal from sonic_platform.watchdog import Watchdog, WatchdogTCO + from sonic_platform.sfp import Sfp except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -76,6 +77,15 @@ def __init__(self): self._module_list.append(module) self._sfp_list.extend(module._sfp_list) + #SFP ports + sfp_port = 11 + for index in range(64,66): + eeprom_path = "/sys/bus/i2c/devices/i2c-{0}/{0}-0050/eeprom".format(sfp_port) + sfp_control = "" + sfp_node = Sfp(index, 'SFP', eeprom_path, sfp_control, index) + self._sfp_list.append(sfp_node) + sfp_port = sfp_port + 1 + for i in range(MAX_S6100_FANTRAY): fandrawer = FanDrawer(i) self._fan_drawer_list.append(fandrawer) diff --git a/platform/broadcom/sonic-platform-modules-dell/s6100/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-dell/s6100/sonic_platform/sfp.py index 1a0c9cc8417e..fa8e4d9a05c0 100755 --- a/platform/broadcom/sonic-platform-modules-dell/s6100/sonic_platform/sfp.py +++ b/platform/broadcom/sonic-platform-modules-dell/s6100/sonic_platform/sfp.py @@ -10,6 +10,7 @@ try: import os + import syslog import time from sonic_platform_base.sonic_xcvr.sfp_optoe_base import SfpOptoeBase except ImportError as e: @@ -42,6 +43,9 @@ def get_presence(self): """ Retrieves the presence of the sfp """ + if self.index > 64: + return False + presence_ctrl = self.sfp_control + 'qsfp_modprs' try: reg_file = open(presence_ctrl) @@ -69,6 +73,9 @@ def get_reset_status(self): """ Retrieves the reset status of SFP """ + if self.index > 64: + return False + reset_status = None reset_ctrl = self.sfp_control + 'qsfp_reset' try: @@ -100,6 +107,9 @@ def get_lpmode(self): """ Retrieves the lpmode (low power mode) status of this SFP """ + if self.index > 64: + return False + lpmode_ctrl = self.sfp_control + 'qsfp_lpmode' try: reg_file = open(lpmode_ctrl, "r+") @@ -133,6 +143,9 @@ def reset(self): """ Reset SFP and return all user module settings to their default srate. """ + if self.index > 64: + return False + reset_ctrl = self.sfp_control + 'qsfp_reset' try: # Open reset_ctrl in both read & write mode @@ -178,6 +191,9 @@ def set_lpmode(self, lpmode): """ Sets the lpmode (low power mode) of SFP """ + if self.index > 64: + return False + lpmode_ctrl = self.sfp_control + 'qsfp_lpmode' try: reg_file = open(lpmode_ctrl, "r+") diff --git a/platform/broadcom/sonic-platform-modules-dell/s6100/systemd/s6100-i2c-enumerate.service b/platform/broadcom/sonic-platform-modules-dell/s6100/systemd/s6100-i2c-enumerate.service deleted file mode 100644 index c63482831940..000000000000 --- a/platform/broadcom/sonic-platform-modules-dell/s6100/systemd/s6100-i2c-enumerate.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=Dell S6100 I2C MUX Enumeration -Before=pmon.service -DefaultDependencies=no - -[Service] -Type=oneshot -ExecStart=/usr/local/bin/s6100_i2c_enumeration.sh init -RemainAfterExit=no - -[Install] -WantedBy=multi-user.target 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 new file mode 100644 index 000000000000..d7a40f43033c --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-dell/s6100/systemd/s6100-platform-startup.service @@ -0,0 +1,12 @@ +[Unit] +Description=Dell S6100 Platform Startup Service +Before=pmon.service determine-reboot-cause.service +DefaultDependencies=no + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/s6100_platform_startup.sh init +RemainAfterExit=no + +[Install] +WantedBy=multi-user.target diff --git a/platform/broadcom/sonic-platform-modules-dell/z9264f/scripts/z9264f_platform.sh b/platform/broadcom/sonic-platform-modules-dell/z9264f/scripts/z9264f_platform.sh index a113c5e435bb..8974f174fac4 100755 --- a/platform/broadcom/sonic-platform-modules-dell/z9264f/scripts/z9264f_platform.sh +++ b/platform/broadcom/sonic-platform-modules-dell/z9264f/scripts/z9264f_platform.sh @@ -213,7 +213,7 @@ if [ "$1" == "init" ]; then modprobe i2c-dev modprobe i2c-mux-pca954x modprobe ipmi_devintf - modprobe ipmi_si + modprobe ipmi_si kipmid_max_busy_us=3000 modprobe i2c_ocores modprobe dell_z9264f_fpga_ocores sys_eeprom "new_device" diff --git a/platform/broadcom/sonic-platform-modules-dell/z9332f/scripts/z9332f_platform.sh b/platform/broadcom/sonic-platform-modules-dell/z9332f/scripts/z9332f_platform.sh index cc109cd46427..dddca98ad086 100755 --- a/platform/broadcom/sonic-platform-modules-dell/z9332f/scripts/z9332f_platform.sh +++ b/platform/broadcom/sonic-platform-modules-dell/z9332f/scripts/z9332f_platform.sh @@ -181,7 +181,7 @@ if [ "$1" == "init" ]; then modprobe i2c-dev modprobe cls-i2c-mux-pca954x modprobe ipmi_devintf - modprobe ipmi_si kipmid_max_busy_us=1000 + modprobe ipmi_si kipmid_max_busy_us=2500 modprobe cls-i2c-ocore modprobe cls-switchboard modprobe mc24lc64t @@ -194,7 +194,7 @@ if [ "$1" == "init" ]; then # /usr/bin/qsfp_irq_enable.py platform_firmware_versions get_reboot_cause - echo 1000 > /sys/module/ipmi_si/parameters/kipmid_max_busy_us + echo 2500 > /sys/module/ipmi_si/parameters/kipmid_max_busy_us # Set the PCA9548 mux behavior echo -2 > /sys/bus/i2c/drivers/cls_pca954x/3-0070/idle_state echo -2 > /sys/bus/i2c/drivers/cls_pca954x/3-0071/idle_state diff --git a/platform/broadcom/sonic-platform-modules-dell/z9332f/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-dell/z9332f/sonic_platform/component.py index f652c2eccf85..214467f8c35d 100644 --- a/platform/broadcom/sonic-platform-modules-dell/z9332f/sonic_platform/component.py +++ b/platform/broadcom/sonic-platform-modules-dell/z9332f/sonic_platform/component.py @@ -23,20 +23,36 @@ def get_bios_version(): - return subprocess.check_output( - ['dmidecode', '-s', 'bios-version']).decode('utf-8').strip() + try: + return subprocess.check_output(['dmidecode', '-s', 'bios-version'], + text=True).strip() + except (FileNotFoundError, subprocess.CalledProcessError): + return 'NA' def get_fpga_version(): val = hwaccess.pci_get_value('/sys/bus/pci/devices/0000:09:00.0/resource0', 0) return '{}.{}'.format((val >> 16) & 0xffff, val & 0xffff) def get_bmc_version(): - return subprocess.check_output( - ['cat', '/sys/class/ipmi/ipmi0/device/bmc/firmware_revision'] - ).decode('utf-8').strip() + val = 'NA' + try: + bmc_ver = subprocess.check_output(['ipmitool', 'mc', 'info'], + stderr=subprocess.STDOUT, text=True) + except (FileNotFoundError, subprocess.CalledProcessError): + pass + else: + version = re.search(r'Firmware Revision\s*:\s(.*)', bmc_ver) + if version: + val = version.group(1).strip() + + return val def get_cpld_version(bus, i2caddr): - return '{}'.format(hwaccess.i2c_get(bus, i2caddr, 0)) + val = hwaccess.i2c_get(bus, i2caddr, 0) + if val != -1: + return '{:x}.{:x}'.format((val >> 4) & 0xf, val & 0xf) + else: + return 'NA' def get_cpld0_version(): return get_cpld_version(5, 0x0d) @@ -69,7 +85,7 @@ def get_pciephy_version(): except (FileNotFoundError, subprocess.CalledProcessError): pass else: - version = re.search(r'PCIe FW loader version:\s(.*)', pcie_ver) + version = re.search(r'PCIe FW version:\s(.*)', pcie_ver) if version: val = version.group(1).strip() @@ -158,6 +174,14 @@ def _get_available_firmware_version(image_path): ver_info = ver_info.get("x86_64-dellemc_z9332f_d1508-r0") if ver_info: + components = list(ver_info.keys()) + for component in components: + if "CPLD" in component and ver_info[component].get('version'): + val = ver_info.pop(component) + ver = int(val['version'], 16) + val['version'] = "{:x}.{:x}".format((ver >> 4) & 0xf, ver & 0xf) + ver_info[component.replace("-", " ")] = val + return True, ver_info else: return False, "ERROR: Version info not available" diff --git a/platform/broadcom/sonic-platform-modules-nokia b/platform/broadcom/sonic-platform-modules-nokia index edbfbf92902f..b67d4795e691 160000 --- a/platform/broadcom/sonic-platform-modules-nokia +++ b/platform/broadcom/sonic-platform-modules-nokia @@ -1 +1 @@ -Subproject commit edbfbf92902f9e48c5f759cb11f09da3ea50ddd5 +Subproject commit b67d4795e691cccd4321b196ba92942f5e8fe395 diff --git a/platform/components/docker-gbsyncd-credo.mk b/platform/components/docker-gbsyncd-credo.mk index 4f7c37980dee..6f5c69b506e6 100644 --- a/platform/components/docker-gbsyncd-credo.mk +++ b/platform/components/docker-gbsyncd-credo.mk @@ -1,9 +1,9 @@ DOCKER_GBSYNCD_PLATFORM_CODE = credo -LIBSAI_CREDO = libsaicredo_0.7.2_amd64.deb -$(LIBSAI_CREDO)_URL = "https://sonicstorage.blob.core.windows.net/packages/credosai/libsaicredo_0.7.2_amd64.deb?sv=2020-08-04&st=2021-11-23T03%3A17%3A40Z&se=2100-11-24T03%3A17%3A00Z&sr=b&sp=r&sig=q1hj3YHdkSnaKkN%2Bv0SYw01keE4ottLffuxSGre9mu0%3D" -LIBSAI_CREDO_OWL = libsaicredo-owl_0.7.2_amd64.deb -$(LIBSAI_CREDO_OWL)_URL = "https://sonicstorage.blob.core.windows.net/packages/credosai/libsaicredo-owl_0.7.2_amd64.deb?sv=2020-08-04&st=2021-11-23T03%3A50%3A31Z&se=2100-11-24T03%3A50%3A00Z&sr=b&sp=r&sig=mhiqfhHsBwa5AZOuNSj0U8uLsr46Tet6OGC41Mx5B6I%3D" +LIBSAI_CREDO = libsaicredo_0.7.5_amd64.deb +$(LIBSAI_CREDO)_URL = "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" +LIBSAI_CREDO_OWL = libsaicredo-owl_0.7.5_amd64.deb +$(LIBSAI_CREDO_OWL)_URL = "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" ifneq ($($(LIBSAI_CREDO)_URL),) include $(PLATFORM_PATH)/../template/docker-gbsyncd-base.mk diff --git a/platform/components/docker-gbsyncd-credo/supervisord.conf.j2 b/platform/components/docker-gbsyncd-credo/supervisord.conf.j2 index 6f12053ce236..01ef324450a9 100644 --- a/platform/components/docker-gbsyncd-credo/supervisord.conf.j2 +++ b/platform/components/docker-gbsyncd-credo/supervisord.conf.j2 @@ -10,6 +10,14 @@ autorestart=unexpected startretries=0 exitcodes=0,3 events=PROCESS_STATE +buffer_size=1024 + +[eventlistener:supervisor-proc-exit-listener] +command=/usr/bin/supervisor-proc-exit-listener --container-name gbsyncd +events=PROCESS_STATE_EXITED,PROCESS_STATE_RUNNING +autostart=true +autorestart=unexpected +buffer_size=1024 [program:rsyslogd] command=/usr/sbin/rsyslogd -n -iNONE diff --git a/platform/marvell-armhf/platform.conf b/platform/marvell-armhf/platform.conf index 58748808fef7..0ef500e16e4f 100644 --- a/platform/marvell-armhf/platform.conf +++ b/platform/marvell-armhf/platform.conf @@ -7,6 +7,7 @@ echo "Preparing for installation ... " # global defines kernel_addr=0x1100000 fdt_addr=0x1000000 +fdt_high=0x10fffff initrd_addr=0x2000000 VAR_LOG=512 @@ -152,6 +153,7 @@ prepare_boot_menu() { # Set boot configs fw_setenv ${FW_ARG} kernel_addr $kernel_addr > /dev/null fw_setenv ${FW_ARG} fdt_addr $fdt_addr > /dev/null + fw_setenv ${FW_ARG} fdt_high $fdt_high > /dev/null fw_setenv ${FW_ARG} initrd_addr $initrd_addr > /dev/null fw_setenv ${FW_ARG} mtdids 'nand0=armada-nand' > /dev/null if [ $UBOOT_FW_DEFAULT -eq 1 ] @@ -196,7 +198,7 @@ create_ubi_partition() { create_gpt_partition() { blk_dev="/dev/sda" - demo_part=$(sgdisk -p $blk_dev | grep -e "$demo_volume_label" -e "$legacy_volume_label" | awk '{print $1}') + demo_part=$(sgdisk -p $blk_dev | grep -e "$demo_volume_label" | awk '{print $1}') # ONIE partition size 168MB onie_part_size=168 diff --git a/platform/marvell-armhf/prestera.mk b/platform/marvell-armhf/prestera.mk index 2365319b9d00..113b8f41a394 100644 --- a/platform/marvell-armhf/prestera.mk +++ b/platform/marvell-armhf/prestera.mk @@ -4,7 +4,7 @@ export MRVL_PRESTERA_VER = 1.0 export MRVL_PRESTERA = mrvlprestera_$(MRVL_PRESTERA_VER)_$(PLATFORM_ARCH) export MRVL_PRESTERA_DEB = $(MRVL_PRESTERA).deb export MRVL_PRESTERA_SRC_URL = https://github.com/Marvell-switching/mrvl-prestera.git -export MRVL_PRESTERA_SRC_TAG = MRVL_PRESTERA_DRIVER_1.0 +export MRVL_PRESTERA_SRC_TAG = MRVL_PRESTERA_DRIVER_1.2 $(MRVL_PRESTERA_DEB)_SRC_PATH = $(PLATFORM_PATH)/prestera $(MRVL_PRESTERA_DEB)_DEPENDS += $(LINUX_HEADERS) $(LINUX_HEADERS_COMMON) diff --git a/platform/marvell-armhf/sai.mk b/platform/marvell-armhf/sai.mk index 6695ff885a02..4ecfdce244a1 100644 --- a/platform/marvell-armhf/sai.mk +++ b/platform/marvell-armhf/sai.mk @@ -1,7 +1,7 @@ # Marvell SAI -export MRVL_SAI_VERSION = 1.8.1-1 -export MRVL_SAI = mrvllibsai_$(PLATFORM_ARCH)_$(MRVL_SAI_VERSION).deb +export MRVL_SAI_VERSION = 1.9.1-2 +export MRVL_SAI = mrvllibsai_$(MRVL_SAI_VERSION)_$(PLATFORM_ARCH).deb $(MRVL_SAI)_SRC_PATH = $(PLATFORM_PATH)/sai $(eval $(call add_conflict_package,$(MRVL_SAI),$(LIBSAIVS_DEV))) diff --git a/platform/marvell-armhf/sonic-platform-et6448m/entropy.py b/platform/marvell-armhf/sonic-platform-et6448m/entropy.py index 338e2ad9bcea..a2131cdc17fb 100644 --- a/platform/marvell-armhf/sonic-platform-et6448m/entropy.py +++ b/platform/marvell-armhf/sonic-platform-et6448m/entropy.py @@ -6,8 +6,11 @@ RNDADDENTROPY=0x40085203 def avail(): - with open("/proc/sys/kernel/random/entropy_avail", mode='r') as avail: - return int(avail.read()) + if path.exists("/proc/sys/kernel/random/entropy_avail"): + with open("/proc/sys/kernel/random/entropy_avail", mode='r') as avail: + return int(avail.read()) + else: + return int(2048) if path.exists("/proc/sys/kernel/random/entropy_avail"): while 1: diff --git a/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/chassis.py b/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/chassis.py index cf67a7bb30ac..eb507a49ef17 100755 --- a/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/chassis.py +++ b/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/chassis.py @@ -201,6 +201,22 @@ def get_serial(self): """ return self._eeprom.serial_number_str() + def get_revision(self): + """ + Retrieves the hardware revision of the chassis + + Returns: + string: Revision value of chassis + """ + if smbus_present == 0: # called from host + cmdstatus, value = cmd.getstatusoutput('sudo i2cget -y 0 0x41 0x0') + else: + bus = smbus.SMBus(0) + DEVICE_ADDRESS = 0x41 + DEVICE_REG = 0x0 + value = bus.read_byte_data(DEVICE_ADDRESS, DEVICE_REG) + return str(value) + def get_system_eeprom_info(self): """ Retrieves the full content of system EEPROM information for the diff --git a/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/fan.py b/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/fan.py index b8fd335930d6..71334ca48585 100644 --- a/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/fan.py +++ b/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/fan.py @@ -33,7 +33,7 @@ class Fan(FanBase): def __init__(self, fan_index, fan_drawer, psu_fan=False, dependency=None): self.is_psu_fan = psu_fan - ADT7473_DIR = "/sys/bus/i2c/devices/0-002e/" + ADT7473_DIR = "/sys/bus/i2c/devices/0-002e/hwmon/hwmon1/" if not self.is_psu_fan: # Fan is 1-based in Nokia platforms diff --git a/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/psu.py b/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/psu.py index 6217555f0d58..383eb2481f68 100644 --- a/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/psu.py +++ b/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/psu.py @@ -114,7 +114,6 @@ def get_model(self): """ return self.eeprom.modelstr() - def get_serial(self): """ Retrieves the serial number of the PSU @@ -124,6 +123,14 @@ def get_serial(self): """ return self.eeprom.serial_number_str() + def get_revision(self): + """ + Retrieves the HW revision of the PSU + + Returns: + string: HW revision of PSU + """ + return self.eeprom.part_number_str() def get_part_number(self): """ diff --git a/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/test/test-chassis.py b/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/test/test-chassis.py index 53c047ca2329..93dfcaac3d05 100755 --- a/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/test/test-chassis.py +++ b/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/test/test-chassis.py @@ -21,6 +21,8 @@ def main(): print(" Chassis serial: {}".format(chassis.get_serial())) + print(" Chassis revision: {}".format(chassis.get_revision())) + print(" Chassis status: {}".format(chassis.get_status())) print(" Chassis base_mac: {}".format(chassis.get_base_mac())) diff --git a/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/test/test-thermal.py b/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/test/test-thermal.py index 91ef75d8f9a7..95cc8e89f0d8 100755 --- a/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/test/test-thermal.py +++ b/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/test/test-thermal.py @@ -30,7 +30,7 @@ def main(): high_thresh = "NA" print(" Low Threshold(C): {}, High Threshold(C): {}".format(low_thresh, - high_thresh)) + high_thresh)) try: crit_low_thresh = thermal.get_low_critical_threshold() diff --git a/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/thermal.py b/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/thermal.py index 20fdec61f38e..444ca5b137d7 100644 --- a/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/thermal.py +++ b/platform/marvell-armhf/sonic-platform-nokia/7215/sonic_platform/thermal.py @@ -22,9 +22,9 @@ class Thermal(ThermalBase): I2C_CLASS_DIR = "/sys/class/i2c-adapter/" I2C_DEV_MAPPING = (['i2c-0/0-004a/hwmon/', 1], ['i2c-0/0-004b/hwmon/', 1], - ['i2c-0/0-002e/', 1], - ['i2c-0/0-002e/', 2], - ['i2c-0/0-002e/', 3]) + ['i2c-0/0-002e/hwmon/', 1], + ['i2c-0/0-002e/hwmon/', 2], + ['i2c-0/0-002e/hwmon/', 3]) HWMON_CLASS_DIR = "/sys/class/hwmon/" @@ -44,8 +44,8 @@ def __init__(self, thermal_index): if self.index < 3: i2c_path = self.I2C_CLASS_DIR + self.I2C_DEV_MAPPING[self.index - 1][0] sensor_index = self.I2C_DEV_MAPPING[self.index - 1][1] - sensor_max_suffix = "max" - sensor_crit_suffix = None + sensor_high_suffix = "max" + sensor_high_crit_suffix = None hwmon_node = os.listdir(i2c_path)[0] self.SENSOR_DIR = i2c_path + hwmon_node + '/' @@ -53,16 +53,17 @@ def __init__(self, thermal_index): elif self.index < 6: i2c_path = self.I2C_CLASS_DIR + self.I2C_DEV_MAPPING[self.index - 1][0] sensor_index = self.I2C_DEV_MAPPING[self.index - 1][1] - sensor_max_suffix = "max" - sensor_crit_suffix = "crit" - self.SENSOR_DIR = i2c_path + sensor_high_suffix = "crit" + sensor_high_crit_suffix = None + hwmon_node = os.listdir(i2c_path)[0] + self.SENSOR_DIR = i2c_path + hwmon_node + '/' # Armada 38x SOC temperature sensor else: dev_path = self.HWMON_CLASS_DIR sensor_index = 1 - sensor_max_suffix = None - sensor_crit_suffix = None + sensor_high_suffix = None + sensor_high_crit_suffix = None hwmon_node = os.listdir(dev_path)[0] self.SENSOR_DIR = dev_path + hwmon_node + '/' @@ -71,16 +72,16 @@ def __init__(self, thermal_index): + "temp{}_input".format(sensor_index) # sysfs file for high threshold value if supported for this sensor - if sensor_max_suffix: + if sensor_high_suffix: self.thermal_high_threshold_file = self.SENSOR_DIR \ - + "temp{}_{}".format(sensor_index, sensor_max_suffix) + + "temp{}_{}".format(sensor_index, sensor_high_suffix) else: self.thermal_high_threshold_file = None # sysfs file for crit high threshold value if supported for this sensor - if sensor_crit_suffix: + if sensor_high_crit_suffix: self.thermal_high_crit_threshold_file = self.SENSOR_DIR \ - + "temp{}_{}".format(sensor_index, sensor_crit_suffix) + + "temp{}_{}".format(sensor_index, sensor_high_crit_suffix) else: self.thermal_high_crit_threshold_file = None diff --git a/platform/marvell-armhf/sonic-platform-nokia/entropy.py b/platform/marvell-armhf/sonic-platform-nokia/entropy.py index 338e2ad9bcea..a2131cdc17fb 100644 --- a/platform/marvell-armhf/sonic-platform-nokia/entropy.py +++ b/platform/marvell-armhf/sonic-platform-nokia/entropy.py @@ -6,8 +6,11 @@ RNDADDENTROPY=0x40085203 def avail(): - with open("/proc/sys/kernel/random/entropy_avail", mode='r') as avail: - return int(avail.read()) + if path.exists("/proc/sys/kernel/random/entropy_avail"): + with open("/proc/sys/kernel/random/entropy_avail", mode='r') as avail: + return int(avail.read()) + else: + return int(2048) if path.exists("/proc/sys/kernel/random/entropy_avail"): while 1: diff --git a/platform/marvell-armhf/sonic-platform-nokia/nokia-7215_plt_setup.sh b/platform/marvell-armhf/sonic-platform-nokia/nokia-7215_plt_setup.sh index 8301999d0d0a..0af85d730615 100755 --- a/platform/marvell-armhf/sonic-platform-nokia/nokia-7215_plt_setup.sh +++ b/platform/marvell-armhf/sonic-platform-nokia/nokia-7215_plt_setup.sh @@ -10,12 +10,6 @@ fw_uboot_env_cfg() if [ "$PLATFORM" = "armhf-nokia_ixs7215_52x-r0" ]; then # Ixs7215 / IPD6448M board Uboot ENV offset FW_ENV_DEFAULT='/dev/mtd0 0x00100000 0x10000 0x10000' - - demo_part=$(sgdisk -p /dev/sda | grep -e "SONiC-OS") - if [ -z "$demo_part" ]; then - # ET6448M Board - For Backward compatibility - FW_ENV_DEFAULT='/dev/mtd0 0x00500000 0x80000 0x100000 8' - fi else FW_ENV_DEFAULT='/dev/mtd0 0x00500000 0x80000 0x100000 8' fi diff --git a/platform/mellanox/asic_table.j2 b/platform/mellanox/asic_table.j2 index a12f8d38d254..3cda40be51d5 100644 --- a/platform/mellanox/asic_table.j2 +++ b/platform/mellanox/asic_table.j2 @@ -1,5 +1,5 @@ {# - Copyright (c) 2020-2021 NVIDIA CORPORATION & AFFILIATES. + Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. Apache-2.0 Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/platform/mellanox/docker-saiserver-mlnx.mk b/platform/mellanox/docker-saiserver-mlnx.mk index da74234bbf71..d71349a28ae7 100644 --- a/platform/mellanox/docker-saiserver-mlnx.mk +++ b/platform/mellanox/docker-saiserver-mlnx.mk @@ -1,5 +1,5 @@ # -# Copyright (c) 2018-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2018-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,15 +16,16 @@ # # docker image for mlnx saiserver -DOCKER_SAISERVER_MLNX = docker-saiserver-mlnx.gz +DOCKER_SAISERVER_MLNX = docker-saiserver$(SAITHRIFT_VER)-mlnx.gz $(DOCKER_SAISERVER_MLNX)_PATH = $(PLATFORM_PATH)/docker-saiserver-mlnx $(DOCKER_SAISERVER_MLNX)_DEPENDS += $(SAISERVER) $(PYTHON_SDK_API) $(DOCKER_SAISERVER_MLNX)_PYTHON_DEBS += $(MLNX_SFPD) -$(DOCKER_SAISERVER_MLNX)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_STRETCH) +$(DOCKER_SAISERVER_MLNX)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BUSTER) SONIC_DOCKER_IMAGES += $(DOCKER_SAISERVER_MLNX) -SONIC_STRETCH_DOCKERS += $(DOCKER_SAISERVER_MLNX) +SONIC_BUSTER_DOCKERS += $(DOCKER_SAISERVER_MLNX) + +$(DOCKER_SAISERVER_MLNX)_CONTAINER_NAME = saiserver$(SAITHRIFT_VER) -$(DOCKER_SAISERVER_MLNX)_CONTAINER_NAME = saiserver $(DOCKER_SAISERVER_MLNX)_RUN_OPT += --privileged -t $(DOCKER_SAISERVER_MLNX)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf $(DOCKER_SAISERVER_MLNX)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro diff --git a/platform/mellanox/docker-saiserver-mlnx/Dockerfile.j2 b/platform/mellanox/docker-saiserver-mlnx/Dockerfile.j2 index 1444c7a24d62..b356f145c9a4 100644 --- a/platform/mellanox/docker-saiserver-mlnx/Dockerfile.j2 +++ b/platform/mellanox/docker-saiserver-mlnx/Dockerfile.j2 @@ -1,5 +1,5 @@ ## -## Copyright (c) 2016-2021 NVIDIA CORPORATION & AFFILIATES. +## Copyright (c) 2016-2022 NVIDIA CORPORATION & AFFILIATES. ## Apache-2.0 ## ## Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +14,8 @@ ## See the License for the specific language governing permissions and ## limitations under the License. ## -FROM docker-config-engine-stretch +{% from "dockers/dockerfile-macros.j2" import install_debian_packages %} +FROM docker-config-engine-buster ARG docker_container_name RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%syslogtag%/;" /etc/rsyslog.conf @@ -22,7 +23,11 @@ RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%s ## Make apt-get non-interactive ENV DEBIAN_FRONTEND=noninteractive -RUN apt-get update +## Pre-install the fundamental packages +RUN apt-get update \ + && apt-get -y install \ + gdb \ + libboost-atomic1.71.0 COPY \ {% for deb in docker_saiserver_mlnx_debs.split(' ') -%} @@ -38,15 +43,7 @@ debs/ RUN apt-get install -y --no-install-recommends libxml2 iptables libbsd0 protobuf-c-compiler protobuf-compiler python-protobuf libprotobuf-c1 python-future python-ipaddr libnet1 pkg-config asciidoc xmlto -RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } ; \ -{% for deb in docker_saiserver_mlnx_debs.split(' ') -%} -dpkg_apt debs/{{ deb }}{{'; '}} -{%- endfor %} - -RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } ; \ -{% for deb in docker_saiserver_mlnx_pydebs.split(' ') -%} -dpkg_apt debs/{{ deb }}{{'; '}} -{%- endfor %} +{{ install_debian_packages(docker_saiserver_mlnx_debs.split(' ')) }} COPY ["start.sh", "/usr/bin/"] diff --git a/platform/mellanox/docker-saiserver-mlnx/supervisord.conf b/platform/mellanox/docker-saiserver-mlnx/supervisord.conf index cb67a0fc9a47..e90e41645042 100644 --- a/platform/mellanox/docker-saiserver-mlnx/supervisord.conf +++ b/platform/mellanox/docker-saiserver-mlnx/supervisord.conf @@ -20,7 +20,7 @@ stdout_logfile=syslog stderr_logfile=syslog [program:saiserver] -command=/usr/bin/saiserver -p /etc/sai/profile.ini -f /etc/sai/portmap.ini +command=/usr/sbin/saiserver -p /etc/sai/profile.ini -f /etc/sai/portmap.ini priority=3 autostart=false autorestart=false diff --git a/platform/mellanox/docker-syncd-mlnx/Dockerfile.j2 b/platform/mellanox/docker-syncd-mlnx/Dockerfile.j2 index 404db43c70aa..386f00e3fe31 100755 --- a/platform/mellanox/docker-syncd-mlnx/Dockerfile.j2 +++ b/platform/mellanox/docker-syncd-mlnx/Dockerfile.j2 @@ -31,6 +31,9 @@ RUN apt-get update && \ libxml2 \ python-pip \ python-dev \ +{%- if ENABLE_ASAN == "y" %} + libasan5 \ +{%- endif %} python-setuptools RUN pip2 install --upgrade pip @@ -58,8 +61,12 @@ RUN apt-get clean -y && \ apt-get autoremove -y && \ rm -rf /debs -COPY ["supervisord.conf", "/etc/supervisor/conf.d/"] +COPY ["supervisord.conf.j2", "/usr/share/sonic/templates/"] COPY ["files/supervisor-proc-exit-listener", "/usr/bin"] COPY ["critical_processes", "/etc/supervisor/"] +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 + ENTRYPOINT ["/usr/local/bin/supervisord"] diff --git a/platform/mellanox/docker-syncd-mlnx/supervisord.conf b/platform/mellanox/docker-syncd-mlnx/supervisord.conf.j2 similarity index 89% rename from platform/mellanox/docker-syncd-mlnx/supervisord.conf rename to platform/mellanox/docker-syncd-mlnx/supervisord.conf.j2 index 6fd59606062d..cc07096b20c6 100644 --- a/platform/mellanox/docker-syncd-mlnx/supervisord.conf +++ b/platform/mellanox/docker-syncd-mlnx/supervisord.conf.j2 @@ -37,3 +37,6 @@ stdout_logfile=syslog 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" +{% endif %} diff --git a/platform/mellanox/fw.mk b/platform/mellanox/fw.mk index 9d6dd9ccf296..8293b38cd5fe 100644 --- a/platform/mellanox/fw.mk +++ b/platform/mellanox/fw.mk @@ -1,5 +1,5 @@ # -# Copyright (c) 2016-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2016-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -27,17 +27,17 @@ else FW_FROM_URL = n endif -MLNX_SPC_FW_VERSION = 13.2010.1154 +MLNX_SPC_FW_VERSION = 13.2010.1218 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.1154 +MLNX_SPC2_FW_VERSION = 29.2010.1218 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.1154 +MLNX_SPC3_FW_VERSION = 30.2010.1218 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/hw-management.mk b/platform/mellanox/hw-management.mk index 4cf961ac7da8..fac7bddc2c24 100644 --- a/platform/mellanox/hw-management.mk +++ b/platform/mellanox/hw-management.mk @@ -1,5 +1,5 @@ # -# Copyright (c) 2016-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2016-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,7 +16,7 @@ # # Mellanox HW Management -MLNX_HW_MANAGEMENT_VERSION = 7.0010.3331 +MLNX_HW_MANAGEMENT_VERSION = 7.0020.2004 export MLNX_HW_MANAGEMENT_VERSION diff --git a/platform/mellanox/hw-management/0002-Disable-hw-mgmt-on-SimX-platforms.patch b/platform/mellanox/hw-management/0002-Disable-hw-mgmt-on-SimX-platforms.patch new file mode 100644 index 000000000000..c12474712b9b --- /dev/null +++ b/platform/mellanox/hw-management/0002-Disable-hw-mgmt-on-SimX-platforms.patch @@ -0,0 +1,81 @@ +From 79dadd5b0d2f5e860b525c12d4d3843607b03a9f Mon Sep 17 00:00:00 2001 +From: Alexander Allen +Date: Fri, 21 Jan 2022 16:47:19 +0000 +Subject: [PATCH] Disable hw-mgmt on SimX platforms + +--- + usr/usr/bin/hw-management-ready.sh | 31 ++++++++++++++++-------------- + usr/usr/bin/hw-management.sh | 9 +++++++++ + 2 files changed, 26 insertions(+), 14 deletions(-) + +diff --git a/usr/usr/bin/hw-management-ready.sh b/usr/usr/bin/hw-management-ready.sh +index 5a9698c..364f906 100755 +--- a/usr/usr/bin/hw-management-ready.sh ++++ b/usr/usr/bin/hw-management-ready.sh +@@ -51,19 +51,22 @@ if [ -d /var/run/hw-management ]; then + rm -fr /var/run/hw-management + fi + +-case $board_type in +-VMOD0014) +- while [ ! -d /sys/devices/pci0000:00/0000:00:1f.0/NVSN2201:00/mlxreg-hotplug/hwmon ] +- do +- sleep 1 +- done +- ;; +-*) +- while [ ! -d /sys/devices/platform/mlxplat/mlxreg-hotplug/hwmon ] +- do +- sleep 1 +- done +- ;; +-esac ++if [ -z "$(lspci -vvv | grep SimX)" ]; then ++ case $board_type in ++ VMOD0014) ++ while [ ! -d /sys/devices/pci0000:00/0000:00:1f.0/NVSN2201:00/mlxreg-hotplug/hwmon ] ++ do ++ sleep 1 ++ done ++ ;; ++ *) ++ while [ ! -d /sys/devices/platform/mlxplat/mlxreg-hotplug/hwmon ] ++ do ++ sleep 1 ++ done ++ ;; ++ esac ++fi ++ + echo "Start Chassis HW management service." + logger -t hw-management -p daemon.notice "Start Chassis HW management service." +diff --git a/usr/usr/bin/hw-management.sh b/usr/usr/bin/hw-management.sh +index ebfabb0..c0c038e 100755 +--- a/usr/usr/bin/hw-management.sh ++++ b/usr/usr/bin/hw-management.sh +@@ -1495,6 +1495,13 @@ do_chip_down() + /usr/bin/hw-management-thermal-events.sh change hotplug_asic down %S %p + } + ++check_simx() ++{ ++ if [ -n "$(lspci -vvv | grep SimX)" ]; then ++ exit 0 ++ fi ++} ++ + __usage=" + Usage: $(basename "$0") [Options] + +@@ -1520,6 +1527,8 @@ Options: + force-reload Performs hw-management 'stop' and the 'start. + " + ++check_simx ++ + case $ACTION in + start) + if [ -d /var/run/hw-management ]; then +-- +2.17.1 + diff --git a/platform/mellanox/hw-management/0003-Make-hw-mgmt-SimX-compatiable.patch b/platform/mellanox/hw-management/0003-Make-hw-mgmt-SimX-compatiable.patch deleted file mode 100644 index 4e49516c8d54..000000000000 --- a/platform/mellanox/hw-management/0003-Make-hw-mgmt-SimX-compatiable.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 5858f60aa5948a502ca8a1c9357ac81baa6f68dc Mon Sep 17 00:00:00 2001 -From: junchao -Date: Fri, 23 Apr 2021 09:27:43 +0800 -Subject: [PATCH] Make hw-mgmt SimX compatible - ---- - usr/usr/bin/hw-management-ready.sh | 11 +++++++---- - usr/usr/bin/hw-management.sh | 9 +++++++++ - 2 files changed, 16 insertions(+), 4 deletions(-) - -diff --git a/usr/usr/bin/hw-management-ready.sh b/usr/usr/bin/hw-management-ready.sh -index 3c9f7b6..05d143f 100755 ---- a/usr/usr/bin/hw-management-ready.sh -+++ b/usr/usr/bin/hw-management-ready.sh -@@ -49,9 +49,12 @@ if [ -d /var/run/hw-management ]; then - rm -fr /var/run/hw-management - fi - --while [ ! -d /sys/devices/platform/mlxplat/mlxreg-hotplug/hwmon ] --do -- sleep 1 --done -+if [ -z "$(lspci -vvv | grep SimX)" ]; then -+ while [ ! -d /sys/devices/platform/mlxplat/mlxreg-hotplug/hwmon ] -+ do -+ sleep 1 -+ done -+fi -+ - echo "Start Chassis HW management service." - logger -t hw-management -p daemon.notice "Start Chassis HW management service." -diff --git a/usr/usr/bin/hw-management.sh b/usr/usr/bin/hw-management.sh -index 991cf45..16ad0bf 100755 ---- a/usr/usr/bin/hw-management.sh -+++ b/usr/usr/bin/hw-management.sh -@@ -1265,6 +1265,13 @@ do_chip_down() - /usr/bin/hw-management-thermal-events.sh change hotplug_asic down %S %p - } - -+check_simx() -+{ -+ if [ -n "$(lspci -vvv | grep SimX)" ]; then -+ exit 0 -+ fi -+} -+ - __usage=" - Usage: $(basename "$0") [Options] - -@@ -1290,6 +1297,8 @@ Options: - force-reload Performs hw-management 'stop' and the 'start. - " - -+check_simx -+ - case $ACTION in - start) - if [ -d /var/run/hw-management ]; then --- -1.9.1 - diff --git a/platform/mellanox/hw-management/0003-Remove-unused-non-upstream-kernel-modules-from-load.patch b/platform/mellanox/hw-management/0003-Remove-unused-non-upstream-kernel-modules-from-load.patch new file mode 100644 index 000000000000..496085e9d4d8 --- /dev/null +++ b/platform/mellanox/hw-management/0003-Remove-unused-non-upstream-kernel-modules-from-load.patch @@ -0,0 +1,25 @@ +From 14b06a12802fc0e15116a64f419d002d0d21d695 Mon Sep 17 00:00:00 2001 +From: Alexander Allen +Date: Thu, 17 Feb 2022 04:19:50 +0000 +Subject: [PATCH] Remove unused non-upstream kernel modules from load + +--- + usr/etc/modules-load.d/05-hw-management-modules.conf | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/usr/etc/modules-load.d/05-hw-management-modules.conf b/usr/etc/modules-load.d/05-hw-management-modules.conf +index 39f621e..c0980bc 100644 +--- a/usr/etc/modules-load.d/05-hw-management-modules.conf ++++ b/usr/etc/modules-load.d/05-hw-management-modules.conf +@@ -15,8 +15,6 @@ xdpe12284 + mp2975 + mp2888 + i2c-mux-pca954x +-emc2305 +-ti-ads1015 + powr1220 + gpio-pca953x + pmbus +-- +2.17.1 + diff --git a/platform/mellanox/hw-management/hw-mgmt b/platform/mellanox/hw-management/hw-mgmt index 0ece116e31bd..ec2e9173e9f2 160000 --- a/platform/mellanox/hw-management/hw-mgmt +++ b/platform/mellanox/hw-management/hw-mgmt @@ -1 +1 @@ -Subproject commit 0ece116e31bd15031af263e28a1b681d4575db5e +Subproject commit ec2e9173e9f24cbc02eb87d81889d408528e090b diff --git a/platform/mellanox/install-pending-fw.mk b/platform/mellanox/install-pending-fw.mk index 0160bb81ed53..714ac6bdec6f 100644 --- a/platform/mellanox/install-pending-fw.mk +++ b/platform/mellanox/install-pending-fw.mk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/platform/mellanox/install-pending-fw.py b/platform/mellanox/install-pending-fw.py index 55287854bfe2..c5b61341be9d 100755 --- a/platform/mellanox/install-pending-fw.py +++ b/platform/mellanox/install-pending-fw.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/platform/mellanox/libsaithrift-dev.mk b/platform/mellanox/libsaithrift-dev.mk index 03daf65fac84..579a41f02a24 100644 --- a/platform/mellanox/libsaithrift-dev.mk +++ b/platform/mellanox/libsaithrift-dev.mk @@ -1,5 +1,5 @@ # -# Copyright (c) 2017-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2017-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,19 +18,28 @@ SAI_VER = 0.9.4 -LIBSAITHRIFT_DEV = libsaithrift-dev_$(SAI_VER)_amd64.deb +LIBSAITHRIFT_DEV = libsaithrift$(SAITHRIFT_VER)-dev_$(SAI_VER)_amd64.deb $(LIBSAITHRIFT_DEV)_SRC_PATH = $(SRC_PATH)/sonic-sairedis/SAI -$(LIBSAITHRIFT_DEV)_DEPENDS += $(LIBTHRIFT) $(LIBTHRIFT_DEV) $(PYTHON_THRIFT) $(THRIFT_COMPILER) $(MLNX_SAI) $(MLNX_SAI_DEV) -$(LIBSAITHRIFT_DEV)_RDEPENDS += $(LIBTHRIFT) $(MLNX_SAI) +ifeq ($(SAITHRIFT_V2),y) +$(LIBSAITHRIFT_DEV)_DEPENDS += $(LIBTHRIFT_0_14_1) $(LIBTHRIFT_0_14_1_DEV) $(PYTHON3_THRIFT_0_14_1) $(THRIFT_0_14_1_COMPILER) +$(LIBSAITHRIFT_DEV)_RDEPENDS += $(LIBTHRIFT_0_14_1) +$(LIBSAITHRIFT_DEV)_BUILD_ENV = SAITHRIFTV2=true SAITHRIFT_VER=v2 +else +$(LIBSAITHRIFT_DEV)_DEPENDS += $(LIBTHRIFT) $(LIBTHRIFT_DEV) $(PYTHON_THRIFT) $(THRIFT_COMPILER) +$(LIBSAITHRIFT_DEV)_RDEPENDS += $(LIBTHRIFT) +endif +$(LIBSAITHRIFT_DEV)_DEPENDS += $(MLNX_SAI) $(MLNX_SAI_DEV) +$(LIBSAITHRIFT_DEV)_RDEPENDS += $(MLNX_SAI) + SONIC_DPKG_DEBS += $(LIBSAITHRIFT_DEV) -PYTHON_SAITHRIFT = python-saithrift_$(SAI_VER)_amd64.deb +PYTHON_SAITHRIFT = python-saithrift$(SAITHRIFT_VER)_$(SAI_VER)_amd64.deb $(eval $(call add_extra_package,$(LIBSAITHRIFT_DEV),$(PYTHON_SAITHRIFT))) -SAISERVER = saiserver_$(SAI_VER)_amd64.deb -$(SAISERVER)_RDEPENDS += $(LIBTHRIFT) $(MLNX_SAI) +SAISERVER = saiserver$(SAITHRIFT_VER)_$(SAI_VER)_amd64.deb +$(SAISERVER)_RDEPENDS += $(LIBSAITHRIFT_DEV) $(eval $(call add_extra_package,$(LIBSAITHRIFT_DEV),$(SAISERVER))) -SAISERVER_DBG = saiserver-dbg_$(SAI_VER)_amd64.deb +SAISERVER_DBG = saiserver$(SAITHRIFT_VER)-dbg_$(SAI_VER)_amd64.deb $(SAISERVER_DBG)_RDEPENDS += $(SAISERVER) $(eval $(call add_extra_package,$(LIBSAITHRIFT_DEV),$(SAISERVER_DBG))) diff --git a/platform/mellanox/mft.mk b/platform/mellanox/mft.mk index f068520d2b94..981c456906b3 100644 --- a/platform/mellanox/mft.mk +++ b/platform/mellanox/mft.mk @@ -1,5 +1,5 @@ # -# Copyright (c) 2016-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2016-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,8 +16,8 @@ # # Mellanox SAI -MFT_VERSION = 4.17.2 -MFT_REVISION = 12 +MFT_VERSION = 4.18.0 +MFT_REVISION = 106 export MFT_VERSION MFT_REVISION diff --git a/platform/mellanox/mlnx-onie-fw-update.sh b/platform/mellanox/mlnx-onie-fw-update.sh index d60c6694c0cd..4d441c5ced9b 100755 --- a/platform/mellanox/mlnx-onie-fw-update.sh +++ b/platform/mellanox/mlnx-onie-fw-update.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright (c) 2020-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py index 6a712af68ff2..c7bafc0d8921 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py @@ -74,7 +74,7 @@ def __init__(self): # Initialize DMI data self.dmi_data = None - + # move the initialization of each components to their dedicated initializer # which will be called from platform # @@ -115,7 +115,7 @@ def __del__(self): if SFP.shared_sdk_handle: deinitialize_sdk_handle(SFP.shared_sdk_handle) - + ############################################## # PSU methods ############################################## @@ -238,7 +238,7 @@ def initialize_single_sfp(self, index): if index < sfp_count: if not self._sfp_list: self._sfp_list = [None] * sfp_count - + if not self._sfp_list[index]: from .sfp import SFP self._sfp_list[index] = SFP(index) @@ -295,7 +295,7 @@ def get_sfp(self, index): index = index - 1 self.initialize_single_sfp(index) return super(Chassis, self).get_sfp(index) - + def get_change_event(self, timeout=0): """ Returns a nested dictionary containing all devices which have @@ -310,7 +310,7 @@ def get_change_event(self, timeout=0): - True if call successful, False if not; - A nested dictionary where key is a device type, value is a dictionary with key:value pairs in the format of - {'device_id':'device_event'}, + {'device_id':'device_event'}, where device_id is the device ID for this device and device_event, status='1' represents device inserted, @@ -596,7 +596,7 @@ def get_watchdog(self): Note: We overload this method to ensure that watchdog is only initialized when it is referenced. Currently, only one daemon can open the watchdog. - To initialize watchdog in the constructor causes multiple daemon + To initialize watchdog in the constructor causes multiple daemon try opening watchdog when loading and constructing a chassis object and fail. By doing so we can eliminate that risk. """ @@ -609,11 +609,11 @@ def get_watchdog(self): return self._watchdog - + def get_revision(self): """ Retrieves the hardware revision of the device - + Returns: string: Revision value of device """ @@ -647,7 +647,7 @@ def _parse_dmi(self, filename): def _verify_reboot_cause(self, filename): ''' - Open and read the reboot cause file in + Open and read the reboot cause file in /var/run/hwmanagement/system (which is defined as REBOOT_CAUSE_ROOT) If a reboot cause file doesn't exists, returns '0'. ''' @@ -657,24 +657,23 @@ def initialize_reboot_cause(self): self.reboot_major_cause_dict = { 'reset_main_pwr_fail' : self.REBOOT_CAUSE_POWER_LOSS, 'reset_aux_pwr_or_ref' : self.REBOOT_CAUSE_POWER_LOSS, + 'reset_comex_pwr_fail' : self.REBOOT_CAUSE_POWER_LOSS, 'reset_asic_thermal' : self.REBOOT_CAUSE_THERMAL_OVERLOAD_ASIC, + 'reset_comex_thermal' : self.REBOOT_CAUSE_THERMAL_OVERLOAD_CPU, 'reset_hotswap_or_wd' : self.REBOOT_CAUSE_WATCHDOG, + 'reset_comex_wd' : self.REBOOT_CAUSE_WATCHDOG, 'reset_swb_wd' : self.REBOOT_CAUSE_WATCHDOG, - 'reset_sff_wd' : self.REBOOT_CAUSE_WATCHDOG - } - self.reboot_minor_cause_dict = { - 'reset_fw_reset' : "Reset by ASIC firmware", - 'reset_long_pb' : "Reset by long press on power button", - 'reset_short_pb' : "Reset by short press on power button", - 'reset_comex_thermal' : "ComEx thermal shutdown", - 'reset_comex_pwr_fail' : "ComEx power fail", - 'reset_comex_wd' : "Reset requested from ComEx", - 'reset_from_asic' : "Reset requested from ASIC", - 'reset_reload_bios' : "Reset caused by BIOS reload", - 'reset_hotswap_or_halt' : "Reset caused by hotswap or halt", - 'reset_from_comex' : "Reset from ComEx", - 'reset_voltmon_upgrade_fail': "Reset due to voltage monitor devices upgrade failure" + 'reset_sff_wd' : self.REBOOT_CAUSE_WATCHDOG, + 'reset_hotswap_or_halt' : self.REBOOT_CAUSE_HARDWARE_OTHER, + 'reset_voltmon_upgrade_fail': self.REBOOT_CAUSE_HARDWARE_OTHER, + 'reset_reload_bios' : self.REBOOT_CAUSE_HARDWARE_BIOS, + 'reset_from_comex' : self.REBOOT_CAUSE_HARDWARE_CPU, + 'reset_fw_reset' : self.REBOOT_CAUSE_HARDWARE_RESET_FROM_ASIC, + 'reset_from_asic' : self.REBOOT_CAUSE_HARDWARE_RESET_FROM_ASIC, + 'reset_long_pb' : self.REBOOT_CAUSE_HARDWARE_BUTTON, + 'reset_short_pb' : self.REBOOT_CAUSE_HARDWARE_BUTTON } + self.reboot_minor_cause_dict = {} self.reboot_by_software = 'reset_sw_reset' self.reboot_cause_initialized = True @@ -754,7 +753,7 @@ def initialize_single_module(self, index): if index < count: if not self._module_list: self._module_list = [None] * count - + if not self._module_list[index]: from .module import Module self._module_list[index] = Module(index + 1) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/component.py b/platform/mellanox/mlnx-platform-api/sonic_platform/component.py index 37f04f9a1dee..d2820090798b 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/component.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/component.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2019-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2019-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/cpu_thermal_control.py b/platform/mellanox/mlnx-platform-api/sonic_platform/cpu_thermal_control.py new file mode 100644 index 000000000000..f86a5b09fe07 --- /dev/null +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/cpu_thermal_control.py @@ -0,0 +1,70 @@ +# +# Copyright (c) 2019-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. +# +############################################################################# +# Mellanox +# +# Module contains an implementation of SONiC Platform Base API and +# provides the Chassis information which are available in the platform +# +############################################################################# + +from sonic_py_common.task_base import ThreadTaskBase + +from . import utils +from .device_data import DeviceDataManager + + +class CPUThermalControl(ThreadTaskBase): + CPU_COOLING_STATE = '/var/run/hw-management/thermal/cooling2_cur_state' + CPU_TEMP_FILE = '/var/run/hw-management/thermal/cpu_pack' + MAX_COOLING_STATE = 10 + MIN_COOLING_STATE = 2 + INTERVAL = 3 + + def __init__(self): + super(CPUThermalControl, self).__init__() + self.temp_low, self.temp_high = DeviceDataManager.get_cpu_thermal_threshold() + + def task_worker(self): + last_temp = 0 + while not self.task_stopping_event.wait(self.INTERVAL): + last_temp = self.run(last_temp) + + def run(self, last_temp): + current_temp = self.read_cpu_temp() + if current_temp < self.temp_low: + self.set_cooling_state(self.MIN_COOLING_STATE) + elif current_temp > self.temp_high: + self.set_cooling_state(self.MAX_COOLING_STATE) + else: + cooling_state = self.get_cooling_state() + if current_temp > last_temp: + self.set_cooling_state(min(cooling_state + 1, self.MAX_COOLING_STATE)) + elif current_temp < last_temp: + self.set_cooling_state(max(cooling_state - 1, self.MIN_COOLING_STATE)) + return current_temp + + def set_cooling_state(self, state): + utils.write_file(self.CPU_COOLING_STATE, state, log_func=None) + + def get_cooling_state(self): + return utils.read_int_from_file(self.CPU_COOLING_STATE, default=self.MAX_COOLING_STATE, log_func=None) + + def read_cpu_temp(self): + cpu_temp = utils.read_int_from_file(self.CPU_TEMP_FILE, default=self.temp_high, log_func=None) + return cpu_temp if cpu_temp <= 1000 else int(cpu_temp / 1000) + \ No newline at end of file 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 b4610fe045f0..cd909231d1bc 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2020-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -148,7 +148,8 @@ 'thermal': { "capability": { "comex_amb": False - } + }, + 'cpu_threshold': (80, 95) # min=80, max=95 }, 'sfp': { 'max_port_per_line_card': 16 @@ -263,3 +264,20 @@ def get_linecard_max_port_count(cls): if not sfp_data: return 0 return sfp_data.get('max_port_per_line_card', 0) + + @classmethod + def is_cpu_thermal_control_supported(cls): + return cls.get_cpu_thermal_threshold() != (None, None) + + @classmethod + @utils.read_only_cache() + def get_cpu_thermal_threshold(cls): + platform_data = DEVICE_DATA.get(cls.get_platform_name(), None) + if not platform_data: + return None, None + + thermal_data = platform_data.get('thermal', None) + if not thermal_data: + return None, None + + return thermal_data.get('cpu_threshold', (None, None)) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/fan.py b/platform/mellanox/mlnx-platform-api/sonic_platform/fan.py index b67bb065a70c..8c40e2b61809 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/fan.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/fan.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2019-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2019-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/psu.py b/platform/mellanox/mlnx-platform-api/sonic_platform/psu.py index 160fd8bd7469..69f2f8930cc4 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/psu.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/psu.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2019-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2019-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -24,8 +24,10 @@ try: import os + import time from sonic_platform_base.psu_base import PsuBase from sonic_py_common.logger import Logger + from .device_data import DeviceDataManager from .led import PsuLed, SharedLed, ComponentFaultyIndicator from . import utils from .vpd_parser import VpdParser @@ -200,16 +202,10 @@ class Psu(FixedPsu): def __init__(self, psu_index): super(Psu, self).__init__(psu_index) - psu_voltage_out2 = os.path.join(PSU_PATH, "power/psu{}_volt_out2".format(self.index)) - psu_voltage = os.path.join(PSU_PATH, "power/psu{}_volt".format(self.index)) - # Workaround for psu voltage sysfs file as the file name differs among platforms - if os.path.exists(psu_voltage_out2): - self.psu_voltage = psu_voltage_out2 - else: - self.psu_voltage = psu_voltage - self.psu_voltage_min = self.psu_voltage + "_min" - self.psu_voltage_max = self.psu_voltage + "_max" - self.psu_voltage_capability = self.psu_voltage + "_capability" + self._psu_voltage = None + self._psu_voltage_min = None + self._psu_voltage_max = None + self._psu_voltage_capability = None self.psu_current = os.path.join(PSU_PATH, self.PSU_CURRENT.format(self.index)) self.psu_power = os.path.join(PSU_PATH, self.PSU_POWER.format(self.index)) @@ -228,6 +224,47 @@ def __init__(self, psu_index): from .thermal import initialize_psu_thermal self._thermal_list = initialize_psu_thermal(psu_index, self.get_power_available_status) + @property + def psu_voltage(self): + if not self._psu_voltage: + psu_voltage_out = os.path.join(PSU_PATH, "power/psu{}_volt_out2".format(self.index)) + if os.path.exists(psu_voltage_out): + self._psu_voltage = psu_voltage_out + else: + psu_voltage_out = os.path.join(PSU_PATH, "power/psu{}_volt".format(self.index)) + if os.path.exists(psu_voltage_out): + self._psu_voltage = psu_voltage_out + + return self._psu_voltage + + @property + def psu_voltage_min(self): + if not self._psu_voltage_min: + psu_voltage = self.psu_voltage + if psu_voltage: + self._psu_voltage_min = psu_voltage + "_min" + + return self._psu_voltage_min + + @property + def psu_voltage_max(self): + if not self._psu_voltage_max: + psu_voltage = self.psu_voltage + if psu_voltage: + self._psu_voltage_max = psu_voltage + "_max" + + return self._psu_voltage_max + + @property + def psu_voltage_capability(self): + if not self._psu_voltage_capability: + psu_voltage = self.psu_voltage + if psu_voltage: + self._psu_voltage_capability = psu_voltage + "_capability" + + return self._psu_voltage_capability + + def get_model(self): """ Retrieves the model number (or part number) of the device @@ -272,7 +309,7 @@ def get_voltage(self): A float number, the output voltage in volts, e.g. 12.1 """ - if self.get_powergood_status(): + if self.get_powergood_status() and self.psu_voltage: # TODO: should we put log_func=None here? If not do this, when a PSU is back to power, some PSU related # sysfs may not ready, read_int_from_file would encounter exception and log an error. voltage = utils.read_int_from_file(self.psu_voltage, log_func=logger.log_info) @@ -360,6 +397,7 @@ def get_temperature_high_threshold(self): return None + @utils.default_return(None) def get_voltage_high_threshold(self): """ Retrieves the high threshold PSU voltage output @@ -376,10 +414,13 @@ def get_voltage_high_threshold(self): capability = utils.read_str_from_file(self.psu_voltage_capability) if 'max' in capability: max_voltage = utils.read_int_from_file(self.psu_voltage_max, log_func=logger.log_info) - return float(max_voltage) / 1000 + max_voltage = InvalidPsuVolWA.run(self, max_voltage, self.psu_voltage_max) + if max_voltage: + return float(max_voltage) / 1000 return None + @utils.default_return(None) def get_voltage_low_threshold(self): """ Retrieves the low threshold PSU voltage output @@ -396,7 +437,9 @@ def get_voltage_low_threshold(self): capability = utils.read_str_from_file(self.psu_voltage_capability) if 'min' in capability: min_voltage = utils.read_int_from_file(self.psu_voltage_min, log_func=logger.log_info) - return float(min_voltage) / 1000 + min_voltage = InvalidPsuVolWA.run(self, min_voltage, self.psu_voltage_min) + if min_voltage: + return float(min_voltage) / 1000 return None @@ -413,3 +456,71 @@ def get_maximum_supplied_power(self): return float(power_max) / 1000000 else: return None + + +class InvalidPsuVolWA: + """This class is created as a workaround for a known hardware issue that the PSU voltage threshold could be a + invalid value 127998. Once we read a voltage threshold value equal to 127998, we should do following: + 1. Check the PSU vendor, it should be Delta + 2. Generate a temp sensor configuration file which contains a few set commands. Those set commands are the WA provided by low level team. + 3. Call "sensors -s -c " + 4. Wait for it to take effect + + This issue is found on 3700, 3700c, 3800, 4600c + """ + + INVALID_VOLTAGE_VALUE = 127998 + EXPECT_VENDOR_NAME = 'DELTA' + EXPECT_CAPACITY = '1100' + EXPECT_PLATFORMS = ['x86_64-mlnx_msn3700-r0', 'x86_64-mlnx_msn3700c-r0', 'x86_64-mlnx_msn3800-r0', 'x86_64-mlnx_msn4600c-r0'] + MFR_FIELD = 'MFR_NAME' + CAPACITY_FIELD = 'CAPACITY' + WAIT_TIME = 1 + + @classmethod + def run(cls, psu, threshold_value, threshold_file): + if threshold_value != cls.INVALID_VOLTAGE_VALUE: + # If the threshold value is not an invalid value, just return + return threshold_value + + platform_name = DeviceDataManager.get_platform_name() + # Apply the WA to specified platforms + if platform_name not in cls.EXPECT_PLATFORMS: + # It is unlikely to go to this branch, so we log a warning here + logger.log_warning('PSU {} threshold file {} value {}, but platform is {}'.format(psu.index, threshold_file, threshold_value, platform_name)) + return threshold_value + + # Check PSU vendor, make sure it is DELTA + vendor_name = psu.vpd_parser.get_entry_value(cls.MFR_FIELD) + if vendor_name != 'N/A' and vendor_name != cls.EXPECT_VENDOR_NAME: + # It is unlikely to go to this branch, so we log a warning here + logger.log_warning('PSU {} threshold file {} value {}, but its vendor is {}'.format(psu.index, threshold_file, threshold_value, vendor_name)) + return threshold_value + + # Check PSU version, make sure it is 1100 + capacity = psu.vpd_parser.get_entry_value(cls.CAPACITY_FIELD) + if capacity != 'N/A' and capacity != cls.EXPECT_CAPACITY: + logger.log_warning('PSU {} threshold file {} value {}, but its capacity is {}'.format(psu.index, threshold_file, threshold_value, capacity)) + return threshold_value + + # Run a sensors -s command to triger hardware to get the real threashold value + utils.run_command('sensors -s') + + # Wait for the threshold value change + return cls.wait_set_done(threshold_file) + + @classmethod + def wait_set_done(cls, threshold_file): + wait_time = cls.WAIT_TIME + while wait_time > 0: + value = utils.read_int_from_file(threshold_file, log_func=logger.log_info) + if value != cls.INVALID_VOLTAGE_VALUE: + return value + + wait_time -= 1 + time.sleep(1) + + # It is enough to use warning here because user might power off/on the PSU which may cause threshold_file + # does not exist + logger.log_warning('sensors -s does not recover PSU threshold sensor after {} seconds'.format(cls.WAIT_TIME)) + return None diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py index 59f71bebc9a5..7ebe9d5e5e57 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py @@ -25,24 +25,17 @@ try: import subprocess import os - from sonic_platform_base.sfp_base import SfpBase from sonic_platform_base.sonic_eeprom import eeprom_dts - from sonic_platform_base.sonic_sfp.sff8472 import sff8472InterfaceId - from sonic_platform_base.sonic_sfp.sff8472 import sff8472Dom - from sonic_platform_base.sonic_sfp.sff8436 import sff8436InterfaceId - from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom - from sonic_platform_base.sonic_sfp.inf8628 import inf8628InterfaceId - from sonic_platform_base.sonic_sfp.qsfp_dd import qsfp_dd_InterfaceId - from sonic_platform_base.sonic_sfp.qsfp_dd import qsfp_dd_Dom from sonic_py_common.logger import Logger from . import utils from .device_data import DeviceDataManager + from sonic_platform_base.sonic_xcvr.sfp_optoe_base import SfpOptoeBase except ImportError as e: raise ImportError (str(e) + "- required module not found") try: - # python_sdk_api does not support python3 for now. Daemons like thermalctld or psud + # python_sdk_api does not support python3 for now. Daemons like thermalctld or psud # also import this file without actually use the sdk lib. So we catch the ImportError # and ignore it here. Meanwhile, we have to trigger xcvrd using python2 now because it # uses the sdk lib. @@ -63,171 +56,6 @@ except KeyError: pass -# definitions of the offset and width for values in XCVR info eeprom -XCVR_INTFACE_BULK_OFFSET = 0 -XCVR_INTFACE_BULK_WIDTH_QSFP = 20 -XCVR_INTFACE_BULK_WIDTH_SFP = 21 -XCVR_TYPE_OFFSET = 0 -XCVR_TYPE_WIDTH = 1 -XCVR_EXT_TYPE_OFFSET = 1 -XCVR_EXT_TYPE_WIDTH = 1 -XCVR_CONNECTOR_OFFSET = 2 -XCVR_CONNECTOR_WIDTH = 1 -XCVR_COMPLIANCE_CODE_OFFSET = 3 -XCVR_COMPLIANCE_CODE_WIDTH = 8 -XCVR_ENCODING_OFFSET = 11 -XCVR_ENCODING_WIDTH = 1 -XCVR_NBR_OFFSET = 12 -XCVR_NBR_WIDTH = 1 -XCVR_EXT_RATE_SEL_OFFSET = 13 -XCVR_EXT_RATE_SEL_WIDTH = 1 -XCVR_CABLE_LENGTH_OFFSET = 14 -XCVR_CABLE_LENGTH_WIDTH_QSFP = 5 -XCVR_CABLE_LENGTH_WIDTH_SFP = 6 -XCVR_VENDOR_NAME_OFFSET = 20 -XCVR_VENDOR_NAME_WIDTH = 16 -XCVR_VENDOR_OUI_OFFSET = 37 -XCVR_VENDOR_OUI_WIDTH = 3 -XCVR_VENDOR_PN_OFFSET = 40 -XCVR_VENDOR_PN_WIDTH = 16 -XCVR_HW_REV_OFFSET = 56 -XCVR_HW_REV_WIDTH_OSFP = 2 -XCVR_HW_REV_WIDTH_QSFP = 2 -XCVR_HW_REV_WIDTH_SFP = 4 -XCVR_EXT_SPECIFICATION_COMPLIANCE_OFFSET = 64 -XCVR_EXT_SPECIFICATION_COMPLIANCE_WIDTH = 1 -XCVR_VENDOR_SN_OFFSET = 68 -XCVR_VENDOR_SN_WIDTH = 16 -XCVR_VENDOR_DATE_OFFSET = 84 -XCVR_VENDOR_DATE_WIDTH = 8 -XCVR_DOM_CAPABILITY_OFFSET = 92 -XCVR_DOM_CAPABILITY_WIDTH = 2 - -# definitions of the offset and width for values in XCVR_QSFP_DD info eeprom -XCVR_EXT_TYPE_OFFSET_QSFP_DD = 72 -XCVR_EXT_TYPE_WIDTH_QSFP_DD = 2 -XCVR_CONNECTOR_OFFSET_QSFP_DD = 75 -XCVR_CONNECTOR_WIDTH_QSFP_DD = 1 -XCVR_CABLE_LENGTH_OFFSET_QSFP_DD = 74 -XCVR_CABLE_LENGTH_WIDTH_QSFP_DD = 1 -XCVR_HW_REV_OFFSET_QSFP_DD = 36 -XCVR_HW_REV_WIDTH_QSFP_DD = 2 -XCVR_VENDOR_DATE_OFFSET_QSFP_DD = 54 -XCVR_VENDOR_DATE_WIDTH_QSFP_DD = 8 -XCVR_DOM_CAPABILITY_OFFSET_QSFP_DD = 2 -XCVR_DOM_CAPABILITY_WIDTH_QSFP_DD = 1 -XCVR_MEDIA_TYPE_OFFSET_QSFP_DD = 85 -XCVR_MEDIA_TYPE_WIDTH_QSFP_DD = 1 -XCVR_FIRST_APPLICATION_LIST_OFFSET_QSFP_DD = 86 -XCVR_FIRST_APPLICATION_LIST_WIDTH_QSFP_DD = 32 -XCVR_SECOND_APPLICATION_LIST_OFFSET_QSFP_DD = 351 -XCVR_SECOND_APPLICATION_LIST_WIDTH_QSFP_DD = 28 - -# to improve performance we retrieve all eeprom data via a single ethtool command -# in function get_transceiver_info and get_transceiver_bulk_status -# XCVR_INTERFACE_DATA_SIZE stands for the max size to be read -# this variable is only used by get_transceiver_info. -# please be noted that each time some new value added to the function -# we should make sure that it falls into the area -# [XCVR_INTERFACE_DATA_START, XCVR_INTERFACE_DATA_SIZE] or -# adjust XCVR_INTERFACE_MAX_SIZE to contain the new data -# It's same for [QSFP_DOM_BULK_DATA_START, QSFP_DOM_BULK_DATA_SIZE] and -# [SFP_DOM_BULK_DATA_START, SFP_DOM_BULK_DATA_SIZE] which are used by -# get_transceiver_bulk_status -XCVR_INTERFACE_DATA_START = 0 -XCVR_INTERFACE_DATA_SIZE = 92 -SFP_MODULE_ADDRA2_OFFSET = 256 -SFP_MODULE_THRESHOLD_OFFSET = 0 -SFP_MODULE_THRESHOLD_WIDTH = 56 - -QSFP_DOM_BULK_DATA_START = 22 -QSFP_DOM_BULK_DATA_SIZE = 36 -SFP_DOM_BULK_DATA_START = 96 -SFP_DOM_BULK_DATA_SIZE = 10 - -QSFP_DD_DOM_BULK_DATA_START = 14 -QSFP_DD_DOM_BULK_DATA_SIZE = 4 - -# definitions of the offset for values in OSFP info eeprom -OSFP_TYPE_OFFSET = 0 -OSFP_VENDOR_NAME_OFFSET = 129 -OSFP_VENDOR_PN_OFFSET = 148 -OSFP_HW_REV_OFFSET = 164 -OSFP_VENDOR_SN_OFFSET = 166 - -# definitions of the offset for values in QSFP_DD info eeprom -QSFP_DD_TYPE_OFFSET = 0 -QSFP_DD_VENDOR_NAME_OFFSET = 1 -QSFP_DD_VENDOR_PN_OFFSET = 20 -QSFP_DD_VENDOR_SN_OFFSET = 38 -QSFP_DD_VENDOR_OUI_OFFSET = 17 - -#definitions of the offset and width for values in DOM info eeprom -QSFP_DOM_REV_OFFSET = 1 -QSFP_DOM_REV_WIDTH = 1 -QSFP_TEMPE_OFFSET = 22 -QSFP_TEMPE_WIDTH = 2 -QSFP_VOLT_OFFSET = 26 -QSFP_VOLT_WIDTH = 2 -QSFP_VERSION_COMPLIANCE_OFFSET = 1 -QSFP_VERSION_COMPLIANCE_WIDTH = 2 -QSFP_CHANNL_MON_OFFSET = 34 -QSFP_CHANNL_MON_WIDTH = 16 -QSFP_CHANNL_MON_WITH_TX_POWER_WIDTH = 24 -QSFP_CHANNL_DISABLE_STATUS_OFFSET = 86 -QSFP_CHANNL_DISABLE_STATUS_WIDTH = 1 -QSFP_CHANNL_RX_LOS_STATUS_OFFSET = 3 -QSFP_CHANNL_RX_LOS_STATUS_WIDTH = 1 -QSFP_CHANNL_TX_FAULT_STATUS_OFFSET = 4 -QSFP_CHANNL_TX_FAULT_STATUS_WIDTH = 1 -QSFP_CONTROL_OFFSET = 86 -QSFP_CONTROL_WIDTH = 8 -QSFP_MODULE_MONITOR_OFFSET = 0 -QSFP_MODULE_MONITOR_WIDTH = 9 -QSFP_POWEROVERRIDE_OFFSET = 93 -QSFP_POWEROVERRIDE_WIDTH = 1 -QSFP_POWEROVERRIDE_BIT = 0 -QSFP_POWERSET_BIT = 1 -QSFP_OPTION_VALUE_OFFSET = 192 -QSFP_OPTION_VALUE_WIDTH = 4 - -QSFP_MODULE_UPPER_PAGE3_START = 384 -QSFP_MODULE_THRESHOLD_OFFSET = 128 -QSFP_MODULE_THRESHOLD_WIDTH = 24 -QSFP_CHANNL_THRESHOLD_OFFSET = 176 -QSFP_CHANNL_THRESHOLD_WIDTH = 24 - -SFP_TEMPE_OFFSET = 96 -SFP_TEMPE_WIDTH = 2 -SFP_VOLT_OFFSET = 98 -SFP_VOLT_WIDTH = 2 -SFP_CHANNL_MON_OFFSET = 100 -SFP_CHANNL_MON_WIDTH = 6 -SFP_CHANNL_STATUS_OFFSET = 110 -SFP_CHANNL_STATUS_WIDTH = 1 - -QSFP_DD_TEMPE_OFFSET = 14 -QSFP_DD_TEMPE_WIDTH = 2 -QSFP_DD_VOLT_OFFSET = 16 -QSFP_DD_VOLT_WIDTH = 2 -QSFP_DD_TX_BIAS_OFFSET = 42 -QSFP_DD_TX_BIAS_WIDTH = 16 -QSFP_DD_RX_POWER_OFFSET = 58 -QSFP_DD_RX_POWER_WIDTH = 16 -QSFP_DD_TX_POWER_OFFSET = 26 -QSFP_DD_TX_POWER_WIDTH = 16 -QSFP_DD_CHANNL_MON_OFFSET = 26 -QSFP_DD_CHANNL_MON_WIDTH = 48 -QSFP_DD_CHANNL_DISABLE_STATUS_OFFSET = 86 -QSFP_DD_CHANNL_DISABLE_STATUS_WIDTH = 1 -QSFP_DD_CHANNL_RX_LOS_STATUS_OFFSET = 19 -QSFP_DD_CHANNL_RX_LOS_STATUS_WIDTH = 1 -QSFP_DD_CHANNL_TX_FAULT_STATUS_OFFSET = 7 -QSFP_DD_CHANNL_TX_FAULT_STATUS_WIDTH = 1 -QSFP_DD_MODULE_THRESHOLD_OFFSET = 0 -QSFP_DD_MODULE_THRESHOLD_WIDTH = 72 -QSFP_DD_CHANNL_STATUS_OFFSET = 26 -QSFP_DD_CHANNL_STATUS_WIDTH = 1 # identifier value of xSFP module which is in the first byte of the EEPROM # if the identifier value falls into SFP_TYPE_CODE_LIST the module is treated as a SFP module and parsed according to 8472 @@ -252,31 +80,6 @@ '18' # QSFP-DD Double Density 8X Pluggable Transceiver ] -qsfp_cable_length_tup = ('Length(km)', 'Length OM3(2m)', - 'Length OM2(m)', 'Length OM1(m)', - 'Length Cable Assembly(m)') - -sfp_cable_length_tup = ('LengthSMFkm-UnitsOfKm', 'LengthSMF(UnitsOf100m)', - 'Length50um(UnitsOf10m)', 'Length62.5um(UnitsOfm)', - 'LengthCable(UnitsOfm)', 'LengthOM3(UnitsOf10m)') - -sfp_compliance_code_tup = ('10GEthernetComplianceCode', 'InfinibandComplianceCode', - 'ESCONComplianceCodes', 'SONETComplianceCodes', - 'EthernetComplianceCodes','FibreChannelLinkLength', - 'FibreChannelTechnology', 'SFP+CableTechnology', - 'FibreChannelTransmissionMedia','FibreChannelSpeed') - -qsfp_compliance_code_tup = ('10/40G Ethernet Compliance Code', 'SONET Compliance codes', - 'SAS/SATA compliance codes', 'Gigabit Ethernet Compliant codes', - 'Fibre Channel link length/Transmitter Technology', - 'Fibre Channel transmission media', 'Fibre Channel Speed') - -SFP_PATH = "/var/run/hw-management/qsfp/" -SFP_TYPE = "SFP" -QSFP_TYPE = "QSFP" -OSFP_TYPE = "OSFP" -QSFP_DD_TYPE = "QSFP_DD" - #variables for sdk REGISTER_NUM = 1 DEVICE_ID = 1 @@ -318,6 +121,13 @@ # parameters for SFP presence SFP_STATUS_INSERTED = '1' +# SFP constants +SFP_PAGE_SIZE = 256 +SFP_UPPER_PAGE_OFFSET = 128 +SFP_VENDOR_PAGE_START = 640 + +BYTES_IN_DWORD = 4 + # Global logger class instance logger = Logger() @@ -331,6 +141,7 @@ def initialize_sdk_handle(): return sdk_handle + def deinitialize_sdk_handle(sdk_handle): if sdk_handle is not None: rc = sx_api_close(sdk_handle) @@ -342,6 +153,72 @@ def deinitialize_sdk_handle(sdk_handle): logger.log_warning("Sdk handle is none") return False +class MlxregManager: + def __init__(self, mst_pci_device, slot_id, sdk_index): + self.mst_pci_device = mst_pci_device + self.slot_id = slot_id + self.sdk_index = sdk_index + + def construct_dword(self, write_buffer): + if len(write_buffer) == 0: + return None + + used_bytes_in_dword = len(write_buffer) % BYTES_IN_DWORD + + res = "dword[0]=0x" + for idx, x in enumerate(write_buffer): + word = hex(x)[2:] + + if (idx > 0) and (idx % BYTES_IN_DWORD) == 0: + res += ",dword[{}]=0x".format(str((idx + 1)//BYTES_IN_DWORD)) + res += word.zfill(2) + + if used_bytes_in_dword > 0: + res += (BYTES_IN_DWORD - used_bytes_in_dword) * "00" + return res + + def write_mlxreg_eeprom(self, num_bytes, dword, device_address, page): + if not dword: + return False + + try: + cmd = "mlxreg -d /dev/mst/{} --reg_name MCIA --indexes \ + slot_index={},module={},device_address={},page_number={},i2c_device_address=0x50,size={},bank_number=0 \ + --set {} -y".format(self.mst_pci_device, self.slot_id, self.sdk_index, device_address, page, num_bytes, dword) + subprocess.check_call(cmd, shell=True, universal_newlines=True, stdout=subprocess.DEVNULL) + except subprocess.CalledProcessError as e: + logger.log_error("Error! Unable to write data for {} port, page {} offset {}, rc = {}, err msg: {}".format(self.sdk_index, page, device_address, e.returncode, e.output)) + return False + return True + + def read_mlxred_eeprom(self, offset, page, num_bytes): + try: + cmd = "mlxreg -d /dev/mst/{} --reg_name MCIA --indexes \ + slot_index={},module={},device_address={},page_number={},i2c_device_address=0x50,size={},bank_number=0 \ + --get".format(self.mst_pci_device, self.slot_id, self.sdk_index, offset, page, num_bytes) + result = subprocess.check_output(cmd, universal_newlines=True, shell=True) + except subprocess.CalledProcessError as e: + logger.log_error("Error! Unable to write data for {} port, page {} offset {}, rc = {}, err msg: {}".format(self.sdk_index, page, device_address, e.returncode, e.output)) + return None + return result + + def parse_mlxreg_read_output(self, read_output, num_bytes): + res = "" + dword_num = num_bytes // BYTES_IN_DWORD + used_bytes_in_dword = num_bytes % BYTES_IN_DWORD + arr = [value for value in read_output.split('\n') if value[0:5] == "dword"] + for i in range(dword_num): + dword = arr[i].split()[2] + res += dword[2:] + + if used_bytes_in_dword > 0: + # Cut needed info and insert into final hex string + # Example: 3 bytes : 0x12345600 + # ^ ^ + dword = arr[dword_num].split()[2] + res += dword[2 : 2 + used_bytes_in_dword * 2] + + return bytearray.fromhex(res) if res else None class SdkHandleContext(object): def __init__(self): @@ -355,23 +232,7 @@ def __exit__(self, exc_type, exc_val, exc_tb): deinitialize_sdk_handle(self.sdk_handle) -class SfpCapability: - def __init__(self): - self.dom_supported = False - self.dom_temp_supported = False - self.dom_volt_supported = False - self.dom_rx_power_supported = False - self.dom_tx_bias_power_supported = False - self.dom_tx_power_supported = False - self.dom_tx_disable_supported = False - self.dom_thresholds_supported = False - self.dom_rx_tx_power_bias_supported = False - self.calibration = 0 - self.qsfp_page3_available = False - self.second_application_list = False - - -class SFP(SfpBase): +class SFP(SfpOptoeBase): """Platform-specific SFP class""" shared_sdk_handle = None SFP_MLNX_ERROR_DESCRIPTION_LONGRANGE_NON_MLNX_CABLE = 'Long range for non-Mellanox cable or module' @@ -388,7 +249,7 @@ class SFP(SfpBase): def __init__(self, sfp_index, slot_id=0, linecard_port_count=0, lc_name=None): super(SFP, self).__init__() - + if slot_id == 0: # For non-modular chassis self.index = sfp_index + 1 self.sdk_index = sfp_index @@ -406,9 +267,17 @@ def __init__(self, sfp_index, slot_id=0, linecard_port_count=0, lc_name=None): self._thermal_list = initialize_linecard_sfp_thermal(lc_name, slot_id, sfp_index) self.slot_id = slot_id - self._sfp_type = None - self._sfp_capability = None - + self.mst_pci_device = self.get_mst_pci_device() + + # get MST PCI device name + def get_mst_pci_device(self): + device_name = None + try: + device_name = subprocess.check_output("ls /dev/mst/ | grep pciconf", universal_newlines=True, shell=True).strip() + except subprocess.CalledProcessError as e: + 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: @@ -417,218 +286,12 @@ def sdk_handle(self): logger.log_error('Failed to open SDK handle') return SFP.shared_sdk_handle - @property - def sfp_type(self): - if not self._sfp_type: - eeprom_raw = [] - eeprom_raw = self._read_eeprom_specific_bytes(XCVR_TYPE_OFFSET, XCVR_TYPE_WIDTH) - if eeprom_raw: - if eeprom_raw[0] in SFP_TYPE_CODE_LIST: - self._sfp_type = SFP_TYPE - elif eeprom_raw[0] in QSFP_TYPE_CODE_LIST: - self._sfp_type = QSFP_TYPE - elif eeprom_raw[0] in QSFP_DD_TYPE_CODE_LIST: - self._sfp_type = QSFP_DD_TYPE - - # we don't regonize this identifier value, treat the xSFP module as the default type - if not self._sfp_type: - raise RuntimeError("Failed to detect SFP type for SFP {}".format(self.index)) - else: - return self._sfp_type - - def _dom_capability_detect(self): - if self._sfp_capability: - return - - self._sfp_capability = SfpCapability() - if not self.get_presence(): - return - - if self.sfp_type == QSFP_TYPE: - self._sfp_capability.calibration = 1 - sfpi_obj = sff8436InterfaceId() - if sfpi_obj is None: - self._sfp_capability.dom_supported = False - offset = 128 - - # QSFP capability byte parse, through this byte can know whether it support tx_power or not. - # TODO: in the future when decided to migrate to support SFF-8636 instead of SFF-8436, - # need to add more code for determining the capability and version compliance - # in SFF-8636 dom capability definitions evolving with the versions. - qsfp_dom_capability_raw = self._read_eeprom_specific_bytes((offset + XCVR_DOM_CAPABILITY_OFFSET), XCVR_DOM_CAPABILITY_WIDTH) - if qsfp_dom_capability_raw is not None: - qsfp_version_compliance_raw = self._read_eeprom_specific_bytes(QSFP_VERSION_COMPLIANCE_OFFSET, QSFP_VERSION_COMPLIANCE_WIDTH) - qsfp_version_compliance = int(qsfp_version_compliance_raw[0], 16) - dom_capability = sfpi_obj.parse_dom_capability(qsfp_dom_capability_raw, 0) - if qsfp_version_compliance >= 0x08: - self._sfp_capability.dom_temp_supported = dom_capability['data']['Temp_support']['value'] == 'On' - self._sfp_capability.dom_volt_supported = dom_capability['data']['Voltage_support']['value'] == 'On' - self._sfp_capability.dom_rx_power_supported = dom_capability['data']['Rx_power_support']['value'] == 'On' - self._sfp_capability.dom_tx_power_supported = dom_capability['data']['Tx_power_support']['value'] == 'On' - else: - self._sfp_capability.dom_temp_supported = True - self._sfp_capability.dom_volt_supported = True - self._sfp_capability.dom_rx_power_supported = dom_capability['data']['Rx_power_support']['value'] == 'On' - self._sfp_capability.dom_tx_power_supported = True - self._sfp_capability.dom_supported = True - self._sfp_capability.calibration = 1 - sfpd_obj = sff8436Dom() - if sfpd_obj is None: - return None - qsfp_option_value_raw = self._read_eeprom_specific_bytes(QSFP_OPTION_VALUE_OFFSET, QSFP_OPTION_VALUE_WIDTH) - if qsfp_option_value_raw is not None: - optional_capability = sfpd_obj.parse_option_params(qsfp_option_value_raw, 0) - self._sfp_capability.dom_tx_disable_supported = optional_capability['data']['TxDisable']['value'] == 'On' - dom_status_indicator = sfpd_obj.parse_dom_status_indicator(qsfp_version_compliance_raw, 1) - self._sfp_capability.qsfp_page3_available = dom_status_indicator['data']['FlatMem']['value'] == 'Off' - else: - self._sfp_capability.dom_supported = False - self._sfp_capability.dom_temp_supported = False - self._sfp_capability.dom_volt_supported = False - self._sfp_capability.dom_rx_power_supported = False - self._sfp_capability.dom_tx_power_supported = False - self._sfp_capability.calibration = 0 - self._sfp_capability.qsfp_page3_available = False - - elif self.sfp_type == QSFP_DD_TYPE: - sfpi_obj = qsfp_dd_InterfaceId() - if sfpi_obj is None: - self._sfp_capability.dom_supported = False - - offset = 0 - # two types of QSFP-DD cable types supported: Copper and Optical. - qsfp_dom_capability_raw = self._read_eeprom_specific_bytes((offset + XCVR_DOM_CAPABILITY_OFFSET_QSFP_DD), XCVR_DOM_CAPABILITY_WIDTH_QSFP_DD) - if qsfp_dom_capability_raw is not None: - self._sfp_capability.dom_temp_supported = True - self._sfp_capability.dom_volt_supported = True - dom_capability = sfpi_obj.parse_dom_capability(qsfp_dom_capability_raw, 0) - if dom_capability['data']['Flat_MEM']['value'] == 'Off': - self._sfp_capability.dom_supported = True - self._sfp_capability.second_application_list = True - self._sfp_capability.dom_rx_power_supported = True - self._sfp_capability.dom_tx_power_supported = True - self._sfp_capability.dom_tx_bias_power_supported = True - self._sfp_capability.dom_thresholds_supported = True - self._sfp_capability.dom_rx_tx_power_bias_supported = True - else: - self._sfp_capability.dom_supported = False - self._sfp_capability.second_application_list = False - self._sfp_capability.dom_rx_power_supported = False - self._sfp_capability.dom_tx_power_supported = False - self._sfp_capability.dom_tx_bias_power_supported = False - self._sfp_capability.dom_thresholds_supported = False - self._sfp_capability.dom_rx_tx_power_bias_supported = False - else: - self._sfp_capability.dom_supported = False - self._sfp_capability.dom_temp_supported = False - self._sfp_capability.dom_volt_supported = False - self._sfp_capability.dom_rx_power_supported = False - self._sfp_capability.dom_tx_power_supported = False - self._sfp_capability.dom_tx_bias_power_supported = False - self._sfp_capability.dom_thresholds_supported = False - self._sfp_capability.dom_rx_tx_power_bias_supported = False - - elif self.sfp_type == SFP_TYPE: - sfpi_obj = sff8472InterfaceId() - if sfpi_obj is None: - return None - sfp_dom_capability_raw = self._read_eeprom_specific_bytes(XCVR_DOM_CAPABILITY_OFFSET, XCVR_DOM_CAPABILITY_WIDTH) - if sfp_dom_capability_raw is not None: - sfp_dom_capability = int(sfp_dom_capability_raw[0], 16) - self._sfp_capability.dom_supported = (sfp_dom_capability & 0x40 != 0) - if self._sfp_capability.dom_supported: - self._sfp_capability.dom_temp_supported = True - self._sfp_capability.dom_volt_supported = True - self._sfp_capability.dom_rx_power_supported = True - self._sfp_capability.dom_tx_power_supported = True - if sfp_dom_capability & 0x20 != 0: - self._sfp_capability.calibration = 1 - elif sfp_dom_capability & 0x10 != 0: - self._sfp_capability.calibration = 2 - else: - self._sfp_capability.calibration = 0 - else: - self._sfp_capability.dom_temp_supported = False - self._sfp_capability.dom_volt_supported = False - self._sfp_capability.dom_rx_power_supported = False - self._sfp_capability.dom_tx_power_supported = False - self._sfp_capability.calibration = 0 - self._sfp_capability.dom_tx_disable_supported = (int(sfp_dom_capability_raw[1], 16) & 0x40 != 0) - else: - self._sfp_capability.dom_supported = False - self._sfp_capability.dom_temp_supported = False - self._sfp_capability.dom_volt_supported = False - self._sfp_capability.dom_rx_power_supported = False - self._sfp_capability.dom_tx_power_supported = False - - @property - @utils.pre_initialize(_dom_capability_detect) - def dom_supported(self): - return self._sfp_capability.dom_supported - - @property - @utils.pre_initialize(_dom_capability_detect) - def dom_temp_supported(self): - return self._sfp_capability.dom_temp_supported - - @property - @utils.pre_initialize(_dom_capability_detect) - def dom_volt_supported(self): - return self._sfp_capability.dom_volt_supported - - @property - @utils.pre_initialize(_dom_capability_detect) - def dom_rx_power_supported(self): - return self._sfp_capability.dom_rx_power_supported - - @property - @utils.pre_initialize(_dom_capability_detect) - def dom_tx_power_supported(self): - return self._sfp_capability.dom_tx_power_supported - - @property - @utils.pre_initialize(_dom_capability_detect) - def calibration(self): - return self._sfp_capability.calibration - - @property - @utils.pre_initialize(_dom_capability_detect) - def dom_tx_bias_power_supported(self): - return self._sfp_capability.dom_tx_bias_power_supported - - @property - @utils.pre_initialize(_dom_capability_detect) - def dom_tx_disable_supported(self): - return self._sfp_capability.dom_tx_disable_supported - - @property - @utils.pre_initialize(_dom_capability_detect) - def qsfp_page3_available(self): - return self._sfp_capability.qsfp_page3_available - - @property - @utils.pre_initialize(_dom_capability_detect) - def second_application_list(self): - return self._sfp_capability.second_application_list - - @property - @utils.pre_initialize(_dom_capability_detect) - def dom_thresholds_supported(self): - return self._sfp_capability.dom_thresholds_supported - - @property - @utils.pre_initialize(_dom_capability_detect) - def dom_rx_tx_power_bias_supported(self): - return self._sfp_capability.dom_rx_tx_power_bias_supported - def reinit(self): - """ Re-initialize this SFP object when a new SFP inserted - :return: + :return: """ - self._sfp_type = None - self._sfp_capability = None + self.refresh_xcvr_api() def get_presence(self): """ @@ -637,32 +300,21 @@ def get_presence(self): Returns: bool: True if device is present, False if not """ - presence = False - ethtool_cmd = "ethtool -m sfp{} hex on offset 0 length 1 2>/dev/null".format(self.index) - try: - proc = subprocess.Popen(ethtool_cmd, - stdout=subprocess.PIPE, - shell=True, - stderr=subprocess.STDOUT, - universal_newlines=True) - stdout = proc.communicate()[0] - proc.wait() - result = stdout.rstrip('\n') - if result != '': - presence = True - - except OSError as e: - raise OSError("Cannot detect sfp") - - return presence + eeprom_raw = self.read_eeprom(0, 1) + + return eeprom_raw is not None # Read out any bytes from any offset def _read_eeprom_specific_bytes(self, offset, num_bytes): + if offset + num_bytes > SFP_VENDOR_PAGE_START: + logger.log_error("Error mismatch between page size and bytes to read (offset: {} num_bytes: {}) ".format(offset, num_bytes)) + return None + eeprom_raw = [] ethtool_cmd = "ethtool -m sfp{} hex on offset {} length {}".format(self.index, offset, num_bytes) try: - output = subprocess.check_output(ethtool_cmd, - shell=True, + output = subprocess.check_output(ethtool_cmd, + shell=True, universal_newlines=True) output_lines = output.splitlines() first_line_raw = output_lines[0] @@ -673,933 +325,83 @@ def _read_eeprom_specific_bytes(self, offset, num_bytes): except subprocess.CalledProcessError as e: return None - return eeprom_raw - - def _convert_string_to_num(self, value_str): - if "-inf" in value_str: - return 'N/A' - elif "Unknown" in value_str: - return 'N/A' - elif 'dBm' in value_str: - t_str = value_str.rstrip('dBm') - return float(t_str) - elif 'mA' in value_str: - t_str = value_str.rstrip('mA') - return float(t_str) - elif 'C' in value_str: - t_str = value_str.rstrip('C') - return float(t_str) - elif 'Volts' in value_str: - t_str = value_str.rstrip('Volts') - return float(t_str) - else: - return 'N/A' - - def get_transceiver_info(self): - """ - Retrieves transceiver info of this SFP - - 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_dict = {} - compliance_code_dict = {} - - # ToDo: OSFP tranceiver info parsing not fully supported. - # in inf8628.py lack of some memory map definition - # will be implemented when the inf8628 memory map ready - if self.sfp_type == OSFP_TYPE: - offset = 0 - vendor_rev_width = XCVR_HW_REV_WIDTH_OSFP - - sfpi_obj = inf8628InterfaceId() - if sfpi_obj is None: - return None - - sfp_type_raw = self._read_eeprom_specific_bytes((offset + OSFP_TYPE_OFFSET), XCVR_TYPE_WIDTH) - if sfp_type_raw is not None: - sfp_type_data = sfpi_obj.parse_sfp_type(sfp_type_raw, 0) - else: - return None - - sfp_vendor_name_raw = self._read_eeprom_specific_bytes((offset + OSFP_VENDOR_NAME_OFFSET), XCVR_VENDOR_NAME_WIDTH) - if sfp_vendor_name_raw is not None: - sfp_vendor_name_data = sfpi_obj.parse_vendor_name(sfp_vendor_name_raw, 0) - else: - return None - - sfp_vendor_pn_raw = self._read_eeprom_specific_bytes((offset + OSFP_VENDOR_PN_OFFSET), XCVR_VENDOR_PN_WIDTH) - if sfp_vendor_pn_raw is not None: - sfp_vendor_pn_data = sfpi_obj.parse_vendor_pn(sfp_vendor_pn_raw, 0) - else: - return None - - sfp_vendor_rev_raw = self._read_eeprom_specific_bytes((offset + OSFP_HW_REV_OFFSET), vendor_rev_width) - if sfp_vendor_rev_raw is not None: - sfp_vendor_rev_data = sfpi_obj.parse_vendor_rev(sfp_vendor_rev_raw, 0) - else: - return None - - sfp_vendor_sn_raw = self._read_eeprom_specific_bytes((offset + OSFP_VENDOR_SN_OFFSET), XCVR_VENDOR_SN_WIDTH) - if sfp_vendor_sn_raw is not None: - sfp_vendor_sn_data = sfpi_obj.parse_vendor_sn(sfp_vendor_sn_raw, 0) - else: - return None - - transceiver_info_dict['type'] = sfp_type_data['data']['type']['value'] - transceiver_info_dict['manufacturer'] = sfp_vendor_name_data['data']['Vendor Name']['value'] - transceiver_info_dict['model'] = sfp_vendor_pn_data['data']['Vendor PN']['value'] - transceiver_info_dict['vendor_rev'] = sfp_vendor_rev_data['data']['Vendor Rev']['value'] - transceiver_info_dict['serial'] = sfp_vendor_sn_data['data']['Vendor SN']['value'] - transceiver_info_dict['vendor_oui'] = 'N/A' - transceiver_info_dict['vendor_date'] = 'N/A' - transceiver_info_dict['connector'] = 'N/A' - transceiver_info_dict['encoding'] = 'N/A' - transceiver_info_dict['ext_identifier'] = 'N/A' - transceiver_info_dict['ext_rateselect_compliance'] = 'N/A' - transceiver_info_dict['cable_type'] = 'N/A' - transceiver_info_dict['cable_length'] = 'N/A' - transceiver_info_dict['specification_compliance'] = 'N/A' - transceiver_info_dict['nominal_bit_rate'] = 'N/A' - transceiver_info_dict['application_advertisement'] = 'N/A' - - elif self.sfp_type == QSFP_TYPE: - offset = 128 - vendor_rev_width = XCVR_HW_REV_WIDTH_QSFP - interface_info_bulk_width = XCVR_INTFACE_BULK_WIDTH_QSFP - - sfpi_obj = sff8436InterfaceId() - if sfpi_obj is None: - print("Error: sfp_object open failed") - return None - - elif self.sfp_type == QSFP_DD_TYPE: - offset = 128 - - sfpi_obj = qsfp_dd_InterfaceId() - if sfpi_obj is None: - print("Error: sfp_object open failed") - return None - - sfp_type_raw = self._read_eeprom_specific_bytes((offset + QSFP_DD_TYPE_OFFSET), XCVR_TYPE_WIDTH) - if sfp_type_raw is not None: - sfp_type_data = sfpi_obj.parse_sfp_type(sfp_type_raw, 0) - else: - return None - - sfp_vendor_name_raw = self._read_eeprom_specific_bytes((offset + QSFP_DD_VENDOR_NAME_OFFSET), XCVR_VENDOR_NAME_WIDTH) - if sfp_vendor_name_raw is not None: - sfp_vendor_name_data = sfpi_obj.parse_vendor_name(sfp_vendor_name_raw, 0) - else: - return None - - sfp_vendor_pn_raw = self._read_eeprom_specific_bytes((offset + QSFP_DD_VENDOR_PN_OFFSET), XCVR_VENDOR_PN_WIDTH) - if sfp_vendor_pn_raw is not None: - sfp_vendor_pn_data = sfpi_obj.parse_vendor_pn(sfp_vendor_pn_raw, 0) - else: - return None - - sfp_vendor_rev_raw = self._read_eeprom_specific_bytes((offset + XCVR_HW_REV_OFFSET_QSFP_DD), XCVR_HW_REV_WIDTH_QSFP_DD) - if sfp_vendor_rev_raw is not None: - sfp_vendor_rev_data = sfpi_obj.parse_vendor_rev(sfp_vendor_rev_raw, 0) - else: - return None - - sfp_vendor_sn_raw = self._read_eeprom_specific_bytes((offset + QSFP_DD_VENDOR_SN_OFFSET), XCVR_VENDOR_SN_WIDTH) - if sfp_vendor_sn_raw is not None: - sfp_vendor_sn_data = sfpi_obj.parse_vendor_sn(sfp_vendor_sn_raw, 0) - else: - return None - - sfp_vendor_oui_raw = self._read_eeprom_specific_bytes((offset + QSFP_DD_VENDOR_OUI_OFFSET), XCVR_VENDOR_OUI_WIDTH) - if sfp_vendor_oui_raw is not None: - sfp_vendor_oui_data = sfpi_obj.parse_vendor_oui(sfp_vendor_oui_raw, 0) - else: - return None - - sfp_vendor_date_raw = self._read_eeprom_specific_bytes((offset + XCVR_VENDOR_DATE_OFFSET_QSFP_DD), XCVR_VENDOR_DATE_WIDTH_QSFP_DD) - if sfp_vendor_date_raw is not None: - sfp_vendor_date_data = sfpi_obj.parse_vendor_date(sfp_vendor_date_raw, 0) - else: - return None - - sfp_connector_raw = self._read_eeprom_specific_bytes((offset + XCVR_CONNECTOR_OFFSET_QSFP_DD), XCVR_CONNECTOR_WIDTH_QSFP_DD) - if sfp_connector_raw is not None: - sfp_connector_data = sfpi_obj.parse_connector(sfp_connector_raw, 0) - else: - return None - - sfp_ext_identifier_raw = self._read_eeprom_specific_bytes((offset + XCVR_EXT_TYPE_OFFSET_QSFP_DD), XCVR_EXT_TYPE_WIDTH_QSFP_DD) - if sfp_ext_identifier_raw is not None: - sfp_ext_identifier_data = sfpi_obj.parse_ext_iden(sfp_ext_identifier_raw, 0) - else: - return None - - sfp_cable_len_raw = self._read_eeprom_specific_bytes((offset + XCVR_CABLE_LENGTH_OFFSET_QSFP_DD), XCVR_CABLE_LENGTH_WIDTH_QSFP_DD) - if sfp_cable_len_raw is not None: - sfp_cable_len_data = sfpi_obj.parse_cable_len(sfp_cable_len_raw, 0) - else: - return None - - sfp_media_type_raw = self._read_eeprom_specific_bytes(XCVR_MEDIA_TYPE_OFFSET_QSFP_DD, XCVR_MEDIA_TYPE_WIDTH_QSFP_DD) - if sfp_media_type_raw is not None: - sfp_media_type_dict = sfpi_obj.parse_media_type(sfp_media_type_raw, 0) - if sfp_media_type_dict is None: - return None - - host_media_list = "" - sfp_application_type_first_list = self._read_eeprom_specific_bytes((XCVR_FIRST_APPLICATION_LIST_OFFSET_QSFP_DD), XCVR_FIRST_APPLICATION_LIST_WIDTH_QSFP_DD) - if self.second_application_list: - possible_application_count = 15 - sfp_application_type_second_list = self._read_eeprom_specific_bytes((XCVR_SECOND_APPLICATION_LIST_OFFSET_QSFP_DD), XCVR_SECOND_APPLICATION_LIST_WIDTH_QSFP_DD) - if sfp_application_type_first_list is not None and sfp_application_type_second_list is not None: - sfp_application_type_list = sfp_application_type_first_list + sfp_application_type_second_list - else: - return None - else: - possible_application_count = 8 - if sfp_application_type_first_list is not None: - sfp_application_type_list = sfp_application_type_first_list - else: - return None - - for i in range(0, possible_application_count): - if sfp_application_type_list[i * 4] == 'ff': - break - host_electrical, media_interface = sfpi_obj.parse_application(sfp_media_type_dict, sfp_application_type_list[i * 4], sfp_application_type_list[i * 4 + 1]) - host_media_list = host_media_list + host_electrical + ' - ' + media_interface + '\n\t\t\t\t ' - else: - return None - - transceiver_info_dict['type'] = str(sfp_type_data['data']['type']['value']) - transceiver_info_dict['manufacturer'] = str(sfp_vendor_name_data['data']['Vendor Name']['value']) - transceiver_info_dict['model'] = str(sfp_vendor_pn_data['data']['Vendor PN']['value']) - transceiver_info_dict['vendor_rev'] = str(sfp_vendor_rev_data['data']['Vendor Rev']['value']) - transceiver_info_dict['serial'] = str(sfp_vendor_sn_data['data']['Vendor SN']['value']) - transceiver_info_dict['vendor_oui'] = str(sfp_vendor_oui_data['data']['Vendor OUI']['value']) - transceiver_info_dict['vendor_date'] = str(sfp_vendor_date_data['data']['VendorDataCode(YYYY-MM-DD Lot)']['value']) - transceiver_info_dict['connector'] = str(sfp_connector_data['data']['Connector']['value']) - transceiver_info_dict['encoding'] = "Not supported for CMIS cables" - transceiver_info_dict['ext_identifier'] = str(sfp_ext_identifier_data['data']['Extended Identifier']['value']) - transceiver_info_dict['ext_rateselect_compliance'] = "Not supported for CMIS cables" - transceiver_info_dict['specification_compliance'] = "Not supported for CMIS cables" - transceiver_info_dict['cable_type'] = "Length Cable Assembly(m)" - transceiver_info_dict['cable_length'] = str(sfp_cable_len_data['data']['Length Cable Assembly(m)']['value']) - transceiver_info_dict['nominal_bit_rate'] = "Not supported for CMIS cables" - transceiver_info_dict['application_advertisement'] = host_media_list - - else: - offset = 0 - vendor_rev_width = XCVR_HW_REV_WIDTH_SFP - interface_info_bulk_width = XCVR_INTFACE_BULK_WIDTH_SFP - - sfpi_obj = sff8472InterfaceId() - if sfpi_obj is None: - print("Error: sfp_object open failed") - return None - - if self.sfp_type != QSFP_DD_TYPE: - sfp_interface_bulk_raw = self._read_eeprom_specific_bytes(offset + XCVR_INTERFACE_DATA_START, XCVR_INTERFACE_DATA_SIZE) - if sfp_interface_bulk_raw is None: - return None - - start = XCVR_INTFACE_BULK_OFFSET - XCVR_INTERFACE_DATA_START - end = start + interface_info_bulk_width - sfp_interface_bulk_data = sfpi_obj.parse_sfp_info_bulk(sfp_interface_bulk_raw[start : end], 0) - - start = XCVR_VENDOR_NAME_OFFSET - XCVR_INTERFACE_DATA_START - end = start + XCVR_VENDOR_NAME_WIDTH - sfp_vendor_name_data = sfpi_obj.parse_vendor_name(sfp_interface_bulk_raw[start : end], 0) - - start = XCVR_VENDOR_PN_OFFSET - XCVR_INTERFACE_DATA_START - end = start + XCVR_VENDOR_PN_WIDTH - sfp_vendor_pn_data = sfpi_obj.parse_vendor_pn(sfp_interface_bulk_raw[start : end], 0) - - start = XCVR_HW_REV_OFFSET - XCVR_INTERFACE_DATA_START - end = start + vendor_rev_width - sfp_vendor_rev_data = sfpi_obj.parse_vendor_rev(sfp_interface_bulk_raw[start : end], 0) - - start = XCVR_VENDOR_SN_OFFSET - XCVR_INTERFACE_DATA_START - end = start + XCVR_VENDOR_SN_WIDTH - sfp_vendor_sn_data = sfpi_obj.parse_vendor_sn(sfp_interface_bulk_raw[start : end], 0) - - start = XCVR_VENDOR_OUI_OFFSET - XCVR_INTERFACE_DATA_START - end = start + XCVR_VENDOR_OUI_WIDTH - sfp_vendor_oui_data = sfpi_obj.parse_vendor_oui(sfp_interface_bulk_raw[start : end], 0) - - start = XCVR_VENDOR_DATE_OFFSET - XCVR_INTERFACE_DATA_START - end = start + XCVR_VENDOR_DATE_WIDTH - sfp_vendor_date_data = sfpi_obj.parse_vendor_date(sfp_interface_bulk_raw[start : end], 0) - - transceiver_info_dict['type'] = sfp_interface_bulk_data['data']['type']['value'] - transceiver_info_dict['manufacturer'] = sfp_vendor_name_data['data']['Vendor Name']['value'] - transceiver_info_dict['model'] = sfp_vendor_pn_data['data']['Vendor PN']['value'] - transceiver_info_dict['vendor_rev'] = sfp_vendor_rev_data['data']['Vendor Rev']['value'] - transceiver_info_dict['serial'] = sfp_vendor_sn_data['data']['Vendor SN']['value'] - transceiver_info_dict['vendor_oui'] = sfp_vendor_oui_data['data']['Vendor OUI']['value'] - transceiver_info_dict['vendor_date'] = sfp_vendor_date_data['data']['VendorDataCode(YYYY-MM-DD Lot)']['value'] - transceiver_info_dict['connector'] = sfp_interface_bulk_data['data']['Connector']['value'] - transceiver_info_dict['encoding'] = sfp_interface_bulk_data['data']['EncodingCodes']['value'] - transceiver_info_dict['ext_identifier'] = sfp_interface_bulk_data['data']['Extended Identifier']['value'] - transceiver_info_dict['ext_rateselect_compliance'] = sfp_interface_bulk_data['data']['RateIdentifier']['value'] - transceiver_info_dict['application_advertisement'] = 'N/A' - - if self.sfp_type == QSFP_TYPE: - for key in qsfp_cable_length_tup: - if key in sfp_interface_bulk_data['data']: - transceiver_info_dict['cable_type'] = key - transceiver_info_dict['cable_length'] = str(sfp_interface_bulk_data['data'][key]['value']) - - for key in qsfp_compliance_code_tup: - if key in sfp_interface_bulk_data['data']['Specification compliance']['value']: - compliance_code_dict[key] = sfp_interface_bulk_data['data']['Specification compliance']['value'][key]['value'] - sfp_ext_specification_compliance_raw = self._read_eeprom_specific_bytes(offset + XCVR_EXT_SPECIFICATION_COMPLIANCE_OFFSET, XCVR_EXT_SPECIFICATION_COMPLIANCE_WIDTH) - if sfp_ext_specification_compliance_raw is not None: - sfp_ext_specification_compliance_data = sfpi_obj.parse_ext_specification_compliance(sfp_ext_specification_compliance_raw[0 : 1], 0) - if sfp_ext_specification_compliance_data['data']['Extended Specification compliance']['value'] != "Unspecified": - compliance_code_dict['Extended Specification compliance'] = sfp_ext_specification_compliance_data['data']['Extended Specification compliance']['value'] - transceiver_info_dict['specification_compliance'] = str(compliance_code_dict) - - transceiver_info_dict['nominal_bit_rate'] = str(sfp_interface_bulk_data['data']['Nominal Bit Rate(100Mbs)']['value']) - else: - for key in sfp_cable_length_tup: - if key in sfp_interface_bulk_data['data']: - transceiver_info_dict['cable_type'] = key - transceiver_info_dict['cable_length'] = str(sfp_interface_bulk_data['data'][key]['value']) - - for key in sfp_compliance_code_tup: - if key in sfp_interface_bulk_data['data']['Specification compliance']['value']: - compliance_code_dict[key] = sfp_interface_bulk_data['data']['Specification compliance']['value'][key]['value'] - transceiver_info_dict['specification_compliance'] = str(compliance_code_dict) - - transceiver_info_dict['nominal_bit_rate'] = str(sfp_interface_bulk_data['data']['NominalSignallingRate(UnitsOf100Mbd)']['value']) - - return transceiver_info_dict - - - 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') - - if self.sfp_type == OSFP_TYPE: - pass - - elif self.sfp_type == QSFP_TYPE: - if not self.dom_supported: - return transceiver_dom_info_dict - - offset = 0 - sfpd_obj = sff8436Dom() - if sfpd_obj is None: - return transceiver_dom_info_dict - - dom_data_raw = self._read_eeprom_specific_bytes((offset + QSFP_DOM_BULK_DATA_START), QSFP_DOM_BULK_DATA_SIZE) - if dom_data_raw is None: - return transceiver_dom_info_dict - - if self.dom_temp_supported: - start = QSFP_TEMPE_OFFSET - QSFP_DOM_BULK_DATA_START - end = start + QSFP_TEMPE_WIDTH - dom_temperature_data = sfpd_obj.parse_temperature(dom_data_raw[start : end], 0) - temp = self._convert_string_to_num(dom_temperature_data['data']['Temperature']['value']) - if temp is not None: - transceiver_dom_info_dict['temperature'] = temp - - if self.dom_volt_supported: - start = QSFP_VOLT_OFFSET - QSFP_DOM_BULK_DATA_START - end = start + QSFP_VOLT_WIDTH - dom_voltage_data = sfpd_obj.parse_voltage(dom_data_raw[start : end], 0) - volt = self._convert_string_to_num(dom_voltage_data['data']['Vcc']['value']) - if volt is not None: - transceiver_dom_info_dict['voltage'] = volt - - start = QSFP_CHANNL_MON_OFFSET - QSFP_DOM_BULK_DATA_START - end = start + QSFP_CHANNL_MON_WITH_TX_POWER_WIDTH - dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params_with_tx_power(dom_data_raw[start : end], 0) - - if self.dom_tx_power_supported: - transceiver_dom_info_dict['tx1power'] = self._convert_string_to_num(dom_channel_monitor_data['data']['TX1Power']['value']) - transceiver_dom_info_dict['tx2power'] = self._convert_string_to_num(dom_channel_monitor_data['data']['TX2Power']['value']) - transceiver_dom_info_dict['tx3power'] = self._convert_string_to_num(dom_channel_monitor_data['data']['TX3Power']['value']) - transceiver_dom_info_dict['tx4power'] = self._convert_string_to_num(dom_channel_monitor_data['data']['TX4Power']['value']) - - if self.dom_rx_power_supported: - transceiver_dom_info_dict['rx1power'] = self._convert_string_to_num(dom_channel_monitor_data['data']['RX1Power']['value']) - transceiver_dom_info_dict['rx2power'] = self._convert_string_to_num(dom_channel_monitor_data['data']['RX2Power']['value']) - transceiver_dom_info_dict['rx3power'] = self._convert_string_to_num(dom_channel_monitor_data['data']['RX3Power']['value']) - transceiver_dom_info_dict['rx4power'] = self._convert_string_to_num(dom_channel_monitor_data['data']['RX4Power']['value']) - - transceiver_dom_info_dict['tx1bias'] = dom_channel_monitor_data['data']['TX1Bias']['value'] - transceiver_dom_info_dict['tx2bias'] = dom_channel_monitor_data['data']['TX2Bias']['value'] - transceiver_dom_info_dict['tx3bias'] = dom_channel_monitor_data['data']['TX3Bias']['value'] - transceiver_dom_info_dict['tx4bias'] = dom_channel_monitor_data['data']['TX4Bias']['value'] - - elif self.sfp_type == QSFP_DD_TYPE: - - offset = 0 - sfpd_obj = qsfp_dd_Dom() - if sfpd_obj is None: - return transceiver_dom_info_dict - - dom_data_raw = self._read_eeprom_specific_bytes((offset + QSFP_DD_DOM_BULK_DATA_START), QSFP_DD_DOM_BULK_DATA_SIZE) - if dom_data_raw is None: - return transceiver_dom_info_dict - - if self.dom_temp_supported: - start = QSFP_DD_TEMPE_OFFSET - QSFP_DD_DOM_BULK_DATA_START - end = start + QSFP_DD_TEMPE_WIDTH - dom_temperature_data = sfpd_obj.parse_temperature(dom_data_raw[start : end], 0) - temp = self._convert_string_to_num(dom_temperature_data['data']['Temperature']['value']) - if temp is not None: - transceiver_dom_info_dict['temperature'] = temp - - if self.dom_volt_supported: - start = QSFP_DD_VOLT_OFFSET - QSFP_DD_DOM_BULK_DATA_START - end = start + QSFP_DD_VOLT_WIDTH - dom_voltage_data = sfpd_obj.parse_voltage(dom_data_raw[start : end], 0) - volt = self._convert_string_to_num(dom_voltage_data['data']['Vcc']['value']) - if volt is not None: - transceiver_dom_info_dict['voltage'] = volt - - if self.dom_rx_tx_power_bias_supported: - # page 11h - offset = 512 - dom_data_raw = self._read_eeprom_specific_bytes(offset + QSFP_DD_CHANNL_MON_OFFSET, QSFP_DD_CHANNL_MON_WIDTH) - if dom_data_raw is None: - return transceiver_dom_info_dict - dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params(dom_data_raw, 0) - - if self.dom_tx_power_supported: - transceiver_dom_info_dict['tx1power'] = str(self._convert_string_to_num(dom_channel_monitor_data['data']['TX1Power']['value'])) - transceiver_dom_info_dict['tx2power'] = str(self._convert_string_to_num(dom_channel_monitor_data['data']['TX2Power']['value'])) - transceiver_dom_info_dict['tx3power'] = str(self._convert_string_to_num(dom_channel_monitor_data['data']['TX3Power']['value'])) - transceiver_dom_info_dict['tx4power'] = str(self._convert_string_to_num(dom_channel_monitor_data['data']['TX4Power']['value'])) - transceiver_dom_info_dict['tx5power'] = str(self._convert_string_to_num(dom_channel_monitor_data['data']['TX5Power']['value'])) - transceiver_dom_info_dict['tx6power'] = str(self._convert_string_to_num(dom_channel_monitor_data['data']['TX6Power']['value'])) - transceiver_dom_info_dict['tx7power'] = str(self._convert_string_to_num(dom_channel_monitor_data['data']['TX7Power']['value'])) - transceiver_dom_info_dict['tx8power'] = str(self._convert_string_to_num(dom_channel_monitor_data['data']['TX8Power']['value'])) - - if self.dom_rx_power_supported: - transceiver_dom_info_dict['rx1power'] = str(self._convert_string_to_num(dom_channel_monitor_data['data']['RX1Power']['value'])) - transceiver_dom_info_dict['rx2power'] = str(self._convert_string_to_num(dom_channel_monitor_data['data']['RX2Power']['value'])) - transceiver_dom_info_dict['rx3power'] = str(self._convert_string_to_num(dom_channel_monitor_data['data']['RX3Power']['value'])) - transceiver_dom_info_dict['rx4power'] = str(self._convert_string_to_num(dom_channel_monitor_data['data']['RX4Power']['value'])) - transceiver_dom_info_dict['rx5power'] = str(self._convert_string_to_num(dom_channel_monitor_data['data']['RX5Power']['value'])) - transceiver_dom_info_dict['rx6power'] = str(self._convert_string_to_num(dom_channel_monitor_data['data']['RX6Power']['value'])) - transceiver_dom_info_dict['rx7power'] = str(self._convert_string_to_num(dom_channel_monitor_data['data']['RX7Power']['value'])) - transceiver_dom_info_dict['rx8power'] = str(self._convert_string_to_num(dom_channel_monitor_data['data']['RX8Power']['value'])) - - if self.dom_tx_bias_power_supported: - transceiver_dom_info_dict['tx1bias'] = str(dom_channel_monitor_data['data']['TX1Bias']['value']) - transceiver_dom_info_dict['tx2bias'] = str(dom_channel_monitor_data['data']['TX2Bias']['value']) - transceiver_dom_info_dict['tx3bias'] = str(dom_channel_monitor_data['data']['TX3Bias']['value']) - transceiver_dom_info_dict['tx4bias'] = str(dom_channel_monitor_data['data']['TX4Bias']['value']) - transceiver_dom_info_dict['tx5bias'] = str(dom_channel_monitor_data['data']['TX5Bias']['value']) - transceiver_dom_info_dict['tx6bias'] = str(dom_channel_monitor_data['data']['TX6Bias']['value']) - transceiver_dom_info_dict['tx7bias'] = str(dom_channel_monitor_data['data']['TX7Bias']['value']) - transceiver_dom_info_dict['tx8bias'] = str(dom_channel_monitor_data['data']['TX8Bias']['value']) - - return transceiver_dom_info_dict - - else: - if not self.dom_supported: - return transceiver_dom_info_dict - - offset = 256 - sfpd_obj = sff8472Dom() - if sfpd_obj is None: - return transceiver_dom_info_dict - sfpd_obj._calibration_type = self.calibration - - dom_data_raw = self._read_eeprom_specific_bytes((offset + SFP_DOM_BULK_DATA_START), SFP_DOM_BULK_DATA_SIZE) - - start = SFP_TEMPE_OFFSET - SFP_DOM_BULK_DATA_START - end = start + SFP_TEMPE_WIDTH - dom_temperature_data = sfpd_obj.parse_temperature(dom_data_raw[start: end], 0) - - start = SFP_VOLT_OFFSET - SFP_DOM_BULK_DATA_START - end = start + SFP_VOLT_WIDTH - dom_voltage_data = sfpd_obj.parse_voltage(dom_data_raw[start: end], 0) - - start = SFP_CHANNL_MON_OFFSET - SFP_DOM_BULK_DATA_START - end = start + SFP_CHANNL_MON_WIDTH - dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params(dom_data_raw[start: end], 0) - - transceiver_dom_info_dict['temperature'] = self._convert_string_to_num(dom_temperature_data['data']['Temperature']['value']) - transceiver_dom_info_dict['voltage'] = self._convert_string_to_num(dom_voltage_data['data']['Vcc']['value']) - transceiver_dom_info_dict['rx1power'] = self._convert_string_to_num(dom_channel_monitor_data['data']['RXPower']['value']) - transceiver_dom_info_dict['tx1bias'] = self._convert_string_to_num(dom_channel_monitor_data['data']['TXBias']['value']) - transceiver_dom_info_dict['tx1power'] = self._convert_string_to_num(dom_channel_monitor_data['data']['TXPower']['value']) - - 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') - - if self.sfp_type == OSFP_TYPE: - pass - - elif self.sfp_type == QSFP_TYPE: - if not self.dom_supported or not self.qsfp_page3_available: - return transceiver_dom_threshold_info_dict - - # Dom Threshold data starts from offset 384 - # Revert offset back to 0 once data is retrieved - offset = QSFP_MODULE_UPPER_PAGE3_START - sfpd_obj = sff8436Dom() - if sfpd_obj is None: - return transceiver_dom_threshold_info_dict - - dom_module_threshold_raw = self._read_eeprom_specific_bytes((offset + QSFP_MODULE_THRESHOLD_OFFSET), QSFP_MODULE_THRESHOLD_WIDTH) - if dom_module_threshold_raw is None: - return transceiver_dom_threshold_info_dict - - dom_module_threshold_data = sfpd_obj.parse_module_threshold_values(dom_module_threshold_raw, 0) - - dom_channel_threshold_raw = self._read_eeprom_specific_bytes((offset + QSFP_CHANNL_THRESHOLD_OFFSET), - QSFP_CHANNL_THRESHOLD_WIDTH) - if dom_channel_threshold_raw is None: - return transceiver_dom_threshold_info_dict - dom_channel_threshold_data = sfpd_obj.parse_channel_threshold_values(dom_channel_threshold_raw, 0) - - # Threshold Data - transceiver_dom_threshold_info_dict['temphighalarm'] = dom_module_threshold_data['data']['TempHighAlarm']['value'] - transceiver_dom_threshold_info_dict['temphighwarning'] = dom_module_threshold_data['data']['TempHighWarning']['value'] - transceiver_dom_threshold_info_dict['templowalarm'] = dom_module_threshold_data['data']['TempLowAlarm']['value'] - transceiver_dom_threshold_info_dict['templowwarning'] = dom_module_threshold_data['data']['TempLowWarning']['value'] - transceiver_dom_threshold_info_dict['vcchighalarm'] = dom_module_threshold_data['data']['VccHighAlarm']['value'] - transceiver_dom_threshold_info_dict['vcchighwarning'] = dom_module_threshold_data['data']['VccHighWarning']['value'] - transceiver_dom_threshold_info_dict['vcclowalarm'] = dom_module_threshold_data['data']['VccLowAlarm']['value'] - transceiver_dom_threshold_info_dict['vcclowwarning'] = dom_module_threshold_data['data']['VccLowWarning']['value'] - transceiver_dom_threshold_info_dict['rxpowerhighalarm'] = dom_channel_threshold_data['data']['RxPowerHighAlarm']['value'] - transceiver_dom_threshold_info_dict['rxpowerhighwarning'] = dom_channel_threshold_data['data']['RxPowerHighWarning']['value'] - transceiver_dom_threshold_info_dict['rxpowerlowalarm'] = dom_channel_threshold_data['data']['RxPowerLowAlarm']['value'] - transceiver_dom_threshold_info_dict['rxpowerlowwarning'] = dom_channel_threshold_data['data']['RxPowerLowWarning']['value'] - transceiver_dom_threshold_info_dict['txbiashighalarm'] = dom_channel_threshold_data['data']['TxBiasHighAlarm']['value'] - transceiver_dom_threshold_info_dict['txbiashighwarning'] = dom_channel_threshold_data['data']['TxBiasHighWarning']['value'] - transceiver_dom_threshold_info_dict['txbiaslowalarm'] = dom_channel_threshold_data['data']['TxBiasLowAlarm']['value'] - transceiver_dom_threshold_info_dict['txbiaslowwarning'] = dom_channel_threshold_data['data']['TxBiasLowWarning']['value'] - transceiver_dom_threshold_info_dict['txpowerhighalarm'] = dom_channel_threshold_data['data']['TxPowerHighAlarm']['value'] - transceiver_dom_threshold_info_dict['txpowerhighwarning'] = dom_channel_threshold_data['data']['TxPowerHighWarning']['value'] - transceiver_dom_threshold_info_dict['txpowerlowalarm'] = dom_channel_threshold_data['data']['TxPowerLowAlarm']['value'] - transceiver_dom_threshold_info_dict['txpowerlowwarning'] = dom_channel_threshold_data['data']['TxPowerLowWarning']['value'] - - elif self.sfp_type == QSFP_DD_TYPE: - if not self.dom_supported: - return transceiver_dom_threshold_info_dict - - if not self.dom_thresholds_supported: - return transceiver_dom_threshold_info_dict - - sfpd_obj = qsfp_dd_Dom() - if sfpd_obj is None: - return transceiver_dom_threshold_info_dict - - # page 02 - offset = 384 - dom_module_threshold_raw = self._read_eeprom_specific_bytes((offset + QSFP_DD_MODULE_THRESHOLD_OFFSET), QSFP_DD_MODULE_THRESHOLD_WIDTH) - if dom_module_threshold_raw is None: - return transceiver_dom_threshold_info_dict - - dom_module_threshold_data = sfpd_obj.parse_module_threshold_values(dom_module_threshold_raw, 0) - - # Threshold Data - transceiver_dom_threshold_info_dict['temphighalarm'] = dom_module_threshold_data['data']['TempHighAlarm']['value'] - transceiver_dom_threshold_info_dict['temphighwarning'] = dom_module_threshold_data['data']['TempHighWarning']['value'] - transceiver_dom_threshold_info_dict['templowalarm'] = dom_module_threshold_data['data']['TempLowAlarm']['value'] - transceiver_dom_threshold_info_dict['templowwarning'] = dom_module_threshold_data['data']['TempLowWarning']['value'] - transceiver_dom_threshold_info_dict['vcchighalarm'] = dom_module_threshold_data['data']['VccHighAlarm']['value'] - transceiver_dom_threshold_info_dict['vcchighwarning'] = dom_module_threshold_data['data']['VccHighWarning']['value'] - transceiver_dom_threshold_info_dict['vcclowalarm'] = dom_module_threshold_data['data']['VccLowAlarm']['value'] - transceiver_dom_threshold_info_dict['vcclowwarning'] = dom_module_threshold_data['data']['VccLowWarning']['value'] - transceiver_dom_threshold_info_dict['rxpowerhighalarm'] = dom_module_threshold_data['data']['RxPowerHighAlarm']['value'] - transceiver_dom_threshold_info_dict['rxpowerhighwarning'] = dom_module_threshold_data['data']['RxPowerHighWarning']['value'] - transceiver_dom_threshold_info_dict['rxpowerlowalarm'] = dom_module_threshold_data['data']['RxPowerLowAlarm']['value'] - transceiver_dom_threshold_info_dict['rxpowerlowwarning'] = dom_module_threshold_data['data']['RxPowerLowWarning']['value'] - transceiver_dom_threshold_info_dict['txbiashighalarm'] = dom_module_threshold_data['data']['TxBiasHighAlarm']['value'] - transceiver_dom_threshold_info_dict['txbiashighwarning'] = dom_module_threshold_data['data']['TxBiasHighWarning']['value'] - transceiver_dom_threshold_info_dict['txbiaslowalarm'] = dom_module_threshold_data['data']['TxBiasLowAlarm']['value'] - transceiver_dom_threshold_info_dict['txbiaslowwarning'] = dom_module_threshold_data['data']['TxBiasLowWarning']['value'] - transceiver_dom_threshold_info_dict['txpowerhighalarm'] = dom_module_threshold_data['data']['TxPowerHighAlarm']['value'] - transceiver_dom_threshold_info_dict['txpowerhighwarning'] = dom_module_threshold_data['data']['TxPowerHighWarning']['value'] - transceiver_dom_threshold_info_dict['txpowerlowalarm'] = dom_module_threshold_data['data']['TxPowerLowAlarm']['value'] - transceiver_dom_threshold_info_dict['txpowerlowwarning'] = dom_module_threshold_data['data']['TxPowerLowWarning']['value'] - - else: - offset = SFP_MODULE_ADDRA2_OFFSET - - if not self.dom_supported: - return transceiver_dom_threshold_info_dict - - sfpd_obj = sff8472Dom(None, self.calibration) - if sfpd_obj is None: - return transceiver_dom_threshold_info_dict - - dom_module_threshold_raw = self._read_eeprom_specific_bytes((offset + SFP_MODULE_THRESHOLD_OFFSET), - SFP_MODULE_THRESHOLD_WIDTH) - if dom_module_threshold_raw is not None: - dom_module_threshold_data = sfpd_obj.parse_alarm_warning_threshold(dom_module_threshold_raw, 0) - else: - return transceiver_dom_threshold_info_dict - - # Threshold Data - transceiver_dom_threshold_info_dict['temphighalarm'] = dom_module_threshold_data['data']['TempHighAlarm']['value'] - transceiver_dom_threshold_info_dict['templowalarm'] = dom_module_threshold_data['data']['TempLowAlarm']['value'] - transceiver_dom_threshold_info_dict['temphighwarning'] = dom_module_threshold_data['data']['TempHighWarning']['value'] - transceiver_dom_threshold_info_dict['templowwarning'] = dom_module_threshold_data['data']['TempLowWarning']['value'] - transceiver_dom_threshold_info_dict['vcchighalarm'] = dom_module_threshold_data['data']['VoltageHighAlarm']['value'] - transceiver_dom_threshold_info_dict['vcclowalarm'] = dom_module_threshold_data['data']['VoltageLowAlarm']['value'] - transceiver_dom_threshold_info_dict['vcchighwarning'] = dom_module_threshold_data['data']['VoltageHighWarning']['value'] - transceiver_dom_threshold_info_dict['vcclowwarning'] = dom_module_threshold_data['data']['VoltageLowWarning']['value'] - transceiver_dom_threshold_info_dict['txbiashighalarm'] = dom_module_threshold_data['data']['BiasHighAlarm']['value'] - transceiver_dom_threshold_info_dict['txbiaslowalarm'] = dom_module_threshold_data['data']['BiasLowAlarm']['value'] - transceiver_dom_threshold_info_dict['txbiashighwarning'] = dom_module_threshold_data['data']['BiasHighWarning']['value'] - transceiver_dom_threshold_info_dict['txbiaslowwarning'] = dom_module_threshold_data['data']['BiasLowWarning']['value'] - transceiver_dom_threshold_info_dict['txpowerhighalarm'] = dom_module_threshold_data['data']['TXPowerHighAlarm']['value'] - transceiver_dom_threshold_info_dict['txpowerlowalarm'] = dom_module_threshold_data['data']['TXPowerLowAlarm']['value'] - transceiver_dom_threshold_info_dict['txpowerhighwarning'] = dom_module_threshold_data['data']['TXPowerHighWarning']['value'] - transceiver_dom_threshold_info_dict['txpowerlowwarning'] = dom_module_threshold_data['data']['TXPowerLowWarning']['value'] - transceiver_dom_threshold_info_dict['rxpowerhighalarm'] = dom_module_threshold_data['data']['RXPowerHighAlarm']['value'] - transceiver_dom_threshold_info_dict['rxpowerlowalarm'] = dom_module_threshold_data['data']['RXPowerLowAlarm']['value'] - transceiver_dom_threshold_info_dict['rxpowerhighwarning'] = dom_module_threshold_data['data']['RXPowerHighWarning']['value'] - transceiver_dom_threshold_info_dict['rxpowerlowwarning'] = dom_module_threshold_data['data']['RXPowerLowWarning']['value'] - - 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. - """ - if not self.dom_supported: - return False - - if self.sfp_type == OSFP_TYPE: - return False - elif self.sfp_type == QSFP_TYPE: - offset = 0 - sfpd_obj = sff8436Dom() - dom_module_monitor_raw = self._read_eeprom_specific_bytes((offset + QSFP_MODULE_MONITOR_OFFSET), QSFP_MODULE_MONITOR_WIDTH) - - if dom_module_monitor_raw is not None: - return True - else: - return False - elif self.sfp_type == SFP_TYPE: - offset = 0 - sfpd_obj = sff8472Dom() - dom_channel_monitor_raw = self._read_eeprom_specific_bytes((offset + SFP_CHANNL_STATUS_OFFSET), SFP_CHANNL_STATUS_WIDTH) - - if dom_channel_monitor_raw is not None: - return True - else: - return False - elif self.sfp_type == QSFP_DD_TYPE: - offset = 0 - sfpd_obj = qsfp_dd_Dom() - dom_channel_status_raw = self._read_eeprom_specific_bytes((offset + QSFP_DD_CHANNL_STATUS_OFFSET), QSFP_DD_CHANNL_STATUS_WIDTH) - - if dom_channel_status_raw is None: - return False - - dom_channel_status_data = sfpd_obj.parse_dom_channel_status(dom_channel_status_raw, 0) - return dom_channel_status_data['data']['Status']['value'] == 'On' + eeprom_raw = list(map(lambda h: int(h, base=16), eeprom_raw)) + return bytearray(eeprom_raw) - def get_rx_los(self): + # read eeprom specfic bytes beginning from offset with size as num_bytes + def read_eeprom(self, offset, num_bytes): """ - Retrieves the RX LOS (lost-of-signal) status of SFP - + Read eeprom specfic bytes beginning from a random offset with size as num_bytes Returns: - A Boolean, True if SFP has RX LOS, False if not. - Note : RX LOS status is latched until a call to get_rx_los or a reset. - """ - if not self.dom_supported: - return None - - rx_los_list = [] - if self.sfp_type == OSFP_TYPE: - return None - elif self.sfp_type == QSFP_TYPE: - offset = 0 - dom_channel_monitor_raw = self._read_eeprom_specific_bytes((offset + QSFP_CHANNL_RX_LOS_STATUS_OFFSET), QSFP_CHANNL_RX_LOS_STATUS_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 & 0x01 != 0) - rx_los_list.append(rx_los_data & 0x02 != 0) - rx_los_list.append(rx_los_data & 0x04 != 0) - rx_los_list.append(rx_los_data & 0x08 != 0) - - elif self.sfp_type == QSFP_DD_TYPE: - # page 11h - if self.dom_rx_tx_power_bias_supported: - offset = 512 - dom_channel_monitor_raw = self._read_eeprom_specific_bytes((offset + QSFP_DD_CHANNL_RX_LOS_STATUS_OFFSET), QSFP_DD_CHANNL_RX_LOS_STATUS_WIDTH) - if dom_channel_monitor_raw is not None: - rx_los_data = int(dom_channel_monitor_raw[0], 8) - rx_los_list.append(rx_los_data & 0x01 != 0) - rx_los_list.append(rx_los_data & 0x02 != 0) - rx_los_list.append(rx_los_data & 0x04 != 0) - rx_los_list.append(rx_los_data & 0x08 != 0) - rx_los_list.append(rx_los_data & 0x10 != 0) - rx_los_list.append(rx_los_data & 0x20 != 0) - rx_los_list.append(rx_los_data & 0x40 != 0) - rx_los_list.append(rx_los_data & 0x80 != 0) - + bytearray, if raw sequence of bytes are read correctly from the offset of size num_bytes + None, if the read_eeprom fails + Example: + mlxreg -d /dev/mst/mt52100_pciconf0 --reg_name MCIA --indexes slot_index=0,module=1,device_address=148,page_number=0,i2c_device_address=0x50,size=16,bank_number=0 -g + Sending access register... + Field Name | Data + =================================== + status | 0x00000000 + slot_index | 0x00000000 + module | 0x00000001 + l | 0x00000000 + device_address | 0x00000094 + page_number | 0x00000000 + i2c_device_address | 0x00000050 + size | 0x00000010 + bank_number | 0x00000000 + dword[0] | 0x43726564 + dword[1] | 0x6f202020 + dword[2] | 0x20202020 + dword[3] | 0x20202020 + dword[4] | 0x00000000 + dword[5] | 0x00000000 + .... + 16 bytes to read from dword -> 0x437265646f2020202020202020202020 -> Credo + """ + # recalculate offset and page. Use 'ethtool' if there is no need to read vendor pages + if offset < SFP_VENDOR_PAGE_START: + return self._read_eeprom_specific_bytes(offset, num_bytes) else: - offset = 256 - dom_channel_monitor_raw = self._read_eeprom_specific_bytes((offset + SFP_CHANNL_STATUS_OFFSET), SFP_CHANNL_STATUS_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) - else: - return None - return rx_los_list - - - def get_tx_fault(self): - """ - Retrieves the TX fault status of SFP - - Returns: - A Boolean, True if SFP has TX fault, False if not - Note : TX fault status is lached until a call to get_tx_fault or a reset. - """ - if not self.dom_supported: - return None + page = (offset - SFP_PAGE_SIZE) // SFP_UPPER_PAGE_OFFSET + 1 + # calculate offset per page + device_address = (offset - SFP_PAGE_SIZE) % SFP_UPPER_PAGE_OFFSET + SFP_UPPER_PAGE_OFFSET - tx_fault_list = [] - if self.sfp_type == OSFP_TYPE: + if not self.mst_pci_device: return None - elif self.sfp_type == QSFP_TYPE: - offset = 0 - dom_channel_monitor_raw = self._read_eeprom_specific_bytes((offset + QSFP_CHANNL_TX_FAULT_STATUS_OFFSET), QSFP_CHANNL_TX_FAULT_STATUS_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 & 0x01 != 0) - tx_fault_list.append(tx_fault_data & 0x02 != 0) - tx_fault_list.append(tx_fault_data & 0x04 != 0) - tx_fault_list.append(tx_fault_data & 0x08 != 0) - - elif self.sfp_type == QSFP_DD_TYPE: - return None - # page 11h - if self.dom_rx_tx_power_bias_supported: - offset = 512 - dom_channel_monitor_raw = self._read_eeprom_specific_bytes((offset + QSFP_DD_CHANNL_TX_FAULT_STATUS_OFFSET), QSFP_DD_CHANNL_TX_FAULT_STATUS_WIDTH) - if dom_channel_monitor_raw is not None: - tx_fault_data = int(dom_channel_monitor_raw[0], 8) - tx_fault_list.append(tx_fault_data & 0x01 != 0) - tx_fault_list.append(tx_fault_data & 0x02 != 0) - tx_fault_list.append(tx_fault_data & 0x04 != 0) - tx_fault_list.append(tx_fault_data & 0x08 != 0) - tx_fault_list.append(tx_fault_data & 0x10 != 0) - tx_fault_list.append(tx_fault_data & 0x20 != 0) - tx_fault_list.append(tx_fault_data & 0x40 != 0) - tx_fault_list.append(tx_fault_data & 0x80 != 0) - else: - offset = 256 - dom_channel_monitor_raw = self._read_eeprom_specific_bytes((offset + SFP_CHANNL_STATUS_OFFSET), SFP_CHANNL_STATUS_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) - else: - return None - return tx_fault_list + mlxreg_mngr = MlxregManager(self.mst_pci_device, self.slot_id, self.sdk_index) + read_output = mlxreg_mngr.read_mlxred_eeprom(device_address, page, num_bytes) + return mlxreg_mngr.parse_mlxreg_read_output(read_output, num_bytes) - - def get_tx_disable(self): + # write eeprom specfic bytes beginning from offset with size as num_bytes + def write_eeprom(self, offset, num_bytes, write_buffer): """ - Retrieves the tx_disable status of this SFP - + write eeprom specfic bytes beginning from a random offset with size as num_bytes + and write_buffer as the required bytes Returns: - A Boolean, True if tx_disable is enabled, False if disabled - - for QSFP, the disable states of each channel which are the lower 4 bits in byte 85 page a0 - for SFP, the TX Disable State and Soft TX Disable Select is ORed as the tx_disable status returned - These two bits are bit 7 & 6 in byte 110 page a2 respectively + Boolean, true if the write succeeded and false if it did not succeed. + Example: + mlxreg -d /dev/mst/mt52100_pciconf0 --reg_name MCIA --indexes slot_index=0,module=1,device_address=154,page_number=5,i2c_device_address=0x50,size=1,bank_number=0 --set dword[0]=0x01000000 -y """ - if not self.dom_supported: - return None - - tx_disable_list = [] - if self.sfp_type == OSFP_TYPE: - return None - elif self.sfp_type == QSFP_TYPE: - offset = 0 - dom_channel_monitor_raw = self._read_eeprom_specific_bytes((offset + QSFP_CHANNL_DISABLE_STATUS_OFFSET), QSFP_CHANNL_DISABLE_STATUS_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 & 0x01 != 0) - tx_disable_list.append(tx_disable_data & 0x02 != 0) - tx_disable_list.append(tx_disable_data & 0x04 != 0) - tx_disable_list.append(tx_disable_data & 0x08 != 0) - - elif self.sfp_type == QSFP_DD_TYPE: - if self.dom_rx_tx_power_bias_supported: - offset = 128 - dom_channel_monitor_raw = self._read_eeprom_specific_bytes((offset + QSFP_DD_CHANNL_DISABLE_STATUS_OFFSET), QSFP_DD_CHANNL_DISABLE_STATUS_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 & 0x01 != 0) - tx_disable_list.append(tx_disable_data & 0x02 != 0) - tx_disable_list.append(tx_disable_data & 0x04 != 0) - tx_disable_list.append(tx_disable_data & 0x08 != 0) - tx_disable_list.append(tx_disable_data & 0x10 != 0) - tx_disable_list.append(tx_disable_data & 0x20 != 0) - tx_disable_list.append(tx_disable_data & 0x40 != 0) - tx_disable_list.append(tx_disable_data & 0x80 != 0) + if num_bytes != len(write_buffer): + logger.log_error("Error mismatch between buffer length and number of bytes to be written") + return False + # recalculate offset and page + if offset < SFP_PAGE_SIZE: + page = 0 + device_address = offset else: - offset = 256 - dom_channel_monitor_raw = self._read_eeprom_specific_bytes((offset + SFP_CHANNL_STATUS_OFFSET), SFP_CHANNL_STATUS_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) - else: - return None - return tx_disable_list - + page = (offset - SFP_PAGE_SIZE) // SFP_UPPER_PAGE_OFFSET + 1 + # calculate offset per page + device_address = (offset - SFP_PAGE_SIZE) % SFP_UPPER_PAGE_OFFSET + SFP_UPPER_PAGE_OFFSET - def get_tx_disable_channel(self): - """ - Retrieves the TX disabled channels in this SFP - - Returns: - A hex of 4 bits (bit 0 to bit 3 as channel 0 to channel 3) to represent - TX channels which have been disabled in this SFP. - As an example, a returned value of 0x5 indicates that channel 0 - and channel 2 have been disabled. - """ - tx_disable_list = self.get_tx_disable() - if tx_disable_list is None: - return 0 - tx_disabled = 0 - for i in range(len(tx_disable_list)): - if tx_disable_list[i]: - tx_disabled |= 1 << i - return tx_disabled + if not self.mst_pci_device: + return False + mlxreg_mngr = MlxregManager(self.mst_pci_device, self.slot_id, self.sdk_index) + dword = mlxreg_mngr.construct_dword(write_buffer) + return mlxreg_mngr.write_mlxreg_eeprom(num_bytes, dword, device_address, page) @classmethod def mgmt_phy_mod_pwr_attr_get(cls, power_attr_type, sdk_handle, sdk_index, slot_id): @@ -1619,8 +421,6 @@ def mgmt_phy_mod_pwr_attr_get(cls, power_attr_type, sdk_handle, sdk_index, slot_ finally: delete_sx_mgmt_phy_mod_pwr_attr_t_p(sx_mgmt_phy_mod_pwr_attr_p) - - def get_lpmode(self): """ Retrieves the lpmode (low power mode) status of this SFP @@ -1629,7 +429,7 @@ def get_lpmode(self): A Boolean, True if lpmode is enabled, False if disabled """ if utils.is_host(): - # To avoid performance issue, + # To avoid performance issue, # call class level method to avoid initialize the whole sonic platform API get_lpmode_code = 'from sonic_platform import sfp;\n' \ 'with sfp.SdkHandleContext() as sdk_handle:' \ @@ -1644,10 +444,9 @@ def get_lpmode(self): else: return self._get_lpmode(self.sdk_handle, self.sdk_index, self.slot_id) - @classmethod def _get_lpmode(cls, sdk_handle, sdk_index, slot_id): - """Class level method to get low power mode. + """Class level method to get low power mode. Args: sdk_handle: SDK handle @@ -1660,369 +459,6 @@ def _get_lpmode(cls, sdk_handle, sdk_index, slot_id): _, oper_pwr_mode = cls.mgmt_phy_mod_pwr_attr_get(SX_MGMT_PHY_MOD_PWR_ATTR_PWR_MODE_E, sdk_handle, sdk_index, slot_id) return oper_pwr_mode == SX_MGMT_PHY_MOD_PWR_MODE_LOW_E - - def get_power_override(self): - """ - Retrieves the power-override status of this SFP - - Returns: - A Boolean, True if power-override is enabled, False if disabled - """ - if self.sfp_type == QSFP_TYPE: - offset = 0 - sfpd_obj = sff8436Dom() - if sfpd_obj is None: - return False - - dom_control_raw = self._read_eeprom_specific_bytes((offset + QSFP_CONTROL_OFFSET), QSFP_CONTROL_WIDTH) - if dom_control_raw is not None: - dom_control_data = sfpd_obj.parse_control_bytes(dom_control_raw, 0) - return ('On' == dom_control_data['data']['PowerOverride']) - else: - return NotImplementedError - - - def get_temperature(self): - """ - Retrieves the temperature of this SFP - - Returns: - An integer number of current temperature in Celsius - """ - if not self.dom_supported: - return None - if self.sfp_type == QSFP_TYPE: - offset = 0 - offset_xcvr = 128 - - sfpd_obj = sff8436Dom() - if sfpd_obj is None: - return None - - if self.dom_temp_supported: - dom_temperature_raw = self._read_eeprom_specific_bytes((offset + QSFP_TEMPE_OFFSET), QSFP_TEMPE_WIDTH) - if dom_temperature_raw is not None: - dom_temperature_data = sfpd_obj.parse_temperature(dom_temperature_raw, 0) - temp = self._convert_string_to_num(dom_temperature_data['data']['Temperature']['value']) - return temp - else: - return None - else: - return None - - elif self.sfp_type == QSFP_DD_TYPE: - offset = 0 - - sfpd_obj = qsfp_dd_Dom() - if sfpd_obj is None: - return None - - if self.dom_temp_supported: - dom_temperature_raw = self._read_eeprom_specific_bytes((offset + QSFP_DD_TEMPE_OFFSET), QSFP_DD_TEMPE_WIDTH) - if dom_temperature_raw is not None: - dom_temperature_data = sfpd_obj.parse_temperature(dom_temperature_raw, 0) - temp = self._convert_string_to_num(dom_temperature_data['data']['Temperature']['value']) - return temp - return None - - else: - offset = 256 - sfpd_obj = sff8472Dom() - if sfpd_obj is None: - return None - sfpd_obj._calibration_type = 1 - - dom_temperature_raw = self._read_eeprom_specific_bytes((offset + SFP_TEMPE_OFFSET), SFP_TEMPE_WIDTH) - if dom_temperature_raw is not None: - dom_temperature_data = sfpd_obj.parse_temperature(dom_temperature_raw, 0) - temp = self._convert_string_to_num(dom_temperature_data['data']['Temperature']['value']) - return temp - else: - return None - - - def get_voltage(self): - """ - Retrieves the supply voltage of this SFP - - Returns: - An integer number of supply voltage in mV - """ - if not self.dom_supported: - return None - if self.sfp_type == QSFP_TYPE: - offset = 0 - offset_xcvr = 128 - - sfpd_obj = sff8436Dom() - if sfpd_obj is None: - return None - - if self.dom_volt_supported: - dom_voltage_raw = self._read_eeprom_specific_bytes((offset + QSFP_VOLT_OFFSET), QSFP_VOLT_WIDTH) - if dom_voltage_raw is not None: - dom_voltage_data = sfpd_obj.parse_voltage(dom_voltage_raw, 0) - voltage = self._convert_string_to_num(dom_voltage_data['data']['Vcc']['value']) - return voltage - else: - return None - return None - - if self.sfp_type == QSFP_DD_TYPE: - offset = 128 - - sfpd_obj = qsfp_dd_Dom() - if sfpd_obj is None: - return None - - if self.dom_volt_supported: - dom_voltage_raw = self._read_eeprom_specific_bytes((offset + QSFP_DD_VOLT_OFFSET), QSFP_DD_VOLT_WIDTH) - if dom_voltage_raw is not None: - dom_voltage_data = sfpd_obj.parse_voltage(dom_voltage_raw, 0) - voltage = self._convert_string_to_num(dom_voltage_data['data']['Vcc']['value']) - return voltage - return None - - else: - offset = 256 - - sfpd_obj = sff8472Dom() - if sfpd_obj is None: - return None - - sfpd_obj._calibration_type = self.calibration - - dom_voltage_raw = self._read_eeprom_specific_bytes((offset + SFP_VOLT_OFFSET), SFP_VOLT_WIDTH) - if dom_voltage_raw is not None: - dom_voltage_data = sfpd_obj.parse_voltage(dom_voltage_raw, 0) - voltage = self._convert_string_to_num(dom_voltage_data['data']['Vcc']['value']) - return voltage - else: - return None - - - def get_tx_bias(self): - """ - Retrieves the TX bias current of this SFP - - Returns: - A list of four integer numbers, representing TX bias in mA - for channel 0 to channel 4. - Ex. ['110.09', '111.12', '108.21', '112.09'] - """ - tx_bias_list = [] - if self.sfp_type == QSFP_TYPE: - offset = 0 - offset_xcvr = 128 - - sfpd_obj = sff8436Dom() - if sfpd_obj is None: - return None - - dom_channel_monitor_raw = self._read_eeprom_specific_bytes((offset + QSFP_CHANNL_MON_OFFSET), QSFP_CHANNL_MON_WITH_TX_POWER_WIDTH) - if dom_channel_monitor_raw is not None: - dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params_with_tx_power(dom_channel_monitor_raw, 0) - tx_bias_list.append(self._convert_string_to_num(dom_channel_monitor_data['data']['TX1Bias']['value'])) - tx_bias_list.append(self._convert_string_to_num(dom_channel_monitor_data['data']['TX2Bias']['value'])) - tx_bias_list.append(self._convert_string_to_num(dom_channel_monitor_data['data']['TX3Bias']['value'])) - tx_bias_list.append(self._convert_string_to_num(dom_channel_monitor_data['data']['TX4Bias']['value'])) - - elif self.sfp_type == QSFP_DD_TYPE: - # page 11h - if self.dom_rx_tx_power_bias_supported: - offset = 512 - sfpd_obj = qsfp_dd_Dom() - if sfpd_obj is None: - return None - - if self.dom_tx_bias_power_supported: - dom_tx_bias_raw = self._read_eeprom_specific_bytes((offset + QSFP_DD_TX_BIAS_OFFSET), QSFP_DD_TX_BIAS_WIDTH) - if dom_tx_bias_raw is not None: - dom_tx_bias_data = sfpd_obj.parse_dom_tx_bias(dom_tx_bias_raw, 0) - tx_bias_list.append(self._convert_string_to_num(dom_tx_bias_data['data']['TX1Bias']['value'])) - tx_bias_list.append(self._convert_string_to_num(dom_tx_bias_data['data']['TX2Bias']['value'])) - tx_bias_list.append(self._convert_string_to_num(dom_tx_bias_data['data']['TX3Bias']['value'])) - tx_bias_list.append(self._convert_string_to_num(dom_tx_bias_data['data']['TX4Bias']['value'])) - tx_bias_list.append(self._convert_string_to_num(dom_tx_bias_data['data']['TX5Bias']['value'])) - tx_bias_list.append(self._convert_string_to_num(dom_tx_bias_data['data']['TX6Bias']['value'])) - tx_bias_list.append(self._convert_string_to_num(dom_tx_bias_data['data']['TX7Bias']['value'])) - tx_bias_list.append(self._convert_string_to_num(dom_tx_bias_data['data']['TX8Bias']['value'])) - - else: - offset = 256 - - sfpd_obj = sff8472Dom() - if sfpd_obj is None: - return None - sfpd_obj._calibration_type = self.calibration - - if self.dom_supported: - dom_channel_monitor_raw = self._read_eeprom_specific_bytes((offset + SFP_CHANNL_MON_OFFSET), SFP_CHANNL_MON_WIDTH) - if dom_channel_monitor_raw is not None: - dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params(dom_channel_monitor_raw, 0) - tx_bias_list.append(self._convert_string_to_num(dom_channel_monitor_data['data']['TXBias']['value'])) - else: - return None - else: - return None - - return tx_bias_list - - - def get_rx_power(self): - """ - Retrieves the received optical power for this SFP - - Returns: - A list of four integer numbers, representing received optical - power in mW for channel 0 to channel 4. - Ex. ['1.77', '1.71', '1.68', '1.70'] - """ - rx_power_list = [] - if self.sfp_type == OSFP_TYPE: - # OSFP not supported on our platform yet. - return None - - elif self.sfp_type == QSFP_TYPE: - offset = 0 - offset_xcvr = 128 - - sfpd_obj = sff8436Dom() - if sfpd_obj is None: - return None - - if self.dom_rx_power_supported: - dom_channel_monitor_raw = self._read_eeprom_specific_bytes((offset + QSFP_CHANNL_MON_OFFSET), QSFP_CHANNL_MON_WITH_TX_POWER_WIDTH) - if dom_channel_monitor_raw is not None: - dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params_with_tx_power(dom_channel_monitor_raw, 0) - rx_power_list.append(self._convert_string_to_num(dom_channel_monitor_data['data']['RX1Power']['value'])) - rx_power_list.append(self._convert_string_to_num(dom_channel_monitor_data['data']['RX2Power']['value'])) - rx_power_list.append(self._convert_string_to_num(dom_channel_monitor_data['data']['RX3Power']['value'])) - rx_power_list.append(self._convert_string_to_num(dom_channel_monitor_data['data']['RX4Power']['value'])) - else: - return None - else: - return None - - elif self.sfp_type == QSFP_DD_TYPE: - # page 11 - if self.dom_rx_tx_power_bias_supported: - offset = 512 - sfpd_obj = qsfp_dd_Dom() - if sfpd_obj is None: - return None - - if self.dom_rx_power_supported: - dom_rx_power_raw = self._read_eeprom_specific_bytes((offset + QSFP_DD_RX_POWER_OFFSET), QSFP_DD_RX_POWER_WIDTH) - if dom_rx_power_raw is not None: - dom_rx_power_data = sfpd_obj.parse_dom_rx_power(dom_rx_power_raw, 0) - rx_power_list.append(self._convert_string_to_num(dom_rx_power_data['data']['RX1Power']['value'])) - rx_power_list.append(self._convert_string_to_num(dom_rx_power_data['data']['RX2Power']['value'])) - rx_power_list.append(self._convert_string_to_num(dom_rx_power_data['data']['RX3Power']['value'])) - rx_power_list.append(self._convert_string_to_num(dom_rx_power_data['data']['RX4Power']['value'])) - rx_power_list.append(self._convert_string_to_num(dom_rx_power_data['data']['RX5Power']['value'])) - rx_power_list.append(self._convert_string_to_num(dom_rx_power_data['data']['RX6Power']['value'])) - rx_power_list.append(self._convert_string_to_num(dom_rx_power_data['data']['RX7Power']['value'])) - rx_power_list.append(self._convert_string_to_num(dom_rx_power_data['data']['RX8Power']['value'])) - - else: - offset = 256 - - sfpd_obj = sff8472Dom() - if sfpd_obj is None: - return None - - if self.dom_supported: - sfpd_obj._calibration_type = self.calibration - - dom_channel_monitor_raw = self._read_eeprom_specific_bytes((offset + SFP_CHANNL_MON_OFFSET), SFP_CHANNL_MON_WIDTH) - if dom_channel_monitor_raw is not None: - dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params(dom_channel_monitor_raw, 0) - rx_power_list.append(self._convert_string_to_num(dom_channel_monitor_data['data']['RXPower']['value'])) - else: - return None - else: - return None - return rx_power_list - - - def get_tx_power(self): - """ - Retrieves the TX power of this SFP - - Returns: - A list of four integer numbers, representing TX power in mW - for channel 0 to channel 4. - Ex. ['1.86', '1.86', '1.86', '1.86'] - """ - tx_power_list = [] - if self.sfp_type == OSFP_TYPE: - # OSFP not supported on our platform yet. - return None - - elif self.sfp_type == QSFP_TYPE: - offset = 0 - offset_xcvr = 128 - - sfpd_obj = sff8436Dom() - if sfpd_obj is None: - return None - - if self.dom_tx_power_supported: - dom_channel_monitor_raw = self._read_eeprom_specific_bytes((offset + QSFP_CHANNL_MON_OFFSET), QSFP_CHANNL_MON_WITH_TX_POWER_WIDTH) - if dom_channel_monitor_raw is not None: - dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params_with_tx_power(dom_channel_monitor_raw, 0) - tx_power_list.append(self._convert_string_to_num(dom_channel_monitor_data['data']['TX1Power']['value'])) - tx_power_list.append(self._convert_string_to_num(dom_channel_monitor_data['data']['TX2Power']['value'])) - tx_power_list.append(self._convert_string_to_num(dom_channel_monitor_data['data']['TX3Power']['value'])) - tx_power_list.append(self._convert_string_to_num(dom_channel_monitor_data['data']['TX4Power']['value'])) - else: - return None - else: - return None - - elif self.sfp_type == QSFP_DD_TYPE: - return None - # page 11 - if self.dom_rx_tx_power_bias_supported: - offset = 512 - sfpd_obj = qsfp_dd_Dom() - if sfpd_obj is None: - return None - - if self.dom_tx_power_supported: - dom_tx_power_raw = self._read_eeprom_specific_bytes((offset + QSFP_DD_TX_POWER_OFFSET), QSFP_DD_TX_POWER_WIDTH) - if dom_tx_power_raw is not None: - dom_tx_power_data = sfpd_obj.parse_dom_tx_power(dom_tx_power_raw, 0) - tx_power_list.append(self._convert_string_to_num(dom_tx_power_data['data']['TX1Power']['value'])) - tx_power_list.append(self._convert_string_to_num(dom_tx_power_data['data']['TX2Power']['value'])) - tx_power_list.append(self._convert_string_to_num(dom_tx_power_data['data']['TX3Power']['value'])) - tx_power_list.append(self._convert_string_to_num(dom_tx_power_data['data']['TX4Power']['value'])) - tx_power_list.append(self._convert_string_to_num(dom_tx_power_data['data']['TX5Power']['value'])) - tx_power_list.append(self._convert_string_to_num(dom_tx_power_data['data']['TX6Power']['value'])) - tx_power_list.append(self._convert_string_to_num(dom_tx_power_data['data']['TX7Power']['value'])) - tx_power_list.append(self._convert_string_to_num(dom_tx_power_data['data']['TX8Power']['value'])) - - else: - offset = 256 - sfpd_obj = sff8472Dom() - if sfpd_obj is None: - return None - - if self.dom_supported: - sfpd_obj._calibration_type = self.calibration - - dom_channel_monitor_raw = self._read_eeprom_specific_bytes((offset + SFP_CHANNL_MON_OFFSET), SFP_CHANNL_MON_WIDTH) - if dom_channel_monitor_raw is not None: - dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params(dom_channel_monitor_raw, 0) - tx_power_list.append(self._convert_string_to_num(dom_channel_monitor_data['data']['TXPower']['value'])) - else: - return None - else: - return None - return tx_power_list - - def reset(self): """ Reset SFP and return all user module settings to their default state. @@ -2033,7 +469,7 @@ def reset(self): refer plugins/sfpreset.py """ if utils.is_host(): - # To avoid performance issue, + # To avoid performance issue, # call class level method to avoid initialize the whole sonic platform API reset_code = 'from sonic_platform import sfp;\n' \ 'with sfp.SdkHandleContext() as sdk_handle:' \ @@ -2050,7 +486,6 @@ def reset(self): else: return self._reset(self.sdk_handle, self.sdk_index, self.slot_id) - @classmethod def _reset(cls, sdk_handle, sdk_index, slot_id): module_id_info = sx_mgmt_module_id_info_t() @@ -2063,41 +498,6 @@ def _reset(cls, sdk_handle, sdk_index, slot_id): return rc == SX_STATUS_SUCCESS - def tx_disable(self, tx_disable): - """ - Disable SFP TX for all channels - - Args: - tx_disable : A Boolean, True to enable tx_disable mode, False to disable - tx_disable mode. - - Returns: - A boolean, True if tx_disable is set successfully, False if not - - for SFP, make use of bit 6 of byte at (offset 110, a2h (i2c addr 0x51)) to disable/enable tx - for QSFP, set all channels to disable/enable tx - """ - return NotImplementedError - - - def tx_disable_channel(self, channel, disable): - """ - Sets the tx_disable for specified SFP channels - - Args: - channel : A hex of 4 bits (bit 0 to bit 3) which represent channel 0 to 3, - e.g. 0x5 for channel 0 and channel 2. - disable : A boolean, True to disable TX channels specified in channel, - False to enable - - Returns: - A boolean, True if successful, False if not - - QSFP: page a0, address 86, lower 4 bits - """ - return NotImplementedError - - @classmethod def is_nve(cls, port): return (port & NVE_MASK) != 0 @@ -2117,7 +517,7 @@ 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) - + 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) @@ -2220,7 +620,7 @@ def set_lpmode(self, lpmode): A boolean, True if lpmode is set successfully, False if not """ if utils.is_host(): - # To avoid performance issue, + # To avoid performance issue, # call class level method to avoid initialize the whole sonic platform API set_lpmode_code = 'from sonic_platform import sfp;\n' \ 'with sfp.SdkHandleContext() as sdk_handle:' \ @@ -2238,42 +638,20 @@ def set_lpmode(self, lpmode): else: return self._set_lpmode(lpmode, self.sdk_handle, self.sdk_index, self.slot_id) - + @classmethod def _set_lpmode(cls, lpmode, sdk_handle, sdk_index, slot_id): log_port_list = cls.get_logical_ports(sdk_handle, sdk_index, slot_id) sdk_lpmode = SX_MGMT_PHY_MOD_PWR_MODE_LOW_E if lpmode else SX_MGMT_PHY_MOD_PWR_MODE_AUTO_E - cls._set_lpmode_raw(sdk_handle, - sdk_index, + cls._set_lpmode_raw(sdk_handle, + sdk_index, slot_id, - log_port_list, - SX_MGMT_PHY_MOD_PWR_ATTR_PWR_MODE_E, + log_port_list, + SX_MGMT_PHY_MOD_PWR_ATTR_PWR_MODE_E, sdk_lpmode) logger.log_info("{} low power mode for module {}, slot {}".format("Enabled" if lpmode else "Disabled", sdk_index, slot_id)) return True - - def set_power_override(self, power_override, power_set): - """ - Sets SFP power level using power_override and power_set - - Args: - power_override : - A Boolean, True to override set_lpmode and use power_set - to control SFP power, False to disable SFP power control - through power_override/power_set and use set_lpmode - to control SFP power. - power_set : - Only valid when power_override is True. - A Boolean, True to set SFP to low power mode, False to set - SFP to high power mode. - - Returns: - A boolean, True if power-override and power_set are set successfully, - False if not - """ - return NotImplementedError - def is_replaceable(self): """ Indicate whether this device is replaceable. 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 669c49db8131..4749a6fbe710 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp_event.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp_event.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2019-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2019-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -257,7 +257,7 @@ def check_sfp_status(self, port_change, error_dict, timeout): found = 0 try: - read, _, _ = select.select([self.rx_fd_p.fd], [], [], timeout) + read, _, _ = select.select([self.rx_fd_p.fd], [], [], float(timeout) / 1000) print(read) except select.error as err: rc, msg = err @@ -360,16 +360,12 @@ def on_pmpe(self, fd_p): 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) port_cnt = uint32_t_p_value(port_cnt_p) - x = 0 # x is the port index within a LC for i in range(port_cnt): port_attributes = sx_port_attributes_t_arr_getitem(port_attributes_list,i) if port_attributes.log_port == logical_port: - label_port = slot_id * DeviceDataManager.get_linecard_max_port_count() + x + 1 + label_port = slot_id * DeviceDataManager.get_linecard_max_port_count() + port_attributes.port_mapping.module_port break - if port_attributes.port_mapping.slot_id == slot_id: - x += 1 - if label_port is not None: label_port_list.append(label_port) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/thermal.py b/platform/mellanox/mlnx-platform-api/sonic_platform/thermal.py index e4d22575450c..bc307bc5e076 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/thermal.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/thermal.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2019-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2019-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -400,9 +400,14 @@ def get_min_allowed_cooling_level_by_thermal_zone(cls): thermal_zone_present = False try: for thermal_zone_folder in glob.iglob(THERMAL_ZONE_FOLDER_WILDCARD): + current = utils.read_int_from_file(os.path.join(thermal_zone_folder, THERMAL_ZONE_TEMP_FILE)) + if current == 0: + # Temperature value 0 means that this thermal zone has no + # sensor and it should be ignored in this loop + continue + thermal_zone_present = True normal_thresh = utils.read_int_from_file(os.path.join(thermal_zone_folder, THERMAL_ZONE_NORMAL_THRESHOLD)) - current = utils.read_int_from_file(os.path.join(thermal_zone_folder, THERMAL_ZONE_TEMP_FILE)) if current < normal_thresh - THERMAL_ZONE_HYSTERESIS: continue @@ -519,7 +524,7 @@ def monitor_asic_themal_zone(cls): else: cls.expect_cooling_state = None - + class RemovableThermal(Thermal): def __init__(self, name, temp_file, high_th_file, high_crit_th_file, position, presence_cb): super(RemovableThermal, self).__init__(name, temp_file, high_th_file, high_crit_th_file, position) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_actions.py b/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_actions.py index 3b93a7468b15..bada4476d4c2 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_actions.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_actions.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2020-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_conditions.py b/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_conditions.py index 456923d230c2..24a22c41019b 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_conditions.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_conditions.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2020-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_manager.py b/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_manager.py index 895d3aaefedb..dcdd25e90635 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_manager.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_manager.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2020-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,6 +15,8 @@ # limitations under the License. # from sonic_platform_base.sonic_thermal_control.thermal_manager_base import ThermalManagerBase +from .cpu_thermal_control import CPUThermalControl +from .device_data import DeviceDataManager from .thermal_actions import * from .thermal_conditions import * from .thermal_infos import * @@ -22,6 +24,8 @@ class ThermalManager(ThermalManagerBase): + cpu_thermal_control = None + @classmethod def start_thermal_control_algorithm(cls): """ @@ -42,8 +46,30 @@ def stop_thermal_control_algorithm(cls): """ Thermal.set_thermal_algorithm_status(False) + @classmethod + def start_cpu_thermal_control_algoritm(cls): + if cls.cpu_thermal_control: + return + + if not DeviceDataManager.is_cpu_thermal_control_supported(): + return + + cls.cpu_thermal_control = CPUThermalControl() + cls.cpu_thermal_control.task_run() + + @classmethod + def stop_cpu_thermal_control_algoritm(cls): + if cls.cpu_thermal_control: + cls.cpu_thermal_control.task_stop() + cls.cpu_thermal_control = None + @classmethod def run_policy(cls, chassis): + if cls._running: + cls.start_cpu_thermal_control_algoritm() + else: + cls.stop_cpu_thermal_control_algoritm() + if not cls._policy_dict: return @@ -59,7 +85,6 @@ def run_policy(cls, chassis): if not cls._running: return try: - print(policy.name) if policy.is_match(cls._thermal_info_dict): policy.do_action(cls._thermal_info_dict) except Exception as e: diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py b/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py index 0650d9af1a1c..22ef4bb1f27d 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py @@ -194,3 +194,16 @@ def _impl(*args, **kwargs): return return_value return _impl return wrapper + + +def run_command(command): + """ + Utility function to run an shell command and return the output. + :param command: Shell command string. + :return: Output of the shell command. + """ + try: + 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 diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/vpd_parser.py b/platform/mellanox/mlnx-platform-api/sonic_platform/vpd_parser.py index ea66234e4bff..e53d825adfd6 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/vpd_parser.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/vpd_parser.py @@ -24,6 +24,7 @@ SN_VPD_FIELD = "SN_VPD_FIELD" PN_VPD_FIELD = "PN_VPD_FIELD" REV_VPD_FIELD = "REV_VPD_FIELD" +MFR_VPD_FIELD = "MFR_NAME" class VpdParser: @@ -82,3 +83,17 @@ def get_revision(self): logger.log_error("Fail to read revision: No key {} in VPD {}".format(REV_VPD_FIELD, self.vpd_file)) return 'N/A' return self.vpd_data.get(REV_VPD_FIELD, 'N/A') + + def get_entry_value(self, key): + """ + Retrieves an vpd entry of the device + + Returns: + string: Vpd entry value of device + """ + if self._get_data() and key not in self.vpd_data: + logger.log_warning("Fail to read vpd info: No key {} in VPD {}".format(key, self.vpd_file)) + return 'N/A' + return self.vpd_data.get(key, 'N/A') + + diff --git a/platform/mellanox/mlnx-platform-api/tests/conftest.py b/platform/mellanox/mlnx-platform-api/tests/conftest.py index c69ba8464e28..b69fdd6c75f0 100644 --- a/platform/mellanox/mlnx-platform-api/tests/conftest.py +++ b/platform/mellanox/mlnx-platform-api/tests/conftest.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/platform/mellanox/mlnx-platform-api/tests/input_platform/__init__.py b/platform/mellanox/mlnx-platform-api/tests/input_platform/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/platform/mellanox/mlnx-platform-api/tests/input_platform/output_sfp.py b/platform/mellanox/mlnx-platform-api/tests/input_platform/output_sfp.py new file mode 100644 index 000000000000..20a09d1b54f6 --- /dev/null +++ b/platform/mellanox/mlnx-platform-api/tests/input_platform/output_sfp.py @@ -0,0 +1,55 @@ +""" +module holding the correct values for the sfp_test.py +""" + +read_eeprom_output = """ +Sending access register... +Field Name | Data +=================================== +status | 0x00000000 +slot_index | 0x00000000 +module | 0x00000001 +l | 0x00000000 +device_address | 0x000000a8 +page_number | 0x00000000 +i2c_device_address | 0x00000050 +size | 0x00000010 +bank_number | 0x00000000 +dword[0] | 0x43414331 +dword[1] | 0x31353332 +dword[2] | 0x31503250 +dword[3] | 0x41324d53 +dword[4] | 0x00000000 +dword[5] | 0x00000000 +dword[6] | 0x00000000 +dword[7] | 0x00000000 +dword[8] | 0x00000000 +dword[9] | 0x00000000 +dword[10] | 0x00000000 +dword[11] | 0x00000000 +dword[12] | 0x00000000 +dword[13] | 0x00000000 +dword[14] | 0x00000000 +dword[15] | 0x00000000 +dword[16] | 0x00000000 +dword[17] | 0x00000000 +dword[18] | 0x00000000 +dword[19] | 0x00000000 +dword[20] | 0x00000000 +dword[21] | 0x00000000 +dword[22] | 0x00000000 +dword[23] | 0x00000000 +dword[24] | 0x00000000 +dword[25] | 0x00000000 +dword[26] | 0x00000000 +dword[27] | 0x00000000 +dword[28] | 0x00000000 +dword[29] | 0x00000000 +dword[30] | 0x00000000 +dword[31] | 0x00000000 +=================================== +""" + +y_cable_part_number = "CAC115321P2PA2MS" +write_eeprom_dword1 = "dword[0]=0x01020304" +write_eeprom_dword2 = "dword[0]=0x01020304,dword[1]=0x05060000" diff --git a/platform/mellanox/mlnx-platform-api/tests/test_chassis.py b/platform/mellanox/mlnx-platform-api/tests/test_chassis.py index cfa2d8224718..a7eff5b08625 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_chassis.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_chassis.py @@ -38,7 +38,7 @@ class TestChassis: 2. Fan drawer related API 3. SFP related API (Except modular chassis SFP related API) 4. Reboot cause related API - + Thermal, Eeprom, Watchdog, Component, System LED related API will be tested in seperate class """ @classmethod @@ -166,7 +166,6 @@ def test_sfp(self): @mock.patch('sonic_platform.sfp_event.sfp_event.check_sfp_status', MagicMock()) @mock.patch('sonic_platform.sfp_event.sfp_event.__init__', MagicMock(return_value=None)) @mock.patch('sonic_platform.sfp_event.sfp_event.initialize', MagicMock()) - @mock.patch('sonic_platform.sfp.SFP.reinit', MagicMock()) @mock.patch('sonic_platform.device_data.DeviceDataManager.get_sfp_count', MagicMock(return_value=3)) def test_change_event(self): from sonic_platform.sfp_event import sfp_event @@ -185,7 +184,6 @@ def mock_check_sfp_status(self, port_dict, error_dict, timeout): assert status is True assert 'sfp' in event_dict and event_dict['sfp'][1] == '1' assert len(chassis._sfp_list) == 3 - assert SFP.reinit.call_count == 1 # Call get_change_event with timeout=1.0 return_port_dict = {} diff --git a/platform/mellanox/mlnx-platform-api/tests/test_cpu_thermal_control.py b/platform/mellanox/mlnx-platform-api/tests/test_cpu_thermal_control.py new file mode 100644 index 000000000000..8970e659c0c8 --- /dev/null +++ b/platform/mellanox/mlnx-platform-api/tests/test_cpu_thermal_control.py @@ -0,0 +1,83 @@ +# +# Copyright (c) 2019-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. +# +############################################################################# +# Mellanox +# +# Module contains an implementation of SONiC Platform Base API and +# provides the Chassis information which are available in the platform +# +############################################################################# + +import glob +import os +import pytest +import sys +if sys.version_info.major == 3: + from unittest import mock +else: + import mock + +test_path = os.path.dirname(os.path.abspath(__file__)) +modules_path = os.path.dirname(test_path) +sys.path.insert(0, modules_path) + +from sonic_platform.cpu_thermal_control import CPUThermalControl + + +class TestCPUThermalControl: + @mock.patch('sonic_platform.device_data.DeviceDataManager.get_cpu_thermal_threshold', mock.MagicMock(return_value=(85, 95))) + @mock.patch('sonic_platform.utils.read_int_from_file') + @mock.patch('sonic_platform.utils.write_file') + def test_run(self, mock_write_file, mock_read_file): + instance = CPUThermalControl() + file_content = { + CPUThermalControl.CPU_COOLING_STATE: 5, + CPUThermalControl.CPU_TEMP_FILE: instance.temp_high + 1 + } + + def read_file(file_path, **kwargs): + return file_content[file_path] + + mock_read_file.side_effect = read_file + # Test current temp is higher than high threshold + instance.run(0) + mock_write_file.assert_called_with(CPUThermalControl.CPU_COOLING_STATE, CPUThermalControl.MAX_COOLING_STATE, log_func=None) + + # Test current temp is lower than low threshold + file_content[CPUThermalControl.CPU_TEMP_FILE] = instance.temp_low - 1 + instance.run(0) + mock_write_file.assert_called_with(CPUThermalControl.CPU_COOLING_STATE, CPUThermalControl.MIN_COOLING_STATE, log_func=None) + + # Test current temp increasing + file_content[CPUThermalControl.CPU_TEMP_FILE] = instance.temp_low + instance.run(0) + mock_write_file.assert_called_with(CPUThermalControl.CPU_COOLING_STATE, 6, log_func=None) + + # Test current temp decreasing + instance.run(instance.temp_low + 1) + mock_write_file.assert_called_with(CPUThermalControl.CPU_COOLING_STATE, 4, log_func=None) + + # Test current temp increasing and current cooling state is already the max + file_content[CPUThermalControl.CPU_TEMP_FILE] = 85 + file_content[CPUThermalControl.CPU_COOLING_STATE] = CPUThermalControl.MAX_COOLING_STATE + instance.run(84) + mock_write_file.assert_called_with(CPUThermalControl.CPU_COOLING_STATE, CPUThermalControl.MAX_COOLING_STATE, log_func=None) + + # Test current temp decreasing and current cooling state is already the max + file_content[CPUThermalControl.CPU_COOLING_STATE] = CPUThermalControl.MIN_COOLING_STATE + instance.run(86) + mock_write_file.assert_called_with(CPUThermalControl.CPU_COOLING_STATE, CPUThermalControl.MIN_COOLING_STATE, log_func=None) diff --git a/platform/mellanox/mlnx-platform-api/tests/test_fan_api.py b/platform/mellanox/mlnx-platform-api/tests/test_fan_api.py index 2aa33c213882..5845a1b2cadb 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_fan_api.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_fan_api.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2020-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/platform/mellanox/mlnx-platform-api/tests/test_firmware.py b/platform/mellanox/mlnx-platform-api/tests/test_firmware.py index 5d576cd2d0cd..a08dbb9d1464 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_firmware.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_firmware.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/platform/mellanox/mlnx-platform-api/tests/test_psu.py b/platform/mellanox/mlnx-platform-api/tests/test_psu.py index 6de042e7bd8b..68260ef630f7 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_psu.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_psu.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -50,6 +50,7 @@ def test_fixed_psu(self): assert psu.get_temperature() is None assert psu.get_temperature_high_threshold() is None + @mock.patch('os.path.exists', mock.MagicMock(return_value=True)) def test_psu(self): psu = Psu(0) assert len(psu._fan_list) == 1 @@ -58,6 +59,8 @@ def test_psu(self): psu.psu_presence: 1, psu.psu_oper_status: 1, psu.psu_voltage: 10234, + psu.psu_voltage_min: 9000, + psu.psu_voltage_max: 12000, psu.psu_current: 20345, psu.psu_power: 30456, psu.psu_temp: 40567, @@ -68,6 +71,7 @@ def mock_read_int_from_file(file_path, **kwargs): return mock_sysfs_content[file_path] utils.read_int_from_file = mock_read_int_from_file + utils.read_str_from_file = mock.MagicMock(return_value='min max') assert psu.get_presence() is True mock_sysfs_content[psu.psu_presence] = 0 assert psu.get_presence() is False @@ -84,6 +88,8 @@ def mock_read_int_from_file(file_path, **kwargs): mock_sysfs_content[psu.psu_oper_status] = 1 assert psu.get_voltage() == 10.234 + assert psu.get_voltage_high_threshold() == 12.0 + assert psu.get_voltage_low_threshold() == 9.0 assert psu.get_current() == 20.345 assert psu.get_power() == 0.030456 assert psu.get_temperature() == 40.567 @@ -110,3 +116,40 @@ def test_psu_vpd(self): assert psu.get_model() == 'MTEF-PSF-AC-C' assert psu.get_serial() == 'MT1946X07684' assert psu.get_revision() == 'A3' + + assert psu.vpd_parser.get_entry_value('MFR_NAME') == 'DELTA' + + @mock.patch('sonic_platform.utils.read_int_from_file', mock.MagicMock(return_value=9999)) + @mock.patch('sonic_platform.utils.run_command') + @mock.patch('sonic_platform.device_data.DeviceDataManager.get_platform_name') + @mock.patch('sonic_platform.vpd_parser.VpdParser.get_entry_value') + def test_psu_workaround(self, mock_get_entry_value, mock_get_platform_name, mock_run_command): + from sonic_platform.psu import InvalidPsuVolWA + psu = Psu(0) + # Threshold value is not InvalidPsuVolWA.INVALID_VOLTAGE_VALUE + assert InvalidPsuVolWA.run(psu, 9999, '') == 9999 + + # Platform name is not in InvalidPsuVolWA.EXPECT_PLATFORMS + mock_get_platform_name.return_value = 'some platform' + assert InvalidPsuVolWA.run(psu, InvalidPsuVolWA.INVALID_VOLTAGE_VALUE, '') == InvalidPsuVolWA.INVALID_VOLTAGE_VALUE + + # PSU vendor is not InvalidPsuVolWA.EXPECT_VENDOR_NAME + vpd_info = { + InvalidPsuVolWA.MFR_FIELD: 'some psu', + InvalidPsuVolWA.CAPACITY_FIELD: 'some capacity' + } + def get_entry_value(key): + return vpd_info[key] + + mock_get_entry_value.side_effect = get_entry_value + mock_get_platform_name.return_value = 'x86_64-mlnx_msn3700-r0' + assert InvalidPsuVolWA.run(psu, InvalidPsuVolWA.INVALID_VOLTAGE_VALUE, '') == InvalidPsuVolWA.INVALID_VOLTAGE_VALUE + + # PSU capacity is not InvalidPsuVolWA.EXPECT_CAPACITY + vpd_info[InvalidPsuVolWA.MFR_FIELD] = InvalidPsuVolWA.EXPECT_VENDOR_NAME + assert InvalidPsuVolWA.run(psu, InvalidPsuVolWA.INVALID_VOLTAGE_VALUE, '') == InvalidPsuVolWA.INVALID_VOLTAGE_VALUE + + # Normal + vpd_info[InvalidPsuVolWA.CAPACITY_FIELD] = InvalidPsuVolWA.EXPECT_CAPACITY + assert InvalidPsuVolWA.run(psu, InvalidPsuVolWA.INVALID_VOLTAGE_VALUE, '') == 9999 + mock_run_command.assert_called_with('sensors -s') diff --git a/platform/mellanox/mlnx-platform-api/tests/test_sfp.py b/platform/mellanox/mlnx-platform-api/tests/test_sfp.py index 0ad9537430b9..dcb3953ded88 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_sfp.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_sfp.py @@ -27,6 +27,9 @@ from sonic_platform.sfp import SFP, SX_PORT_MODULE_STATUS_INITIALIZING, SX_PORT_MODULE_STATUS_PLUGGED, SX_PORT_MODULE_STATUS_UNPLUGGED, SX_PORT_MODULE_STATUS_PLUGGED_WITH_ERROR, SX_PORT_MODULE_STATUS_PLUGGED_DISABLED from sonic_platform.chassis import Chassis +from sonic_platform.sfp import MlxregManager +from tests.input_platform import output_sfp + class TestSfp: @mock.patch('sonic_platform.device_data.DeviceDataManager.get_linecard_count', mock.MagicMock(return_value=8)) @@ -49,7 +52,7 @@ def test_sfp_index(self, mock_max_port): assert sfp.sdk_index == 1 assert sfp.index == 5 - @mock.patch('sonic_platform.sfp.SFP._read_eeprom_specific_bytes', mock.MagicMock(return_value=None)) + @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.chassis.Chassis.get_num_sfps', mock.MagicMock(return_value=2)) def test_sfp_get_error_status(self, mock_get_error_code): @@ -80,3 +83,29 @@ def test_sfp_get_error_status(self, mock_get_error_code): description = sfp.get_error_description() assert description == expected_description + + @mock.patch('sonic_platform.sfp.SFP.get_mst_pci_device', mock.MagicMock(return_value="pciconf")) + @mock.patch('sonic_platform.sfp.MlxregManager.write_mlxreg_eeprom', mock.MagicMock(return_value=True)) + def test_sfp_write_eeprom(self): + mlxreg_mngr = MlxregManager("", 0, 0) + write_buffer = bytearray([1,2,3,4]) + offset = 793 + + sfp = SFP(0) + sfp.write_eeprom(offset, 4, write_buffer) + MlxregManager.write_mlxreg_eeprom.assert_called_with(4, output_sfp.write_eeprom_dword1, 153, 5) + + offset = 641 + write_buffer = bytearray([1,2,3,4,5,6]) + sfp.write_eeprom(offset, 6, write_buffer) + MlxregManager.write_mlxreg_eeprom.assert_called_with(6, output_sfp.write_eeprom_dword2, 129, 4) + + @mock.patch('sonic_platform.sfp.SFP.get_mst_pci_device', mock.MagicMock(return_value="pciconf")) + @mock.patch('sonic_platform.sfp.MlxregManager.read_mlxred_eeprom', mock.MagicMock(return_value=output_sfp.read_eeprom_output)) + def test_sfp_read_eeprom(self): + mlxreg_mngr = MlxregManager("", 0, 0) + offset = 644 + + 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) diff --git a/platform/mellanox/mlnx-platform-api/tests/test_thermal.py b/platform/mellanox/mlnx-platform-api/tests/test_thermal.py index 216b5cd316c7..9c1526479a9b 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_thermal.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_thermal.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -238,6 +238,32 @@ def mock_read_int_from_file(file_path, default=0, raise_exception=False): mock_file_content[os.path.join('thermal_zone1', THERMAL_ZONE_TEMP_FILE)] = 81000 assert Thermal.get_min_allowed_cooling_level_by_thermal_zone() is None + @mock.patch('glob.iglob', mock.MagicMock(return_value=['thermal_zone1', 'thermal_zone2'])) + @mock.patch('sonic_platform.utils.read_int_from_file') + def test_no_sensor_thermal_zone(self, mock_read_file): + from sonic_platform.thermal import Thermal, THERMAL_ZONE_TEMP_FILE, THERMAL_ZONE_HIGH_THRESHOLD, THERMAL_ZONE_NORMAL_THRESHOLD, MIN_COOLING_LEVEL_FOR_HIGH, MIN_COOLING_LEVEL_FOR_NORMAL + + mock_file_content = {} + def mock_read_int_from_file(file_path, **kwargs): + return mock_file_content[file_path] + + mock_read_file.side_effect = mock_read_int_from_file + mock_file_content[os.path.join('thermal_zone1', THERMAL_ZONE_NORMAL_THRESHOLD)] = 0 + mock_file_content[os.path.join('thermal_zone1', THERMAL_ZONE_HIGH_THRESHOLD)] = 0 + mock_file_content[os.path.join('thermal_zone1', THERMAL_ZONE_TEMP_FILE)] = 0 + mock_file_content[os.path.join('thermal_zone2', THERMAL_ZONE_NORMAL_THRESHOLD)] = 75000 + mock_file_content[os.path.join('thermal_zone2', THERMAL_ZONE_HIGH_THRESHOLD)] = 85000 + mock_file_content[os.path.join('thermal_zone2', THERMAL_ZONE_TEMP_FILE)] = 24000 + assert Thermal.get_min_allowed_cooling_level_by_thermal_zone() == MIN_COOLING_LEVEL_FOR_NORMAL + + mock_file_content[os.path.join('thermal_zone2', THERMAL_ZONE_TEMP_FILE)] = 71000 + assert Thermal.get_min_allowed_cooling_level_by_thermal_zone() == MIN_COOLING_LEVEL_FOR_HIGH + + mock_file_content[os.path.join('thermal_zone2', THERMAL_ZONE_TEMP_FILE)] = 79000 + assert Thermal.get_min_allowed_cooling_level_by_thermal_zone() == MIN_COOLING_LEVEL_FOR_HIGH + + mock_file_content[os.path.join('thermal_zone2', THERMAL_ZONE_TEMP_FILE)] = 81000 + assert Thermal.get_min_allowed_cooling_level_by_thermal_zone() is None def test_check_module_temperature_trustable(self): from sonic_platform.thermal import Thermal diff --git a/platform/mellanox/mlnx-platform-api/tests/test_thermal_policy.py b/platform/mellanox/mlnx-platform-api/tests/test_thermal_policy.py index b0ef02c347d7..ffdc6afbb0a9 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_thermal_policy.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_thermal_policy.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2020-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/platform/mellanox/mlnx-platform-api/tests/test_utils.py b/platform/mellanox/mlnx-platform-api/tests/test_utils.py index 7da17dc5e7bc..bbc3ab28e58c 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_utils.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_utils.py @@ -116,3 +116,7 @@ def func(): assert func() == 100 assert mock_log.call_count == 1 + + def test_run_command(self): + output = utils.run_command('ls') + assert output diff --git a/platform/mellanox/mlnx-sai.mk b/platform/mellanox/mlnx-sai.mk index 7d52d757ee0d..c8a394e1f355 100644 --- a/platform/mellanox/mlnx-sai.mk +++ b/platform/mellanox/mlnx-sai.mk @@ -1,6 +1,6 @@ # Mellanox SAI -MLNX_SAI_VERSION = SAIRel1.20.1.1 +MLNX_SAI_VERSION = SAIRel1.20.2.5 export MLNX_SAI_VERSION diff --git a/platform/mellanox/mlnx-sai/SAI-Implementation b/platform/mellanox/mlnx-sai/SAI-Implementation index f80eba967f2a..0f9cf1d39107 160000 --- a/platform/mellanox/mlnx-sai/SAI-Implementation +++ b/platform/mellanox/mlnx-sai/SAI-Implementation @@ -1 +1 @@ -Subproject commit f80eba967f2a7eb1a5576b7864676b5976803236 +Subproject commit 0f9cf1d39107f2d8f78c4b2807aa4e32862cca68 diff --git a/platform/mellanox/mlnx-ssd-fw-update.sh b/platform/mellanox/mlnx-ssd-fw-update.sh index 7a180bde7bc7..07ec9ce103ea 100755 --- a/platform/mellanox/mlnx-ssd-fw-update.sh +++ b/platform/mellanox/mlnx-ssd-fw-update.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright (c) 2020-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/platform/mellanox/rules.mk b/platform/mellanox/rules.mk index 7048920f6c5f..a6fc81b3beb4 100644 --- a/platform/mellanox/rules.mk +++ b/platform/mellanox/rules.mk @@ -1,5 +1,5 @@ # -# Copyright (c) 2016-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2016-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers b/platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers index efca058b547e..37475d91930e 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 efca058b547ee80f16f8cc8a54c9f05255068cb0 +Subproject commit 37475d91930e3aae3490a4423da280a5cae72407 diff --git a/platform/mellanox/sdk.mk b/platform/mellanox/sdk.mk index 79087c03efc2..08051e5ca0c7 100644 --- a/platform/mellanox/sdk.mk +++ b/platform/mellanox/sdk.mk @@ -1,5 +1,5 @@ # -# Copyright (c) 2016-2021 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2016-2022 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -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.1158 +MLNX_SDK_VERSION = 4.5.1208 MLNX_SDK_ISSU_VERSION = 101 MLNX_SDK_DEB_VERSION = $(subst -,.,$(subst _,.,$(MLNX_SDK_VERSION))) diff --git a/platform/pddf/i2c/utils/pddfparse.py b/platform/pddf/i2c/utils/pddfparse.py index 9d4b82d7594f..b8c7f39138a5 100755 --- a/platform/pddf/i2c/utils/pddfparse.py +++ b/platform/pddf/i2c/utils/pddfparse.py @@ -359,9 +359,18 @@ def create_mux_device(self, dev, ops): ret = self.runcmd(cmd) if ret != 0: return create_ret.append(ret) - self.create_device(dev['i2c']['dev_attr'], "pddf/devices/mux", ops) + cmd = "echo %s > /sys/kernel/pddf/devices/mux/virt_bus" % (dev['i2c']['dev_attr']['virt_bus']) + ret = self.runcmd(cmd) + if ret != 0: + return create_ret.append(ret) cmd = "echo 'add' > /sys/kernel/pddf/devices/mux/dev_ops" ret = self.runcmd(cmd) + # Check if the dev_attr array contain idle_state + if 'idle_state' in dev['i2c']['dev_attr']: + cmd = "echo {} > /sys/bus/i2c/devices/{}-00{:02x}/idle_state".format(dev['i2c']['dev_attr']['idle_state'], + int(dev['i2c']['topo_info']['parent_bus'],0), int(dev['i2c']['topo_info']['dev_addr'],0)) + ret = self.runcmd(cmd) + return create_ret.append(ret) def create_xcvr_i2c_device(self, dev, ops): diff --git a/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_chassis.py b/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_chassis.py index 0ba2e8902c9c..ef211b9933c4 100644 --- a/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_chassis.py +++ b/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_chassis.py @@ -10,7 +10,7 @@ from sonic_platform_base.chassis_base import ChassisBase from sonic_platform.sfp import Sfp from sonic_platform.psu import Psu - from sonic_platform.fan import Fan + from sonic_platform.fan_drawer import FanDrawer from sonic_platform.thermal import Thermal from sonic_platform.eeprom import Eeprom except ImportError as e: @@ -52,9 +52,9 @@ def __init__(self, pddf_data=None, pddf_plugin_data=None): # FANs for i in range(self.platform_inventory['num_fantrays']): - for j in range(self.platform_inventory['num_fans_pertray']): - fan = Fan(i, j, self.pddf_obj, self.plugin_data) - self._fan_list.append(fan) + fandrawer = FanDrawer(i, self.pddf_obj, self.plugin_data) + self._fan_drawer_list.append(fandrawer) + self._fan_list.extend(fandrawer._fan_list) # PSUs for i in range(self.platform_inventory['num_psus']): @@ -96,11 +96,11 @@ def get_model(self): """ return self._eeprom.part_number_str() - def get_serial(self): + def get_service_tag(self): """ - Retrieves the serial number of the chassis (Service tag) + Retrieves the service tag of the chassis Returns: - string: Serial number of chassis + string: Sevice tag of chassis """ return self._eeprom.serial_str() @@ -123,7 +123,7 @@ def get_base_mac(self): """ return self._eeprom.base_mac_addr() - def get_serial_number(self): + def get_serial(self): """ Retrieves the hardware serial number for the chassis diff --git a/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_fan.py b/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_fan.py index d272d40e61a4..c0e95c896910 100644 --- a/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_fan.py +++ b/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_fan.py @@ -150,10 +150,10 @@ def get_speed(self): if output['status'].isalpha(): return 0 else: - speed = int(output['status']) + speed = int(float(output['status'])) max_speed = int(self.plugin_data['PSU']['PSU_FAN_MAX_SPEED']) - speed_percentage = (speed*100)/max_speed + speed_percentage = round((speed*100)/max_speed) return speed_percentage else: # TODO This calculation should change based on MAX FAN SPEED diff --git a/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_fan_drawer.py b/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_fan_drawer.py new file mode 100755 index 000000000000..f88e833408dd --- /dev/null +++ b/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_fan_drawer.py @@ -0,0 +1,110 @@ +############################################################################# +# PDDF +# +# PDDF fan_drawer base class inherited from the common base class fan_drawer.py +# +############################################################################# + +try: + from sonic_platform_base.fan_drawer_base import FanDrawerBase + from sonic_platform.fan import Fan +except ImportError as e: + raise ImportError(str(e) + "- required module not found") + + +class PddfFanDrawer(FanDrawerBase): + """PDDF generic Fan Drawer class""" + + pddf_obj = {} + plugin_data = {} + + def __init__(self, tray_idx, pddf_data=None, pddf_plugin_data=None): + FanDrawerBase.__init__(self) + if not pddf_data or not pddf_plugin_data: + raise ValueError('PDDF JSON data error') + + self.pddf_obj = pddf_data + self.plugin_data = pddf_plugin_data + self.platform = self.pddf_obj.get_platform() + + if tray_idx < 0 or tray_idx >= self.platform['num_fantrays']: + print("Invalid fantray index %d\n" % tray_idx) + return + + self.fantray_index = tray_idx+1 + for j in range(self.platform['num_fans_pertray']): + # Fan index is 0-based for the init call + self._fan_list.append(Fan(tray_idx, j, self.pddf_obj, self.plugin_data)) + + def get_name(self): + """ + Retrieves the fan drawer name + Returns: String containing fan-drawer name + """ + return "Fantray{0}".format(self.fantray_index) + + def get_presence(self): + status = False + # Usually if a tray is removed, all the fans inside it are absent + if self._fan_list: + status = self._fan_list[0].get_presence() + + return status + + def get_status(self): + status = False + # if all the fans are working fine, then tray status should be okay + if self._fan_list: + status = all(fan.get_status() == True for fan in self._fan_list) + + return status + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + # Usually Fantrays are replaceable + return True + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. + Returns: + integer: The 1-based relative physical position in parent + device or -1 if cannot determine the position + """ + return self.fantray_index + + def get_status_led(self): + led_device_name = "FANTRAY{}".format(self.fantray_index) + "_LED" + + if led_device_name not in self.pddf_obj.data.keys(): + # Implement a generic status_led color scheme + if self.get_status(): + return self.STATUS_LED_COLOR_GREEN + else: + return self.STATUS_LED_COLOR_OFF + + device_name = self.pddf_obj.data[led_device_name]['dev_info']['device_name'] + self.pddf_obj.create_attr('device_name', device_name, self.pddf_obj.get_led_path()) + self.pddf_obj.create_attr('index', str(self.fantray_index-1), self.pddf_obj.get_led_path()) + self.pddf_obj.create_attr('dev_ops', 'get_status', self.pddf_obj.get_led_path()) + color = self.pddf_obj.get_led_color() + return (color) + + def set_status_led(self, color): + result = False + led_device_name = "FANTRAY{}".format(self.fantray_index) + "_LED" + result, msg = self.pddf_obj.is_supported_sysled_state(led_device_name, color) + if result == False: + print(msg) + return (False) + + device_name = self.pddf_obj.data[led_device_name]['dev_info']['device_name'] + self.pddf_obj.create_attr('device_name', device_name, self.pddf_obj.get_led_path()) + self.pddf_obj.create_attr('index', str(self.fantray_index-1), self.pddf_obj.get_led_path()) + self.pddf_obj.create_attr('color', color, self.pddf_obj.get_led_cur_state_path()) + self.pddf_obj.create_attr('dev_ops', 'set_status', self.pddf_obj.get_led_path()) + return (True) diff --git a/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_psu.py b/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_psu.py index 912333df8b57..bbe7dc0a1a44 100644 --- a/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_psu.py +++ b/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_psu.py @@ -20,6 +20,7 @@ try: from sonic_platform_base.psu_base import PsuBase from sonic_platform.fan import Fan + from sonic_platform.thermal import Thermal except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -45,6 +46,11 @@ def __init__(self, index, pddf_data=None, pddf_plugin_data=None): psu_fan = Fan(0, psu_fan_idx, pddf_data, pddf_plugin_data, True, self.psu_index) self._fan_list.append(psu_fan) + self.num_psu_thermals = 1 # Fixing it 1 for now + for psu_thermal_idx in range(self.num_psu_thermals): + psu_thermal = Thermal(psu_thermal_idx, pddf_data, pddf_plugin_data, True, self.psu_index) + self._thermal_list.append(psu_thermal) + def get_num_fans(self): """ Retrieves the number of fan modules available on this PSU diff --git a/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_sfp.py b/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_sfp.py index cf77986aba64..f11acf1a209b 100644 --- a/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_sfp.py +++ b/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_sfp.py @@ -5,164 +5,21 @@ ############################################################################# try: - import time - from ctypes import create_string_buffer - from sonic_platform_base.sfp_base import SfpBase - from sonic_platform_base.sonic_sfp.sff8436 import sff8436InterfaceId - from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom - from sonic_platform_base.sonic_sfp.sff8472 import sff8472InterfaceId - from sonic_platform_base.sonic_sfp.sff8472 import sff8472Dom - from sonic_platform_base.sonic_sfp.sff8472 import sffbase - from sonic_platform_base.sonic_sfp.inf8628 import inf8628InterfaceId + from sonic_platform_base.sonic_xcvr.sfp_optoe_base import SfpOptoeBase except ImportError as e: raise ImportError(str(e) + "- required module not found") -# definitions of the offset and width for values in XCVR info eeprom -XCVR_INTFACE_BULK_OFFSET = 0 -XCVR_INTFACE_BULK_WIDTH_QSFP = 20 -XCVR_INTFACE_BULK_WIDTH_SFP = 21 -XCVR_TYPE_OFFSET = 0 -XCVR_TYPE_WIDTH = 1 -XCVR_EXT_TYPE_OFFSET = 1 -XCVR_EXT_TYPE_WIDTH = 1 -XCVR_CONNECTOR_OFFSET = 2 -XCVR_CONNECTOR_WIDTH = 1 -XCVR_COMPLIANCE_CODE_OFFSET = 3 -XCVR_COMPLIANCE_CODE_WIDTH = 8 -XCVR_ENCODING_OFFSET = 11 -XCVR_ENCODING_WIDTH = 1 -XCVR_NBR_OFFSET = 12 -XCVR_NBR_WIDTH = 1 -XCVR_EXT_RATE_SEL_OFFSET = 13 -XCVR_EXT_RATE_SEL_WIDTH = 1 -XCVR_CABLE_LENGTH_OFFSET = 14 -XCVR_CABLE_LENGTH_WIDTH_QSFP = 5 -XCVR_CABLE_LENGTH_WIDTH_SFP = 6 -XCVR_VENDOR_NAME_OFFSET = 20 -XCVR_VENDOR_NAME_WIDTH = 16 -XCVR_VENDOR_OUI_OFFSET = 37 -XCVR_VENDOR_OUI_WIDTH = 3 -XCVR_VENDOR_PN_OFFSET = 40 -XCVR_VENDOR_PN_WIDTH = 16 -XCVR_HW_REV_OFFSET = 56 -XCVR_HW_REV_WIDTH_OSFP = 2 -XCVR_HW_REV_WIDTH_QSFP = 2 -XCVR_HW_REV_WIDTH_SFP = 4 -XCVR_VENDOR_SN_OFFSET = 68 -XCVR_VENDOR_SN_WIDTH = 16 -XCVR_VENDOR_DATE_OFFSET = 84 -XCVR_VENDOR_DATE_WIDTH = 8 -XCVR_DOM_CAPABILITY_OFFSET = 92 -XCVR_DOM_CAPABILITY_WIDTH = 1 -# definitions of the offset for values in OSFP info eeprom -OSFP_TYPE_OFFSET = 0 -OSFP_VENDOR_NAME_OFFSET = 129 -OSFP_VENDOR_PN_OFFSET = 148 -OSFP_HW_REV_OFFSET = 164 -OSFP_VENDOR_SN_OFFSET = 166 - -# definitions of the offset and width for values in DOM info eeprom -QSFP_DOM_REV_OFFSET = 1 -QSFP_DOM_REV_WIDTH = 1 -QSFP_TEMPE_OFFSET = 22 -QSFP_TEMPE_WIDTH = 2 -QSFP_VOLT_OFFSET = 26 -QSFP_VOLT_WIDTH = 2 -QSFP_CHANNL_MON_OFFSET = 34 -QSFP_CHANNL_MON_WIDTH = 16 -QSFP_CHANNL_MON_WITH_TX_POWER_WIDTH = 24 -QSFP_CONTROL_OFFSET = 86 -QSFP_CONTROL_WIDTH = 8 -QSFP_CHANNL_RX_LOS_STATUS_OFFSET = 3 -QSFP_CHANNL_RX_LOS_STATUS_WIDTH = 1 -QSFP_CHANNL_TX_FAULT_STATUS_OFFSET = 4 -QSFP_CHANNL_TX_FAULT_STATUS_WIDTH = 1 -QSFP_POWEROVERRIDE_OFFSET = 93 -QSFP_POWEROVERRIDE_WIDTH = 1 -QSFP_MODULE_THRESHOLD_OFFSET = 128 -QSFP_MODULE_THRESHOLD_WIDTH = 24 -QSFP_CHANNEL_THRESHOLD_OFFSET = 176 -QSFP_CHANNEL_THRESHOLD_WIDTH = 24 - - -SFP_TEMPE_OFFSET = 96 -SFP_TEMPE_WIDTH = 2 -SFP_VOLT_OFFSET = 98 -SFP_VOLT_WIDTH = 2 -SFP_CHANNL_MON_OFFSET = 100 -SFP_CHANNL_MON_WIDTH = 6 -SFP_MODULE_THRESHOLD_OFFSET = 0 -SFP_MODULE_THRESHOLD_WIDTH = 40 -SFP_STATUS_CONTROL_OFFSET = 110 -SFP_STATUS_CONTROL_WIDTH = 1 -SFP_TX_DISABLE_HARD_BIT = 7 -SFP_TX_DISABLE_SOFT_BIT = 6 - - -qsfp_cable_length_tup = ('Length(km)', 'Length OM3(2m)', - 'Length OM2(m)', 'Length OM1(m)', - 'Length Cable Assembly(m)') - -sfp_cable_length_tup = ('LengthSMFkm-UnitsOfKm', 'LengthSMF(UnitsOf100m)', - 'Length50um(UnitsOf10m)', 'Length62.5um(UnitsOfm)', - 'LengthCable(UnitsOfm)', 'LengthOM3(UnitsOf10m)') - -sfp_compliance_code_tup = ('10GEthernetComplianceCode', 'InfinibandComplianceCode', - 'ESCONComplianceCodes', 'SONETComplianceCodes', - 'EthernetComplianceCodes', 'FibreChannelLinkLength', - 'FibreChannelTechnology', 'SFP+CableTechnology', - 'FibreChannelTransmissionMedia', 'FibreChannelSpeed') - -qsfp_compliance_code_tup = ('10/40G Ethernet Compliance Code', 'SONET Compliance codes', - 'SAS/SATA compliance codes', 'Gigabit Ethernet Compliant codes', - 'Fibre Channel link length/Transmitter Technology', - 'Fibre Channel transmission media', 'Fibre Channel Speed') - -PAGE_OFFSET = 0 -KEY_OFFSET = 1 -KEY_WIDTH = 2 -FUNC_NAME = 3 - -INFO_OFFSET = 128 -DOM_OFFSET = 0 -DOM_OFFSET1 = 384 - - -class PddfSfp(SfpBase): +class PddfSfp(SfpOptoeBase): """ PDDF generic Sfp class """ pddf_obj = {} plugin_data = {} - _port_to_eeprom_mapping = {} _port_start = 0 _port_end = 0 - _port_to_type_mapping = {} - _qsfp_ports = [] - _sfp_ports = [] - - # Read out any bytes from any offset - def __read_eeprom_specific_bytes(self, offset, num_bytes): - sysfsfile_eeprom = None - eeprom_raw = [] - for i in range(0, num_bytes): - eeprom_raw.append("0x00") - try: - sysfsfile_eeprom = open(self.eeprom_path, mode="rb", buffering=0) - sysfsfile_eeprom.seek(offset) - raw = sysfsfile_eeprom.read(num_bytes) - for n in range(0, num_bytes): - eeprom_raw[n] = hex(raw[n])[2:].zfill(2) - except Exception as e: - print("Error: Unable to open eeprom_path: %s" % (str(e))) - finally: - if sysfsfile_eeprom: - sysfsfile_eeprom.close() - - return eeprom_raw def __init__(self, index, pddf_data=None, pddf_plugin_data=None): if not pddf_data or not pddf_plugin_data: @@ -183,492 +40,49 @@ def __init__(self, index, pddf_data=None, pddf_plugin_data=None): self.port_index = index+1 self.device = 'PORT{}'.format(self.port_index) self.sfp_type = self.pddf_obj.get_device_type(self.device) - self.is_qsfp_port = True if (self.sfp_type == 'QSFP' or self.sfp_type == 'QSFP28') else False - self.is_osfp_port = True if (self.sfp_type == 'OSFP' or self.sfp_type == 'QSFP-DD') else False self.eeprom_path = self.pddf_obj.get_path(self.device, 'eeprom') - self.info_dict_keys = ['type', 'vendor_rev', 'serial', 'manufacturer', 'model', 'connector', 'encoding', - 'ext_identifier', 'ext_rateselect_compliance', 'cable_type', 'cable_length', - 'nominal_bit_rate', 'specification_compliance', 'vendor_date', 'vendor_oui', - 'application_advertisement'] - - self.dom_dict_keys = ['rx_los', 'tx_fault', 'reset_status', 'power_lpmode', 'tx_disable', 'tx_disable_channel', - 'temperature', 'voltage', 'rx1power', 'rx2power', 'rx3power', 'rx4power', 'tx1bias', - 'tx2bias', 'tx3bias', 'tx4bias', 'tx1power', 'tx2power', 'tx3power', 'tx4power'] - - self.threshold_dict_keys = ['temphighalarm', 'temphighwarning', 'templowalarm', 'templowwarning', - 'vcchighalarm', 'vcchighwarning', 'vcclowalarm', 'vcclowwarning', - 'rxpowerhighalarm', 'rxpowerhighwarning', 'rxpowerlowalarm', 'rxpowerlowwarning', - 'txpowerhighalarm', 'txpowerhighwarning', 'txpowerlowalarm', 'txpowerlowwarning', - 'txbiashighalarm', 'txbiashighwarning', 'txbiaslowalarm', 'txbiaslowwarning'] - - SfpBase.__init__(self) - - def get_transceiver_info(self): - """ - Retrieves transceiver info of this SFP - 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 - nominal_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 - ======================================================================== - """ - # check present status - if not self.get_presence(): - return None - - if self.is_osfp_port: - sfpi_obj = inf8628InterfaceId() - offset = 0 - type_offset = OSFP_TYPE_OFFSET - vendor_rev_width = XCVR_HW_REV_WIDTH_OSFP - hw_rev_offset = OSFP_HW_REV_OFFSET - vendor_name_offset = OSFP_VENDOR_NAME_OFFSET - vendor_pn_offset = OSFP_VENDOR_PN_OFFSET - vendor_sn_offset = OSFP_VENDOR_SN_OFFSET - interface_info_bulk_width = XCVR_INTFACE_BULK_WIDTH_QSFP - sfp_type = 'OSFP' - - elif self.is_qsfp_port: - sfpi_obj = sff8436InterfaceId() - offset = 128 - type_offset = XCVR_TYPE_OFFSET - vendor_rev_width = XCVR_HW_REV_WIDTH_QSFP - hw_rev_offset = XCVR_HW_REV_OFFSET - vendor_name_offset = XCVR_VENDOR_NAME_OFFSET - vendor_pn_offset = XCVR_VENDOR_PN_OFFSET - vendor_sn_offset = XCVR_VENDOR_SN_OFFSET - interface_info_bulk_width = XCVR_INTFACE_BULK_WIDTH_QSFP - sfp_type = 'QSFP' - else: - sfpi_obj = sff8472InterfaceId() - offset = 0 - type_offset = XCVR_TYPE_OFFSET - vendor_rev_width = XCVR_HW_REV_WIDTH_SFP - hw_rev_offset = XCVR_HW_REV_OFFSET - vendor_name_offset = XCVR_VENDOR_NAME_OFFSET - vendor_pn_offset = XCVR_VENDOR_PN_OFFSET - vendor_sn_offset = XCVR_VENDOR_SN_OFFSET - interface_info_bulk_width = XCVR_INTFACE_BULK_WIDTH_SFP - sfp_type = 'SFP' - - if sfpi_obj is None: - return None - - if self.is_osfp_port: - sfp_type_raw = self.__read_eeprom_specific_bytes((offset + type_offset), XCVR_TYPE_WIDTH) - if sfp_type_raw is not None: - sfp_type_data = sfpi_obj.parse_sfp_type(sfp_type_raw, 0) - sfp_type_abbrv_name = sfpi_obj.parse_sfp_type_abbrv_name(sfp_typ_raw, 0) - else: - sfp_interface_bulk_raw = self.__read_eeprom_specific_bytes( - (offset + XCVR_INTFACE_BULK_OFFSET), interface_info_bulk_width) - if sfp_interface_bulk_raw is not None: - sfp_interface_bulk_data = sfpi_obj.parse_sfp_info_bulk(sfp_interface_bulk_raw, 0) - - sfp_vendor_oui_raw = self.__read_eeprom_specific_bytes( - (offset + XCVR_VENDOR_OUI_OFFSET), XCVR_VENDOR_OUI_WIDTH) - if sfp_vendor_oui_raw is not None: - sfp_vendor_oui_data = sfpi_obj.parse_vendor_oui(sfp_vendor_oui_raw, 0) - - sfp_vendor_date_raw = self.__read_eeprom_specific_bytes( - (offset + XCVR_VENDOR_DATE_OFFSET), XCVR_VENDOR_DATE_WIDTH) - if sfp_vendor_date_raw is not None: - sfp_vendor_date_data = sfpi_obj.parse_vendor_date(sfp_vendor_date_raw, 0) - - sfp_vendor_name_raw = self.__read_eeprom_specific_bytes( - (offset + vendor_name_offset), XCVR_VENDOR_NAME_WIDTH) - sfp_vendor_name_data = sfpi_obj.parse_vendor_name( - sfp_vendor_name_raw, 0) - - sfp_vendor_pn_raw = self.__read_eeprom_specific_bytes( - (offset + vendor_pn_offset), XCVR_VENDOR_PN_WIDTH) - sfp_vendor_pn_data = sfpi_obj.parse_vendor_pn( - sfp_vendor_pn_raw, 0) - - sfp_vendor_rev_raw = self.__read_eeprom_specific_bytes( - (offset + hw_rev_offset), vendor_rev_width) - sfp_vendor_rev_data = sfpi_obj.parse_vendor_rev( - sfp_vendor_rev_raw, 0) - - sfp_vendor_sn_raw = self.__read_eeprom_specific_bytes( - (offset + vendor_sn_offset), XCVR_VENDOR_SN_WIDTH) - sfp_vendor_sn_data = sfpi_obj.parse_vendor_sn( - sfp_vendor_sn_raw, 0) - - xcvr_info_dict = dict.fromkeys(self.info_dict_keys, 'N/A') - compliance_code_dict = dict() - - if sfp_interface_bulk_data: - xcvr_info_dict['type'] = sfp_interface_bulk_data['data']['type']['value'] - xcvr_info_dict['connector'] = sfp_interface_bulk_data['data']['Connector']['value'] - xcvr_info_dict['encoding'] = sfp_interface_bulk_data['data']['EncodingCodes']['value'] - xcvr_info_dict['ext_identifier'] = sfp_interface_bulk_data['data']['Extended Identifier']['value'] - xcvr_info_dict['ext_rateselect_compliance'] = sfp_interface_bulk_data['data']['RateIdentifier']['value'] - xcvr_info_dict['type_abbrv_name'] = sfp_interface_bulk_data['data']['type_abbrv_name']['value'] - else: - xcvr_info_dict['type'] = sfp_type_data['data']['type']['value'] if sfp_type_data else 'N/A' - xcvr_info_dict['type_abbrv_name'] = sfp_type_abbrv_name['data']['type_abbrv_name']['value'] \ - if sfp_type_abbrv_name else 'N/A' - - xcvr_info_dict['manufacturer'] = sfp_vendor_name_data['data']['Vendor Name']['value'] \ - if sfp_vendor_name_data else 'N/A' - xcvr_info_dict['model'] = sfp_vendor_pn_data['data']['Vendor PN']['value'] if sfp_vendor_pn_data else 'N/A' - xcvr_info_dict['vendor_rev'] = sfp_vendor_rev_data['data']['Vendor Rev']['value'] \ - if sfp_vendor_rev_data else 'N/A' - xcvr_info_dict['serial'] = sfp_vendor_sn_data['data']['Vendor SN']['value'] if sfp_vendor_sn_data else 'N/A' - xcvr_info_dict['vendor_oui'] = sfp_vendor_oui_data['data']['Vendor OUI']['value'] \ - if sfp_vendor_oui_data else 'N/A' - xcvr_info_dict['vendor_date'] = sfp_vendor_date_data['data'][ - 'VendorDataCode(YYYY-MM-DD Lot)']['value'] if sfp_vendor_date_data else 'N/A' - xcvr_info_dict['cable_type'] = "Unknown" - xcvr_info_dict['cable_length'] = "Unknown" - - if sfp_type == 'QSFP': - for key in qsfp_cable_length_tup: - if key in sfp_interface_bulk_data['data']: - xcvr_info_dict['cable_type'] = key - xcvr_info_dict['cable_length'] = str(sfp_interface_bulk_data['data'][key]['value']) + SfpOptoeBase.__init__(self) - for key in qsfp_compliance_code_tup: - if key in sfp_interface_bulk_data['data']['Specification compliance']['value']: - compliance_code_dict[key] = sfp_interface_bulk_data['data']['Specification compliance'][ - 'value'][key]['value'] - xcvr_info_dict['specification_compliance'] = str(compliance_code_dict) + def get_eeprom_path(self): + return self.eeprom_path - nkey = 'Nominal Bit Rate(100Mbs)' - if nkey in sfp_interface_bulk_data['data']: - xcvr_info_dict['nominal_bit_rate'] = str( - sfp_interface_bulk_data['data']['Nominal Bit Rate(100Mbs)']['value']) - else: - xcvr_info_dict['nominal_bit_rate'] = 'N/A' - elif sfp_type == 'OSFP': - pass - else: - for key in sfp_cable_length_tup: - if key in sfp_interface_bulk_data['data']: - xcvr_info_dict['cable_type'] = key - xcvr_info_dict['cable_length'] = str(sfp_interface_bulk_data['data'][key]['value']) - - for key in sfp_compliance_code_tup: - if key in sfp_interface_bulk_data['data']['Specification compliance']['value']: - compliance_code_dict[key] = sfp_interface_bulk_data['data']['Specification compliance'][ - 'value'][key]['value'] - xcvr_info_dict['specification_compliance'] = str(compliance_code_dict) - - xcvr_info_dict['nominal_bit_rate'] = str( - sfp_interface_bulk_data['data']['NominalSignallingRate(UnitsOf100Mbd)']['value']) - - return xcvr_info_dict - - def get_transceiver_bulk_status(self): + def get_name(self): """ - Retrieves transceiver bulk status of this SFP - Returns: - A dict which contains following keys/values : - ======================================================================== - keys |Value Format |Information - ---------------------------|---------------|---------------------------- - rx_los |BOOLEAN |RX loss-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 channels in hex, bits 0 to 3 represent channel 0 - | |to channel 3. - temperature |INT |module temperature in Celsius - voltage |INT |supply voltage in mV - txbias |INT |TX Bias Current in mA, n is the channel number, - | |for example, tx2bias stands for tx bias of channel 2. - rxpower |INT |received optical power in mW, n is the channel number, - | |for example, rx2power stands for rx power of channel 2. - txpower |INT |TX output power in mW, n is the channel number, - | |for example, tx2power stands for tx power of channel 2. - ======================================================================== + Retrieves the name of the device + Returns: + string: The name of the device """ - # check present status - if not self.get_presence(): - return None - - xcvr_dom_info_dict = dict.fromkeys(self.dom_dict_keys, 'N/A') - - if self.is_osfp_port: - # Below part is added to avoid fail xcvrd, shall be implemented later - pass - elif self.is_qsfp_port: - # QSFPs - offset = 0 - offset_xcvr = 128 - - sfpd_obj = sff8436Dom() - if sfpd_obj is None: - return None - - sfpi_obj = sff8436InterfaceId() - if sfpi_obj is None: - return None - - qsfp_dom_capability_raw = self.__read_eeprom_specific_bytes( - (offset_xcvr + XCVR_DOM_CAPABILITY_OFFSET), XCVR_DOM_CAPABILITY_WIDTH) - if qsfp_dom_capability_raw is not None: - qspf_dom_capability_data = sfpi_obj.parse_dom_capability( - qsfp_dom_capability_raw, 0) - else: - return None - - dom_temperature_raw = self.__read_eeprom_specific_bytes((offset + QSFP_TEMPE_OFFSET), QSFP_TEMPE_WIDTH) - if dom_temperature_raw is not None: - dom_temperature_data = sfpd_obj.parse_temperature(dom_temperature_raw, 0) - else: - return None - - dom_voltage_raw = self.__read_eeprom_specific_bytes((offset + QSFP_VOLT_OFFSET), QSFP_VOLT_WIDTH) - if dom_voltage_raw is not None: - dom_voltage_data = sfpd_obj.parse_voltage(dom_voltage_raw, 0) - else: - return None - - qsfp_dom_rev_raw = self.__read_eeprom_specific_bytes((offset + QSFP_DOM_REV_OFFSET), QSFP_DOM_REV_WIDTH) - if qsfp_dom_rev_raw is not None: - qsfp_dom_rev_data = sfpd_obj.parse_sfp_dom_rev(qsfp_dom_rev_raw, 0) - else: - return None - - xcvr_dom_info_dict['temperature'] = dom_temperature_data['data']['Temperature']['value'] - xcvr_dom_info_dict['voltage'] = dom_voltage_data['data']['Vcc']['value'] - - # The tx_power monitoring is only available on QSFP which compliant with SFF-8636 - # and claimed that it support tx_power with one indicator bit. - dom_channel_monitor_data = {} - qsfp_dom_rev = qsfp_dom_rev_data['data']['dom_rev']['value'] - qsfp_tx_power_support = qspf_dom_capability_data['data']['Tx_power_support']['value'] - if (qsfp_dom_rev[0:8] != 'SFF-8636' or (qsfp_dom_rev[0:8] == 'SFF-8636' and qsfp_tx_power_support != 'on')): - dom_channel_monitor_raw = self.__read_eeprom_specific_bytes( - (offset + QSFP_CHANNL_MON_OFFSET), QSFP_CHANNL_MON_WIDTH) - if dom_channel_monitor_raw is not None: - dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params(dom_channel_monitor_raw, 0) - else: - return None - - xcvr_dom_info_dict['tx1power'] = 'N/A' - xcvr_dom_info_dict['tx2power'] = 'N/A' - xcvr_dom_info_dict['tx3power'] = 'N/A' - xcvr_dom_info_dict['tx4power'] = 'N/A' - else: - dom_channel_monitor_raw = self.__read_eeprom_specific_bytes( - (offset + QSFP_CHANNL_MON_OFFSET), QSFP_CHANNL_MON_WITH_TX_POWER_WIDTH) - if dom_channel_monitor_raw is not None: - dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params_with_tx_power( - dom_channel_monitor_raw, 0) - else: - return None - - xcvr_dom_info_dict['tx1power'] = dom_channel_monitor_data['data']['TX1Power']['value'] - xcvr_dom_info_dict['tx2power'] = dom_channel_monitor_data['data']['TX2Power']['value'] - xcvr_dom_info_dict['tx3power'] = dom_channel_monitor_data['data']['TX3Power']['value'] - xcvr_dom_info_dict['tx4power'] = dom_channel_monitor_data['data']['TX4Power']['value'] - - if dom_channel_monitor_raw: - xcvr_dom_info_dict['temperature'] = dom_temperature_data['data']['Temperature']['value'] - xcvr_dom_info_dict['voltage'] = dom_voltage_data['data']['Vcc']['value'] - xcvr_dom_info_dict['rx1power'] = dom_channel_monitor_data['data']['RX1Power']['value'] - xcvr_dom_info_dict['rx2power'] = dom_channel_monitor_data['data']['RX2Power']['value'] - xcvr_dom_info_dict['rx3power'] = dom_channel_monitor_data['data']['RX3Power']['value'] - xcvr_dom_info_dict['rx4power'] = dom_channel_monitor_data['data']['RX4Power']['value'] - xcvr_dom_info_dict['tx1bias'] = dom_channel_monitor_data['data']['TX1Bias']['value'] - xcvr_dom_info_dict['tx2bias'] = dom_channel_monitor_data['data']['TX2Bias']['value'] - xcvr_dom_info_dict['tx3bias'] = dom_channel_monitor_data['data']['TX3Bias']['value'] - xcvr_dom_info_dict['tx4bias'] = dom_channel_monitor_data['data']['TX4Bias']['value'] - - else: - # SFPs - offset = 256 - - sfpd_obj = sff8472Dom() - if sfpd_obj is None: - return None - - dom_temperature_raw = self.__read_eeprom_specific_bytes((offset + SFP_TEMPE_OFFSET), SFP_TEMPE_WIDTH) - if dom_temperature_raw is not None: - dom_temperature_data = sfpd_obj.parse_temperature(dom_temperature_raw, 0) - else: - return None - - dom_voltage_raw = self.__read_eeprom_specific_bytes((offset + SFP_VOLT_OFFSET), SFP_VOLT_WIDTH) - if dom_voltage_raw is not None: - dom_voltage_data = sfpd_obj.parse_voltage(dom_voltage_raw, 0) - else: - return None - - dom_channel_monitor_raw = self.__read_eeprom_specific_bytes( - (offset + SFP_CHANNL_MON_OFFSET), SFP_CHANNL_MON_WIDTH) - if dom_channel_monitor_raw is not None: - dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params(dom_channel_monitor_raw, 0) - else: - return None - - xcvr_dom_info_dict['temperature'] = dom_temperature_data['data']['Temperature']['value'] - xcvr_dom_info_dict['voltage'] = dom_voltage_data['data']['Vcc']['value'] - xcvr_dom_info_dict['rx1power'] = dom_channel_monitor_data['data']['RXPower']['value'] - xcvr_dom_info_dict['rx2power'] = 'N/A' - xcvr_dom_info_dict['rx3power'] = 'N/A' - xcvr_dom_info_dict['rx4power'] = 'N/A' - xcvr_dom_info_dict['tx1bias'] = dom_channel_monitor_data['data']['TXBias']['value'] - xcvr_dom_info_dict['tx2bias'] = 'N/A' - xcvr_dom_info_dict['tx3bias'] = 'N/A' - xcvr_dom_info_dict['tx4bias'] = 'N/A' - xcvr_dom_info_dict['tx1power'] = dom_channel_monitor_data['data']['TXPower']['value'] - xcvr_dom_info_dict['tx2power'] = 'N/A' - xcvr_dom_info_dict['tx3power'] = 'N/A' - xcvr_dom_info_dict['tx4power'] = 'N/A' - - xcvr_dom_info_dict['rx_los'] = self.get_rx_los() - xcvr_dom_info_dict['tx_fault'] = self.get_tx_fault() - xcvr_dom_info_dict['reset_status'] = self.get_reset_status() - xcvr_dom_info_dict['lp_mode'] = self.get_lpmode() - - return xcvr_dom_info_dict + # Name of the port/sfp ? + return 'PORT{}'.format(self.port_index) - def get_transceiver_threshold_info(self): + def get_presence(self): """ - Retrieves transceiver threshold info of this SFP + Retrieves the presence of the PSU 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. - ======================================================================== + bool: True if PSU is present, False if not """ - # check present status - if not self.get_presence(): - return None - - xcvr_dom_threshold_info_dict = dict.fromkeys(self.threshold_dict_keys, 'N/A') - - if self.is_osfp_port: - # Below part is added to avoid fail xcvrd, shall be implemented later - pass - elif self.is_qsfp_port: - # QSFPs - sfpd_obj = sff8436Dom() - if sfpd_obj is None: - return None - - offset = 384 - dom_thres_raw = self.__read_eeprom_specific_bytes( - (offset+QSFP_MODULE_THRESHOLD_OFFSET), QSFP_MODULE_THRESHOLD_WIDTH) - if dom_thres_raw: - module_threshold_values = sfpd_obj.parse_module_threshold_values( - dom_thres_raw, 0) - module_threshold_data = module_threshold_values.get('data') - if module_threshold_data: - xcvr_dom_threshold_info_dict['temphighalarm'] = module_threshold_data['TempHighAlarm']['value'] - xcvr_dom_threshold_info_dict['templowalarm'] = module_threshold_data['TempLowAlarm']['value'] - xcvr_dom_threshold_info_dict['temphighwarning'] = module_threshold_data['TempHighWarning']['value'] - xcvr_dom_threshold_info_dict['templowwarning'] = module_threshold_data['TempLowWarning']['value'] - xcvr_dom_threshold_info_dict['vcchighalarm'] = module_threshold_data['VccHighAlarm']['value'] - xcvr_dom_threshold_info_dict['vcclowalarm'] = module_threshold_data['VccLowAlarm']['value'] - xcvr_dom_threshold_info_dict['vcchighwarning'] = module_threshold_data['VccHighWarning']['value'] - xcvr_dom_threshold_info_dict['vcclowwarning'] = module_threshold_data['VccLowWarning']['value'] - - dom_thres_raw = self.__read_eeprom_specific_bytes((offset + QSFP_CHANNEL_THRESHOLD_OFFSET), - QSFP_CHANNEL_THRESHOLD_WIDTH) - if dom_thres_raw: - channel_threshold_values = sfpd_obj.parse_channel_threshold_values( - dom_thres_raw, 0) - ch_th_data = channel_threshold_values.get('data') - if ch_th_data: - xcvr_dom_threshold_info_dict['rxpowerhighalarm'] = ch_th_data['RxPowerHighAlarm']['value'] - xcvr_dom_threshold_info_dict['rxpowerlowalarm'] = ch_th_data['RxPowerLowAlarm']['value'] - xcvr_dom_threshold_info_dict['rxpowerhighwarning'] = ch_th_data['RxPowerHighWarning']['value'] - xcvr_dom_threshold_info_dict['rxpowerlowwarning'] = ch_th_data['RxPowerLowWarning']['value'] - xcvr_dom_threshold_info_dict['txpowerhighalarm'] = "0.0dBm" - xcvr_dom_threshold_info_dict['txpowerlowalarm'] = "0.0dBm" - xcvr_dom_threshold_info_dict['txpowerhighwarning'] = "0.0dBm" - xcvr_dom_threshold_info_dict['txpowerlowwarning'] = "0.0dBm" - xcvr_dom_threshold_info_dict['txbiashighalarm'] = ch_th_data['TxBiasHighAlarm']['value'] - xcvr_dom_threshold_info_dict['txbiaslowalarm'] = ch_th_data['TxBiasLowAlarm']['value'] - xcvr_dom_threshold_info_dict['txbiashighwarning'] = ch_th_data['TxBiasHighWarning']['value'] - xcvr_dom_threshold_info_dict['txbiaslowwarning'] = ch_th_data['TxBiasLowWarning']['value'] + output = self.pddf_obj.get_attr_name_output(self.device, 'xcvr_present') + if not output: + return False + mode = output['mode'] + modpres = output['status'].rstrip() + if 'XCVR' in self.plugin_data: + if 'xcvr_present' in self.plugin_data['XCVR']: + ptype = self.sfp_type + vtype = 'valmap-'+ptype + if vtype in self.plugin_data['XCVR']['xcvr_present'][mode]: + vmap = self.plugin_data['XCVR']['xcvr_present'][mode][vtype] + if modpres in vmap: + return vmap[modpres] + else: + return False + # if self.plugin_data doesn't specify anything regarding Transceivers + if modpres == '1': + return True else: - # SFPs - sfpd_obj = sff8472Dom() - offset = 256 - eeprom_ifraw = self.__read_eeprom_specific_bytes(0, offset) - sfpi_obj = sff8472InterfaceId(eeprom_ifraw) - cal_type = sfpi_obj.get_calibration_type() - sfpd_obj._calibration_type = cal_type - - dom_module_threshold_raw = self.__read_eeprom_specific_bytes( - (offset + SFP_MODULE_THRESHOLD_OFFSET), SFP_MODULE_THRESHOLD_WIDTH) - if dom_module_threshold_raw is not None: - dom_mod_th_data = sfpd_obj.parse_alarm_warning_threshold( - dom_module_threshold_raw, 0) - - xcvr_dom_threshold_info_dict['temphighalarm'] = dom_mod_th_data['data']['TempHighAlarm']['value'] - xcvr_dom_threshold_info_dict['templowalarm'] = dom_mod_th_data['data']['TempLowAlarm']['value'] - xcvr_dom_threshold_info_dict['temphighwarning'] = dom_mod_th_data['data']['TempHighWarning']['value'] - xcvr_dom_threshold_info_dict['templowwarning'] = dom_mod_th_data['data']['TempLowWarning']['value'] - xcvr_dom_threshold_info_dict['vcchighalarm'] = dom_mod_th_data['data']['VoltageHighAlarm']['value'] - xcvr_dom_threshold_info_dict['vcclowalarm'] = dom_mod_th_data['data']['VoltageLowAlarm']['value'] - xcvr_dom_threshold_info_dict['vcchighwarning'] = dom_mod_th_data[ - 'data']['VoltageHighWarning']['value'] - xcvr_dom_threshold_info_dict['vcclowwarning'] = dom_mod_th_data['data']['VoltageLowWarning']['value'] - xcvr_dom_threshold_info_dict['txbiashighalarm'] = dom_mod_th_data['data']['BiasHighAlarm']['value'] - xcvr_dom_threshold_info_dict['txbiaslowalarm'] = dom_mod_th_data['data']['BiasLowAlarm']['value'] - xcvr_dom_threshold_info_dict['txbiashighwarning'] = dom_mod_th_data['data']['BiasHighWarning']['value'] - xcvr_dom_threshold_info_dict['txbiaslowwarning'] = dom_mod_th_data['data']['BiasLowWarning']['value'] - xcvr_dom_threshold_info_dict['txpowerhighalarm'] = dom_mod_th_data['data']['TXPowerHighAlarm']['value'] - xcvr_dom_threshold_info_dict['txpowerlowalarm'] = dom_mod_th_data['data']['TXPowerLowAlarm']['value'] - xcvr_dom_threshold_info_dict['txpowerhighwarning'] = dom_mod_th_data['data']['TXPowerHighWarning'][ - 'value'] - xcvr_dom_threshold_info_dict['txpowerlowwarning'] = dom_mod_th_data['data']['TXPowerLowWarning'][ - 'value'] - xcvr_dom_threshold_info_dict['rxpowerhighalarm'] = dom_mod_th_data['data']['RXPowerHighAlarm']['value'] - xcvr_dom_threshold_info_dict['rxpowerlowalarm'] = dom_mod_th_data['data']['RXPowerLowAlarm']['value'] - xcvr_dom_threshold_info_dict['rxpowerhighwarning'] = dom_mod_th_data['data']['RXPowerHighWarning'][ - 'value'] - xcvr_dom_threshold_info_dict['rxpowerlowwarning'] = dom_mod_th_data['data']['RXPowerLowWarning'][ - 'value'] - - return xcvr_dom_threshold_info_dict + return False def get_reset_status(self): """ @@ -677,20 +91,16 @@ def get_reset_status(self): A Boolean, True if reset enabled, False if disabled """ reset_status = None - if not self.get_presence(): - return reset_status - device = 'PORT{}'.format(self.port_index) output = self.pddf_obj.get_attr_name_output(device, 'xcvr_reset') - if not output: - return False - status = int(output['status'].rstrip()) + if output: + status = int(output['status'].rstrip()) - if status == 1: - reset_status = True - else: - reset_status = False + if status == 1: + reset_status = True + else: + reset_status = False return reset_status @@ -702,42 +112,19 @@ def get_rx_los(self): Note : RX LOS status is latched until a call to get_rx_los or a reset. """ rx_los = None - if not self.get_presence(): - return rx_los - device = 'PORT{}'.format(self.port_index) output = self.pddf_obj.get_attr_name_output(device, 'xcvr_rxlos') - if not output: - # read the values from EEPROM - if self.is_osfp_port: - pass - elif self.is_qsfp_port: - rx_los_list = [] - dom_channel_monitor_raw = self.__read_eeprom_specific_bytes( - QSFP_CHANNL_RX_LOS_STATUS_OFFSET, QSFP_CHANNL_RX_LOS_STATUS_WIDTH) if self.get_presence() else None - 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 & 0x01 != 0) - rx_los_list.append(rx_los_data & 0x02 != 0) - rx_los_list.append(rx_los_data & 0x04 != 0) - rx_los_list.append(rx_los_data & 0x08 != 0) - rx_los = rx_los_list[0] and rx_los_list[1] and rx_los_list[2] and rx_los_list[3] - else: - # SFP ports - status_control_raw = self.__read_eeprom_specific_bytes( - SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) - if status_control_raw: - data = int(status_control_raw[0], 16) - rx_los = (sffbase().test_bit(data, 1) != 0) - - else: + if output: status = int(output['status'].rstrip()) if status == 1: rx_los = True else: rx_los = False + else: + # Use common SfpOptoeBase implementation for get_rx_los + rx_los = super().get_rx_los() return rx_los @@ -749,42 +136,19 @@ def get_tx_fault(self): Note : TX fault status is lached until a call to get_tx_fault or a reset. """ tx_fault = None - if not self.get_presence(): - return tx_fault - device = 'PORT{}'.format(self.port_index) output = self.pddf_obj.get_attr_name_output(device, 'xcvr_txfault') - if not output: - # read the values from EEPROM - if self.is_osfp_port: - pass - elif self.is_qsfp_port: - tx_fault_list = [] - dom_channel_monitor_raw = self.__read_eeprom_specific_bytes( - QSFP_CHANNL_TX_FAULT_STATUS_OFFSET, QSFP_CHANNL_TX_FAULT_STATUS_WIDTH) \ - if self.get_presence() else None - 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 & 0x01 != 0) - tx_fault_list.append(tx_fault_data & 0x02 != 0) - tx_fault_list.append(tx_fault_data & 0x04 != 0) - tx_fault_list.append(tx_fault_data & 0x08 != 0) - tx_fault = tx_fault_list[0] and tx_fault_list[1] and tx_fault_list[2] and tx_fault_list[3] - else: - # SFP - status_control_raw = self.__read_eeprom_specific_bytes( - SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) - if status_control_raw: - data = int(status_control_raw[0], 16) - tx_fault = (sffbase().test_bit(data, 2) != 0) - else: + if output: status = int(output['status'].rstrip()) if status == 1: tx_fault = True else: tx_fault = False + else: + # Use common SfpOptoeBase implementation for get_tx_fault + tx_fault = super().get_tx_fault() return tx_fault @@ -795,86 +159,22 @@ def get_tx_disable(self): A Boolean, True if tx_disable is enabled, False if disabled """ tx_disable = False - if not self.get_presence(): - return tx_disable - device = 'PORT{}'.format(self.port_index) output = self.pddf_obj.get_attr_name_output(device, 'xcvr_txdisable') - if not output: - # read the values from EEPROM - if self.is_osfp_port: - return tx_disable - elif self.is_qsfp_port: - tx_disable_list = [] - - sfpd_obj = sff8436Dom() - if sfpd_obj is None: - return False - - dom_control_raw = self.__read_eeprom_specific_bytes( - QSFP_CONTROL_OFFSET, QSFP_CONTROL_WIDTH) if self.get_presence() else None - if dom_control_raw is not None: - dom_control_data = sfpd_obj.parse_control_bytes(dom_control_raw, 0) - tx_disable_list.append( - 'On' == dom_control_data['data']['TX1Disable']['value']) - tx_disable_list.append( - 'On' == dom_control_data['data']['TX2Disable']['value']) - tx_disable_list.append( - 'On' == dom_control_data['data']['TX3Disable']['value']) - tx_disable_list.append( - 'On' == dom_control_data['data']['TX4Disable']['value']) - - return tx_disable_list - else: - status_control_raw = self.__read_eeprom_specific_bytes( - SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) - if status_control_raw: - data = int(status_control_raw[0], 16) - tx_disable_hard = (sffbase().test_bit( - data, SFP_TX_DISABLE_HARD_BIT) != 0) - tx_disable_soft = (sffbase().test_bit( - data, SFP_TX_DISABLE_SOFT_BIT) != 0) - tx_disable = tx_disable_hard | tx_disable_soft - - return tx_disable - else: + if output: status = int(output['status'].rstrip()) if status == 1: tx_disable = True else: tx_disable = False + else: + # Use common SfpOptoeBase implementation for get_tx_disable + tx_disable = super().get_tx_disable() return tx_disable - def get_tx_disable_channel(self): - """ - Retrieves the TX disabled channels in this SFP - Returns: - A hex of 4 bits (bit 0 to bit 3 as channel 0 to channel 3) to represent - TX channels which have been disabled in this SFP. - As an example, a returned value of 0x5 indicates that channel 0 - and channel 2 have been disabled. - """ - if not self.get_presence(): - return 0 - - if self.is_osfp_port: - return 0 - elif self.is_qsfp_port: - tx_disable_list = self.get_tx_disable() - if tx_disable_list is None: - return 0 - tx_disabled = 0 - for i in range(len(tx_disable_list)): - if tx_disable_list[i]: - tx_disabled |= 1 << i - return tx_disabled - else: - # SFP doesnt support this - return 0 - def get_lpmode(self): """ Retrieves the lpmode (low power mode) status of this SFP @@ -882,162 +182,21 @@ def get_lpmode(self): A Boolean, True if lpmode is enabled, False if disabled """ lpmode = False - if not self.get_presence(): - return lpmode - device = 'PORT{}'.format(self.port_index) output = self.pddf_obj.get_attr_name_output(device, 'xcvr_lpmode') - if not output: - # Read from EEPROM - if self.is_osfp_port: - pass - elif self.is_qsfp_port: - try: - eeprom = None - ctype = self.get_connector_type() - if ctype in ['Copper pigtail', 'No separable connector']: - return False - - eeprom = open(self.eeprom_path, "rb") - eeprom.seek(93) - status = ord(eeprom.read(1)) - - if ((status & 0x3) == 0x3): - # Low Power Mode if "Power override" bit is 1 and "Power set" bit is 1 - lpmode = True - else: - # High Power Mode if one of the following conditions is matched: - # 1. "Power override" bit is 0 - # 2. "Power override" bit is 1 and "Power set" bit is 0 - lpmode = False - except IOError as e: - print("Error: unable to open file: %s" % str(e)) - return False - finally: - if eeprom is not None: - eeprom.close() - time.sleep(0.01) - else: - # SFP - pass - else: + if output: status = int(output['status'].rstrip()) if status == 1: lpmode = True else: lpmode = False - - return lpmode - - def get_power_override(self): - """ - Retrieves the power-override status of this SFP - Returns: - A Boolean, True if power-override is enabled, False if disabled - """ - power_override = False - if not self.get_presence(): - return power_override - - if self.is_osfp_port: - pass - elif self.is_qsfp_port: - sfpd_obj = sff8436Dom() - if sfpd_obj is None: - return False - - dom_control_raw = self.__read_eeprom_specific_bytes( - QSFP_CONTROL_OFFSET, QSFP_CONTROL_WIDTH) if self.get_presence() else None - if dom_control_raw is not None: - dom_control_data = sfpd_obj.parse_control_bytes(dom_control_raw, 0) - power_override = ('On' == dom_control_data['data']['PowerOverride']['value']) - else: - # SFP doesnt suppor this - pass - - return power_override - - def get_temperature(self): - """ - Retrieves the temperature of this SFP - Returns: - An integer number of current temperature in Celsius - """ - transceiver_dom_info_dict = self.get_transceiver_bulk_status() - if transceiver_dom_info_dict is not None: - # returns None if temperature is not found in the dictionary - return transceiver_dom_info_dict.get("temperature") - else: - return None - - def get_voltage(self): - """ - Retrieves the supply voltage of this SFP - Returns: - An integer number of supply voltage in mV - """ - transceiver_dom_info_dict = self.get_transceiver_bulk_status() - # returns None if voltage is not found in the dictionary - if transceiver_dom_info_dict is not None: - return transceiver_dom_info_dict.get("voltage") else: - return None + # Use common SfpOptoeBase implementation for get_lpmode + lpmode = super().get_lpmode() - def get_tx_bias(self): - """ - Retrieves the TX bias current of this SFP - Returns: - A list of four integer numbers, representing TX bias in mA - for channel 0 to channel 4. - Ex. ['110.09', '111.12', '108.21', '112.09'] - """ - transceiver_dom_info_dict = self.get_transceiver_bulk_status() - if transceiver_dom_info_dict is not None: - tx1_bs = transceiver_dom_info_dict.get("tx1bias", "N/A") - tx2_bs = transceiver_dom_info_dict.get("tx2bias", "N/A") - tx3_bs = transceiver_dom_info_dict.get("tx3bias", "N/A") - tx4_bs = transceiver_dom_info_dict.get("tx4bias", "N/A") - return [tx1_bs, tx2_bs, tx3_bs, tx4_bs] if transceiver_dom_info_dict else [] - else: - return None - - def get_rx_power(self): - """ - Retrieves the received optical power for this SFP - Returns: - A list of four integer numbers, representing received optical - power in mW for channel 0 to channel 4. - Ex. ['1.77', '1.71', '1.68', '1.70'] - """ - transceiver_dom_info_dict = self.get_transceiver_bulk_status() - if transceiver_dom_info_dict is not None: - rx1_pw = transceiver_dom_info_dict.get("rx1power", "N/A") - rx2_pw = transceiver_dom_info_dict.get("rx2power", "N/A") - rx3_pw = transceiver_dom_info_dict.get("rx3power", "N/A") - rx4_pw = transceiver_dom_info_dict.get("rx4power", "N/A") - return [rx1_pw, rx2_pw, rx3_pw, rx4_pw] if transceiver_dom_info_dict else [] - else: - return None - - def get_tx_power(self): - """ - Retrieves the TX power of this SFP - Returns: - A list of four integer numbers, representing TX power in mW - for channel 0 to channel 4. - Ex. ['1.86', '1.86', '1.86', '1.86'] - """ - transceiver_dom_info_dict = self.get_transceiver_bulk_status() - if transceiver_dom_info_dict is not None: - tx1_pw = transceiver_dom_info_dict.get("tx1power", "N/A") - tx2_pw = transceiver_dom_info_dict.get("tx2power", "N/A") - tx3_pw = transceiver_dom_info_dict.get("tx3power", "N/A") - tx4_pw = transceiver_dom_info_dict.get("tx4power", "N/A") - return [tx1_pw, tx2_pw, tx3_pw, tx4_pw] - else: - return None + return lpmode def get_intr_status(self): """ @@ -1068,17 +227,10 @@ def reset(self): A boolean, True if successful, False if not """ status = False - if not self.get_presence(): - return status - device = 'PORT{}'.format(self.port_index) - # TODO: Implement a wrapper set function to write the sequence path = self.pddf_obj.get_path(device, 'xcvr_reset') - # TODO: put the optic based reset logic using EEPROM - if path is None: - pass - else: + if path: try: f = open(path, 'r+') except IOError as e: @@ -1095,6 +247,9 @@ def reset(self): status = True except IOError as e: status = False + else: + # Use common SfpOptoeBase implementation for reset + status = super().reset() return status @@ -1109,61 +264,11 @@ def tx_disable(self, tx_disable): """ # find out a generic implementation of tx_disable for SFP, QSFP and OSFP status = False - if not self.get_presence(): - return tx_disable - device = 'PORT{}'.format(self.port_index) path = self.pddf_obj.get_path(device, 'xcvr_txdisable') # TODO: put the optic based reset logic using EEPROM - if path is None: - if self.is_osfp_port: - pass - elif self.is_qsfp_port: - eeprom_f = None - try: - txdisable_ctl = 0xf if tx_disable else 0x0 - buf = create_string_buffer(1) - buf[0] = bytes([txdisable_ctl]) - # Write to eeprom - eeprom_f = open(self.eeprom_path, "r+b") - eeprom_f.seek(QSFP_CONTROL_OFFSET) - eeprom_f.write(buf[0]) - except IOError as e: - print("Error: unable to open file: %s" % str(e)) - return False - finally: - if eeprom_f is not None: - eeprom_f.close() - time.sleep(0.01) - - status = True - else: - status_control_raw = self.__read_eeprom_specific_bytes( - 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 - txdisable_bit = 64 if tx_disable else 191 - status_control = int(status_control_raw[0], 16) - txdisable_ctl = (status_control | txdisable_bit) if tx_disable else ( - status_control & txdisable_bit) - try: - eeprom_f = open(self.eeprom_path, mode="r+b", buffering=0) - buf = create_string_buffer(1) - buf[0] = bytes([txdisable_ctl]) - # Write to eeprom - eeprom_f.seek(SFP_STATUS_CONTROL_OFFSET) - eeprom_f.write(buf[0]) - except Exception as e: - print(("Error: unable to open file: %s" % str(e))) - return False - finally: - if eeprom_f: - eeprom_f.close() - time.sleep(0.01) - status = True - else: + if path: try: f = open(path, 'r+') except IOError as e: @@ -1178,48 +283,10 @@ def tx_disable(self, tx_disable): status = True except IOError as e: status = False - - return status - - def tx_disable_channel(self, channel, disable): - """ - Sets the tx_disable for specified SFP channels - Args: - channel : A hex of 4 bits (bit 0 to bit 3) which represent channel 0 to 3, - e.g. 0x5 for channel 0 and channel 2. - disable : A boolean, True to disable TX channels specified in channel, - False to enable - Returns: - A boolean, True if successful, False if not - """ - # TODO: find a implementation - status = False - if not self.get_presence(): - return status - - if self.is_osfp_port: - pass - elif self.is_qsfp_port: - eeprom_f = None - try: - channel_state = self.get_tx_disable_channel() - txdisable_ctl = (channel_state | channel) if disable else (channel_state & ~channel) - buf = create_string_buffer(1) - buf[0] = bytes([txdisable_ctl]) - # Write to eeprom - eeprom_f = open(self.eeprom_path, "r+b") - eeprom_f.seek(QSFP_CONTROL_OFFSET) - eeprom_f.write(buf[0]) - except IOError as e: - print("Error: unable to open file: %s" % str(e)) - return False - finally: - if eeprom_f is not None: - eeprom_f.close() - time.sleep(0.01) - status = True else: - pass + # Use common SfpOptoeBase implementation for tx_disable + status = super().tx_disable(tx_disable) + return status @@ -1233,44 +300,10 @@ def set_lpmode(self, lpmode): A boolean, True if lpmode is set successfully, False if not """ status = False - if not self.get_presence(): - return status - device = 'PORT{}'.format(self.port_index) path = self.pddf_obj.get_path(device, 'xcvr_lpmode') - # TODO: put the optic based reset logic using EEPROM - if path is None: - if self.is_osfp_port: - pass - elif self.is_qsfp_port: - try: - eeprom_f = None - ctype = self.get_connector_type() - if ctype in ['Copper pigtail', 'No separable connector']: - return False - - # Fill in write buffer - regval = 0x3 if lpmode else 0x1 # 0x3:Low Power Mode, 0x1:High Power Mode - buffer = create_string_buffer(1) - buffer[0] = bytes([regval]) - - # Write to eeprom - eeprom_f = open(self.eeprom_path, "r+b") - eeprom_f.seek(93) - eeprom_f.write(buffer[0]) - return True - except IOError as e: - print("Error: unable to open file: %s" % str(e)) - return False - finally: - if eeprom_f is not None: - eeprom_f.close() - time.sleep(0.01) - else: - pass - - else: + if path: try: f = open(path, 'r+') except IOError as e: @@ -1286,149 +319,11 @@ def set_lpmode(self, lpmode): status = True except IOError as e: status = False - - return status - - def set_power_override(self, power_override, power_set): - """ - Sets SFP power level using power_override and power_set - Args: - power_override : - A Boolean, True to override set_lpmode and use power_set - to control SFP power, False to disable SFP power control - through power_override/power_set and use set_lpmode - to control SFP power. - power_set : - Only valid when power_override is True. - A Boolean, True to set SFP to low power mode, False to set - SFP to high power mode. - Returns: - A boolean, True if power-override and power_set are set successfully, - False if not - """ - status = False - if not self.get_presence(): - return status - - if self.is_osfp_port: - pass - elif self.is_qsfp_port: - try: - power_override_bit = 0 - if power_override: - power_override_bit |= 1 << 0 - - power_set_bit = 0 - if power_set: - power_set_bit |= 1 << 1 - - buffer = create_string_buffer(1) - buffer[0] = bytes([power_override_bit | power_set_bit]) - # Write to eeprom - eeprom_f = open(self.eeprom_path, "r+b") - eeprom_f.seek(QSFP_POWEROVERRIDE_OFFSET) - eeprom_f.write(buffer[0]) - except IOError as e: - print("Error: unable to open file: %s" % str(e)) - return False - finally: - if eeprom_f is not None: - eeprom_f.close() - time.sleep(0.01) - return True else: - pass + # Use common SfpOptoeBase implementation for set_lpmode + status = super().set_lpmode(lpmode) return status - def get_name(self): - """ - Retrieves the name of the device - Returns: - string: The name of the device - """ - # Name of the port/sfp ? - return 'PORT{}'.format(self.port_index) - - def get_presence(self): - """ - Retrieves the presence of the PSU - Returns: - bool: True if PSU is present, False if not - """ - output = self.pddf_obj.get_attr_name_output(self.device, 'xcvr_present') - if not output: - return False - - mode = output['mode'] - modpres = output['status'].rstrip() - if 'XCVR' in self.plugin_data: - if 'xcvr_present' in self.plugin_data['XCVR']: - ptype = self.sfp_type - vtype = 'valmap-'+ptype - if vtype in self.plugin_data['XCVR']['xcvr_present'][mode]: - vmap = self.plugin_data['XCVR']['xcvr_present'][mode][vtype] - if modpres in vmap: - return vmap[modpres] - else: - return False - # if self.plugin_data doesn't specify anything regarding Transceivers - if modpres == '1': - return True - else: - return False - - def get_model(self): - """ - Retrieves the model number (or part number) of the device - Returns: - string: Model/part number of device - """ - transceiver_dom_info_dict = self.get_transceiver_info() - if transceiver_dom_info_dict is not None: - return transceiver_dom_info_dict.get("model", "N/A") - else: - return None - - def get_serial(self): - """ - Retrieves the serial number of the device - Returns: - string: Serial number of device - """ - transceiver_dom_info_dict = self.get_transceiver_info() - if transceiver_dom_info_dict is not None: - return transceiver_dom_info_dict.get("serial", "N/A") - else: - return None - - def get_status(self): - """ - Retrieves the operational status of the device - Returns: - A boolean value, True if device is operating properly, False if not - """ - return self.get_presence() and self.get_transceiver_bulk_status() - - def get_connector_type(self): - """ - Retrieves the device connector type - Returns: - enum: connector_code - """ - transceiver_dom_info_dict = self.get_transceiver_info() - if transceiver_dom_info_dict is not None: - return transceiver_dom_info_dict.get("connector", "N/A") - else: - return None - - def get_transceiver_change_event(self): - """ - TODO: This function need to be implemented - when decide to support monitoring SFP(Xcvrd) - on this platform. - """ - raise NotImplementedError - def dump_sysfs(self): return self.pddf_obj.cli_dump_dsysfs('xcvr') diff --git a/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_thermal.py b/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_thermal.py index 644292eb17e5..a0fe6a28bf44 100644 --- a/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_thermal.py +++ b/platform/pddf/platform-api-pddf-base/sonic_platform_pddf_base/pddf_thermal.py @@ -22,7 +22,7 @@ class PddfThermal(ThermalBase): pddf_obj = {} plugin_data = {} - def __init__(self, index, pddf_data=None, pddf_plugin_data=None): + def __init__(self, index, pddf_data=None, pddf_plugin_data=None, is_psu_thermal=False, psu_index=0): if not pddf_data or not pddf_plugin_data: raise ValueError('PDDF JSON data error') @@ -35,78 +35,129 @@ def __init__(self, index, pddf_data=None, pddf_plugin_data=None): self.thermal_obj_name = "TEMP{}".format(self.thermal_index) self.thermal_obj = self.pddf_obj.data[self.thermal_obj_name] + self.is_psu_thermal = is_psu_thermal + if self.is_psu_thermal: + self.thermals_psu_index = psu_index + def get_name(self): - if 'dev_attr' in self.thermal_obj.keys(): - if 'display_name' in self.thermal_obj['dev_attr']: - return str(self.thermal_obj['dev_attr']['display_name']) - # In case of errors - return (self.thermal_obj_name) + if self.is_psu_thermal: + return "PSU{}_TEMP{}".format(self.thermals_psu_index, self.thermal_index) + else: + if 'dev_attr' in self.thermal_obj.keys(): + if 'display_name' in self.thermal_obj['dev_attr']: + return str(self.thermal_obj['dev_attr']['display_name']) + # In case of errors + return (self.thermal_obj_name) + + def get_presence(self): + if self.is_psu_thermal: + # Temp sensor on the PSU + device = "PSU{}".format(self.thermals_psu_index) + output = self.pddf_obj.get_attr_name_output(device, "psu_present") + if not output: + return False + + mode = output['mode'] + status = output['status'] + + vmap = self.plugin_data['PSU']['psu_present'][mode]['valmap'] + + if status.rstrip('\n') in vmap: + return vmap[status.rstrip('\n')] + else: + return False + else: + # Temp sensor on the board + return True def get_temperature(self): - output = self.pddf_obj.get_attr_name_output(self.thermal_obj_name, "temp1_input") - if not output: - return None + if self.is_psu_thermal: + device = "PSU{}".format(self.thermals_psu_index) + output = self.pddf_obj.get_attr_name_output(device, "psu_temp1_input") + if not output: + return None - if output['status'].isalpha(): - attr_value = None + temp1 = output['status'] + # temperature returned is in milli celcius + return float(temp1)/1000 else: - attr_value = float(output['status']) + output = self.pddf_obj.get_attr_name_output(self.thermal_obj_name, "temp1_input") + if not output: + return None - if output['mode'] == 'bmc': - return attr_value - else: - return (attr_value/float(1000)) + if output['status'].isalpha(): + attr_value = None + else: + attr_value = float(output['status']) + + if output['mode'] == 'bmc': + return attr_value + else: + return (attr_value/float(1000)) def get_high_threshold(self): - output = self.pddf_obj.get_attr_name_output(self.thermal_obj_name, "temp1_high_threshold") - if not output: - return None + if not self.is_psu_thermal: + output = self.pddf_obj.get_attr_name_output(self.thermal_obj_name, "temp1_high_threshold") + if not output: + return None - if output['status'].isalpha(): - attr_value = None - else: - attr_value = float(output['status']) + if output['status'].isalpha(): + attr_value = None + else: + attr_value = float(output['status']) - if output['mode'] == 'bmc': - return attr_value + if output['mode'] == 'bmc': + return attr_value + else: + return (attr_value/float(1000)) else: - return (attr_value/float(1000)) + raise NotImplementedError + def get_low_threshold(self): - output = self.pddf_obj.get_attr_name_output(self.thermal_obj_name, "temp1_low_threshold") - if not output: - return None + if not self.is_psu_thermal: + output = self.pddf_obj.get_attr_name_output(self.thermal_obj_name, "temp1_low_threshold") + if not output: + return None - if output['status'].isalpha(): - attr_value = None - else: - attr_value = float(output['status']) + if output['status'].isalpha(): + attr_value = None + else: + attr_value = float(output['status']) - if output['mode'] == 'bmc': - return attr_value + if output['mode'] == 'bmc': + return attr_value + else: + return (attr_value/float(1000)) else: - return (attr_value/float(1000)) + raise NotImplementedError def set_high_threshold(self, temperature): - node = self.pddf_obj.get_path(self.thermal_obj_name, "temp1_high_threshold") - if node is None: - print("ERROR %s does not exist" % node) - return None + if not self.is_psu_thermal: + node = self.pddf_obj.get_path(self.thermal_obj_name, "temp1_high_threshold") + if node is None: + print("ERROR %s does not exist" % node) + return None - cmd = "echo '%d' > %s" % (temperature * 1000, node) - os.system(cmd) + cmd = "echo '%d' > %s" % (temperature * 1000, node) + os.system(cmd) - return (True) + return (True) + else: + raise NotImplementedError def set_low_threshold(self, temperature): - node = self.pddf_obj.get_path(self.thermal_obj_name, "temp1_low_threshold") - if node is None: - print("ERROR %s does not exist" % node) - return None - cmd = "echo '%d' > %s" % (temperature * 1000, node) - os.system(cmd) + if not self.is_psu_thermal: + node = self.pddf_obj.get_path(self.thermal_obj_name, "temp1_low_threshold") + if node is None: + print("ERROR %s does not exist" % node) + return None + cmd = "echo '%d' > %s" % (temperature * 1000, node) + os.system(cmd) - return (True) + return (True) + else: + raise NotImplementedError def get_high_critical_threshold(self): """ @@ -116,19 +167,22 @@ def get_high_critical_threshold(self): A float number, the high critical threshold temperature of thermal in Celsius up to nearest thousandth of one degree Celsius, e.g. 30.125 """ - output = self.pddf_obj.get_attr_name_output(self.thermal_obj_name, "temp1_high_crit_threshold") - if not output: - return None + if not self.is_psu_thermal: + output = self.pddf_obj.get_attr_name_output(self.thermal_obj_name, "temp1_high_crit_threshold") + if not output: + return None - if output['status'].isalpha(): - attr_value = None - else: - attr_value = float(output['status']) + if output['status'].isalpha(): + attr_value = None + else: + attr_value = float(output['status']) - if output['mode'] == 'bmc': - return attr_value + if output['mode'] == 'bmc': + return attr_value + else: + return (attr_value/float(1000)) else: - return (attr_value/float(1000)) + raise NotImplementedError def get_low_critical_threshold(self): """ @@ -138,22 +192,24 @@ def get_low_critical_threshold(self): A float number, the low critical threshold temperature of thermal in Celsius up to nearest thousandth of one degree Celsius, e.g. 30.125 """ - output = self.pddf_obj.get_attr_name_output(self.thermal_obj_name, "temp1_low_crit_threshold") - if not output: - return None + if not self.is_psu_thermal: + output = self.pddf_obj.get_attr_name_output(self.thermal_obj_name, "temp1_low_crit_threshold") + if not output: + return None - if output['status'].isalpha(): - attr_value = None - else: - attr_value = float(output['status']) + if output['status'].isalpha(): + attr_value = None + else: + attr_value = float(output['status']) - if output['mode'] == 'bmc': - return attr_value + if output['mode'] == 'bmc': + return attr_value + else: + return (attr_value/float(1000)) else: - return (attr_value/float(1000)) + raise NotImplementedError # Helper Functions - def get_temp_label(self): if 'bmc' in self.pddf_obj.data[self.thermal_obj_name].keys(): return None diff --git a/platform/vs/docker-ptf-sai.dep b/platform/vs/docker-ptf-sai.dep new file mode 100644 index 000000000000..697dc3b3cdcb --- /dev/null +++ b/platform/vs/docker-ptf-sai.dep @@ -0,0 +1,8 @@ +DPATH := $($(DOCKER_PTF_SAI)_PATH) +DEP_FILES := $(SONIC_COMMON_FILES_LIST) platform/vs/docker-ptf-sai.mk platform/vs/docker-ptf-sai.dep +DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) +DEP_FILES += $(shell git ls-files $(DPATH)) + +$(DOCKER_PTF_SAI)_CACHE_MODE := GIT_CONTENT_SHA +$(DOCKER_PTF_SAI)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) +$(DOCKER_PTF_SAI)_DEP_FILES := $(DEP_FILES) diff --git a/platform/vs/docker-ptf-sai.mk b/platform/vs/docker-ptf-sai.mk new file mode 100644 index 000000000000..d3463c5a0930 --- /dev/null +++ b/platform/vs/docker-ptf-sai.mk @@ -0,0 +1,9 @@ +# docker image for docker-ptf-sai + +DOCKER_PTF_SAI = docker-ptf-sai.gz +DOCKER_PTF_BASE = docker-ptf.gz +$(DOCKER_PTF_SAI)_PATH = $(DOCKERS_PATH)/docker-ptf-sai +$(DOCKER_PTF_SAI)_DEPENDS += $(LIBTHRIFT_2) $(PYTHON3_THRIFT_2) +$(DOCKER_PTF_SAI)_LOAD_DOCKERS += $(DOCKER_PTF_BASE) +SONIC_DOCKER_IMAGES += $(DOCKER_PTF_SAI) +SONIC_BUSTER_DOCKERS += $(DOCKER_PTF_SAI) diff --git a/platform/vs/docker-sonic-vs/Dockerfile.j2 b/platform/vs/docker-sonic-vs/Dockerfile.j2 index 21c607e28c9e..cc867e3d0eeb 100644 --- a/platform/vs/docker-sonic-vs/Dockerfile.j2 +++ b/platform/vs/docker-sonic-vs/Dockerfile.j2 @@ -66,6 +66,9 @@ RUN apt-get install -y net-tools \ gir1.2-glib-2.0 \ libdbus-1-3 \ libgirepository-1.0-1 \ + {%- if ENABLE_ASAN == "y" %} + libasan5 \ + {%- endif %} libsystemd0 # Install redis-server @@ -160,7 +163,7 @@ RUN sed -ri 's/^(save .*$)/# \1/g; COPY ["50-default.conf", "/etc/rsyslog.d/"] COPY ["start.sh", "orchagent.sh", "files/update_chassisdb_config", "/usr/bin/"] -COPY ["supervisord.conf", "/etc/supervisor/conf.d/"] +COPY ["supervisord.conf.j2", "/usr/share/sonic/templates/"] COPY ["files/configdb-load.sh", "/usr/bin/"] COPY ["files/arp_update", "/usr/bin/"] COPY ["files/buffers_config.j2", "files/qos_config.j2", "files/arp_update_vars.j2", "files/copp_cfg.j2", "/usr/share/sonic/templates/"] @@ -179,6 +182,10 @@ COPY ["hwsku.json", "/usr/share/sonic/device/x86_64-kvm_x86_64-r0/Force10-S6000/ COPY ["hwsku.json", "/usr/share/sonic/device/x86_64-kvm_x86_64-r0/brcm_gearbox_vs/"] COPY ["hwsku.json", "/usr/share/sonic/device/x86_64-kvm_x86_64-r0/Mellanox-SN2700/"] +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 + # Workaround the tcpdump issue RUN mv /usr/sbin/tcpdump /usr/bin/tcpdump diff --git a/platform/vs/docker-sonic-vs/supervisord.conf b/platform/vs/docker-sonic-vs/supervisord.conf.j2 similarity index 69% rename from platform/vs/docker-sonic-vs/supervisord.conf rename to platform/vs/docker-sonic-vs/supervisord.conf.j2 index 96f027131520..a49f33866edf 100644 --- a/platform/vs/docker-sonic-vs/supervisord.conf +++ b/platform/vs/docker-sonic-vs/supervisord.conf.j2 @@ -42,6 +42,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/syncd-asan.log" +{% endif %} [program:gbsyncd] command=/usr/bin/syncd -s -p /usr/share/sonic/hwsku/pai.profile -x /usr/share/sonic/hwsku/context_config.json -g 1 @@ -67,6 +70,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/portsyncd-asan.log" +{% endif %} [program:orchagent] command=/usr/bin/orchagent.sh @@ -75,6 +81,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/orchagent-asan.log" +{% endif %} [program:coppmgrd] command=/usr/bin/coppmgrd @@ -83,6 +92,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/coppmgrd-asan.log" +{% endif %} [program:neighsyncd] command=/usr/bin/neighsyncd @@ -91,6 +103,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/neighsyncd-asan.log" +{% endif %} [program:teamsyncd] command=/usr/bin/teamsyncd @@ -99,6 +114,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/teamsyncd-asan.log" +{% endif %} [program:vlanmgrd] command=/usr/bin/vlanmgrd @@ -107,6 +125,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/vlanmgrd-asan.log" +{% endif %} [program:intfmgrd] command=/usr/bin/intfmgrd @@ -115,6 +136,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/intfmgrd-asan.log" +{% endif %} [program:portmgrd] command=/usr/bin/portmgrd @@ -123,6 +147,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/portmgrd-asan.log" +{% endif %} [program:teammgrd] command=/usr/bin/teammgrd @@ -131,6 +158,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/teammgrd-asan.log" +{% endif %} [program:zebra] command=/usr/lib/frr/zebra -A 127.0.0.1 -s 90000000 -M fpm @@ -163,6 +193,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/fpmsyncd-asan.log" +{% endif %} [program:arp_update] command=/usr/bin/arp_update @@ -179,6 +212,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/buffermgrd-asan.log" +{% endif %} [program:vrfmgrd] command=/usr/bin/vrfmgrd @@ -187,6 +223,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/vrfmgrd-asan.log" +{% endif %} [program:restore_neighbors] command=/usr/bin/restore_neighbors.py @@ -205,6 +244,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/nbrmgrd-asan.log" +{% endif %} [program:vxlanmgrd] command=/usr/bin/vxlanmgrd @@ -213,6 +255,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/vxlanmgrd-asan.log" +{% endif %} [program:sflowmgrd] command=/usr/bin/sflowmgrd @@ -221,6 +266,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/sflowmgrd-asan.log" +{% endif %} [program:natmgrd] command=/usr/bin/natmgrd @@ -229,6 +277,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/natmgrd-asan.log" +{% endif %} [program:natsyncd] command=/usr/bin/natsyncd @@ -237,6 +288,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/natsyncd-asan.log" +{% endif %} [program:fdbsyncd] command=/usr/bin/fdbsyncd @@ -245,6 +299,9 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/fdbsyncd-asan.log" +{% endif %} [program:tunnelmgrd] command=/usr/bin/tunnelmgrd @@ -253,3 +310,6 @@ autostart=false autorestart=false stdout_logfile=syslog stderr_logfile=syslog +{% if ENABLE_ASAN == "y" %} +environment=ASAN_OPTIONS="log_path=/var/log/asan/tunnelmgrd-asan.log" +{% endif %} diff --git a/platform/vs/rules.dep b/platform/vs/rules.dep index 0d485e8004d1..44c863612992 100644 --- a/platform/vs/rules.dep +++ b/platform/vs/rules.dep @@ -4,6 +4,7 @@ include $(PLATFORM_PATH)/docker-sonic-vs.dep include $(PLATFORM_PATH)/docker-syncd-vs.dep include $(PLATFORM_PATH)/docker-gbsyncd-vs.dep include $(PLATFORM_PATH)/docker-ptf.dep +include $(PLATFORM_PATH)/docker-ptf-sai.dep include $(PLATFORM_PATH)/libsaithrift-dev.dep include $(PLATFORM_PATH)/one-image.dep include $(PLATFORM_PATH)/onie.dep diff --git a/platform/vs/rules.mk b/platform/vs/rules.mk index cbb52847edfa..461c3f84dd02 100644 --- a/platform/vs/rules.mk +++ b/platform/vs/rules.mk @@ -4,6 +4,7 @@ include $(PLATFORM_PATH)/docker-sonic-vs.mk include $(PLATFORM_PATH)/docker-syncd-vs.mk include $(PLATFORM_PATH)/docker-gbsyncd-vs.mk include $(PLATFORM_PATH)/docker-ptf.mk +include $(PLATFORM_PATH)/docker-ptf-sai.mk include $(PLATFORM_PATH)/libsaithrift-dev.mk include $(PLATFORM_PATH)/one-image.mk include $(PLATFORM_PATH)/onie.mk diff --git a/rules/config b/rules/config index 1b7220f6db0d..c51fcd84832c 100644 --- a/rules/config +++ b/rules/config @@ -180,6 +180,13 @@ K8s_GCR_IO_PAUSE_VERSION = 3.4.1 # The relative path is build root folder. SONIC_ENABLE_IMAGE_SIGNATURE ?= n +# SONIC_ENABLE_SECUREBOOT_SIGNATURE - enable SONiC kernel signing to support UEFI secureboot +# To support UEFI secureboot chain of trust requires EFI kernel to be signed as a PE binary +# SIGNING_KEY = +# SIGNING_CERT = +# The absolute path should be provided. +SONIC_ENABLE_SECUREBOOT_SIGNATURE ?= n + # PACKAGE_URL_PREFIX - the package url prefix PACKAGE_URL_PREFIX ?= https://packages.trafficmanager.net/public/packages @@ -208,3 +215,9 @@ BUILD_MULTIASIC_KVM = n # INCLUDE_MUX - build docker-mux for dual ToR (Gemini) INCLUDE_MUX = y + +# ENABLE_ASAN - enable address sanitizer +ENABLE_ASAN ?= n + +# reset default container registry from dockerhub to other +DEFAULT_CONTAINER_REGISTRY ?= diff --git a/rules/debootstrap.dep b/rules/debootstrap.dep new file mode 100644 index 000000000000..82ca11d7e4df --- /dev/null +++ b/rules/debootstrap.dep @@ -0,0 +1,10 @@ + +SPATH := $($(DEBOOTSTRAP)_SRC_PATH) +DEP_FILES := $(SONIC_COMMON_FILES_LIST) rules/debootstrap.mk rules/debootstrap.dep +DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) +DEP_FILES += $(shell git ls-files $(SPATH)) + +$(DEBOOTSTRAP)_CACHE_MODE := GIT_CONTENT_SHA +$(DEBOOTSTRAP)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) +$(DEBOOTSTRAP)_DEP_FILES := $(DEP_FILES) + diff --git a/rules/debootstrap.mk b/rules/debootstrap.mk new file mode 100644 index 000000000000..dc60599d5f3f --- /dev/null +++ b/rules/debootstrap.mk @@ -0,0 +1,9 @@ +# debootstrap package + +DEBOOTSTRAP_VERSION = 1.0.123 + +export DEBOOTSTRAP_VERSION + +DEBOOTSTRAP = debootstrap_$(DEBOOTSTRAP_VERSION)_all.deb +$(DEBOOTSTRAP)_SRC_PATH = $(SRC_PATH)/debootstrap +SONIC_MAKE_DEBS += $(DEBOOTSTRAP) diff --git a/rules/dhcpmon.mk b/rules/dhcpmon.mk index 3d80d227c156..3f8f5e139bce 100644 --- a/rules/dhcpmon.mk +++ b/rules/dhcpmon.mk @@ -6,3 +6,6 @@ SONIC_DHCPMON_PKG_NAME = dhcpmon SONIC_DHCPMON = sonic-$(SONIC_DHCPMON_PKG_NAME)_$(SONIC_DHCPMON_VERSION)_$(CONFIGURED_ARCH).deb $(SONIC_DHCPMON)_SRC_PATH = $(SRC_PATH)/$(SONIC_DHCPMON_PKG_NAME) SONIC_DPKG_DEBS += $(SONIC_DHCPMON) + +SONIC_DHCPMON_DBG = sonic-$(SONIC_DHCPMON_PKG_NAME)-dbgsym_$(SONIC_DHCPMON_VERSION)_$(CONFIGURED_ARCH).deb +$(eval $(call add_derived_package,$(SONIC_DHCPMON),$(SONIC_DHCPMON_DBG))) diff --git a/rules/docker-database.mk b/rules/docker-database.mk index d7ce311110ee..707adc2d64cb 100644 --- a/rules/docker-database.mk +++ b/rules/docker-database.mk @@ -6,11 +6,11 @@ DOCKER_DATABASE_DBG = $(DOCKER_DATABASE_STEM)-$(DBG_IMAGE_MARK).gz $(DOCKER_DATABASE)_PATH = $(DOCKERS_PATH)/$(DOCKER_DATABASE_STEM) -$(DOCKER_DATABASE)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_DEPENDS) +$(DOCKER_DATABASE)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_DEPENDS) -$(DOCKER_DATABASE)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_IMAGE_PACKAGES) +$(DOCKER_DATABASE)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_IMAGE_PACKAGES) -$(DOCKER_DATABASE)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BUSTER) +$(DOCKER_DATABASE)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BULLSEYE) $(DOCKER_DATABASE)_VERSION = 1.0.0 $(DOCKER_DATABASE)_PACKAGE_NAME = database @@ -28,6 +28,3 @@ $(DOCKER_DATABASE)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro $(DOCKER_DATABASE)_BASE_IMAGE_FILES += redis-cli:/usr/bin/redis-cli $(DOCKER_DATABASE)_FILES += $(SYSCTL_NET_CONFIG) $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) $(DOCKER_DATABASE)_FILES += $(UPDATE_CHASSISDB_CONFIG_SCRIPT) - -SONIC_BUSTER_DOCKERS += $(DOCKER_DATABASE) -SONIC_BUSTER_DBG_DOCKERS += $(DOCKER_DATABASE_DBG) diff --git a/rules/docker-dhcp-relay.mk b/rules/docker-dhcp-relay.mk index 5e3f84f05111..b742bff43b0d 100644 --- a/rules/docker-dhcp-relay.mk +++ b/rules/docker-dhcp-relay.mk @@ -9,7 +9,7 @@ $(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)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_DEPENDS) -$(DOCKER_DHCP_RELAY)_DBG_DEPENDS += $(ISC_DHCP_RELAY_DBG) $(SONIC_DHCP6RELAY_DBG) +$(DOCKER_DHCP_RELAY)_DBG_DEPENDS += $(ISC_DHCP_RELAY_DBG) $(SONIC_DHCP6RELAY_DBG) $(SONIC_DHCPMON_DBG) $(DOCKER_DHCP_RELAY)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_IMAGE_PACKAGES) diff --git a/rules/docker-macsec.mk b/rules/docker-macsec.mk index 1cb14246e86a..7bea7ef321b8 100644 --- a/rules/docker-macsec.mk +++ b/rules/docker-macsec.mk @@ -6,14 +6,13 @@ DOCKER_MACSEC_DBG = $(DOCKER_MACSEC_STEM)-$(DBG_IMAGE_MARK).gz $(DOCKER_MACSEC)_PATH = $(DOCKERS_PATH)/$(DOCKER_MACSEC_STEM) -$(DOCKER_MACSEC)_DEPENDS += $(SWSS) $(WPASUPPLICANT) $(REDIS_TOOLS) $(LIBNL3) $(LIBNL_GENL3) $(LIBNL_ROUTE3) -$(DOCKER_MACSEC)_DBG_DEPENDS = $($(DOCKER_SWSS_LAYER_BUSTER)_DBG_DEPENDS) -$(DOCKER_MACSEC)_DBG_DEPENDS += $(SWSS_DBG) $(LIBSWSSCOMMON_DBG) -$(DOCKER_MACSEC)_DBG_DEPENDS += $(WPASUPPLICANT_DBG) +$(DOCKER_MACSEC)_DEPENDS += $(SWSS) $(WPASUPPLICANT) $(LIBSWSSCOMMON) $(LIBNL3) $(LIBNL_GENL3) $(LIBNL_ROUTE3) +$(DOCKER_MACSEC)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_DEPENDS) +$(DOCKER_MACSEC)_DBG_DEPENDS += $(SWSS_DBG) $(WPASUPPLICANT_DBG) $(LIBSWSSCOMMON_DBG) -$(DOCKER_MACSEC)_DBG_IMAGE_PACKAGES = $($(DOCKER_SWSS_LAYER_BUSTER)_DBG_IMAGE_PACKAGES) +$(DOCKER_MACSEC)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_IMAGE_PACKAGES) -$(DOCKER_MACSEC)_LOAD_DOCKERS += $(DOCKER_SWSS_LAYER_BUSTER) +$(DOCKER_MACSEC)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BULLSEYE) SONIC_DOCKER_IMAGES += $(DOCKER_MACSEC) ifeq ($(INCLUDE_MACSEC), y) @@ -34,5 +33,5 @@ $(DOCKER_MACSEC)_RUN_OPT += -v /host/warmboot:/var/warmboot $(DOCKER_MACSEC)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) -SONIC_BUSTER_DOCKERS += $(DOCKER_MACSEC) -SONIC_BUSTER_DBG_DOCKERS += $(DOCKER_MACSEC_DBG) +SONIC_BULLSEYE_DOCKERS += $(DOCKER_MACSEC) +SONIC_BULLSEYE_DBG_DOCKERS += $(DOCKER_MACSEC_DBG) diff --git a/rules/docker-mux.mk b/rules/docker-mux.mk index 31c3212ea11f..cbdc1c06510d 100644 --- a/rules/docker-mux.mk +++ b/rules/docker-mux.mk @@ -7,12 +7,12 @@ DOCKER_MUX_DBG = $(DOCKER_MUX_STEM)-$(DBG_IMAGE_MARK).gz $(DOCKER_MUX)_PATH = $(DOCKERS_PATH)/$(DOCKER_MUX_STEM) $(DOCKER_MUX)_DEPENDS = $(SONIC_LINKMGRD) $(LIBSWSSCOMMON) $(LIBHIREDIS) -$(DOCKER_MUX)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_DEPENDS) +$(DOCKER_MUX)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_DEPENDS) $(DOCKER_MUX)_DBG_DEPENDS += $(SONIC_LINKMGRD_DBG) $(LIBSWSSCOMMON_DBG) $(LIBHIREDIS_DBG) -$(DOCKER_MUX)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_IMAGE_PACKAGES) +$(DOCKER_MUX)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_IMAGE_PACKAGES) -$(DOCKER_MUX)_LOAD_DOCKERS = $(DOCKER_CONFIG_ENGINE_BUSTER) +$(DOCKER_MUX)_LOAD_DOCKERS = $(DOCKER_CONFIG_ENGINE_BULLSEYE) $(DOCKER_MUX)_VERSION = 1.0.0 $(DOCKER_MUX)_PACKAGE_NAME = mux @@ -32,8 +32,4 @@ endif $(DOCKER_MUX)_CONTAINER_NAME = mux $(DOCKER_MUX)_RUN_OPT += --privileged -t $(DOCKER_MUX)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro -$(DOCKER_ORCHAGENT)_RUN_OPT += -v /var/log/mux:/var/log/mux:rw $(DOCKER_MUX)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) - -SONIC_BUSTER_DOCKERS += $(DOCKER_MUX) -SONIC_BUSTER_DBG_DOCKERS += $(DOCKER_MUX_DBG) diff --git a/rules/docker-orchagent.mk b/rules/docker-orchagent.mk index d9453465c702..ef0c203877d8 100644 --- a/rules/docker-orchagent.mk +++ b/rules/docker-orchagent.mk @@ -10,6 +10,7 @@ $(DOCKER_ORCHAGENT)_DBG_DEPENDS = $($(DOCKER_SWSS_LAYER_BUSTER)_DBG_DEPENDS) $(DOCKER_ORCHAGENT)_DBG_DEPENDS += $(SWSS_DBG) \ $(LIBSWSSCOMMON_DBG) \ $(LIBSAIREDIS_DBG) +$(DOCKER_ORCHAGENT)_PYTHON_WHEELS += $(SCAPY) $(DOCKER_ORCHAGENT)_DBG_IMAGE_PACKAGES = $($(DOCKER_SWSS_LAYER_BUSTER)_DBG_IMAGE_PACKAGES) diff --git a/rules/docker-p4rt.mk b/rules/docker-p4rt.mk index 6d8a650aad82..60e0d7d75244 100644 --- a/rules/docker-p4rt.mk +++ b/rules/docker-p4rt.mk @@ -7,12 +7,12 @@ DOCKER_P4RT_DBG = $(DOCKER_P4RT_STEM)-$(DBG_IMAGE_MARK).gz $(DOCKER_P4RT)_PATH = $(DOCKERS_PATH)/$(DOCKER_P4RT_STEM) $(DOCKER_P4RT)_DEPENDS += $(SONIC_P4RT) -$(DOCKER_P4RT)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_DEPENDS) +$(DOCKER_P4RT)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_DEPENDS) $(DOCKER_P4RT)_DBG_DEPENDS += $(SONIC_P4RT_DBG) $(LIBSWSSCOMMON_DBG) $(DOCKER_P4RT)_DBG_DEPENDS += $(LIBSAIREDIS_DBG) -$(DOCKER_P4RT)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_IMAGE_PACKAGES) +$(DOCKER_P4RT)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_IMAGE_PACKAGES) -$(DOCKER_P4RT)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BUSTER) +$(DOCKER_P4RT)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BULLSEYE) $(DOCKER_P4RT)_VERSION = 1.0.0 $(DOCKER_P4RT)_PACKAGE_NAME = p4rt diff --git a/rules/docker-platform-monitor.mk b/rules/docker-platform-monitor.mk index d21598851914..21babbcb49f4 100644 --- a/rules/docker-platform-monitor.mk +++ b/rules/docker-platform-monitor.mk @@ -20,6 +20,7 @@ $(DOCKER_PLATFORM_MONITOR)_PYTHON_WHEELS += $(SONIC_PSUD_PY3) $(DOCKER_PLATFORM_MONITOR)_PYTHON_WHEELS += $(SONIC_SYSEEPROMD_PY3) $(DOCKER_PLATFORM_MONITOR)_PYTHON_WHEELS += $(SONIC_THERMALCTLD_PY3) $(DOCKER_PLATFORM_MONITOR)_PYTHON_WHEELS += $(SONIC_XCVRD_PY3) +$(DOCKER_PLATFORM_MONITOR)_PYTHON_WHEELS += $(SONIC_YCABLED_PY3) $(DOCKER_PLATFORM_MONITOR)_PYTHON_WHEELS += $(SONIC_CHASSISD_PY3) ifeq ($(PDDF_SUPPORT),y) @@ -37,6 +38,10 @@ $(DOCKER_PLATFORM_MONITOR)_LOAD_DOCKERS = $(DOCKER_CONFIG_ENGINE_BUSTER) $(DOCKER_PLATFORM_MONITOR)_VERSION = 1.0.0 $(DOCKER_PLATFORM_MONITOR)_PACKAGE_NAME = pmon +ifeq ($(CONFIGURED_PLATFORM),mellanox) +$(DOCKER_PLATFORM_MONITOR)_WARM_SHUTDOWN_BEFORE = swss +endif + SONIC_DOCKER_IMAGES += $(DOCKER_PLATFORM_MONITOR) SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_PLATFORM_MONITOR) diff --git a/rules/docker-router-advertiser.mk b/rules/docker-router-advertiser.mk index c2a5f9bf5d3c..6d5b9e4717bd 100644 --- a/rules/docker-router-advertiser.mk +++ b/rules/docker-router-advertiser.mk @@ -6,12 +6,12 @@ DOCKER_ROUTER_ADVERTISER_DBG = $(DOCKER_ROUTER_ADVERTISER_STEM)-$(DBG_IMAGE_MARK $(DOCKER_ROUTER_ADVERTISER)_PATH = $(DOCKERS_PATH)/$(DOCKER_ROUTER_ADVERTISER_STEM) -$(DOCKER_ROUTER_ADVERTISER)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_DEPENDS) +$(DOCKER_ROUTER_ADVERTISER)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_DEPENDS) $(DOCKER_ROUTER_ADVERTISER)_DBG_DEPENDS += $(RADVD_DBG) -$(DOCKER_ROUTER_ADVERTISER)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_IMAGE_PACKAGES) +$(DOCKER_ROUTER_ADVERTISER)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BULLSEYE)_DBG_IMAGE_PACKAGES) -$(DOCKER_ROUTER_ADVERTISER)_LOAD_DOCKERS = $(DOCKER_CONFIG_ENGINE_BUSTER) +$(DOCKER_ROUTER_ADVERTISER)_LOAD_DOCKERS = $(DOCKER_CONFIG_ENGINE_BULLSEYE) $(DOCKER_ROUTER_ADVERTISER)_VERSION = 1.0.0 $(DOCKER_ROUTER_ADVERTISER)_PACKAGE_NAME = radv @@ -29,6 +29,3 @@ $(DOCKER_ROUTER_ADVERTISER)_RUN_OPT += --privileged -t $(DOCKER_ROUTER_ADVERTISER)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro $(DOCKER_ROUTER_ADVERTISER)_RUN_OPT += -v /usr/share/sonic/scripts:/usr/share/sonic/scripts:ro $(DOCKER_ROUTER_ADVERTISER)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) - -SONIC_BUSTER_DOCKERS += $(DOCKER_ROUTER_ADVERTISER) -SONIC_BUSTER_DBG_DOCKERS += $(DOCKER_ROUTER_ADVERTISER_DBG) diff --git a/rules/scapy.dep b/rules/scapy.dep new file mode 100644 index 000000000000..ef09fb12223b --- /dev/null +++ b/rules/scapy.dep @@ -0,0 +1,10 @@ +SPATH := $($(SCAPY)_SRC_PATH) +DEP_FILES := $(SONIC_COMMON_FILES_LIST) rules/scapy.mk rules/scapy.dep +DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) +SMDEP_FILES := $(addprefix $(SPATH)/,$(shell cd $(SPATH) && git ls-files -- ':!:doc/*')) + +$(SCAPY)_CACHE_MODE := GIT_CONTENT_SHA +$(SCAPY)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) +$(SCAPY)_DEP_FILES := $(DEP_FILES) +$(SCAPY)_SMDEP_FILES := $(SMDEP_FILES) +$(SCAPY)_SMDEP_PATHS := $(SPATH) diff --git a/rules/scapy.mk b/rules/scapy.mk new file mode 100644 index 000000000000..6953c1ef10e2 --- /dev/null +++ b/rules/scapy.mk @@ -0,0 +1,7 @@ +# scapy python3 wheel + +SCAPY = scapy-2.4.5-py2.py3-none-any.whl +$(SCAPY)_SRC_PATH = $(SRC_PATH)/scapy +$(SCAPY)_PYTHON_VERSION = 3 +$(SCAPY)_TEST = n +SONIC_PYTHON_WHEELS += $(SCAPY) diff --git a/rules/sonic-config.dep b/rules/sonic-config.dep index 05a02a6027ac..9e6d1e929341 100644 --- a/rules/sonic-config.dep +++ b/rules/sonic-config.dep @@ -4,7 +4,7 @@ SPATH := $($(SONIC_CONFIG_ENGINE_PY3)_SRC_PATH) DEP_FILES := $(SONIC_COMMON_FILES_LIST) rules/sonic-config.mk rules/sonic-config.dep DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) DEP_FILES += $(shell git ls-files $(SPATH)) -DEP_FILES += files/image_config/interfaces/interfaces.j2 dockers/docker-orchagent/ports.json.j2 dockers/docker-dhcp-relay/wait_for_intf.sh.j2 dockers/docker-dhcp-relay/docker-dhcp-relay.supervisord.conf.j2 dockers/docker-lldp/lldpd.conf.j2 dockers/docker-orchagent/ipinip.json.j2 $(wildcard device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/*.j2 device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/*.j2) files/build_templates/qos_config.j2 dockers/docker-orchagent/switch.json.j2 files/image_config/constants/constants.yml +DEP_FILES += files/image_config/interfaces/interfaces.j2 dockers/docker-orchagent/ports.json.j2 dockers/docker-dhcp-relay/wait_for_intf.sh.j2 dockers/docker-dhcp-relay/docker-dhcp-relay.supervisord.conf.j2 dockers/docker-lldp/lldpd.conf.j2 dockers/docker-orchagent/ipinip.json.j2 $(wildcard device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/* device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/*) files/build_templates/qos_config.j2 dockers/docker-orchagent/switch.json.j2 dockers/docker-orchagent/vxlan.json.j2 files/image_config/constants/constants.yml ifeq ($(ENABLE_PY2_MODULES), y) $(SONIC_CONFIG_ENGINE_PY2)_CACHE_MODE := GIT_CONTENT_SHA diff --git a/rules/sonic-pcied.dep b/rules/sonic-pcied.dep index ddb07f722f6d..05cd1fe5cf42 100644 --- a/rules/sonic-pcied.dep +++ b/rules/sonic-pcied.dep @@ -3,12 +3,6 @@ DEP_FILES:= $(SONIC_COMMON_FILES_LIST) rules/sonic-pcied.mk rules/sonic-pcied.de DEP_FILES+= $(SONIC_COMMON_BASE_FILES_LIST) SMDEP_FILES:= $(addprefix $(SPATH)/,$(shell cd $(SPATH) && git ls-files)) -$(SONIC_PCIED_PY2)_CACHE_MODE:= GIT_CONTENT_SHA -$(SONIC_PCIED_PY2)_DEP_FLAGS:= $(SONIC_COMMON_FLAGS_LIST) -$(SONIC_PCIED_PY2)_DEP_FILES:= $(DEP_FILES) -$(SONIC_PCIED_PY2)_SMDEP_FILES:= $(SMDEP_FILES) -$(SONIC_PCIED_PY2)_SMDEP_PATHS:= $(SPATH) - $(SONIC_PCIED_PY3)_CACHE_MODE:= GIT_CONTENT_SHA $(SONIC_PCIED_PY3)_DEP_FLAGS:= $(SONIC_COMMON_FLAGS_LIST) $(SONIC_PCIED_PY3)_DEP_FILES:= $(DEP_FILES) diff --git a/rules/sonic-pcied.mk b/rules/sonic-pcied.mk index 5c80ae276860..a5d0c8d5054c 100644 --- a/rules/sonic-pcied.mk +++ b/rules/sonic-pcied.mk @@ -1,17 +1,9 @@ # sonic-pcied (SONiC PCIe Monitor daemon) Debian package -# SONIC_PCIED_PY2 package - -SONIC_PCIED_PY2 = sonic_pcied-1.0-py2-none-any.whl -$(SONIC_PCIED_PY2)_SRC_PATH = $(SRC_PATH)/sonic-platform-daemons/sonic-pcied -$(SONIC_PCIED_PY2)_DEPENDS = $(SONIC_PY_COMMON_PY2) -$(SONIC_PCIED_PY2)_PYTHON_VERSION = 2 -SONIC_PYTHON_WHEELS += $(SONIC_PCIED_PY2) - # SONIC_PCIED_PY3 package SONIC_PCIED_PY3 = sonic_pcied-1.0-py3-none-any.whl $(SONIC_PCIED_PY3)_SRC_PATH = $(SRC_PATH)/sonic-platform-daemons/sonic-pcied -$(SONIC_PCIED_PY3)_DEPENDS = $(SONIC_PY_COMMON_PY3) $(SONIC_PCIED_PY2) +$(SONIC_PCIED_PY3)_DEPENDS = $(SONIC_PY_COMMON_PY3) $(SONIC_PCIED_PY3)_PYTHON_VERSION = 3 SONIC_PYTHON_WHEELS += $(SONIC_PCIED_PY3) diff --git a/rules/sonic-ycabled.dep b/rules/sonic-ycabled.dep new file mode 100644 index 000000000000..b7eed99e8a59 --- /dev/null +++ b/rules/sonic-ycabled.dep @@ -0,0 +1,10 @@ +SPATH := $($(SONIC_YCABLED_PY3)_SRC_PATH) +DEP_FILES := $(SONIC_COMMON_FILES_LIST) rules/sonic-ycabled.mk rules/sonic-ycabled.dep +DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) +SMDEP_FILES := $(addprefix $(SPATH)/,$(shell cd $(SPATH) && git ls-files)) + +$(SONIC_YCABLED_PY3)_CACHE_MODE := GIT_CONTENT_SHA +$(SONIC_YCABLED_PY3)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) +$(SONIC_YCABLED_PY3)_DEP_FILES := $(DEP_FILES) +$(SONIC_YCABLED_PY3)_SMDEP_FILES := $(SMDEP_FILES) +$(SONIC_YCABLED_PY3)_SMDEP_PATHS := $(SPATH) diff --git a/rules/sonic-ycabled.mk b/rules/sonic-ycabled.mk new file mode 100644 index 000000000000..ba3531d2db7d --- /dev/null +++ b/rules/sonic-ycabled.mk @@ -0,0 +1,10 @@ +# sonic-ycabled (SONiC Y-Cable daemon) Debian package + +# SONIC_YCABLED_PY3 package + +SONIC_YCABLED_PY3 = sonic_ycabled-1.0-py3-none-any.whl +$(SONIC_YCABLED_PY3)_SRC_PATH = $(SRC_PATH)/sonic-platform-daemons/sonic-ycabled +$(SONIC_YCABLED_PY3)_DEPENDS = $(SONIC_PY_COMMON_PY3) $(SONIC_PLATFORM_COMMON_PY3) +$(SONIC_YCABLED_PY3)_DEBS_DEPENDS = $(LIBSWSSCOMMON) $(PYTHON3_SWSSCOMMON) +$(SONIC_YCABLED_PY3)_PYTHON_VERSION = 3 +SONIC_PYTHON_WHEELS += $(SONIC_YCABLED_PY3) diff --git a/rules/thrift_0_13_0.dep b/rules/thrift_0_13_0.dep deleted file mode 100644 index 52d8b6a525f9..000000000000 --- a/rules/thrift_0_13_0.dep +++ /dev/null @@ -1,8 +0,0 @@ -SPATH := $($(LIBTHRIFT_0_13_0)_SRC_PATH) -DEP_FILES := $(SONIC_COMMON_FILES_LIST) rules/thrift_0_13_0.mk rules/thrift_0_13_0.dep -DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) -DEP_FILES += $(shell git ls-files $(SPATH)) - -$(LIBTHRIFT_0_13_0)_CACHE_MODE := GIT_CONTENT_SHA -$(LIBTHRIFT_0_13_0)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) -$(LIBTHRIFT_0_13_0)_DEP_FILES := $(DEP_FILES) diff --git a/rules/thrift_0_13_0.mk b/rules/thrift_0_13_0.mk deleted file mode 100644 index 18d333910904..000000000000 --- a/rules/thrift_0_13_0.mk +++ /dev/null @@ -1,17 +0,0 @@ -# thrift package - -THRIFT_VERSION_0_13_0 = 0.13.0 -THRIFT_VERSION_0_13_0_FULL = $(THRIFT_VERSION_0_13_0)-6 - -LIBTHRIFT_0_13_0 = libthrift-$(THRIFT_VERSION_0_13_0)_$(THRIFT_VERSION_0_13_0_FULL)_$(CONFIGURED_ARCH).deb -$(LIBTHRIFT_0_13_0)_SRC_PATH = $(SRC_PATH)/thrift_0_13_0 -SONIC_MAKE_DEBS += $(LIBTHRIFT_0_13_0) - -LIBTHRIFT_DEV_0_13_0 = libthrift-dev_$(THRIFT_VERSION_0_13_0_FULL)_$(CONFIGURED_ARCH).deb -$(eval $(call add_derived_package,$(LIBTHRIFT_0_13_0),$(LIBTHRIFT_DEV_0_13_0))) - -PYTHON3_THRIFT_0_13_0 = python3-thrift_$(THRIFT_VERSION_0_13_0_FULL)_$(CONFIGURED_ARCH).deb -$(eval $(call add_derived_package,$(LIBTHRIFT_0_13_0),$(PYTHON3_THRIFT_0_13_0))) - -THRIFT_COMPILER_0_13_0 = thrift-compiler_$(THRIFT_VERSION_0_13_0_FULL)_$(CONFIGURED_ARCH).deb -$(eval $(call add_derived_package,$(LIBTHRIFT_0_13_0),$(THRIFT_COMPILER_0_13_0))) diff --git a/rules/thrift_0_14_1.dep b/rules/thrift_0_14_1.dep new file mode 100644 index 000000000000..2fb1ba5666ac --- /dev/null +++ b/rules/thrift_0_14_1.dep @@ -0,0 +1,8 @@ +SPATH := $($(LIBTHRIFT_0_14_1)_SRC_PATH) +DEP_FILES := $(SONIC_COMMON_FILES_LIST) rules/thrift_0_14_1.mk rules/thrift_0_14_1.dep +DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) +DEP_FILES += $(shell git ls-files $(SPATH)) + +$(LIBTHRIFT_0_14_1)_CACHE_MODE := GIT_CONTENT_SHA +$(LIBTHRIFT_0_14_1)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) +$(LIBTHRIFT_0_14_1)_DEP_FILES := $(DEP_FILES) diff --git a/rules/thrift_0_14_1.mk b/rules/thrift_0_14_1.mk new file mode 100644 index 000000000000..6fc0d05c14bc --- /dev/null +++ b/rules/thrift_0_14_1.mk @@ -0,0 +1,20 @@ +# thrift package + +THRIFT_0_14_1_VERSION = 0.14.1 +THRIFT_0_14_1_VERSION_FULL = $(THRIFT_0_14_1_VERSION) + +LIBTHRIFT_0_14_1 = libthrift0_$(THRIFT_0_14_1_VERSION)_$(CONFIGURED_ARCH).deb +$(LIBTHRIFT_0_14_1)_SRC_PATH = $(SRC_PATH)/thrift_0_14_1 +SONIC_MAKE_DEBS += $(LIBTHRIFT_0_14_1) + +LIBTHRIFT_0_14_1_DEV = libthrift-dev_$(THRIFT_0_14_1_VERSION)_$(CONFIGURED_ARCH).deb +$(eval $(call add_derived_package,$(LIBTHRIFT_0_14_1),$(LIBTHRIFT_0_14_1_DEV))) + +PYTHON3_THRIFT_0_14_1 = python3-thrift_$(THRIFT_0_14_1_VERSION)_$(CONFIGURED_ARCH).deb +$(eval $(call add_derived_package,$(LIBTHRIFT_0_14_1),$(PYTHON3_THRIFT_0_14_1))) + +PYTHON_THRIFT_0_14_1 = python-thrift_$(THRIFT_0_14_1_VERSION)_$(CONFIGURED_ARCH).deb +$(eval $(call add_derived_package,$(LIBTHRIFT_0_14_1),$(PYTHON_THRIFT_0_14_1))) + +THRIFT_0_14_1_COMPILER = thrift-compiler_$(THRIFT_0_14_1_VERSION)_$(CONFIGURED_ARCH).deb +$(eval $(call add_derived_package,$(LIBTHRIFT_0_14_1),$(THRIFT_0_14_1_COMPILER))) diff --git a/scripts/build_kvm_image.sh b/scripts/build_kvm_image.sh index cfaba6521ed6..6e5fd7dec742 100755 --- a/scripts/build_kvm_image.sh +++ b/scripts/build_kvm_image.sh @@ -4,7 +4,7 @@ # # SPDX-License-Identifier: GPL-2.0 -MEM=4096 +MEM=8192 DISK=$1 ONIE_RECOVERY_ISO=$2 INSTALLER=$3 diff --git a/scripts/docker_version_control.sh b/scripts/docker_version_control.sh index 595477c859c6..e94370d0e2d9 100755 --- a/scripts/docker_version_control.sh +++ b/scripts/docker_version_control.sh @@ -16,16 +16,18 @@ mkdir -p target/versions/default . src/sonic-build-hooks/buildinfo/config/buildinfo.config image_tag=`grep "^FROM " $DOCKERFILE | awk '{print$2}'` +image_tag_noprefix=$image_tag +[ -n "$DEFAULT_CONTAINER_REGISTRY" ] && image_tag_noprefix=$(echo $image_tag | sed "s#$DEFAULT_CONTAINER_REGISTRY##") image=`echo $image_tag | cut -f1 -d:` tag=`echo $image_tag | cut -f2 -d:` if [[ ",$SONIC_VERSION_CONTROL_COMPONENTS," == *,all,* ]] || [[ ",$SONIC_VERSION_CONTROL_COMPONENTS," == *,docker,* ]]; then # if docker image not in white list, exit - if [[ "$image_tag" != */debian:* ]] && [[ "$image_tag" != multiarch/debian-debootstrap:* ]];then + if [[ "$image_tag" != */debian:* ]] && [[ "$image_tag" != debian:* ]] && [[ "$image_tag" != multiarch/debian-debootstrap:* ]];then exit 0 fi if [ -f $version_file ];then - hash_value=`grep "${ARCH}:${image_tag}" $version_file | awk -F== '{print$2}'` + hash_value=`grep "${ARCH}:${image_tag_noprefix}" $version_file | awk -F== '{print$2}'` fi if [ -z $hash_value ];then hash_value=unknown @@ -38,10 +40,10 @@ if [[ ",$SONIC_VERSION_CONTROL_COMPONENTS," == *,all,* ]] || [[ ",$SONIC_VERSION sed -i "s/$oldimage/$newimage/" $DOCKERFILE else hash_value=`docker pull $image_tag 2> ${new_version_file}.log | grep Digest | awk '{print$2}'` - if [ -z hash_value ];then + if [ -z "$hash_value" ];then hash_value=unknown fi fi if [[ "$hash_value" != "unknown" ]];then - echo -e "${ARCH}:${image_tag}==$hash_value" >> $new_version_file + echo -e "${ARCH}:${image_tag_noprefix}==$hash_value" >> $new_version_file fi diff --git a/scripts/prepare_slave_container_buildinfo.sh b/scripts/prepare_slave_container_buildinfo.sh index be6fe078bdfb..1fb2f006640b 100755 --- a/scripts/prepare_slave_container_buildinfo.sh +++ b/scripts/prepare_slave_container_buildinfo.sh @@ -14,6 +14,10 @@ symlink_build_hooks cp -rf $SLAVE_DIR/buildinfo/* /usr/local/share/buildinfo/ . /usr/local/share/buildinfo/scripts/buildinfo_base.sh +# Enable reproducible mirrors +set_reproducible_mirrors +apt-get update > /dev/null 2>&1 + # Build the slave version config [ -d /usr/local/share/buildinfo/versions ] && rm -rf /usr/local/share/buildinfo/versions scripts/versions_manager.py generate -t "/usr/local/share/buildinfo/versions" -n "build-${SLAVE_DIR}" -d "$DISTRO" -a "$ARCH" diff --git a/scripts/versions_manager.py b/scripts/versions_manager.py index c986e29a4e17..a20684e97bb4 100755 --- a/scripts/versions_manager.py +++ b/scripts/versions_manager.py @@ -174,11 +174,20 @@ def overwrite(self, module, for_all_dist=False, for_all_arch=False): self.components.append(tmp_component) self.adjust() - def get_config_module(self, default_module, dist, arch): + def get_config_module(self, source_path, dist, arch): if self.is_individule_version(): return self + default_module_path = VersionModule.get_module_path_by_name(source_path, DEFAULT_MODULE) + default_module = VersionModule() + default_module.load(default_module_path, filter_dist=dist, filter_arch=arch) module = default_module - if not self.is_aggregatable_module(self.name): + if self.name == 'host-image': + base_module_path = VersionModule.get_module_path_by_name(source_path, 'host-base-image') + base_module = VersionModule() + base_module.load(base_module_path, filter_dist=dist, filter_arch=arch) + module = default_module.clone(exclude_ctypes=DEFAULT_OVERWRITE_COMPONENTS) + module.overwrite(base_module, True, True) + elif not self.is_aggregatable_module(self.name): module = default_module.clone(exclude_ctypes=DEFAULT_OVERWRITE_COMPONENTS) return self._get_config_module(module, dist, arch) @@ -661,10 +670,7 @@ def generate(self): os.makedirs(args.target_path) module = VersionModule() module.load(module_path, filter_dist=args.distribution, filter_arch=args.architecture) - default_module_path = VersionModule.get_module_path_by_name(args.source_path, DEFAULT_MODULE) - default_module = VersionModule() - default_module.load(default_module_path, filter_dist=args.distribution, filter_arch=args.architecture) - config = module.get_config_module(default_module, args.distribution, args.architecture) + config = module.get_config_module(args.source_path, args.distribution, args.architecture) config.clean_info(force=True) config.dump(args.target_path, config=True, priority=args.priority) diff --git a/slave.mk b/slave.mk index 7fe8c9db0f41..a68a08fcd56a 100644 --- a/slave.mk +++ b/slave.mk @@ -130,6 +130,8 @@ include $(RULES_PATH)/config export PACKAGE_URL_PREFIX export TRUSTED_GPG_URLS export SONIC_VERSION_CONTROL_COMPONENTS +DEFAULT_CONTAINER_REGISTRY := $(SONIC_DEFAULT_CONTAINER_REGISTRY) +export DEFAULT_CONTAINER_REGISTRY ifeq ($(SONIC_ENABLE_PFCWD_ON_START),y) ENABLE_PFCWD_ON_START = y @@ -151,6 +153,11 @@ ifeq ($(SONIC_INSTALL_DEBUG_TOOLS),y) INSTALL_DEBUG_TOOLS = y endif +ifeq ($(SONIC_SAITHRIFT_V2),y) +SAITHRIFT_V2 = y +SAITHRIFT_VER = v2 +endif + ifeq ($(SONIC_INCLUDE_SFLOW),y) INCLUDE_SFLOW = y endif @@ -184,6 +191,13 @@ ifeq ($(SONIC_INCLUDE_MUX),y) INCLUDE_MUX = y endif +ifeq ($(ENABLE_ASAN),y) + ifneq ($(CONFIGURED_ARCH),amd64) + @echo "Disabling SWSS address sanitizer due to incompatible CPU architecture: $(CONFIGURED_ARCH)" + override ENABLE_ASAN = n + endif +endif + include $(RULES_PATH)/functions ifeq ($(SONIC_USE_PDDF_FRAMEWORK),y) @@ -254,6 +268,11 @@ export SONIC_ROUTING_STACK export FRR_USER_UID export FRR_USER_GID +############################################################################### +## Build Options +############################################################################### +export DEB_BUILD_OPTIONS = hardening=+all + ############################################################################### ## Dumping key config attributes associated to current building exercise ############################################################################### @@ -281,6 +300,7 @@ $(info "FRR_USER_UID" : "$(FRR_USER_UID)") $(info "FRR_USER_GID" : "$(FRR_USER_GID)") endif $(info "ENABLE_SYNCD_RPC" : "$(ENABLE_SYNCD_RPC)") +$(info "SAITHRIFT_V2" : "$(SAITHRIFT_V2)") $(info "ENABLE_ORGANIZATION_EXTENSIONS" : "$(ENABLE_ORGANIZATION_EXTENSIONS)") $(info "HTTP_PROXY" : "$(HTTP_PROXY)") $(info "HTTPS_PROXY" : "$(HTTPS_PROXY)") @@ -312,6 +332,8 @@ $(info "ENABLE_AUTO_TECH_SUPPORT" : "$(ENABLE_AUTO_TECH_SUPPORT)") $(info "PDDF_SUPPORT" : "$(PDDF_SUPPORT)") $(info "MULTIARCH_QEMU_ENVIRON" : "$(MULTIARCH_QEMU_ENVIRON)") $(info "SONIC_VERSION_CONTROL_COMPONENTS": "$(SONIC_VERSION_CONTROL_COMPONENTS)") +$(info "ENABLE_ASAN" : "$(ENABLE_ASAN)") +$(info "DEFAULT_CONTAINER_REGISTRY" : "$(SONIC_DEFAULT_CONTAINER_REGISTRY)") ifeq ($(CONFIGURED_PLATFORM),vs) $(info "BUILD_MULTIASIC_KVM" : "$(BUILD_MULTIASIC_KVM)") endif @@ -507,6 +529,7 @@ SONIC_TARGET_LIST += $(addprefix $(DEBS_PATH)/, $(SONIC_MAKE_DEBS)) # SONIC_DPKG_DEBS += $(SOME_NEW_DEB) $(addprefix $(DEBS_PATH)/, $(SONIC_DPKG_DEBS)) : $(DEBS_PATH)/% : .platform $$(addsuffix -install,$$(addprefix $(DEBS_PATH)/,$$($$*_DEPENDS))) \ $$(addprefix $(DEBS_PATH)/,$$($$*_AFTER)) \ + $$(addprefix $(FILES_PATH)/,$$($$*_AFTER_FILES)) \ $(call dpkg_depend,$(DEBS_PATH)/%.dep ) $(HEADER) @@ -595,6 +618,7 @@ $(SONIC_INSTALL_DEBS) : $(DEBS_PATH)/%-install : .platform $$(addsuffix -install if mkdir $(DEBS_PATH)/dpkg_lock &> /dev/null; then { sudo DEBIAN_FRONTEND=noninteractive dpkg -i $(DEBS_PATH)/$* $(LOG) && rm -d $(DEBS_PATH)/dpkg_lock && break; } || { rm -d $(DEBS_PATH)/dpkg_lock && sudo lsof /var/lib/dpkg/lock-frontend && ps aux && exit 1 ; } fi + sleep 10 done $(FOOTER) @@ -797,7 +821,7 @@ $(addprefix $(TARGET_PATH)/, $(DOCKER_IMAGES)) : $(TARGET_PATH)/%.gz : .platform # Load the target deb from DPKG cache $(call LOAD_CACHE,$*.gz,$@) - + $(eval $*_CACHE_LOADED:=$($*.gz_CACHE_LOADED)) # Skip building the target if it is already loaded from cache if [ -z '$($*.gz_CACHE_LOADED)' ] ; then @@ -871,7 +895,7 @@ $(addprefix $(TARGET_PATH)/, $(DOCKER_DBG_IMAGES)) : $(TARGET_PATH)/%-$(DBG_IMAG # Load the target deb from DPKG cache $(call LOAD_CACHE,$*-$(DBG_IMAGE_MARK).gz,$@) - + $(eval $*_CACHE_LOADED:=$($*-$(DBG_IMAGE_MARK).gz_CACHE_LOADED)) # Skip building the target if it is already loaded from cache if [ -z '$($*-$(DBG_IMAGE_MARK).gz_CACHE_LOADED)' ] ; then @@ -958,7 +982,6 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ $(LIBNSS_TACPLUS) \ $(MONIT) \ $(OPENSSH_SERVER) \ - $(SMARTMONTOOLS) \ $(PYTHON_SWSSCOMMON) \ $(PYTHON3_SWSSCOMMON) \ $(SONIC_UTILITIES_DATA) \ @@ -969,6 +992,7 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ $$(addprefix $(TARGET_PATH)/,$$($$*_DOCKERS)) \ $$(addprefix $(TARGET_PATH)/,$$(SONIC_PACKAGES_LOCAL)) \ $$(addprefix $(FILES_PATH)/,$$($$*_FILES)) \ + $(addsuffix -install,$(addprefix $(IMAGE_DISTRO_DEBS_PATH)/,$(DEBOOTSTRAP))) \ $(if $(findstring y,$(ENABLE_ZTP)),$(addprefix $(IMAGE_DISTRO_DEBS_PATH)/,$(SONIC_ZTP))) \ $(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_UTILITIES_PY3)) \ $(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_PY_COMMON_PY2)) \ @@ -1011,6 +1035,7 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ export include_p4rt="$(INCLUDE_P4RT)" export include_sflow="$(INCLUDE_SFLOW)" export enable_auto_tech_support="$(ENABLE_AUTO_TECH_SUPPORT)" + export enable_asan="$(ENABLE_ASAN)" export include_macsec="$(INCLUDE_MACSEC)" export include_mgmt_framework="$(INCLUDE_MGMT_FRAMEWORK)" export include_iccpd="$(INCLUDE_ICCPD)" @@ -1152,6 +1177,9 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ TARGET_PATH=$(TARGET_PATH) \ SONIC_ENFORCE_VERSIONS=$(SONIC_ENFORCE_VERSIONS) \ TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) \ + SONIC_ENABLE_SECUREBOOT_SIGNATURE="$(SONIC_ENABLE_SECUREBOOT_SIGNATURE)" \ + SIGNING_KEY="$(SIGNING_KEY)" \ + SIGNING_CERT="$(SIGNING_CERT)" \ PACKAGE_URL_PREFIX=$(PACKAGE_URL_PREFIX) \ MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) \ ./build_debian.sh $(LOG) diff --git a/sonic-slave-bullseye/Dockerfile.j2 b/sonic-slave-bullseye/Dockerfile.j2 index c0a23c59624b..2c3224999a19 100644 --- a/sonic-slave-bullseye/Dockerfile.j2 +++ b/sonic-slave-bullseye/Dockerfile.j2 @@ -1,13 +1,14 @@ +{% set prefix = DEFAULT_CONTAINER_REGISTRY %} {%- if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/qemu-user-static:x86_64-arm-6.1.0-8 as qemu -FROM multiarch/debian-debootstrap:armhf-bullseye +FROM {{ prefix }}multiarch/qemu-user-static:x86_64-arm-6.1.0-8 as qemu +FROM {{ prefix }}multiarch/debian-debootstrap:armhf-bullseye COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin {%- elif CONFIGURED_ARCH == "arm64" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/qemu-user-static:x86_64-aarch64-6.1.0-8 as qemu -FROM multiarch/debian-debootstrap:arm64-bullseye +FROM {{ prefix }}multiarch/qemu-user-static:x86_64-aarch64-6.1.0-8 as qemu +FROM {{ prefix }}multiarch/debian-debootstrap:arm64-bullseye COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin {%- else -%} -FROM debian:bullseye +FROM {{ prefix }}debian:bullseye {%- endif %} MAINTAINER gulv@microsoft.com @@ -19,7 +20,9 @@ RUN echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian/ bull echo "deb-src [arch=amd64] http://debian-archive.trafficmanager.net/debian/ bullseye main contrib non-free" >> /etc/apt/sources.list && \ 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://debian-archive.trafficmanager.net/debian bullseye-backports main" >> /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 {%- if CONFIGURED_ARCH == "armhf" %} RUN echo "deb [arch=armhf] http://deb.debian.org/debian bullseye main contrib non-free" > /etc/apt/sources.list && \ @@ -114,6 +117,7 @@ RUN apt-get update && apt-get install -y \ devscripts \ quilt \ stgit \ + sbsigntool \ # For platform-modules build module-assistant \ # For thrift build\ @@ -279,9 +283,6 @@ RUN apt-get update && apt-get install -y \ librrd8 \ librrd-dev \ rrdtool \ -# For smartmontools 6.6-1 - automake1.11 \ - libselinux1-dev \ # For kdump-tools liblzo2-dev \ # For iptables @@ -341,6 +342,7 @@ RUN apt-get update && apt-get install -y \ libboost-regex-dev \ googletest \ libgtest-dev \ + libgmock-dev \ libgcc-10-dev \ # For sonic-host-services build libcairo2-dev \ diff --git a/sonic-slave-buster/Dockerfile.j2 b/sonic-slave-buster/Dockerfile.j2 index 44f7410df460..401f032725cf 100644 --- a/sonic-slave-buster/Dockerfile.j2 +++ b/sonic-slave-buster/Dockerfile.j2 @@ -1,11 +1,12 @@ +{% set prefix = DEFAULT_CONTAINER_REGISTRY %} {%- if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/qemu-user-static:x86_64-arm-5.0.0-2 as qemu -FROM multiarch/debian-debootstrap:armhf-buster +FROM {{ prefix }}multiarch/qemu-user-static:x86_64-arm-5.0.0-2 as qemu +FROM {{ prefix }}multiarch/debian-debootstrap:armhf-buster COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin {%- elif CONFIGURED_ARCH == "arm64" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/debian-debootstrap:arm64-buster +FROM {{ prefix }}multiarch/debian-debootstrap:arm64-buster {%- else -%} -FROM debian:buster +FROM {{ prefix }}debian:buster {%- endif %} MAINTAINER gulv@microsoft.com @@ -110,6 +111,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 \ @@ -117,6 +125,7 @@ RUN apt-get update && apt-get install -y \ devscripts \ quilt \ stgit \ + sbsigntool \ # For platform-modules build module-assistant \ # For thrift build\ @@ -284,9 +293,6 @@ RUN apt-get update && apt-get install -y \ librrd8 \ librrd-dev \ rrdtool \ -# For smartmontools 6.6-1 - automake1.11 \ - libselinux1-dev \ # For kdump-tools liblzo2-dev \ # For iptables @@ -348,6 +354,7 @@ RUN apt-get update && apt-get install -y \ libboost-regex1.71-dev \ googletest \ libgtest-dev \ + libgmock-dev \ libgcc-8-dev \ # For sonic-host-services build libcairo2-dev \ @@ -458,6 +465,11 @@ RUN pip3 uninstall -y enum34 # For templating RUN pip2 install j2cli==0.3.10 +# Note: Jinja2 depends on MarkupSafe, however markupsafe 2.1.0 breaks Jinja2 2.10 +# Debian buster dist-packages include python3-markupsafe (1.1.0-1) and python3-jinja2 (2.10-2) +# If not pinning the versions, any requirement like `MarkupSafe>=2.0` will pull latest into site-packages and mess up. +RUN pip3 install MarkupSafe==2.0.1 +RUN pip3 install Jinja2==3.0.3 # For sonic-mgmt-framework RUN pip2 install "PyYAML==5.4.1" diff --git a/sonic-slave-jessie/Dockerfile.j2 b/sonic-slave-jessie/Dockerfile.j2 index 2eaa306cdce4..1d98e6d9b6c5 100644 --- a/sonic-slave-jessie/Dockerfile.j2 +++ b/sonic-slave-jessie/Dockerfile.j2 @@ -1,9 +1,10 @@ +{% set prefix = DEFAULT_CONTAINER_REGISTRY %} {%- if CONFIGURED_ARCH == "armhf" -%} -FROM multiarch/debian-debootstrap:armhf-jessie +FROM {{ prefix }}multiarch/debian-debootstrap:armhf-jessie {%- elif CONFIGURED_ARCH == "arm64" -%} -FROM multiarch/debian-debootstrap:arm64-jessie +FROM {{ prefix }}multiarch/debian-debootstrap:arm64-jessie {%- else -%} -FROM debian:jessie +FROM {{ prefix }}debian:jessie {%- endif %} MAINTAINER johnar@microsoft.com diff --git a/sonic-slave-stretch/Dockerfile.j2 b/sonic-slave-stretch/Dockerfile.j2 index 93c6d21d41e4..ad13ed0c124a 100644 --- a/sonic-slave-stretch/Dockerfile.j2 +++ b/sonic-slave-stretch/Dockerfile.j2 @@ -1,9 +1,10 @@ +{% set prefix = DEFAULT_CONTAINER_REGISTRY %} {%- if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/debian-debootstrap:armhf-stretch +FROM {{ prefix }}multiarch/debian-debootstrap:armhf-stretch {%- elif CONFIGURED_ARCH == "arm64" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/debian-debootstrap:arm64-stretch +FROM {{ prefix }}multiarch/debian-debootstrap:arm64-stretch {%- else -%} -FROM debian:stretch +FROM {{ prefix }}debian:stretch {%- endif %} MAINTAINER gulv@microsoft.com @@ -272,9 +273,6 @@ RUN apt-get update && apt-get install -y \ librrd8 \ librrd-dev \ rrdtool \ -# For smartmontools 6.6-1 - automake1.11 \ - libselinux1-dev \ # For kdump-tools liblzo2-dev \ # For iptables @@ -315,9 +313,6 @@ RUN sudo augtool --autosave "set /files/etc/dpkg/dpkg.cfg/force-confdef" ## do not modify the current configuration file, the new version is installed with a .dpkg-dist suffix RUN sudo augtool --autosave "set /files/etc/dpkg/dpkg.cfg/force-confold" -# For smartmontools 6.6-1 -RUN apt-get -t stretch-backports install -y debhelper - # For linux build RUN apt-get -y build-dep linux diff --git a/src/debootstrap/.gitignore b/src/debootstrap/.gitignore new file mode 100644 index 000000000000..2aa8324ad667 --- /dev/null +++ b/src/debootstrap/.gitignore @@ -0,0 +1,3 @@ +debootstrap*.udeb +debootstrap*.dsc +debootstrap-*/ diff --git a/src/debootstrap/Makefile b/src/debootstrap/Makefile new file mode 100644 index 000000000000..04e8646a1b2e --- /dev/null +++ b/src/debootstrap/Makefile @@ -0,0 +1,24 @@ +.ONESHELL: +SHELL = /bin/bash +.SHELLFLAGS += -e + +MAIN_TARGET = debootstrap_$(DEBOOTSTRAP_VERSION)_all.deb + +$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : + # Remove any stale files + rm -rf ./debootstrap-$(DEBOOTSTRAP_VERSION) ./debootstrap*.{deb,udeb,dsc} + + # Get source package + dget https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_$(DEBOOTSTRAP_VERSION).dsc + + # Build source and Debian packages + pushd debootstrap-$(DEBOOTSTRAP_VERSION) + patch -p1 -i ../proc-mount.patch + dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + popd + + # Move the newly-built .deb packages to the destination directory + mv $(DERIVED_TARGETS) $* $(DEST)/ + +$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) + diff --git a/src/debootstrap/proc-mount.patch b/src/debootstrap/proc-mount.patch new file mode 100644 index 000000000000..93084576490a --- /dev/null +++ b/src/debootstrap/proc-mount.patch @@ -0,0 +1,34 @@ +From 87cdebbcad6f4e16ba711227cbbbd70039f88752 Mon Sep 17 00:00:00 2001 +From: YunQiang Su +Date: Mon, 7 Sep 2020 09:29:37 +0800 +Subject: [PATCH] stage1: re-mkdir /proc instead of umount if it is a symlink + +In docker, the TARGET/proc will be a symlink to /proc. +And if the docker instance is called with --privileged, it will umount +the /proc of the whole instance in setup_proc. +--- + debian/changelog | 3 +++ + functions | 7 ++++++- + 2 files changed, 9 insertions(+), 1 deletion(-) + +diff --git a/functions b/functions +index 1ac63f7..065320d 100644 +--- a/functions ++++ b/functions +@@ -1183,7 +1183,12 @@ setup_proc () { + umount_on_exit /dev/shm + umount_on_exit /proc + umount_on_exit /proc/bus/usb +- umount "$TARGET/proc" 2>/dev/null || true ++ if [ -L "$TARGET/proc" ];then ++ rm -f $TARGET/proc ++ mkdir $TARGET/proc ++ else ++ umount "$TARGET/proc" 2>/dev/null || true ++ fi + + # some container environment are used at second-stage, it already treats /proc and so on + if [ -z "$(ls -A "$TARGET/proc")" ]; then +-- +GitLab + diff --git a/src/dhcp6relay/Makefile b/src/dhcp6relay/Makefile index 4d2eedd042ec..dd384452a5fc 100644 --- a/src/dhcp6relay/Makefile +++ b/src/dhcp6relay/Makefile @@ -5,7 +5,7 @@ MKDIR := mkdir CC := g++ MV := mv LIBS := -levent -lhiredis -lswsscommon -pthread -lboost_thread -lboost_system -CFLAGS = -g -Wall -std=c++17 -fPIC -I $(PWD)/../sonic-swss-common/common +CFLAGS += -Wall -std=c++17 -fPIE -I$(PWD)/../sonic-swss-common/common PWD := $(shell pwd) ifneq ($(MAKECMDGOALS),clean) @@ -21,7 +21,7 @@ all: sonic-dhcp6relay sonic-dhcp6relay: $(OBJS) @echo 'Building target: $@' @echo 'Invoking: G++ Linker' - $(CC) -o $(DHCP6RELAY_TARGET) $(OBJS) $(LIBS) + $(CC) $(LDFLAGS) -o $(DHCP6RELAY_TARGET) $(OBJS) $(LIBS) @echo 'Finished building target: $@' @echo ' ' diff --git a/src/dhcp6relay/debian/rules b/src/dhcp6relay/debian/rules index ce2eb52beb5d..ac2cd63889ef 100755 --- a/src/dhcp6relay/debian/rules +++ b/src/dhcp6relay/debian/rules @@ -1,4 +1,6 @@ #!/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 index 0af4f49a285f..ca78d80e63da 100644 --- a/src/dhcp6relay/src/configInterface.cpp +++ b/src/dhcp6relay/src/configInterface.cpp @@ -119,6 +119,7 @@ void processRelayNotification(std::deque &entries, 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); diff --git a/src/dhcp6relay/src/relay.cpp b/src/dhcp6relay/src/relay.cpp index d8fa2747a544..234646c1fb74 100644 --- a/src/dhcp6relay/src/relay.cpp +++ b/src/dhcp6relay/src/relay.cpp @@ -226,9 +226,11 @@ void send_udp(int sock, uint8_t *buffer, struct sockaddr_in6 target, uint32_t n, 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 { + 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); } } @@ -466,6 +468,46 @@ void relay_client(int sock, const uint8_t *msg, int32_t len, const ip6_hdr *ip_h } } +/** + * @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); * @@ -478,10 +520,9 @@ void relay_client(int sock, const uint8_t *msg, int32_t len, const ip6_hdr *ip_h * * @return none */ - void relay_relay_reply(int sock, const uint8_t *msg, int32_t len, relay_config *configs) { + 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; - char ifname[configs->interface.size()]; struct sockaddr_in6 target_addr; auto current_buffer_position = buffer; auto current_position = msg; @@ -492,28 +533,30 @@ void relay_client(int sock, const uint8_t *msg, int32_t len, const ip6_hdr *ip_h auto position = current_position + sizeof(struct dhcpv6_option); auto dhcpv6msg = parse_dhcpv6_hdr(position); - while ((current_position - msg) != len) { + 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;; + type = dhcpv6msg->msg_type; break; default: break; } } - strcpy(ifname, configs->interface.c_str()); 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(ifname); + target_addr.sin6_scope_id = if_nametoindex(config->interface.c_str()); - send_udp(sock, buffer, target_addr, current_buffer_position - buffer, configs, type); + send_udp(sock, buffer, target_addr, current_buffer_position - buffer, config, type); } @@ -570,7 +613,18 @@ void callback(evutil_socket_t fd, short event, void *arg) { std::string counterVlan = counter_table; 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); + 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; + } + default: + { + relay_client(config->local_sock, current_position, ntohs(udp_header->len) - sizeof(udphdr), ip_header, ether_header, config); + break; + } + } } /** @@ -707,8 +761,7 @@ void loop_relay(std::vector *vlans, swss::DBConnector *db) { int filter = 0; int local_sock = 0; int server_sock = 0; - const char *ifname = config->interface.c_str(); - int index = if_nametoindex(ifname); + int index = if_nametoindex(config->interface.c_str()); config->db = db; std::string counterVlan = counter_table; diff --git a/src/dhcp6relay/src/relay.h b/src/dhcp6relay/src/relay.h index e50d39786b4f..c224a9b28630 100644 --- a/src/dhcp6relay/src/relay.h +++ b/src/dhcp6relay/src/relay.h @@ -15,7 +15,7 @@ #define RELAY_PORT 547 #define CLIENT_PORT 546 -#define HOP_LIMIT 32 +#define HOP_LIMIT 8 //HOP_LIMIT reduced from 32 to 8 as stated in RFC8415 #define lengthof(A) (sizeof (A) / sizeof (A)[0]) @@ -146,6 +146,21 @@ void relay_forward(uint8_t *buffer, const struct dhcpv6_msg *msg, uint16_t msg_l */ 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); * diff --git a/src/dhcpmon/debian/rules b/src/dhcpmon/debian/rules index 00c628b6625f..76fc7ea1f839 100755 --- a/src/dhcpmon/debian/rules +++ b/src/dhcpmon/debian/rules @@ -1,5 +1,7 @@ #!/usr/bin/make -f +export DEB_BUILD_MAINT_OPTIONS=hardening=+all + DEB_CFLAGS_APPEND=-std=gnu11 export DEB_CFLAGS_APPEND diff --git a/src/dhcpmon/src/dhcp_device.c b/src/dhcpmon/src/dhcp_device.c index e4fbc7f56909..f45483f8504c 100644 --- a/src/dhcpmon/src/dhcp_device.c +++ b/src/dhcpmon/src/dhcp_device.c @@ -21,51 +21,25 @@ #include #include #include -#include -#include -#include #include "dhcp_device.h" -/** DHCP versions flags */ -static bool dhcpv4_enabled; -static bool dhcpv6_enabled; - /** Counter print width */ #define DHCP_COUNTER_WIDTH 9 /** Start of Ether header of a captured frame */ #define ETHER_START_OFFSET 0 -/** EtherType field offset from Ether header of a captured frame */ -#define ETHER_TYPE_OFFSET (ETHER_START_OFFSET + 12) /** Start of IP header of a captured frame */ #define IP_START_OFFSET (ETHER_START_OFFSET + ETHER_HDR_LEN) -/** Start of UDP header on IPv4 packet of a captured frame */ -#define UDPv4_START_OFFSET (IP_START_OFFSET + sizeof(struct ip)) -/** Start of DHCPv4 header of a captured frame */ -#define DHCPv4_START_OFFSET (UDPv4_START_OFFSET + sizeof(struct udphdr)) -/** Start of DHCPv4 Options segment of a captured frame */ -#define DHCPv4_OPTIONS_HEADER_SIZE 240 +/** Start of UDP header of a captured frame */ +#define UDP_START_OFFSET (IP_START_OFFSET + sizeof(struct ip)) +/** Start of DHCP header of a captured frame */ +#define DHCP_START_OFFSET (UDP_START_OFFSET + sizeof(struct udphdr)) +/** Start of DHCP Options segment of a captured frame */ +#define DHCP_OPTIONS_HEADER_SIZE 240 /** Offset of DHCP GIADDR */ #define DHCP_GIADDR_OFFSET 24 -/** IPv6 link-local prefix */ -#define IPV6_LINK_LOCAL_PREFIX 0x80fe -/** Start of UDP header on IPv6 packet of a captured frame */ -#define UDPv6_START_OFFSET (IP_START_OFFSET + sizeof(struct ip6_hdr)) -/** Start of DHCPv6 header of a captured frame */ -#define DHCPv6_START_OFFSET (UDPv6_START_OFFSET + sizeof(struct udphdr)) -/** Size of 'type' field on DHCPv6 header */ -#define DHCPv6_TYPE_LENGTH 1 -/** Size of DHCPv6 relay message header to first option */ -#define DHCPv6_RELAY_MSG_OPTIONS_OFFSET 34 -/** Size of 'option' field on DHCPv6 header */ -#define DHCPv6_OPTION_LENGTH 2 -/** Size of 'option length' field on DHCPv6 header */ -#define DHCPv6_OPTION_LEN_LENGTH 2 -/** DHCPv6 OPTION_RELAY_MSG */ -#define DHCPv6_OPTION_RELAY_MSG 9 - #define OP_LDHA (BPF_LD | BPF_H | BPF_ABS) /** bpf ldh Abs */ #define OP_LDHI (BPF_LD | BPF_H | BPF_IND) /** bpf ldh Ind */ #define OP_LDB (BPF_LD | BPF_B | BPF_ABS) /** bpf ldb Abs*/ @@ -75,40 +49,34 @@ static bool dhcpv6_enabled; #define OP_JSET (BPF_JMP | BPF_JSET | BPF_K) /** bpf jset */ #define OP_LDXB (BPF_LDX | BPF_B | BPF_MSH) /** bpf ldxb */ -/** Berkeley Packet Filter program for "udp and (port 546 or port 547 or port 67 or port 68)". +/** 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 546 or port 547 or port 67 or port 68)"` + * `tcpdump -dd "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 = 9, .k = 0x000086dd}, // (001) jeq #0x86dd jt 2 jf 11 - {.code = OP_LDB, .jt = 0, .jf = 0, .k = 0x00000014}, // (002) ldb [20] - {.code = OP_JEQ, .jt = 0, .jf = 24, .k = 0x00000011}, // (003) jeq #0x11 jt 4 jf 28 - {.code = OP_LDHA, .jt = 0, .jf = 0, .k = 0x00000036}, // (004) ldh [54] - {.code = OP_JEQ, .jt = 21, .jf = 0, .k = 0x00000222}, // (005) jeq #0x222 jt 27 jf 6 - {.code = OP_JEQ, .jt = 20, .jf = 0, .k = 0x00000223}, // (006) jeq #0x223 jt 27 jf 7 - {.code = OP_JEQ, .jt = 19, .jf = 0, .k = 0x00000043}, // (007) jeq #0x43 jt 27 jf 8 - {.code = OP_JEQ, .jt = 18, .jf = 0, .k = 0x00000044}, // (008) jeq #0x44 jt 27 jf 9 - {.code = OP_LDHA, .jt = 0, .jf = 0, .k = 0x00000038}, // (009) ldh [56] - {.code = OP_JEQ, .jt = 16, .jf = 13, .k = 0x00000222}, // (010) jeq #0x222 jt 27 jf 24 - {.code = OP_JEQ, .jt = 0, .jf = 16, .k = 0x00000800}, // (011) jeq #0x800 jt 12 jf 28 - {.code = OP_LDB, .jt = 0, .jf = 0, .k = 0x00000017}, // (012) ldb [23] - {.code = OP_JEQ, .jt = 0, .jf = 14, .k = 0x00000011}, // (013) jeq #0x11 jt 14 jf 28 - {.code = OP_LDHA, .jt = 0, .jf = 0, .k = 0x00000014}, // (014) ldh [20] - {.code = OP_JSET, .jt = 12, .jf = 0, .k = 0x00001fff}, // (015) jset #0x1fff jt 28 jf 16 - {.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 = 8, .jf = 0, .k = 0x00000222}, // (018) jeq #0x222 jt 27 jf 19 - {.code = OP_JEQ, .jt = 7, .jf = 0, .k = 0x00000223}, // (019) jeq #0x223 jt 27 jf 20 - {.code = OP_JEQ, .jt = 6, .jf = 0, .k = 0x00000043}, // (020) jeq #0x43 jt 27 jf 21 - {.code = OP_JEQ, .jt = 5, .jf = 0, .k = 0x00000044}, // (021) jeq #0x44 jt 27 jf 22 - {.code = OP_LDHI, .jt = 0, .jf = 0, .k = 0x00000010}, // (022) ldh [x + 16] - {.code = OP_JEQ, .jt = 3, .jf = 0, .k = 0x00000222}, // (023) jeq #0x222 jt 27 jf 24 - {.code = OP_JEQ, .jt = 2, .jf = 0, .k = 0x00000223}, // (024) jeq #0x223 jt 27 jf 25 - {.code = OP_JEQ, .jt = 1, .jf = 0, .k = 0x00000043}, // (025) jeq #0x43 jt 27 jf 26 - {.code = OP_JEQ, .jt = 0, .jf = 1, .k = 0x00000044}, // (026) jeq #0x44 jt 27 jf 28 - {.code = OP_RET, .jt = 0, .jf = 0, .k = 0x00040000}, // (027) ret #262144 - {.code = OP_RET, .jt = 0, .jf = 0, .k = 0x00000000}, // (028) ret + {.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 }; /** Filter program socket struct */ @@ -121,29 +89,16 @@ static struct sock_fprog dhcp_sock_bfp = { */ static dhcp_device_context_t aggregate_dev = {0}; -static dhcp_device_context_t *mgmt_intf = NULL; - -/** Monitored DHCPv4 message type */ -static dhcpv4_message_type_t v4_monitored_msgs[] = { - DHCPv4_MESSAGE_TYPE_DISCOVER, - DHCPv4_MESSAGE_TYPE_OFFER, - DHCPv4_MESSAGE_TYPE_REQUEST, - DHCPv4_MESSAGE_TYPE_ACK -}; - -/** Monitored DHCPv6 message type */ -static dhcpv6_message_type_t v6_monitored_msgs[] = { - DHCPv6_MESSAGE_TYPE_SOLICIT, - DHCPv6_MESSAGE_TYPE_ADVERTISE, - DHCPv6_MESSAGE_TYPE_REQUEST, - DHCPv6_MESSAGE_TYPE_REPLY +/** Monitored DHCP message type */ +static dhcp_message_type_t monitored_msgs[] = { + DHCP_MESSAGE_TYPE_DISCOVER, + DHCP_MESSAGE_TYPE_OFFER, + DHCP_MESSAGE_TYPE_REQUEST, + DHCP_MESSAGE_TYPE_ACK }; -/** Number of monitored DHCPv4 message type */ -static uint8_t v4_monitored_msg_sz = sizeof(v4_monitored_msgs) / sizeof(*v4_monitored_msgs); - -/** Number of monitored DHCPv6 message type */ -static uint8_t v6_monitored_msg_sz = sizeof(v6_monitored_msgs) / sizeof(*v6_monitored_msgs); +/** Number of monitored DHCP message type */ +static uint8_t monitored_msg_sz = sizeof(monitored_msgs) / sizeof(*monitored_msgs); /** * @code handle_dhcp_option_53(context, dhcp_option, dir, iphdr, dhcphdr); @@ -168,37 +123,27 @@ static void handle_dhcp_option_53(dhcp_device_context_t *context, switch (dhcp_option[2]) { // DHCP messages send by client - case DHCPv4_MESSAGE_TYPE_DISCOVER: - case DHCPv4_MESSAGE_TYPE_REQUEST: - case DHCPv4_MESSAGE_TYPE_DECLINE: - case DHCPv4_MESSAGE_TYPE_RELEASE: - case DHCPv4_MESSAGE_TYPE_INFORM: + case DHCP_MESSAGE_TYPE_DISCOVER: + case DHCP_MESSAGE_TYPE_REQUEST: + case DHCP_MESSAGE_TYPE_DECLINE: + case DHCP_MESSAGE_TYPE_RELEASE: + case DHCP_MESSAGE_TYPE_INFORM: giaddr = ntohl(dhcphdr[DHCP_GIADDR_OFFSET] << 24 | dhcphdr[DHCP_GIADDR_OFFSET + 1] << 16 | dhcphdr[DHCP_GIADDR_OFFSET + 2] << 8 | dhcphdr[DHCP_GIADDR_OFFSET + 3]); if ((context->giaddr_ip == giaddr && context->is_uplink && dir == DHCP_TX) || (!context->is_uplink && dir == DHCP_RX && iphdr->ip_dst.s_addr == INADDR_BROADCAST)) { - context->counters.v4counters[DHCP_COUNTERS_CURRENT][dir][dhcp_option[2]]++; - // If the packet recieved on the mgmt interface, we don't want to increment the aggregate device - if (context == mgmt_intf) - { - break; - } - aggregate_dev.counters.v4counters[DHCP_COUNTERS_CURRENT][dir][dhcp_option[2]]++; + context->counters[DHCP_COUNTERS_CURRENT][dir][dhcp_option[2]]++; + aggregate_dev.counters[DHCP_COUNTERS_CURRENT][dir][dhcp_option[2]]++; } break; // DHCP messages send by server - case DHCPv4_MESSAGE_TYPE_OFFER: - case DHCPv4_MESSAGE_TYPE_ACK: - case DHCPv4_MESSAGE_TYPE_NAK: + case DHCP_MESSAGE_TYPE_OFFER: + case DHCP_MESSAGE_TYPE_ACK: + case DHCP_MESSAGE_TYPE_NAK: if ((context->giaddr_ip == iphdr->ip_dst.s_addr && context->is_uplink && dir == DHCP_RX) || (!context->is_uplink && dir == DHCP_TX)) { - context->counters.v4counters[DHCP_COUNTERS_CURRENT][dir][dhcp_option[2]]++; - // If the packet recieved on the mgmt interface, we don't want to increment the aggregate device - if (context == mgmt_intf) - { - break; - } - aggregate_dev.counters.v4counters[DHCP_COUNTERS_CURRENT][dir][dhcp_option[2]]++; + context->counters[DHCP_COUNTERS_CURRENT][dir][dhcp_option[2]]++; + aggregate_dev.counters[DHCP_COUNTERS_CURRENT][dir][dhcp_option[2]]++; } break; default: @@ -207,48 +152,6 @@ static void handle_dhcp_option_53(dhcp_device_context_t *context, } } -/** - * @code handle_dhcpv6_option(context, dhcp_option, dir); - * - * @brief handle the logic related to DHCPv6 option - * - * @param context Device (interface) context - * @param dhcp_option pointer to DHCP option buffer space - * @param dir packet direction - * - * @return none - */ -static void handle_dhcpv6_option(dhcp_device_context_t *context, - const u_char dhcp_option, - dhcp_packet_direction_t dir) -{ - switch (dhcp_option) - { - 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_ADVERTISE: - case DHCPv6_MESSAGE_TYPE_REPLY: - case DHCPv6_MESSAGE_TYPE_RECONFIGURE: - case DHCPv6_MESSAGE_TYPE_INFORMATION_REQUEST: - context->counters.v6counters[DHCP_COUNTERS_CURRENT][dir][dhcp_option]++; - // If the packet recieved on the mgmt interface, we don't want to increment the aggregate device - if (context == mgmt_intf) - { - break; - } - aggregate_dev.counters.v6counters[DHCP_COUNTERS_CURRENT][dir][dhcp_option]++; - break; - default: - syslog(LOG_WARNING, "handle_dhcpv6_option(%s): Unknown DHCPv6 option type %d", context->intf, dhcp_option); - break; - } -} - /** * @code read_callback(fd, event, arg); * @@ -268,29 +171,16 @@ static void read_callback(int fd, short event, void *arg) while ((event == EV_READ) && ((buffer_sz = recv(fd, context->buffer, context->snaplen, MSG_DONTWAIT)) > 0)) { struct ether_header *ethhdr = (struct ether_header*) context->buffer; - struct ip *iphdr; - struct ip6_hdr *ipv6hdr; - struct udphdr *udp; - uint8_t *dhcphdr; - int dhcp_option_offset; - - bool is_ipv4 = (ntohs(ethhdr->ether_type) == ETHERTYPE_IP); - if (is_ipv4) { - iphdr = (struct ip*) (context->buffer + IP_START_OFFSET); - udp = (struct udphdr*) (context->buffer + UDPv4_START_OFFSET); - dhcphdr = context->buffer + DHCPv4_START_OFFSET; - dhcp_option_offset = DHCPv4_START_OFFSET + DHCPv4_OPTIONS_HEADER_SIZE; - } else { - ipv6hdr = (struct ip6_hdr*) (context->buffer + IP_START_OFFSET); - udp = (struct udphdr*) (context->buffer + UDPv6_START_OFFSET); - dhcphdr = context->buffer + DHCPv6_START_OFFSET; - dhcp_option_offset = DHCPv6_START_OFFSET; - } - if (is_ipv4 && dhcpv4_enabled && (buffer_sz > UDPv4_START_OFFSET + sizeof(struct udphdr) + DHCPv4_OPTIONS_HEADER_SIZE) && - (ntohs(udp->len) > DHCPv4_OPTIONS_HEADER_SIZE)) { - int dhcp_sz = ntohs(udp->len) < buffer_sz - UDPv4_START_OFFSET - sizeof(struct udphdr) ? - ntohs(udp->len) : buffer_sz - UDPv4_START_OFFSET - sizeof(struct udphdr); - int dhcp_option_sz = dhcp_sz - DHCPv4_OPTIONS_HEADER_SIZE; + 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 ((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] && @@ -324,37 +214,6 @@ static void read_callback(int fd, short event, void *arg) offset += dhcp_option[offset + 1] + 2; } } - } - else if (!is_ipv4 && dhcpv6_enabled && (buffer_sz > UDPv6_START_OFFSET + sizeof(struct udphdr) + DHCPv6_TYPE_LENGTH)) { - const u_char* dhcp_header = 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; - uint16_t option = 0; - uint16_t current_option_len = 0; - // Get to inner DHCP header from encapsulated RELAY_FORWARD or RELAY_REPLY header - while (dhcp_header[offset] == DHCPv6_MESSAGE_TYPE_RELAY_FORWARD || dhcp_header[offset] == DHCPv6_MESSAGE_TYPE_RELAY_REPLY) - { - // Get to DHCPv6_OPTION_RELAY_MSG from all options - offset += DHCPv6_RELAY_MSG_OPTIONS_OFFSET; - option = htons(*((uint16_t*)(&(dhcp_header[offset])))); - - while (option != DHCPv6_OPTION_RELAY_MSG) - { - // Add to offset the option length and get the next option ID - current_option_len = htons(*((uint16_t*)(&(dhcp_header[offset + DHCPv6_OPTION_LENGTH])))); - offset += DHCPv6_OPTION_LENGTH + DHCPv6_OPTION_LEN_LENGTH + current_option_len; - option = htons(*((uint16_t*)(&(dhcp_header[offset])))); - } - // Set the offset to DHCP-relay-message data - offset += DHCPv6_OPTION_LENGTH + DHCPv6_OPTION_LEN_LENGTH; - } - handle_dhcpv6_option(context, dhcp_header[offset], dir); } else { syslog(LOG_WARNING, "read_callback(%s): read length (%ld) is too small to capture DHCP options", context->intf, buffer_sz); @@ -363,73 +222,29 @@ static void read_callback(int fd, short event, void *arg) } /** - * @code dhcp_device_is_dhcp_inactive(v4counters, v6counters, type); + * @code dhcp_device_is_dhcp_inactive(counters); * * @brief Check if there were no DHCP activity * - * @param v4counters current/snapshot v4counter - * - * @param v6counters current/snapshot v6counter - * - * @param type DHCP type + * @param counters current/snapshot counter * * @return true if there were no DHCP activity, false otherwise */ -static bool dhcp_device_is_dhcp_inactive(uint64_t v4counters[][DHCP_DIR_COUNT][DHCPv4_MESSAGE_TYPE_COUNT], - uint64_t v6counters[][DHCP_DIR_COUNT][DHCPv6_MESSAGE_TYPE_COUNT], - dhcp_type_t type) +static bool dhcp_device_is_dhcp_inactive(uint64_t counters[][DHCP_DIR_COUNT][DHCP_MESSAGE_TYPE_COUNT]) { - bool rv = true; - uint64_t *rx_counters; - uint64_t *rx_counter_snapshot; - - switch (type) - { - case DHCPv4_TYPE: - rx_counters = v4counters[DHCP_COUNTERS_CURRENT][DHCP_RX]; - rx_counter_snapshot = v4counters[DHCP_COUNTERS_SNAPSHOT][DHCP_RX]; - for (uint8_t i = 0; (i < v4_monitored_msg_sz) && rv; i++) { - rv = rx_counters[v4_monitored_msgs[i]] == rx_counter_snapshot[v4_monitored_msgs[i]]; - } - break; - - case DHCPv6_TYPE: - rx_counters = v6counters[DHCP_COUNTERS_CURRENT][DHCP_RX]; - rx_counter_snapshot = v6counters[DHCP_COUNTERS_SNAPSHOT][DHCP_RX]; - for (uint8_t i = 0; (i < v6_monitored_msg_sz) && rv; i++) { - rv = rx_counters[v6_monitored_msgs[i]] == rx_counter_snapshot[v6_monitored_msgs[i]]; - } - break; + uint64_t *rx_counters = counters[DHCP_COUNTERS_CURRENT][DHCP_RX]; + uint64_t *rx_counter_snapshot = counters[DHCP_COUNTERS_SNAPSHOT][DHCP_RX]; - default: - syslog(LOG_ERR, "Unknown DHCP type %d\n", type); - break; + bool rv = true; + for (uint8_t i = 0; (i < monitored_msg_sz) && rv; i++) { + rv = rx_counters[monitored_msgs[i]] == rx_counter_snapshot[monitored_msgs[i]]; } return rv; } /** - * @code dhcp_device_is_dhcpv4_msg_unhealthy(type, counters); - * - * @brief Check if DHCP relay is functioning properly for message of type 'type'. - * For every rx of message 'type', there should be increment of the same message type. - * - * @param type DHCP message type - * @param counters current/snapshot counter - * - * @return true if DHCP message 'type' is transmitted,false otherwise - */ -static bool dhcp_device_is_dhcpv4_msg_unhealthy(dhcpv4_message_type_t type, - uint64_t v4counters[][DHCP_DIR_COUNT][DHCPv4_MESSAGE_TYPE_COUNT]) -{ - // check if DHCP message 'type' is being relayed - return ((v4counters[DHCP_COUNTERS_CURRENT][DHCP_RX][type] > v4counters[DHCP_COUNTERS_SNAPSHOT][DHCP_RX][type]) && - (v4counters[DHCP_COUNTERS_CURRENT][DHCP_TX][type] <= v4counters[DHCP_COUNTERS_SNAPSHOT][DHCP_TX][type]) ); -} - -/** - * @code dhcp_device_is_dhcpv6_msg_unhealthy(type, counters); + * @code dhcp_device_is_dhcp_msg_unhealthy(type, counters); * * @brief Check if DHCP relay is functioning properly for message of type 'type'. * For every rx of message 'type', there should be increment of the same message type. @@ -439,57 +254,34 @@ static bool dhcp_device_is_dhcpv4_msg_unhealthy(dhcpv4_message_type_t type, * * @return true if DHCP message 'type' is transmitted,false otherwise */ -static bool dhcp_device_is_dhcpv6_msg_unhealthy(dhcpv6_message_type_t type, - uint64_t v6counters[][DHCP_DIR_COUNT][DHCPv6_MESSAGE_TYPE_COUNT]) +static bool dhcp_device_is_dhcp_msg_unhealthy(dhcp_message_type_t type, + uint64_t counters[][DHCP_DIR_COUNT][DHCP_MESSAGE_TYPE_COUNT]) { // check if DHCP message 'type' is being relayed - return ((v6counters[DHCP_COUNTERS_CURRENT][DHCP_RX][type] > v6counters[DHCP_COUNTERS_SNAPSHOT][DHCP_RX][type]) && - (v6counters[DHCP_COUNTERS_CURRENT][DHCP_TX][type] <= v6counters[DHCP_COUNTERS_SNAPSHOT][DHCP_TX][type]) ); + return ((counters[DHCP_COUNTERS_CURRENT][DHCP_RX][type] > counters[DHCP_COUNTERS_SNAPSHOT][DHCP_RX][type]) && + (counters[DHCP_COUNTERS_CURRENT][DHCP_TX][type] <= counters[DHCP_COUNTERS_SNAPSHOT][DHCP_TX][type]) ); } /** - * @code dhcp_device_check_positive_health(v4counters, v6counters, type); + * @code dhcp_device_check_positive_health(counters, counters_snapshot); * - * @brief Check if DHCPv4/6 relay is functioning properly for monitored messages. - * DHCPv4 (Discover, Offer, Request, ACK.) and DHCPv6 (Solicit, Advertise, Request, Reply). + * @brief Check if DHCP relay is functioning properly for monitored messages (Discover, Offer, Request, ACK.) * For every rx of monitored messages, there should be increment of the same message type. * - * @param v4counters current/snapshot counter - * - * @param v6counters current/snapshot counter - * - * @param type DHCP type + * @param counters current/snapshot counter * * @return DHCP_MON_STATUS_HEALTHY, DHCP_MON_STATUS_UNHEALTHY, or DHCP_MON_STATUS_INDETERMINATE */ -static dhcp_mon_status_t dhcp_device_check_positive_health(uint64_t v4counters[][DHCP_DIR_COUNT][DHCPv4_MESSAGE_TYPE_COUNT], - uint64_t v6counters[][DHCP_DIR_COUNT][DHCPv6_MESSAGE_TYPE_COUNT], - dhcp_type_t type) +static dhcp_mon_status_t dhcp_device_check_positive_health(uint64_t counters[][DHCP_DIR_COUNT][DHCP_MESSAGE_TYPE_COUNT]) { dhcp_mon_status_t rv = DHCP_MON_STATUS_HEALTHY; bool is_dhcp_unhealthy = false; - - switch (type) - { - case DHCPv4_TYPE: - for (uint8_t i = 0; (i < v4_monitored_msg_sz) && !is_dhcp_unhealthy; i++) { - is_dhcp_unhealthy = dhcp_device_is_dhcpv4_msg_unhealthy(v4_monitored_msgs[i], v4counters); - } - break; - - case DHCPv6_TYPE: - for (uint8_t i = 0; (i < v6_monitored_msg_sz) && !is_dhcp_unhealthy; i++) { - is_dhcp_unhealthy = dhcp_device_is_dhcpv6_msg_unhealthy(v6_monitored_msgs[i], v6counters); - } - break; - - default: - syslog(LOG_ERR, "Unknown DHCP type %d\n", type); - break; + for (uint8_t i = 0; (i < monitored_msg_sz) && !is_dhcp_unhealthy; i++) { + is_dhcp_unhealthy = dhcp_device_is_dhcp_msg_unhealthy(monitored_msgs[i], counters); } - // if we have rx DORA/SARR then we should have corresponding tx DORA/SARR (DORA/SARR being relayed) + // if we have rx DORA then we should have corresponding tx DORA (DORA being relayed) if (is_dhcp_unhealthy) { rv = DHCP_MON_STATUS_UNHEALTHY; } @@ -498,47 +290,27 @@ static dhcp_mon_status_t dhcp_device_check_positive_health(uint64_t v4counters[] } /** - * @code dhcp_device_check_negative_health(v4counters, v6counters, type); + * @code dhcp_device_check_negative_health(counters); * * @brief Check that DHCP relayed messages are not being transmitted out of this interface/dev * using its counters. The interface is negatively healthy if there are not DHCP message * travelling through it. * - * @param v4counters current/snapshot counter - * @param v6counters current/snapshot counter - * @param type DHCP type + * @param counters recent interface counter + * @param counters_snapshot snapshot counters * * @return DHCP_MON_STATUS_HEALTHY, DHCP_MON_STATUS_UNHEALTHY, or DHCP_MON_STATUS_INDETERMINATE */ -static dhcp_mon_status_t dhcp_device_check_negative_health(uint64_t v4counters[][DHCP_DIR_COUNT][DHCPv4_MESSAGE_TYPE_COUNT], - uint64_t v6counters[][DHCP_DIR_COUNT][DHCPv6_MESSAGE_TYPE_COUNT], - dhcp_type_t type) +static dhcp_mon_status_t dhcp_device_check_negative_health(uint64_t counters[][DHCP_DIR_COUNT][DHCP_MESSAGE_TYPE_COUNT]) { dhcp_mon_status_t rv = DHCP_MON_STATUS_HEALTHY; - bool is_dhcp_unhealthy = false; - uint64_t *tx_counters; - uint64_t *tx_counter_snapshot; + uint64_t *tx_counters = counters[DHCP_COUNTERS_CURRENT][DHCP_TX]; + uint64_t *tx_counter_snapshot = counters[DHCP_COUNTERS_SNAPSHOT][DHCP_TX]; - switch (type) - { - case DHCPv4_TYPE: - tx_counters = v4counters[DHCP_COUNTERS_CURRENT][DHCP_TX]; - tx_counter_snapshot = v4counters[DHCP_COUNTERS_SNAPSHOT][DHCP_TX]; - for (uint8_t i = 0; (i < v4_monitored_msg_sz) && !is_dhcp_unhealthy; i++) { - is_dhcp_unhealthy = tx_counters[v4_monitored_msgs[i]] > tx_counter_snapshot[v4_monitored_msgs[i]]; - } - break; - case DHCPv6_TYPE: - tx_counters = v6counters[DHCP_COUNTERS_CURRENT][DHCP_TX]; - tx_counter_snapshot = v6counters[DHCP_COUNTERS_SNAPSHOT][DHCP_TX]; - for (uint8_t i = 0; (i < v6_monitored_msg_sz) && !is_dhcp_unhealthy; i++) { - is_dhcp_unhealthy = tx_counters[v6_monitored_msgs[i]] > tx_counter_snapshot[v6_monitored_msgs[i]]; - } - break; - default: - syslog(LOG_ERR, "Unknown DHCP type %d\n", type); - break; + bool is_dhcp_unhealthy = false; + for (uint8_t i = 0; (i < monitored_msg_sz) && !is_dhcp_unhealthy; i++) { + is_dhcp_unhealthy = tx_counters[monitored_msgs[i]] > tx_counter_snapshot[monitored_msgs[i]]; } // for negative validation, return unhealthy if DHCP packet are being @@ -551,7 +323,7 @@ static dhcp_mon_status_t dhcp_device_check_negative_health(uint64_t v4counters[] } /** - * @code dhcp_device_check_health(check_type, v4counters, v6counters, type); + * @code dhcp_device_check_health(check_type, counters, counters_snapshot); * * @brief Check that DHCP relay is functioning properly given a check type. Positive check * indicates for every rx of DHCP message of type 'type', there would increment of @@ -560,80 +332,59 @@ static dhcp_mon_status_t dhcp_device_check_negative_health(uint64_t v4counters[] * considered unhealthy. * * @param check_type type of health check - * @param v4counters current/snapshot counters - * @param v6counters current/snapshot counters - * @param type DHCP type + * @param counters current/snapshot counter * * @return DHCP_MON_STATUS_HEALTHY, DHCP_MON_STATUS_UNHEALTHY, or DHCP_MON_STATUS_INDETERMINATE */ static dhcp_mon_status_t dhcp_device_check_health(dhcp_mon_check_t check_type, - uint64_t v4counters[][DHCP_DIR_COUNT][DHCPv4_MESSAGE_TYPE_COUNT], - uint64_t v6counters[][DHCP_DIR_COUNT][DHCPv6_MESSAGE_TYPE_COUNT], - dhcp_type_t type) + uint64_t counters[][DHCP_DIR_COUNT][DHCP_MESSAGE_TYPE_COUNT]) { dhcp_mon_status_t rv = DHCP_MON_STATUS_HEALTHY; - if (dhcp_device_is_dhcp_inactive(v4counters, v6counters, type)) { + if (dhcp_device_is_dhcp_inactive(aggregate_dev.counters)) { rv = DHCP_MON_STATUS_INDETERMINATE; } else if (check_type == DHCP_MON_CHECK_POSITIVE) { - rv = dhcp_device_check_positive_health(v4counters, v6counters, type); + rv = dhcp_device_check_positive_health(counters); } else if (check_type == DHCP_MON_CHECK_NEGATIVE) { - rv = dhcp_device_check_negative_health(v4counters, v6counters, type); + rv = dhcp_device_check_negative_health(counters); } return rv; } /** - * @code dhcp_print_counters(vlan_intf, type, v4counters, v6counters); + * @code dhcp_print_counters(vlan_intf, type, counters); * * @brief prints DHCP counters to sylsog. * - * @param vlan_intf vlan interface name - * @param type counter type - * @param v4counters interface counter - * @param v6counters interface counter + * @param vlan_intf vlan interface name + * @param type counter type + * @param counters interface counter * * @return none */ static void dhcp_print_counters(const char *vlan_intf, dhcp_counters_type_t type, - uint64_t v4counters[][DHCPv4_MESSAGE_TYPE_COUNT], - uint64_t v6counters[][DHCPv6_MESSAGE_TYPE_COUNT]) + uint64_t counters[][DHCP_MESSAGE_TYPE_COUNT]) { - static const char *v4_counter_desc[DHCP_COUNTERS_COUNT] = { - [DHCP_COUNTERS_CURRENT] = " Current", - [DHCP_COUNTERS_SNAPSHOT] = "Snapshot" - }; - static const char *v6_counter_desc[DHCP_COUNTERS_COUNT] = { + static const char *counter_desc[DHCP_COUNTERS_COUNT] = { [DHCP_COUNTERS_CURRENT] = " Current", [DHCP_COUNTERS_SNAPSHOT] = "Snapshot" }; syslog( LOG_NOTICE, - "DHCPv4 [%*s-%*s rx/tx] Discover: %*lu/%*lu, Offer: %*lu/%*lu, Request: %*lu/%*lu, ACK: %*lu/%*lu\n\ - DHCPv6 [%*s-%*s rx/tx] Solicit: %*lu/%*lu, Advertise: %*lu/%*lu, Request: %*lu/%*lu, Reply: %*lu/%*lu\n", + "[%*s-%*s rx/tx] Discover: %*lu/%*lu, Offer: %*lu/%*lu, Request: %*lu/%*lu, ACK: %*lu/%*lu\n", IF_NAMESIZE, vlan_intf, - (int) strlen(v4_counter_desc[type]), v4_counter_desc[type], - DHCP_COUNTER_WIDTH, v4counters[DHCP_RX][DHCPv4_MESSAGE_TYPE_DISCOVER], - DHCP_COUNTER_WIDTH, v4counters[DHCP_TX][DHCPv4_MESSAGE_TYPE_DISCOVER], - DHCP_COUNTER_WIDTH, v4counters[DHCP_RX][DHCPv4_MESSAGE_TYPE_OFFER], - DHCP_COUNTER_WIDTH, v4counters[DHCP_TX][DHCPv4_MESSAGE_TYPE_OFFER], - DHCP_COUNTER_WIDTH, v4counters[DHCP_RX][DHCPv4_MESSAGE_TYPE_REQUEST], - DHCP_COUNTER_WIDTH, v4counters[DHCP_TX][DHCPv4_MESSAGE_TYPE_REQUEST], - DHCP_COUNTER_WIDTH, v4counters[DHCP_RX][DHCPv4_MESSAGE_TYPE_ACK], - DHCP_COUNTER_WIDTH, v4counters[DHCP_TX][DHCPv4_MESSAGE_TYPE_ACK], - IF_NAMESIZE, vlan_intf, - (int) strlen(v6_counter_desc[type]), v6_counter_desc[type], - DHCP_COUNTER_WIDTH, v6counters[DHCP_RX][DHCPv6_MESSAGE_TYPE_SOLICIT], - DHCP_COUNTER_WIDTH, v6counters[DHCP_TX][DHCPv6_MESSAGE_TYPE_SOLICIT], - DHCP_COUNTER_WIDTH, v6counters[DHCP_RX][DHCPv6_MESSAGE_TYPE_ADVERTISE], - DHCP_COUNTER_WIDTH, v6counters[DHCP_TX][DHCPv6_MESSAGE_TYPE_ADVERTISE], - DHCP_COUNTER_WIDTH, v6counters[DHCP_RX][DHCPv6_MESSAGE_TYPE_REQUEST], - DHCP_COUNTER_WIDTH, v6counters[DHCP_TX][DHCPv6_MESSAGE_TYPE_REQUEST], - DHCP_COUNTER_WIDTH, v6counters[DHCP_RX][DHCPv6_MESSAGE_TYPE_REPLY], - DHCP_COUNTER_WIDTH, v6counters[DHCP_TX][DHCPv6_MESSAGE_TYPE_REPLY] + (int) strlen(counter_desc[type]), counter_desc[type], + DHCP_COUNTER_WIDTH, counters[DHCP_RX][DHCP_MESSAGE_TYPE_DISCOVER], + DHCP_COUNTER_WIDTH, counters[DHCP_TX][DHCP_MESSAGE_TYPE_DISCOVER], + DHCP_COUNTER_WIDTH, counters[DHCP_RX][DHCP_MESSAGE_TYPE_OFFER], + DHCP_COUNTER_WIDTH, counters[DHCP_TX][DHCP_MESSAGE_TYPE_OFFER], + DHCP_COUNTER_WIDTH, counters[DHCP_RX][DHCP_MESSAGE_TYPE_REQUEST], + DHCP_COUNTER_WIDTH, counters[DHCP_TX][DHCP_MESSAGE_TYPE_REQUEST], + DHCP_COUNTER_WIDTH, counters[DHCP_RX][DHCP_MESSAGE_TYPE_ACK], + DHCP_COUNTER_WIDTH, counters[DHCP_TX][DHCP_MESSAGE_TYPE_ACK] ); } @@ -703,12 +454,12 @@ int initialize_intf_mac_and_ip_addr(dhcp_device_context_t *context) strncpy(ifr.ifr_name, context->intf, sizeof(ifr.ifr_name) - 1); ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = '\0'; - // Get v4 network address + // Get network address if (ioctl(fd, SIOCGIFADDR, &ifr) == -1) { syslog(LOG_ALERT, "ioctl: %s", explain_ioctl(fd, SIOCGIFADDR, &ifr)); break; } - context->ipv4 = ((struct sockaddr_in*) &ifr.ifr_addr)->sin_addr.s_addr; + context->ip = ((struct sockaddr_in*) &ifr.ifr_addr)->sin_addr.s_addr; // Get mac address if (ioctl(fd, SIOCGIFHWADDR, &ifr) == -1) { @@ -719,30 +470,6 @@ int initialize_intf_mac_and_ip_addr(dhcp_device_context_t *context) close(fd); - // Get v6 network address - memset(&context->ipv6, 0, sizeof(context->ipv6)); - struct ifaddrs *ifa, *ifa_tmp; - - if (getifaddrs(&ifa) == -1) { - syslog(LOG_ALERT, "getifaddrs failed"); - break; - } - - ifa_tmp = ifa; - while (ifa_tmp) { - // Check if current interface has a valid IPv6 address (not link local address) - if ((strncmp(ifa_tmp->ifa_name, context->intf, sizeof(context->intf)) == 0) && - (ifa_tmp->ifa_addr) && - (ifa_tmp->ifa_addr->sa_family == AF_INET6) && - (((struct sockaddr_in6*)(ifa_tmp->ifa_addr))->sin6_addr.__in6_u.__u6_addr16[0] != IPV6_LINK_LOCAL_PREFIX)) { - - struct sockaddr_in6 *in6 = (struct sockaddr_in6*) ifa_tmp->ifa_addr; - memcpy(&context->ipv6, &in6->sin6_addr, sizeof(context->ipv6)); - } - ifa_tmp = ifa_tmp->ifa_next; - } - freeifaddrs(ifa); - rv = 0; } while (0); @@ -750,41 +477,20 @@ int initialize_intf_mac_and_ip_addr(dhcp_device_context_t *context) } /** - * @code dhcp_device_get_ipv4(context); + * @code dhcp_device_get_ip(context); * * @brief Accessor method * * @param context pointer to device (interface) context * - * @return interface IPv4 + * @return interface IP */ -int dhcp_device_get_ipv4(dhcp_device_context_t *context, in_addr_t *ip) +int dhcp_device_get_ip(dhcp_device_context_t *context, in_addr_t *ip) { int rv = -1; if (context != NULL && ip != NULL) { - *ip = context->ipv4; - rv = 0; - } - - return rv; -} - -/** - * @code dhcp_device_get_ipv6(context); - * - * @brief Accessor method - * - * @param context pointer to device (interface) context - * - * @return interface IPv6 - */ -int dhcp_device_get_ipv6(dhcp_device_context_t *context, struct in6_addr *ip) -{ - int rv = -1; - - if (context != NULL && ip != NULL) { - *ip = context->ipv6; + *ip = context->ip; rv = 0; } @@ -822,8 +528,7 @@ int dhcp_device_init(dhcp_device_context_t **context, const char *intf, uint8_t dev_context->is_uplink = is_uplink; - memset(dev_context->counters.v4counters, 0, sizeof(dev_context->counters.v4counters)); - memset(dev_context->counters.v6counters, 0, sizeof(dev_context->counters.v6counters)); + memset(dev_context->counters, 0, sizeof(dev_context->counters)); *context = dev_context; rv = 0; @@ -838,15 +543,14 @@ int dhcp_device_init(dhcp_device_context_t **context, const char *intf, uint8_t } /** - * @code dhcp_device_start_capture(context, snaplen, base, giaddr_ip, v6_vlan_ip); + * @code dhcp_device_start_capture(context, snaplen, base, giaddr_ip); * * @brief starts packet capture on this interface */ int dhcp_device_start_capture(dhcp_device_context_t *context, size_t snaplen, struct event_base *base, - in_addr_t giaddr_ip, - struct in6_addr v6_vlan_ip) + in_addr_t giaddr_ip) { int rv = -1; @@ -856,20 +560,12 @@ int dhcp_device_start_capture(dhcp_device_context_t *context, break; } - // snaplen check for DHCPv4 size - if (dhcpv4_enabled && snaplen < UDPv4_START_OFFSET + sizeof(struct udphdr) + DHCPv4_OPTIONS_HEADER_SIZE) { - syslog(LOG_ALERT, "dhcp_device_start_capture(%s): snap length is too low to capture DHCPv4 options", context->intf); - break; - } - - // snaplen check for DHCPv6 size - DHCPv6 message type is the first byte of the udp payload - if (dhcpv6_enabled && snaplen < DHCPv6_START_OFFSET + 1) { - syslog(LOG_ALERT, "dhcp_device_start_capture(%s): snap length is too low to capture DHCPv6 option", context->intf); + if (snaplen < UDP_START_OFFSET + sizeof(struct udphdr) + DHCP_OPTIONS_HEADER_SIZE) { + syslog(LOG_ALERT, "dhcp_device_start_capture(%s): snap length is too low to capture DHCP options", context->intf); break; } context->giaddr_ip = giaddr_ip; - context->v6_vlan_ip = v6_vlan_ip; context->buffer = (uint8_t *) malloc(snaplen); if (context->buffer == NULL) { @@ -907,17 +603,17 @@ void dhcp_device_shutdown(dhcp_device_context_t *context) } /** - * @code dhcp_device_get_status(check_type, context, type); + * @code dhcp_device_get_status(check_type, context); * * @brief collects DHCP relay status info for a given interface. If context is null, it will report aggregate * status */ -dhcp_mon_status_t dhcp_device_get_status(dhcp_mon_check_t check_type, dhcp_device_context_t *context, dhcp_type_t type) +dhcp_mon_status_t dhcp_device_get_status(dhcp_mon_check_t check_type, dhcp_device_context_t *context) { dhcp_mon_status_t rv = DHCP_MON_STATUS_HEALTHY; if (context != NULL) { - rv = dhcp_device_check_health(check_type, context->counters.v4counters, context->counters.v6counters, type); + rv = dhcp_device_check_health(check_type, context->counters); } return rv; @@ -931,17 +627,9 @@ dhcp_mon_status_t dhcp_device_get_status(dhcp_mon_check_t check_type, dhcp_devic void dhcp_device_update_snapshot(dhcp_device_context_t *context) { if (context != NULL) { - if (dhcpv4_enabled) { - memcpy(context->counters.v4counters[DHCP_COUNTERS_SNAPSHOT], - context->counters.v4counters[DHCP_COUNTERS_CURRENT], - sizeof(context->counters.v4counters[DHCP_COUNTERS_SNAPSHOT])); - } - - if (dhcpv6_enabled) { - memcpy(context->counters.v6counters[DHCP_COUNTERS_SNAPSHOT], - context->counters.v6counters[DHCP_COUNTERS_CURRENT], - sizeof(context->counters.v6counters[DHCP_COUNTERS_SNAPSHOT])); - } + memcpy(context->counters[DHCP_COUNTERS_SNAPSHOT], + context->counters[DHCP_COUNTERS_CURRENT], + sizeof(context->counters[DHCP_COUNTERS_SNAPSHOT])); } } @@ -953,27 +641,6 @@ void dhcp_device_update_snapshot(dhcp_device_context_t *context) void dhcp_device_print_status(dhcp_device_context_t *context, dhcp_counters_type_t type) { if (context != NULL) { - dhcp_print_counters(context->intf, type, context->counters.v4counters[type], context->counters.v6counters[type]); + dhcp_print_counters(context->intf, type, context->counters[type]); } } - -/** - * @code dhcp_device_active_types(dhcpv4, dhcpv6); - * - * @brief update local variables with active protocols - */ -void dhcp_device_active_types(bool dhcpv4, bool dhcpv6) -{ - dhcpv4_enabled = dhcpv4; - dhcpv6_enabled = dhcpv6; -} - -/** - * @code dhcp_device_init_mgmt_intf(mgmt_intf_context); - * - * @brief assign context address of mgmt interface - */ -void dhcp_device_init_mgmt_intf(dhcp_device_context_t *mgmt_intf_context) -{ - mgmt_intf = mgmt_intf_context; -} diff --git a/src/dhcpmon/src/dhcp_device.h b/src/dhcpmon/src/dhcp_device.h index 433eb0907626..aa686f4e2718 100644 --- a/src/dhcpmon/src/dhcp_device.h +++ b/src/dhcpmon/src/dhcp_device.h @@ -18,43 +18,21 @@ /** - * DHCPv4 message types + * DHCP message types **/ typedef enum { - DHCPv4_MESSAGE_TYPE_DISCOVER = 1, - DHCPv4_MESSAGE_TYPE_OFFER = 2, - DHCPv4_MESSAGE_TYPE_REQUEST = 3, - DHCPv4_MESSAGE_TYPE_DECLINE = 4, - DHCPv4_MESSAGE_TYPE_ACK = 5, - DHCPv4_MESSAGE_TYPE_NAK = 6, - DHCPv4_MESSAGE_TYPE_RELEASE = 7, - DHCPv4_MESSAGE_TYPE_INFORM = 8, - - DHCPv4_MESSAGE_TYPE_COUNT -} dhcpv4_message_type_t; - -/** - * DHCPv6 message types - **/ -typedef enum -{ - 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_FORWARD = 12, - DHCPv6_MESSAGE_TYPE_RELAY_REPLY = 13, - - DHCPv6_MESSAGE_TYPE_COUNT -} dhcpv6_message_type_t; + DHCP_MESSAGE_TYPE_DISCOVER = 1, + DHCP_MESSAGE_TYPE_OFFER = 2, + DHCP_MESSAGE_TYPE_REQUEST = 3, + DHCP_MESSAGE_TYPE_DECLINE = 4, + DHCP_MESSAGE_TYPE_ACK = 5, + DHCP_MESSAGE_TYPE_NAK = 6, + DHCP_MESSAGE_TYPE_RELEASE = 7, + DHCP_MESSAGE_TYPE_INFORM = 8, + + DHCP_MESSAGE_TYPE_COUNT +} dhcp_message_type_t; /** packet direction */ typedef enum @@ -82,13 +60,6 @@ typedef enum DHCP_MON_STATUS_INDETERMINATE, /** DHCP relay health could not be determined */ } dhcp_mon_status_t; -/** dhcp type */ -typedef enum -{ - DHCPv4_TYPE, - DHCPv6_TYPE, -} dhcp_type_t; - /** dhcp check type */ typedef enum { @@ -96,28 +67,19 @@ typedef enum DHCP_MON_CHECK_POSITIVE, /** Validate that received DORA packets are relayed */ } dhcp_mon_check_t; -typedef struct -{ - uint64_t v4counters[DHCP_COUNTERS_COUNT][DHCP_DIR_COUNT][DHCPv4_MESSAGE_TYPE_COUNT]; - /** current/snapshot counters of DHCPv4 packets */ - uint64_t v6counters[DHCP_COUNTERS_COUNT][DHCP_DIR_COUNT][DHCPv6_MESSAGE_TYPE_COUNT]; - /** current/snapshot counters of DHCPv6 packets */ -} counters_t; - /** DHCP device (interface) context */ typedef struct { int sock; /** Raw socket associated with this device/interface */ - in_addr_t ipv4; /** ipv4 network address of this device (interface) */ - struct in6_addr ipv6; /** ipv6 network address of this device (interface) */ + in_addr_t ip; /** network address of this device (interface) */ uint8_t mac[ETHER_ADDR_LEN]; /** hardware address of this device (interface) */ - in_addr_t giaddr_ip; /** Gateway IPv4 address */ - struct in6_addr v6_vlan_ip; /** Vlan IPv6 address */ + in_addr_t giaddr_ip; /** Gateway IP address */ uint8_t is_uplink; /** north interface? */ char intf[IF_NAMESIZE]; /** device (interface) name */ uint8_t *buffer; /** buffer used to read socket data */ size_t snaplen; /** snap length or buffer size */ - counters_t counters; /** counters for DHCPv4/6 packets */ + uint64_t counters[DHCP_COUNTERS_COUNT][DHCP_DIR_COUNT][DHCP_MESSAGE_TYPE_COUNT]; + /** current/snapshot counters of DHCP packets */ } dhcp_device_context_t; /** @@ -132,28 +94,16 @@ typedef struct int initialize_intf_mac_and_ip_addr(dhcp_device_context_t *context); /** - * @code dhcp_device_get_ipv4(context, ip); + * @code dhcp_device_get_ip(context, ip); * * @brief Accessor method * * @param context pointer to device (interface) context - * @param ip(out) pointer to device IPv4 + * @param ip(out) pointer to device IP * * @return 0 on success, otherwise for failure */ -int dhcp_device_get_ipv4(dhcp_device_context_t *context, in_addr_t *ip); - -/** - * @code dhcp_device_get_ipv6(context, ip); - * - * @brief Accessor method - * - * @param context pointer to device (interface) context - * @param ip(out) pointer to device IPv6 - * - * @return 0 on success, otherwise for failure - */ -int dhcp_device_get_ipv6(dhcp_device_context_t *context, struct in6_addr *ip); +int dhcp_device_get_ip(dhcp_device_context_t *context, in_addr_t *ip); /** * @code dhcp_device_get_aggregate_context(); @@ -180,7 +130,7 @@ int dhcp_device_init(dhcp_device_context_t **context, uint8_t is_uplink); /** - * @code dhcp_device_start_capture(context, snaplen, base, giaddr_ip, v6_vlan_ip); + * @code dhcp_device_start_capture(context, snaplen, base, giaddr_ip); * * @brief starts packet capture on this interface * @@ -188,15 +138,13 @@ int dhcp_device_init(dhcp_device_context_t **context, * @param snaplen length of packet capture * @param base pointer to libevent base * @param giaddr_ip gateway IP address - * @param v6_vlan_ip vlan IPv6 address * * @return 0 on success, otherwise for failure */ int dhcp_device_start_capture(dhcp_device_context_t *context, size_t snaplen, struct event_base *base, - in_addr_t giaddr_ip, - struct in6_addr v6_vlan_ip); + in_addr_t giaddr_ip); /** * @code dhcp_device_shutdown(context); @@ -210,18 +158,17 @@ int dhcp_device_start_capture(dhcp_device_context_t *context, void dhcp_device_shutdown(dhcp_device_context_t *context); /** - * @code dhcp_device_get_status(check_type, context, type); + * @code dhcp_device_get_status(check_type, context); * * @brief collects DHCP relay status info for a given interface. If context is null, it will report aggregate * status * * @param check_type Type of validation * @param context Device (interface) context - * @param type DHCP type * * @return DHCP_MON_STATUS_HEALTHY, DHCP_MON_STATUS_UNHEALTHY, or DHCP_MON_STATUS_INDETERMINATE */ -dhcp_mon_status_t dhcp_device_get_status(dhcp_mon_check_t check_type, dhcp_device_context_t *context, dhcp_type_t type); +dhcp_mon_status_t dhcp_device_get_status(dhcp_mon_check_t check_type, dhcp_device_context_t *context); /** * @code dhcp_device_update_snapshot(context); @@ -238,32 +185,10 @@ void dhcp_device_update_snapshot(dhcp_device_context_t *context); * @brief prints status counters to syslog. If context is null, it will print aggregate status * * @param context Device (interface) context - * @param type Counter type to be printed + * @param counters_type Counter type to be printed * * @return none */ void dhcp_device_print_status(dhcp_device_context_t *context, dhcp_counters_type_t type); -/** - * @code dhcp_device_active_types(dhcpv4, dhcpv6); - * - * @brief update local variables with active protocols - * - * @param dhcpv4 DHCPv4 enable flag - * @param dhcpv6 DHCPv6 enable flag - * - * @return none - */ -void dhcp_device_active_types(bool dhcpv4, bool dhcpv6); - -/** - * @code dhcp_device_init_mgmt_intf(mgmt_intf_context); - * - * @brief assign context address of mgmt interface - * - * @param mgmt_intf_context MGMT interface context struct address - * - * @return none - */ -void dhcp_device_init_mgmt_intf(dhcp_device_context_t *mgmt_intf_context); #endif /* DHCP_DEVICE_H_ */ diff --git a/src/dhcpmon/src/dhcp_devman.c b/src/dhcpmon/src/dhcp_devman.c index b36d926c1d5b..65484798dbd6 100644 --- a/src/dhcpmon/src/dhcp_devman.c +++ b/src/dhcpmon/src/dhcp_devman.c @@ -9,8 +9,6 @@ #include #include #include -#include -#include #include "dhcp_devman.h" @@ -37,8 +35,7 @@ static uint32_t dhcp_num_mgmt_intf = 0; /** On Device vlan interface IP address corresponding vlan downlink IP * This IP is used to filter Offer/Ack packet coming from DHCP server */ -static in_addr_t v4_vlan_ip = 0; -static struct in6_addr v6_vlan_ip = {0}; +static in_addr_t vlan_ip = 0; /* Device loopback interface ip, which will be used as the giaddr in dual tor setup. */ static in_addr_t loopback_ip = 0; @@ -139,8 +136,7 @@ int dhcp_devman_add_intf(const char *name, char intf_type) rv = dhcp_device_init(&dev->dev_context, dev->name, dev->is_uplink); if (rv == 0 && intf_type == 'd') { - rv = dhcp_device_get_ipv4(dev->dev_context, &v4_vlan_ip); - rv = dhcp_device_get_ipv6(dev->dev_context, &v6_vlan_ip); + rv = dhcp_device_get_ip(dev->dev_context, &vlan_ip); dhcp_device_context_t *agg_dev = dhcp_device_get_aggregate_context(); @@ -148,9 +144,6 @@ int dhcp_devman_add_intf(const char *name, char intf_type) strncpy(agg_dev->intf + sizeof(AGG_DEV_PREFIX) - 1, name, sizeof(agg_dev->intf) - sizeof(AGG_DEV_PREFIX)); agg_dev->intf[sizeof(agg_dev->intf) - 1] = '\0'; } - else if (rv == 0 && intf_type == 'm') { - dhcp_device_init_mgmt_intf(dev->dev_context); - } LIST_INSERT_HEAD(&intfs, dev, entry); } @@ -181,7 +174,7 @@ int dhcp_devman_setup_dual_tor_mode(const char *name) } if (initialize_intf_mac_and_ip_addr(&loopback_intf_context) == 0 && - dhcp_device_get_ipv4(&loopback_intf_context, &loopback_ip) == 0) { + dhcp_device_get_ip(&loopback_intf_context, &loopback_ip) == 0) { dual_tor_mode = 1; } else { syslog(LOG_ALERT, "failed to retrieve ip addr for loopback interface (%s)", name); @@ -204,13 +197,11 @@ int dhcp_devman_start_capture(size_t snaplen, struct event_base *base) if ((dhcp_num_south_intf == 1) && (dhcp_num_north_intf >= 1)) { LIST_FOREACH(int_ptr, &intfs, entry) { - rv = dhcp_device_start_capture(int_ptr->dev_context, snaplen, base, dual_tor_mode ? loopback_ip : v4_vlan_ip, v6_vlan_ip); + rv = dhcp_device_start_capture(int_ptr->dev_context, snaplen, base, dual_tor_mode ? loopback_ip : vlan_ip); if (rv == 0) { - char ipv6_addr[INET6_ADDRSTRLEN]; - inet_ntop(AF_INET6, &int_ptr->dev_context->ipv6, ipv6_addr, sizeof(ipv6_addr)); syslog(LOG_INFO, - "Capturing DHCP packets on interface %s, ipv4: 0x%08x, ipv6: %s, mac [%02x:%02x:%02x:%02x:%02x:%02x] \n", - int_ptr->name, int_ptr->dev_context->ipv4, ipv6_addr, int_ptr->dev_context->mac[0], + "Capturing DHCP packets on interface %s, ip: 0x%08x, mac [%02x:%02x:%02x:%02x:%02x:%02x] \n", + int_ptr->name, int_ptr->dev_context->ip, int_ptr->dev_context->mac[0], int_ptr->dev_context->mac[1], int_ptr->dev_context->mac[2], int_ptr->dev_context->mac[3], int_ptr->dev_context->mac[4], int_ptr->dev_context->mac[5]); } @@ -228,13 +219,13 @@ int dhcp_devman_start_capture(size_t snaplen, struct event_base *base) } /** - * @code dhcp_devman_get_status(check_type, context, type); + * @code dhcp_devman_get_status(check_type, context); * * @brief collects DHCP relay status info. */ -dhcp_mon_status_t dhcp_devman_get_status(dhcp_mon_check_t check_type, dhcp_device_context_t *context, dhcp_type_t type) +dhcp_mon_status_t dhcp_devman_get_status(dhcp_mon_check_t check_type, dhcp_device_context_t *context) { - return dhcp_device_get_status(check_type, context, type); + return dhcp_device_get_status(check_type, context); } /** @@ -276,13 +267,3 @@ void dhcp_devman_print_status(dhcp_device_context_t *context, dhcp_counters_type dhcp_device_print_status(context, type); } } - -/** - * @code dhcp_devman_active_types(dhcpv4, dhcpv6); - * - * @brief update local variables with active protocols - */ -void dhcp_devman_active_types(bool dhcpv4, bool dhcpv6) -{ - dhcp_device_active_types(dhcpv4, dhcpv6); -} diff --git a/src/dhcpmon/src/dhcp_devman.h b/src/dhcpmon/src/dhcp_devman.h index 6e30c654f69e..948e79cde4f4 100644 --- a/src/dhcpmon/src/dhcp_devman.h +++ b/src/dhcpmon/src/dhcp_devman.h @@ -87,17 +87,16 @@ int dhcp_devman_setup_dual_tor_mode(const char *name); int dhcp_devman_start_capture(size_t snaplen, struct event_base *base); /** - * @code dhcp_devman_get_status(check_type, context, type); + * @code dhcp_devman_get_status(check_type, context); * * @brief collects DHCP relay status info. * * @param check_type Type of validation * @param context pointer to device (interface) context - * @param type DHCP type * * @return DHCP_MON_STATUS_HEALTHY, DHCP_MON_STATUS_UNHEALTHY, or DHCP_MON_STATUS_INDETERMINATE */ -dhcp_mon_status_t dhcp_devman_get_status(dhcp_mon_check_t check_type, dhcp_device_context_t *context, dhcp_type_t type); +dhcp_mon_status_t dhcp_devman_get_status(dhcp_mon_check_t check_type, dhcp_device_context_t *context); /** * @code dhcp_devman_update_snapshot(context); @@ -120,16 +119,4 @@ void dhcp_devman_update_snapshot(dhcp_device_context_t *context); */ void dhcp_devman_print_status(dhcp_device_context_t *context, dhcp_counters_type_t type); -/** - * @code dhcp_devman_active_types(dhcpv4, dhcpv6); - * - * @brief update local variables with active protocols - * - * @param dhcpv4 flag indicating dhcpv4 is enabled - * @param dhcpv6 flag indicating dhcpv6 is enabled - * - * @return none - */ -void dhcp_devman_active_types(bool dhcpv4, bool dhcpv6); - #endif /* DHCP_DEVMAN_H_ */ diff --git a/src/dhcpmon/src/dhcp_mon.c b/src/dhcpmon/src/dhcp_mon.c index 2777b6484082..74d9869741d1 100644 --- a/src/dhcpmon/src/dhcp_mon.c +++ b/src/dhcpmon/src/dhcp_mon.c @@ -12,24 +12,16 @@ #include #include #include -#include #include "dhcp_mon.h" #include "dhcp_devman.h" -/** DHCP device/interface state counters */ -typedef struct -{ - int v4_count; /** count in the number of DHCPv4 unhealthy checks */ - int v6_count; /** count in the number of DHCPv6 unhealthy checks */ -} dhcp_mon_count_t; - /** DHCP device/interface state */ typedef struct { dhcp_mon_check_t check_type; /** check type */ dhcp_device_context_t* (*get_context)(); /** functor to a device context accessor function */ - dhcp_mon_count_t counters; /** count in the number of unhealthy checks */ + int count; /** count in the number of unhealthy checks */ const char *msg; /** message to be printed if unhealthy state is determined */ } dhcp_mon_state_t; @@ -37,10 +29,6 @@ typedef struct static int window_interval_sec = 18; /** dhcp_unhealthy_max_count max count of consecutive unhealthy statuses before reporting to syslog */ static int dhcp_unhealthy_max_count = 10; -/** DHCP versions flags */ -static bool dhcpv4_enabled; -static bool dhcpv6_enabled; - /** libevent base struct */ static struct event_base *base; /** libevent timeout event struct */ @@ -57,15 +45,13 @@ static dhcp_mon_state_t state_data[] = { [0] = { .check_type = DHCP_MON_CHECK_POSITIVE, .get_context = dhcp_devman_get_agg_dev, - .counters.v4_count = 0, - .counters.v6_count = 0, + .count = 0, .msg = "dhcpmon detected disparity in DHCP Relay behavior. Duration: %d (sec) for vlan: '%s'\n" }, [1] = { .check_type = DHCP_MON_CHECK_NEGATIVE, .get_context = dhcp_devman_get_mgmt_dev, - .counters.v4_count = 0, - .counters.v6_count = 0, + .count = 0, .msg = "dhcpmon detected DHCP packets traveling through mgmt interface (please check BGP routes.)" " Duration: %d (sec) for intf: '%s'\n" } @@ -92,89 +78,36 @@ static void signal_callback(evutil_socket_t fd, short event, void *arg) } /** - * @code check_dhcp_relay_health(state_data, dhcp_type); + * @code check_dhcp_relay_health(state_data); * * @brief check DHCP relay overall health * * @param state_data pointer to dhcpmon state data * - * @param type DHCP type - * * @return none */ -static void check_dhcp_relay_health(dhcp_mon_state_t *state_data, dhcp_type_t type) +static void check_dhcp_relay_health(dhcp_mon_state_t *state_data) { dhcp_device_context_t *context = state_data->get_context(); - dhcp_mon_status_t dhcp_mon_status = dhcp_devman_get_status(state_data->check_type, context, type); + dhcp_mon_status_t dhcp_mon_status = dhcp_devman_get_status(state_data->check_type, context); switch (dhcp_mon_status) { case DHCP_MON_STATUS_UNHEALTHY: - switch (type) - { - case DHCPv4_TYPE: - if (++state_data->counters.v4_count > dhcp_unhealthy_max_count) { - syslog(LOG_ALERT, state_data->msg, state_data->counters.v4_count * window_interval_sec, context->intf); - dhcp_devman_print_status(context, DHCP_COUNTERS_SNAPSHOT); - dhcp_devman_print_status(context, DHCP_COUNTERS_CURRENT); - } - break; - case DHCPv6_TYPE: - if (++state_data->counters.v6_count > dhcp_unhealthy_max_count) { - syslog(LOG_ALERT, state_data->msg, state_data->counters.v6_count * window_interval_sec, context->intf); - dhcp_devman_print_status(context, DHCP_COUNTERS_SNAPSHOT); - dhcp_devman_print_status(context, DHCP_COUNTERS_CURRENT); - } - break; - - default: - syslog(LOG_ERR, "Unknown DHCP type %d\n", type); - break; + if (++state_data->count > dhcp_unhealthy_max_count) { + syslog(LOG_ALERT, state_data->msg, state_data->count * window_interval_sec, context->intf); + dhcp_devman_print_status(context, DHCP_COUNTERS_SNAPSHOT); + dhcp_devman_print_status(context, DHCP_COUNTERS_CURRENT); } break; - case DHCP_MON_STATUS_HEALTHY: - switch (type) - { - case DHCPv4_TYPE: - state_data->counters.v4_count = 0; - break; - case DHCPv6_TYPE: - state_data->counters.v6_count = 0; - break; - default: - syslog(LOG_ERR, "Unknown DHCP type %d\n", type); - break; - } + state_data->count = 0; break; - case DHCP_MON_STATUS_INDETERMINATE: - switch (type) - { - case DHCPv4_TYPE: - if (state_data->counters.v4_count) { - if (++state_data->counters.v4_count > dhcp_unhealthy_max_count) { - syslog(LOG_ALERT, state_data->msg, state_data->counters.v4_count * window_interval_sec, context->intf); - dhcp_devman_print_status(context, DHCP_COUNTERS_SNAPSHOT); - dhcp_devman_print_status(context, DHCP_COUNTERS_CURRENT); - } - } - break; - case DHCPv6_TYPE: - if (state_data->counters.v6_count) { - if (++state_data->counters.v6_count > dhcp_unhealthy_max_count) { - syslog(LOG_ALERT, state_data->msg, state_data->counters.v6_count * window_interval_sec, context->intf); - dhcp_devman_print_status(context, DHCP_COUNTERS_SNAPSHOT); - dhcp_devman_print_status(context, DHCP_COUNTERS_CURRENT); - } - } - break; - default: - syslog(LOG_ERR, "Unknown DHCP type %d\n", type); - break; + if (state_data->count) { + state_data->count++; } break; - default: syslog(LOG_ERR, "DHCP Relay returned unknown status %d\n", dhcp_mon_status); break; @@ -195,12 +128,7 @@ static void check_dhcp_relay_health(dhcp_mon_state_t *state_data, dhcp_type_t ty static void timeout_callback(evutil_socket_t fd, short event, void *arg) { for (uint8_t i = 0; i < sizeof(state_data) / sizeof(*state_data); i++) { - if (dhcpv4_enabled) { - check_dhcp_relay_health(&state_data[i], DHCPv4_TYPE); - } - if (dhcpv6_enabled) { - check_dhcp_relay_health(&state_data[i], DHCPv6_TYPE); - } + check_dhcp_relay_health(&state_data[i]); } dhcp_devman_update_snapshot(NULL); @@ -213,17 +141,13 @@ static void timeout_callback(evutil_socket_t fd, short event, void *arg) * seconds. It also writes to syslog when dhcp relay has been unhealthy for consecutive max_count checks. * */ -int dhcp_mon_init(int window_sec, int max_count, bool dhcpv4, bool dhcpv6) +int dhcp_mon_init(int window_sec, int max_count) { int rv = -1; do { window_interval_sec = window_sec; dhcp_unhealthy_max_count = max_count; - dhcpv4_enabled = dhcpv4; - dhcpv6_enabled = dhcpv6; - - dhcp_devman_active_types(dhcpv4, dhcpv6); base = event_base_new(); if (base == NULL) { diff --git a/src/dhcpmon/src/dhcp_mon.h b/src/dhcpmon/src/dhcp_mon.h index facd46da6860..ae8911ab51fc 100644 --- a/src/dhcpmon/src/dhcp_mon.h +++ b/src/dhcpmon/src/dhcp_mon.h @@ -17,12 +17,10 @@ * * @param window_sec time interval between health checks * @param max_count max count of consecutive unhealthy statuses before reporting to syslog - * @param dhcpv4 flag indicating dhcpv4 is enabled - * @param dhcpv6 flag indicating dhcpv6 is enabled * * @return 0 upon success, otherwise upon failure */ -int dhcp_mon_init(int window_sec, int max_count, bool dhcpv4, bool dhcpv6); +int dhcp_mon_init(int window_sec, int max_count); /** * @code dhcp_mon_shutdown(); diff --git a/src/dhcpmon/src/main.c b/src/dhcpmon/src/main.c index 1cf931821495..29bc534accf0 100644 --- a/src/dhcpmon/src/main.c +++ b/src/dhcpmon/src/main.c @@ -16,7 +16,6 @@ #include #include #include -#include #include "dhcp_mon.h" #include "dhcp_devman.h" @@ -42,8 +41,7 @@ static const uint32_t dhcpmon_default_unhealthy_max_count = 10; static void usage(const char *prog) { printf("Usage: %s -id {-iu }+ -im [-u ]" - "[-w ] [-c ] [-s ]" - "[-4 ] [-6 ] [-d]\n", prog); + "[-w ] [-c ] [-s ] [-d]\n", prog); printf("where\n"); printf("\tsouth interface: is a vlan interface,\n"); printf("\tnorth interface: is a TOR-T1 interface,\n"); @@ -114,8 +112,6 @@ int main(int argc, char **argv) int max_unhealthy_count = dhcpmon_default_unhealthy_max_count; size_t snaplen = dhcpmon_default_snaplen; int make_daemon = 0; - bool dhcpv4_enabled = false; - bool dhcpv6_enabled = false; setlogmask(LOG_UPTO(LOG_INFO)); openlog(basename(argv[0]), LOG_CONS | LOG_PID | LOG_NDELAY, LOG_DAEMON); @@ -159,14 +155,6 @@ int main(int argc, char **argv) max_unhealthy_count = atoi(argv[i + 1]); i += 2; break; - case '4': - dhcpv4_enabled = true; - i++; - break; - case '6': - dhcpv6_enabled = true; - i++; - break; default: fprintf(stderr, "%s: %c: Unknown option\n", basename(argv[0]), argv[i][1]); usage(basename(argv[0])); @@ -177,11 +165,7 @@ int main(int argc, char **argv) dhcpmon_daemonize(); } - if (!dhcpv4_enabled && !dhcpv6_enabled) { - dhcpv4_enabled = true; - } - - if ((dhcp_mon_init(window_interval, max_unhealthy_count, dhcpv4_enabled, dhcpv6_enabled) == 0) && + if ((dhcp_mon_init(window_interval, max_unhealthy_count) == 0) && (dhcp_mon_start(snaplen) == 0)) { rv = EXIT_SUCCESS; diff --git a/src/linkmgrd b/src/linkmgrd index 0c23756cd618..41f5fb9d44f2 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit 0c23756cd618473064381618ef82687f98b7e31f +Subproject commit 41f5fb9d44f2fd789dea372f2b647d40ec71ed75 diff --git a/src/scapy b/src/scapy new file mode 160000 index 000000000000..8b63d73a1726 --- /dev/null +++ b/src/scapy @@ -0,0 +1 @@ +Subproject commit 8b63d73a17266bae2a61513ea97ded5283a7ccd3 diff --git a/src/scapy.patch/0001-Fix-version-string-generation-when-scapy-is-a-submod.patch b/src/scapy.patch/0001-Fix-version-string-generation-when-scapy-is-a-submod.patch new file mode 100644 index 000000000000..37f5253db0cc --- /dev/null +++ b/src/scapy.patch/0001-Fix-version-string-generation-when-scapy-is-a-submod.patch @@ -0,0 +1,27 @@ +From 988c808af6065b740006aef0e94496821d41fb98 Mon Sep 17 00:00:00 2001 +From: Stepan Blyschak +Date: Mon, 4 Apr 2022 09:57:39 +0000 +Subject: [PATCH] Fix version string generation when scapy is a submodule + +Signed-off-by: Stepan Blyschak +--- + scapy/__init__.py | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/scapy/__init__.py b/scapy/__init__.py +index f920151e..2adbea19 100644 +--- a/scapy/__init__.py ++++ b/scapy/__init__.py +@@ -42,9 +42,6 @@ def _version_from_git_describe(): + :raises CalledProcessError: if git is unavailable + :return: Scapy's latest tag + """ +- if not os.path.isdir(os.path.join(os.path.dirname(_SCAPY_PKG_DIR), '.git')): # noqa: E501 +- raise ValueError('not in scapy git repo') +- + def _git(cmd): + # type: (str) -> str + process = subprocess.Popen( +-- +2.14.1 + diff --git a/src/scapy.patch/0002-Check-if-the-network-interface-still-exists.patch b/src/scapy.patch/0002-Check-if-the-network-interface-still-exists.patch new file mode 100644 index 000000000000..c42c12e1a8aa --- /dev/null +++ b/src/scapy.patch/0002-Check-if-the-network-interface-still-exists.patch @@ -0,0 +1,42 @@ +From 7ffd8101c1e535f9c3225db2c319958a64412686 Mon Sep 17 00:00:00 2001 +From: Guillaume Valadon +Date: Tue, 14 Sep 2021 19:34:43 +0200 +Subject: [PATCH] Check if the network interface still exists + +Signed-off-by: Stepan Blyschak +--- + scapy/arch/linux.py | 18 +++++++++++------- + 1 file changed, 11 insertions(+), 7 deletions(-) + +diff --git a/scapy/arch/linux.py b/scapy/arch/linux.py +index 94fac8f0..b86e98ab 100644 +--- a/scapy/arch/linux.py ++++ b/scapy/arch/linux.py +@@ -414,13 +414,17 @@ class LinuxInterfaceProvider(InterfaceProvider): + data = {} + ips = in6_getifaddr() + for i in _get_if_list(): +- ifflags = struct.unpack("16xH14x", get_if(i, SIOCGIFFLAGS))[0] +- index = get_if_index(i) +- mac = scapy.utils.str2mac( +- get_if_raw_hwaddr(i, siocgifhwaddr=SIOCGIFHWADDR)[1] +- ) +- ip = None # type: Optional[str] +- ip = inet_ntop(socket.AF_INET, get_if_raw_addr(i)) ++ try: ++ ifflags = struct.unpack("16xH14x", get_if(i, SIOCGIFFLAGS))[0] ++ index = get_if_index(i) ++ mac = scapy.utils.str2mac( ++ get_if_raw_hwaddr(i, siocgifhwaddr=SIOCGIFHWADDR)[1] ++ ) ++ ip = None # type: Optional[str] ++ ip = inet_ntop(socket.AF_INET, get_if_raw_addr(i)) ++ except IOError: ++ warning("Interface %s does not exist!", i) ++ continue + if ip == "0.0.0.0": + ip = None + ifflags = FlagValue(ifflags, _iff_flags) +-- +2.14.1 + diff --git a/src/scapy.patch/series b/src/scapy.patch/series new file mode 100644 index 000000000000..d64f20f136c1 --- /dev/null +++ b/src/scapy.patch/series @@ -0,0 +1,2 @@ +0001-Fix-version-string-generation-when-scapy-is-a-submod.patch +0002-Check-if-the-network-interface-still-exists.patch diff --git a/src/smartmontools/.gitignore b/src/smartmontools/.gitignore deleted file mode 100644 index a0991ff4402b..000000000000 --- a/src/smartmontools/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -* -!.gitignore -!Makefile diff --git a/src/smartmontools/Makefile b/src/smartmontools/Makefile deleted file mode 100644 index 8f0f0695659f..000000000000 --- a/src/smartmontools/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -SHELL = /bin/bash -.ONESHELL: -.SHELLFLAGS += -e - - -MAIN_TARGET = smartmontools_$(SMARTMONTOOLS_VERSION_FULL)_$(CONFIGURED_ARCH).deb - -$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : - rm -rf smartmontools-$(SMARTMONTOOLS_VERSION_MAJOR) - wget -O smartmontools_$(SMARTMONTOOLS_VERSION_MAJOR).orig.tar.gz -N "https://sonicstorage.blob.core.windows.net/packages/debian/smartmontools_$(SMARTMONTOOLS_VERSION_MAJOR).orig.tar.gz?sv=2015-04-05&sr=b&sig=JZx4qiLuO36T0rsGqk4V2RDuWjRw6NztsLK7vlBYAkg%3D&se=2046-08-20T23%3A47%3A13Z&sp=r" - wget -O smartmontools_$(SMARTMONTOOLS_VERSION_FULL).dsc -N "https://sonicstorage.blob.core.windows.net/packages/debian/smartmontools_$(SMARTMONTOOLS_VERSION_FULL).dsc?sv=2015-04-05&sr=b&sig=IS7FKUN%2Bvq0T55f4X2hGAViB70Y%2FgzjGgvzpUJLyUfA%3D&se=2046-08-20T23%3A46%3A57Z&sp=r" - wget -O smartmontools_$(SMARTMONTOOLS_VERSION_FULL).debian.tar.xz -N "https://sonicstorage.blob.core.windows.net/packages/debian/smartmontools_$(SMARTMONTOOLS_VERSION_FULL).debian.tar.xz?sv=2015-04-05&sr=b&sig=H0RFeC41MCvhTQCln85DuPLn5v2goozwz%2FB9sA9p5eQ%3D&se=2046-08-20T23%3A46%3A02Z&sp=r" - dpkg-source -x smartmontools_$(SMARTMONTOOLS_VERSION_FULL).dsc - - pushd smartmontools-$(SMARTMONTOOLS_VERSION_MAJOR) - dpkg-buildpackage -us -uc -b -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) - popd - - mv $* $(DEST)/ diff --git a/src/sonic-bgpcfgd/bgpcfgd/managers_allow_list.py b/src/sonic-bgpcfgd/bgpcfgd/managers_allow_list.py index 435be91d20d2..e03bb19c163f 100644 --- a/src/sonic-bgpcfgd/bgpcfgd/managers_allow_list.py +++ b/src/sonic-bgpcfgd/bgpcfgd/managers_allow_list.py @@ -2,6 +2,7 @@ Implementation of "allow-list" feature """ import re +import ipaddress from .log import log_debug, log_info, log_err, log_warn from .template import TemplateFabric @@ -19,6 +20,7 @@ class BGPAllowListMgr(Manager): ROUTE_MAP_ENTRY_WITH_COMMUNITY_END = 29990 ROUTE_MAP_ENTRY_WITHOUT_COMMUNITY_START = 30000 ROUTE_MAP_ENTRY_WITHOUT_COMMUNITY_END = 65530 + PREFIX_LIST_POS = 1 # the position of the ip prefix in the permit string. V4 = "v4" # constant for af enum: V4 V6 = "v6" # constant for af enum: V6 @@ -228,6 +230,12 @@ def __update_prefix_list(self, af, pl_name, allow_list): constant_list = self.__get_constant_list(af) allow_list = self.__to_prefix_list(af, allow_list) log_debug("BGPAllowListMgr::__update_prefix_list. af='%s' prefix-list name=%s" % (af, pl_name)) + ''' + Need to check exist and equality of the allowed prefix list. + A. If exist and equal, no operation needed. + B. If exist but not equal, first delete then add prefix based on the data from condig db and constants. + C. If non-exist, directly add prefix based on the data from condig db and constants. + ''' exist, correct = self.__is_prefix_list_valid(af, pl_name, allow_list, constant_list) if correct: log_debug("BGPAllowListMgr::__update_prefix_list. the prefix-list '%s' exists and correct" % pl_name) @@ -237,7 +245,7 @@ def __update_prefix_list(self, af, pl_name, allow_list): seq_no = 10 if exist: cmds.append('no %s prefix-list %s' % (family, pl_name)) - for entry in constant_list + allow_list: + for entry in self.__normalize_ipnetwork(af, constant_list + allow_list): cmds.append('%s prefix-list %s seq %d %s' % (family, pl_name, seq_no, entry)) seq_no += 10 return cmds @@ -258,6 +266,24 @@ def __remove_prefix_list(self, af, pl_name): family = self.__af_to_family(af) return ["no %s prefix-list %s" % (family, pl_name)] + def __normalize_ipnetwork(self, af, allow_prefix_list): + ''' + Normalize IPv6 addresses + for example: + 2001:cdba:0000:0000:0000:0000:3257:9652 + 2001:cdba:0:0:0:0:3257:9652 + 2001:cdba::3257:9652 + after normalize, all would be normalized to + 2001:cdba::3257:9652 + ''' + normalize_list = [] + for allow_item in allow_prefix_list: + tmp_list = allow_item.split(' ') + if af == self.V6: + tmp_list[self.PREFIX_LIST_POS] = str(ipaddress.IPv6Network(tmp_list[self.PREFIX_LIST_POS])) + normalize_list.append(' '.join(tmp_list)) + return normalize_list + def __is_prefix_list_valid(self, af, pl_name, allow_list, constant_list): """ Check that a prefix list exists and it has valid entries @@ -266,7 +292,8 @@ def __is_prefix_list_valid(self, af, pl_name, allow_list, constant_list): :param allow_list: a prefix-list which must be a part of the valid prefix list :param constant_list: a constant list which must be on top of each "allow" prefix list on the device :return: a tuple. The first element of the tuple has True if the prefix-list exists, False otherwise, - The second element of the tuple has True if the prefix-list contains correct entries, False if not + The second element of the tuple has True if allow prefix list in running configuraiton is + equal with ones in config db + constants, False if not """ assert af == self.V4 or af == self.V6 family = self.__af_to_family(af) @@ -274,20 +301,18 @@ def __is_prefix_list_valid(self, af, pl_name, allow_list, constant_list): conf = self.cfg_mgr.get_text() if not any(line.strip().startswith(match_string) for line in conf): return False, False # if the prefix list is not exists, it is not correct - constant_set = set(constant_list) - allow_set = set(allow_list) + expect_set = set(self.__normalize_ipnetwork(af, constant_list)) + expect_set.update(set(self.__normalize_ipnetwork(af, allow_list))) + + config_list = [] for line in conf: if line.startswith(match_string): found = line[len(match_string):].strip().split(' ') rule = " ".join(found[1:]) - if rule in constant_set: - constant_set.discard(rule) - elif rule in allow_set: - if constant_set: - return True, False # Not everything from constant set is presented - else: - allow_set.discard(rule) - return True, len(allow_set) == 0 # allow_set should be presented all + config_list.append(rule) + + # Return double Ture, when running configuraiton is identical with config db + constants. + return True, expect_set == set(self.__normalize_ipnetwork(af, config_list)) def __update_community(self, community_name, community_value): """ diff --git a/src/sonic-bgpcfgd/setup.py b/src/sonic-bgpcfgd/setup.py index ab86ca20ec19..b451accb9792 100755 --- a/src/sonic-bgpcfgd/setup.py +++ b/src/sonic-bgpcfgd/setup.py @@ -18,6 +18,7 @@ 'jinja2>=2.10', 'netaddr==0.8.0', 'pyyaml==5.4.1', + 'ipaddress==1.0.23' ], setup_requires = [ 'pytest-runner', diff --git a/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_chasiss_packet.conf b/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_chasiss_packet.conf index c36359de77dd..3a6f0bad59aa 100644 --- a/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_chasiss_packet.conf +++ b/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_chasiss_packet.conf @@ -4,14 +4,14 @@ neighbor INTERNAL_PEER_V4 peer-group neighbor INTERNAL_PEER_V6 peer-group address-family ipv4 - neighbor INTERNAL_PEER_V4 update-source 10.10.10.10 + neighbor INTERNAL_PEER_V4 update-source Loopback4096 neighbor INTERNAL_PEER_V4 soft-reconfiguration inbound neighbor INTERNAL_PEER_V4 allowas-in 1 neighbor INTERNAL_PEER_V4 route-map FROM_BGP_INTERNAL_PEER_V4 in neighbor INTERNAL_PEER_V4 route-map TO_BGP_INTERNAL_PEER_V4 out exit-address-family address-family ipv6 - neighbor INTERNAL_PEER_V6 update-source 2603:10e2:400::3 + neighbor INTERNAL_PEER_V6 update-source Loopback4096 neighbor INTERNAL_PEER_V6 soft-reconfiguration inbound neighbor INTERNAL_PEER_V6 allowas-in 1 neighbor INTERNAL_PEER_V6 route-map FROM_BGP_INTERNAL_PEER_V6 in diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_all.json b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_all_v4.json similarity index 100% rename from src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_all.json rename to src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_all_v4.json diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_all_v6.json b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_all_v6.json new file mode 100644 index 000000000000..d78af6c7588f --- /dev/null +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_all_v6.json @@ -0,0 +1,22 @@ +{ + "CONFIG_DB__DEVICE_METADATA": { + "localhost": {} + }, + "neighbor_addr": "fc00::01", + "bgp_session": { + "asn": "555", + "name": "internal1", + "keepalive": "5", + "holdtime": "30", + "admin_status": "down" + }, + "constants": { + "bgp": { + "maximum_paths": { + "enabled": "true", + "ipv4": "32", + "ipv6": "24" + } + } + } +} diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_base.json b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_base_v4.json similarity index 100% rename from src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_base.json rename to src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_base_v4.json diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_base_v6.json b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_base_v6.json new file mode 100644 index 000000000000..4b9b884fcf2e --- /dev/null +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_base_v6.json @@ -0,0 +1,17 @@ +{ + "CONFIG_DB__DEVICE_METADATA": { + "localhost": {} + }, + "neighbor_addr": "fc00::01", + "bgp_session": { + "asn": "555", + "name": "internal1" + }, + "constants": { + "bgp": { + "maximum_paths": { + "enabled": "true" + } + } + } +} diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_shutdown_1.json b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_shutdown_v4_1.json similarity index 100% rename from src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_shutdown_1.json rename to src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_shutdown_v4_1.json diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_shutdown_2.json b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_shutdown_v4_2.json similarity index 100% rename from src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_shutdown_2.json rename to src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_shutdown_v4_2.json diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_shutdown_v6_1.json b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_shutdown_v6_1.json new file mode 100644 index 000000000000..3ceeb3f00332 --- /dev/null +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_shutdown_v6_1.json @@ -0,0 +1,19 @@ +{ + "CONFIG_DB__DEVICE_METADATA": { + "localhost": { + "default_bgp_status": "down" + } + }, + "neighbor_addr": "fc00::01", + "bgp_session": { + "asn": "555", + "name": "internal1" + }, + "constants": { + "bgp": { + "maximum_paths": { + "enabled": "true" + } + } + } +} diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_shutdown_v6_2.json b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_shutdown_v6_2.json new file mode 100644 index 000000000000..8f2881b75f38 --- /dev/null +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_shutdown_v6_2.json @@ -0,0 +1,19 @@ +{ + "CONFIG_DB__DEVICE_METADATA": { + "localhost": { + "default_bgp_status": "up" + } + }, + "neighbor_addr": "fc00::01", + "bgp_session": { + "asn": "555", + "name": "internal1" + }, + "constants": { + "bgp": { + "maximum_paths": { + "enabled": "true" + } + } + } +} diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_timers_1.json b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_timers_v4_1.json similarity index 100% rename from src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_timers_1.json rename to src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_timers_v4_1.json diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_timers_2.json b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_timers_v4_2.json similarity index 100% rename from src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_timers_2.json rename to src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_timers_v4_2.json diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_timers_v6_1.json b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_timers_v6_1.json new file mode 100644 index 000000000000..e236b791ef07 --- /dev/null +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_timers_v6_1.json @@ -0,0 +1,18 @@ +{ + "CONFIG_DB__DEVICE_METADATA": { + "localhost": {} + }, + "neighbor_addr": "fc00::01", + "bgp_session": { + "asn": "555", + "name": "internal1", + "keepalive": "5" + }, + "constants": { + "bgp": { + "maximum_paths": { + "enabled": "true" + } + } + } +} diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_timers_v6_2.json b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_timers_v6_2.json new file mode 100644 index 000000000000..ce077e5bc6de --- /dev/null +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/param_timers_v6_2.json @@ -0,0 +1,18 @@ +{ + "CONFIG_DB__DEVICE_METADATA": { + "localhost": {} + }, + "neighbor_addr": "fc00::01", + "bgp_session": { + "asn": "555", + "name": "internal1", + "holdtime": "240" + }, + "constants": { + "bgp": { + "maximum_paths": { + "enabled": "true" + } + } + } +} diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_all.conf b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_all_v4.conf similarity index 90% rename from src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_all.conf rename to src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_all_v4.conf index 7d2cc5413621..604af65d5e66 100644 --- a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_all.conf +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_all_v4.conf @@ -4,12 +4,13 @@ bgp bestpath as-path multipath-relax bgp bestpath peer-type multipath-relax ! - neighbor 10.10.10.10 peer-group VOQ_CHASSIS_PEER + neighbor 10.10.10.10 peer-group VOQ_CHASSIS_V4_PEER neighbor 10.10.10.10 remote-as 555 neighbor 10.10.10.10 description internal1 neighbor 10.10.10.10 timers 3 10 neighbor 10.10.10.10 timers connect 10 neighbor 10.10.10.10 shutdown +! address-family ipv4 maximum-paths ibgp 32 ! diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_all_v6.conf b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_all_v6.conf new file mode 100644 index 000000000000..793473c2e202 --- /dev/null +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_all_v6.conf @@ -0,0 +1,25 @@ +! +! template: bgpd/templates/voq_chassis/instance.conf.j2 +! + bgp bestpath as-path multipath-relax + bgp bestpath peer-type multipath-relax +! + neighbor fc00::01 peer-group VOQ_CHASSIS_V6_PEER + neighbor fc00::01 remote-as 555 + neighbor fc00::01 description internal1 + neighbor fc00::01 timers 3 10 + neighbor fc00::01 timers connect 10 + neighbor fc00::01 shutdown +! + address-family ipv4 + maximum-paths ibgp 32 +! + exit-address-family +! + address-family ipv6 + maximum-paths ibgp 24 +! + exit-address-family +! +! end of template: bgpd/templates/voq_chassis/instance.conf.j2 +! diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_1.conf b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_base_v4.conf similarity index 90% rename from src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_1.conf rename to src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_base_v4.conf index c5f2385192d3..23bf5841f9cc 100644 --- a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_1.conf +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_base_v4.conf @@ -4,7 +4,7 @@ bgp bestpath as-path multipath-relax bgp bestpath peer-type multipath-relax ! - neighbor 10.10.10.10 peer-group VOQ_CHASSIS_PEER + neighbor 10.10.10.10 peer-group VOQ_CHASSIS_V4_PEER neighbor 10.10.10.10 remote-as 555 neighbor 10.10.10.10 description internal1 neighbor 10.10.10.10 timers 3 10 diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_base_v6.conf b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_base_v6.conf new file mode 100644 index 000000000000..a0bd9379c8b2 --- /dev/null +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_base_v6.conf @@ -0,0 +1,23 @@ +! +! template: bgpd/templates/voq_chassis/instance.conf.j2 +! + bgp bestpath as-path multipath-relax + bgp bestpath peer-type multipath-relax +! + neighbor fc00::01 peer-group VOQ_CHASSIS_V6_PEER + neighbor fc00::01 remote-as 555 + neighbor fc00::01 description internal1 + neighbor fc00::01 timers 3 10 + neighbor fc00::01 timers connect 10 + address-family ipv4 + maximum-paths ibgp 64 +! + exit-address-family +! + address-family ipv6 + maximum-paths ibgp 64 +! + exit-address-family +! +! end of template: bgpd/templates/voq_chassis/instance.conf.j2 +! diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_1.conf b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_v4_1.conf similarity index 90% rename from src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_1.conf rename to src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_v4_1.conf index 91f405cea9da..f26f0d6d3d0c 100644 --- a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_1.conf +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_v4_1.conf @@ -4,12 +4,13 @@ bgp bestpath as-path multipath-relax bgp bestpath peer-type multipath-relax ! - neighbor 10.10.10.10 peer-group VOQ_CHASSIS_PEER + neighbor 10.10.10.10 peer-group VOQ_CHASSIS_V4_PEER neighbor 10.10.10.10 remote-as 555 neighbor 10.10.10.10 description internal1 neighbor 10.10.10.10 timers 3 10 neighbor 10.10.10.10 timers connect 10 neighbor 10.10.10.10 shutdown +! address-family ipv4 maximum-paths ibgp 64 ! diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_base.conf b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_v4_2.conf similarity index 90% rename from src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_base.conf rename to src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_v4_2.conf index c5f2385192d3..23bf5841f9cc 100644 --- a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_base.conf +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_v4_2.conf @@ -4,7 +4,7 @@ bgp bestpath as-path multipath-relax bgp bestpath peer-type multipath-relax ! - neighbor 10.10.10.10 peer-group VOQ_CHASSIS_PEER + neighbor 10.10.10.10 peer-group VOQ_CHASSIS_V4_PEER neighbor 10.10.10.10 remote-as 555 neighbor 10.10.10.10 description internal1 neighbor 10.10.10.10 timers 3 10 diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_v6_1.conf b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_v6_1.conf new file mode 100644 index 000000000000..4057147d5d58 --- /dev/null +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_v6_1.conf @@ -0,0 +1,25 @@ +! +! template: bgpd/templates/voq_chassis/instance.conf.j2 +! + bgp bestpath as-path multipath-relax + bgp bestpath peer-type multipath-relax +! + neighbor fc00::01 peer-group VOQ_CHASSIS_V6_PEER + neighbor fc00::01 remote-as 555 + neighbor fc00::01 description internal1 + neighbor fc00::01 timers 3 10 + neighbor fc00::01 timers connect 10 + neighbor fc00::01 shutdown +! + address-family ipv4 + maximum-paths ibgp 64 +! + exit-address-family +! + address-family ipv6 + maximum-paths ibgp 64 +! + exit-address-family +! +! end of template: bgpd/templates/voq_chassis/instance.conf.j2 +! diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_v6_2.conf b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_v6_2.conf new file mode 100644 index 000000000000..a0bd9379c8b2 --- /dev/null +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_v6_2.conf @@ -0,0 +1,23 @@ +! +! template: bgpd/templates/voq_chassis/instance.conf.j2 +! + bgp bestpath as-path multipath-relax + bgp bestpath peer-type multipath-relax +! + neighbor fc00::01 peer-group VOQ_CHASSIS_V6_PEER + neighbor fc00::01 remote-as 555 + neighbor fc00::01 description internal1 + neighbor fc00::01 timers 3 10 + neighbor fc00::01 timers connect 10 + address-family ipv4 + maximum-paths ibgp 64 +! + exit-address-family +! + address-family ipv6 + maximum-paths ibgp 64 +! + exit-address-family +! +! end of template: bgpd/templates/voq_chassis/instance.conf.j2 +! diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_2.conf b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_v4_1.conf similarity index 90% rename from src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_2.conf rename to src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_v4_1.conf index c5f2385192d3..23bf5841f9cc 100644 --- a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_2.conf +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_v4_1.conf @@ -4,7 +4,7 @@ bgp bestpath as-path multipath-relax bgp bestpath peer-type multipath-relax ! - neighbor 10.10.10.10 peer-group VOQ_CHASSIS_PEER + neighbor 10.10.10.10 peer-group VOQ_CHASSIS_V4_PEER neighbor 10.10.10.10 remote-as 555 neighbor 10.10.10.10 description internal1 neighbor 10.10.10.10 timers 3 10 diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_2.conf b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_v4_2.conf similarity index 90% rename from src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_2.conf rename to src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_v4_2.conf index c5f2385192d3..23bf5841f9cc 100644 --- a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_shutdown_2.conf +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_v4_2.conf @@ -4,7 +4,7 @@ bgp bestpath as-path multipath-relax bgp bestpath peer-type multipath-relax ! - neighbor 10.10.10.10 peer-group VOQ_CHASSIS_PEER + neighbor 10.10.10.10 peer-group VOQ_CHASSIS_V4_PEER neighbor 10.10.10.10 remote-as 555 neighbor 10.10.10.10 description internal1 neighbor 10.10.10.10 timers 3 10 diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_v6_1.conf b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_v6_1.conf new file mode 100644 index 000000000000..a0bd9379c8b2 --- /dev/null +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_v6_1.conf @@ -0,0 +1,23 @@ +! +! template: bgpd/templates/voq_chassis/instance.conf.j2 +! + bgp bestpath as-path multipath-relax + bgp bestpath peer-type multipath-relax +! + neighbor fc00::01 peer-group VOQ_CHASSIS_V6_PEER + neighbor fc00::01 remote-as 555 + neighbor fc00::01 description internal1 + neighbor fc00::01 timers 3 10 + neighbor fc00::01 timers connect 10 + address-family ipv4 + maximum-paths ibgp 64 +! + exit-address-family +! + address-family ipv6 + maximum-paths ibgp 64 +! + exit-address-family +! +! end of template: bgpd/templates/voq_chassis/instance.conf.j2 +! diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_v6_2.conf b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_v6_2.conf new file mode 100644 index 000000000000..a0bd9379c8b2 --- /dev/null +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/instance.conf/result_timers_v6_2.conf @@ -0,0 +1,23 @@ +! +! template: bgpd/templates/voq_chassis/instance.conf.j2 +! + bgp bestpath as-path multipath-relax + bgp bestpath peer-type multipath-relax +! + neighbor fc00::01 peer-group VOQ_CHASSIS_V6_PEER + neighbor fc00::01 remote-as 555 + neighbor fc00::01 description internal1 + neighbor fc00::01 timers 3 10 + neighbor fc00::01 timers connect 10 + address-family ipv4 + maximum-paths ibgp 64 +! + exit-address-family +! + address-family ipv6 + maximum-paths ibgp 64 +! + exit-address-family +! +! end of template: bgpd/templates/voq_chassis/instance.conf.j2 +! diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/peer-group.conf/result_all.conf b/src/sonic-bgpcfgd/tests/data/voq_chassis/peer-group.conf/result_all.conf index 031884499aaa..1ec1cffed952 100644 --- a/src/sonic-bgpcfgd/tests/data/voq_chassis/peer-group.conf/result_all.conf +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/peer-group.conf/result_all.conf @@ -1,18 +1,23 @@ ! ! template: bgpd/templates/voq_chassis/peer-group.conf.j2 ! - neighbor VOQ_CHASSIS_PEER peer-group + neighbor VOQ_CHASSIS_V4_PEER peer-group + neighbor VOQ_CHASSIS_V6_PEER peer-group address-family ipv4 - neighbor VOQ_CHASSIS_PEER allowas-in 1 - neighbor VOQ_CHASSIS_PEER activate - neighbor VOQ_CHASSIS_PEER addpath-tx-all-paths - neighbor VOQ_CHASSIS_PEER soft-reconfiguration inbound + neighbor VOQ_CHASSIS_V4_PEER allowas-in 1 + neighbor VOQ_CHASSIS_V4_PEER activate + neighbor VOQ_CHASSIS_V4_PEER addpath-tx-all-paths + neighbor VOQ_CHASSIS_V4_PEER soft-reconfiguration inbound + neighbor VOQ_CHASSIS_V4_PEER route-map FROM_VOQ_CHASSIS_V4_PEER in + neighbor VOQ_CHASSIS_V4_PEER route-map TO_VOQ_CHASSIS_V4_PEER out exit-address-family address-family ipv6 - neighbor VOQ_CHASSIS_PEER allowas-in 1 - neighbor VOQ_CHASSIS_PEER activate - neighbor VOQ_CHASSIS_PEER addpath-tx-all-paths - neighbor VOQ_CHASSIS_PEER soft-reconfiguration inbound + neighbor VOQ_CHASSIS_V6_PEER allowas-in 1 + neighbor VOQ_CHASSIS_V6_PEER activate + neighbor VOQ_CHASSIS_V6_PEER addpath-tx-all-paths + neighbor VOQ_CHASSIS_V6_PEER soft-reconfiguration inbound + neighbor VOQ_CHASSIS_V4_PEER route-map FROM_VOQ_CHASSIS_V6_PEER in + neighbor VOQ_CHASSIS_V4_PEER route-map TO_VOQ_CHASSIS_V6_PEER out exit-address-family ! ! end of template: bgpd/templates/voq_chassis/peer-group.conf.j2 diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/peer-group.conf/result_base.conf b/src/sonic-bgpcfgd/tests/data/voq_chassis/peer-group.conf/result_base.conf index d4a6f381a224..a8f7a0eea528 100644 --- a/src/sonic-bgpcfgd/tests/data/voq_chassis/peer-group.conf/result_base.conf +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/peer-group.conf/result_base.conf @@ -1,16 +1,21 @@ ! ! template: bgpd/templates/voq_chassis/peer-group.conf.j2 ! - neighbor VOQ_CHASSIS_PEER peer-group + neighbor VOQ_CHASSIS_V4_PEER peer-group + neighbor VOQ_CHASSIS_V6_PEER peer-group address-family ipv4 - neighbor VOQ_CHASSIS_PEER activate - neighbor VOQ_CHASSIS_PEER addpath-tx-all-paths - neighbor VOQ_CHASSIS_PEER soft-reconfiguration inbound + neighbor VOQ_CHASSIS_V4_PEER activate + neighbor VOQ_CHASSIS_V4_PEER addpath-tx-all-paths + neighbor VOQ_CHASSIS_V4_PEER soft-reconfiguration inbound + neighbor VOQ_CHASSIS_V4_PEER route-map FROM_VOQ_CHASSIS_V4_PEER in + neighbor VOQ_CHASSIS_V4_PEER route-map TO_VOQ_CHASSIS_V4_PEER out exit-address-family address-family ipv6 - neighbor VOQ_CHASSIS_PEER activate - neighbor VOQ_CHASSIS_PEER addpath-tx-all-paths - neighbor VOQ_CHASSIS_PEER soft-reconfiguration inbound + neighbor VOQ_CHASSIS_V6_PEER activate + neighbor VOQ_CHASSIS_V6_PEER addpath-tx-all-paths + neighbor VOQ_CHASSIS_V6_PEER soft-reconfiguration inbound + neighbor VOQ_CHASSIS_V4_PEER route-map FROM_VOQ_CHASSIS_V6_PEER in + neighbor VOQ_CHASSIS_V4_PEER route-map TO_VOQ_CHASSIS_V6_PEER out exit-address-family ! ! end of template: bgpd/templates/voq_chassis/peer-group.conf.j2 diff --git a/src/sonic-bgpcfgd/tests/data/voq_chassis/policies.conf/result_base.conf b/src/sonic-bgpcfgd/tests/data/voq_chassis/policies.conf/result_base.conf index 4c853d4f3220..c26db7bde241 100644 --- a/src/sonic-bgpcfgd/tests/data/voq_chassis/policies.conf/result_base.conf +++ b/src/sonic-bgpcfgd/tests/data/voq_chassis/policies.conf/result_base.conf @@ -1,7 +1,18 @@ ! ! template: bgpd/templates/voq_chassis/policies.conf.j2 ! +route-map FROM_VOQ_CHASSIS_V4_PEER permit 100 ! +route-map TO_VOQ_CHASSIS_V4_PEER permit 100 +! +! +route-map FROM_VOQ_CHASSIS_V6_PEER permit 1 + set ipv6 next-hop prefer-global + on-match next +! +route-map FROM_VOQ_CHASSIS_V6_PEER permit 100 +! +route-map TO_VOQ_CHASSIS_V6_PEER permit 100 ! ! end of template: bgpd/templates/voq_chassis/policies.conf.j2 ! diff --git a/src/sonic-bgpcfgd/tests/test_allow_list.py b/src/sonic-bgpcfgd/tests/test_allow_list.py index cb0896982a39..5207c6283462 100644 --- a/src/sonic-bgpcfgd/tests/test_allow_list.py +++ b/src/sonic-bgpcfgd/tests/test_allow_list.py @@ -79,8 +79,8 @@ def test_set_handler_with_community(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 20 permit 10.20.30.0/24 le 32', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 30 permit 30.50.0.0/16 le 32', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 30 permit fc00:20::/64 le 128', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 40 permit fc00:30::/64 le 128', 'bgp community-list standard COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020 permit 1010:2020', @@ -110,8 +110,8 @@ def test_set_handler_with_community_and_permit_action(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 20 permit 10.20.30.0/24 le 32', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 30 permit 30.50.0.0/16 le 32', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 30 permit fc00:20::/64 le 128', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 40 permit fc00:30::/64 le 128', 'bgp community-list standard COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020 permit 1010:2020', @@ -142,8 +142,8 @@ def test_set_handler_with_community_and_deny_action(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 20 permit 10.20.30.0/24 le 32', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 30 permit 30.50.0.0/16 le 32', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 30 permit fc00:20::/64 le 128', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 40 permit fc00:30::/64 le 128', 'bgp community-list standard COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020 permit 1010:2020', @@ -178,8 +178,8 @@ def test_set_handler_no_community(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 20 permit 20.20.30.0/24 le 32', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 30 permit 40.50.0.0/16 le 32', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 30 permit fc01:20::/64 le 128', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 40 permit fc01:30::/64 le 128', 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_V4 permit 30000', @@ -206,8 +206,8 @@ def test_set_handler_no_community_with_permit_action(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 20 permit 20.20.30.0/24 le 32', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 30 permit 40.50.0.0/16 le 32', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 30 permit fc01:20::/64 le 128', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 40 permit fc01:30::/64 le 128', 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_V4 permit 30000', @@ -234,8 +234,8 @@ def test_set_handler_no_community_with_deny_action(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 20 permit 20.20.30.0/24 le 32', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 30 permit 40.50.0.0/16 le 32', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 30 permit fc01:20::/64 le 128', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 40 permit fc01:30::/64 le 128', 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_V4 permit 30000', @@ -257,8 +257,8 @@ def test_del_handler_with_community(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 20 permit 10.20.30.0/24 ge 25', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 30 permit 30.50.0.0/16 ge 17', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 30 permit fc00:20::/64 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 40 permit fc00:30::/64 ge 65', 'bgp community-list standard COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020 permit 1010:2020', @@ -292,8 +292,8 @@ def test_del_handler_with_exiting_community_deny_action(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 20 permit 10.20.30.0/24 ge 25', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 30 permit 30.50.0.0/16 ge 17', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 30 permit fc00:20::/64 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 40 permit fc00:30::/64 ge 65', 'bgp community-list standard COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020 permit 1010:2020', @@ -331,8 +331,8 @@ def test_del_handler_with_exiting_community_permit_action(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 20 permit 10.20.30.0/24 ge 25', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 30 permit 30.50.0.0/16 ge 17', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 30 permit fc00:20::/64 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 40 permit fc00:30::/64 ge 65', 'bgp community-list standard COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020 permit 1010:2020', @@ -365,8 +365,8 @@ def test_del_handler_with_exiting_community_deny_action_global_deny(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 20 permit 10.20.30.0/24 ge 25', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 30 permit 30.50.0.0/16 ge 17', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 30 permit fc00:20::/64 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 40 permit fc00:30::/64 ge 65', 'bgp community-list standard COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020 permit 1010:2020', @@ -401,8 +401,8 @@ def test_del_handler_with_exiting_community_permit_action_global_deny(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 20 permit 10.20.30.0/24 ge 25', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 30 permit 30.50.0.0/16 ge 17', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 30 permit fc00:20::/64 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 40 permit fc00:30::/64 ge 65', 'bgp community-list standard COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020 permit 1010:2020', @@ -441,8 +441,8 @@ def test_del_handler_no_community(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 20 permit 20.20.30.0/24 ge 25', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 30 permit 40.50.0.0/16 ge 17', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 30 permit fc01:20::/64 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 40 permit fc01:30::/64 ge 65', 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_V4 permit 30000', @@ -470,8 +470,8 @@ def test_del_handler_with_no_community_deny_action(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 20 permit 20.20.30.0/24 ge 25', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 30 permit 40.50.0.0/16 ge 17', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 30 permit fc01:20::/64 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 40 permit fc01:30::/64 ge 65', 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_V4 permit 30000', @@ -503,8 +503,8 @@ def test_del_handler_with_no_community_permit_action_global_deny(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 20 permit 20.20.30.0/24 ge 25', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 30 permit 40.50.0.0/16 ge 17', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 30 permit fc01:20::/64 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 40 permit fc01:30::/64 ge 65', 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_V4 permit 30000', @@ -543,8 +543,8 @@ def test_set_handler_with_community_data_is_already_presented(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 20 permit 10.20.30.0/24 le 32', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 30 permit 30.50.0.0/16 le 32', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 30 permit fc00:20::/64 le 128', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 40 permit fc00:30::/64 le 128', 'bgp community-list standard COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020 permit 1010:2020', @@ -572,8 +572,8 @@ def test_set_handler_no_community_data_is_already_presented(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 20 permit 20.20.30.0/24 le 32', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 30 permit 40.50.0.0/16 le 32', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 30 permit fc01:20::/64 le 128', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 40 permit fc01:30::/64 le 128', 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_V4 permit 30000', @@ -636,8 +636,8 @@ def test_set_handler_with_community_update_prefixes_add(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 20 permit 10.20.30.0/24 le 32', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 30 permit 30.50.0.0/16 le 32', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 30 permit fc00:20::/64 le 128', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 40 permit fc00:30::/64 le 128', 'bgp community-list standard COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020 permit 1010:2020', @@ -660,8 +660,8 @@ def test_set_handler_with_community_update_prefixes_add(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 30 permit 30.50.0.0/16 le 32', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 40 permit 80.90.0.0/16 le 32', 'no ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 30 permit fc00:20::/64 le 128', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 40 permit fc00:30::/64 le 128', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 50 permit fc02::/64 le 128', @@ -679,8 +679,8 @@ def test_set_handler_no_community_update_prefixes_add(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 10 deny 0.0.0.0/0 le 17', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 20 permit 20.20.30.0/24 le 32', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 30 permit 40.50.0.0/16 le 32', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 30 permit fc01:20::/64 le 128', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 40 permit fc01:30::/64 le 128', 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_V4 permit 30000', @@ -700,14 +700,89 @@ def test_set_handler_no_community_update_prefixes_add(): 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 30 permit 40.50.0.0/16 le 32', 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 40 permit 80.90.0.0/16 le 32', 'no ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny 0::/0 le 59', - 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny 0::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny ::/0 ge 65', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 30 permit fc01:20::/64 le 128', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 40 permit fc01:30::/64 le 128', 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 50 permit fc02::/64 le 128', ] ) +def test_set_handler_with_community_update_prefixes_remove(): + set_del_test( + "SET", + ("DEPLOYMENT_ID|5|1010:2020", { + "prefixes_v4": "10.20.30.0/24", + "prefixes_v6": "fc00:20::/64", + }), + [ + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 10 deny 0.0.0.0/0 le 17', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 20 permit 10.20.30.0/24 le 32', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 30 permit 30.50.0.0/16 le 32', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny ::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 30 permit fc00:20::/64 le 128', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 40 permit fc00:30::/64 le 128', + 'bgp community-list standard COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020 permit 1010:2020', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_V4 permit 10', + ' match ip address prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4', + ' match community COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_V6 permit 10', + ' match ipv6 address prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6', + ' match community COMMUNITY_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_V4 permit 65535', + ' set community 123:123 additive', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_V6 permit 65535', + ' set community 123:123 additive', + "" + ], + [ + 'no ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 10 deny 0.0.0.0/0 le 17', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V4 seq 20 permit 10.20.30.0/24 le 32', + 'no ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 20 deny ::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_1010:2020_V6 seq 30 permit fc00:20::/64 le 128', + ] + ) + +def test_set_handler_no_community_update_prefixes_remove(): + set_del_test( + "SET", + ("DEPLOYMENT_ID|5", { + "prefixes_v4": "20.20.30.0/24", + "prefixes_v6": "fc01:20::/64", + }), + [ + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 10 deny 0.0.0.0/0 le 17', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 20 permit 20.20.30.0/24 le 32', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 30 permit 40.50.0.0/16 le 32', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny ::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 30 permit fc01:20::/64 le 128', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 40 permit fc01:30::/64 le 128', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_V4 permit 30000', + ' match ip address prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_V6 permit 30000', + ' match ipv6 address prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_V4 permit 65535', + ' set community 123:123 additive', + 'route-map ALLOW_LIST_DEPLOYMENT_ID_5_V6 permit 65535', + ' set community 123:123 additive', + "" + ], + [ + 'no ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 10 deny 0.0.0.0/0 le 17', + 'ip prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V4 seq 20 permit 20.20.30.0/24 le 32', + 'no ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 10 deny ::/0 le 59', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 20 deny ::/0 ge 65', + 'ipv6 prefix-list PL_ALLOW_LIST_DEPLOYMENT_ID_5_COMMUNITY_empty_V6 seq 30 permit fc01:20::/64 le 128', + ] + ) + @patch.dict("sys.modules", swsscommon=swsscommon_module_mock) def test___set_handler_validate(): from bgpcfgd.managers_allow_list import BGPAllowListMgr diff --git a/src/sonic-build-hooks/hooks/apt b/src/sonic-build-hooks/hooks/apt new file mode 100755 index 000000000000..f4b0f97287b1 --- /dev/null +++ b/src/sonic-build-hooks/hooks/apt @@ -0,0 +1,5 @@ +#!/bin/bash + +. /usr/local/share/buildinfo/scripts/buildinfo_base.sh + +APT_REAL_COMMAND=$(get_command apt) $(dirname "$0")/apt-get "$@" diff --git a/src/sonic-build-hooks/hooks/apt-get b/src/sonic-build-hooks/hooks/apt-get index 9ae50a118650..bdff703d01d7 100755 --- a/src/sonic-build-hooks/hooks/apt-get +++ b/src/sonic-build-hooks/hooks/apt-get @@ -3,36 +3,28 @@ INSTALL= . /usr/local/share/buildinfo/scripts/buildinfo_base.sh -REAL_COMMAND=$(get_command apt-get) +REAL_COMMAND=$APT_REAL_COMMAND +[ -z "$REAL_COMMAND" ] && REAL_COMMAND=$(get_command apt-get) if [ -z "$REAL_COMMAND" ]; then echo "The command apt-get does not exist." 1>&2 exit 1 fi -VERSION_FILE="/usr/local/share/buildinfo/versions/versions-deb" -if [ "$ENABLE_VERSION_CONTROL_DEB" == "y" ]; then - for para in $@ - do - if [[ "$para" != -* ]]; then - continue - fi - if [ ! -z "$INSTALL" ]; then - if [[ "$para" == *=* ]]; then - continue - elif [[ "$para" == *=* ]]; then - continue - else - package=$para - if ! grep -q "^${package}=" $VERSION_FILE; then - echo "The version of the package ${package} is not specified." - exit 1 - fi - fi - elif [[ "$para" == "install" ]]; then - INSTALL=y - fi - done +INSTALL=$(check_apt_install "$@") +COMMAND_INFO="Locked by command: $REAL_COMMAND $@" +if [ "$INSTALL" == y ]; then + check_apt_version "$@" + lock_result=$(acquire_apt_installation_lock "$COMMAND_INFO" ) + $REAL_COMMAND "$@" + command_result=$? + [ "$lock_result" == y ] && release_apt_installation_lock + exit $command_result +else + if [[ "$1" == "purge" || "$@" == *" purge "* ]]; 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 + fi + $REAL_COMMAND "$@" fi - -$REAL_COMMAND "$@" diff --git a/src/sonic-build-hooks/scripts/buildinfo_base.sh b/src/sonic-build-hooks/scripts/buildinfo_base.sh index d46ffec18330..e1ef80b01162 100755 --- a/src/sonic-build-hooks/scripts/buildinfo_base.sh +++ b/src/sonic-build-hooks/scripts/buildinfo_base.sh @@ -12,6 +12,7 @@ VERSION_DEB_PREFERENCE=$BUILDINFO_PATH/versions/01-versions-deb WEB_VERSION_FILE=$VERSION_PATH/versions-web BUILD_WEB_VERSION_FILE=$BUILD_VERSION_PATH/versions-web REPR_MIRROR_URL_PATTERN='http:\/\/packages.trafficmanager.net\/debian' +DPKG_INSTALLTION_LOCK_FILE=/tmp/.dpkg_installation.lock . $BUILDINFO_PATH/config/buildinfo.config @@ -168,6 +169,10 @@ run_pip_command() elif [[ "$para" == *.whl ]]; then package_name=$(echo $para | cut -d- -f1 | tr _ .) $SUDO sed "/^${package_name}==/d" -i $tmp_version_file + elif [[ "$para" == *==* ]]; then + # fix pip package constraint conflict issue + package_name=$(echo $para | cut -d= -f1) + $SUDO sed "/^${package_name}==/d" -i $tmp_version_file fi done @@ -182,6 +187,83 @@ run_pip_command() return $result } +# Check if the command is to install the debian packages +# The apt/apt-get command format: apt/apt-get [options] {update|install} +check_apt_install() +{ + for para in "$@" + do + if [[ "$para" == -* ]]; then + continue + fi + + if [[ "$para" == "install" ]]; then + echo y + fi + + break + done +} + +# Print warning message if a debian package version not specified when debian version control enabled. +check_apt_version() +{ + VERSION_FILE="/usr/local/share/buildinfo/versions/versions-deb" + local install=$(check_apt_install "$@") + if [ "$ENABLE_VERSION_CONTROL_DEB" == "y" ] && [ "$install" == "y" ]; then + for para in "$@" + do + if [[ "$para" == -* ]]; then + continue + fi + + if [ "$para" == "install" ]; then + continue + fi + + if [[ "$para" == *=* ]]; then + continue + else + package=$para + if ! grep -q "^${package}=" $VERSION_FILE; then + echo "Warning: the version of the package ${package} is not specified." 1>&2 + fi + fi + done + fi +} + +acquire_apt_installation_lock() +{ + local result=n + local wait_in_second=10 + local count=60 + local info="$1" + for ((i=1; i<=$count; i++)); do + if [ -f $DPKG_INSTALLTION_LOCK_FILE ]; then + local lock_info=$(cat $DPKG_INSTALLTION_LOCK_FILE || true) + echo "Waiting dpkg lock for $wait_in_second, $i/$count, info: $lock_info" 1>&2 + sleep $wait_in_second + else + # Create file in an atomic operation + if (set -o noclobber; echo "$info">$DPKG_INSTALLTION_LOCK_FILE) &>/dev/null; then + result=y + break + else + echo "Failed to creat lock, Waiting dpkg lock for $wait_in_second, $i/$count, info: $lock_info" 1>&2 + sleep $wait_in_second + fi + fi + done + + echo $result +} + +release_apt_installation_lock() +{ + rm -f $DPKG_INSTALLTION_LOCK_FILE +} + ENABLE_VERSION_CONTROL_DEB=$(check_version_control "deb") ENABLE_VERSION_CONTROL_PY2=$(check_version_control "py2") ENABLE_VERSION_CONTROL_PY3=$(check_version_control "py3") diff --git a/src/sonic-build-hooks/scripts/collect_version_files b/src/sonic-build-hooks/scripts/collect_version_files index b62beb4a2115..a4b33eeaa897 100755 --- a/src/sonic-build-hooks/scripts/collect_version_files +++ b/src/sonic-build-hooks/scripts/collect_version_files @@ -1,14 +1,30 @@ #!/bin/bash +. /usr/local/share/buildinfo/scripts/buildinfo_base.sh + TARGET_PATH=$1 +[ -z "$TARGET_PATH" ] && TARGET_PATH=$POST_VERSION_PATH ARCH=$(dpkg --print-architecture) DIST=$(grep VERSION_CODENAME /etc/os-release | cut -d= -f2) ([ -z "$DIST" ] && grep -q jessie /etc/os-release) && DIST=jessie mkdir -p $TARGET_PATH chmod a+rw $TARGET_PATH -dpkg-query -W -f '${Package}==${Version}\n' > "${TARGET_PATH}/versions-deb-${DIST}-${ARCH}" -([ -x "/usr/local/bin/pip2" ] || [ -x "/usr/bin/pip2" ]) && pip2 freeze > "${TARGET_PATH}/versions-py2-${DIST}-${ARCH}" -([ -x "/usr/local/bin/pip3" ] || [ -x "/usr/bin/pip3" ]) && pip3 freeze > "${TARGET_PATH}/versions-py3-${DIST}-${ARCH}" + +dpkg-query -W -f '${Package}==${Version}\n' >> "${TARGET_PATH}/versions-deb-${DIST}-${ARCH}" +([ -x "/usr/local/bin/pip2" ] || [ -x "/usr/bin/pip2" ]) && pip2 freeze >> "${TARGET_PATH}/versions-py2-${DIST}-${ARCH}" +([ -x "/usr/local/bin/pip3" ] || [ -x "/usr/bin/pip3" ]) && pip3 freeze >> "${TARGET_PATH}/versions-py3-${DIST}-${ARCH}" + +## Add the the packages purged +[ -f $POST_VERSION_PATH/purge-versions-deb ] && cat $POST_VERSION_PATH/purge-versions-deb >> "${TARGET_PATH}/versions-deb-${DIST}-${ARCH}" + +## Print the unique and sorted result +sort -u "${TARGET_PATH}/versions-deb-${DIST}-${ARCH}" -o "${TARGET_PATH}/versions-deb-${DIST}-${ARCH}" +if [ -e "${TARGET_PATH}/versions-py2-${DIST}-${ARCH}" ]; then + sort -u "${TARGET_PATH}/versions-py2-${DIST}-${ARCH}" -o "${TARGET_PATH}/versions-py2-${DIST}-${ARCH}" +fi +if [ -e "${TARGET_PATH}/versions-py3-${DIST}-${ARCH}" ]; then + sort -u "${TARGET_PATH}/versions-py3-${DIST}-${ARCH}" -o "${TARGET_PATH}/versions-py3-${DIST}-${ARCH}" +fi exit 0 diff --git a/src/sonic-build-hooks/scripts/post_run_buildinfo b/src/sonic-build-hooks/scripts/post_run_buildinfo index 614389fd424c..e0d84d35bb08 100755 --- a/src/sonic-build-hooks/scripts/post_run_buildinfo +++ b/src/sonic-build-hooks/scripts/post_run_buildinfo @@ -2,8 +2,6 @@ . /usr/local/share/buildinfo/scripts/buildinfo_base.sh -[ -d $POST_VERSION_PATH ] && rm -rf $POST_VERSION_PATH - # Collect the version files collect_version_files $POST_VERSION_PATH diff --git a/src/sonic-build-hooks/scripts/pre_run_buildinfo b/src/sonic-build-hooks/scripts/pre_run_buildinfo index 3cf0cf7c8dfe..d9b927ab42f9 100755 --- a/src/sonic-build-hooks/scripts/pre_run_buildinfo +++ b/src/sonic-build-hooks/scripts/pre_run_buildinfo @@ -8,6 +8,8 @@ mkdir -p $BUILD_VERSION_PATH mkdir -p $LOG_PATH [ -d $PRE_VERSION_PATH ] && rm -rf $PRE_VERSION_PATH +[ -d $POST_VERSION_PATH ] && rm -rf $POST_VERSION_PATH +mkdir -p $POST_VERSION_PATH collect_version_files $PRE_VERSION_PATH symlink_build_hooks set_reproducible_mirrors diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index 121e3ed9e55c..35a6f564568f 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -37,6 +37,7 @@ backend_device_types = ['BackEndToRRouter', 'BackEndLeafRouter'] console_device_types = ['MgmtTsToR'] +dhcp_server_enabled_device_types = ['BmcMgmtToRRouter'] VLAN_SUB_INTERFACE_SEPARATOR = '.' VLAN_SUB_INTERFACE_VLAN_ID = '10' @@ -535,28 +536,36 @@ def parse_dpg(dpg, hname): vlan_members = {} vlan_member_list = {} dhcp_relay_table = {} - vlantype_name = "" - intf_vlan_mbr = defaultdict(list) + # Dict: vlan member (port/PortChannel) -> set of VlanID, in which the member if an untagged vlan member + untagged_vlan_mbr = defaultdict(set) for vintf in vlanintfs.findall(str(QName(ns, "VlanInterface"))): vlanid = vintf.find(str(QName(ns, "VlanID"))).text + vlantype = vintf.find(str(QName(ns, "Type"))) + if vlantype is None: + vlantype_name = "" + else: + vlantype_name = vlantype.text vintfmbr = vintf.find(str(QName(ns, "AttachTo"))).text vmbr_list = vintfmbr.split(';') - for i, member in enumerate(vmbr_list): - intf_vlan_mbr[member].append(vlanid) + if vlantype_name != "Tagged": + for member in vmbr_list: + untagged_vlan_mbr[member].add(vlanid) for vintf in vlanintfs.findall(str(QName(ns, "VlanInterface"))): vintfname = vintf.find(str(QName(ns, "Name"))).text vlanid = vintf.find(str(QName(ns, "VlanID"))).text vintfmbr = vintf.find(str(QName(ns, "AttachTo"))).text vlantype = vintf.find(str(QName(ns, "Type"))) - if vlantype != None: - vlantype_name = vintf.find(str(QName(ns, "Type"))).text + if vlantype is None: + vlantype_name = "" + else: + vlantype_name = vlantype.text vmbr_list = vintfmbr.split(';') for i, member in enumerate(vmbr_list): vmbr_list[i] = port_alias_map.get(member, member) sonic_vlan_member_name = "Vlan%s" % (vlanid) if vlantype_name == "Tagged": vlan_members[(sonic_vlan_member_name, vmbr_list[i])] = {'tagging_mode': 'tagged'} - elif len(intf_vlan_mbr[member]) > 1: + elif len(untagged_vlan_mbr[member]) > 1: vlan_members[(sonic_vlan_member_name, vmbr_list[i])] = {'tagging_mode': 'tagged'} else: vlan_members[(sonic_vlan_member_name, vmbr_list[i])] = {'tagging_mode': 'untagged'} @@ -1281,7 +1290,6 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw results = {} results['DEVICE_METADATA'] = {'localhost': { 'bgp_asn': bgp_asn, - 'deployment_id': deployment_id, 'region': region, 'cloudtype': cloudtype, 'docker_routing_config_mode': docker_routing_config_mode, @@ -1292,6 +1300,9 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw } } + if deployment_id is not None: + results['DEVICE_METADATA']['localhost']['deployment_id'] = deployment_id + cluster = [devices[key] for key in devices if key.lower() == hostname.lower()][0].get('cluster', "") if cluster: results['DEVICE_METADATA']['localhost']['cluster'] = cluster @@ -1684,6 +1695,10 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw } } + # Enable DHCP Server feature for specific device type + if current_device['type'] in dhcp_server_enabled_device_types: + results['DEVICE_METADATA']['localhost']['dhcp_server'] = 'enabled' + return results def get_tunnel_entries(tunnel_intfs, lo_intfs, hostname): diff --git a/src/sonic-config-engine/portconfig.py b/src/sonic-config-engine/portconfig.py index 51a4c438faf2..ea9985a3beb0 100644 --- a/src/sonic-config-engine/portconfig.py +++ b/src/sonic-config-engine/portconfig.py @@ -45,16 +45,25 @@ # # Helper Functions # + +# For python2 compatibility +def py2JsonStrHook(j): + if isinstance(j, unicode): + return j.encode('utf-8', 'backslashreplace') + if isinstance(j, list): + return [py2JsonStrHook(item) for item in j] + if isinstance(j, dict): + return {py2JsonStrHook(key): py2JsonStrHook(value) + for key, value in j.iteritems()} + return j + def readJson(filename): # Read 'platform.json' or 'hwsku.json' file try: with open(filename) as fp: - try: - data = json.load(fp) - except json.JSONDecodeError: - print("Json file does not exist") - data_dict = ast.literal_eval(json.dumps(data)) - return data_dict + if sys.version_info.major == 2: + return json.load(fp, object_hook=py2JsonStrHook) + return json.load(fp) except Exception as e: print("error occurred while parsing json: {}".format(sys.exc_info()[1])) return None @@ -63,12 +72,7 @@ def db_connect_configdb(namespace=None): """ Connect to configdb """ - try: - if namespace is not None: - swsscommon.SonicDBConfig.load_sonic_global_db_config(namespace=namespace) - config_db = swsscommon.ConfigDBConnector(use_unix_socket_path=True, namespace=namespace) - except Exception as e: - return None + config_db = swsscommon.ConfigDBConnector(use_unix_socket_path=True, namespace=namespace) if config_db is None: return None try: diff --git a/src/sonic-config-engine/sonic-cfggen b/src/sonic-config-engine/sonic-cfggen index bf93ad849fcb..b10002c40809 100755 --- a/src/sonic-config-engine/sonic-cfggen +++ b/src/sonic-config-engine/sonic-cfggen @@ -32,7 +32,7 @@ from functools import partial from minigraph import minigraph_encoder, parse_xml, parse_device_desc_xml, parse_asic_sub_role, parse_asic_switch_type from portconfig import get_port_config, get_breakout_mode from redis_bcc import RedisBytecodeCache -from sonic_py_common.multi_asic import get_asic_id_from_name, get_asic_device_id +from sonic_py_common.multi_asic import get_asic_id_from_name, get_asic_device_id, is_multi_asic from sonic_py_common import device_info from swsscommon.swsscommon import SonicV2Connector, ConfigDBConnector, SonicDBConfig, ConfigDBPipeConnector @@ -247,6 +247,19 @@ def _get_jinja2_env(paths): return env +def _must_field_by_yang(data, table, must_fields): + """ + Check if table contains must field based on yang definition + """ + if table not in data: + return + + for must_field in must_fields: + for _, fields in data[table].items(): + if must_field not in fields: + print(must_field, 'is a must field in', table, file=sys.stderr) + sys.exit(1) + def main(): parser=argparse.ArgumentParser(description="Render configuration file from minigraph data and jinja2 template.") group = parser.add_mutually_exclusive_group() @@ -296,6 +309,12 @@ def main(): 'localhost': {'namespace_id': namespace_id} } }) + # load db config + if not SonicDBConfig.isInit(): + if is_multi_asic(): + SonicDBConfig.load_sonic_global_db_config(namespace=asic_name) + else: + SonicDBConfig.load_sonic_db_config() if hwsku is not None: hardware_data = {'DEVICE_METADATA': {'localhost': { 'hwsku': hwsku @@ -335,6 +354,8 @@ def main(): deep_update(data, parse_xml(minigraph, platform, asic_name=asic_name)) else: deep_update(data, parse_xml(minigraph, port_config_file=args.port_config, asic_name=asic_name, hwsku_config_file=args.hwsku_config)) + # check if minigraph parser has speed and lanes in PORT table + _must_field_by_yang(data, 'PORT', ['speed', 'lanes']) if args.device_description is not None: deep_update(data, parse_device_desc_xml(args.device_description)) diff --git a/src/sonic-config-engine/tests/common_utils.py b/src/sonic-config-engine/tests/common_utils.py index 3d8a3029dad9..47fe9f37f2a4 100644 --- a/src/sonic-config-engine/tests/common_utils.py +++ b/src/sonic-config-engine/tests/common_utils.py @@ -1,4 +1,6 @@ import json +import filecmp +import os import re import sys @@ -31,3 +33,14 @@ def liststr_to_dict(liststr): return list_obj +def cmp(file1, file2): + """ compare files """ + try: + with open(file1, 'r') as f: + obj1 = json.load(f) + with open(file2, 'r') as f: + obj2 = json.load(f) + return obj1 == obj2 + except: + return filecmp.cmp(file1, file2) + diff --git a/src/sonic-config-engine/tests/multi_npu_data/sample-minigraph-noportchannel.xml b/src/sonic-config-engine/tests/multi_npu_data/sample-minigraph-noportchannel.xml index 460f71e21c2a..6ec84dc4fe31 100644 --- a/src/sonic-config-engine/tests/multi_npu_data/sample-minigraph-noportchannel.xml +++ b/src/sonic-config-engine/tests/multi_npu_data/sample-minigraph-noportchannel.xml @@ -1119,6 +1119,294 @@ 0 40000 + + DeviceInterface + + true + 1 + Ethernet-BP0 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP4 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP8 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP12 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP16 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP20 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP24 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP28 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP256 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP260 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP264 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP268 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP272 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP276 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP280 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP284 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP384 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP388 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP392 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP396 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP400 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP404 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP408 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP412 + + false + 0 + 0 + 40000 + true 0 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 5dac8e95bf1a..935d2c0c833a 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 @@ -1105,6 +1105,294 @@ 0 40000 + + DeviceInterface + + true + 1 + Ethernet-BP0 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP4 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP8 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP12 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP16 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP20 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP24 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP28 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP256 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP260 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP264 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP268 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP272 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP276 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP280 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP284 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP384 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP388 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP392 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP396 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP400 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP404 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP408 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet-BP412 + + false + 0 + 0 + 40000 + true 0 diff --git a/src/sonic-config-engine/tests/multi_npu_data/sample_port_config.ini b/src/sonic-config-engine/tests/multi_npu_data/sample_port_config.ini new file mode 100644 index 000000000000..d2cdb5fedd27 --- /dev/null +++ b/src/sonic-config-engine/tests/multi_npu_data/sample_port_config.ini @@ -0,0 +1,34 @@ +# name lanes alias index asic_port_name role +Ethernet0 33,34,35,36 Ethernet1/1 0 Eth0-ASIC0 Ext +Ethernet4 29,30,31,32 Ethernet1/2 1 Eth1-ASIC0 Ext +Ethernet8 41,42,43,44 Ethernet1/3 2 Eth2-ASIC0 Ext +Ethernet12 37,38,39,40 Ethernet1/4 3 Eth3-ASIC0 Ext +Ethernet-BP0 13,14,15,16 Eth4-ASIC0 4 Eth4-ASIC0 Int +Ethernet-BP4 17,18,19,20 Eth5-ASIC0 5 Eth5-ASIC0 Int +Ethernet-BP8 21,22,23,24 Eth6-ASIC0 6 Eth6-ASIC0 Int +Ethernet-BP12 25,26,27,28 Eth7-ASIC0 7 Eth7-ASIC0 Int +Ethernet16 33,34,35,36 Ethernet1/5 8 Eth0-ASIC1 Ext +Ethernet20 29,30,31,32 Ethernet1/6 9 Eth1-ASIC1 Ext +Ethernet24 41,42,43,44 Ethernet1/7 10 Eth2-ASIC1 Ext +Ethernet28 37,38,39,40 Ethernet1/8 11 Eth3-ASIC1 Ext +Ethernet-BP16 13,14,15,16 Eth4-ASIC1 12 Eth4-ASIC1 Int +Ethernet-BP20 17,18,19,20 Eth5-ASIC1 13 Eth5-ASIC1 Int +Ethernet-BP24 21,22,23,24 Eth6-ASIC1 14 Eth6-ASIC1 Int +Ethernet-BP28 25,26,27,28 Eth7-ASIC1 15 Eth7-ASIC1 Int +Ethernet-BP256 61,62,63,64 Eth0-ASIC2 16 Eth0-ASIC2 Int +Ethernet-BP260 57,58,59,60 Eth1-ASIC2 17 Eth1-ASIC2 Int +Ethernet-BP264 53,54,55,56 Eth2-ASIC2 18 Eth2-ASIC2 Int +Ethernet-BP268 49,50,51,52 Eth3-ASIC2 19 Eth3-ASIC2 Int +Ethernet-BP272 45,46,47,48 Eth4-ASIC2 20 Eth4-ASIC2 Int +Ethernet-BP276 41,42,43,44 Eth5-ASIC2 21 Eth5-ASIC2 Int +Ethernet-BP280 37,38,39,40 Eth6-ASIC2 22 Eth6-ASIC2 Int +Ethernet-BP284 33,34,35,36 Eth7-ASIC2 23 Eth7-ASIC2 Int +Ethernet-BP384 29,30,31,32 Eth0-ASIC3 24 Eth0-ASIC3 Int +Ethernet-BP388 25,26,27,28 Eth1-ASIC3 25 Eth1-ASIC3 Int +Ethernet-BP392 21,22,23,24 Eth2-ASIC3 26 Eth2-ASIC3 Int +Ethernet-BP396 17,18,19,20 Eth3-ASIC3 27 Eth3-ASIC3 Int +Ethernet-BP400 13,14,15,16 Eth4-ASIC3 28 Eth4-ASIC3 Int +Ethernet-BP404 9,10,11,12 Eth5-ASIC3 29 Eth5-ASIC3 Int +Ethernet-BP408 5,6,7,8 Eth6-ASIC3 30 Eth6-ASIC3 Int +Ethernet-BP412 1,2,3,4 Eth7-ASIC3 31 Eth7-ASIC3 Int + diff --git a/src/sonic-config-engine/tests/pc-test-graph.xml b/src/sonic-config-engine/tests/pc-test-graph.xml index 814686d8ff06..4a7ecabaf9f4 100644 --- a/src/sonic-config-engine/tests/pc-test-graph.xml +++ b/src/sonic-config-engine/tests/pc-test-graph.xml @@ -202,6 +202,400 @@ + + + + + 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 + + + Force10-S6000 + + + diff --git a/src/sonic-config-engine/tests/radv-test-sample-graph.xml b/src/sonic-config-engine/tests/radv-test-sample-graph.xml new file mode 100644 index 000000000000..94cb73d67464 --- /dev/null +++ b/src/sonic-config-engine/tests/radv-test-sample-graph.xml @@ -0,0 +1,947 @@ + + + + + + switch-t0 + 10.1.0.32 + BGPMonitor + 10.20.30.40 + 30 + 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 + 10.0.0.58 + ARISTA02T1 + 10.0.0.59 + 1 + 180 + 60 + + + switch-t0 + FC00::75 + ARISTA02T1 + FC00::76 + 1 + 180 + 60 + + + false + switch-t0 + 10.0.0.60 + ARISTA03T1 + 10.0.0.61 + 1 + 180 + 60 + + + switch-t0 + FC00::79 + ARISTA03T1 + FC00::7A + 1 + 180 + 60 + + + false + switch-t0 + 10.0.0.62 + ARISTA04T1 + 10.0.0.63 + 1 + 180 + 60 + + + switch-t0 + FC00::7D + ARISTA04T1 + FC00::7E + 1 + 180 + 60 + + + + + 1 + + BGPMonitor + + + BGPPeer +
10.1.0.32
+ + + +
+
+ +
+ + 65100 + switch-t0 + + +
10.0.0.57
+ + + +
+ +
10.0.0.59
+ + + +
+ +
10.0.0.61
+ + + +
+ +
10.0.0.63
+ + + +
+
+ +
+ + 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 + + + LoopbackIP1 + Loopback1 + + 10.10.0.99/32 + + 10.10.0.99/32 + + + LoopbackIP2 + Loopback2 + + 10.21.0.64/32 + + 10.21.0.64/32 + + + LoopbackIP3 + Loopback3 + + 10.21.64.2/32 + + 10.21.64.2/32 + + + + + HostIP + eth0 + + 10.0.0.100/24 + + 10.0.0.100/24 + + + HostIP + eth0 + + 2603:10e2:0:2902::8/64 + + 2603:10e2:0:2902::8/64 + + + + + + + switch-t0 + + + PortChannel01 + fortyGigE0/112 + + + + PortChannel02 + fortyGigE0/116 + + + + PortChannel03 + fortyGigE0/120 + + + + PortChannel04 + fortyGigE0/124 + + + + + + Vlan1000 + fortyGigE0/4;fortyGigE0/8;fortyGigE0/12;fortyGigE0/16;fortyGigE0/20;fortyGigE0/24;fortyGigE0/28;fortyGigE0/32;fortyGigE0/36;fortyGigE0/40;fortyGigE0/44;fortyGigE0/48;fortyGigE0/52;fortyGigE0/56;fortyGigE0/60;fortyGigE0/64;fortyGigE0/68;fortyGigE0/72;fortyGigE0/76;fortyGigE0/80;fortyGigE0/84;fortyGigE0/88;fortyGigE0/92;fortyGigE0/96 + False + 0.0.0.0/0 + + + 192.0.0.1;192.0.0.2 + fc02:2000::1;fc02:2000::2 + 1000 + 1000 + 192.168.0.0/27 + + + + + Vlan2000 + fortyGigE0/112;fortyGigE0/116;fortyGigE0/120 + False + 0.0.0.0/0 + + + + 2000 + 2000 + 192.168.200.0/27 + + + + + Vlan99 + fortyGigE0/100 + False + 0.0.0.0/0 + + UserDefinedL2Vlan + 192.0.0.1;192.0.0.2 + 99 + 99 + + + + + + Vlan98 + fortyGigE0/100;PortChannel01;PortChannel03 + False + 0.0.0.0/0 + + UserDefinedL2Vlan + 192.0.0.1;192.0.0.2 + 98 + 98 + + + + + + + + + PortChannel01 + 10.0.0.56/31 + + + + PortChannel01 + FC00::71/126 + + + + PortChannel02 + 10.0.0.58/31 + + + + PortChannel02 + FC00::75/126 + + + + PortChannel03 + 10.0.0.60/31 + + + + PortChannel03 + FC00::79/126 + + + + PortChannel04 + 10.0.0.62/31 + + + + PortChannel04 + FC00::7D/126 + + + + Vlan1000 + 192.168.0.1/27 + + + + Vlan1000 + fc02:1000::1/64 + + + + Vlan2000 + 192.168.200.1/27 + + + + Vlan1000 + fc02:2000::1/64 + + + + + + ERSPAN + everflow + Everflow + + + ERSPANv6 + everflowV6 + Everflow + + + EGRESS_ERSPAN + everflow_egress + Everflow + + + PortChannel01;PortChannel02;PortChannel03;PortChannel04 + DataAclIngress + DataPlane + + + PortChannel01;PortChannel02;Vlan98 + DataAclEgress + DataPlane + + + SNMP + SNMP_ACL + SNMP + + + NTP + NTP_ACL + NTP + + + SSH + SSH_ACL + SSH + + + SSH + ROUTER-PROTECT + SSH + + + SNMP + ROUTER-PROTECT + SNMP + + + NTP + NTP_ACL + + + + + + + + + + DeviceInterfaceLink + ARISTA01T1 + Ethernet1/1 + switch-t0 + fortyGigE0/112 + + + DeviceInterfaceLink + ARISTA02T1 + Ethernet1/1 + switch-t0 + fortyGigE0/116 + + + DeviceInterfaceLink + ARISTA03T1 + Ethernet1/1 + switch-t0 + fortyGigE0/120 + + + DeviceInterfaceLink + ARISTA04T1 + Ethernet1/1 + switch-t0 + fortyGigE0/124 + 100000 + + + DeviceInterfaceLink + 100000 + switch-t0 + fortyGigE0/4 + true + ARISTA05T1 + Ethernet1/33 + true + + + DeviceInterfaceLink + Servers0 + eth0 + switch-t0 + fortyGigE0/4 + + + DeviceInterfaceLink + Servers100 + eth0 + switch-t0 + fortyGigE0/100 + + + + + switch-t0 + Force10-S6000 + + + ARISTA01T1 + Arista + + + ARISTA02T1 + Arista + + + ARISTA03T1 + Arista + + + ARISTA04T1 + Arista + + + + + + + + DeviceInterface + + true + 1 + Ethernet0 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet8 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet12 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet16 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet20 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet24 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet28 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet32 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet36 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet40 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet44 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet48 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet52 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet56 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet60 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet64 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet68 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet72 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet76 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet80 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet84 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet88 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet92 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet96 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet100 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet104 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet108 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet112 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet116 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet120 + + false + 0 + 0 + 40000 + + + Force10-S6000 + + + + + + + switch-t0 + + + ErspanDestinationIpv4 + + 2.2.2.2 + + + + + + + + + + + + + AutoNegotiation + + True + + + FECDisabled + + True + + + ARISTA05T1:Ethernet1/33;switch-t0:fortyGigE0/4 + + + + + + AutoNegotiation + + False + + + FECDisabled + + True + + + ARISTA06T1:Ethernet1/34;switch-t0:fortyGigE0/8 + + + + + + + switch-t0 + + + DeploymentId + + 1 + + + + + + + switch-t0 + Force10-S6000 +
diff --git a/src/sonic-config-engine/tests/sample-arista-7050-t0-minigraph.xml b/src/sonic-config-engine/tests/sample-arista-7050-t0-minigraph.xml index 4d216b30f203..4d79d6f2c457 100644 --- a/src/sonic-config-engine/tests/sample-arista-7050-t0-minigraph.xml +++ b/src/sonic-config-engine/tests/sample-arista-7050-t0-minigraph.xml @@ -463,6 +463,66 @@ + + DeviceInterface + + true + 1 + Ethernet0 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet1 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet2 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet3 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet4 + + false + 0 + 0 + 40000 + DeviceInterface 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 new file mode 100644 index 000000000000..9ffb8230a6bf --- /dev/null +++ b/src/sonic-config-engine/tests/sample-arista-7050cx3-dualtor-minigraph.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-7260-dualtor-minigraph.xml b/src/sonic-config-engine/tests/sample-arista-7260-dualtor-minigraph.xml new file mode 100644 index 000000000000..01a42f934726 --- /dev/null +++ b/src/sonic-config-engine/tests/sample-arista-7260-dualtor-minigraph.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-t1-minigraph.xml b/src/sonic-config-engine/tests/sample-arista-7260-t1-minigraph.xml new file mode 100644 index 000000000000..4367b705a11a --- /dev/null +++ b/src/sonic-config-engine/tests/sample-arista-7260-t1-minigraph.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-7800r3-48cq2-lc-t2-minigraph.xml b/src/sonic-config-engine/tests/sample-arista-7800r3-48cq2-lc-t2-minigraph.xml new file mode 100644 index 000000000000..f2332c5cacd5 --- /dev/null +++ b/src/sonic-config-engine/tests/sample-arista-7800r3-48cq2-lc-t2-minigraph.xml @@ -0,0 +1,2786 @@ + + + + + + dut-lc4 + 1.1.1.3 + dut-lc3 + 1.1.1.1 + true + + + dut-lc5 + 1.1.1.5 + dut-lc3 + 1.1.1.1 + true + + + + + 65001 + dut-lc4 + + + + + + 65001 + dut-lc5 + + + + + + 65001 + dut-lc3 + + +
1.1.1.1
+ + +
+ +
1.1.1.1
+ + +
+
+ +
+
+
+ + + + + + HostIP + Loopback0 + + 10.1.0.1/32 + + 10.1.0.1/32 + + + HostIP + Loopback0 + + FC00:10::1/128 + + FC00:10::1/128 + + + + + ManagementIP1 + eth0 + 10.240.76.57/25 + + + ManagementIP2 + eth0 + fdfd:5c41:712d:e049::af0:4c39/64 + + + + + Ethernet-IB0 + port + 1.1.1.1/32 + + + Ethernet-IB0 + port + fc00:3000::1/128 + + + + + + dut-lc3 + + + + + + + IPInterface + + Ethernet1/1 + 10.0.0.2/31 + + + IPInterface + + Ethernet10/1 + 10.0.0.4/31 + + + IPInterface + + Ethernet11/1 + 10.0.0.6/31 + + + IPInterface + + Ethernet12/1 + 10.0.0.8/31 + + + IPInterface + + Ethernet13/1 + 10.0.0.10/31 + + + IPInterface + + Ethernet14/1 + 10.0.0.12/31 + + + IPInterface + + Ethernet15/1 + 10.0.0.14/31 + + + IPInterface + + Ethernet16/1 + 10.0.0.16/31 + + + IPInterface + + Ethernet17/1 + 10.0.0.18/31 + + + IPInterface + + Ethernet18/1 + 10.0.0.20/31 + + + IPInterface + + Ethernet19/1 + 10.0.0.22/31 + + + IPInterface + + Ethernet2/1 + 10.0.0.24/31 + + + IPInterface + + Ethernet20/1 + 10.0.0.26/31 + + + IPInterface + + Ethernet21/1 + 10.0.0.28/31 + + + IPInterface + + Ethernet22/1 + 10.0.0.30/31 + + + IPInterface + + Ethernet23/1 + 10.0.0.32/31 + + + IPInterface + + Ethernet24/1 + 10.0.0.34/31 + + + IPInterface + + Ethernet25/1 + 10.0.0.36/31 + + + IPInterface + + Ethernet26/1 + 10.0.0.38/31 + + + IPInterface + + Ethernet27/1 + 10.0.0.40/31 + + + IPInterface + + Ethernet28/1 + 10.0.0.42/31 + + + IPInterface + + Ethernet29/1 + 10.0.0.44/31 + + + IPInterface + + Ethernet3/1 + 10.0.0.46/31 + + + IPInterface + + Ethernet30/1 + 10.0.0.48/31 + + + IPInterface + + Ethernet31/1 + 10.0.0.50/31 + + + IPInterface + + Ethernet32/1 + 10.0.0.52/31 + + + IPInterface + + Ethernet33/1 + 10.0.0.54/31 + + + IPInterface + + Ethernet34/1 + 10.0.0.56/31 + + + IPInterface + + Ethernet35/1 + 10.0.0.58/31 + + + IPInterface + + Ethernet36/1 + 10.0.0.60/31 + + + IPInterface + + Ethernet37/1 + 10.0.0.62/31 + + + IPInterface + + Ethernet38/1 + 10.0.0.64/31 + + + IPInterface + + Ethernet39/1 + 10.0.0.66/31 + + + IPInterface + + Ethernet4/1 + 10.0.0.68/31 + + + IPInterface + + Ethernet40/1 + 10.0.0.70/31 + + + IPInterface + + Ethernet42/1 + 10.0.0.72/31 + + + IPInterface + + Ethernet45/1 + 10.0.0.74/31 + + + IPInterface + + Ethernet46/1 + 10.0.0.76/31 + + + IPInterface + + Ethernet47/1 + 10.0.0.78/31 + + + IPInterface + + Ethernet48/1 + 10.0.0.80/31 + + + IPInterface + + Ethernet5/1 + 10.0.0.82/31 + + + IPInterface + + Ethernet6/1 + 10.0.0.84/31 + + + IPInterface + + Ethernet7/1 + 10.0.0.86/31 + + + IPInterface + + Ethernet8/1 + 10.0.0.88/31 + + + IPInterface + + Ethernet9/1 + 10.0.0.90/31 + + + IPInterface + + Ethernet-Rec0 + 10.0.0.92/31 + + + IPInterface + + Ethernet-IB0 + 1.1.1.1/32 + + + + + + + + + + + + DeviceInterfaceLink + 100000 + nvm473 + Ethernet180 + dut-lc3 + Ethernet0 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet20 + dut-lc3 + Ethernet36 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet24 + dut-lc3 + Ethernet40 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet28 + dut-lc3 + Ethernet44 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet32 + dut-lc3 + Ethernet48 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet40 + dut-lc3 + Ethernet52 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet36 + dut-lc3 + Ethernet56 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet44 + dut-lc3 + Ethernet60 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet132 + dut-lc3 + Ethernet64 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet128 + dut-lc3 + Ethernet68 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet136 + dut-lc3 + Ethernet72 + + + DeviceInterfaceLink + 100000 + nvm473 + Ethernet176 + dut-lc3 + Ethernet4 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet140 + dut-lc3 + Ethernet76 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet144 + dut-lc3 + Ethernet80 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet148 + dut-lc3 + Ethernet84 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet152 + dut-lc3 + Ethernet88 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet156 + dut-lc3 + Ethernet92 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet64 + dut-lc3 + Ethernet96 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet68 + dut-lc3 + Ethernet100 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet72 + dut-lc3 + Ethernet104 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet76 + dut-lc3 + Ethernet108 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet80 + dut-lc3 + Ethernet112 + + + DeviceInterfaceLink + 100000 + nvm473 + Ethernet188 + dut-lc3 + Ethernet8 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet84 + dut-lc3 + Ethernet116 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet88 + dut-lc3 + Ethernet120 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet92 + dut-lc3 + Ethernet124 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet96 + dut-lc3 + Ethernet128 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet100 + dut-lc3 + Ethernet132 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet104 + dut-lc3 + Ethernet136 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet108 + dut-lc3 + Ethernet140 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet240 + dut-lc3 + Ethernet144 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet244 + dut-lc3 + Ethernet148 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet248 + dut-lc3 + Ethernet152 + + + DeviceInterfaceLink + 100000 + nvm473 + Ethernet184 + dut-lc3 + Ethernet12 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet252 + dut-lc3 + Ethernet156 + + + DeviceInterfaceLink + 100000 + nvm473 + Ethernet192 + dut-lc3 + Ethernet164 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet112 + dut-lc3 + Ethernet176 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet116 + dut-lc3 + Ethernet180 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet120 + dut-lc3 + Ethernet184 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet124 + dut-lc3 + Ethernet188 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet0 + dut-lc3 + Ethernet16 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet4 + dut-lc3 + Ethernet20 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet8 + dut-lc3 + Ethernet24 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet12 + dut-lc3 + Ethernet28 + + + DeviceInterfaceLink + 100000 + nv338 + Ethernet16 + dut-lc3 + Ethernet32 + + + + + dut-lc3 + Arista-7800R3-48CQ2-C48 + + + + + + + dut-lc3 + + + ForcedMgmtRoutes + + 172.16.0.0/12;10.80.0.0/12;10.64.0.0/14;10.240.0.0/13 + + ForcedMgmtRoutes + + FD7A:629F:52A4::/48;FDFD:5C41:712D::/48 + + + SwitchId + + 0 + + + NtpResources + time.aristanetworks.com + + + SwitchType + + voq + + + MaxCores + + 16 + + + SubRole + + + + + + + + + + + Arista-7800R3-48CQ2-C48 + + + Ethernet1/1 + eth1/1-connected-to-nvm473@eth46/1 + 100000 + rs + + + Ethernet10/1 + eth10/1-connected-to-nv338@eth6/1 + 100000 + rs + + + Ethernet11/1 + eth11/1-connected-to-nv338@eth7/1 + 100000 + rs + + + Ethernet12/1 + eth12/1-connected-to-nv338@eth8/1 + 100000 + rs + + + Ethernet13/1 + eth13/1-connected-to-nv338@eth9/1 + 100000 + rs + + + Ethernet14/1 + eth14/1-connected-to-nv338@eth11/1 + 100000 + rs + + + Ethernet15/1 + eth15/1-connected-to-nv338@eth10/1 + 100000 + rs + + + Ethernet16/1 + eth16/1-connected-to-nv338@eth12/1 + 100000 + rs + + + Ethernet17/1 + eth17/1-connected-to-nv338@eth34/1 + 100000 + rs + + + Ethernet18/1 + eth18/1-connected-to-nv338@eth33/1 + 100000 + rs + + + Ethernet19/1 + eth19/1-connected-to-nv338@eth35/1 + 100000 + rs + + + Ethernet2/1 + eth2/1-connected-to-nvm473@eth45/1 + 100000 + rs + + + Ethernet20/1 + eth20/1-connected-to-nv338@eth36/1 + 100000 + rs + + + Ethernet21/1 + eth21/1-connected-to-nv338@eth37/1 + 100000 + rs + + + Ethernet22/1 + eth22/1-connected-to-nv338@eth38/1 + 100000 + none + + + Ethernet23/1 + eth23/1-connected-to-nv338@eth39/1 + 100000 + none + + + Ethernet24/1 + eth24/1-connected-to-nv338@eth40/1 + 100000 + none + + + Ethernet25/1 + eth25/1-connected-to-nv338@eth17/1 + 100000 + none + + + Ethernet26/1 + eth26/1-connected-to-nv338@eth18/1 + 100000 + none + + + Ethernet27/1 + eth27/1-connected-to-nv338@eth19/1 + 100000 + none + + + Ethernet28/1 + eth28/1-connected-to-nv338@eth20/1 + 100000 + rs + + + Ethernet29/1 + eth29/1-connected-to-nv338@eth21/1 + 100000 + rs + + + Ethernet3/1 + eth3/1-connected-to-nvm473@eth48/1 + 100000 + rs + + + Ethernet30/1 + eth30/1-connected-to-nv338@eth22/1 + 100000 + rs + + + Ethernet31/1 + eth31/1-connected-to-nv338@eth23/1 + 100000 + rs + + + Ethernet32/1 + eth32/1-connected-to-nv338@eth24/1 + 100000 + rs + + + Ethernet33/1 + eth33/1-connected-to-nv338@eth25/1 + 100000 + rs + + + Ethernet34/1 + eth34/1-connected-to-nv338@eth26/1 + 100000 + rs + + + Ethernet35/1 + eth35/1-connected-to-nv338@eth27/1 + 100000 + rs + + + Ethernet36/1 + eth36/1-connected-to-nv338@eth28/1 + 100000 + rs + + + Ethernet37/1 + eth37/1-connected-to-nv338@eth61/1 + 100000 + rs + + + Ethernet38/1 + eth38/1-connected-to-nv338@eth62/1 + 100000 + rs + + + Ethernet39/1 + eth39/1-connected-to-nv338@eth63/1 + 100000 + rs + + + Ethernet4/1 + eth4/1-connected-to-nvm473@eth47/1 + 100000 + rs + + + Ethernet40/1 + eth40/1-connected-to-nv338@eth64/1 + 100000 + rs + + + Ethernet42/1 + eth42/1-connected-to-nvm473@eth49/1 + 100000 + rs + + + Ethernet45/1 + eth45/1-connected-to-nv338@eth29/1 + 100000 + rs + + + Ethernet46/1 + eth46/1-connected-to-nv338@eth30/1 + 100000 + rs + + + Ethernet47/1 + eth47/1-connected-to-nv338@eth31/1 + 100000 + rs + + + Ethernet48/1 + eth48/1-connected-to-nv338@eth32/1 + 100000 + rs + + + Ethernet5/1 + eth5/1-connected-to-nv338@eth1/1 + 100000 + rs + + + Ethernet6/1 + eth6/1-connected-to-nv338@eth2/1 + 100000 + rs + + + Ethernet7/1 + eth7/1-connected-to-nv338@eth3/1 + 100000 + rs + + + Ethernet8/1 + eth8/1-connected-to-nv338@eth4/1 + 100000 + rs + + + Ethernet9/1 + eth9/1-connected-to-nv338@eth5/1 + 100000 + rs + + + + + eth0 + eth0 + 1000 + + + eth0 + eth0 + 1000 + + + + + Cpu0 + dut-lc3 + Asic0 + 10000 + 1 + 0 + 0 + 0 + 8 + + + Ethernet0 + dut-lc3 + Asic0 + 100000 + 2 + 0 + 0 + 1 + 8 + + + Ethernet4 + dut-lc3 + Asic0 + 100000 + 3 + 0 + 0 + 2 + 8 + + + Ethernet8 + dut-lc3 + Asic0 + 100000 + 4 + 0 + 0 + 3 + 8 + + + Ethernet12 + dut-lc3 + Asic0 + 100000 + 5 + 0 + 0 + 4 + 8 + + + Ethernet16 + dut-lc3 + Asic0 + 100000 + 6 + 0 + 0 + 5 + 8 + + + Ethernet20 + dut-lc3 + Asic0 + 100000 + 7 + 0 + 0 + 6 + 8 + + + Ethernet24 + dut-lc3 + Asic0 + 100000 + 8 + 0 + 0 + 7 + 8 + + + Ethernet28 + dut-lc3 + Asic0 + 100000 + 9 + 0 + 0 + 8 + 8 + + + Ethernet32 + dut-lc3 + Asic0 + 100000 + 10 + 0 + 0 + 9 + 8 + + + Ethernet36 + dut-lc3 + Asic0 + 100000 + 11 + 0 + 0 + 10 + 8 + + + Ethernet40 + dut-lc3 + Asic0 + 100000 + 12 + 0 + 0 + 11 + 8 + + + Ethernet44 + dut-lc3 + Asic0 + 100000 + 13 + 0 + 0 + 12 + 8 + + + Ethernet48 + dut-lc3 + Asic0 + 100000 + 14 + 0 + 0 + 13 + 8 + + + Ethernet52 + dut-lc3 + Asic0 + 100000 + 15 + 0 + 0 + 14 + 8 + + + Ethernet56 + dut-lc3 + Asic0 + 100000 + 16 + 0 + 0 + 15 + 8 + + + Ethernet60 + dut-lc3 + Asic0 + 100000 + 17 + 0 + 0 + 16 + 8 + + + Ethernet64 + dut-lc3 + Asic0 + 100000 + 18 + 0 + 0 + 17 + 8 + + + Ethernet68 + dut-lc3 + Asic0 + 100000 + 19 + 0 + 0 + 18 + 8 + + + Ethernet72 + dut-lc3 + Asic0 + 100000 + 20 + 0 + 0 + 19 + 8 + + + Ethernet76 + dut-lc3 + Asic0 + 100000 + 21 + 0 + 0 + 20 + 8 + + + Ethernet80 + dut-lc3 + Asic0 + 100000 + 22 + 0 + 0 + 21 + 8 + + + Ethernet84 + dut-lc3 + Asic0 + 100000 + 23 + 0 + 0 + 22 + 8 + + + Ethernet88 + dut-lc3 + Asic0 + 100000 + 24 + 0 + 0 + 23 + 8 + + + Ethernet92 + dut-lc3 + Asic0 + 100000 + 25 + 0 + 0 + 24 + 8 + + + Ethernet96 + dut-lc3 + Asic0 + 100000 + 26 + 0 + 1 + 25 + 8 + + + Ethernet100 + dut-lc3 + Asic0 + 100000 + 27 + 0 + 1 + 26 + 8 + + + Ethernet104 + dut-lc3 + Asic0 + 100000 + 28 + 0 + 1 + 27 + 8 + + + Ethernet108 + dut-lc3 + Asic0 + 100000 + 29 + 0 + 1 + 28 + 8 + + + Ethernet112 + dut-lc3 + Asic0 + 100000 + 30 + 0 + 1 + 29 + 8 + + + Ethernet116 + dut-lc3 + Asic0 + 100000 + 31 + 0 + 1 + 30 + 8 + + + Ethernet120 + dut-lc3 + Asic0 + 100000 + 32 + 0 + 1 + 31 + 8 + + + Ethernet124 + dut-lc3 + Asic0 + 100000 + 33 + 0 + 1 + 32 + 8 + + + Ethernet128 + dut-lc3 + Asic0 + 100000 + 34 + 0 + 1 + 33 + 8 + + + Ethernet132 + dut-lc3 + Asic0 + 100000 + 35 + 0 + 1 + 34 + 8 + + + Ethernet136 + dut-lc3 + Asic0 + 100000 + 36 + 0 + 1 + 35 + 8 + + + Ethernet140 + dut-lc3 + Asic0 + 100000 + 37 + 0 + 1 + 36 + 8 + + + Ethernet144 + dut-lc3 + Asic0 + 100000 + 38 + 0 + 1 + 37 + 8 + + + Ethernet148 + dut-lc3 + Asic0 + 100000 + 39 + 0 + 1 + 38 + 8 + + + Ethernet152 + dut-lc3 + Asic0 + 100000 + 40 + 0 + 1 + 39 + 8 + + + Ethernet156 + dut-lc3 + Asic0 + 100000 + 41 + 0 + 1 + 40 + 8 + + + Ethernet160 + dut-lc3 + Asic0 + 100000 + 42 + 0 + 1 + 41 + 8 + + + Ethernet164 + dut-lc3 + Asic0 + 100000 + 43 + 0 + 1 + 42 + 8 + + + Ethernet168 + dut-lc3 + Asic0 + 100000 + 44 + 0 + 1 + 43 + 8 + + + Ethernet172 + dut-lc3 + Asic0 + 100000 + 45 + 0 + 1 + 44 + 8 + + + Ethernet176 + dut-lc3 + Asic0 + 100000 + 46 + 0 + 1 + 45 + 8 + + + Ethernet180 + dut-lc3 + Asic0 + 100000 + 47 + 0 + 1 + 46 + 8 + + + Ethernet184 + dut-lc3 + Asic0 + 100000 + 48 + 0 + 1 + 47 + 8 + + + Ethernet188 + dut-lc3 + Asic0 + 100000 + 49 + 0 + 1 + 48 + 8 + + + Ethernet-Rec0 + dut-lc3 + Asic0 + 400000 + 50 + 0 + 0 + 221 + 8 + + + Ethernet-IB0 + dut-lc3 + Asic0 + 400000 + 51 + 0 + 1 + 222 + 8 + + + Cpu0 + dut-lc4 + Asic0 + 10000 + 52 + 2 + 0 + 0 + 8 + + + Ethernet0 + dut-lc4 + Asic0 + 100000 + 53 + 2 + 0 + 1 + 8 + + + Ethernet4 + dut-lc4 + Asic0 + 100000 + 54 + 2 + 0 + 2 + 8 + + + Ethernet8 + dut-lc4 + Asic0 + 100000 + 55 + 2 + 0 + 3 + 8 + + + Ethernet12 + dut-lc4 + Asic0 + 100000 + 56 + 2 + 0 + 4 + 8 + + + Ethernet16 + dut-lc4 + Asic0 + 100000 + 57 + 2 + 0 + 5 + 8 + + + Ethernet20 + dut-lc4 + Asic0 + 100000 + 58 + 2 + 0 + 6 + 8 + + + Ethernet24 + dut-lc4 + Asic0 + 100000 + 59 + 2 + 0 + 7 + 8 + + + Ethernet28 + dut-lc4 + Asic0 + 100000 + 60 + 2 + 0 + 8 + 8 + + + Ethernet32 + dut-lc4 + Asic0 + 100000 + 61 + 2 + 0 + 9 + 8 + + + Ethernet36 + dut-lc4 + Asic0 + 100000 + 62 + 2 + 0 + 10 + 8 + + + Ethernet40 + dut-lc4 + Asic0 + 100000 + 63 + 2 + 0 + 11 + 8 + + + Ethernet44 + dut-lc4 + Asic0 + 100000 + 64 + 2 + 0 + 12 + 8 + + + Ethernet48 + dut-lc4 + Asic0 + 100000 + 65 + 2 + 0 + 13 + 8 + + + Ethernet52 + dut-lc4 + Asic0 + 100000 + 66 + 2 + 0 + 14 + 8 + + + Ethernet56 + dut-lc4 + Asic0 + 100000 + 67 + 2 + 0 + 15 + 8 + + + Ethernet60 + dut-lc4 + Asic0 + 100000 + 68 + 2 + 0 + 16 + 8 + + + Ethernet64 + dut-lc4 + Asic0 + 100000 + 69 + 2 + 0 + 17 + 8 + + + Ethernet68 + dut-lc4 + Asic0 + 100000 + 70 + 2 + 0 + 18 + 8 + + + Ethernet72 + dut-lc4 + Asic0 + 100000 + 71 + 2 + 0 + 19 + 8 + + + Ethernet76 + dut-lc4 + Asic0 + 100000 + 72 + 2 + 0 + 20 + 8 + + + Ethernet80 + dut-lc4 + Asic0 + 100000 + 73 + 2 + 0 + 21 + 8 + + + Ethernet84 + dut-lc4 + Asic0 + 100000 + 74 + 2 + 0 + 22 + 8 + + + Ethernet88 + dut-lc4 + Asic0 + 100000 + 75 + 2 + 0 + 23 + 8 + + + Ethernet92 + dut-lc4 + Asic0 + 100000 + 76 + 2 + 0 + 24 + 8 + + + Ethernet96 + dut-lc4 + Asic0 + 100000 + 77 + 2 + 1 + 25 + 8 + + + Ethernet100 + dut-lc4 + Asic0 + 100000 + 78 + 2 + 1 + 26 + 8 + + + Ethernet104 + dut-lc4 + Asic0 + 100000 + 79 + 2 + 1 + 27 + 8 + + + Ethernet108 + dut-lc4 + Asic0 + 100000 + 80 + 2 + 1 + 28 + 8 + + + Ethernet112 + dut-lc4 + Asic0 + 100000 + 81 + 2 + 1 + 29 + 8 + + + Ethernet116 + dut-lc4 + Asic0 + 100000 + 82 + 2 + 1 + 30 + 8 + + + Ethernet120 + dut-lc4 + Asic0 + 100000 + 83 + 2 + 1 + 31 + 8 + + + Ethernet124 + dut-lc4 + Asic0 + 100000 + 84 + 2 + 1 + 32 + 8 + + + Ethernet128 + dut-lc4 + Asic0 + 100000 + 85 + 2 + 1 + 33 + 8 + + + Ethernet132 + dut-lc4 + Asic0 + 100000 + 86 + 2 + 1 + 34 + 8 + + + Ethernet136 + dut-lc4 + Asic0 + 100000 + 87 + 2 + 1 + 35 + 8 + + + Ethernet140 + dut-lc4 + Asic0 + 100000 + 88 + 2 + 1 + 36 + 8 + + + Ethernet144 + dut-lc4 + Asic0 + 100000 + 89 + 2 + 1 + 37 + 8 + + + Ethernet148 + dut-lc4 + Asic0 + 100000 + 90 + 2 + 1 + 38 + 8 + + + Ethernet152 + dut-lc4 + Asic0 + 100000 + 91 + 2 + 1 + 39 + 8 + + + Ethernet156 + dut-lc4 + Asic0 + 100000 + 92 + 2 + 1 + 40 + 8 + + + Ethernet160 + dut-lc4 + Asic0 + 100000 + 93 + 2 + 1 + 41 + 8 + + + Ethernet164 + dut-lc4 + Asic0 + 100000 + 94 + 2 + 1 + 42 + 8 + + + Ethernet168 + dut-lc4 + Asic0 + 100000 + 95 + 2 + 1 + 43 + 8 + + + Ethernet172 + dut-lc4 + Asic0 + 100000 + 96 + 2 + 1 + 44 + 8 + + + Ethernet176 + dut-lc4 + Asic0 + 100000 + 97 + 2 + 1 + 45 + 8 + + + Ethernet180 + dut-lc4 + Asic0 + 100000 + 98 + 2 + 1 + 46 + 8 + + + Ethernet184 + dut-lc4 + Asic0 + 100000 + 99 + 2 + 1 + 47 + 8 + + + Ethernet188 + dut-lc4 + Asic0 + 100000 + 100 + 2 + 1 + 48 + 8 + + + Ethernet-Rec0 + dut-lc4 + Asic0 + 400000 + 101 + 2 + 0 + 221 + 8 + + + Ethernet-IB0 + dut-lc4 + Asic0 + 400000 + 102 + 2 + 1 + 222 + 8 + + + Cpu0 + dut-lc5 + Asic0 + 10000 + 103 + 4 + 0 + 0 + 8 + + + Ethernet0 + dut-lc5 + Asic0 + 100000 + 104 + 4 + 0 + 1 + 8 + + + Ethernet4 + dut-lc5 + Asic0 + 100000 + 105 + 4 + 0 + 2 + 8 + + + Ethernet8 + dut-lc5 + Asic0 + 100000 + 106 + 4 + 0 + 3 + 8 + + + Ethernet12 + dut-lc5 + Asic0 + 100000 + 107 + 4 + 0 + 4 + 8 + + + Ethernet16 + dut-lc5 + Asic0 + 100000 + 108 + 4 + 0 + 5 + 8 + + + Ethernet20 + dut-lc5 + Asic0 + 100000 + 109 + 4 + 0 + 6 + 8 + + + Ethernet24 + dut-lc5 + Asic0 + 100000 + 110 + 4 + 0 + 7 + 8 + + + Ethernet28 + dut-lc5 + Asic0 + 100000 + 111 + 4 + 0 + 8 + 8 + + + Ethernet32 + dut-lc5 + Asic0 + 100000 + 112 + 4 + 0 + 9 + 8 + + + Ethernet36 + dut-lc5 + Asic0 + 100000 + 113 + 4 + 0 + 10 + 8 + + + Ethernet40 + dut-lc5 + Asic0 + 100000 + 114 + 4 + 0 + 11 + 8 + + + Ethernet44 + dut-lc5 + Asic0 + 100000 + 115 + 4 + 0 + 12 + 8 + + + Ethernet48 + dut-lc5 + Asic0 + 100000 + 116 + 4 + 0 + 13 + 8 + + + Ethernet52 + dut-lc5 + Asic0 + 100000 + 117 + 4 + 0 + 14 + 8 + + + Ethernet56 + dut-lc5 + Asic0 + 100000 + 118 + 4 + 0 + 15 + 8 + + + Ethernet60 + dut-lc5 + Asic0 + 100000 + 119 + 4 + 0 + 16 + 8 + + + Ethernet64 + dut-lc5 + Asic0 + 100000 + 120 + 4 + 0 + 17 + 8 + + + Ethernet68 + dut-lc5 + Asic0 + 100000 + 121 + 4 + 0 + 18 + 8 + + + Ethernet72 + dut-lc5 + Asic0 + 100000 + 122 + 4 + 0 + 19 + 8 + + + Ethernet76 + dut-lc5 + Asic0 + 100000 + 123 + 4 + 0 + 20 + 8 + + + Ethernet80 + dut-lc5 + Asic0 + 100000 + 124 + 4 + 0 + 21 + 8 + + + Ethernet84 + dut-lc5 + Asic0 + 100000 + 125 + 4 + 0 + 22 + 8 + + + Ethernet88 + dut-lc5 + Asic0 + 100000 + 126 + 4 + 0 + 23 + 8 + + + Ethernet92 + dut-lc5 + Asic0 + 100000 + 127 + 4 + 0 + 24 + 8 + + + Ethernet96 + dut-lc5 + Asic0 + 100000 + 128 + 4 + 1 + 25 + 8 + + + Ethernet100 + dut-lc5 + Asic0 + 100000 + 129 + 4 + 1 + 26 + 8 + + + Ethernet104 + dut-lc5 + Asic0 + 100000 + 130 + 4 + 1 + 27 + 8 + + + Ethernet108 + dut-lc5 + Asic0 + 100000 + 131 + 4 + 1 + 28 + 8 + + + Ethernet112 + dut-lc5 + Asic0 + 100000 + 132 + 4 + 1 + 29 + 8 + + + Ethernet116 + dut-lc5 + Asic0 + 100000 + 133 + 4 + 1 + 30 + 8 + + + Ethernet120 + dut-lc5 + Asic0 + 100000 + 134 + 4 + 1 + 31 + 8 + + + Ethernet124 + dut-lc5 + Asic0 + 100000 + 135 + 4 + 1 + 32 + 8 + + + Ethernet128 + dut-lc5 + Asic0 + 100000 + 136 + 4 + 1 + 33 + 8 + + + Ethernet132 + dut-lc5 + Asic0 + 100000 + 137 + 4 + 1 + 34 + 8 + + + Ethernet136 + dut-lc5 + Asic0 + 100000 + 138 + 4 + 1 + 35 + 8 + + + Ethernet140 + dut-lc5 + Asic0 + 100000 + 139 + 4 + 1 + 36 + 8 + + + Ethernet144 + dut-lc5 + Asic0 + 100000 + 140 + 4 + 1 + 37 + 8 + + + Ethernet148 + dut-lc5 + Asic0 + 100000 + 141 + 4 + 1 + 38 + 8 + + + Ethernet152 + dut-lc5 + Asic0 + 100000 + 142 + 4 + 1 + 39 + 8 + + + Ethernet156 + dut-lc5 + Asic0 + 100000 + 143 + 4 + 1 + 40 + 8 + + + Ethernet160 + dut-lc5 + Asic0 + 100000 + 144 + 4 + 1 + 41 + 8 + + + Ethernet164 + dut-lc5 + Asic0 + 100000 + 145 + 4 + 1 + 42 + 8 + + + Ethernet168 + dut-lc5 + Asic0 + 100000 + 146 + 4 + 1 + 43 + 8 + + + Ethernet172 + dut-lc5 + Asic0 + 100000 + 147 + 4 + 1 + 44 + 8 + + + Ethernet176 + dut-lc5 + Asic0 + 100000 + 148 + 4 + 1 + 45 + 8 + + + Ethernet180 + dut-lc5 + Asic0 + 100000 + 149 + 4 + 1 + 46 + 8 + + + Ethernet184 + dut-lc5 + Asic0 + 100000 + 150 + 4 + 1 + 47 + 8 + + + Ethernet188 + dut-lc5 + Asic0 + 100000 + 151 + 4 + 1 + 48 + 8 + + + Ethernet-Rec0 + dut-lc5 + Asic0 + 400000 + 152 + 4 + 0 + 221 + 8 + + + Ethernet-IB0 + dut-lc5 + Asic0 + 400000 + 153 + 4 + 1 + 222 + 8 + + + + + dut-lc3 + Arista-7800R3-48CQ2-C48 +
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 183c578385f0..ac83d87b96ca 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 @@ -394,7 +394,7 @@ SwitchType - chassis_packet + chassis-packet DeploymentId @@ -459,7 +459,7 @@ SwitchType - chassis_packet + chassis-packet
diff --git a/src/sonic-config-engine/tests/sample-dell-9332-t1-minigraph.xml b/src/sonic-config-engine/tests/sample-dell-9332-t1-minigraph.xml new file mode 100644 index 000000000000..460238486b4a --- /dev/null +++ b/src/sonic-config-engine/tests/sample-dell-9332-t1-minigraph.xml @@ -0,0 +1,2023 @@ + + + + + + false + str2-z9332f-01 + 10.0.0.32 + ARISTA01T0 + 10.0.0.33 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::41 + ARISTA01T0 + FC00::42 + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.0 + ARISTA01T2 + 10.0.0.1 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::1 + ARISTA01T2 + FC00::2 + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.34 + ARISTA02T0 + 10.0.0.35 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::45 + ARISTA02T0 + FC00::46 + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.36 + ARISTA03T0 + 10.0.0.37 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::49 + ARISTA03T0 + FC00::4A + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.4 + ARISTA03T2 + 10.0.0.5 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::9 + ARISTA03T2 + FC00::A + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.38 + ARISTA04T0 + 10.0.0.39 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::4D + ARISTA04T0 + FC00::4E + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.40 + ARISTA05T0 + 10.0.0.41 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::51 + ARISTA05T0 + FC00::52 + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.8 + ARISTA05T2 + 10.0.0.9 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::11 + ARISTA05T2 + FC00::12 + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.42 + ARISTA06T0 + 10.0.0.43 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::55 + ARISTA06T0 + FC00::56 + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.44 + ARISTA07T0 + 10.0.0.45 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::59 + ARISTA07T0 + FC00::5A + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.12 + ARISTA07T2 + 10.0.0.13 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::19 + ARISTA07T2 + FC00::1A + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.46 + ARISTA08T0 + 10.0.0.47 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::5D + ARISTA08T0 + FC00::5E + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.48 + ARISTA09T0 + 10.0.0.49 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::61 + ARISTA09T0 + FC00::62 + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.16 + ARISTA09T2 + 10.0.0.17 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::21 + ARISTA09T2 + FC00::22 + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.50 + ARISTA10T0 + 10.0.0.51 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::65 + ARISTA10T0 + FC00::66 + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.52 + ARISTA11T0 + 10.0.0.53 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::69 + ARISTA11T0 + FC00::6A + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.20 + ARISTA11T2 + 10.0.0.21 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::29 + ARISTA11T2 + FC00::2A + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.54 + ARISTA12T0 + 10.0.0.55 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::6D + ARISTA12T0 + FC00::6E + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.56 + ARISTA13T0 + 10.0.0.57 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::71 + ARISTA13T0 + FC00::72 + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.24 + ARISTA13T2 + 10.0.0.25 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::31 + ARISTA13T2 + FC00::32 + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.58 + ARISTA14T0 + 10.0.0.59 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::75 + ARISTA14T0 + FC00::76 + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.60 + ARISTA15T0 + 10.0.0.61 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::79 + ARISTA15T0 + FC00::7A + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.28 + ARISTA15T2 + 10.0.0.29 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::39 + ARISTA15T2 + FC00::3A + 1 + 10 + 3 + + + false + str2-z9332f-01 + 10.0.0.62 + ARISTA16T0 + 10.0.0.63 + 1 + 10 + 3 + + + str2-z9332f-01 + FC00::7D + ARISTA16T0 + FC00::7E + 1 + 10 + 3 + + + + + 65100 + str2-z9332f-01 + + +
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.17
+ + + +
+ +
10.0.0.51
+ + + +
+ +
10.0.0.53
+ + + +
+ +
10.0.0.21
+ + + +
+ +
10.0.0.55
+ + + +
+ +
10.0.0.57
+ + + +
+ +
10.0.0.25
+ + + +
+ +
10.0.0.59
+ + + +
+ +
10.0.0.61
+ + + +
+ +
10.0.0.29
+ + + +
+ +
10.0.0.63
+ + + +
+
+ +
+ + 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 + + + + 65200 + ARISTA09T2 + + + + 64010 + ARISTA10T0 + + + + 64011 + ARISTA11T0 + + + + 65200 + ARISTA11T2 + + + + 64012 + ARISTA12T0 + + + + 64013 + ARISTA13T0 + + + + 65200 + ARISTA13T2 + + + + 64014 + ARISTA14T0 + + + + 64015 + ARISTA15T0 + + + + 65200 + ARISTA15T2 + + + + 64016 + ARISTA16T0 + + +
+
+ + + + + + 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.3.146.248/23 + + 10.3.146.248/23 + + + V6HostIP + eth0 + + FC00:2::32/64 + + FC00:2::32/64 + + + + + + + str2-z9332f-01 + + + PortChannel102 + etp1;etp2 + + + + PortChannel105 + etp3;etp4 + + + + PortChannel108 + etp5;etp6 + + + + PortChannel1011 + etp7;etp8 + + + + PortChannel1014 + etp9;etp10 + + + + PortChannel1017 + etp11;etp12 + + + + PortChannel1020 + etp13;etp14 + + + + PortChannel1023 + etp15;etp16 + + + + + + + + + etp17 + 10.0.0.32/31 + + + + etp17 + FC00::41/126 + + + + PortChannel102 + 10.0.0.0/31 + + + + PortChannel102 + FC00::1/126 + + + + etp18 + 10.0.0.34/31 + + + + etp18 + FC00::45/126 + + + + etp19 + 10.0.0.36/31 + + + + etp19 + FC00::49/126 + + + + PortChannel105 + 10.0.0.4/31 + + + + PortChannel105 + FC00::9/126 + + + + etp20 + 10.0.0.38/31 + + + + etp20 + FC00::4D/126 + + + + etp21 + 10.0.0.40/31 + + + + etp21 + FC00::51/126 + + + + PortChannel108 + 10.0.0.8/31 + + + + PortChannel108 + FC00::11/126 + + + + etp22 + 10.0.0.42/31 + + + + etp22 + FC00::55/126 + + + + etp23 + 10.0.0.44/31 + + + + etp23 + FC00::59/126 + + + + PortChannel1011 + 10.0.0.12/31 + + + + PortChannel1011 + FC00::19/126 + + + + etp24 + 10.0.0.46/31 + + + + etp24 + FC00::5D/126 + + + + etp25 + 10.0.0.48/31 + + + + etp25 + FC00::61/126 + + + + PortChannel1014 + 10.0.0.16/31 + + + + PortChannel1014 + FC00::21/126 + + + + etp26 + 10.0.0.50/31 + + + + etp26 + FC00::65/126 + + + + etp27 + 10.0.0.52/31 + + + + etp27 + FC00::69/126 + + + + PortChannel1017 + 10.0.0.20/31 + + + + PortChannel1017 + FC00::29/126 + + + + etp28 + 10.0.0.54/31 + + + + etp28 + FC00::6D/126 + + + + etp29 + 10.0.0.56/31 + + + + etp29 + FC00::71/126 + + + + PortChannel1020 + 10.0.0.24/31 + + + + PortChannel1020 + FC00::31/126 + + + + etp30 + 10.0.0.58/31 + + + + etp30 + FC00::75/126 + + + + etp31 + 10.0.0.60/31 + + + + etp31 + FC00::79/126 + + + + PortChannel1023 + 10.0.0.28/31 + + + + PortChannel1023 + FC00::39/126 + + + + etp32 + 10.0.0.62/31 + + + + etp32 + FC00::7D/126 + + + + + + NTP_ACL + NTP + NTP + + + SNMP_ACL + SNMP + SNMP + + + ERSPAN + Everflow + Everflow + + + ERSPANV6 + EverflowV6 + EverflowV6 + + + VTY_LINE + ssh-only + SSH + + + + + + + + + + DeviceInterfaceLink + ARISTA01T0 + Ethernet1 + str2-z9332f-01 + etp17 + + + DeviceInterfaceLink + ARISTA01T2 + Ethernet1 + str2-z9332f-01 + etp1 + + + DeviceInterfaceLink + ARISTA01T2 + Ethernet2 + str2-z9332f-01 + etp2 + + + DeviceInterfaceLink + ARISTA02T0 + Ethernet1 + str2-z9332f-01 + etp18 + + + DeviceInterfaceLink + ARISTA03T0 + Ethernet1 + str2-z9332f-01 + etp19 + + + DeviceInterfaceLink + ARISTA03T2 + Ethernet1 + str2-z9332f-01 + etp3 + + + DeviceInterfaceLink + ARISTA03T2 + Ethernet2 + str2-z9332f-01 + etp4 + + + DeviceInterfaceLink + ARISTA04T0 + Ethernet1 + str2-z9332f-01 + etp20 + + + DeviceInterfaceLink + ARISTA05T0 + Ethernet1 + str2-z9332f-01 + etp21 + + + DeviceInterfaceLink + ARISTA05T2 + Ethernet1 + str2-z9332f-01 + etp5 + + + DeviceInterfaceLink + ARISTA05T2 + Ethernet2 + str2-z9332f-01 + etp6 + + + DeviceInterfaceLink + ARISTA06T0 + Ethernet1 + str2-z9332f-01 + etp22 + + + DeviceInterfaceLink + ARISTA07T0 + Ethernet1 + str2-z9332f-01 + etp23 + + + DeviceInterfaceLink + ARISTA07T2 + Ethernet1 + str2-z9332f-01 + etp7 + + + DeviceInterfaceLink + ARISTA07T2 + Ethernet2 + str2-z9332f-01 + etp8 + + + DeviceInterfaceLink + ARISTA08T0 + Ethernet1 + str2-z9332f-01 + etp24 + + + DeviceInterfaceLink + ARISTA09T0 + Ethernet1 + str2-z9332f-01 + etp25 + + + DeviceInterfaceLink + ARISTA09T2 + Ethernet1 + str2-z9332f-01 + etp9 + + + DeviceInterfaceLink + ARISTA09T2 + Ethernet2 + str2-z9332f-01 + etp10 + + + DeviceInterfaceLink + ARISTA10T0 + Ethernet1 + str2-z9332f-01 + etp26 + + + DeviceInterfaceLink + ARISTA11T0 + Ethernet1 + str2-z9332f-01 + etp27 + + + DeviceInterfaceLink + ARISTA11T2 + Ethernet1 + str2-z9332f-01 + etp11 + + + DeviceInterfaceLink + ARISTA11T2 + Ethernet2 + str2-z9332f-01 + etp12 + + + DeviceInterfaceLink + ARISTA12T0 + Ethernet1 + str2-z9332f-01 + etp28 + + + DeviceInterfaceLink + ARISTA13T0 + Ethernet1 + str2-z9332f-01 + etp29 + + + DeviceInterfaceLink + ARISTA13T2 + Ethernet1 + str2-z9332f-01 + etp13 + + + DeviceInterfaceLink + ARISTA13T2 + Ethernet2 + str2-z9332f-01 + etp14 + + + DeviceInterfaceLink + ARISTA14T0 + Ethernet1 + str2-z9332f-01 + etp30 + + + DeviceInterfaceLink + ARISTA15T0 + Ethernet1 + str2-z9332f-01 + etp31 + + + DeviceInterfaceLink + ARISTA15T2 + Ethernet1 + str2-z9332f-01 + etp15 + + + DeviceInterfaceLink + ARISTA15T2 + Ethernet2 + str2-z9332f-01 + etp16 + + + DeviceInterfaceLink + ARISTA16T0 + Ethernet1 + str2-z9332f-01 + etp32 + + + + + str2-z9332f-01 + DellEMC-Z9332f-O32 + + 10.3.146.248 + + + + ARISTA16T0 + + 172.16.142.111 + + Arista-VM + + + ARISTA11T0 + + 172.16.142.106 + + Arista-VM + + + ARISTA10T0 + + 172.16.142.105 + + Arista-VM + + + ARISTA11T2 + + 172.16.142.93 + + Arista-VM + + + ARISTA09T2 + + 172.16.142.92 + + Arista-VM + + + ARISTA09T0 + + 172.16.142.104 + + Arista-VM + + + ARISTA06T0 + + 172.16.142.101 + + Arista-VM + + + ARISTA08T0 + + 172.16.142.103 + + Arista-VM + + + ARISTA07T0 + + 172.16.142.102 + + Arista-VM + + + ARISTA07T2 + + 172.16.142.91 + + Arista-VM + + + ARISTA01T2 + + 172.16.142.88 + + Arista-VM + + + ARISTA01T0 + + 172.16.142.96 + + Arista-VM + + + ARISTA05T2 + + 172.16.142.90 + + Arista-VM + + + ARISTA05T0 + + 172.16.142.100 + + Arista-VM + + + ARISTA02T0 + + 172.16.142.97 + + Arista-VM + + + ARISTA03T0 + + 172.16.142.98 + + Arista-VM + + + ARISTA03T2 + + 172.16.142.89 + + Arista-VM + + + ARISTA04T0 + + 172.16.142.99 + + Arista-VM + + + ARISTA15T0 + + 172.16.142.110 + + Arista-VM + + + ARISTA15T2 + + 172.16.142.95 + + Arista-VM + + + ARISTA14T0 + + 172.16.142.109 + + Arista-VM + + + ARISTA12T0 + + 172.16.142.107 + + Arista-VM + + + ARISTA13T2 + + 172.16.142.94 + + Arista-VM + + + ARISTA13T0 + + 172.16.142.108 + + Arista-VM + + + + + + true + + + DeviceInterface + + true + true + 1 + etp1 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp2 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp3 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp4 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp5 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp6 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp7 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp8 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp9 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp10 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp11 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp12 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp13 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp14 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp15 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp16 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp17 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp18 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp19 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp20 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp21 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp22 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp23 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp24 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp25 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp26 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp27 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp28 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp29 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp30 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp31 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp32 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp33 + + false + 0 + 0 + 10000 + + + DeviceInterface + + true + true + 1 + etp34 + + false + 0 + 0 + 10000 + + + true + 0 + DellEMC-Z9332f-O32 + + + + + + + str2-z9332f-01 + + + 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.3.146.0/23;10.64.5.5 + + + ResourceType + + DL-NPU-Apollo + + + ErspanDestinationIpv4 + + 10.20.6.16 + + + + + + + str2-z9332f-01 + DellEMC-Z9332f-O32 +
diff --git a/src/sonic-config-engine/tests/sample-graph-resource-type.xml b/src/sonic-config-engine/tests/sample-graph-resource-type.xml index f09e4112d8ff..62c2dfd64f3b 100644 --- a/src/sonic-config-engine/tests/sample-graph-resource-type.xml +++ b/src/sonic-config-engine/tests/sample-graph-resource-type.xml @@ -72,7 +72,7 @@ - 0 + 1 BGPMonitor @@ -190,6 +190,14 @@ 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 @@ -205,6 +213,7 @@ 192.0.0.1;192.0.0.2 2000 2000 + Tagged 192.168.0.240/27 @@ -415,6 +424,330 @@ 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 diff --git a/src/sonic-config-engine/tests/sample-graph-subintf.xml b/src/sonic-config-engine/tests/sample-graph-subintf.xml index 29568be727a7..a23b668c2c2f 100644 --- a/src/sonic-config-engine/tests/sample-graph-subintf.xml +++ b/src/sonic-config-engine/tests/sample-graph-subintf.xml @@ -72,7 +72,7 @@ - 0 + 1 BGPMonitor @@ -208,6 +208,14 @@ 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 @@ -423,6 +431,330 @@ 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 diff --git a/src/sonic-config-engine/tests/sample-voq-graph.xml b/src/sonic-config-engine/tests/sample-voq-graph.xml index 5257efd4b0ae..5205265ee384 100644 --- a/src/sonic-config-engine/tests/sample-voq-graph.xml +++ b/src/sonic-config-engine/tests/sample-voq-graph.xml @@ -202,6 +202,366 @@ 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/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 + + + DeviceInterface + + true + 1 + Recycle0 + + false + 0 + 0 + 100000 + true 0 diff --git a/src/sonic-config-engine/tests/sample_graph.xml b/src/sonic-config-engine/tests/sample_graph.xml index 7bd08ab8f7c8..478fdd5ba8d4 100644 --- a/src/sonic-config-engine/tests/sample_graph.xml +++ b/src/sonic-config-engine/tests/sample_graph.xml @@ -88,7 +88,7 @@ - Ethernet1 + Ethernet4 10.10.2.13/30 @@ -112,7 +112,7 @@ 40000 DeviceInterfaceLink OCPSCH01040DDLF - Ethernet1 + Ethernet4 OCPSCH0104002MS Ethernet12 @@ -124,6 +124,424 @@
+ + + + + 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 + + + Force10-Z9100 + + + 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 new file mode 100644 index 000000000000..c05eca81eaaa --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cq2-lc.json @@ -0,0 +1,590 @@ +{ + "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" + } + }, + + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "3220805000", + "type": "both", + "mode": "dynamic", + "xoff": "2102272" + } + }, + "BUFFER_PROFILE": { + "ingress_lossless_profile": { + "pool":"[BUFFER_POOL|ingress_lossless_pool]", + "size":"1280", + "dynamic_th":"-2", + "xon_offset":"2560", + "xon":"0", + "xoff":"66048" + }, + "ingress_lossy_profile": { + "pool":"[BUFFER_POOL|ingress_lossless_pool]", + "size":"0", + "xon_offset":"0", + "static_th":"30535680" + }, + "egress_lossless_profile": { + "pool":"[BUFFER_POOL|ingress_lossless_pool]", + "size":"0", + "static_th":"33030144" + }, + "egress_lossy_profile": { + "pool":"[BUFFER_POOL|ingress_lossless_pool]", + "size":"0", + "dynamic_th":"-1" + } + }, + "BUFFER_PG": { + "Ethernet180|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet8|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet184|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet188|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet0|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet4|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet108|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet100|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet128|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet104|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet68|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet96|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet124|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet148|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet92|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet120|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet144|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet52|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet140|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet56|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet164|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet76|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet72|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet64|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet32|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet16|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet36|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet12|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet88|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet116|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet80|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet112|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet84|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet152|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet136|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet156|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet132|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet48|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet44|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet176|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet40|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet28|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet60|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet20|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet24|0": { + "profile" : "ingress_lossy_profile" + } + }, + + "BUFFER_QUEUE": { + "Ethernet180|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet8|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet184|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet188|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet0|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet4|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet108|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet100|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet128|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet104|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet68|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet96|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet124|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet148|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet92|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet120|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet144|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet52|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet140|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet56|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet164|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet76|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet72|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet64|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet32|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet16|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet36|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet12|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet88|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet116|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet80|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet112|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet84|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet152|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet136|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet156|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet132|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet48|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet44|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet176|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet40|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet28|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet60|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet20|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet24|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet180|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet8|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet184|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet188|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet0|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet4|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet108|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet100|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet128|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet104|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet68|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet96|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet124|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet148|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet92|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet120|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet144|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet52|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet140|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet56|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet164|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet76|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet72|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet64|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet32|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet16|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet36|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet12|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet88|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet116|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet80|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet112|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet84|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet152|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet136|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet156|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet132|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet48|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet44|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet176|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet40|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet28|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet60|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet20|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet24|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet180|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet8|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet184|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet188|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet0|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet4|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet108|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet100|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet128|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet104|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet68|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet96|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet124|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet148|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet92|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet120|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet144|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet52|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet140|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet56|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet164|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet76|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet72|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet64|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet32|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet16|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet36|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet12|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet88|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet116|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet80|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet112|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet84|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet152|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet136|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet156|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet132|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet48|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet44|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet176|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet40|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet28|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet60|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet20|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet24|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/py2/buffers-dell6100.json b/src/sonic-config-engine/tests/sample_output/py2/buffers-dell6100.json index 90cf104ff473..be6292366e7b 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/buffers-dell6100.json +++ b/src/sonic-config-engine/tests/sample_output/py2/buffers-dell6100.json @@ -1,4 +1,3 @@ - { "CABLE_LENGTH": { "AZURE": { @@ -13,10 +12,11 @@ "Ethernet4": "5m", "Ethernet5": "5m", "Ethernet46": "5m", - "Ethernet34": "5m", + "Ethernet29": "5m", "Ethernet22": "5m", "Ethernet58": "5m", "Ethernet59": "5m", + "Ethernet28": "5m", "Ethernet50": "5m", "Ethernet51": "5m", "Ethernet52": "5m", @@ -41,6 +41,7 @@ "Ethernet32": "5m", "Ethernet33": "5m", "Ethernet30": "5m", + "Ethernet34": "5m", "Ethernet31": "5m", "Ethernet49": "5m", "Ethernet48": "5m", @@ -52,8 +53,8 @@ "Ethernet42": "5m", "Ethernet41": "5m", "Ethernet40": "5m", - "Ethernet29": "5m", - "Ethernet28": "5m", + "Ethernet65": "5m", + "Ethernet64": "5m", "Ethernet61": "5m", "Ethernet60": "5m", "Ethernet63": "5m", diff --git a/src/sonic-config-engine/tests/sample_output/py2/buffers-mellanox2410-dynamic.json b/src/sonic-config-engine/tests/sample_output/py2/buffers-mellanox2410-dynamic.json index a09e15eecc1c..1cb60747fc3e 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/buffers-mellanox2410-dynamic.json +++ b/src/sonic-config-engine/tests/sample_output/py2/buffers-mellanox2410-dynamic.json @@ -1,4 +1,3 @@ - { "CABLE_LENGTH": { "AZURE": { diff --git a/src/sonic-config-engine/tests/sample_output/py2/buffers-mellanox2410.json b/src/sonic-config-engine/tests/sample_output/py2/buffers-mellanox2410.json index 7ebd39c36c83..39cebfcdf8a7 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/buffers-mellanox2410.json +++ b/src/sonic-config-engine/tests/sample_output/py2/buffers-mellanox2410.json @@ -1,4 +1,3 @@ - { "CABLE_LENGTH": { "AZURE": { diff --git a/src/sonic-config-engine/tests/sample_output/py2/buffers-mellanox2700.json b/src/sonic-config-engine/tests/sample_output/py2/buffers-mellanox2700.json index 221a9b89b83a..ea9fe0c9ea89 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/buffers-mellanox2700.json +++ b/src/sonic-config-engine/tests/sample_output/py2/buffers-mellanox2700.json @@ -1,4 +1,3 @@ - { "CABLE_LENGTH": { "AZURE": { diff --git a/src/sonic-config-engine/tests/sample_output/py2/docker-dhcp-relay.supervisord.conf b/src/sonic-config-engine/tests/sample_output/py2/docker-dhcp-relay.supervisord.conf index a9004e2b00f5..407ac2c80bc9 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/docker-dhcp-relay.supervisord.conf +++ b/src/sonic-config-engine/tests/sample_output/py2/docker-dhcp-relay.supervisord.conf @@ -68,7 +68,7 @@ dependent_startup_wait_for=start:exited programs=dhcpmon-Vlan1000 [program:dhcpmon-Vlan1000] -command=/usr/sbin/dhcpmon -id Vlan1000 -iu Vlan2000 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -iu PortChannel01 -im eth0 -4 -6 +command=/usr/sbin/dhcpmon -id Vlan1000 -iu Vlan2000 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -iu PortChannel01 -im eth0 priority=4 autostart=false autorestart=false diff --git a/src/sonic-config-engine/tests/sample_output/py2/ports.json b/src/sonic-config-engine/tests/sample_output/py2/ports.json index 4b36790c7cd0..959a234eaace 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/ports.json +++ b/src/sonic-config-engine/tests/sample_output/py2/ports.json @@ -20,6 +20,104 @@ }, "OP": "SET" }, + { + "PORT_TABLE:Ethernet108": { + "speed": "100000", + "description": "fortyGigE0/108" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet100": { + "speed": "100000", + "description": "fortyGigE0/100" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet104": { + "speed": "100000", + "description": "fortyGigE0/104" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet68": { + "speed": "100000", + "description": "fortyGigE0/68" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet96": { + "speed": "100000", + "description": "fortyGigE0/96" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet124": { + "speed": "100000", + "description": "fortyGigE0/124" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet92": { + "speed": "100000", + "description": "fortyGigE0/92" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet120": { + "speed": "100000", + "description": "fortyGigE0/120" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet52": { + "speed": "100000", + "description": "fortyGigE0/52" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet56": { + "speed": "100000", + "description": "fortyGigE0/56" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet76": { + "speed": "100000", + "description": "fortyGigE0/76" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet72": { + "speed": "100000", + "description": "fortyGigE0/72" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet64": { + "speed": "100000", + "description": "fortyGigE0/64" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet32": { + "speed": "100000", + "description": "fortyGigE0/32" + }, + "OP": "SET" + }, { "PORT_TABLE:Ethernet16": { "speed": "1000", @@ -27,11 +125,102 @@ }, "OP": "SET" }, + { + "PORT_TABLE:Ethernet36": { + "speed": "100000", + "description": "fortyGigE0/36" + }, + "OP": "SET" + }, { "PORT_TABLE:Ethernet12": { "speed": "100000", "description": "Interface description" }, "OP": "SET" + }, + { + "PORT_TABLE:Ethernet88": { + "speed": "100000", + "description": "fortyGigE0/88" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet116": { + "speed": "100000", + "description": "fortyGigE0/116" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet80": { + "speed": "100000", + "description": "fortyGigE0/80" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet112": { + "speed": "100000", + "description": "fortyGigE0/112" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet84": { + "speed": "100000", + "description": "fortyGigE0/84" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet48": { + "speed": "100000", + "description": "fortyGigE0/48" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet44": { + "speed": "100000", + "description": "fortyGigE0/44" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet40": { + "speed": "100000", + "description": "fortyGigE0/40" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet28": { + "speed": "100000", + "description": "fortyGigE0/28" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet60": { + "speed": "100000", + "description": "fortyGigE0/60" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet20": { + "speed": "100000", + "description": "fortyGigE0/20" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet24": { + "speed": "100000", + "description": "fortyGigE0/24" + }, + "OP": "SET" } ] 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 9a6f8a2ada78..b15fcf7a36c1 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 @@ -119,196 +119,224 @@ "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" } }, "WRED_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 new file mode 100644 index 000000000000..92ba2caf8d17 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py2/qos-arista7800r3-48cq2-lc.json @@ -0,0 +1,1532 @@ +{ + "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" + }, + "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" + }, + "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" + } + }, + "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" + } + }, + "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" + }, + "Ethernet164|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" + }, + "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" + }, + "Ethernet164|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" + }, + "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" + }, + "Ethernet164|0": { + "scheduler": "scheduler.0" + }, + "Ethernet176|0": { + "scheduler": "scheduler.0" + }, + "Ethernet180|0": { + "scheduler": "scheduler.0" + }, + "Ethernet184|0": { + "scheduler": "scheduler.0" + }, + "Ethernet188|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" + }, + "Ethernet164|1": { + "scheduler": "scheduler.0" + }, + "Ethernet176|1": { + "scheduler": "scheduler.0" + }, + "Ethernet180|1": { + "scheduler": "scheduler.0" + }, + "Ethernet184|1": { + "scheduler": "scheduler.0" + }, + "Ethernet188|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" + }, + "Ethernet164|2": { + "scheduler": "scheduler.0" + }, + "Ethernet176|2": { + "scheduler": "scheduler.0" + }, + "Ethernet180|2": { + "scheduler": "scheduler.0" + }, + "Ethernet184|2": { + "scheduler": "scheduler.0" + }, + "Ethernet188|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" + }, + "Ethernet164|5": { + "scheduler": "scheduler.0" + }, + "Ethernet176|5": { + "scheduler": "scheduler.0" + }, + "Ethernet180|5": { + "scheduler": "scheduler.0" + }, + "Ethernet184|5": { + "scheduler": "scheduler.0" + }, + "Ethernet188|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" + }, + "Ethernet164|6": { + "scheduler": "scheduler.0" + }, + "Ethernet176|6": { + "scheduler": "scheduler.0" + }, + "Ethernet180|6": { + "scheduler": "scheduler.0" + }, + "Ethernet184|6": { + "scheduler": "scheduler.0" + }, + "Ethernet188|6": { + "scheduler": "scheduler.0" + } + } +} 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 eecd81c99e5c..27bea8cd32d3 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 @@ -119,308 +119,352 @@ "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet1": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet5": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet6": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet7": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet9": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet10": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet11": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet13": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet14": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet15": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet17": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet21": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet22": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet23": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet25": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet26": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet27": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet29": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet30": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet31": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet37": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet38": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet39": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet41": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet42": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet53": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet54": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet55": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet57": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet58": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" } }, "WRED_PROFILE": { 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 new file mode 100644 index 000000000000..8130a455497a --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py2/qos-dell9332.json @@ -0,0 +1,1133 @@ +{ + "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": "1" + }, + "scheduler.1": { + "type" : "DWRR", + "weight": "1" + }, + "scheduler.2": { + "type" : "DWRR", + "weight": "100" + } + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + } + }, + "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" + }, + "Ethernet8|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet16|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet24|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet32|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet40|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet48|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet56|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet64|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet72|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet80|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet88|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet96|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet104|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet112|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet120|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet128|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" + }, + "Ethernet152|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet160|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" + }, + "Ethernet184|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet192|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" + }, + "Ethernet216|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet224|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" + }, + "Ethernet248|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet0|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet8|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet16|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet24|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet32|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet40|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet48|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet56|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet64|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet72|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet80|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet88|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet96|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet104|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet112|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet120|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet128|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet136|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet144|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet152|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet160|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet168|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet176|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet184|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet192|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet200|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet208|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet216|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet224|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet232|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet240|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet248|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet0|0": { + "scheduler": "scheduler.0" + }, + "Ethernet8|0": { + "scheduler": "scheduler.0" + }, + "Ethernet16|0": { + "scheduler": "scheduler.0" + }, + "Ethernet24|0": { + "scheduler": "scheduler.0" + }, + "Ethernet32|0": { + "scheduler": "scheduler.0" + }, + "Ethernet40|0": { + "scheduler": "scheduler.0" + }, + "Ethernet48|0": { + "scheduler": "scheduler.0" + }, + "Ethernet56|0": { + "scheduler": "scheduler.0" + }, + "Ethernet64|0": { + "scheduler": "scheduler.0" + }, + "Ethernet72|0": { + "scheduler": "scheduler.0" + }, + "Ethernet80|0": { + "scheduler": "scheduler.0" + }, + "Ethernet88|0": { + "scheduler": "scheduler.0" + }, + "Ethernet96|0": { + "scheduler": "scheduler.0" + }, + "Ethernet104|0": { + "scheduler": "scheduler.0" + }, + "Ethernet112|0": { + "scheduler": "scheduler.0" + }, + "Ethernet120|0": { + "scheduler": "scheduler.0" + }, + "Ethernet128|0": { + "scheduler": "scheduler.0" + }, + "Ethernet136|0": { + "scheduler": "scheduler.0" + }, + "Ethernet144|0": { + "scheduler": "scheduler.0" + }, + "Ethernet152|0": { + "scheduler": "scheduler.0" + }, + "Ethernet160|0": { + "scheduler": "scheduler.0" + }, + "Ethernet168|0": { + "scheduler": "scheduler.0" + }, + "Ethernet176|0": { + "scheduler": "scheduler.0" + }, + "Ethernet184|0": { + "scheduler": "scheduler.0" + }, + "Ethernet192|0": { + "scheduler": "scheduler.0" + }, + "Ethernet200|0": { + "scheduler": "scheduler.0" + }, + "Ethernet208|0": { + "scheduler": "scheduler.0" + }, + "Ethernet216|0": { + "scheduler": "scheduler.0" + }, + "Ethernet224|0": { + "scheduler": "scheduler.0" + }, + "Ethernet232|0": { + "scheduler": "scheduler.0" + }, + "Ethernet240|0": { + "scheduler": "scheduler.0" + }, + "Ethernet248|0": { + "scheduler": "scheduler.0" + }, + "Ethernet0|1": { + "scheduler": "scheduler.0" + }, + "Ethernet8|1": { + "scheduler": "scheduler.0" + }, + "Ethernet16|1": { + "scheduler": "scheduler.0" + }, + "Ethernet24|1": { + "scheduler": "scheduler.0" + }, + "Ethernet32|1": { + "scheduler": "scheduler.0" + }, + "Ethernet40|1": { + "scheduler": "scheduler.0" + }, + "Ethernet48|1": { + "scheduler": "scheduler.0" + }, + "Ethernet56|1": { + "scheduler": "scheduler.0" + }, + "Ethernet64|1": { + "scheduler": "scheduler.0" + }, + "Ethernet72|1": { + "scheduler": "scheduler.0" + }, + "Ethernet80|1": { + "scheduler": "scheduler.0" + }, + "Ethernet88|1": { + "scheduler": "scheduler.0" + }, + "Ethernet96|1": { + "scheduler": "scheduler.0" + }, + "Ethernet104|1": { + "scheduler": "scheduler.0" + }, + "Ethernet112|1": { + "scheduler": "scheduler.0" + }, + "Ethernet120|1": { + "scheduler": "scheduler.0" + }, + "Ethernet128|1": { + "scheduler": "scheduler.0" + }, + "Ethernet136|1": { + "scheduler": "scheduler.0" + }, + "Ethernet144|1": { + "scheduler": "scheduler.0" + }, + "Ethernet152|1": { + "scheduler": "scheduler.0" + }, + "Ethernet160|1": { + "scheduler": "scheduler.0" + }, + "Ethernet168|1": { + "scheduler": "scheduler.0" + }, + "Ethernet176|1": { + "scheduler": "scheduler.0" + }, + "Ethernet184|1": { + "scheduler": "scheduler.0" + }, + "Ethernet192|1": { + "scheduler": "scheduler.0" + }, + "Ethernet200|1": { + "scheduler": "scheduler.0" + }, + "Ethernet208|1": { + "scheduler": "scheduler.0" + }, + "Ethernet216|1": { + "scheduler": "scheduler.0" + }, + "Ethernet224|1": { + "scheduler": "scheduler.0" + }, + "Ethernet232|1": { + "scheduler": "scheduler.0" + }, + "Ethernet240|1": { + "scheduler": "scheduler.0" + }, + "Ethernet248|1": { + "scheduler": "scheduler.0" + }, + "Ethernet0|2": { + "scheduler": "scheduler.0" + }, + "Ethernet8|2": { + "scheduler": "scheduler.0" + }, + "Ethernet16|2": { + "scheduler": "scheduler.0" + }, + "Ethernet24|2": { + "scheduler": "scheduler.0" + }, + "Ethernet32|2": { + "scheduler": "scheduler.0" + }, + "Ethernet40|2": { + "scheduler": "scheduler.0" + }, + "Ethernet48|2": { + "scheduler": "scheduler.0" + }, + "Ethernet56|2": { + "scheduler": "scheduler.0" + }, + "Ethernet64|2": { + "scheduler": "scheduler.0" + }, + "Ethernet72|2": { + "scheduler": "scheduler.0" + }, + "Ethernet80|2": { + "scheduler": "scheduler.0" + }, + "Ethernet88|2": { + "scheduler": "scheduler.0" + }, + "Ethernet96|2": { + "scheduler": "scheduler.0" + }, + "Ethernet104|2": { + "scheduler": "scheduler.0" + }, + "Ethernet112|2": { + "scheduler": "scheduler.0" + }, + "Ethernet120|2": { + "scheduler": "scheduler.0" + }, + "Ethernet128|2": { + "scheduler": "scheduler.0" + }, + "Ethernet136|2": { + "scheduler": "scheduler.0" + }, + "Ethernet144|2": { + "scheduler": "scheduler.0" + }, + "Ethernet152|2": { + "scheduler": "scheduler.0" + }, + "Ethernet160|2": { + "scheduler": "scheduler.0" + }, + "Ethernet168|2": { + "scheduler": "scheduler.0" + }, + "Ethernet176|2": { + "scheduler": "scheduler.0" + }, + "Ethernet184|2": { + "scheduler": "scheduler.0" + }, + "Ethernet192|2": { + "scheduler": "scheduler.0" + }, + "Ethernet200|2": { + "scheduler": "scheduler.0" + }, + "Ethernet208|2": { + "scheduler": "scheduler.0" + }, + "Ethernet216|2": { + "scheduler": "scheduler.0" + }, + "Ethernet224|2": { + "scheduler": "scheduler.0" + }, + "Ethernet232|2": { + "scheduler": "scheduler.0" + }, + "Ethernet240|2": { + "scheduler": "scheduler.0" + }, + "Ethernet248|2": { + "scheduler": "scheduler.0" + }, + "Ethernet0|5": { + "scheduler": "scheduler.0" + }, + "Ethernet8|5": { + "scheduler": "scheduler.0" + }, + "Ethernet16|5": { + "scheduler": "scheduler.0" + }, + "Ethernet24|5": { + "scheduler": "scheduler.0" + }, + "Ethernet32|5": { + "scheduler": "scheduler.0" + }, + "Ethernet40|5": { + "scheduler": "scheduler.0" + }, + "Ethernet48|5": { + "scheduler": "scheduler.0" + }, + "Ethernet56|5": { + "scheduler": "scheduler.0" + }, + "Ethernet64|5": { + "scheduler": "scheduler.0" + }, + "Ethernet72|5": { + "scheduler": "scheduler.0" + }, + "Ethernet80|5": { + "scheduler": "scheduler.0" + }, + "Ethernet88|5": { + "scheduler": "scheduler.0" + }, + "Ethernet96|5": { + "scheduler": "scheduler.0" + }, + "Ethernet104|5": { + "scheduler": "scheduler.0" + }, + "Ethernet112|5": { + "scheduler": "scheduler.0" + }, + "Ethernet120|5": { + "scheduler": "scheduler.0" + }, + "Ethernet128|5": { + "scheduler": "scheduler.0" + }, + "Ethernet136|5": { + "scheduler": "scheduler.0" + }, + "Ethernet144|5": { + "scheduler": "scheduler.0" + }, + "Ethernet152|5": { + "scheduler": "scheduler.0" + }, + "Ethernet160|5": { + "scheduler": "scheduler.0" + }, + "Ethernet168|5": { + "scheduler": "scheduler.0" + }, + "Ethernet176|5": { + "scheduler": "scheduler.0" + }, + "Ethernet184|5": { + "scheduler": "scheduler.0" + }, + "Ethernet192|5": { + "scheduler": "scheduler.0" + }, + "Ethernet200|5": { + "scheduler": "scheduler.0" + }, + "Ethernet208|5": { + "scheduler": "scheduler.0" + }, + "Ethernet216|5": { + "scheduler": "scheduler.0" + }, + "Ethernet224|5": { + "scheduler": "scheduler.0" + }, + "Ethernet232|5": { + "scheduler": "scheduler.0" + }, + "Ethernet240|5": { + "scheduler": "scheduler.0" + }, + "Ethernet248|5": { + "scheduler": "scheduler.0" + }, + "Ethernet0|6": { + "scheduler": "scheduler.0" + }, + "Ethernet8|6": { + "scheduler": "scheduler.0" + }, + "Ethernet16|6": { + "scheduler": "scheduler.0" + }, + "Ethernet24|6": { + "scheduler": "scheduler.0" + }, + "Ethernet32|6": { + "scheduler": "scheduler.0" + }, + "Ethernet40|6": { + "scheduler": "scheduler.0" + }, + "Ethernet48|6": { + "scheduler": "scheduler.0" + }, + "Ethernet56|6": { + "scheduler": "scheduler.0" + }, + "Ethernet64|6": { + "scheduler": "scheduler.0" + }, + "Ethernet72|6": { + "scheduler": "scheduler.0" + }, + "Ethernet80|6": { + "scheduler": "scheduler.0" + }, + "Ethernet88|6": { + "scheduler": "scheduler.0" + }, + "Ethernet96|6": { + "scheduler": "scheduler.0" + }, + "Ethernet104|6": { + "scheduler": "scheduler.0" + }, + "Ethernet112|6": { + "scheduler": "scheduler.0" + }, + "Ethernet120|6": { + "scheduler": "scheduler.0" + }, + "Ethernet128|6": { + "scheduler": "scheduler.0" + }, + "Ethernet136|6": { + "scheduler": "scheduler.0" + }, + "Ethernet144|6": { + "scheduler": "scheduler.0" + }, + "Ethernet152|6": { + "scheduler": "scheduler.0" + }, + "Ethernet160|6": { + "scheduler": "scheduler.0" + }, + "Ethernet168|6": { + "scheduler": "scheduler.0" + }, + "Ethernet176|6": { + "scheduler": "scheduler.0" + }, + "Ethernet184|6": { + "scheduler": "scheduler.0" + }, + "Ethernet192|6": { + "scheduler": "scheduler.0" + }, + "Ethernet200|6": { + "scheduler": "scheduler.0" + }, + "Ethernet208|6": { + "scheduler": "scheduler.0" + }, + "Ethernet216|6": { + "scheduler": "scheduler.0" + }, + "Ethernet224|6": { + "scheduler": "scheduler.0" + }, + "Ethernet232|6": { + "scheduler": "scheduler.0" + }, + "Ethernet240|6": { + "scheduler": "scheduler.0" + }, + "Ethernet248|6": { + "scheduler": "scheduler.0" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/py2/radvd.conf b/src/sonic-config-engine/tests/sample_output/py2/radvd.conf new file mode 100644 index 000000000000..9e716b7144bf --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py2/radvd.conf @@ -0,0 +1,35 @@ +# =========== Managed by sonic-cfggen -- DO NOT edit manually! ==================== +# Generated by /usr/share/sonic/templates/radvd.conf.j2 using config DB data +# File: /etc/radvd.conf +# +# Config file for radvd, the router advertisement daemon +# See man page for radvd.conf for descriptions of all available options +# + +interface Vlan1000 +{ + IgnoreIfMissing on; + AdvSendAdvert on; + MinRtrAdvInterval 60; + MaxRtrAdvInterval 180; + AdvManagedFlag on; + AdvOtherConfigFlag off; + AdvLinkMTU 9100; + AdvHomeAgentFlag off; + prefix fc02:2000::/64 { + AdvOnLink on; + AdvAutonomous off; + AdvRouterAddr off; + AdvValidLifetime infinity; + AdvPreferredLifetime infinity; + }; + prefix fc02:1000::/64 { + AdvOnLink on; + AdvAutonomous off; + AdvRouterAddr off; + AdvValidLifetime infinity; + AdvPreferredLifetime infinity; + }; +}; + + 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 new file mode 100644 index 000000000000..56538fd0935b --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cq2-lc.json @@ -0,0 +1,590 @@ +{ + "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" + } + }, + + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "3220805000", + "type": "both", + "mode": "dynamic", + "xoff": "2102272" + } + }, + "BUFFER_PROFILE": { + "ingress_lossless_profile": { + "pool":"[BUFFER_POOL|ingress_lossless_pool]", + "size":"1280", + "dynamic_th":"-2", + "xon_offset":"2560", + "xon":"0", + "xoff":"66048" + }, + "ingress_lossy_profile": { + "pool":"[BUFFER_POOL|ingress_lossless_pool]", + "size":"0", + "xon_offset":"0", + "static_th":"30535680" + }, + "egress_lossless_profile": { + "pool":"[BUFFER_POOL|ingress_lossless_pool]", + "size":"0", + "static_th":"33030144" + }, + "egress_lossy_profile": { + "pool":"[BUFFER_POOL|ingress_lossless_pool]", + "size":"0", + "dynamic_th":"-1" + } + }, + "BUFFER_PG": { + "Ethernet0|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet36|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" + }, + "Ethernet4|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet76|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" + }, + "Ethernet8|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" + }, + "Ethernet12|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet156|0": { + "profile" : "ingress_lossy_profile" + }, + "Ethernet164|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" + }, + "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" + } + }, + + "BUFFER_QUEUE": { + "Ethernet0|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet36|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet40|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet44|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet48|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet52|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet56|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet60|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet64|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet68|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet72|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet4|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet76|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet80|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet84|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet88|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet92|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet96|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet100|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet104|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet108|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet112|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet8|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet116|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet120|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet124|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet128|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet132|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet136|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet140|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet144|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet148|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet152|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet12|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet156|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet164|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet176|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet180|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet184|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet188|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet16|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet20|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet24|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet28|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet32|3-4": { + "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]" + }, + "Ethernet0|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet36|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet40|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet44|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet48|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet52|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet56|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet60|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet64|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet68|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet72|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet4|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet76|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet80|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet84|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet88|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet92|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet96|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet100|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet104|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet108|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet112|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet8|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet116|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet120|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet124|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet128|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet132|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet136|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet140|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet144|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet148|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet152|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet12|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet156|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet164|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet176|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet180|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet184|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet188|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet16|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet20|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet24|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet28|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet32|0-2": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, + "Ethernet0|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet36|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet40|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet44|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet48|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet52|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet56|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet60|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet64|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet68|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet72|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet4|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet76|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet80|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet84|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet88|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet92|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet96|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet100|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet104|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet108|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet112|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet8|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet116|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet120|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet124|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet128|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet132|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet136|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet140|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet144|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet148|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet152|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet12|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet156|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet164|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet176|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet180|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet184|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet188|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet16|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet20|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet24|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet28|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + }, "Ethernet32|5-6": { + "profile" : "[BUFFER_PROFILE|egress_lossy_profile]" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffers-dell6100.json b/src/sonic-config-engine/tests/sample_output/py3/buffers-dell6100.json index 17a691a2ffaa..08f238bcc40d 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffers-dell6100.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffers-dell6100.json @@ -1,4 +1,3 @@ - { "CABLE_LENGTH": { "AZURE": { @@ -65,7 +64,9 @@ "Ethernet60": "5m", "Ethernet61": "5m", "Ethernet62": "5m", - "Ethernet63": "5m" + "Ethernet63": "5m", + "Ethernet64": "5m", + "Ethernet65": "5m" } }, diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox2410-dynamic.json b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox2410-dynamic.json index 215fa85cf2dd..109389c95047 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox2410-dynamic.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox2410-dynamic.json @@ -1,4 +1,3 @@ - { "CABLE_LENGTH": { "AZURE": { diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox2410.json b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox2410.json index c212061af4bd..eaf119ab0acd 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox2410.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox2410.json @@ -1,4 +1,3 @@ - { "CABLE_LENGTH": { "AZURE": { diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox2700.json b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox2700.json index 2aaef20598da..49da9b064afa 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox2700.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox2700.json @@ -1,4 +1,3 @@ - { "CABLE_LENGTH": { "AZURE": { diff --git a/src/sonic-config-engine/tests/sample_output/py3/docker-dhcp-relay.supervisord.conf b/src/sonic-config-engine/tests/sample_output/py3/docker-dhcp-relay.supervisord.conf index 521899b939f4..5456409738e6 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/docker-dhcp-relay.supervisord.conf +++ b/src/sonic-config-engine/tests/sample_output/py3/docker-dhcp-relay.supervisord.conf @@ -68,7 +68,7 @@ dependent_startup_wait_for=start:exited programs=dhcpmon-Vlan1000 [program:dhcpmon-Vlan1000] -command=/usr/sbin/dhcpmon -id Vlan1000 -iu Vlan2000 -iu PortChannel01 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -im eth0 -4 -6 +command=/usr/sbin/dhcpmon -id Vlan1000 -iu Vlan2000 -iu PortChannel01 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -im eth0 priority=4 autostart=false autorestart=false diff --git a/src/sonic-config-engine/tests/sample_output/py3/ports.json b/src/sonic-config-engine/tests/sample_output/py3/ports.json index 1fee36338bd2..de9d4e25d1f3 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/ports.json +++ b/src/sonic-config-engine/tests/sample_output/py3/ports.json @@ -33,5 +33,194 @@ "description": "fortyGigE0/16" }, "OP": "SET" + }, + { + "PORT_TABLE:Ethernet20": { + "speed": "100000", + "description": "fortyGigE0/20" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet24": { + "speed": "100000", + "description": "fortyGigE0/24" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet28": { + "speed": "100000", + "description": "fortyGigE0/28" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet32": { + "speed": "100000", + "description": "fortyGigE0/32" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet36": { + "speed": "100000", + "description": "fortyGigE0/36" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet40": { + "speed": "100000", + "description": "fortyGigE0/40" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet44": { + "speed": "100000", + "description": "fortyGigE0/44" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet48": { + "speed": "100000", + "description": "fortyGigE0/48" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet52": { + "speed": "100000", + "description": "fortyGigE0/52" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet56": { + "speed": "100000", + "description": "fortyGigE0/56" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet60": { + "speed": "100000", + "description": "fortyGigE0/60" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet64": { + "speed": "100000", + "description": "fortyGigE0/64" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet68": { + "speed": "100000", + "description": "fortyGigE0/68" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet72": { + "speed": "100000", + "description": "fortyGigE0/72" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet76": { + "speed": "100000", + "description": "fortyGigE0/76" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet80": { + "speed": "100000", + "description": "fortyGigE0/80" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet84": { + "speed": "100000", + "description": "fortyGigE0/84" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet88": { + "speed": "100000", + "description": "fortyGigE0/88" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet92": { + "speed": "100000", + "description": "fortyGigE0/92" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet96": { + "speed": "100000", + "description": "fortyGigE0/96" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet100": { + "speed": "100000", + "description": "fortyGigE0/100" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet104": { + "speed": "100000", + "description": "fortyGigE0/104" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet108": { + "speed": "100000", + "description": "fortyGigE0/108" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet112": { + "speed": "100000", + "description": "fortyGigE0/112" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet116": { + "speed": "100000", + "description": "fortyGigE0/116" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet120": { + "speed": "100000", + "description": "fortyGigE0/120" + }, + "OP": "SET" + }, + { + "PORT_TABLE:Ethernet124": { + "speed": "100000", + "description": "fortyGigE0/124" + }, + "OP": "SET" } ] 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 9a6f8a2ada78..b15fcf7a36c1 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 @@ -119,196 +119,224 @@ "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" } }, "WRED_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 new file mode 100644 index 000000000000..84a2613df90d --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7050cx3-dualtor.json @@ -0,0 +1,1145 @@ +{ + "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": "1", + "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" : "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": "2", + "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": { + "AZURE": { + "0": "0", + "1": "0", + "2": "0", + "3": "3", + "4": "4", + "5": "0", + "6": "0", + "7": "7" + } + }, + "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" : "2,3,4,6", + "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" : "2,3,4,6", + "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" : "2,3,4,6", + "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" : "2,3,4,6", + "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" : "2,3,4,6", + "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" : "2,3,4,6", + "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" : "2,3,4,6", + "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" : "2,3,4,6", + "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.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet28|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet32|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet36|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "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.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet92|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet96|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet100|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "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.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet28|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet32|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet36|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "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.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet92|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet96|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet100|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "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-arista7260-dualtor.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json new file mode 100644 index 000000000000..e8476cc0c865 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-dualtor.json @@ -0,0 +1,2137 @@ +{ + "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": "1", + "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" : "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": "2", + "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": { + "AZURE": { + "0": "0", + "1": "0", + "2": "0", + "3": "3", + "4": "4", + "5": "0", + "6": "0", + "7": "7" + } + }, + "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" : "2,3,4,6", + "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" : "2,3,4,6", + "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" : "2,3,4,6", + "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" : "2,3,4,6", + "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" : "2,3,4,6", + "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" : "2,3,4,6", + "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" : "2,3,4,6", + "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" : "2,3,4,6", + "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.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet52|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet56|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet60|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet64|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet68|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet72|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet76|2": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "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.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet52|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet56|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet60|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet64|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet68|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet72|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet76|6": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "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-t1.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json new file mode 100644 index 000000000000..9db828a759e4 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7260-t1.json @@ -0,0 +1,1045 @@ +{ + "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" + } + }, + "TC_TO_PRIORITY_GROUP_MAP": { + "AZURE": { + "0": "0", + "1": "0", + "2": "2", + "3": "3", + "4": "4", + "5": "0", + "6": "6", + "7": "7" + } + }, + "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" : "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/sample_output/py3/qos-arista7800r3-48cq2-lc.json b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7800r3-48cq2-lc.json new file mode 100644 index 000000000000..92ba2caf8d17 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-arista7800r3-48cq2-lc.json @@ -0,0 +1,1532 @@ +{ + "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" + }, + "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" + }, + "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" + } + }, + "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" + } + }, + "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" + }, + "Ethernet164|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" + }, + "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" + }, + "Ethernet164|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" + }, + "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" + }, + "Ethernet164|0": { + "scheduler": "scheduler.0" + }, + "Ethernet176|0": { + "scheduler": "scheduler.0" + }, + "Ethernet180|0": { + "scheduler": "scheduler.0" + }, + "Ethernet184|0": { + "scheduler": "scheduler.0" + }, + "Ethernet188|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" + }, + "Ethernet164|1": { + "scheduler": "scheduler.0" + }, + "Ethernet176|1": { + "scheduler": "scheduler.0" + }, + "Ethernet180|1": { + "scheduler": "scheduler.0" + }, + "Ethernet184|1": { + "scheduler": "scheduler.0" + }, + "Ethernet188|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" + }, + "Ethernet164|2": { + "scheduler": "scheduler.0" + }, + "Ethernet176|2": { + "scheduler": "scheduler.0" + }, + "Ethernet180|2": { + "scheduler": "scheduler.0" + }, + "Ethernet184|2": { + "scheduler": "scheduler.0" + }, + "Ethernet188|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" + }, + "Ethernet164|5": { + "scheduler": "scheduler.0" + }, + "Ethernet176|5": { + "scheduler": "scheduler.0" + }, + "Ethernet180|5": { + "scheduler": "scheduler.0" + }, + "Ethernet184|5": { + "scheduler": "scheduler.0" + }, + "Ethernet188|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" + }, + "Ethernet164|6": { + "scheduler": "scheduler.0" + }, + "Ethernet176|6": { + "scheduler": "scheduler.0" + }, + "Ethernet180|6": { + "scheduler": "scheduler.0" + }, + "Ethernet184|6": { + "scheduler": "scheduler.0" + }, + "Ethernet188|6": { + "scheduler": "scheduler.0" + } + } +} 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 eecd81c99e5c..27bea8cd32d3 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 @@ -119,308 +119,352 @@ "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet1": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet5": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet6": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet7": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet9": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet10": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet11": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet13": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet14": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet15": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet17": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet21": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet22": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet23": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet25": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet26": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet27": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet29": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet30": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet31": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet37": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet38": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet39": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet41": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet42": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet53": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet54": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet55": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "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" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet57": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet58": { "dscp_to_tc_map" : "AZURE", "tc_to_queue_map" : "AZURE", "tc_to_pg_map" : "AZURE", "pfc_to_queue_map": "AZURE", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" } }, "WRED_PROFILE": { 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 new file mode 100644 index 000000000000..8130a455497a --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-dell9332.json @@ -0,0 +1,1133 @@ +{ + "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": "1" + }, + "scheduler.1": { + "type" : "DWRR", + "weight": "1" + }, + "scheduler.2": { + "type" : "DWRR", + "weight": "100" + } + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + } + }, + "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" + }, + "Ethernet8|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet16|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet24|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet32|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet40|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet48|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet56|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet64|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet72|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet80|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet88|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet96|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet104|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet112|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet120|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet128|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" + }, + "Ethernet152|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet160|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" + }, + "Ethernet184|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet192|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" + }, + "Ethernet216|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet224|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" + }, + "Ethernet248|3": { + "scheduler" : "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet0|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet8|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet16|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet24|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet32|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet40|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet48|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet56|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet64|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet72|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet80|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet88|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet96|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet104|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet112|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet120|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet128|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet136|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet144|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet152|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet160|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet168|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet176|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet184|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet192|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet200|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet208|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet216|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet224|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet232|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet240|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet248|4": { + "scheduler" : "scheduler.2", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet0|0": { + "scheduler": "scheduler.0" + }, + "Ethernet8|0": { + "scheduler": "scheduler.0" + }, + "Ethernet16|0": { + "scheduler": "scheduler.0" + }, + "Ethernet24|0": { + "scheduler": "scheduler.0" + }, + "Ethernet32|0": { + "scheduler": "scheduler.0" + }, + "Ethernet40|0": { + "scheduler": "scheduler.0" + }, + "Ethernet48|0": { + "scheduler": "scheduler.0" + }, + "Ethernet56|0": { + "scheduler": "scheduler.0" + }, + "Ethernet64|0": { + "scheduler": "scheduler.0" + }, + "Ethernet72|0": { + "scheduler": "scheduler.0" + }, + "Ethernet80|0": { + "scheduler": "scheduler.0" + }, + "Ethernet88|0": { + "scheduler": "scheduler.0" + }, + "Ethernet96|0": { + "scheduler": "scheduler.0" + }, + "Ethernet104|0": { + "scheduler": "scheduler.0" + }, + "Ethernet112|0": { + "scheduler": "scheduler.0" + }, + "Ethernet120|0": { + "scheduler": "scheduler.0" + }, + "Ethernet128|0": { + "scheduler": "scheduler.0" + }, + "Ethernet136|0": { + "scheduler": "scheduler.0" + }, + "Ethernet144|0": { + "scheduler": "scheduler.0" + }, + "Ethernet152|0": { + "scheduler": "scheduler.0" + }, + "Ethernet160|0": { + "scheduler": "scheduler.0" + }, + "Ethernet168|0": { + "scheduler": "scheduler.0" + }, + "Ethernet176|0": { + "scheduler": "scheduler.0" + }, + "Ethernet184|0": { + "scheduler": "scheduler.0" + }, + "Ethernet192|0": { + "scheduler": "scheduler.0" + }, + "Ethernet200|0": { + "scheduler": "scheduler.0" + }, + "Ethernet208|0": { + "scheduler": "scheduler.0" + }, + "Ethernet216|0": { + "scheduler": "scheduler.0" + }, + "Ethernet224|0": { + "scheduler": "scheduler.0" + }, + "Ethernet232|0": { + "scheduler": "scheduler.0" + }, + "Ethernet240|0": { + "scheduler": "scheduler.0" + }, + "Ethernet248|0": { + "scheduler": "scheduler.0" + }, + "Ethernet0|1": { + "scheduler": "scheduler.0" + }, + "Ethernet8|1": { + "scheduler": "scheduler.0" + }, + "Ethernet16|1": { + "scheduler": "scheduler.0" + }, + "Ethernet24|1": { + "scheduler": "scheduler.0" + }, + "Ethernet32|1": { + "scheduler": "scheduler.0" + }, + "Ethernet40|1": { + "scheduler": "scheduler.0" + }, + "Ethernet48|1": { + "scheduler": "scheduler.0" + }, + "Ethernet56|1": { + "scheduler": "scheduler.0" + }, + "Ethernet64|1": { + "scheduler": "scheduler.0" + }, + "Ethernet72|1": { + "scheduler": "scheduler.0" + }, + "Ethernet80|1": { + "scheduler": "scheduler.0" + }, + "Ethernet88|1": { + "scheduler": "scheduler.0" + }, + "Ethernet96|1": { + "scheduler": "scheduler.0" + }, + "Ethernet104|1": { + "scheduler": "scheduler.0" + }, + "Ethernet112|1": { + "scheduler": "scheduler.0" + }, + "Ethernet120|1": { + "scheduler": "scheduler.0" + }, + "Ethernet128|1": { + "scheduler": "scheduler.0" + }, + "Ethernet136|1": { + "scheduler": "scheduler.0" + }, + "Ethernet144|1": { + "scheduler": "scheduler.0" + }, + "Ethernet152|1": { + "scheduler": "scheduler.0" + }, + "Ethernet160|1": { + "scheduler": "scheduler.0" + }, + "Ethernet168|1": { + "scheduler": "scheduler.0" + }, + "Ethernet176|1": { + "scheduler": "scheduler.0" + }, + "Ethernet184|1": { + "scheduler": "scheduler.0" + }, + "Ethernet192|1": { + "scheduler": "scheduler.0" + }, + "Ethernet200|1": { + "scheduler": "scheduler.0" + }, + "Ethernet208|1": { + "scheduler": "scheduler.0" + }, + "Ethernet216|1": { + "scheduler": "scheduler.0" + }, + "Ethernet224|1": { + "scheduler": "scheduler.0" + }, + "Ethernet232|1": { + "scheduler": "scheduler.0" + }, + "Ethernet240|1": { + "scheduler": "scheduler.0" + }, + "Ethernet248|1": { + "scheduler": "scheduler.0" + }, + "Ethernet0|2": { + "scheduler": "scheduler.0" + }, + "Ethernet8|2": { + "scheduler": "scheduler.0" + }, + "Ethernet16|2": { + "scheduler": "scheduler.0" + }, + "Ethernet24|2": { + "scheduler": "scheduler.0" + }, + "Ethernet32|2": { + "scheduler": "scheduler.0" + }, + "Ethernet40|2": { + "scheduler": "scheduler.0" + }, + "Ethernet48|2": { + "scheduler": "scheduler.0" + }, + "Ethernet56|2": { + "scheduler": "scheduler.0" + }, + "Ethernet64|2": { + "scheduler": "scheduler.0" + }, + "Ethernet72|2": { + "scheduler": "scheduler.0" + }, + "Ethernet80|2": { + "scheduler": "scheduler.0" + }, + "Ethernet88|2": { + "scheduler": "scheduler.0" + }, + "Ethernet96|2": { + "scheduler": "scheduler.0" + }, + "Ethernet104|2": { + "scheduler": "scheduler.0" + }, + "Ethernet112|2": { + "scheduler": "scheduler.0" + }, + "Ethernet120|2": { + "scheduler": "scheduler.0" + }, + "Ethernet128|2": { + "scheduler": "scheduler.0" + }, + "Ethernet136|2": { + "scheduler": "scheduler.0" + }, + "Ethernet144|2": { + "scheduler": "scheduler.0" + }, + "Ethernet152|2": { + "scheduler": "scheduler.0" + }, + "Ethernet160|2": { + "scheduler": "scheduler.0" + }, + "Ethernet168|2": { + "scheduler": "scheduler.0" + }, + "Ethernet176|2": { + "scheduler": "scheduler.0" + }, + "Ethernet184|2": { + "scheduler": "scheduler.0" + }, + "Ethernet192|2": { + "scheduler": "scheduler.0" + }, + "Ethernet200|2": { + "scheduler": "scheduler.0" + }, + "Ethernet208|2": { + "scheduler": "scheduler.0" + }, + "Ethernet216|2": { + "scheduler": "scheduler.0" + }, + "Ethernet224|2": { + "scheduler": "scheduler.0" + }, + "Ethernet232|2": { + "scheduler": "scheduler.0" + }, + "Ethernet240|2": { + "scheduler": "scheduler.0" + }, + "Ethernet248|2": { + "scheduler": "scheduler.0" + }, + "Ethernet0|5": { + "scheduler": "scheduler.0" + }, + "Ethernet8|5": { + "scheduler": "scheduler.0" + }, + "Ethernet16|5": { + "scheduler": "scheduler.0" + }, + "Ethernet24|5": { + "scheduler": "scheduler.0" + }, + "Ethernet32|5": { + "scheduler": "scheduler.0" + }, + "Ethernet40|5": { + "scheduler": "scheduler.0" + }, + "Ethernet48|5": { + "scheduler": "scheduler.0" + }, + "Ethernet56|5": { + "scheduler": "scheduler.0" + }, + "Ethernet64|5": { + "scheduler": "scheduler.0" + }, + "Ethernet72|5": { + "scheduler": "scheduler.0" + }, + "Ethernet80|5": { + "scheduler": "scheduler.0" + }, + "Ethernet88|5": { + "scheduler": "scheduler.0" + }, + "Ethernet96|5": { + "scheduler": "scheduler.0" + }, + "Ethernet104|5": { + "scheduler": "scheduler.0" + }, + "Ethernet112|5": { + "scheduler": "scheduler.0" + }, + "Ethernet120|5": { + "scheduler": "scheduler.0" + }, + "Ethernet128|5": { + "scheduler": "scheduler.0" + }, + "Ethernet136|5": { + "scheduler": "scheduler.0" + }, + "Ethernet144|5": { + "scheduler": "scheduler.0" + }, + "Ethernet152|5": { + "scheduler": "scheduler.0" + }, + "Ethernet160|5": { + "scheduler": "scheduler.0" + }, + "Ethernet168|5": { + "scheduler": "scheduler.0" + }, + "Ethernet176|5": { + "scheduler": "scheduler.0" + }, + "Ethernet184|5": { + "scheduler": "scheduler.0" + }, + "Ethernet192|5": { + "scheduler": "scheduler.0" + }, + "Ethernet200|5": { + "scheduler": "scheduler.0" + }, + "Ethernet208|5": { + "scheduler": "scheduler.0" + }, + "Ethernet216|5": { + "scheduler": "scheduler.0" + }, + "Ethernet224|5": { + "scheduler": "scheduler.0" + }, + "Ethernet232|5": { + "scheduler": "scheduler.0" + }, + "Ethernet240|5": { + "scheduler": "scheduler.0" + }, + "Ethernet248|5": { + "scheduler": "scheduler.0" + }, + "Ethernet0|6": { + "scheduler": "scheduler.0" + }, + "Ethernet8|6": { + "scheduler": "scheduler.0" + }, + "Ethernet16|6": { + "scheduler": "scheduler.0" + }, + "Ethernet24|6": { + "scheduler": "scheduler.0" + }, + "Ethernet32|6": { + "scheduler": "scheduler.0" + }, + "Ethernet40|6": { + "scheduler": "scheduler.0" + }, + "Ethernet48|6": { + "scheduler": "scheduler.0" + }, + "Ethernet56|6": { + "scheduler": "scheduler.0" + }, + "Ethernet64|6": { + "scheduler": "scheduler.0" + }, + "Ethernet72|6": { + "scheduler": "scheduler.0" + }, + "Ethernet80|6": { + "scheduler": "scheduler.0" + }, + "Ethernet88|6": { + "scheduler": "scheduler.0" + }, + "Ethernet96|6": { + "scheduler": "scheduler.0" + }, + "Ethernet104|6": { + "scheduler": "scheduler.0" + }, + "Ethernet112|6": { + "scheduler": "scheduler.0" + }, + "Ethernet120|6": { + "scheduler": "scheduler.0" + }, + "Ethernet128|6": { + "scheduler": "scheduler.0" + }, + "Ethernet136|6": { + "scheduler": "scheduler.0" + }, + "Ethernet144|6": { + "scheduler": "scheduler.0" + }, + "Ethernet152|6": { + "scheduler": "scheduler.0" + }, + "Ethernet160|6": { + "scheduler": "scheduler.0" + }, + "Ethernet168|6": { + "scheduler": "scheduler.0" + }, + "Ethernet176|6": { + "scheduler": "scheduler.0" + }, + "Ethernet184|6": { + "scheduler": "scheduler.0" + }, + "Ethernet192|6": { + "scheduler": "scheduler.0" + }, + "Ethernet200|6": { + "scheduler": "scheduler.0" + }, + "Ethernet208|6": { + "scheduler": "scheduler.0" + }, + "Ethernet216|6": { + "scheduler": "scheduler.0" + }, + "Ethernet224|6": { + "scheduler": "scheduler.0" + }, + "Ethernet232|6": { + "scheduler": "scheduler.0" + }, + "Ethernet240|6": { + "scheduler": "scheduler.0" + }, + "Ethernet248|6": { + "scheduler": "scheduler.0" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/py3/radvd.conf b/src/sonic-config-engine/tests/sample_output/py3/radvd.conf new file mode 100644 index 000000000000..43de8b847756 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/radvd.conf @@ -0,0 +1,35 @@ +# =========== Managed by sonic-cfggen -- DO NOT edit manually! ==================== +# Generated by /usr/share/sonic/templates/radvd.conf.j2 using config DB data +# File: /etc/radvd.conf +# +# Config file for radvd, the router advertisement daemon +# See man page for radvd.conf for descriptions of all available options +# + +interface Vlan1000 +{ + IgnoreIfMissing on; + AdvSendAdvert on; + MinRtrAdvInterval 60; + MaxRtrAdvInterval 180; + AdvManagedFlag on; + AdvOtherConfigFlag off; + AdvLinkMTU 9100; + AdvHomeAgentFlag off; + prefix fc02:1000::/64 { + AdvOnLink on; + AdvAutonomous off; + AdvRouterAddr off; + AdvValidLifetime infinity; + AdvPreferredLifetime infinity; + }; + prefix fc02:2000::/64 { + AdvOnLink on; + AdvAutonomous off; + AdvRouterAddr off; + AdvValidLifetime infinity; + AdvPreferredLifetime infinity; + }; +}; + + diff --git a/src/sonic-config-engine/tests/sample_platform.json b/src/sonic-config-engine/tests/sample_platform.json index 4a8804a552fe..fbb281e07393 100644 --- a/src/sonic-config-engine/tests/sample_platform.json +++ b/src/sonic-config-engine/tests/sample_platform.json @@ -1,4 +1,16 @@ { + "chassis": { + "psus": [ + { + "name": "PSU 1", + "temperature": false + }, + { + "name": "PSU 2", + "temperature": false + } + ] + }, "interfaces": { "Ethernet0": { "index": "1,1,1,1", 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 08f750457499..d6a8c394f604 100644 --- a/src/sonic-config-engine/tests/simple-sample-graph-case.xml +++ b/src/sonic-config-engine/tests/simple-sample-graph-case.xml @@ -527,6 +527,342 @@ 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 diff --git a/src/sonic-config-engine/tests/simple-sample-graph-metadata.xml b/src/sonic-config-engine/tests/simple-sample-graph-metadata.xml index 5691ff81578a..fbc33b49862a 100644 --- a/src/sonic-config-engine/tests/simple-sample-graph-metadata.xml +++ b/src/sonic-config-engine/tests/simple-sample-graph-metadata.xml @@ -321,6 +321,342 @@ 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 diff --git a/src/sonic-config-engine/tests/simple-sample-graph.xml b/src/sonic-config-engine/tests/simple-sample-graph.xml index 388627f8cdbf..8d7800686c7a 100644 --- a/src/sonic-config-engine/tests/simple-sample-graph.xml +++ b/src/sonic-config-engine/tests/simple-sample-graph.xml @@ -72,7 +72,7 @@ - 0 + 1 BGPMonitor @@ -190,6 +190,14 @@ 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 @@ -205,6 +213,7 @@ 192.0.0.1;192.0.0.2 2000 2000 + Tagged 192.168.0.240/27 @@ -415,6 +424,330 @@ 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 diff --git a/src/sonic-config-engine/tests/t0-sample-bgp-speaker.xml b/src/sonic-config-engine/tests/t0-sample-bgp-speaker.xml index f2690985d9f3..552d219964c2 100644 --- a/src/sonic-config-engine/tests/t0-sample-bgp-speaker.xml +++ b/src/sonic-config-engine/tests/t0-sample-bgp-speaker.xml @@ -327,6 +327,400 @@ + + + + + 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 + + + Force10-S6000 + + + diff --git a/src/sonic-config-engine/tests/t0-sample-deployment-id.xml b/src/sonic-config-engine/tests/t0-sample-deployment-id.xml new file mode 100644 index 000000000000..30517dfee19f --- /dev/null +++ b/src/sonic-config-engine/tests/t0-sample-deployment-id.xml @@ -0,0 +1,741 @@ + + + + + + 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 + + + false + switch-t0 + 10.0.0.60 + ARISTA03T1 + 10.0.0.61 + 1 + 180 + 60 + + + switch-t0 + FC00::79 + ARISTA03T1 + FC00::7A + 1 + 180 + 60 + + + false + switch-t0 + 10.0.0.62 + ARISTA04T1 + 10.0.0.63 + 1 + 180 + 60 + + + switch-t0 + FC00::7D + ARISTA04T1 + FC00::7E + 1 + 180 + 60 + + + + + 65100 + switch-t0 + + +
10.0.0.57
+ + + +
+ +
10.0.0.59
+ + + +
+ +
10.0.0.61
+ + + +
+ +
10.0.0.63
+ + + +
+ +
10.1.0.32
+ BGPSLBPassive + 10.10.10.10/26;100.100.100.100/26 +
+
+ +
+ + 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/112 + + + + PortChannel02 + fortyGigE0/116 + + + + PortChannel03 + fortyGigE0/120 + + + + PortChannel04 + fortyGigE0/124 + + + + + + Vlan1000 + fortyGigE0/4;fortyGigE0/8;fortyGigE0/12;fortyGigE0/16;fortyGigE0/20;fortyGigE0/24;fortyGigE0/28;fortyGigE0/32;fortyGigE0/36;fortyGigE0/40;fortyGigE0/44;fortyGigE0/48;fortyGigE0/52;fortyGigE0/56;fortyGigE0/60;fortyGigE0/64;fortyGigE0/68;fortyGigE0/72;fortyGigE0/76;fortyGigE0/80;fortyGigE0/84;fortyGigE0/88;fortyGigE0/92;fortyGigE0/96 + False + 0.0.0.0/0 + + 192.0.0.1;192.0.0.2 + 1000 + 1000 + 192.168.0.0/27 + + + + + + PortChannel01 + 10.0.0.56/31 + + + + PortChannel01 + FC00::71/126 + + + + PortChannel02 + 10.0.0.58/31 + + + + PortChannel02 + FC00::75/126 + + + + PortChannel03 + 10.0.0.60/31 + + + + PortChannel03 + FC00::79/126 + + + + PortChannel04 + 10.0.0.62/31 + + + + PortChannel04 + FC00::7D/126 + + + + Vlan1000 + 192.168.0.1/27 + + + + + + PortChannel01;PortChannel02;PortChannel03;PortChannel04 + DataAcl + DataPlane + + + SNMP + SNMP_ACL + SNMP + + + + + + + + + + DeviceInterfaceLink + ARISTA01T1 + Ethernet1/1 + switch-t0 + fortyGigE0/112 + + + DeviceInterfaceLink + ARISTA02T1 + Ethernet1/1 + switch-t0 + fortyGigE0/116 + + + DeviceInterfaceLink + ARISTA03T1 + Ethernet1/1 + switch-t0 + fortyGigE0/120 + + + DeviceInterfaceLink + ARISTA04T1 + Ethernet1/1 + switch-t0 + fortyGigE0/124 + + + + + switch-t0 + Force10-S6000 + + + ARISTA01T1 + Arista + + + ARISTA02T1 + Arista + + + ARISTA03T1 + Arista + + + ARISTA04T1 + Arista + + + + + + + + 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 + + + Force10-S6000 + + + + + + + switch-t0 + + + ErspanDestinationIpv4 + + 2.2.2.2 + + + + + + + switch-t0 + Force10-S6000 +
diff --git a/src/sonic-config-engine/tests/t0-sample-graph-mvrf.xml b/src/sonic-config-engine/tests/t0-sample-graph-mvrf.xml index e7e2b5789816..3fd73f7369fe 100644 --- a/src/sonic-config-engine/tests/t0-sample-graph-mvrf.xml +++ b/src/sonic-config-engine/tests/t0-sample-graph-mvrf.xml @@ -387,6 +387,398 @@
+ + + + + DeviceInterface + + true + 1 + Ethernet0 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet4 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet8 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet12 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet16 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet20 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet24 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet28 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet32 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet36 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet40 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet44 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet48 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet52 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet56 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet60 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet64 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet68 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet72 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet76 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet80 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet84 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet88 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet92 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet96 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet100 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet104 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet108 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet112 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet116 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet120 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet124 + + false + 0 + 0 + 40000 + + + Force10-S6000 + + + diff --git a/src/sonic-config-engine/tests/t0-sample-graph.xml b/src/sonic-config-engine/tests/t0-sample-graph.xml index f0da95149653..15fb1dc79210 100644 --- a/src/sonic-config-engine/tests/t0-sample-graph.xml +++ b/src/sonic-config-engine/tests/t0-sample-graph.xml @@ -90,7 +90,7 @@ - 0 + 1 BGPMonitor @@ -498,6 +498,374 @@ + + + + + DeviceInterface + + true + 1 + Ethernet0 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet8 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet12 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet16 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet20 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet24 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet28 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet32 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet36 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet40 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet44 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet48 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet52 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet56 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet60 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet64 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet68 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet72 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet76 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet80 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet84 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet88 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet92 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet96 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet100 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet104 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet108 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet112 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet116 + + false + 0 + 0 + 40000 + + + DeviceInterface + + true + 1 + Ethernet120 + + false + 0 + 0 + 40000 + + + Force10-S6000 + + + diff --git a/src/sonic-config-engine/tests/t2-chassis-fe-graph-pc.xml b/src/sonic-config-engine/tests/t2-chassis-fe-graph-pc.xml index bc1a5142fc86..212d9c76a647 100644 --- a/src/sonic-config-engine/tests/t2-chassis-fe-graph-pc.xml +++ b/src/sonic-config-engine/tests/t2-chassis-fe-graph-pc.xml @@ -296,6 +296,318 @@ 0 25000 + + DeviceInterface + + false + 1 + Ethernet24 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet28 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet32 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet36 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet40 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet44 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet48 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet52 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet56 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet60 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet64 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet68 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet72 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet76 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet80 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet84 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet88 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet92 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet96 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet100 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet104 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet108 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet112 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet116 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet120 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet124 + + false + 0 + 0 + 40000 + false 0 diff --git a/src/sonic-config-engine/tests/t2-chassis-fe-graph-vni.xml b/src/sonic-config-engine/tests/t2-chassis-fe-graph-vni.xml index 0dc534b3de88..9384446aa913 100644 --- a/src/sonic-config-engine/tests/t2-chassis-fe-graph-vni.xml +++ b/src/sonic-config-engine/tests/t2-chassis-fe-graph-vni.xml @@ -224,6 +224,354 @@ 0 40000 + + DeviceInterface + + false + 1 + Ethernet12 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet16 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet20 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet24 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet28 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet32 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet36 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet40 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet44 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet48 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet52 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet56 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet60 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet64 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet68 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet72 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet76 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet80 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet84 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet88 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet92 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet96 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet100 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet104 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet108 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet112 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet116 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet120 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet124 + + false + 0 + 0 + 40000 + false 0 diff --git a/src/sonic-config-engine/tests/t2-chassis-fe-graph.xml b/src/sonic-config-engine/tests/t2-chassis-fe-graph.xml index 3b0c56a57a70..3fd8ed01c215 100644 --- a/src/sonic-config-engine/tests/t2-chassis-fe-graph.xml +++ b/src/sonic-config-engine/tests/t2-chassis-fe-graph.xml @@ -223,6 +223,354 @@ 0 40000 + + DeviceInterface + + false + 1 + Ethernet12 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet16 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet20 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet24 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet28 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet32 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet36 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet40 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet44 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet48 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet52 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet56 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet60 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet64 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet68 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet72 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet76 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet80 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet84 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet88 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet92 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet96 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet100 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet104 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet108 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet112 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet116 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet120 + + false + 0 + 0 + 40000 + + + DeviceInterface + + false + 1 + Ethernet124 + + false + 0 + 0 + 40000 + false 0 diff --git a/src/sonic-config-engine/tests/test_cfggen.py b/src/sonic-config-engine/tests/test_cfggen.py index bf1221cab9ee..29773dffc628 100644 --- a/src/sonic-config-engine/tests/test_cfggen.py +++ b/src/sonic-config-engine/tests/test_cfggen.py @@ -23,6 +23,7 @@ def setUp(self): self.sample_graph_metadata = os.path.join(self.test_dir, 'simple-sample-graph-metadata.xml') self.sample_graph_pc_test = os.path.join(self.test_dir, 'pc-test-graph.xml') self.sample_graph_bgp_speaker = os.path.join(self.test_dir, 't0-sample-bgp-speaker.xml') + self.sample_graph_deployment_id = os.path.join(self.test_dir, 't0-sample-deployment-id.xml') self.sample_graph_voq = os.path.join(self.test_dir, 'sample-voq-graph.xml') self.sample_device_desc = os.path.join(self.test_dir, 'device.xml') self.port_config = os.path.join(self.test_dir, 't0-sample-port-config.ini') @@ -82,44 +83,46 @@ def test_device_desc_mgmt_ip(self): self.assertEqual(output.strip(), "('eth0', '10.0.1.5/28')") def test_minigraph_hostname(self): - argument = '-v "DEVICE_METADATA[\'localhost\'][\'hostname\']" -m "' + self.sample_graph + '"' + argument = '-v "DEVICE_METADATA[\'localhost\'][\'hostname\']" -m "' + self.sample_graph + '" -p "' + self.port_config + '"' output = self.run_script(argument) self.assertEqual(output.strip(), 'OCPSCH01040DDLF') def test_minigraph_sku(self): - argument = '-v "DEVICE_METADATA[\'localhost\'][\'hwsku\']" -m "' + self.sample_graph + '"' + argument = '-v "DEVICE_METADATA[\'localhost\'][\'hwsku\']" -m "' + self.sample_graph + '" -p "' + self.port_config + '"' output = self.run_script(argument) self.assertEqual(output.strip(), 'Force10-Z9100') def test_minigraph_region(self): - argument = '-v "DEVICE_METADATA[\'localhost\'][\'region\']" -m "' + self.sample_graph_metadata + '"' + argument = '-v "DEVICE_METADATA[\'localhost\'][\'region\']" -m "' + self.sample_graph_metadata + '" -p "' + self.port_config + '"' output = self.run_script(argument) self.assertEqual(output.strip(), 'usfoo') def test_minigraph_cloudtype(self): - argument = '-v "DEVICE_METADATA[\'localhost\'][\'cloudtype\']" -m "' + self.sample_graph_metadata + '"' + argument = '-v "DEVICE_METADATA[\'localhost\'][\'cloudtype\']" -m "' + self.sample_graph_metadata + '" -p "' + self.port_config + '"' output = self.run_script(argument) self.assertEqual(output.strip(), 'Public') def test_minigraph_resourcetype(self): - argument = '-v "DEVICE_METADATA[\'localhost\'][\'resource_type\']" -m "' + self.sample_graph_metadata + '"' + argument = '-v "DEVICE_METADATA[\'localhost\'][\'resource_type\']" -m "' + self.sample_graph_metadata + '" -p "' + self.port_config + '"' output = self.run_script(argument) self.assertEqual(output.strip(), 'resource_type_x') def test_minigraph_downstream_subrole(self): - argument = '-v "DEVICE_METADATA[\'localhost\'][\'downstream_subrole\']" -m "' + self.sample_graph_metadata + '"' + argument = '-v "DEVICE_METADATA[\'localhost\'][\'downstream_subrole\']" -m "' + self.sample_graph_metadata + '" -p "' + self.port_config + '"' output = self.run_script(argument) self.assertEqual(output.strip(), 'downstream_subrole_y') def test_print_data(self): - argument = '-m "' + self.sample_graph + '" --print-data' + argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" --print-data' output = self.run_script(argument) self.assertTrue(len(output.strip()) > 0) - def test_jinja_expression(self, graph=None, expected_router_type='LeafRouter'): + def test_jinja_expression(self, graph=None, port_config=None, expected_router_type='LeafRouter'): if graph is None: graph = self.sample_graph - argument = '-m "' + graph + '" -v "DEVICE_METADATA[\'localhost\'][\'type\']"' + if port_config is None: + port_config = self.port_config + argument = '-m "' + graph + '" -p "' + port_config + '" -v "DEVICE_METADATA[\'localhost\'][\'type\']"' output = self.run_script(argument) self.assertEqual(output.strip(), expected_router_type) @@ -148,6 +151,7 @@ def test_var_json_data(self, **kwargs): utils.to_dict(output.strip()), utils.to_dict( '{\n "Vlan1000|Ethernet8": {\n "tagging_mode": "tagged"\n },' + ' \n "Vlan1001|Ethernet8": {\n "tagging_mode": "tagged"\n },' ' \n "Vlan2000|Ethernet12": {\n "tagging_mode": "tagged"\n },' ' \n "Vlan2001|Ethernet12": {\n "tagging_mode": "tagged"\n },' ' \n "Vlan2020|Ethernet12": {\n "tagging_mode": "tagged"\n }\n}' @@ -157,9 +161,10 @@ def test_var_json_data(self, **kwargs): self.assertEqual( utils.to_dict(output.strip()), utils.to_dict( - '{\n "Vlan1000|Ethernet8": {\n "tagging_mode": "untagged"\n },' + '{\n "Vlan1000|Ethernet8": {\n "tagging_mode": "tagged"\n },' + ' \n "Vlan1001|Ethernet8": {\n "tagging_mode": "tagged"\n },' ' \n "Vlan2000|Ethernet12": {\n "tagging_mode": "tagged"\n },' - ' \n "Vlan2001|Ethernet12": {\n "tagging_mode": "tagged"\n },' + ' \n "Vlan2001|Ethernet12": {\n "tagging_mode": "untagged"\n },' ' \n "Vlan2020|Ethernet12": {\n "tagging_mode": "tagged"\n }\n}' ) ) @@ -246,6 +251,7 @@ def test_minigraph_vlans(self, **kwargs): utils.to_dict(output.strip()), utils.to_dict( "{'Vlan1000': {'alias': 'ab1', 'dhcp_servers': ['192.0.0.1', '192.0.0.2'], 'vlanid': '1000'}, " + "'Vlan1001': {'alias': 'ab4', 'dhcp_servers': ['192.0.0.1', '192.0.0.2'], 'vlanid': '1001'}," "'Vlan2001': {'alias': 'ab3', 'dhcp_servers': ['192.0.0.1', '192.0.0.2'], 'vlanid': '2001'}," "'Vlan2000': {'alias': 'ab2', 'dhcp_servers': ['192.0.0.1', '192.0.0.2'], 'vlanid': '2000'}," "'Vlan2020': {'alias': 'kk1', 'dhcp_servers': ['192.0.0.1', '192.0.0.2'], 'vlanid': '2020'}}" @@ -262,6 +268,7 @@ def test_minigraph_vlan_members(self, **kwargs): utils.to_dict(output.strip()), utils.to_dict( "{('Vlan2000', 'Ethernet12'): {'tagging_mode': 'tagged'}, " + "('Vlan1001', 'Ethernet8'): {'tagging_mode': 'tagged'}, " "('Vlan1000', 'Ethernet8'): {'tagging_mode': 'tagged'}, " "('Vlan2020', 'Ethernet12'): {'tagging_mode': 'tagged'}, " "('Vlan2001', 'Ethernet12'): {'tagging_mode': 'tagged'}}" @@ -272,9 +279,10 @@ def test_minigraph_vlan_members(self, **kwargs): utils.to_dict(output.strip()), utils.to_dict( "{('Vlan2000', 'Ethernet12'): {'tagging_mode': 'tagged'}, " - "('Vlan1000', 'Ethernet8'): {'tagging_mode': 'untagged'}, " + "('Vlan1000', 'Ethernet8'): {'tagging_mode': 'tagged'}, " + "('Vlan1001', 'Ethernet8'): {'tagging_mode': 'tagged'}, " "('Vlan2020', 'Ethernet12'): {'tagging_mode': 'tagged'}, " - "('Vlan2001', 'Ethernet12'): {'tagging_mode': 'tagged'}}" + "('Vlan2001', 'Ethernet12'): {'tagging_mode': 'untagged'}}" ) ) @@ -393,37 +401,37 @@ def test_minigraph_port_autonegotiation(self): self.assertEqual( utils.to_dict(output.strip()), utils.to_dict( - "{'Ethernet0': {'alias': 'fortyGigE0/0', 'pfc_asym': 'off', 'lanes': '29,30,31,32', 'description': 'fortyGigE0/0', 'mtu': '9100', 'tpid': '0x8100'}, " + "{'Ethernet0': {'alias': 'fortyGigE0/0', 'pfc_asym': 'off', 'lanes': '29,30,31,32', 'description': 'fortyGigE0/0', 'mtu': '9100', 'tpid': '0x8100', 'speed': '40000'}, " "'Ethernet4': {'lanes': '25,26,27,28', 'description': 'Servers0:eth0', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/4', 'admin_status': 'up', 'autoneg': 'on', 'speed': '100000', 'fec': 'none'}, " - "'Ethernet8': {'lanes': '37,38,39,40', 'description': 'fortyGigE0/8', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/8', 'admin_status': 'up', 'autoneg': 'off', 'fec': 'none'}, " - "'Ethernet12': {'lanes': '33,34,35,36', 'description': 'fortyGigE0/12', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/12', 'admin_status': 'up'}, " - "'Ethernet16': {'lanes': '41,42,43,44', 'description': 'fortyGigE0/16', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/16', 'admin_status': 'up'}, " - "'Ethernet20': {'lanes': '45,46,47,48', 'description': 'fortyGigE0/20', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/20', 'admin_status': 'up'}, " - "'Ethernet24': {'lanes': '5,6,7,8', 'description': 'fortyGigE0/24', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/24', 'admin_status': 'up'}, " - "'Ethernet28': {'lanes': '1,2,3,4', 'description': 'fortyGigE0/28', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/28', 'admin_status': 'up'}, " - "'Ethernet32': {'lanes': '9,10,11,12', 'description': 'fortyGigE0/32', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/32', 'admin_status': 'up'}, " - "'Ethernet36': {'lanes': '13,14,15,16', 'description': 'fortyGigE0/36', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/36', 'admin_status': 'up'}, " - "'Ethernet40': {'lanes': '21,22,23,24', 'description': 'fortyGigE0/40', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/40', 'admin_status': 'up'}, " - "'Ethernet44': {'lanes': '17,18,19,20', 'description': 'fortyGigE0/44', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/44', 'admin_status': 'up'}, " - "'Ethernet48': {'lanes': '49,50,51,52', 'description': 'fortyGigE0/48', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/48', 'admin_status': 'up'}, " - "'Ethernet52': {'lanes': '53,54,55,56', 'description': 'fortyGigE0/52', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/52', 'admin_status': 'up'}, " - "'Ethernet56': {'lanes': '61,62,63,64', 'description': 'fortyGigE0/56', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/56', 'admin_status': 'up'}, " - "'Ethernet60': {'lanes': '57,58,59,60', 'description': 'fortyGigE0/60', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/60', 'admin_status': 'up'}, " - "'Ethernet64': {'lanes': '65,66,67,68', 'description': 'fortyGigE0/64', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/64', 'admin_status': 'up'}, " - "'Ethernet68': {'lanes': '69,70,71,72', 'description': 'fortyGigE0/68', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/68', 'admin_status': 'up'}, " - "'Ethernet72': {'lanes': '77,78,79,80', 'description': 'fortyGigE0/72', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/72', 'admin_status': 'up'}, " - "'Ethernet76': {'lanes': '73,74,75,76', 'description': 'fortyGigE0/76', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/76', 'admin_status': 'up'}, " - "'Ethernet80': {'lanes': '105,106,107,108', 'description': 'fortyGigE0/80', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/80', 'admin_status': 'up'}, " - "'Ethernet84': {'lanes': '109,110,111,112', 'description': 'fortyGigE0/84', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/84', 'admin_status': 'up'}, " - "'Ethernet88': {'lanes': '117,118,119,120', 'description': 'fortyGigE0/88', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/88', 'admin_status': 'up'}, " - "'Ethernet92': {'lanes': '113,114,115,116', 'description': 'fortyGigE0/92', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/92', 'admin_status': 'up'}, " - "'Ethernet96': {'lanes': '121,122,123,124', 'description': 'fortyGigE0/96', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/96', 'admin_status': 'up'}, " - "'Ethernet100': {'lanes': '125,126,127,128', 'description': 'Servers100:eth0', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/100', 'admin_status': 'up'}, " - "'Ethernet104': {'alias': 'fortyGigE0/104', 'pfc_asym': 'off', 'lanes': '85,86,87,88', 'description': 'fortyGigE0/104', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet108': {'alias': 'fortyGigE0/108', 'pfc_asym': 'off', 'lanes': '81,82,83,84', 'description': 'fortyGigE0/108', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet112': {'lanes': '89,90,91,92', 'description': 'ARISTA01T1:Ethernet1/1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/112', 'admin_status': 'up'}, " - "'Ethernet116': {'lanes': '93,94,95,96', 'description': 'ARISTA02T1:Ethernet1/1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/116', 'admin_status': 'up'}, " - "'Ethernet120': {'lanes': '97,98,99,100', 'description': 'ARISTA03T1:Ethernet1/1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/120', 'admin_status': 'up'}, " + "'Ethernet8': {'lanes': '37,38,39,40', 'description': 'fortyGigE0/8', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/8', 'admin_status': 'up', 'autoneg': 'off', 'fec': 'none', 'speed': '40000'}, " + "'Ethernet12': {'lanes': '33,34,35,36', 'description': 'fortyGigE0/12', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/12', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet16': {'lanes': '41,42,43,44', 'description': 'fortyGigE0/16', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/16', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet20': {'lanes': '45,46,47,48', 'description': 'fortyGigE0/20', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/20', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet24': {'lanes': '5,6,7,8', 'description': 'fortyGigE0/24', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/24', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet28': {'lanes': '1,2,3,4', 'description': 'fortyGigE0/28', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/28', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet32': {'lanes': '9,10,11,12', 'description': 'fortyGigE0/32', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/32', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet36': {'lanes': '13,14,15,16', 'description': 'fortyGigE0/36', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/36', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet40': {'lanes': '21,22,23,24', 'description': 'fortyGigE0/40', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/40', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet44': {'lanes': '17,18,19,20', 'description': 'fortyGigE0/44', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/44', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet48': {'lanes': '49,50,51,52', 'description': 'fortyGigE0/48', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/48', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet52': {'lanes': '53,54,55,56', 'description': 'fortyGigE0/52', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/52', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet56': {'lanes': '61,62,63,64', 'description': 'fortyGigE0/56', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/56', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet60': {'lanes': '57,58,59,60', 'description': 'fortyGigE0/60', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/60', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet64': {'lanes': '65,66,67,68', 'description': 'fortyGigE0/64', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/64', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet68': {'lanes': '69,70,71,72', 'description': 'fortyGigE0/68', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/68', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet72': {'lanes': '77,78,79,80', 'description': 'fortyGigE0/72', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/72', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet76': {'lanes': '73,74,75,76', 'description': 'fortyGigE0/76', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/76', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet80': {'lanes': '105,106,107,108', 'description': 'fortyGigE0/80', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/80', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet84': {'lanes': '109,110,111,112', 'description': 'fortyGigE0/84', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/84', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet88': {'lanes': '117,118,119,120', 'description': 'fortyGigE0/88', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/88', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet92': {'lanes': '113,114,115,116', 'description': 'fortyGigE0/92', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/92', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet96': {'lanes': '121,122,123,124', 'description': 'fortyGigE0/96', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/96', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet100': {'lanes': '125,126,127,128', 'description': 'Servers100:eth0', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/100', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet104': {'alias': 'fortyGigE0/104', 'pfc_asym': 'off', 'lanes': '85,86,87,88', 'description': 'fortyGigE0/104', 'mtu': '9100', 'tpid': '0x8100', 'speed': '40000'}, " + "'Ethernet108': {'alias': 'fortyGigE0/108', 'pfc_asym': 'off', 'lanes': '81,82,83,84', 'description': 'fortyGigE0/108', 'mtu': '9100', 'tpid': '0x8100', 'speed': '40000'}, " + "'Ethernet112': {'lanes': '89,90,91,92', 'description': 'ARISTA01T1:Ethernet1/1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/112', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet116': {'lanes': '93,94,95,96', 'description': 'ARISTA02T1:Ethernet1/1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/116', 'admin_status': 'up', 'speed': '40000'}, " + "'Ethernet120': {'lanes': '97,98,99,100', 'description': 'ARISTA03T1:Ethernet1/1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/120', 'admin_status': 'up', 'speed': '40000'}, " "'Ethernet124': {'lanes': '101,102,103,104', 'fec': 'rs', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/124', 'admin_status': 'up', 'speed': '100000', 'description': 'ARISTA04T1:Ethernet1/1'}}" ) ) @@ -434,38 +442,38 @@ def test_minigraph_port_autonegotiation(self): self.assertEqual( utils.to_dict(output.strip()), utils.to_dict( - "{'Ethernet0': {'lanes': '29,30,31,32', 'description': 'fortyGigE0/0', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/0', 'pfc_asym': 'off', 'autoneg': 'off'}, " + "{'Ethernet0': {'lanes': '29,30,31,32', 'description': 'fortyGigE0/0', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/0', 'pfc_asym': 'off', 'autoneg': 'off', 'speed': '40000'}, " "'Ethernet4': {'lanes': '25,26,27,28', 'description': 'Servers0:eth0', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/4', 'admin_status': 'up', 'autoneg': 'on', 'speed': '100000', 'fec': 'none'}, " - "'Ethernet8': {'lanes': '37,38,39,40', 'description': 'fortyGigE0/8', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/8', 'admin_status': 'up', 'autoneg': 'off', 'fec': 'none'}, " - "'Ethernet12': {'lanes': '33,34,35,36', 'description': 'fortyGigE0/12', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/12', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet16': {'lanes': '41,42,43,44', 'description': 'fortyGigE0/16', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/16', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet20': {'lanes': '45,46,47,48', 'description': 'fortyGigE0/20', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/20', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet24': {'lanes': '5,6,7,8', 'description': 'fortyGigE0/24', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/24', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet28': {'lanes': '1,2,3,4', 'description': 'fortyGigE0/28', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/28', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet32': {'lanes': '9,10,11,12', 'description': 'fortyGigE0/32', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/32', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet36': {'lanes': '13,14,15,16', 'description': 'fortyGigE0/36', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/36', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet40': {'lanes': '21,22,23,24', 'description': 'fortyGigE0/40', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/40', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet44': {'lanes': '17,18,19,20', 'description': 'fortyGigE0/44', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/44', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet48': {'lanes': '49,50,51,52', 'description': 'fortyGigE0/48', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/48', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet52': {'lanes': '53,54,55,56', 'description': 'fortyGigE0/52', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/52', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet56': {'lanes': '61,62,63,64', 'description': 'fortyGigE0/56', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/56', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet60': {'lanes': '57,58,59,60', 'description': 'fortyGigE0/60', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/60', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet64': {'lanes': '65,66,67,68', 'description': 'fortyGigE0/64', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/64', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet68': {'lanes': '69,70,71,72', 'description': 'fortyGigE0/68', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/68', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet72': {'lanes': '77,78,79,80', 'description': 'fortyGigE0/72', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/72', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet76': {'lanes': '73,74,75,76', 'description': 'fortyGigE0/76', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/76', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet80': {'lanes': '105,106,107,108', 'description': 'fortyGigE0/80', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/80', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet84': {'lanes': '109,110,111,112', 'description': 'fortyGigE0/84', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/84', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet88': {'lanes': '117,118,119,120', 'description': 'fortyGigE0/88', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/88', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet92': {'lanes': '113,114,115,116', 'description': 'fortyGigE0/92', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/92', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet96': {'lanes': '121,122,123,124', 'description': 'fortyGigE0/96', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/96', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet100': {'lanes': '125,126,127,128', 'description': 'Servers100:eth0', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/100', 'admin_status': 'up', 'autoneg': 'off'}, " - "'Ethernet104': {'lanes': '85,86,87,88', 'description': 'fortyGigE0/104', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/104', 'pfc_asym': 'off', 'autoneg': 'off'}, " - "'Ethernet108': {'lanes': '81,82,83,84', 'description': 'fortyGigE0/108', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/108', 'pfc_asym': 'off', 'autoneg': 'off'}, " - "'Ethernet112': {'lanes': '89,90,91,92', 'description': 'ARISTA01T1:Ethernet1/1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/112', 'admin_status': 'up', 'autoneg': 'on'}, " - "'Ethernet116': {'lanes': '93,94,95,96', 'description': 'ARISTA02T1:Ethernet1/1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/116', 'admin_status': 'up', 'autoneg': 'on'}, " - "'Ethernet120': {'lanes': '97,98,99,100', 'description': 'ARISTA03T1:Ethernet1/1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/120', 'admin_status': 'up', 'autoneg': 'on'}, " - "'Ethernet124': {'lanes': '101,102,103,104', 'fec': 'rs', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/124', 'admin_status': 'up', 'autoneg': 'on', 'speed': '100000', 'description': 'ARISTA04T1:Ethernet1/1'}}" + "'Ethernet8': {'lanes': '37,38,39,40', 'description': 'fortyGigE0/8', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/8', 'admin_status': 'up', 'autoneg': 'off', 'fec': 'none', 'speed': '40000'}, " + "'Ethernet12': {'lanes': '33,34,35,36', 'description': 'fortyGigE0/12', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/12', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet16': {'lanes': '41,42,43,44', 'description': 'fortyGigE0/16', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/16', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet20': {'lanes': '45,46,47,48', 'description': 'fortyGigE0/20', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/20', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet24': {'lanes': '5,6,7,8', 'description': 'fortyGigE0/24', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/24', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet28': {'lanes': '1,2,3,4', 'description': 'fortyGigE0/28', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/28', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet32': {'lanes': '9,10,11,12', 'description': 'fortyGigE0/32', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/32', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet36': {'lanes': '13,14,15,16', 'description': 'fortyGigE0/36', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/36', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet40': {'lanes': '21,22,23,24', 'description': 'fortyGigE0/40', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/40', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet44': {'lanes': '17,18,19,20', 'description': 'fortyGigE0/44', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/44', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet48': {'lanes': '49,50,51,52', 'description': 'fortyGigE0/48', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/48', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet52': {'lanes': '53,54,55,56', 'description': 'fortyGigE0/52', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/52', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet56': {'lanes': '61,62,63,64', 'description': 'fortyGigE0/56', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/56', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet60': {'lanes': '57,58,59,60', 'description': 'fortyGigE0/60', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/60', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet64': {'lanes': '65,66,67,68', 'description': 'fortyGigE0/64', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/64', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet68': {'lanes': '69,70,71,72', 'description': 'fortyGigE0/68', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/68', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet72': {'lanes': '77,78,79,80', 'description': 'fortyGigE0/72', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/72', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet76': {'lanes': '73,74,75,76', 'description': 'fortyGigE0/76', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/76', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet80': {'lanes': '105,106,107,108', 'description': 'fortyGigE0/80', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/80', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet84': {'lanes': '109,110,111,112', 'description': 'fortyGigE0/84', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/84', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet88': {'lanes': '117,118,119,120', 'description': 'fortyGigE0/88', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/88', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet92': {'lanes': '113,114,115,116', 'description': 'fortyGigE0/92', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/92', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet96': {'lanes': '121,122,123,124', 'description': 'fortyGigE0/96', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/96', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet100': {'lanes': '125,126,127,128', 'description': 'Servers100:eth0', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/100', 'admin_status': 'up', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet104': {'lanes': '85,86,87,88', 'description': 'fortyGigE0/104', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/104', 'pfc_asym': 'off', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet108': {'lanes': '81,82,83,84', 'description': 'fortyGigE0/108', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/108', 'pfc_asym': 'off', 'autoneg': 'off', 'speed': '40000'}, " + "'Ethernet112': {'lanes': '89,90,91,92', 'description': 'ARISTA01T1:Ethernet1/1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/112', 'admin_status': 'up', 'autoneg': 'on', 'speed': '40000'}, " + "'Ethernet116': {'lanes': '93,94,95,96', 'description': 'ARISTA02T1:Ethernet1/1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/116', 'admin_status': 'up', 'autoneg': 'on', 'speed': '40000'}, " + "'Ethernet120': {'lanes': '97,98,99,100', 'description': 'ARISTA03T1:Ethernet1/1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/120', 'admin_status': 'up', 'autoneg': 'on', 'speed': '40000'}, " + "'Ethernet124': {'lanes': '101,102,103,104', 'fec': 'rs', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/124', 'admin_status': 'up', 'autoneg': 'on', 'speed': '100000', 'description': 'ARISTA04T1:Ethernet1/1', 'speed': '100000'}}" ) ) @@ -498,6 +506,11 @@ def test_minigraph_deployment_id(self): output = self.run_script(argument) self.assertEqual(output.strip(), "1") + def test_minigraph_deployment_id_null(self): + argument = '-m "' + self.sample_graph_deployment_id + '" -p "' + self.port_config + '" -v "DEVICE_METADATA[\'localhost\']"' + output = self.run_script(argument) + self.assertNotIn('deployment_id', output.strip()) + def test_minigraph_ethernet_interfaces(self, **kwargs): graph_file = kwargs.get('graph_file', self.sample_graph_simple) argument = '-m "' + graph_file + '" -p "' + self.port_config + '" -v "PORT[\'Ethernet8\']"' @@ -524,77 +537,77 @@ def test_minigraph_neighbor_interfaces(self): "'Ethernet4': {'lanes': '25,26,27,28', 'description': 'server1:port1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/4', 'admin_status': 'up', 'speed': '25000', 'autoneg': 'on', 'mux_cable': 'true'}, " "'Ethernet8': {'lanes': '37,38,39,40', 'description': 'Interface description', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/8', 'admin_status': 'up', 'speed': '40000', 'autoneg': 'on', 'mux_cable': 'true'}, " "'Ethernet12': {'lanes': '33,34,35,36', 'description': 'Interface description', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/12', 'admin_status': 'up', 'speed': '10000', 'autoneg': 'on'}, " - "'Ethernet16': {'alias': 'fortyGigE0/16', 'pfc_asym': 'off', 'lanes': '41,42,43,44', 'description': 'fortyGigE0/16', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet20': {'alias': 'fortyGigE0/20', 'pfc_asym': 'off', 'lanes': '45,46,47,48', 'description': 'fortyGigE0/20', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet24': {'alias': 'fortyGigE0/24', 'pfc_asym': 'off', 'lanes': '5,6,7,8', 'description': 'fortyGigE0/24', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet28': {'alias': 'fortyGigE0/28', 'pfc_asym': 'off', 'lanes': '1,2,3,4', 'description': 'fortyGigE0/28', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet32': {'alias': 'fortyGigE0/32', 'pfc_asym': 'off', 'lanes': '9,10,11,12', 'description': 'fortyGigE0/32', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet36': {'alias': 'fortyGigE0/36', 'pfc_asym': 'off', 'lanes': '13,14,15,16', 'description': 'fortyGigE0/36', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet40': {'alias': 'fortyGigE0/40', 'pfc_asym': 'off', 'lanes': '21,22,23,24', 'description': 'fortyGigE0/40', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet44': {'alias': 'fortyGigE0/44', 'pfc_asym': 'off', 'lanes': '17,18,19,20', 'description': 'fortyGigE0/44', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet48': {'alias': 'fortyGigE0/48', 'pfc_asym': 'off', 'lanes': '49,50,51,52', 'description': 'fortyGigE0/48', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet52': {'alias': 'fortyGigE0/52', 'pfc_asym': 'off', 'lanes': '53,54,55,56', 'description': 'fortyGigE0/52', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet56': {'alias': 'fortyGigE0/56', 'pfc_asym': 'off', 'lanes': '61,62,63,64', 'description': 'fortyGigE0/56', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet60': {'alias': 'fortyGigE0/60', 'pfc_asym': 'off', 'lanes': '57,58,59,60', 'description': 'fortyGigE0/60', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet64': {'alias': 'fortyGigE0/64', 'pfc_asym': 'off', 'lanes': '65,66,67,68', 'description': 'fortyGigE0/64', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet68': {'alias': 'fortyGigE0/68', 'pfc_asym': 'off', 'lanes': '69,70,71,72', 'description': 'fortyGigE0/68', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet72': {'alias': 'fortyGigE0/72', 'pfc_asym': 'off', 'lanes': '77,78,79,80', 'description': 'fortyGigE0/72', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet76': {'alias': 'fortyGigE0/76', 'pfc_asym': 'off', 'lanes': '73,74,75,76', 'description': 'fortyGigE0/76', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet80': {'alias': 'fortyGigE0/80', 'pfc_asym': 'off', 'lanes': '105,106,107,108', 'description': 'fortyGigE0/80', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet84': {'alias': 'fortyGigE0/84', 'pfc_asym': 'off', 'lanes': '109,110,111,112', 'description': 'fortyGigE0/84', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet88': {'alias': 'fortyGigE0/88', 'pfc_asym': 'off', 'lanes': '117,118,119,120', 'description': 'fortyGigE0/88', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet92': {'alias': 'fortyGigE0/92', 'pfc_asym': 'off', 'lanes': '113,114,115,116', 'description': 'fortyGigE0/92', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet96': {'alias': 'fortyGigE0/96', 'pfc_asym': 'off', 'lanes': '121,122,123,124', 'description': 'fortyGigE0/96', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet100': {'alias': 'fortyGigE0/100', 'pfc_asym': 'off', 'lanes': '125,126,127,128', 'description': 'fortyGigE0/100', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet104': {'alias': 'fortyGigE0/104', 'pfc_asym': 'off', 'lanes': '85,86,87,88', 'description': 'fortyGigE0/104', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet108': {'alias': 'fortyGigE0/108', 'pfc_asym': 'off', 'lanes': '81,82,83,84', 'description': 'fortyGigE0/108', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet112': {'alias': 'fortyGigE0/112', 'pfc_asym': 'off', 'lanes': '89,90,91,92', 'description': 'fortyGigE0/112', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet116': {'alias': 'fortyGigE0/116', 'pfc_asym': 'off', 'lanes': '93,94,95,96', 'description': 'fortyGigE0/116', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet120': {'alias': 'fortyGigE0/120', 'pfc_asym': 'off', 'lanes': '97,98,99,100', 'description': 'fortyGigE0/120', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet124': {'alias': 'fortyGigE0/124', 'pfc_asym': 'off', 'lanes': '101,102,103,104', 'description': 'fortyGigE0/124', 'mtu': '9100', 'tpid': '0x8100'}}" + "'Ethernet16': {'alias': 'fortyGigE0/16', 'pfc_asym': 'off', 'lanes': '41,42,43,44', 'description': 'fortyGigE0/16', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet20': {'alias': 'fortyGigE0/20', 'pfc_asym': 'off', 'lanes': '45,46,47,48', 'description': 'fortyGigE0/20', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet24': {'alias': 'fortyGigE0/24', 'pfc_asym': 'off', 'lanes': '5,6,7,8', 'description': 'fortyGigE0/24', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet28': {'alias': 'fortyGigE0/28', 'pfc_asym': 'off', 'lanes': '1,2,3,4', 'description': 'fortyGigE0/28', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet32': {'alias': 'fortyGigE0/32', 'pfc_asym': 'off', 'lanes': '9,10,11,12', 'description': 'fortyGigE0/32', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet36': {'alias': 'fortyGigE0/36', 'pfc_asym': 'off', 'lanes': '13,14,15,16', 'description': 'fortyGigE0/36', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet40': {'alias': 'fortyGigE0/40', 'pfc_asym': 'off', 'lanes': '21,22,23,24', 'description': 'fortyGigE0/40', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet44': {'alias': 'fortyGigE0/44', 'pfc_asym': 'off', 'lanes': '17,18,19,20', 'description': 'fortyGigE0/44', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet48': {'alias': 'fortyGigE0/48', 'pfc_asym': 'off', 'lanes': '49,50,51,52', 'description': 'fortyGigE0/48', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet52': {'alias': 'fortyGigE0/52', 'pfc_asym': 'off', 'lanes': '53,54,55,56', 'description': 'fortyGigE0/52', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet56': {'alias': 'fortyGigE0/56', 'pfc_asym': 'off', 'lanes': '61,62,63,64', 'description': 'fortyGigE0/56', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet60': {'alias': 'fortyGigE0/60', 'pfc_asym': 'off', 'lanes': '57,58,59,60', 'description': 'fortyGigE0/60', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet64': {'alias': 'fortyGigE0/64', 'pfc_asym': 'off', 'lanes': '65,66,67,68', 'description': 'fortyGigE0/64', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet68': {'alias': 'fortyGigE0/68', 'pfc_asym': 'off', 'lanes': '69,70,71,72', 'description': 'fortyGigE0/68', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet72': {'alias': 'fortyGigE0/72', 'pfc_asym': 'off', 'lanes': '77,78,79,80', 'description': 'fortyGigE0/72', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet76': {'alias': 'fortyGigE0/76', 'pfc_asym': 'off', 'lanes': '73,74,75,76', 'description': 'fortyGigE0/76', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet80': {'alias': 'fortyGigE0/80', 'pfc_asym': 'off', 'lanes': '105,106,107,108', 'description': 'fortyGigE0/80', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet84': {'alias': 'fortyGigE0/84', 'pfc_asym': 'off', 'lanes': '109,110,111,112', 'description': 'fortyGigE0/84', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet88': {'alias': 'fortyGigE0/88', 'pfc_asym': 'off', 'lanes': '117,118,119,120', 'description': 'fortyGigE0/88', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet92': {'alias': 'fortyGigE0/92', 'pfc_asym': 'off', 'lanes': '113,114,115,116', 'description': 'fortyGigE0/92', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet96': {'alias': 'fortyGigE0/96', 'pfc_asym': 'off', 'lanes': '121,122,123,124', 'description': 'fortyGigE0/96', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet100': {'alias': 'fortyGigE0/100', 'pfc_asym': 'off', 'lanes': '125,126,127,128', 'description': 'fortyGigE0/100', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet104': {'alias': 'fortyGigE0/104', 'pfc_asym': 'off', 'lanes': '85,86,87,88', 'description': 'fortyGigE0/104', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet108': {'alias': 'fortyGigE0/108', 'pfc_asym': 'off', 'lanes': '81,82,83,84', 'description': 'fortyGigE0/108', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet112': {'alias': 'fortyGigE0/112', 'pfc_asym': 'off', 'lanes': '89,90,91,92', 'description': 'fortyGigE0/112', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet116': {'alias': 'fortyGigE0/116', 'pfc_asym': 'off', 'lanes': '93,94,95,96', 'description': 'fortyGigE0/116', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet120': {'alias': 'fortyGigE0/120', 'pfc_asym': 'off', 'lanes': '97,98,99,100', 'description': 'fortyGigE0/120', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet124': {'alias': 'fortyGigE0/124', 'pfc_asym': 'off', 'lanes': '101,102,103,104', 'description': 'fortyGigE0/124', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}}" ) ) def test_minigraph_neighbor_interfaces_config_db(self): # test to check if PORT table is retrieved from config_db - argument = '-m "' + self.sample_graph_simple_case + '" -v "PORT"' + argument = '-m "' + self.sample_graph_simple_case + '" -p "' + self.port_config + '" -v "PORT"' output = self.run_script(argument) self.assertEqual( utils.to_dict(output.strip()), utils.to_dict( - "{'Ethernet0': {'lanes': '29,30,31,32', 'description': 'config_db:switch-01t1:port1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/0', 'admin_status': 'up', 'speed': '10000', 'autoneg': 'on'}, " - "'Ethernet4': {'lanes': '25,26,27,28', 'description': 'config_db:server1:port1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/4', 'admin_status': 'up', 'speed': '25000', 'autoneg': 'on', 'mux_cable': 'true'}, " + "{'Ethernet0': {'lanes': '29,30,31,32', 'description': 'switch-01t1:port1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/0', 'admin_status': 'up', 'speed': '10000', 'autoneg': 'on'}, " + "'Ethernet4': {'lanes': '25,26,27,28', 'description': 'server1:port1', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/4', 'admin_status': 'up', 'speed': '25000', 'autoneg': 'on', 'mux_cable': 'true'}, " "'Ethernet8': {'lanes': '37,38,39,40', 'description': 'Interface description', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/8', 'admin_status': 'up', 'speed': '40000', 'autoneg': 'on', 'mux_cable': 'true'}, " "'Ethernet12': {'lanes': '33,34,35,36', 'description': 'Interface description', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/12', 'admin_status': 'up', 'speed': '10000', 'autoneg': 'on'}, " - "'Ethernet16': {'alias': 'fortyGigE0/16', 'pfc_asym': 'off', 'lanes': '41,42,43,44', 'description': 'config_db:fortyGigE0/16', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet20': {'alias': 'fortyGigE0/20', 'pfc_asym': 'off', 'lanes': '45,46,47,48', 'description': 'config_db:fortyGigE0/20', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet24': {'alias': 'fortyGigE0/24', 'pfc_asym': 'off', 'lanes': '5,6,7,8', 'description': 'config_db:fortyGigE0/24', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet28': {'alias': 'fortyGigE0/28', 'pfc_asym': 'off', 'lanes': '1,2,3,4', 'description': 'config_db:fortyGigE0/28', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet32': {'alias': 'fortyGigE0/32', 'pfc_asym': 'off', 'lanes': '9,10,11,12', 'description': 'config_db:fortyGigE0/32', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet36': {'alias': 'fortyGigE0/36', 'pfc_asym': 'off', 'lanes': '13,14,15,16', 'description': 'config_db:fortyGigE0/36', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet40': {'alias': 'fortyGigE0/40', 'pfc_asym': 'off', 'lanes': '21,22,23,24', 'description': 'config_db:fortyGigE0/40', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet44': {'alias': 'fortyGigE0/44', 'pfc_asym': 'off', 'lanes': '17,18,19,20', 'description': 'config_db:fortyGigE0/44', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet48': {'alias': 'fortyGigE0/48', 'pfc_asym': 'off', 'lanes': '49,50,51,52', 'description': 'config_db:fortyGigE0/48', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet52': {'alias': 'fortyGigE0/52', 'pfc_asym': 'off', 'lanes': '53,54,55,56', 'description': 'config_db:fortyGigE0/52', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet56': {'alias': 'fortyGigE0/56', 'pfc_asym': 'off', 'lanes': '61,62,63,64', 'description': 'config_db:fortyGigE0/56', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet60': {'alias': 'fortyGigE0/60', 'pfc_asym': 'off', 'lanes': '57,58,59,60', 'description': 'config_db:fortyGigE0/60', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet64': {'alias': 'fortyGigE0/64', 'pfc_asym': 'off', 'lanes': '65,66,67,68', 'description': 'config_db:fortyGigE0/64', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet68': {'alias': 'fortyGigE0/68', 'pfc_asym': 'off', 'lanes': '69,70,71,72', 'description': 'config_db:fortyGigE0/68', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet72': {'alias': 'fortyGigE0/72', 'pfc_asym': 'off', 'lanes': '77,78,79,80', 'description': 'config_db:fortyGigE0/72', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet76': {'alias': 'fortyGigE0/76', 'pfc_asym': 'off', 'lanes': '73,74,75,76', 'description': 'config_db:fortyGigE0/76', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet80': {'alias': 'fortyGigE0/80', 'pfc_asym': 'off', 'lanes': '105,106,107,108', 'description': 'config_db:fortyGigE0/80', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet84': {'alias': 'fortyGigE0/84', 'pfc_asym': 'off', 'lanes': '109,110,111,112', 'description': 'config_db:fortyGigE0/84', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet88': {'alias': 'fortyGigE0/88', 'pfc_asym': 'off', 'lanes': '117,118,119,120', 'description': 'config_db:fortyGigE0/88', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet92': {'alias': 'fortyGigE0/92', 'pfc_asym': 'off', 'lanes': '113,114,115,116', 'description': 'config_db:fortyGigE0/92', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet96': {'alias': 'fortyGigE0/96', 'pfc_asym': 'off', 'lanes': '121,122,123,124', 'description': 'config_db:fortyGigE0/96', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet100': {'alias': 'fortyGigE0/100', 'pfc_asym': 'off', 'lanes': '125,126,127,128', 'description': 'config_db:fortyGigE0/100', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet104': {'alias': 'fortyGigE0/104', 'pfc_asym': 'off', 'lanes': '85,86,87,88', 'description': 'config_db:fortyGigE0/104', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet108': {'alias': 'fortyGigE0/108', 'pfc_asym': 'off', 'lanes': '81,82,83,84', 'description': 'config_db:fortyGigE0/108', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet112': {'alias': 'fortyGigE0/112', 'pfc_asym': 'off', 'lanes': '89,90,91,92', 'description': 'config_db:fortyGigE0/112', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet116': {'alias': 'fortyGigE0/116', 'pfc_asym': 'off', 'lanes': '93,94,95,96', 'description': 'config_db:fortyGigE0/116', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet120': {'alias': 'fortyGigE0/120', 'pfc_asym': 'off', 'lanes': '97,98,99,100', 'description': 'config_db:fortyGigE0/120', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet124': {'alias': 'fortyGigE0/124', 'pfc_asym': 'off', 'lanes': '101,102,103,104', 'description': 'config_db:fortyGigE0/124', 'mtu': '9100', 'tpid': '0x8100'}}" + "'Ethernet16': {'alias': 'fortyGigE0/16', 'pfc_asym': 'off', 'lanes': '41,42,43,44', 'description': 'fortyGigE0/16', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet20': {'alias': 'fortyGigE0/20', 'pfc_asym': 'off', 'lanes': '45,46,47,48', 'description': 'fortyGigE0/20', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet24': {'alias': 'fortyGigE0/24', 'pfc_asym': 'off', 'lanes': '5,6,7,8', 'description': 'fortyGigE0/24', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet28': {'alias': 'fortyGigE0/28', 'pfc_asym': 'off', 'lanes': '1,2,3,4', 'description': 'fortyGigE0/28', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet32': {'alias': 'fortyGigE0/32', 'pfc_asym': 'off', 'lanes': '9,10,11,12', 'description': 'fortyGigE0/32', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet36': {'alias': 'fortyGigE0/36', 'pfc_asym': 'off', 'lanes': '13,14,15,16', 'description': 'fortyGigE0/36', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet40': {'alias': 'fortyGigE0/40', 'pfc_asym': 'off', 'lanes': '21,22,23,24', 'description': 'fortyGigE0/40', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet44': {'alias': 'fortyGigE0/44', 'pfc_asym': 'off', 'lanes': '17,18,19,20', 'description': 'fortyGigE0/44', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet48': {'alias': 'fortyGigE0/48', 'pfc_asym': 'off', 'lanes': '49,50,51,52', 'description': 'fortyGigE0/48', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet52': {'alias': 'fortyGigE0/52', 'pfc_asym': 'off', 'lanes': '53,54,55,56', 'description': 'fortyGigE0/52', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet56': {'alias': 'fortyGigE0/56', 'pfc_asym': 'off', 'lanes': '61,62,63,64', 'description': 'fortyGigE0/56', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet60': {'alias': 'fortyGigE0/60', 'pfc_asym': 'off', 'lanes': '57,58,59,60', 'description': 'fortyGigE0/60', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet64': {'alias': 'fortyGigE0/64', 'pfc_asym': 'off', 'lanes': '65,66,67,68', 'description': 'fortyGigE0/64', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet68': {'alias': 'fortyGigE0/68', 'pfc_asym': 'off', 'lanes': '69,70,71,72', 'description': 'fortyGigE0/68', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet72': {'alias': 'fortyGigE0/72', 'pfc_asym': 'off', 'lanes': '77,78,79,80', 'description': 'fortyGigE0/72', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet76': {'alias': 'fortyGigE0/76', 'pfc_asym': 'off', 'lanes': '73,74,75,76', 'description': 'fortyGigE0/76', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet80': {'alias': 'fortyGigE0/80', 'pfc_asym': 'off', 'lanes': '105,106,107,108', 'description': 'fortyGigE0/80', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet84': {'alias': 'fortyGigE0/84', 'pfc_asym': 'off', 'lanes': '109,110,111,112', 'description': 'fortyGigE0/84', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet88': {'alias': 'fortyGigE0/88', 'pfc_asym': 'off', 'lanes': '117,118,119,120', 'description': 'fortyGigE0/88', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet92': {'alias': 'fortyGigE0/92', 'pfc_asym': 'off', 'lanes': '113,114,115,116', 'description': 'fortyGigE0/92', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet96': {'alias': 'fortyGigE0/96', 'pfc_asym': 'off', 'lanes': '121,122,123,124', 'description': 'fortyGigE0/96', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet100': {'alias': 'fortyGigE0/100', 'pfc_asym': 'off', 'lanes': '125,126,127,128', 'description': 'fortyGigE0/100', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet104': {'alias': 'fortyGigE0/104', 'pfc_asym': 'off', 'lanes': '85,86,87,88', 'description': 'fortyGigE0/104', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet108': {'alias': 'fortyGigE0/108', 'pfc_asym': 'off', 'lanes': '81,82,83,84', 'description': 'fortyGigE0/108', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet112': {'alias': 'fortyGigE0/112', 'pfc_asym': 'off', 'lanes': '89,90,91,92', 'description': 'fortyGigE0/112', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet116': {'alias': 'fortyGigE0/116', 'pfc_asym': 'off', 'lanes': '93,94,95,96', 'description': 'fortyGigE0/116', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet120': {'alias': 'fortyGigE0/120', 'pfc_asym': 'off', 'lanes': '97,98,99,100', 'description': 'fortyGigE0/120', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet124': {'alias': 'fortyGigE0/124', 'pfc_asym': 'off', 'lanes': '101,102,103,104', 'description': 'fortyGigE0/124', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}}" ) ) @@ -611,33 +624,33 @@ def test_minigraph_extra_ethernet_interfaces(self, **kwargs): "'Ethernet8': {'lanes': '37,38,39,40', 'description': 'Interface description', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/8', 'admin_status': 'up', 'speed': '1000'}, " "'Ethernet12': {'lanes': '33,34,35,36', 'fec': 'rs', 'pfc_asym': 'off', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/12', 'admin_status': 'up', 'speed': '100000', 'description': 'Interface description'}, " "'Ethernet16': {'lanes': '41,42,43,44', 'pfc_asym': 'off', 'description': 'fortyGigE0/16', 'mtu': '9100', 'tpid': '0x8100', 'alias': 'fortyGigE0/16', 'speed': '1000'}, " - "'Ethernet20': {'alias': 'fortyGigE0/20', 'pfc_asym': 'off', 'lanes': '45,46,47,48', 'description': 'fortyGigE0/20', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet24': {'alias': 'fortyGigE0/24', 'pfc_asym': 'off', 'lanes': '5,6,7,8', 'description': 'fortyGigE0/24', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet28': {'alias': 'fortyGigE0/28', 'pfc_asym': 'off', 'lanes': '1,2,3,4', 'description': 'fortyGigE0/28', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet32': {'alias': 'fortyGigE0/32', 'pfc_asym': 'off', 'lanes': '9,10,11,12', 'description': 'fortyGigE0/32', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet36': {'alias': 'fortyGigE0/36', 'pfc_asym': 'off', 'lanes': '13,14,15,16', 'description': 'fortyGigE0/36', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet40': {'alias': 'fortyGigE0/40', 'pfc_asym': 'off', 'lanes': '21,22,23,24', 'description': 'fortyGigE0/40', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet44': {'alias': 'fortyGigE0/44', 'pfc_asym': 'off', 'lanes': '17,18,19,20', 'description': 'fortyGigE0/44', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet48': {'alias': 'fortyGigE0/48', 'pfc_asym': 'off', 'lanes': '49,50,51,52', 'description': 'fortyGigE0/48', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet52': {'alias': 'fortyGigE0/52', 'pfc_asym': 'off', 'lanes': '53,54,55,56', 'description': 'fortyGigE0/52', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet56': {'alias': 'fortyGigE0/56', 'pfc_asym': 'off', 'lanes': '61,62,63,64', 'description': 'fortyGigE0/56', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet60': {'alias': 'fortyGigE0/60', 'pfc_asym': 'off', 'lanes': '57,58,59,60', 'description': 'fortyGigE0/60', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet64': {'alias': 'fortyGigE0/64', 'pfc_asym': 'off', 'lanes': '65,66,67,68', 'description': 'fortyGigE0/64', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet68': {'alias': 'fortyGigE0/68', 'pfc_asym': 'off', 'lanes': '69,70,71,72', 'description': 'fortyGigE0/68', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet72': {'alias': 'fortyGigE0/72', 'pfc_asym': 'off', 'lanes': '77,78,79,80', 'description': 'fortyGigE0/72', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet76': {'alias': 'fortyGigE0/76', 'pfc_asym': 'off', 'lanes': '73,74,75,76', 'description': 'fortyGigE0/76', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet80': {'alias': 'fortyGigE0/80', 'pfc_asym': 'off', 'lanes': '105,106,107,108', 'description': 'fortyGigE0/80', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet84': {'alias': 'fortyGigE0/84', 'pfc_asym': 'off', 'lanes': '109,110,111,112', 'description': 'fortyGigE0/84', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet88': {'alias': 'fortyGigE0/88', 'pfc_asym': 'off', 'lanes': '117,118,119,120', 'description': 'fortyGigE0/88', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet92': {'alias': 'fortyGigE0/92', 'pfc_asym': 'off', 'lanes': '113,114,115,116', 'description': 'fortyGigE0/92', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet96': {'alias': 'fortyGigE0/96', 'pfc_asym': 'off', 'lanes': '121,122,123,124', 'description': 'fortyGigE0/96', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet100': {'alias': 'fortyGigE0/100', 'pfc_asym': 'off', 'lanes': '125,126,127,128', 'description': 'fortyGigE0/100', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet104': {'alias': 'fortyGigE0/104', 'pfc_asym': 'off', 'lanes': '85,86,87,88', 'description': 'fortyGigE0/104', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet108': {'alias': 'fortyGigE0/108', 'pfc_asym': 'off', 'lanes': '81,82,83,84', 'description': 'fortyGigE0/108', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet112': {'alias': 'fortyGigE0/112', 'pfc_asym': 'off', 'lanes': '89,90,91,92', 'description': 'fortyGigE0/112', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet116': {'alias': 'fortyGigE0/116', 'pfc_asym': 'off', 'lanes': '93,94,95,96', 'description': 'fortyGigE0/116', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet120': {'alias': 'fortyGigE0/120', 'pfc_asym': 'off', 'lanes': '97,98,99,100', 'description': 'fortyGigE0/120', 'mtu': '9100', 'tpid': '0x8100'}, " - "'Ethernet124': {'alias': 'fortyGigE0/124', 'pfc_asym': 'off', 'lanes': '101,102,103,104', 'description': 'fortyGigE0/124', 'mtu': '9100', 'tpid': '0x8100'}}" + "'Ethernet20': {'alias': 'fortyGigE0/20', 'pfc_asym': 'off', 'lanes': '45,46,47,48', 'description': 'fortyGigE0/20', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet24': {'alias': 'fortyGigE0/24', 'pfc_asym': 'off', 'lanes': '5,6,7,8', 'description': 'fortyGigE0/24', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet28': {'alias': 'fortyGigE0/28', 'pfc_asym': 'off', 'lanes': '1,2,3,4', 'description': 'fortyGigE0/28', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet32': {'alias': 'fortyGigE0/32', 'pfc_asym': 'off', 'lanes': '9,10,11,12', 'description': 'fortyGigE0/32', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet36': {'alias': 'fortyGigE0/36', 'pfc_asym': 'off', 'lanes': '13,14,15,16', 'description': 'fortyGigE0/36', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet40': {'alias': 'fortyGigE0/40', 'pfc_asym': 'off', 'lanes': '21,22,23,24', 'description': 'fortyGigE0/40', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet44': {'alias': 'fortyGigE0/44', 'pfc_asym': 'off', 'lanes': '17,18,19,20', 'description': 'fortyGigE0/44', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet48': {'alias': 'fortyGigE0/48', 'pfc_asym': 'off', 'lanes': '49,50,51,52', 'description': 'fortyGigE0/48', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet52': {'alias': 'fortyGigE0/52', 'pfc_asym': 'off', 'lanes': '53,54,55,56', 'description': 'fortyGigE0/52', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet56': {'alias': 'fortyGigE0/56', 'pfc_asym': 'off', 'lanes': '61,62,63,64', 'description': 'fortyGigE0/56', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet60': {'alias': 'fortyGigE0/60', 'pfc_asym': 'off', 'lanes': '57,58,59,60', 'description': 'fortyGigE0/60', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet64': {'alias': 'fortyGigE0/64', 'pfc_asym': 'off', 'lanes': '65,66,67,68', 'description': 'fortyGigE0/64', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet68': {'alias': 'fortyGigE0/68', 'pfc_asym': 'off', 'lanes': '69,70,71,72', 'description': 'fortyGigE0/68', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet72': {'alias': 'fortyGigE0/72', 'pfc_asym': 'off', 'lanes': '77,78,79,80', 'description': 'fortyGigE0/72', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet76': {'alias': 'fortyGigE0/76', 'pfc_asym': 'off', 'lanes': '73,74,75,76', 'description': 'fortyGigE0/76', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet80': {'alias': 'fortyGigE0/80', 'pfc_asym': 'off', 'lanes': '105,106,107,108', 'description': 'fortyGigE0/80', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet84': {'alias': 'fortyGigE0/84', 'pfc_asym': 'off', 'lanes': '109,110,111,112', 'description': 'fortyGigE0/84', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet88': {'alias': 'fortyGigE0/88', 'pfc_asym': 'off', 'lanes': '117,118,119,120', 'description': 'fortyGigE0/88', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet92': {'alias': 'fortyGigE0/92', 'pfc_asym': 'off', 'lanes': '113,114,115,116', 'description': 'fortyGigE0/92', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet96': {'alias': 'fortyGigE0/96', 'pfc_asym': 'off', 'lanes': '121,122,123,124', 'description': 'fortyGigE0/96', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet100': {'alias': 'fortyGigE0/100', 'pfc_asym': 'off', 'lanes': '125,126,127,128', 'description': 'fortyGigE0/100', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet104': {'alias': 'fortyGigE0/104', 'pfc_asym': 'off', 'lanes': '85,86,87,88', 'description': 'fortyGigE0/104', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet108': {'alias': 'fortyGigE0/108', 'pfc_asym': 'off', 'lanes': '81,82,83,84', 'description': 'fortyGigE0/108', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet112': {'alias': 'fortyGigE0/112', 'pfc_asym': 'off', 'lanes': '89,90,91,92', 'description': 'fortyGigE0/112', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet116': {'alias': 'fortyGigE0/116', 'pfc_asym': 'off', 'lanes': '93,94,95,96', 'description': 'fortyGigE0/116', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet120': {'alias': 'fortyGigE0/120', 'pfc_asym': 'off', 'lanes': '97,98,99,100', 'description': 'fortyGigE0/120', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}, " + "'Ethernet124': {'alias': 'fortyGigE0/124', 'pfc_asym': 'off', 'lanes': '101,102,103,104', 'description': 'fortyGigE0/124', 'mtu': '9100', 'tpid': '0x8100', 'fec': 'rs', 'speed': '100000'}}" ) ) @@ -677,7 +690,7 @@ def test_minigraph_bgp_mon(self): output = self.run_script(argument) self.assertEqual( utils.to_dict(output.strip()), - utils.to_dict("{'10.20.30.40': {'rrclient': 0, 'name': 'BGPMonitor', 'local_addr': '10.1.0.32', 'nhopself': 0, 'holdtime': '10', 'asn': '0', 'keepalive': '3'}}") + utils.to_dict("{'10.20.30.40': {'rrclient': 0, 'name': 'BGPMonitor', 'local_addr': '10.1.0.32', 'nhopself': 0, 'holdtime': '10', 'asn': '1', 'keepalive': '3'}}") ) def test_minigraph_bgp_voq_chassis_peer(self): @@ -696,6 +709,9 @@ def test_minigraph_bgp_voq_chassis_peer(self): 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) @@ -713,7 +729,7 @@ def test_minigraph_sub_port_no_vlan_member(self, check_stderr=True): else: output = subprocess.check_output("sed -i \'s/%s/%s/g\' %s" % (LEAF_ROUTER, BACKEND_LEAF_ROUTER, self.sample_graph), shell=True) - self.test_jinja_expression(self.sample_graph, BACKEND_LEAF_ROUTER) + self.test_jinja_expression(self.sample_graph, self.port_config, BACKEND_LEAF_ROUTER) self.verify_no_vlan_member() finally: print('\n Change device type back to %s' % (LEAF_ROUTER)) @@ -722,13 +738,21 @@ def test_minigraph_sub_port_no_vlan_member(self, check_stderr=True): else: output = subprocess.check_output("sed -i \'s/%s/%s/g\' %s" % (BACKEND_LEAF_ROUTER, LEAF_ROUTER, self.sample_graph), shell=True) - self.test_jinja_expression(self.sample_graph, LEAF_ROUTER) + self.test_jinja_expression(self.sample_graph, self.port_config, LEAF_ROUTER) def verify_no_vlan_member(self): argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v "VLAN_MEMBER"' output = self.run_script(argument) self.assertEqual(output.strip(), "{}") + def verify_sub_intf_non_backend_tor(self, **kwargs): + graph_file = kwargs.get('graph_file', self.sample_graph_simple) + + # All the other tables stay unchanged + self.test_var_json_data(graph_file=graph_file) + self.test_minigraph_vlans(graph_file=graph_file) + self.test_minigraph_vlan_members(graph_file=graph_file) + def verify_sub_intf(self, **kwargs): graph_file = kwargs.get('graph_file', self.sample_graph_simple) check_stderr = kwargs.get('check_stderr', True) @@ -739,7 +763,7 @@ def verify_sub_intf(self, **kwargs): else: output = subprocess.check_output("sed -i \'s/%s/%s/g\' %s" % (TOR_ROUTER, BACKEND_TOR_ROUTER, graph_file), shell=True) - self.test_jinja_expression(graph_file, BACKEND_TOR_ROUTER) + self.test_jinja_expression(graph_file, self.port_config, BACKEND_TOR_ROUTER) # INTERFACE table does not exist @@ -799,7 +823,7 @@ def verify_sub_intf(self, **kwargs): else: output = subprocess.check_output("sed -i \'s/%s/%s/g\' %s" % (BACKEND_TOR_ROUTER, TOR_ROUTER, graph_file), shell=True) - self.test_jinja_expression(graph_file, TOR_ROUTER) + self.test_jinja_expression(graph_file, self.port_config, TOR_ROUTER) def test_show_run_acl(self): argument = '-a \'{"key1":"value"}\' --var-json ACL_RULE' @@ -812,7 +836,7 @@ def test_show_run_interfaces(self): self.assertEqual(output, '') def test_minigraph_voq_metadata(self): - argument = "-m {} --var-json DEVICE_METADATA".format(self.sample_graph_voq) + argument = "-m {} -p {} --var-json DEVICE_METADATA".format(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') @@ -820,7 +844,7 @@ def test_minigraph_voq_metadata(self): self.assertEqual(output['localhost']['max_cores'], '16') def test_minigraph_voq_system_ports(self): - argument = "-m {} --var-json SYSTEM_PORT".format(self.sample_graph_voq) + argument = "-m {} -p {} --var-json SYSTEM_PORT".format(self.sample_graph_voq, self.voq_port_config) self.assertDictEqual( json.loads(self.run_script(argument)), { @@ -839,7 +863,7 @@ def test_minigraph_voq_system_ports(self): ) def test_minigraph_voq_inband_interface_vlan(self): - argument = "-m {} --var-json VOQ_INBAND_INTERFACE".format(self.sample_graph_voq) + argument = "-m {} -p {} --var-json VOQ_INBAND_INTERFACE".format(self.sample_graph_voq, self.voq_port_config) output = self.run_script(argument) output_dict = utils.to_dict(output.strip()) self.assertDictEqual( @@ -852,7 +876,7 @@ def test_minigraph_voq_inband_interface_vlan(self): ) def test_minigraph_voq_inband_interface_port(self): - argument = "-m {} --var-json VOQ_INBAND_INTERFACE".format(self.sample_graph_voq) + argument = "-m {} -p {} --var-json VOQ_INBAND_INTERFACE".format(self.sample_graph_voq, self.voq_port_config) output = self.run_script(argument) output_dict = utils.to_dict(output.strip()) self.assertDictEqual( @@ -876,7 +900,9 @@ def test_minigraph_voq_inband_port(self): 'mtu': '9100', 'tpid': '0x8100', 'pfc_asym': 'off', - 'admin_status': 'up' + 'admin_status': 'up', + 'fec': 'rs', + 'speed': '100000' } ) diff --git a/src/sonic-config-engine/tests/test_cfggen_platformJson.py b/src/sonic-config-engine/tests/test_cfggen_platformJson.py index fcfae855d0b5..0af361718b99 100644 --- a/src/sonic-config-engine/tests/test_cfggen_platformJson.py +++ b/src/sonic-config-engine/tests/test_cfggen_platformJson.py @@ -49,7 +49,7 @@ def test_dummy_run(self): self.assertEqual(output, '') def test_print_data(self): - argument = '-m "' + self.platform_sample_graph + '" --print-data' + argument = '-m "' + self.platform_sample_graph + '" -p "' + self.platform_json + '" --print-data' output = self.run_script(argument) self.assertTrue(len(output.strip()) > 0) diff --git a/src/sonic-config-engine/tests/test_j2files.py b/src/sonic-config-engine/tests/test_j2files.py index d9878c2d9cfc..52d4260dba77 100644 --- a/src/sonic-config-engine/tests/test_j2files.py +++ b/src/sonic-config-engine/tests/test_j2files.py @@ -1,4 +1,3 @@ -import filecmp import json import os import shutil @@ -23,8 +22,11 @@ def setUp(self): self.mlnx_port_config = os.path.join(self.test_dir, 'sample-port-config-mlnx.ini') self.dell6100_t0_minigraph = os.path.join(self.test_dir, 'sample-dell-6100-t0-minigraph.xml') self.arista7050_t0_minigraph = os.path.join(self.test_dir, 'sample-arista-7050-t0-minigraph.xml') + self.arista7800r3_48cq2_lc_t2_minigraph = os.path.join(self.test_dir, 'sample-arista-7800r3-48cq2-lc-t2-minigraph.xml') self.multi_asic_minigraph = os.path.join(self.test_dir, 'multi_npu_data', 'sample-minigraph.xml') self.multi_asic_port_config = os.path.join(self.test_dir, 'multi_npu_data', 'sample_port_config-0.ini') + self.dell9332_t1_minigraph = os.path.join(self.test_dir, 'sample-dell-9332-t1-minigraph.xml') + self.radv_test_minigraph = os.path.join(self.test_dir, 'radv-test-sample-graph.xml') self.output_file = os.path.join(self.test_dir, 'output') os.environ["CFGGEN_UNIT_TESTING"] = "2" @@ -42,32 +44,39 @@ def run_diff(self, file1, file2): def test_interfaces(self): interfaces_template = os.path.join(self.test_dir, '..', '..', '..', 'files', 'image_config', 'interfaces', 'interfaces.j2') - argument = '-m ' + self.t0_minigraph + ' -a \'{\"hwaddr\":\"e4:1d:2d:a5:f3:ad\"}\' -t ' + interfaces_template + ' > ' + self.output_file + argument = '-m ' + self.t0_minigraph + ' -p ' + self.t0_port_config + ' -a \'{\"hwaddr\":\"e4:1d:2d:a5:f3:ad\"}\' -t ' + interfaces_template + ' > ' + self.output_file self.run_script(argument) - self.assertTrue(filecmp.cmp(os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'interfaces'), self.output_file)) + self.assertTrue(utils.cmp(os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'interfaces'), self.output_file)) - argument = '-m ' + self.t0_mvrf_minigraph + ' -a \'{\"hwaddr\":\"e4:1d:2d:a5:f3:ad\"}\' -t ' + interfaces_template + ' > ' + self.output_file + argument = '-m ' + self.t0_mvrf_minigraph + ' -p ' + self.t0_port_config + ' -a \'{\"hwaddr\":\"e4:1d:2d:a5:f3:ad\"}\' -t ' + interfaces_template + ' > ' + self.output_file self.run_script(argument) - self.assertTrue(filecmp.cmp(os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'mvrf_interfaces'), self.output_file)) + self.assertTrue(utils.cmp(os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'mvrf_interfaces'), self.output_file)) def test_ports_json(self): ports_template = os.path.join(self.test_dir, '..', '..', '..', 'dockers', 'docker-orchagent', 'ports.json.j2') argument = '-m ' + self.simple_minigraph + ' -p ' + self.t0_port_config + ' -t ' + ports_template + ' > ' + self.output_file self.run_script(argument) - self.assertTrue(filecmp.cmp(os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'ports.json'), self.output_file)) + self.assertTrue(utils.cmp(os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'ports.json'), self.output_file)) def test_dhcp_relay(self): # Test generation of wait_for_intf.sh template_path = os.path.join(self.test_dir, '..', '..', '..', 'dockers', 'docker-dhcp-relay', 'wait_for_intf.sh.j2') argument = '-m ' + self.t0_minigraph + ' -p ' + self.t0_port_config + ' -t ' + template_path + ' > ' + self.output_file self.run_script(argument) - self.assertTrue(filecmp.cmp(os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'wait_for_intf.sh'), self.output_file)) + self.assertTrue(utils.cmp(os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'wait_for_intf.sh'), self.output_file)) # Test generation of docker-dhcp-relay.supervisord.conf template_path = os.path.join(self.test_dir, '..', '..', '..', 'dockers', 'docker-dhcp-relay', 'docker-dhcp-relay.supervisord.conf.j2') argument = '-m ' + self.t0_minigraph + ' -p ' + self.t0_port_config + ' -t ' + template_path + ' > ' + self.output_file self.run_script(argument) - self.assertTrue(filecmp.cmp(os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'docker-dhcp-relay.supervisord.conf'), self.output_file)) + self.assertTrue(utils.cmp(os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'docker-dhcp-relay.supervisord.conf'), self.output_file), self.output_file) + + def test_radv(self): + # Test generation of radvd.conf with multiple ipv6 prefixes + template_path = os.path.join(self.test_dir, '..', '..', '..', 'dockers', 'docker-router-advertiser', 'radvd.conf.j2') + argument = '-m ' + self.radv_test_minigraph + ' -p ' + self.t0_port_config + ' -t ' + template_path + ' > ' + self.output_file + self.run_script(argument) + self.assertTrue(utils.cmp(os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'radvd.conf'), self.output_file)) def test_lldp(self): lldpd_conf_template = os.path.join(self.test_dir, '..', '..', '..', 'dockers', 'docker-lldp', 'lldpd.conf.j2') @@ -80,19 +89,19 @@ def test_lldp(self): mgmt_iface_ipv4_and_ipv6_json = os.path.join(self.test_dir, "data", "lldp", "mgmt_iface_ipv4_and_ipv6.json") argument = '-j {} -t {} > {}'.format(mgmt_iface_ipv4_and_ipv6_json, lldpd_conf_template, self.output_file) self.run_script(argument) - self.assertTrue(filecmp.cmp(expected_mgmt_ipv4_and_ipv6, self.output_file)) + self.assertTrue(utils.cmp(expected_mgmt_ipv4_and_ipv6, self.output_file)) # Test generation of lldpd.conf if management interface IPv4 only exist mgmt_iface_ipv4_json = os.path.join(self.test_dir, "data", "lldp", "mgmt_iface_ipv4.json") argument = '-j {} -t {} > {}'.format(mgmt_iface_ipv4_json, lldpd_conf_template, self.output_file) self.run_script(argument) - self.assertTrue(filecmp.cmp(expected_mgmt_ipv4, self.output_file)) + self.assertTrue(utils.cmp(expected_mgmt_ipv4, self.output_file)) # Test generation of lldpd.conf if Management interface IPv6 only exist mgmt_iface_ipv6_json = os.path.join(self.test_dir, "data", "lldp", "mgmt_iface_ipv6.json") argument = '-j {} -t {} > {}'.format(mgmt_iface_ipv6_json, lldpd_conf_template, self.output_file) self.run_script(argument) - self.assertTrue(filecmp.cmp(expected_mgmt_ipv6, self.output_file)) + self.assertTrue(utils.cmp(expected_mgmt_ipv6, self.output_file)) def test_ipinip(self): ipinip_file = os.path.join(self.test_dir, '..', '..', '..', 'dockers', 'docker-orchagent', 'ipinip.json.j2') @@ -100,7 +109,7 @@ def test_ipinip(self): self.run_script(argument) sample_output_file = os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'ipinip.json') - assert filecmp.cmp(sample_output_file, self.output_file) + assert utils.cmp(sample_output_file, self.output_file), self.run_diff(sample_output_file, self.output_file) def test_l2switch_template(self): argument = '-k Mellanox-SN2700 --preset l2 -p ' + self.t0_port_config @@ -201,8 +210,51 @@ def test_qos_arista7050_render_template(self): os.remove(qos_config_file_new) sample_output_file = os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'qos-arista7050.json') - assert filecmp.cmp(sample_output_file, self.output_file) + assert utils.cmp(sample_output_file, self.output_file), self.run_diff(sample_output_file, self.output_file) + + def test_qos_and_buffer_arista7800r3_48cq2_lc_render_template(self): + arista_dir_path = os.path.join(self.test_dir, '..', '..', '..', 'device', 'arista', 'x86_64-arista_7800r3_48cq2_lc', 'Arista-7800R3-48CQ2-C48') + qos_file = os.path.join(arista_dir_path, 'qos.json.j2') + buffer_file = os.path.join(arista_dir_path, 'buffers.json.j2') + port_config_ini_file = os.path.join(arista_dir_path, 'port_config.ini') + + # copy qos_config.j2 and buffer_config.j2 to the Arista 7800r3_48cq2_lc 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) + buffer_config_file = os.path.join(self.test_dir, '..', '..', '..', 'files', 'build_templates', 'buffers_config.j2') + shutil.copy2(buffer_config_file, arista_dir_path) + for template_file, cfg_file, sample_output_file in [(qos_file, 'qos_config.j2', 'qos-arista7800r3-48cq2-lc.json'), + (buffer_file, 'buffers_config.j2', 'buffer-arista7800r3-48cq2-lc.json') ]: + argument = '-m ' + self.arista7800r3_48cq2_lc_t2_minigraph + ' -p ' + port_config_ini_file + ' -t ' + template_file + ' > ' + self.output_file + self.run_script(argument) + + # cleanup + cfg_file_new = os.path.join(arista_dir_path, cfg_file) + os.remove(cfg_file_new) + + sample_output_file = os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, sample_output_file) + assert utils.cmp(sample_output_file, self.output_file), self.run_diff(sample_output_file, self.output_file) + + 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) + + # 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') @@ -220,7 +272,50 @@ def test_qos_dell6100_render_template(self): os.remove(qos_config_file_new) sample_output_file = os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'qos-dell6100.json') - assert filecmp.cmp(sample_output_file, self.output_file) + 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): + if utils.PYvX_DIR != 'py3': + # Skip on python2 as the change will not be backported to previous version + 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' + ] + sample_outputs = [ + 'qos-arista7050cx3-dualtor.json', + 'qos-arista7260-dualtor.json', + 'qos-arista7260-t1.json' + ] + sample_minigraph_files = [ + 'sample-arista-7050cx3-dualtor-minigraph.xml', + 'sample-arista-7260-dualtor-minigraph.xml', + 'sample-arista-7260-t1-minigraph.xml' + ] + for i, path in enumerate(dir_paths): + device_template_path = os.path.join(self.test_dir, path) + sample_output = sample_outputs[i] + sample_minigraph_file = os.path.join(self.test_dir,sample_minigraph_files[i]) + qos_file = os.path.join(device_template_path, 'qos.json.j2') + port_config_ini_file = os.path.join(device_template_path, 'port_config.ini') + test_output = os.path.join(self.test_dir, 'output.json') + + # copy qos_config.j2 to the target 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, device_template_path) + + argument = '-m ' + sample_minigraph_file + ' -p ' + port_config_ini_file + ' -t ' + qos_file + ' > ' + test_output + self.run_script(argument) + + # cleanup + qos_config_file_new = os.path.join(device_template_path, 'qos_config.j2') + os.remove(qos_config_file_new) + + sample_output_file = os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, sample_output) + assert utils.cmp(sample_output_file, test_output) + os.remove(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) @@ -240,7 +335,7 @@ def _test_buffers_render_template(self, vendor, platform, sku, minigraph, buffer os.remove(buffers_config_file_new) sample_output_file = os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, expected) - assert filecmp.cmp(sample_output_file, self.output_file) + assert utils.cmp(sample_output_file, self.output_file), self.run_diff(sample_output_file, self.output_file) 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') @@ -260,7 +355,7 @@ def test_ipinip_multi_asic(self): print(argument) self.run_script(argument) sample_output_file = os.path.join(self.test_dir, 'multi_npu_data', utils.PYvX_DIR, 'ipinip.json') - assert filecmp.cmp(sample_output_file, self.output_file) + assert utils.cmp(sample_output_file, self.output_file), self.run_diff(sample_output_file, self.output_file) def test_swss_switch_render_template(self): switch_template = os.path.join( @@ -274,22 +369,24 @@ def test_swss_switch_render_template(self): test_list = { "t1": { "graph": self.t1_mlnx_minigraph, + "port_config": self.mlnx_port_config, "output": "t1-switch.json" }, "t0": { "graph": self.t0_minigraph, + "port_config": self.t0_port_config, "output": "t0-switch.json" }, } for _, v in test_list.items(): - argument = " -m {} -y {} -t {} > {}".format( - v["graph"], constants_yml, switch_template, self.output_file + argument = " -m {} -p {} -y {} -t {} > {}".format( + v["graph"], v["port_config"], constants_yml, switch_template, self.output_file ) sample_output_file = os.path.join( self.test_dir, 'sample_output', v["output"] ) self.run_script(argument) - assert filecmp.cmp(sample_output_file, self.output_file) + assert utils.cmp(sample_output_file, self.output_file), self.run_diff(sample_output_file, self.output_file) def test_swss_switch_render_template_multi_asic(self): # verify the ECMP hash seed changes per namespace @@ -321,7 +418,7 @@ def test_swss_switch_render_template_multi_asic(self): self.test_dir, 'sample_output', v["output"] ) self.run_script(argument) - assert filecmp.cmp(sample_output_file, self.output_file) + assert utils.cmp(sample_output_file, self.output_file), self.run_diff(sample_output_file, self.output_file) os.environ["NAMESPACE_ID"] = "" def test_ndppd_conf(self): @@ -331,7 +428,7 @@ def test_ndppd_conf(self): argument = '-j {} -t {} > {}'.format(vlan_interfaces_json, conf_template, self.output_file) self.run_script(argument) - assert filecmp.cmp(expected, self.output_file), self.run_diff(expected, self.output_file) + assert utils.cmp(expected, self.output_file), self.run_diff(expected, self.output_file) def test_ntp_conf(self): conf_template = os.path.join(self.test_dir, "ntp.conf.j2") @@ -340,7 +437,7 @@ def test_ntp_conf(self): argument = '-j {} -t {} > {}'.format(ntp_interfaces_json, conf_template, self.output_file) self.run_script(argument) - assert filecmp.cmp(expected, self.output_file), self.run_diff(expected, self.output_file) + assert utils.cmp(expected, self.output_file), self.run_diff(expected, self.output_file) def tearDown(self): os.environ["CFGGEN_UNIT_TESTING"] = "" diff --git a/src/sonic-config-engine/tests/test_minigraph_case.py b/src/sonic-config-engine/tests/test_minigraph_case.py index 051f33c918ad..d18dd0499dab 100644 --- a/src/sonic-config-engine/tests/test_minigraph_case.py +++ b/src/sonic-config-engine/tests/test_minigraph_case.py @@ -9,6 +9,7 @@ TOR_ROUTER = 'ToRRouter' BACKEND_TOR_ROUTER = 'BackEndToRRouter' +BMC_MGMT_TOR_ROUTER = 'BmcMgmtToRRouter' class TestCfgGenCaseInsensitive(TestCase): @@ -44,27 +45,27 @@ def test_dummy_run(self): self.assertEqual(output, '') def test_minigraph_sku(self): - argument = '-v "DEVICE_METADATA[\'localhost\'][\'hwsku\']" -m "' + self.sample_graph + '"' + argument = '-v "DEVICE_METADATA[\'localhost\'][\'hwsku\']" -m "' + self.sample_graph + '" -p "' + self.port_config + '"' output = self.run_script(argument) self.assertEqual(output.strip(), 'Force10-S6000') def test_print_data(self): - argument = '-m "' + self.sample_graph + '" --print-data' + argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" --print-data' output = self.run_script(argument) self.assertTrue(len(output.strip()) > 0) def test_jinja_expression(self): - argument = '-m "' + self.sample_graph + '" -v "DEVICE_METADATA[\'localhost\'][\'type\']"' + argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v "DEVICE_METADATA[\'localhost\'][\'type\']"' output = self.run_script(argument) self.assertEqual(output.strip(), 'ToRRouter') def test_minigraph_subtype(self): - argument = '-m "' + self.sample_graph + '" -v "DEVICE_METADATA[\'localhost\'][\'subtype\']"' + argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v "DEVICE_METADATA[\'localhost\'][\'subtype\']"' output = self.run_script(argument) self.assertEqual(output.strip(), 'DualToR') def test_minigraph_peer_switch_hostname(self): - argument = '-m "' + self.sample_graph + '" -v "DEVICE_METADATA[\'localhost\'][\'peer_switch\']"' + argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v "DEVICE_METADATA[\'localhost\'][\'peer_switch\']"' output = self.run_script(argument) self.assertEqual(output.strip(), 'switch2-t0') @@ -156,7 +157,7 @@ def test_minigraph_portchannels(self): ) def test_minigraph_console_mgmt_feature(self): - argument = '-m "' + self.sample_graph + '" -v CONSOLE_SWITCH' + argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v CONSOLE_SWITCH' output = self.run_script(argument) self.assertEqual( utils.to_dict(output.strip()), @@ -169,6 +170,19 @@ def test_minigraph_console_port(self): utils.to_dict(output.strip()), utils.to_dict("{'1': {'baud_rate': '9600', 'remote_device': 'managed_device', 'flow_control': 1}}")) + def test_minigraph_dhcp_server_feature(self): + argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v "DEVICE_METADATA[\'localhost\'][\'dhcp_server\']"' + output = self.run_script(argument) + self.assertEqual(output.strip(), '') + + try: + # For DHCP server enabled device type + output = subprocess.check_output("sed -i \'s/%s/%s/g\' %s" % (TOR_ROUTER, BMC_MGMT_TOR_ROUTER, self.sample_graph), shell=True) + output = self.run_script(argument) + self.assertEqual(output.strip(), 'enabled') + finally: + output = subprocess.check_output("sed -i \'s/%s/%s/g\' %s" % (BMC_MGMT_TOR_ROUTER, TOR_ROUTER, self.sample_graph), shell=True) + def test_minigraph_deployment_id(self): argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v "DEVICE_METADATA[\'localhost\'][\'deployment_id\']"' output = self.run_script(argument) diff --git a/src/sonic-config-engine/tests/test_multinpu_cfggen.py b/src/sonic-config-engine/tests/test_multinpu_cfggen.py index 8a79be743848..f39cc9dce1b8 100644 --- a/src/sonic-config-engine/tests/test_multinpu_cfggen.py +++ b/src/sonic-config-engine/tests/test_multinpu_cfggen.py @@ -25,6 +25,7 @@ def setUp(self): self.script_file = utils.PYTHON_INTERPRETTER + ' ' + os.path.join(self.test_dir, '..', 'sonic-cfggen') self.sample_graph = os.path.join(self.test_data_dir, 'sample-minigraph.xml') self.sample_graph1 = os.path.join(self.test_data_dir, 'sample-minigraph-noportchannel.xml') + self.sample_port_config = os.path.join(self.test_data_dir, 'sample_port_config.ini') self.port_config = [] for asic in range(NUM_ASIC): self.port_config.append(os.path.join(self.test_data_dir, "sample_port_config-{}.ini".format(asic))) @@ -80,19 +81,21 @@ def test_dummy_run(self): self.assertEqual(output, '') def test_hwsku(self): - argument = "-v \"DEVICE_METADATA[\'localhost\'][\'hwsku\']\" -m \"{}\"".format(self.sample_graph) + argument = "-v \"DEVICE_METADATA[\'localhost\'][\'hwsku\']\" -m \"{}\" -p \"{}\"".format(self.sample_graph, self.sample_port_config) output = self.run_script(argument) self.assertEqual(output.strip(), SKU) + argument = "-v \"DEVICE_METADATA[\'localhost\'][\'hwsku\']\" -m \"{}\"".format(self.sample_graph) for asic in range(NUM_ASIC): - output = self.run_script_for_asic(argument, asic) + output = self.run_script_for_asic(argument, asic, self.port_config[asic]) self.assertEqual(output.strip(), SKU) def test_print_data(self): - argument = "-m \"{}\" --print-data".format(self.sample_graph) + argument = "-m \"{}\" -p \"{}\" --print-data".format(self.sample_graph, self.sample_port_config) output = self.run_script(argument) self.assertGreater(len(output.strip()) , 0) + argument = "-m \"{}\" --print-data".format(self.sample_graph) for asic in range(NUM_ASIC): - output = self.run_script_for_asic(argument, asic) + output = self.run_script_for_asic(argument, asic, self.port_config[asic]) self.assertGreater(len(output.strip()) , 0) def test_additional_json_data(self): @@ -100,7 +103,7 @@ def test_additional_json_data(self): output = self.run_script(argument) self.assertEqual(output.strip(), 'value1') for asic in range(NUM_ASIC): - output = self.run_script_for_asic(argument, asic) + output = self.run_script_for_asic(argument, asic, self.port_config[asic]) self.assertEqual(output.strip(), 'value1') def test_read_yaml(self): @@ -108,7 +111,7 @@ def test_read_yaml(self): output = yaml.load(self.run_script(argument)) self.assertListEqual(output, ['value1', 'value2']) for asic in range(NUM_ASIC): - output = yaml.load(self.run_script_for_asic(argument, asic)) + output = yaml.load(self.run_script_for_asic(argument, asic, self.port_config[asic])) self.assertListEqual(output, ['value1', 'value2']) def test_render_template(self): @@ -116,32 +119,35 @@ def test_render_template(self): output = self.run_script(argument) self.assertEqual(output.strip(), 'value1\nvalue2') for asic in range(NUM_ASIC): - output = self.run_script_for_asic(argument, asic) + output = self.run_script_for_asic(argument, asic, self.port_config[asic]) self.assertEqual(output.strip(), 'value1\nvalue2') def test_metadata_tacacs(self): - argument = '-m "' + self.sample_graph + '" --var-json "TACPLUS_SERVER"' + argument = '-m "' + self.sample_graph + '" -p "' + self.sample_port_config + '" --var-json "TACPLUS_SERVER"' output = json.loads(self.run_script(argument)) self.assertDictEqual(output, {'123.46.98.21': {'priority': '1', 'tcp_port': '49'}}) #TACPLUS_SERVER not present in the asic configuration. + argument = '-m "' + self.sample_graph + '" --var-json "TACPLUS_SERVER"' for asic in range(NUM_ASIC): output = json.loads(self.run_script_for_asic(argument, asic, self.port_config[asic])) self.assertDictEqual(output, {}) def test_metadata_ntp(self): - argument = '-m "' + self.sample_graph + '" --var-json "NTP_SERVER"' + argument = '-m "' + self.sample_graph + '" -p "' + self.sample_port_config + '" --var-json "NTP_SERVER"' output = json.loads(self.run_script(argument)) self.assertDictEqual(output, {'17.39.1.130': {}, '17.39.1.129': {}}) #NTP data is present only in the host config + argument = '-m "' + self.sample_graph + '" --var-json "NTP_SERVER"' for asic in range(NUM_ASIC): output = json.loads(self.run_script_for_asic(argument, asic, self.port_config[asic])) print("Log:asic{} sku {}".format(asic,output)) self.assertDictEqual(output, {}) def test_mgmt_port(self): - argument = '-m "' + self.sample_graph + '" --var-json "MGMT_PORT"' + argument = '-m "' + self.sample_graph + '" -p "' + self.sample_port_config + '" --var-json "MGMT_PORT"' output = json.loads(self.run_script(argument)) self.assertDictEqual(output, {'eth0': {'alias': 'eth0', 'admin_status': 'up'}}) + argument = '-m "' + self.sample_graph + '" --var-json "MGMT_PORT"' for asic in range(NUM_ASIC): output = json.loads(self.run_script_for_asic(argument, asic, self.port_config[asic])) self.assertDictEqual(output, {'eth0': {'alias': 'eth0', 'admin_status': 'up'}}) @@ -215,17 +221,17 @@ def test_frontend_asic_ports(self): "Ethernet-BP12": { "admin_status": "up", "alias": "Eth7-ASIC0", "asic_port_name": "Eth7-ASIC0", "description": "ASIC3:Eth1-ASIC3", "index": "3", "lanes": "25,26,27,28", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Int", "speed": "40000" }}) def test_frontend_asic_ports_config_db(self): - argument = "-m {} -n asic0 --var-json \"PORT\"".format(self.sample_graph) + argument = "-m {} -p {} -n asic0 --var-json \"PORT\"".format(self.sample_graph, self.port_config[0]) output = json.loads(self.run_script(argument)) self.assertDictEqual(output, - {"Ethernet0": { "admin_status": "up", "alias": "Ethernet1/1", "asic_port_name": "Eth0-ASIC0", "description": "01T2:Ethernet1:config_db", "index": "0", "lanes": "33,34,35,36", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Ext", "speed": "40000", "autoneg": "on" }, - "Ethernet4": { "admin_status": "up", "alias": "Ethernet1/2", "asic_port_name": "Eth1-ASIC0", "description": "01T2:Ethernet2:config_db", "index": "1", "lanes": "29,30,31,32", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Ext", "speed": "40000", "autoneg": "on" }, - "Ethernet8": { "admin_status": "up", "alias": "Ethernet1/3", "asic_port_name": "Eth2-ASIC0", "description": "Ethernet1/3:config_db", "index": "2", "lanes": "41,42,43,44", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Ext", "speed": "40000" }, - "Ethernet12": { "admin_status": "up", "alias": "Ethernet1/4", "asic_port_name": "Eth3-ASIC0", "description": "Ethernet1/4:config_db", "index": "3", "lanes": "37,38,39,40", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Ext", "speed": "40000" }, - "Ethernet-BP0": { "admin_status": "up", "alias": "Eth4-ASIC0", "asic_port_name": "Eth4-ASIC0", "description": "ASIC2:Eth0-ASIC2:config_db", "index": "0", "lanes": "13,14,15,16", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Int", "speed": "40000" }, - "Ethernet-BP4": { "admin_status": "up", "alias": "Eth5-ASIC0", "asic_port_name": "Eth5-ASIC0", "description": "ASIC2:Eth1-ASIC2:config_db", "index": "1", "lanes": "17,18,19,20", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Int", "speed": "40000" }, - "Ethernet-BP8": { "admin_status": "up", "alias": "Eth6-ASIC0", "asic_port_name": "Eth6-ASIC0", "description": "ASIC3:Eth0-ASIC3:config_db", "index": "2", "lanes": "21,22,23,24", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Int", "speed": "40000" }, - "Ethernet-BP12": { "admin_status": "up", "alias": "Eth7-ASIC0", "asic_port_name": "Eth7-ASIC0", "description": "ASIC3:Eth1-ASIC3:config_db", "index": "3", "lanes": "25,26,27,28", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Int", "speed": "40000" }}) + {"Ethernet0": { "admin_status": "up", "alias": "Ethernet1/1", "asic_port_name": "Eth0-ASIC0", "description": "01T2:Ethernet1", "index": "0", "lanes": "33,34,35,36", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Ext", "speed": "40000", "autoneg": "on" }, + "Ethernet4": { "admin_status": "up", "alias": "Ethernet1/2", "asic_port_name": "Eth1-ASIC0", "description": "01T2:Ethernet2", "index": "1", "lanes": "29,30,31,32", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Ext", "speed": "40000", "autoneg": "on" }, + "Ethernet8": { "alias": "Ethernet1/3", "asic_port_name": "Eth2-ASIC0", "description": "Ethernet1/3", "index": "2", "lanes": "41,42,43,44", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Ext", "speed": "40000" }, + "Ethernet12": { "alias": "Ethernet1/4", "asic_port_name": "Eth3-ASIC0", "description": "Ethernet1/4", "index": "3", "lanes": "37,38,39,40", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Ext", "speed": "40000" }, + "Ethernet-BP0": { "admin_status": "up", "alias": "Eth4-ASIC0", "asic_port_name": "Eth4-ASIC0", "description": "ASIC2:Eth0-ASIC2", "index": "0", "lanes": "13,14,15,16", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Int", "speed": "40000" }, + "Ethernet-BP4": { "admin_status": "up", "alias": "Eth5-ASIC0", "asic_port_name": "Eth5-ASIC0", "description": "ASIC2:Eth1-ASIC2", "index": "1", "lanes": "17,18,19,20", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Int", "speed": "40000" }, + "Ethernet-BP8": { "admin_status": "up", "alias": "Eth6-ASIC0", "asic_port_name": "Eth6-ASIC0", "description": "ASIC3:Eth0-ASIC3", "index": "2", "lanes": "21,22,23,24", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Int", "speed": "40000" }, + "Ethernet-BP12": { "admin_status": "up", "alias": "Eth7-ASIC0", "asic_port_name": "Eth7-ASIC0", "description": "ASIC3:Eth1-ASIC3", "index": "3", "lanes": "25,26,27,28", "mtu": "9100", "tpid": "0x8100", "pfc_asym": "off", "role": "Int", "speed": "40000" }}) def test_frontend_asic_device_neigh(self): argument = "-m {} -p {} -n asic0 --var-json \"DEVICE_NEIGHBOR\"".format(self.sample_graph, self.port_config[0]) @@ -270,7 +276,7 @@ def test_frontend_bgp_neighbor(self): 'fc00::2': {'rrclient': 0, 'name': '01T2', 'local_addr': 'fc00::1', 'nhopself': 0, 'holdtime': '10', 'asn': '65200', 'keepalive': '3'}}) def test_frontend_asic_bgp_neighbor(self): - argument = "-m {} -p {} -n asic0 --var-json \"BGP_INTERNAL_NEIGHBOR\"".format(self.sample_graph, self.port_config[3]) + argument = "-m {} -p {} -n asic0 --var-json \"BGP_INTERNAL_NEIGHBOR\"".format(self.sample_graph, self.port_config[0]) output = json.loads(self.run_script(argument)) self.assertDictEqual(output, \ {'10.1.0.0': {'rrclient': 0, 'name': 'ASIC2', 'local_addr': '10.1.0.1', 'nhopself': 0, 'admin_status': 'up', 'holdtime': '0', 'asn': '65100', 'keepalive': '0'}, @@ -297,23 +303,38 @@ def test_device_asic_metadata(self): self.assertEqual(output['localhost']['sub_role'], 'BackEnd') def test_global_asic_acl(self): - argument = "-m {} --var-json \"ACL_TABLE\"".format(self.sample_graph) + argument = "-m {} -p {} --var-json \"ACL_TABLE\"".format(self.sample_graph, self.sample_port_config) output = json.loads(self.run_script(argument)) - self.assertDictEqual(output, {\ - 'DATAACL': {'policy_desc': 'DATAACL', 'ports': ['PortChannel0002','PortChannel0008'], 'stage': 'ingress', 'type': 'L3'}, - 'EVERFLOW': {'policy_desc': 'EVERFLOW', 'ports': ['PortChannel0002','PortChannel0008'], 'stage': 'ingress', 'type': 'MIRROR'}, - 'EVERFLOWV6':{'policy_desc': 'EVERFLOWV6', 'ports': ['PortChannel0002','PortChannel0008'], 'stage': 'ingress', 'type': 'MIRRORV6'}, - 'SNMP_ACL': {'policy_desc': 'SNMP_ACL', 'services': ['SNMP'], 'stage': 'ingress', 'type': 'CTRLPLANE'}, - 'SSH_ONLY': {'policy_desc': 'SSH_ONLY', 'services': ['SSH'], 'stage': 'ingress', 'type': 'CTRLPLANE'}}) + exp = {\ + 'SNMP_ACL': {'policy_desc': 'SNMP_ACL', 'type': 'CTRLPLANE', 'stage': 'ingress', 'services': ['SNMP']}, + 'EVERFLOW': {'policy_desc': 'EVERFLOW', 'stage': 'ingress', 'ports': ['PortChannel0002', 'PortChannel0008', 'Ethernet8', 'Ethernet12', 'Ethernet24', 'Ethernet28'], 'type': 'MIRROR'}, + 'EVERFLOWV6': {'policy_desc': 'EVERFLOWV6', 'stage': 'ingress', 'ports': ['PortChannel0002', 'PortChannel0008', 'Ethernet8', 'Ethernet12', 'Ethernet24', 'Ethernet28'], 'type': 'MIRRORV6'}, + 'SSH_ONLY': {'policy_desc': 'SSH_ONLY', 'type': 'CTRLPLANE', 'stage': 'ingress', 'services': ['SSH']}, + 'DATAACL': {'policy_desc': 'DATAACL', 'stage': 'ingress', 'ports': ['PortChannel0002', 'PortChannel0008'], 'type': 'L3'}} + for k, v in output.items(): + if 'ports' in v: + v['ports'].sort() + for k, v in exp.items(): + if 'ports' in v: + v['ports'].sort() + self.assertDictEqual(output, exp) + def test_global_asic_acl1(self): - argument = "-m {} --var-json \"ACL_TABLE\"".format(self.sample_graph1) + argument = "-m {} -p {} --var-json \"ACL_TABLE\"".format(self.sample_graph1, self.sample_port_config) + self.maxDiff = None output = json.loads(self.run_script(argument)) - self.assertDictEqual(output, {\ - 'EVERFLOW': {'policy_desc': 'EVERFLOW', 'ports': [], 'stage': 'ingress', 'type': 'MIRROR'}, - 'EVERFLOWV6':{'policy_desc': 'EVERFLOWV6', 'ports': [], 'stage': 'ingress', 'type': 'MIRRORV6'}, - 'SNMP_ACL': {'policy_desc': 'SNMP_ACL', 'services': ['SNMP'], 'stage': 'ingress', 'type': 'CTRLPLANE'}, - 'SSH_ONLY': {'policy_desc': 'SSH_ONLY', 'services': ['SSH'], 'stage': 'ingress', 'type': 'CTRLPLANE'}}) - + exp = {\ + 'SNMP_ACL': {'policy_desc': 'SNMP_ACL', 'type': 'CTRLPLANE', 'stage': 'ingress', 'services': ['SNMP']}, + 'EVERFLOW': {'policy_desc': 'EVERFLOW', 'stage': 'ingress', 'ports': ['Ethernet0', 'Ethernet4', 'Ethernet8', 'Ethernet12', 'Ethernet16', 'Ethernet20', 'Ethernet24', 'Ethernet28'], 'type': 'MIRROR'}, + 'EVERFLOWV6': {'policy_desc': 'EVERFLOWV6', 'stage': 'ingress', 'ports': ['Ethernet0', 'Ethernet4', 'Ethernet8', 'Ethernet12', 'Ethernet16', 'Ethernet20', 'Ethernet24', 'Ethernet28'], 'type': 'MIRRORV6'}, + 'SSH_ONLY': {'policy_desc': 'SSH_ONLY', 'type': 'CTRLPLANE', 'stage': 'ingress', 'services': ['SSH']}} + for k, v in output.items(): + if 'ports' in v: + v['ports'].sort() + for k, v in exp.items(): + if 'ports' in v: + v['ports'].sort() + self.assertDictEqual(output, exp) def test_front_end_asic_acl(self): argument = "-m {} -p {} -n asic0 --var-json \"ACL_TABLE\"".format(self.sample_graph, self.port_config[0]) @@ -347,7 +368,7 @@ def test_back_end_asic_acl1(self): def test_loopback_intfs(self): - argument = "-m {} --var-json \"LOOPBACK_INTERFACE\"".format(self.sample_graph) + argument = "-m {} -p {} --var-json \"LOOPBACK_INTERFACE\"".format(self.sample_graph, self.sample_port_config) output = json.loads(self.run_script(argument)) self.assertDictEqual(output, {\ "Loopback0": {}, @@ -355,7 +376,7 @@ def test_loopback_intfs(self): "Loopback0|FC00:1::32/128": {}}) # The asic configuration should have 2 loopback interfaces - argument = "-m {} -n asic0 --var-json \"LOOPBACK_INTERFACE\"".format(self.sample_graph) + argument = "-m {} -p {} -n asic0 --var-json \"LOOPBACK_INTERFACE\"".format(self.sample_graph, self.port_config[0]) output = json.loads(self.run_script(argument)) self.assertDictEqual(output, { \ "Loopback0": {}, @@ -365,7 +386,7 @@ def test_loopback_intfs(self): "Loopback4096|8.0.0.0/32": {}, "Loopback4096|FD00:1::32/128": {}}) - argument = "-m {} -n asic3 --var-json \"LOOPBACK_INTERFACE\"".format(self.sample_graph) + argument = "-m {} -p {} -n asic3 --var-json \"LOOPBACK_INTERFACE\"".format(self.sample_graph, self.port_config[3]) output = json.loads(self.run_script(argument)) self.assertDictEqual(output, {\ "Loopback0": {}, diff --git a/src/sonic-ctrmgrd/ctrmgr/container b/src/sonic-ctrmgrd/ctrmgr/container index 666c967540a7..db6ded635ee9 100755 --- a/src/sonic-ctrmgrd/ctrmgr/container +++ b/src/sonic-ctrmgrd/ctrmgr/container @@ -26,6 +26,7 @@ CONTAINER_ID = "container_id" REMOTE_STATE = "remote_state" VERSION = "container_version" SYSTEM_STATE = "system_state" +STATE = "state" KUBE_LABEL_TABLE = "KUBE_LABELS" KUBE_LABEL_SET_KEY = "SET" @@ -38,6 +39,9 @@ SONIC_CTR_CONFIG_PEND_SECS = "revert_to_local_on_wait_seconds" DEFAULT_PEND_SECS = ( 5 * 60 ) WAIT_POLL_SECS = 2 +SUCCESS = 0 +FAILURE = -1 + remote_ctr_enabled = False def debug_msg(m): @@ -87,10 +91,10 @@ def read_data(is_config, feature, fields): def read_config(feature): """ Read requried feature config """ - set_owner, no_fallback = read_data(True, feature, - [(SET_OWNER, "local"), (NO_FALLBACK, False)]) + set_owner, no_fallback, state = read_data(True, feature, + [(SET_OWNER, "local"), (NO_FALLBACK, False), (STATE, "disabled")]) - return (set_owner, not no_fallback) + return (set_owner, not no_fallback, state) def read_state(feature): @@ -107,12 +111,12 @@ def docker_action(action, feature, **kwargs): container = client.containers.get(feature) getattr(container, action)(**kwargs) syslog.syslog(syslog.LOG_INFO, "docker cmd: {} for {}".format(action, feature)) - return 0 + return SUCCESS except (docker.errors.NotFound, docker.errors.APIError) as err: syslog.syslog(syslog.LOG_ERR, "docker cmd: {} for {} failed with {}". format(action, feature, str(err))) - return -1 + return FAILURE def set_label(feature, create): @@ -186,7 +190,7 @@ def container_start(feature, **kwargs): init() - set_owner, fallback = read_config(feature) + set_owner, fallback, _ = read_config(feature) _, remote_state, _ = read_state(feature) debug_msg("{}: set_owner:{} fallback:{} remote_state:{}".format( @@ -244,8 +248,8 @@ def container_stop(feature, **kwargs): debug_msg("BEGIN") init() - - set_owner, _ = read_config(feature) + ret = SUCCESS + set_owner, _ , _ = read_config(feature) current_owner, remote_state, _ = read_state(feature) docker_id = container_id(feature) remove_label = (remote_state != "pending") or (set_owner == "local") @@ -257,7 +261,7 @@ def container_stop(feature, **kwargs): set_label(feature, False) if docker_id: - docker_action("stop", docker_id, **kwargs) + ret = docker_action("stop", docker_id, **kwargs) else: syslog.syslog( syslog.LOG_ERR if current_owner != "none" else syslog.LOG_INFO, @@ -286,6 +290,7 @@ def container_stop(feature, **kwargs): update_data(feature, data) debug_msg("END") + return ret def container_kill(feature, **kwargs): @@ -301,19 +306,25 @@ def container_kill(feature, **kwargs): init() - set_owner, _ = read_config(feature) + ret = SUCCESS + set_owner, _ , state = read_config(feature) current_owner, remote_state, _ = read_state(feature) docker_id = container_id(feature) remove_label = (set_owner != "local") or (current_owner != "local") - debug_msg("{}: set_owner:{} current_owner:{} remote_state:{} docker_id:{}".format( - feature, set_owner, current_owner, remote_state, docker_id)) + debug_msg("{}: set_owner:{} current_owner:{} remote_state:{} docker_id:{} state:{}".format( + feature, set_owner, current_owner, remote_state, docker_id, state)) if remove_label: set_label(feature, False) + if set_owner == "local": + if state not in ["enabled", "always_enabled"]: + debug_msg("{} is not enabled".format(feature)) + return FAILURE + if docker_id: - docker_action("kill", docker_id, **kwargs) + ret = docker_action("kill", docker_id, **kwargs) else: syslog.syslog( @@ -322,6 +333,7 @@ def container_kill(feature, **kwargs): debug_msg("END") + return ret def container_wait(feature, **kwargs): @@ -341,10 +353,11 @@ def container_wait(feature, **kwargs): init() - set_owner, fallback = read_config(feature) + set_owner, fallback, _ = read_config(feature) current_owner, remote_state, _ = read_state(feature) docker_id = container_id(feature) pend_wait_secs = 0 + ret = SUCCESS if not docker_id and fallback: pend_wait_secs = get_config_data( @@ -377,8 +390,9 @@ def container_wait(feature, **kwargs): format(feature)) else: debug_msg("END -- transitioning to docker wait") - docker_action("wait", docker_id, **kwargs) + ret = docker_action("wait", docker_id, **kwargs) + return ret def main(): parser=argparse.ArgumentParser(description="container commands for start/stop/wait/kill/id") @@ -389,24 +403,26 @@ def main(): args = parser.parse_args() kwargs = {} + ret = 0 if args.action == "start": - container_start(args.name, **kwargs) + ret = container_start(args.name, **kwargs) elif args.action == "stop": if args.timeout is not None: kwargs['timeout'] = args.timeout - container_stop(args.name, **kwargs) + ret = container_stop(args.name, **kwargs) elif args.action == "kill": - container_kill(args.name, **kwargs) + ret = container_kill(args.name, **kwargs) elif args.action == "wait": - container_wait(args.name, **kwargs) + ret = container_wait(args.name, **kwargs) elif args.action == "id": id = container_id(args.name, **kwargs) print(id) + return ret if __name__ == "__main__": main() diff --git a/src/sonic-ctrmgrd/tests/container_test.py b/src/sonic-ctrmgrd/tests/container_test.py index cc5f89e8d97f..4738597c72c4 100755 --- a/src/sonic-ctrmgrd/tests/container_test.py +++ b/src/sonic-ctrmgrd/tests/container_test.py @@ -269,7 +269,8 @@ common_test.CONFIG_DB_NO: { common_test.FEATURE_TABLE: { "snmp": { - "set_owner": "local" + "set_owner": "local", + "state": "enabled" } } }, @@ -348,6 +349,30 @@ } } +# container_kill test cases +# test case 0 -- container kill local disabled container +# -- no change in state-db +# -- no label update +# +invalid_kill_test_data = { + 0: { + common_test.DESCR: "container kill for local disabled container", + common_test.PRE: { + common_test.CONFIG_DB_NO: { + common_test.FEATURE_TABLE: { + "sflow": { + "set_owner": "local" + } + } + } + }, + common_test.POST: { + }, + common_test.ACTIONS: { + } + } +} + # container_wait test cases # test case 0 -- container wait local @@ -498,6 +523,24 @@ def test_kill(self, mock_docker, mock_table, mock_conn): ret = common_test.check_mock_containers() assert ret == 0 + @patch("container.swsscommon.DBConnector") + @patch("container.swsscommon.Table") + @patch("container.docker.from_env") + def test_invalid_kill(self, mock_docker, mock_table, mock_conn): + self.init() + common_test.set_mock(mock_table, mock_conn, mock_docker) + + for (i, ct_data) in invalid_kill_test_data.items(): + common_test.do_start_test("container_test:container_kill", i, ct_data) + + ret = container.container_kill("sflow") + assert ret != 0 + + ret = common_test.check_tables_returned() + assert ret == 0 + + ret = common_test.check_mock_containers() + assert ret == 0 @patch("container.swsscommon.DBConnector") @patch("container.swsscommon.Table") diff --git a/src/sonic-device-data/tests/permitted_list b/src/sonic-device-data/tests/permitted_list index c1f70dc7be65..e1a651569b84 100644 --- a/src/sonic-device-data/tests/permitted_list +++ b/src/sonic-device-data/tests/permitted_list @@ -2,6 +2,7 @@ sai_trap_group_priority use_all_splithorizon_groups riot_enable sai_tunnel_support +sai_tunnel_underlay_route_mode riot_overlay_l3_intf_mem_size riot_overlay_l3_egress_mem_size l3_ecmp_levels diff --git a/src/sonic-host-services-data/templates/limits.conf.j2 b/src/sonic-host-services-data/templates/limits.conf.j2 new file mode 100755 index 000000000000..41b37221e41e --- /dev/null +++ b/src/sonic-host-services-data/templates/limits.conf.j2 @@ -0,0 +1,69 @@ +# /etc/security/limits.conf +# +# This file generate by j2 template file: src/sonic-host-services-data/templates/limits.conf.j2 +# +# Each line describes a limit for a user in the form: +# +# +# +# Where: +# can be: +# - a user name +# - a group name, with @group syntax +# - the wildcard *, for default entry +# - the wildcard %, can be also used with %group syntax, +# for maxlogin limit +# - NOTE: group and wildcard limits are not applied to root. +# To apply a limit to the root user, must be +# the literal username root. +# +# can have the two values: +# - "soft" for enforcing the soft limits +# - "hard" for enforcing hard limits +# +# can be one of the following: +# - core - limits the core file size (KB) +# - data - max data size (KB) +# - fsize - maximum filesize (KB) +# - memlock - max locked-in-memory address space (KB) +# - nofile - max number of open file descriptors +# - rss - max resident set size (KB) +# - stack - max stack size (KB) +# - cpu - max CPU time (MIN) +# - nproc - max number of processes +# - as - address space limit (KB) +# - maxlogins - max number of logins for this user +# - maxsyslogins - max number of logins on the system +# - priority - the priority to run user process with +# - locks - max number of file locks the user can hold +# - sigpending - max number of pending signals +# - msgqueue - max memory used by POSIX message queues (bytes) +# - nice - max nice priority allowed to raise to values: [-20, 19] +# - rtprio - max realtime priority +# - chroot - change root to directory (Debian-specific) +# +# +# is related with : +# All items support the values -1, unlimited or infinity indicating +# no limit, except for priority and nice. +# +# If a hard limit or soft limit of a resource is set to a valid value, +# but outside of the supported range of the local system, the system +# may reject the new limit or unexpected behavior may occur. If the +# control value required is used, the module will reject the login if +# a limit could not be set. +# +# +# + +# * soft core 0 +# root hard core 100000 +# * hard rss 10000 +# @student hard nproc 20 +# @faculty soft nproc 20 +# @faculty hard nproc 50 +# ftp hard nproc 0 +# ftp - chroot /ftp +# @student - maxlogins 4 + +# End of file diff --git a/src/sonic-host-services-data/templates/pam_limits.j2 b/src/sonic-host-services-data/templates/pam_limits.j2 new file mode 100755 index 000000000000..f87906932fb7 --- /dev/null +++ b/src/sonic-host-services-data/templates/pam_limits.j2 @@ -0,0 +1,12 @@ +#THIS IS AN AUTO-GENERATED FILE +# +# This file generate by j2 template file: src/sonic-host-services-data/templates/pam_limits.j2 +# +# /etc/pam.d/pam-limits settings common to all services +# This file is included from other service-specific PAM config files, +# and should contain a list of the authentication modules that define +# the central authentication scheme for use on the system +# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the +# traditional Unix authentication mechanisms. +# +# here are the per-package modules (the "Primary" block) \ No newline at end of file diff --git a/src/sonic-host-services/scripts/caclmgrd b/src/sonic-host-services/scripts/caclmgrd index 77bcd2e4ee7a..a65f05a34520 100755 --- a/src/sonic-host-services/scripts/caclmgrd +++ b/src/sonic-host-services/scripts/caclmgrd @@ -501,9 +501,7 @@ class ControlPlaneAclManager(daemon_base.DaemonBase): # Add iptables/ip6tables commands to allow all incoming BGP traffic # TODO: Determine BGP ACLs based on configured device sessions, and remove this blanket acceptance iptables_cmds.append(self.iptables_cmd_ns_prefix[namespace] + "iptables -A INPUT -p tcp --dport 179 -j ACCEPT") - iptables_cmds.append(self.iptables_cmd_ns_prefix[namespace] + "iptables -A INPUT -p tcp --sport 179 -j ACCEPT") iptables_cmds.append(self.iptables_cmd_ns_prefix[namespace] + "ip6tables -A INPUT -p tcp --dport 179 -j ACCEPT") - iptables_cmds.append(self.iptables_cmd_ns_prefix[namespace] + "ip6tables -A INPUT -p tcp --sport 179 -j ACCEPT") # Get current ACL tables and rules from Config DB self._tables_db_info = self.config_db_map[namespace].get_table(self.ACL_TABLE) diff --git a/src/sonic-host-services/scripts/hostcfgd b/src/sonic-host-services/scripts/hostcfgd index 9b39fb5eb807..7f8f4be0b2e7 100755 --- a/src/sonic-host-services/scripts/hostcfgd +++ b/src/sonic-host-services/scripts/hostcfgd @@ -11,8 +11,7 @@ import signal import jinja2 from sonic_py_common import device_info -from swsscommon.swsscommon import SubscriberStateTable, DBConnector, Select -from swsscommon.swsscommon import ConfigDBConnector, TableConsumable +from swsscommon.swsscommon import ConfigDBConnector, DBConnector, Table # FILE PAM_AUTH_CONF = "/etc/pam.d/common-auth-sonic" @@ -25,6 +24,10 @@ 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" +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" +LIMITS_CONF = "/etc/security/limits.conf" # TACACS+ TACPLUS_SERVER_PASSKEY_DEFAULT = "" @@ -41,6 +44,7 @@ RADIUS_PAM_AUTH_CONF_DIR = "/etc/pam_radius_auth.d/" # MISC Constants CFG_DB = "CONFIG_DB" +STATE_DB = "STATE_DB" HOSTCFGD_MAX_PRI = 10 # Used to enforce ordering b/w daemons under Hostcfgd DEFAULT_SELECT_TIMEOUT = 1000 @@ -166,16 +170,23 @@ class FeatureHandler(object): SYSTEMD_SYSTEM_DIR = '/etc/systemd/system/' SYSTEMD_SERVICE_CONF_DIR = os.path.join(SYSTEMD_SYSTEM_DIR, '{}.service.d/') - def __init__(self, config_db, device_config): + # Feature state constants + FEATURE_STATE_ENABLED = "enabled" + FEATURE_STATE_DISABLED = "disabled" + FEATURE_STATE_FAILED = "failed" + + def __init__(self, config_db, feature_state_table, device_config): self._config_db = config_db + self._feature_state_table = feature_state_table self._device_config = device_config self._cached_config = {} self.is_multi_npu = device_info.is_multi_npu() def handle(self, feature_name, op, feature_cfg): if not feature_cfg: - self._cached_config.pop(feature_name) syslog.syslog(syslog.LOG_INFO, "Deregistering feature {}".format(feature_name)) + self._cached_config.pop(feature_name) + self._feature_state_table._del(feature_name) return feature = Feature(feature_name, feature_cfg, self._device_config) @@ -195,21 +206,23 @@ class FeatureHandler(object): else: self.resync_feature_state(self._cached_config[feature_name]) - def sync_state_field(self): + def sync_state_field(self, feature_table): """ Summary: Updates the state field in the FEATURE|* tables as the state field might have to be rendered based on DEVICE_METADATA table """ - feature_table = self._config_db.get_table('FEATURE') for feature_name in feature_table.keys(): if not feature_name: syslog.syslog(syslog.LOG_WARNING, "Feature is None") continue feature = Feature(feature_name, feature_table[feature_name], self._device_config) - if not feature.compare_state(feature_name, feature_table.get(feature_name, {})): - self.resync_feature_state(feature) + + self._cached_config.setdefault(feature_name, feature) + self.update_feature_auto_restart(feature, feature_name) + self.update_feature_state(feature) + self.resync_feature_state(feature) def update_feature_state(self, feature): cached_feature = self._cached_config[feature.name] @@ -253,7 +266,6 @@ 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') @@ -341,8 +353,11 @@ class FeatureHandler(object): except Exception as err: syslog.syslog(syslog.LOG_ERR, "Feature '{}.{}' failed to be enabled and started" .format(feature.name, feature_suffixes[-1])) + self.set_feature_state(feature, self.FEATURE_STATE_FAILED) return + self.set_feature_state(feature, self.FEATURE_STATE_ENABLED) + def disable_feature(self, feature): cmds = [] feature_names, feature_suffixes = self.get_feature_attribute(feature) @@ -363,11 +378,17 @@ class FeatureHandler(object): except Exception as err: syslog.syslog(syslog.LOG_ERR, "Feature '{}.{}' failed to be stopped and disabled" .format(feature.name, feature_suffixes[-1])) + self.set_feature_state(feature, self.FEATURE_STATE_FAILED) return + self.set_feature_state(feature, self.FEATURE_STATE_DISABLED) + def resync_feature_state(self, feature): self._config_db.mod_entry('FEATURE', feature.name, {'state': feature.state}) + def set_feature_state(self, feature, state): + self._feature_state_table.set(feature.name, [('state', state)]) + class Iptables(object): def __init__(self): @@ -386,6 +407,10 @@ class Iptables(object): ''' return (isinstance(key, tuple)) + def load(self, lpbk_table): + for row in lpbk_table: + self.iptables_handler(row, lpbk_table[row]) + def command(self, chain, ip, ver, op): cmd = 'iptables' if ver == '4' else 'ip6tables' cmd += ' -t mangle --{} {} -p tcp --tcp-flags SYN SYN'.format(op, chain) @@ -870,15 +895,13 @@ class KdumpCfg(object): memory = self.kdump_defaults["memory"] if data.get("memory") is not None: memory = data.get("memory") - if data.get("memory") is not None: - run_cmd("sonic-kdump-config --memory " + memory) + run_cmd("sonic-kdump-config --memory " + memory) # Num dumps num_dumps = self.kdump_defaults["num_dumps"] if data.get("num_dumps") is not None: num_dumps = data.get("num_dumps") - if data.get("num_dumps") is not None: - run_cmd("sonic-kdump-config --num_dumps " + num_dumps) + run_cmd("sonic-kdump-config --num_dumps " + num_dumps) class NtpCfg(object): """ @@ -892,6 +915,15 @@ class NtpCfg(object): self.ntp_global = {} self.ntp_servers = set() + def load(self, ntp_global_conf, ntp_server_conf): + syslog.syslog(syslog.LOG_INFO, "NtpCfg load ...") + + for row in ntp_global_conf: + self.ntp_global_update(row, ntp_global_conf[row], is_load=True) + + # Force reload on init + self.ntp_server_update(0, None, is_load=True) + def handle_ntp_source_intf_chg(self, intf_name): # if no ntp server configured, do nothing if not self.ntp_servers: @@ -905,7 +937,7 @@ class NtpCfg(object): cmd = 'systemctl restart ntp-config' run_cmd(cmd) - def ntp_global_update(self, key, data): + def ntp_global_update(self, key, data, is_load=False): syslog.syslog(syslog.LOG_INFO, 'NTP GLOBAL Update') orig_src = self.ntp_global.get('src_intf', '') orig_src_set = set(orig_src.split(";")) @@ -914,14 +946,17 @@ class NtpCfg(object): new_src = data.get('src_intf', '') new_src_set = set(new_src.split(";")) new_vrf = data.get('vrf', '') - + # Update the Local Cache self.ntp_global = data + # If initial load don't restart daemon + if is_load: return + # check if ntp server configured, if not, do nothing if not self.ntp_servers: syslog.syslog(syslog.LOG_INFO, "No ntp server when global config change, do nothing") - return + return if orig_src_set != new_src_set: syslog.syslog(syslog.LOG_INFO, "ntp global update for source intf old {} new {}, restarting ntp-config" @@ -934,50 +969,107 @@ class NtpCfg(object): cmd = 'service ntp restart' run_cmd(cmd) - def ntp_server_update(self, key, op): + def ntp_server_update(self, key, op, is_load=False): syslog.syslog(syslog.LOG_INFO, 'ntp server update key {}'.format(key)) restart_config = False - if op == "SET" and key not in self.ntp_servers: - restart_config = True - self.ntp_servers.add(key) - elif op == "DEL" and key in self.ntp_servers: + if not is_load: + if op == "SET" and key not in self.ntp_servers: + restart_config = True + self.ntp_servers.add(key) + elif op == "DEL" and key in self.ntp_servers: + restart_config = True + self.ntp_servers.remove(key) + else: restart_config = True - self.ntp_servers.remove(key) if restart_config: cmd = 'systemctl restart ntp-config' syslog.syslog(syslog.LOG_INFO, 'ntp server update, restarting ntp-config, ntp servers configured {}'.format(self.ntp_servers)) run_cmd(cmd) +class PamLimitsCfg(object): + """ + PamLimit Config Daemon + 1) The pam_limits PAM module sets limits on the system resources that can be obtained in a user-session. + 2) Purpose of this daemon is to render pam_limits config file. + """ + def __init__(self, config_db): + self.config_db = config_db + self.hwsku = "" + self.type = "" + + # Load config from ConfigDb and render config file/ + def update_config_file(self): + device_metadata = self.config_db.get_table('DEVICE_METADATA') + if "localhost" not in device_metadata: + return + + self.read_localhost_config(device_metadata["localhost"]) + self.render_conf_file() + + # Read localhost config + def read_localhost_config(self, localhost): + if "hwsku" in localhost: + self.hwsku = localhost["hwsku"] + else: + self.hwsku = "" + + if "type" in localhost: + self.type = localhost["type"] + else: + self.type = "" + + # Render pam_limits config files + def render_conf_file(self): + env = jinja2.Environment(loader=jinja2.FileSystemLoader('/'), trim_blocks=True) + env.filters['sub'] = sub + + try: + template_file = os.path.abspath(PAM_LIMITS_CONF_TEMPLATE) + template = env.get_template(template_file) + pam_limits_conf = template.render( + hwsku=self.hwsku, + type=self.type) + with open(PAM_LIMITS_CONF, 'w') as f: + f.write(pam_limits_conf) + + template_file = os.path.abspath(LIMITS_CONF_TEMPLATE) + template = env.get_template(template_file) + limits_conf = template.render( + hwsku=self.hwsku, + type=self.type) + with open(LIMITS_CONF, 'w') as f: + f.write(limits_conf) + except Exception as e: + syslog.syslog(syslog.LOG_ERR, + "modify pam_limits config file failed with exception: {}" + .format(e)) + class HostConfigDaemon: def __init__(self): # Just a sanity check to verify if the CONFIG_DB has been initialized # before moving forward self.config_db = ConfigDBConnector() self.config_db.connect(wait_for_init=True, retry_on=True) - self.dbconn = DBConnector(CFG_DB, 0) - self.selector = Select() syslog.syslog(syslog.LOG_INFO, 'ConfigDB connect success') - self.select = Select() - self.callbacks = dict() - self.subscriber_map = dict() - # Load DEVICE metadata configurations self.device_config = {} self.device_config['DEVICE_METADATA'] = self.config_db.get_table('DEVICE_METADATA') + # Load feature state table + self.state_db_conn = DBConnector(STATE_DB, 0) + feature_state_table = Table(self.state_db_conn, 'FEATURE') + # Initialize KDump Config and set the config to default if nothing is provided self.kdumpCfg = KdumpCfg(self.config_db) - self.kdumpCfg.load(self.config_db.get_table('KDUMP')) # Initialize IpTables self.iptables = Iptables() # Intialize Feature Handler - self.feature_handler = FeatureHandler(self.config_db, self.device_config) - self.feature_handler.sync_state_field() + self.feature_handler = FeatureHandler(self.config_db, feature_state_table, self.device_config) # Initialize Ntp Config Handler self.ntpcfg = NtpCfg() @@ -987,24 +1079,34 @@ class HostConfigDaemon: # Initialize AAACfg self.hostname_cache="" self.aaacfg = AaaCfg() - - def load(self): - aaa = self.config_db.get_table('AAA') - tacacs_global = self.config_db.get_table('TACPLUS') - tacacs_server = self.config_db.get_table('TACPLUS_SERVER') - radius_global = self.config_db.get_table('RADIUS') - radius_server = self.config_db.get_table('RADIUS_SERVER') + # Initialize PamLimitsCfg + self.pamLimitsCfg = PamLimitsCfg(self.config_db) + self.pamLimitsCfg.update_config_file() + + def load(self, init_data): + features = init_data['FEATURE'] + aaa = init_data['AAA'] + tacacs_global = init_data['TACPLUS'] + tacacs_server = init_data['TACPLUS_SERVER'] + radius_global = init_data['RADIUS'] + radius_server = init_data['RADIUS_SERVER'] + lpbk_table = init_data['LOOPBACK_INTERFACE'] + ntp_server = init_data['NTP_SERVER'] + ntp_global = init_data['NTP'] + kdump = init_data['KDUMP'] + + 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) + + dev_meta = self.config_db.get_table('DEVICE_METADATA') + if 'localhost' in dev_meta: + if 'hostname' in dev_meta['localhost']: + self.hostname_cache = dev_meta['localhost']['hostname'] - try: - dev_meta = self.config_db.get_table('DEVICE_METADATA') - if 'localhost' in dev_meta: - if 'hostname' in dev_meta['localhost']: - self.hostname_cache = dev_meta['localhost']['hostname'] - except Exception as e: - pass - # Update AAA with the hostname self.aaacfg.hostname_update(self.hostname_cache) @@ -1097,39 +1199,37 @@ class HostConfigDaemon: systemctl_cmd = "sudo systemctl is-system-running --wait --quiet" subprocess.call(systemctl_cmd, shell=True) - def subscribe(self, table, callback, pri): - try: - if table not in self.callbacks: - self.callbacks[table] = [] - subscriber = SubscriberStateTable(self.dbconn, table, TableConsumable.DEFAULT_POP_BATCH_SIZE, pri) - self.selector.addSelectable(subscriber) # Add to the Selector - self.subscriber_map[subscriber.getFd()] = (subscriber, table) # Maintain a mapping b/w subscriber & fd + def register_callbacks(self): - self.callbacks[table].append(callback) - except Exception as err: - syslog.syslog(syslog.LOG_ERR, "Subscribe to table {} failed with error {}".format(table, err)) + def make_callback(func): + def callback(table, key, data): + if data is None: + op = "DEL" + else: + op = "SET" + return func(key, op, data) + return callback - def register_callbacks(self): - self.subscribe('KDUMP', lambda table, key, op, data: self.kdump_handler(key, op, data), HOSTCFGD_MAX_PRI) + self.config_db.subscribe('KDUMP', make_callback(self.kdump_handler)) # Handle FEATURE updates before other tables - self.subscribe('FEATURE', lambda table, key, op, data: self.feature_handler.handle(key, op, data), HOSTCFGD_MAX_PRI-1) + self.config_db.subscribe('FEATURE', make_callback(self.feature_handler.handle)) # Handle AAA, TACACS and RADIUS related tables - self.subscribe('AAA', lambda table, key, op, data: self.aaa_handler(key, op, data), HOSTCFGD_MAX_PRI-2) - self.subscribe('TACPLUS', lambda table, key, op, data: self.tacacs_global_handler(key, op, data), HOSTCFGD_MAX_PRI-2) - self.subscribe('TACPLUS_SERVER', lambda table, key, op, data: self.tacacs_server_handler(key, op, data), HOSTCFGD_MAX_PRI-2) - self.subscribe('RADIUS', lambda table, key, op, data: self.radius_global_handler(key, op, data), HOSTCFGD_MAX_PRI-2) - self.subscribe('RADIUS_SERVER', lambda table, key, op, data: self.radius_server_handler(key, op, data), HOSTCFGD_MAX_PRI-2) + self.config_db.subscribe('AAA', make_callback(self.aaa_handler)) + self.config_db.subscribe('TACPLUS', make_callback(self.tacacs_global_handler)) + 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)) # Handle IPTables configuration - self.subscribe('LOOPBACK_INTERFACE', lambda table, key, op, data: self.lpbk_handler(key, op, data), HOSTCFGD_MAX_PRI-3) + self.config_db.subscribe('LOOPBACK_INTERFACE', make_callback(self.lpbk_handler)) # Handle NTP & NTP_SERVER updates - self.subscribe('NTP', lambda table, key, op, data: self.ntp_global_handler(key, op, data), HOSTCFGD_MAX_PRI-4) - self.subscribe('NTP_SERVER', lambda table, key, op, data: self.ntp_server_handler(key, op, data), HOSTCFGD_MAX_PRI-4) + self.config_db.subscribe('NTP', make_callback(self.ntp_global_handler)) + self.config_db.subscribe('NTP_SERVER', make_callback(self.ntp_server_handler)) # Handle updates to src intf changes in radius - self.subscribe('MGMT_INTERFACE', lambda table, key, op, data: self.mgmt_intf_handler(key, op, data), HOSTCFGD_MAX_PRI-5) - self.subscribe('VLAN_INTERFACE', lambda table, key, op, data: self.vlan_intf_handler(key, op, data), HOSTCFGD_MAX_PRI-5) - self.subscribe('VLAN_SUB_INTERFACE', lambda table, key, op, data: self.vlan_sub_intf_handler(key, op, data), HOSTCFGD_MAX_PRI-5) - self.subscribe('PORTCHANNEL_INTERFACE', lambda table, key, op, data: self.portchannel_intf_handler(key, op, data), HOSTCFGD_MAX_PRI-5) - self.subscribe('INTERFACE', lambda table, key, op, data: self.phy_intf_handler(key, op, data), HOSTCFGD_MAX_PRI-5) + self.config_db.subscribe('MGMT_INTERFACE', make_callback(self.mgmt_intf_handler)) + self.config_db.subscribe('VLAN_INTERFACE', make_callback(self.vlan_intf_handler)) + self.config_db.subscribe('VLAN_SUB_INTERFACE', make_callback(self.vlan_sub_intf_handler)) + self.config_db.subscribe('PORTCHANNEL_INTERFACE', make_callback(self.portchannel_intf_handler)) + self.config_db.subscribe('INTERFACE', make_callback(self.phy_intf_handler)) syslog.syslog(syslog.LOG_INFO, "Waiting for systemctl to finish initialization") @@ -1138,27 +1238,7 @@ class HostConfigDaemon: "systemctl has finished initialization -- proceeding ...") def start(self): - while True: - state, selectable_ = self.selector.select(DEFAULT_SELECT_TIMEOUT) - if state == self.selector.TIMEOUT: - continue - elif state == self.selector.ERROR: - syslog.syslog(syslog.LOG_ERR, - "error returned by select") - continue - - fd = selectable_.getFd() - # Get the Corresponding subscriber & table - subscriber, table = self.subscriber_map.get(fd, (None, "")) - if not subscriber: - syslog.syslog(syslog.LOG_ERR, - "No Subscriber object found for fd: {}, subscriber map: {}".format(fd, subscriber_map)) - continue - key, op, fvs = subscriber.pop() - # Get the registered callback - cbs = self.callbacks.get(table, None) - for callback in cbs: - callback(table, key, op, dict(fvs)) + self.config_db.listen(init_data_handler=self.load) def main(): @@ -1167,7 +1247,6 @@ def main(): signal.signal(signal.SIGHUP, signal_handler) daemon = HostConfigDaemon() daemon.register_callbacks() - daemon.load() daemon.start() if __name__ == "__main__": diff --git a/src/sonic-host-services/tests/common/mock_configdb.py b/src/sonic-host-services/tests/common/mock_configdb.py index 138869dc3bee..f0b12b11abf9 100644 --- a/src/sonic-host-services/tests/common/mock_configdb.py +++ b/src/sonic-host-services/tests/common/mock_configdb.py @@ -4,9 +4,10 @@ class MockConfigDb(object): """ STATE_DB = None CONFIG_DB = None + event_queue = [] def __init__(self, **kwargs): - pass + self.handlers = {} @staticmethod def set_config_db(test_config_db): @@ -44,73 +45,12 @@ def set_entry(self, key, field, data): def get_table(self, table_name): return MockConfigDb.CONFIG_DB[table_name] + def subscribe(self, table_name, callback): + self.handlers[table_name] = callback -class MockSelect(): - - event_queue = [] - - @staticmethod - def set_event_queue(Q): - MockSelect.event_queue = Q - - @staticmethod - def get_event_queue(): - return MockSelect.event_queue - - @staticmethod - def reset_event_queue(): - MockSelect.event_queue = [] - - def __init__(self): - self.sub_map = {} - self.TIMEOUT = "TIMEOUT" - self.ERROR = "ERROR" - - def addSelectable(self, subscriber): - self.sub_map[subscriber.table] = subscriber - - def select(self, TIMEOUT): - if not MockSelect.get_event_queue(): - raise TimeoutError - table, key = MockSelect.get_event_queue().pop(0) - self.sub_map[table].nextKey(key) - return "OBJECT", self.sub_map[table] - - -class MockSubscriberStateTable(): - - FD_INIT = 0 - - @staticmethod - def generate_fd(): - curr = MockSubscriberStateTable.FD_INIT - MockSubscriberStateTable.FD_INIT = curr + 1 - return curr - - @staticmethod - def reset_fd(): - MockSubscriberStateTable.FD_INIT = 0 - - def __init__(self, conn, table, pop, pri): - self.fd = MockSubscriberStateTable.generate_fd() - self.next_key = '' - self.table = table - - def getFd(self): - return self.fd - - def nextKey(self, key): - self.next_key = key - - def pop(self): - table = MockConfigDb.CONFIG_DB.get(self.table, {}) - if self.next_key not in table: - op = "DEL" - fvs = {} - else: - op = "SET" - fvs = table.get(self.next_key, {}) - return self.next_key, op, fvs + def listen(self, init_data_handler=None): + for e in MockConfigDb.event_queue: + self.handlers[e[0]](e[0], e[1], self.get_entry(e[0], e[1])) class MockDBConnector(): diff --git a/src/sonic-host-services/tests/hostcfgd/hostcfgd_radius_test.py b/src/sonic-host-services/tests/hostcfgd/hostcfgd_radius_test.py index 4e3d18648100..c08cd1829add 100644 --- a/src/sonic-host-services/tests/hostcfgd/hostcfgd_radius_test.py +++ b/src/sonic-host-services/tests/hostcfgd/hostcfgd_radius_test.py @@ -10,8 +10,7 @@ from parameterized import parameterized from unittest import TestCase, mock from tests.hostcfgd.test_radius_vectors import HOSTCFGD_TEST_RADIUS_VECTOR -from tests.common.mock_configdb import MockConfigDb, MockSubscriberStateTable -from tests.common.mock_configdb import MockSelect, MockDBConnector +from tests.common.mock_configdb import MockConfigDb, MockDBConnector test_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) @@ -33,10 +32,8 @@ # Mock swsscommon classes hostcfgd.ConfigDBConnector = MockConfigDb -hostcfgd.SubscriberStateTable = MockSubscriberStateTable -hostcfgd.Select = MockSelect hostcfgd.DBConnector = MockDBConnector - +hostcfgd.Table = mock.Mock() class TestHostcfgdRADIUS(TestCase): """ diff --git a/src/sonic-host-services/tests/hostcfgd/hostcfgd_tacacs_test.py b/src/sonic-host-services/tests/hostcfgd/hostcfgd_tacacs_test.py index 3cc3504d606b..a6478c08dc0d 100644 --- a/src/sonic-host-services/tests/hostcfgd/hostcfgd_tacacs_test.py +++ b/src/sonic-host-services/tests/hostcfgd/hostcfgd_tacacs_test.py @@ -10,8 +10,7 @@ from parameterized import parameterized from unittest import TestCase, mock from tests.hostcfgd.test_tacacs_vectors import HOSTCFGD_TEST_TACACS_VECTOR -from tests.common.mock_configdb import MockConfigDb, MockSubscriberStateTable -from tests.common.mock_configdb import MockSelect, MockDBConnector +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) @@ -32,9 +31,8 @@ # Mock swsscommon classes hostcfgd.ConfigDBConnector = MockConfigDb -hostcfgd.SubscriberStateTable = MockSubscriberStateTable -hostcfgd.Select = MockSelect hostcfgd.DBConnector = MockDBConnector +hostcfgd.Table = mock.Mock() class TestHostcfgdTACACS(TestCase): """ @@ -44,7 +42,7 @@ def run_diff(self, file1, file2): return subprocess.check_output('diff -uR {} {} || true'.format(file1, file2), shell=True) """ - Check different config + Check different config """ def check_config(self, test_name, test_data, config_name): t_path = templates_path diff --git a/src/sonic-host-services/tests/hostcfgd/hostcfgd_test.py b/src/sonic-host-services/tests/hostcfgd/hostcfgd_test.py index bbce866e2331..28d4f6f8a724 100644 --- a/src/sonic-host-services/tests/hostcfgd/hostcfgd_test.py +++ b/src/sonic-host-services/tests/hostcfgd/hostcfgd_test.py @@ -8,8 +8,7 @@ from unittest import TestCase, mock from .test_vectors import HOSTCFGD_TEST_VECTOR, HOSTCFG_DAEMON_CFG_DB -from tests.common.mock_configdb import MockConfigDb, MockSubscriberStateTable -from tests.common.mock_configdb import MockSelect, MockDBConnector +from tests.common.mock_configdb import MockConfigDb, MockDBConnector from pyfakefs.fake_filesystem_unittest import patchfs from deepdiff import DeepDiff @@ -24,23 +23,24 @@ hostcfgd_path = os.path.join(scripts_path, 'hostcfgd') hostcfgd = load_module_from_source('hostcfgd', hostcfgd_path) hostcfgd.ConfigDBConnector = MockConfigDb -hostcfgd.SubscriberStateTable = MockSubscriberStateTable -hostcfgd.Select = MockSelect hostcfgd.DBConnector = MockDBConnector +hostcfgd.Table = mock.Mock() class TestHostcfgd(TestCase): """ Test hostcfd daemon - feature """ - def __verify_table(self, table, expected_table): + def __verify_table(self, table, feature_state_table, expected_table): """ verify config db tables - Compares Config DB table (FEATURE) with expected output table + Compares Config DB table (FEATURE) with expected output table. + Verifies that State DB table (FEATURE) is updated. Args: table(dict): Current Config Db table + feature_state_table(Mock): Mocked State DB FEATURE table expected_table(dict): Expected Config Db table Returns: @@ -48,6 +48,19 @@ def __verify_table(self, table, expected_table): """ 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 def __verify_fs(self, table): @@ -93,6 +106,7 @@ def test_hostcfgd_feature_handler(self, test_name, test_data, fs): fs.add_real_paths(swsscommon_package.__path__) # add real path of swsscommon for database_config.json fs.create_dir(hostcfgd.FeatureHandler.SYSTEMD_SYSTEM_DIR) MockConfigDb.set_config_db(test_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'] @@ -102,17 +116,18 @@ def test_hostcfgd_feature_handler(self, test_name, test_data, fs): # Initialize Feature Handler device_config = {} device_config['DEVICE_METADATA'] = MockConfigDb.CONFIG_DB['DEVICE_METADATA'] - feature_handler = hostcfgd.FeatureHandler(MockConfigDb(), device_config) + feature_handler = hostcfgd.FeatureHandler(MockConfigDb(), feature_state_table_mock, device_config) # sync the state field and Handle Feature Updates - feature_handler.sync_state_field() 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) @@ -209,7 +224,7 @@ def tearDown(self): @patchfs def test_feature_events(self, fs): fs.create_dir(hostcfgd.FeatureHandler.SYSTEMD_SYSTEM_DIR) - MockSelect.event_queue = [('FEATURE', 'dhcp_relay'), + MockConfigDb.event_queue = [('FEATURE', 'dhcp_relay'), ('FEATURE', 'mux'), ('FEATURE', 'telemetry')] daemon = hostcfgd.HostConfigDaemon() @@ -240,7 +255,7 @@ def test_feature_events(self, fs): # Change the state to disabled MockConfigDb.CONFIG_DB['FEATURE']['telemetry']['state'] = 'disabled' - MockSelect.event_queue = [('FEATURE', 'telemetry')] + MockConfigDb.event_queue = [('FEATURE', 'telemetry')] try: daemon.start() except TimeoutError: @@ -255,7 +270,7 @@ def test_feature_events(self, fs): def test_loopback_events(self): MockConfigDb.set_config_db(HOSTCFG_DAEMON_CFG_DB) - MockSelect.event_queue = [('NTP', 'global'), + MockConfigDb.event_queue = [('NTP', 'global'), ('NTP_SERVER', '0.debian.pool.ntp.org'), ('LOOPBACK_INTERFACE', 'Loopback0|10.184.8.233/32')] daemon = hostcfgd.HostConfigDaemon() @@ -278,8 +293,7 @@ def test_kdump_event(self): MockConfigDb.set_config_db(HOSTCFG_DAEMON_CFG_DB) daemon = hostcfgd.HostConfigDaemon() daemon.register_callbacks() - assert MockConfigDb.CONFIG_DB['KDUMP']['config'] - MockSelect.event_queue = [('KDUMP', 'config')] + MockConfigDb.event_queue = [('KDUMP', 'config')] with mock.patch('hostcfgd.subprocess') as mocked_subprocess: popen_mock = mock.Mock() attrs = {'communicate.return_value': ('output', 'error')} diff --git a/src/sonic-linux-kernel b/src/sonic-linux-kernel index 6aa8d00afd12..10ef3904d940 160000 --- a/src/sonic-linux-kernel +++ b/src/sonic-linux-kernel @@ -1 +1 @@ -Subproject commit 6aa8d00afd1277629e9fa4ad84dd380e57f79b58 +Subproject commit 10ef3904d9401954b66915b7f5466e3f7591e7fb diff --git a/src/sonic-platform-common b/src/sonic-platform-common index ee122155e0f6..b70e75979f70 160000 --- a/src/sonic-platform-common +++ b/src/sonic-platform-common @@ -1 +1 @@ -Subproject commit ee122155e0f6e40b483d24737c5f1b729bdbf111 +Subproject commit b70e75979f704e980a3fb20732642ec99f32b0ee diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index c4127c28ada0..9ac12bfb4064 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit c4127c28ada0cbc7fd8cb730320cbc65ef78ead8 +Subproject commit 9ac12bfb406416b0fb3b03a084d8179bdc53f3a6 diff --git a/src/sonic-py-swsssdk b/src/sonic-py-swsssdk index 2cd6236849d1..653bdba51750 160000 --- a/src/sonic-py-swsssdk +++ b/src/sonic-py-swsssdk @@ -1 +1 @@ -Subproject commit 2cd6236849d194625c014d1c2c370f6d2513eb76 +Subproject commit 653bdba51750cac95feb3dd47904bf4de2353fec diff --git a/src/sonic-restapi b/src/sonic-restapi index 94805a39ac07..bd97dfeb4b45 160000 --- a/src/sonic-restapi +++ b/src/sonic-restapi @@ -1 +1 @@ -Subproject commit 94805a39ac0712219f7dc08faa2cfdbf371dd177 +Subproject commit bd97dfeb4b4564defbc10e521ee05bbfe0638315 diff --git a/src/sonic-sairedis b/src/sonic-sairedis index d5866a3dccfb..c7cbfe80dfcb 160000 --- a/src/sonic-sairedis +++ b/src/sonic-sairedis @@ -1 +1 @@ -Subproject commit d5866a3dccfb3bc50853d740d54203b5cae61eed +Subproject commit c7cbfe80dfcb61deef483f6c99b1c21763134ab1 diff --git a/src/sonic-snmpagent b/src/sonic-snmpagent index a07da536186a..890f32f333df 160000 --- a/src/sonic-snmpagent +++ b/src/sonic-snmpagent @@ -1 +1 @@ -Subproject commit a07da536186a9d9698ec63ec3b1e75bef097ae00 +Subproject commit 890f32f333dfe31c36a8342ff70c0e84910bf9c8 diff --git a/src/sonic-swss b/src/sonic-swss index 6cb43ee25c8b..1fd1dbfe7eaa 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 6cb43ee25c8b810811bcf55f63e3e5ece7c82c7e +Subproject commit 1fd1dbfe7eaaa52f1d7edbdd2bb88483f031fd5e diff --git a/src/sonic-swss-common b/src/sonic-swss-common index 405f1df3d49f..c34a4e1cc733 160000 --- a/src/sonic-swss-common +++ b/src/sonic-swss-common @@ -1 +1 @@ -Subproject commit 405f1df3d49f17f39b149668ae9383b38730d7a8 +Subproject commit c34a4e1cc7332fd7368239206a097478fa1dcc90 diff --git a/src/sonic-telemetry b/src/sonic-telemetry index 0443e6605025..e56e9b44e4a7 160000 --- a/src/sonic-telemetry +++ b/src/sonic-telemetry @@ -1 +1 @@ -Subproject commit 0443e66050256a87f8e92db7cd3c36cc139ebe14 +Subproject commit e56e9b44e4a7e3b211f070c298041951c543885b diff --git a/src/sonic-utilities b/src/sonic-utilities index d9f3afe5b34e..f70dc27827a8 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit d9f3afe5b34ef0f03f4137f607bc73bc625631ed +Subproject commit f70dc27827a88d70e91e15ecdcde2ebbc446116d diff --git a/src/sonic-yang-mgmt/sonic_yang_ext.py b/src/sonic-yang-mgmt/sonic_yang_ext.py index d99b805328eb..d43e52970302 100644 --- a/src/sonic-yang-mgmt/sonic_yang_ext.py +++ b/src/sonic-yang-mgmt/sonic_yang_ext.py @@ -330,11 +330,11 @@ def _fillLeafDictUses(self, uses_s, table, leafDict): # Assume ':' means reference to another module if ':' in uses['@name']: prefix = uses['@name'].split(':')[0].strip() - uses_module = self._findYangModuleFromPrefix(prefix, table_module) + uses_module_name = self._findYangModuleFromPrefix(prefix, table_module) else: - uses_module = table_module + uses_module_name = table_module['@name'] grouping = uses['@name'].split(':')[-1].strip() - leafs = self.preProcessedYang['grouping'][uses_module][grouping] + leafs = self.preProcessedYang['grouping'][uses_module_name][grouping] self._fillLeafDict(leafs, leafDict) except Exception as e: self.sysLog(msg="_fillLeafDictUses failed:{}".format(str(e)), \ @@ -591,18 +591,23 @@ def _xlateListInContainer(self, model, yang, configC, table, exceptionList): """ def _xlateContainerInContainer(self, model, yang, configC, table): ccontainer = model - #print(ccontainer['@name']) - yang[ccontainer['@name']] = dict() - if not configC.get(ccontainer['@name']): + ccName = ccontainer['@name'] + yang[ccName] = dict() + if ccName not in configC: + # Inner container doesn't exist in config return - self.sysLog(msg="xlateProcessListOfContainer: {}".format(ccontainer['@name'])) - self._xlateContainer(ccontainer, yang[ccontainer['@name']], \ - configC[ccontainer['@name']], table) + if len(configC[ccName]) == 0: + # Empty container, clean config and return + del configC[ccName] + return + self.sysLog(msg="xlateProcessListOfContainer: {}".format(ccName)) + self._xlateContainer(ccontainer, yang[ccName], \ + configC[ccName], table) # clean empty container - if len(yang[ccontainer['@name']]) == 0: - del yang[ccontainer['@name']] + if len(yang[ccName]) == 0: + del yang[ccName] # remove copy after processing - del configC[ccontainer['@name']] + del configC[ccName] return diff --git a/src/sonic-yang-mgmt/tests/libyang-python-tests/test_sonic_yang.py b/src/sonic-yang-mgmt/tests/libyang-python-tests/test_sonic_yang.py index 3eb396594e80..a13d4c02e9a0 100644 --- a/src/sonic-yang-mgmt/tests/libyang-python-tests/test_sonic_yang.py +++ b/src/sonic-yang-mgmt/tests/libyang-python-tests/test_sonic_yang.py @@ -364,5 +364,20 @@ def test_table_with_no_yang(self, sonic_yang_data): return + def test_special_json_with_yang(self, sonic_yang_data): + # in this test, we validate unusual json config and check if + # loadData works successfully + test_file = sonic_yang_data['test_file'] + syc = sonic_yang_data['syc'] + + # read config + jIn = self.readIjsonInput(test_file, 'SAMPLE_CONFIG_DB_SPECIAL_CASE') + jIn = json.loads(jIn) + + # load config and create Data tree + syc.loadData(jIn) + + return + def teardown_class(self): pass diff --git a/src/sonic-yang-models/doc/Configuration.md b/src/sonic-yang-models/doc/Configuration.md new file mode 100644 index 000000000000..b5890681ce41 --- /dev/null +++ b/src/sonic-yang-models/doc/Configuration.md @@ -0,0 +1,1540 @@ +# SONiC Configuration Database Manual + +Table of Contents +================= + + * [Introduction](#introduction) + * [Configuration](#configuration) + * [Config Load and Save](#config-load-and-save) + * [Incremental Configuration](#incremental-configuration) + * [Redis and Json Schema](#redis-and-json-schema) + * [ACL and Mirroring](#acl-and-mirroring) + * [BGP Sessions](#bgp-sessions) + * [BUFFER_PG](#buffer_pg) + * [Buffer pool](#buffer-pool) + * [Buffer profile](#buffer-profile) + * [Buffer queue](#buffer-queue) + * [Buffer port ingress profile list](#buffer-port-ingress-profile-list) + * [Buffer port egress profile list](#buffer-port-egress-profile-list) + * [Cable length](#cable-length) + * [COPP_TABLE](#copp_table) + * [CRM](#crm) + * [Data Plane L3 Interfaces](#data-plane-l3-interfaces) + * [DEFAULT_LOSSLESS_BUFFER_PARAMETER](#DEFAULT_LOSSLESS_BUFFER_PARAMETER) + * [Device Metadata](#device-metadata) + * [Device neighbor metada](#device-neighbor-metada) + * [DSCP_TO_TC_MAP](#dscp_to_tc_map) + * [FLEX_COUNTER_TABLE](#flex_counter_table) + * [L2 Neighbors](#l2-neighbors) + * [Loopback Interface](#loopback-interface) + * [LOSSLESS_TRAFFIC_PATTERN](#LOSSLESS_TRAFFIC_PATTERN) + * [Management Interface](#management-interface) + * [Management port](#management-port) + * [Management VRF](#management-vrf) + * [MAP_PFC_PRIORITY_TO_QUEUE](#map_pfc_priority_to_queue) + * [NTP Global Configuration](#ntp-global-configuration) + * [NTP and SYSLOG servers](#ntp-and-syslog-servers) + * [Policer](#policer) + * [Port](#port) + * [Port Channel](#port-channel) + * [Portchannel member](#portchannel-member) + * [Scheduler](#scheduler) + * [Port QoS Map](#port-qos-map) + * [Queue](#queue) + * [Tacplus Server](#tacplus-server) + * [TC to Priority group map](#tc-to-priority-group-map) + * [TC to Queue map](#tc-to-queue-map) + * [Versions](#versions) + * [VLAN](#vlan) + * [VLAN_MEMBER](#vlan_member) + * [Virtual router](#virtual-router) + * [WRED_PROFILE](#wred_profile) + * [For Developers](#for-developers) + * [Generating Application Config by Jinja2 Template](#generating-application-config-by-jinja2-template) + * [Incremental Configuration by Subscribing to ConfigDB](#incremental-configuration-by-subscribing-to-configdb) + + + +# Introduction +This document lists the configuration commands schema applied in the SONiC eco system. All these commands find relevance in collecting system information, analysis and even for trouble shooting. All the commands are categorized under relevant topics with corresponding examples. + +# Configuration + +SONiC is managing configuration in a single source of truth - a redisDB +instance that we refer as ConfigDB. Applications subscribe to ConfigDB +and generate their running configuration correspondingly. + +(Before Sep 2017, we were using an XML file named minigraph.xml to +configure SONiC devices. For historical documentation, please refer to +[Configuration with +Minigraph](https://github.com/Azure/SONiC/wiki/Configuration-with-Minigraph-(~Sep-2017))) + +# **Config Load and Save** + +In current version of SONiC, ConfigDB is implemented as database 4 of +local redis. When system boots, configurations will be loaded from +/etc/sonic/config_db.json file into redis. Please note that ConfigDB +content won't be written back into /etc/sonic/config_db.json file +automatically. In order to do that, a config save command need to be +manually executed from CLI. Similarly, config load will trigger a force +load of json file into DB. Generally, content in +/etc/sonic/config_db.json can be considered as starting config, and +content in redisDB running config. + +We keep a way to load configuration from minigraph and write into +ConfigDB for backward compatibility. To do that, run `config +load_minigraph`. + +### Incremental Configuration + +The design of ConfigDB supports incremental configuration - application +could subscribe to changes in ConfigDB and response correspondingly. +However, this feature is not implemented by all applications yet. By Sep +2017 now, the only application that supports incremental configuration +is BGP (docker-fpm-quagga). For other applications, a manual restart is +required after configuration changes in ConfigDB. + +# **Redis and Json Schema** + +ConfigDB uses a table-object schema that is similar with +[AppDB](https://github.com/Azure/sonic-swss/blob/4c56d23b9ff4940bdf576cf7c9e5aa77adcbbdcc/doc/swss-schema.md), +and `config_db.json` is a straight-forward serialization of DB. As an +example, the following fragments could be BGP-related configuration in +redis and json, correspondingly: + + +***Redis format*** +``` +127.0.0.1:6379[4]> keys BGP_NEIGHBOR:* + +1) "BGP_NEIGHBOR:10.0.0.31" +2) "BGP_NEIGHBOR:10.0.0.39" +3) "BGP_NEIGHBOR:10.0.0.11" +4) "BGP_NEIGHBOR:10.0.0.7" + +... + +127.0.0.1:6379[4]> hgetall BGP_NEIGHBOR:10.0.0.3 + +1) "admin_status" +2) "up" +3) "peer_addr" +4) "10.0.0.2" +5) "asn" +6) "65200" +7) "name" +8) "ARISTA07T2" +``` + +***Json format*** +``` +"BGP_NEIGHBOR": { + "10.0.0.57": { + "rrclient": "0", + "name": "ARISTA01T1", + "local_addr": "10.0.0.56", + "nhopself": "0", + "holdtime": "10", + "asn": "64600", + "keepalive": "3" + }, + "10.0.0.59": { + "rrclient": "0", + "name": "ARISTA02T1", + "local_addr": "10.0.0.58", + "nhopself": "0", + "holdtime": "10", + "asn": "64600", + "keepalive": "3" + }, +} +``` + +Full sample config_db.json files are availables at +[here](https://github.com/Azure/SONiC/blob/gh-pages/doc/config_db.json) +and +[here](https://github.com/Azure/SONiC/blob/gh-pages/doc/config_db_t0.json). + + +### ACL and Mirroring + +ACL and mirroring related configuration are defined in +**MIRROR_SESSION**, **ACL_TABLE** and **ACL_RULE** tables. Those +tables are in progress of migrating from APPDB. Please refer to their +schema in APPDB +[here](https://github.com/Azure/sonic-swss/blob/4c56d23b9ff4940bdf576cf7c9e5aa77adcbbdcc/doc/swss-schema.md) +and migration plan +[here](https://github.com/Azure/SONiC/wiki/ACL-Configuration-Requirement-Description). + +``` +{ +"MIRROR_SESSION": { + "everflow0": { + "src_ip": "10.1.0.32", + "dst_ip": "2.2.2.2" + } + }, + +"ACL_TABLE": { + "DATAACL": { + "policy_desc" : "data_acl", + "type": "l3", + "ports": [ + "Ethernet0", + "Ethernet4", + "Ethernet8", + "Ethernet12" + ] + } + } +} +``` + +***Below ACL table added as per the mail*** +``` +{ +"ACL_TABLE": { + "aaa": { + "type": "L3", + "ports": "Ethernet0" + } + }, +"ACL_RULE": { + "aaa|rule_0": { + "PRIORITY": "55", + "PACKET_ACTION": "DROP", + "L4_SRC_PORT": "0" + }, + "aaa|rule_1": { + "PRIORITY": "55", + "PACKET_ACTION": "DROP", + "L4_SRC_PORT": "1" + } + } +} +``` + +***Below ACL table added by comparig minigraph.xml & config_db.json*** + +``` +{ +"ACL_TABLE": { + "EVERFLOW": { + "type": "MIRROR", + "policy_desc": "EVERFLOW", + "ports": [ + "PortChannel0001", + "PortChannel0002", + "PortChannel0003", + "PortChannel0004" + ] + }, + "EVERFLOWV6": { + "type": "MIRRORV6", + "policy_desc": "EVERFLOWV6", + "ports": [ + "PortChannel0001", + "PortChannel0002", + "PortChannel0003", + "PortChannel0004" + ] + }, + "SNMP_ACL": { + "services": [ + "SNMP" + ], + "type": "CTRLPLANE", + "policy_desc": "SNMP_ACL" + }, + "SSH_ONLY": { + "services": [ + "SSH" + ], + "type": "CTRLPLANE", + "policy_desc": "SSH_ONLY" + } + }, + +"ACL_RULE": { + "SNMP_ACL|DEFAULT_RULE": { + "PRIORITY": "1", + "PACKET_ACTION": "DROP", + "ETHER_TYPE": "2048" + }, + "SNMP_ACL|RULE_1": { + "PRIORITY": "9999", + "PACKET_ACTION": "ACCEPT", + "SRC_IP": "1.1.1.1/32", + "IP_PROTOCOL": "17" + }, + "SNMP_ACL|RULE_2": { + "PRIORITY": "9998", + "PACKET_ACTION": "ACCEPT", + "SRC_IP": "2.2.2.2/32", + "IP_PROTOCOL": "17" + }, + "SSH_ONLY|DEFAULT_RULE": { + "PRIORITY": "1", + "PACKET_ACTION": "DROP", + "ETHER_TYPE": "2048" + }, + "SSH_ONLY|RULE_1": { + "PRIORITY": "9999", + "PACKET_ACTION": "ACCEPT", + "SRC_IP": "4.4.4.4/8", + "IP_PROTOCOL": "6" + } + } +} + +``` + +***ACL table type configuration example*** +``` +{ + "ACL_TABLE_TYPE": { + "CUSTOM_L3": { + "MATCHES": [ + "IN_PORTS", + "OUT_PORTS", + "SRC_IP" + ], + "ACTIONS": [ + "PACKET_ACTION", + "MIRROR_INGRESS_ACTION" + ], + "BIND_POINTS": [ + "PORT", + "LAG" + ] + } + }, + "ACL_TABLE": { + "DATAACL": { + "STAGE": "INGRESS", + "TYPE": "CUSTOM_L3", + "PORTS": [ + "Ethernet0", + "PortChannel1" + ] + } + }, + "ACL_RULE": { + "DATAACL|RULE0": { + "PRIORITY": "999", + "PACKET_ACTION": "DROP", + "SRC_IP": "1.1.1.1/32", + } + } +} +``` + +### BGP Sessions + +BGP session configuration is defined in **BGP_NEIGHBOR** table. BGP +neighbor address is used as key of bgp neighbor objects. Object +attributes include remote AS number, neighbor router name, and local +peering address. Dynamic neighbor is also supported by defining peer +group name and IP ranges in **BGP_PEER_RANGE** table. + +``` +{ +"BGP_NEIGHBOR": { + "10.0.0.61": { + "local_addr": "10.0.0.60", + "asn": 64015, + "name": "ARISTA15T0" + }, + "10.0.0.49": { + "local_addr": "10.0.0.48", + "asn": 64009, + "name": "ARISTA09T0" + }, + + "10.0.0.63": { + "rrclient": "0", + "name": "ARISTA04T1", + "local_addr": "10.0.0.62", + "nhopself": "0", + "holdtime": "10", + "asn": "64600", + "keepalive": "3" + } + +"BGP_PEER_RANGE": { + "BGPSLBPassive": { + "name": "BGPSLBPassive", + "ip_range": [ + "10.250.0.0/27" + ] + }, + "BGPVac": { + "name": "BGPVac", + "ip_range": [ + "10.2.0.0/16" + ] + } + } +} +``` + +### BUFFER_PG + +When the system is running in traditional buffer model, profiles needs to explicitly configured: + +``` +{ +"BUFFER_PG": { + "Ethernet0|3-4": { + "profile": "pg_lossless_40000_5m_profile" + }, + "Ethernet1|3-4": { + "profile": "pg_lossless_40000_5m_profile" + }, + "Ethernet2|3-4": { + "profile": "pg_lossless_40000_5m_profile" + } + } +} + +``` + +When the system is running in dynamic buffer model, profiles can be: + + - either calculated dynamically according to ports' configuration and just configured as "NULL"; + - or configured explicitly. + +``` +{ +"BUFFER_PG": { + "Ethernet0|3-4": { + "profile": "NULL" + }, + "Ethernet1|3-4": { + "profile": "NULL" + }, + "Ethernet2|3-4": { + "profile": "static_profile" + } + } +} + +``` + +### Buffer pool + +When the system is running in traditional buffer model, the size of all of the buffer pools and xoff of ingress_lossless_pool need to be configured explicitly. + +``` +{ +"BUFFER_POOL": { + "egress_lossless_pool": { + "type": "egress", + "mode": "static", + "size": "15982720" + }, + "egress_lossy_pool": { + "type": "egress", + "mode": "dynamic", + "size": "9243812" + }, + "ingress_lossless_pool": { + "xoff": "4194112", + "type": "ingress", + "mode": "dynamic", + "size": "10875072" + } + } +} + +``` + +When the system is running in dynamic buffer model, the size of some of the buffer pools can be omitted and will be dynamically calculated. + +``` +{ +"BUFFER_POOL": { + "egress_lossless_pool": { + "type": "egress", + "mode": "static", + "size": "15982720" + }, + "egress_lossy_pool": { + "type": "egress", + "mode": "dynamic", + }, + "ingress_lossless_pool": { + "type": "ingress", + "mode": "dynamic", + } + } +} + +``` + + +### Buffer profile + +``` +{ +"BUFFER_PROFILE": { + "egress_lossless_profile": { + "static_th": "3995680", + "pool": "egress_lossless_pool", + "size": "1518" + }, + "egress_lossy_profile": { + "dynamic_th": "3", + "pool": "egress_lossy_pool", + "size": "1518" + }, + "ingress_lossy_profile": { + "dynamic_th": "3", + "pool": "ingress_lossless_pool", + "size": "0" + }, + "pg_lossless_40000_5m_profile": { + "xon_offset": "2288", + "dynamic_th": "-3", + "xon": "2288", + "xoff": "66560", + "pool": "ingress_lossless_pool", + "size": "1248" + }, + "pg_lossless_40000_40m_profile": { + "xon_offset": "2288", + "dynamic_th": "-3", + "xon": "2288", + "xoff": "71552", + "pool": "ingress_lossless_pool", + "size": "1248" + } + } +} + +``` + +When the system is running in dynamic buffer model and the headroom_type is dynamic, only dynamic_th needs to be configured and rest of fields can be omitted. +This kind of profiles will be handled by buffer manager and won't be applied to SAI. + +``` +{ + { + "non_default_dynamic_th_profile": { + "dynamic_th": 1, + "headroom_type": "dynamic" + } + } +} +``` + +### Buffer queue + +``` +{ +"BUFFER_QUEUE": { + "Ethernet50,Ethernet52,Ethernet54,Ethernet56|0-2": { + "profile": "egress_lossy_profile" + }, + "Ethernet50,Ethernet52,Ethernet54,Ethernet56|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet50,Ethernet52,Ethernet54,Ethernet56|5-6": { + "profile": "egress_lossy_profile" + } + } +} + +``` + +### Buffer port ingress profile list + +``` +{ +"BUFFER_PORT_INGRESS_PROFILE_LIST": { + "Ethernet50": { + "profile_list": "ingress_lossy_profile,ingress_lossless_profile" + }, + "Ethernet52": { + "profile_list": "ingress_lossy_profile,ingress_lossless_profile" + }, + "Ethernet56": { + "profile_list": "ingress_lossy_profile,ingress_lossless_profile" + } + } +} + +``` + +### Buffer port egress profile list + +``` +{ +"BUFFER_PORT_EGRESS_PROFILE_LIST": { + "Ethernet50": { + "profile_list": "egress_lossy_profile,egress_lossless_profile" + }, + "Ethernet52": { + "profile_list": "egress_lossy_profile,egress_lossless_profile" + }, + "Ethernet56": { + "profile_list": "egress_lossy_profile,egress_lossless_profile" + } + } +} + +``` + +### Cable length + +``` +{ +"CABLE_LENGTH": { + "AZURE": { + "Ethernet8": "5m", + "Ethernet9": "5m", + "Ethernet2": "5m", + "Ethernet58": "5m", + "Ethernet59": "5m", + "Ethernet50": "40m", + "Ethernet51": "5m", + "Ethernet52": "40m", + "Ethernet53": "5m", + "Ethernet54": "40m", + "Ethernet55": "5m", + "Ethernet56": "40m" + } + } +} + +``` + +### COPP_TABLE + +``` +{ +"COPP_TABLE": { + "default": { + "cbs": "600", + "cir": "600", + "meter_type": "packets", + "mode": "sr_tcm", + "queue": "0", + "red_action": "drop" + }, + + "trap.group.arp": { + "cbs": "600", + "cir": "600", + "meter_type": "packets", + "mode": "sr_tcm", + "queue": "4", + "red_action": "drop", + "trap_action": "trap", + "trap_ids": "arp_req,arp_resp,neigh_discovery", + "trap_priority": "4" + }, + + "trap.group.lldp.dhcp.udld": { + "queue": "4", + "trap_action": "trap", + "trap_ids": "lldp,dhcp,udld", + "trap_priority": "4" + }, + + "trap.group.bgp.lacp": { + "queue": "4", + "trap_action": "trap", + "trap_ids": "bgp,bgpv6,lacp", + "trap_priority": "4" + }, + + "trap.group.ip2me": { + "cbs": "600", + "cir": "600", + "meter_type": "packets", + "mode": "sr_tcm", + "queue": "1", + "red_action": "drop", + "trap_action": "trap", + "trap_ids": "ip2me", + "trap_priority": "1" + } + } +} +``` + +### CRM + +``` +{ +"CRM": { + "Config": { + "acl_table_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "acl_entry_threshold_type": "percentage", + "ipv6_neighbor_low_threshold": "70", + "nexthop_group_member_low_threshold": "70", + "acl_group_high_threshold": "85", + "ipv4_route_high_threshold": "85", + "acl_counter_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv4_neighbor_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv6_route_threshold_type": "percentage", + "snat_entry_threshold_type": "percentage", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70" + } + } +} + +``` + +### 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. + +``` +{ +"INTERFACE": { + "Ethernet0|10.0.0.0/31": {}, + "Ethernet4|10.0.0.2/31": {}, + "Ethernet8|10.0.0.4/31": {} + ... + }, + +"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": {} + } +} + +``` + + +### DEFAULT_LOSSLESS_BUFFER_PARAMETER + +This table stores the default lossless buffer parameters for dynamic buffer calculation. + +``` +{ + "DEFAULT_LOSSLESS_BUFFER_PARAMETER": { + "AZURE": { + "default_dynamic_th": "0", + "over_subscribe_ratio": "2" + } + } +} +``` + +### Device Metadata + +The **DEVICE_METADATA** table contains only one object named +*localhost*. In this table the device metadata such as hostname, hwsku, +deployment envionment id and deployment type are specified. BGP local AS +number is also specified in this table as current only single BGP +instance is supported in SONiC. + +``` +{ +"DEVICE_METADATA": { + "localhost": { + "hwsku": "Force10-S6100", + "default_bgp_status": "up", + "docker_routing_config_mode": "unified", + "hostname": "sonic-s6100-01", + "platform": "x86_64-dell_s6100_c2538-r0", + "mac": "4c:76:25:f4:70:82", + "default_pfcwd_status": "disable", + "bgp_asn": "65100", + "deployment_id": "1", + "type": "ToRRouter", + "buffer_model": "traditional" + } + } +} + +``` + + +### Device neighbor metada + +``` +{ +"DEVICE_NEIGHBOR_METADATA": { + "ARISTA01T1": { + "lo_addr": "None", + "mgmt_addr": "10.11.150.45", + "hwsku": "Arista-VM", + "type": "LeafRouter" + }, + "ARISTA02T1": { + "lo_addr": "None", + "mgmt_addr": "10.11.150.46", + "hwsku": "Arista-VM", + "type": "LeafRouter" + } + } +} + +``` + + +### DSCP_TO_TC_MAP +``` +{ +"DSCP_TO_TC_MAP": { + "AZURE": { + "1": "1", + "0": "1", + "3": "3", + "2": "1", + "5": "2", + "4": "4", + "7": "1", + "6": "1", + "9": "1", + "8": "0" + } + } +} + +``` + + +### MPLS_TC_TO_TC_MAP +``` +{ +"MPLS_TC_TO_TC_MAP": { + "AZURE": { + "0": "0", + "1": "1", + "2": "1", + "3": "2", + "4": "2", + "5": "3", + "6": "3", + "7": "4" + } + } +} + +``` + +### FLEX_COUNTER_TABLE + +``` +{ +"FLEX_COUNTER_TABLE": { + "PFCWD": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_STATUS": "enable" + } + } +} + +``` + + +### L2 Neighbors + +The L2 neighbor and connection information can be configured in +**DEVICE_NEIGHBOR** table. Those information are used mainly for LLDP. +While mandatory fields include neighbor name acting as object key and +remote port / local port information in attributes, optional information +about neighbor device such as device type, hwsku, management address and +loopback address can also be defined. + +``` +{ +"DEVICE_NEIGHBOR": { + "ARISTA04T1": { + "mgmt_addr": "10.20.0.163", + "hwsku": "Arista", + "lo_addr": null, + "local_port": "Ethernet124", + "type": "LeafRouter", + "port": "Ethernet1" + }, + "ARISTA03T1": { + "mgmt_addr": "10.20.0.162", + "hwsku": "Arista", + "lo_addr": null, + "local_port": "Ethernet120", + "type": "LeafRouter", + "port": "Ethernet1" + }, + "ARISTA02T1": { + "mgmt_addr": "10.20.0.161", + "hwsku": "Arista", + "lo_addr": null, + "local_port": "Ethernet116", + "type": "LeafRouter", + "port": "Ethernet1" + }, + "ARISTA01T1": { + "mgmt_addr": "10.20.0.160", + "hwsku": "Arista", + "lo_addr": null, + "local_port": "Ethernet112", + "type": "LeafRouter", + "port": "Ethernet1" + } + } +} +``` + +### Loopback Interface + +Loopback interface configuration lies in **LOOPBACK_INTERFACE** table +and has similar schema with data plane interfaces. The loopback device +name and loopback IP prefix act as multi-level key for loopback +interface objects. + +``` +{ +"LOOPBACK_INTERFACE": { + "Loopback0|10.1.0.32/32": {}, + "Loopback0|FC00:1::32/128": {} + } +} + +``` + +### LOSSLESS_TRAFFIC_PATTERN + +The LOSSLESS_TRAFFIC_PATTERN table stores parameters related to +lossless traffic for dynamic buffer calculation + +``` +{ + "LOSSLESS_TRAFFIC_PATTERN": { + "AZURE": { + "mtu": "1024", + "small_packet_percentage": "100" + } + } +} +``` + +### Management Interface + +Management interfaces are defined in **MGMT_INTERFACE** table. Object +key is composed of management interface name and IP prefix. Attribute +***gwaddr*** specify the gateway address of the prefix. +***forced_mgmt_routes*** attribute can be used to specify addresses / +prefixes traffic to which are forced to go through management network +instead of data network. + +``` +{ +"MGMT_INTERFACE": { + "eth0|10.11.150.11/16": { + "gwaddr": "10.11.0.1" + }, + "eth0|FC00:2::32/64": { + "forced_mgmt_routes": [ + "10.0.0.100/31", + "10.250.0.8", + "10.255.0.0/28" + ], + "gwaddr": "fc00:2::1" + } + } +} + +``` + +### Management port + +``` +{ +"MGMT_PORT": { + "eth0": { + "alias": "eth0", + "admin_status": "up" + } + } +} + +``` + + +### Management VRF + +``` +{ +"MGMT_VRF_CONFIG": { + "vrf_global": { + "mgmtVrfEnabled": "true" + } + } +} +``` + +### MAP_PFC_PRIORITY_TO_QUEUE + +``` +{ +"MAP_PFC_PRIORITY_TO_QUEUE": { + "AZURE": { + "1": "1", + "0": "0", + "3": "3", + "2": "2", + "5": "5", + "4": "4", + "7": "7", + "6": "6" + } + } +} +``` +### NTP Global Configuration + +These configuration options are used to modify the way that +ntp binds to the ports on the switch and which port it uses to +make ntp update requests from. + +***NTP VRF*** + +If this option is set to `default` then ntp will run within the default vrf +**when the management vrf is enabled**. If the mgmt vrf is enabled and this value is +not set to default then ntp will run within the mgmt vrf. + +This option **has no effect** if the mgmt vrf is not enabled. + +``` +{ +"NTP": { + "global": { + "vrf": "default" + } + } +} +``` + + +***NTP Source Port*** + +This option sets the port which ntp will choose to send time update requests from by. + +NOTE: If a Loopback interface is defined on the switch ntp will choose this by default, so this setting +is **required** if the switch has a Loopback interface and the ntp peer does not have defined routes +for that address. + +``` +{ +"NTP": { + "global": { + "src_intf": "Ethernet1" + } + } +} +``` + +### NTP and SYSLOG servers + +These information are configured in individual tables. Domain name or IP +address of the server is used as object key. Currently there are no +attributes in those objects. + +***NTP server*** +``` +{ +"NTP_SERVER": { + "2.debian.pool.ntp.org": {}, + "1.debian.pool.ntp.org": {}, + "3.debian.pool.ntp.org": {}, + "0.debian.pool.ntp.org": {} + }, + +"NTP_SERVER": { + "23.92.29.245": {}, + "204.2.134.164": {} + } +} +``` + +***Syslogserver*** +``` +{ +"SYSLOG_SERVER": { + "10.0.0.5": {}, + "10.0.0.6": {}, + "10.11.150.5": {} + } +} +``` + +### Policer + +Below is an example of the policer table configuration. +``` +{ + "POLICER": { + "everflow_static_policer": { + "meter_type": "bytes", + "mode": "sr_tcm", + "cir": "12500000", + "cbs": "12500000", + "pir": "17500000", + "pbs": "17500000", + "color": "aware", + "red_packet_action": "drop", + "yellow_packet_action": "drop" + "green_packet_action": "forward" + } + } +} + +``` +Key to the table defines policer name Below are the fields +- meter_type - Mandatory field. Defines how the metering is done. values - bytes, packets +- mode - Mandatory field. Defines one of the three modes support. values - sr_tcm, tr_tcm, storm +- cir - Committed information rate bytes/sec or packets/sec based on meter_type +- cbs - Committed burst size in bytes or packets based on meter_type +- pir - Peak information rate in bytes/sec or packets/sec based on meter_type +- pbs - Peak burst size in bytes or packets based on meter_type +- color - Defines the color source for the policer. values - aware, blind +- red_packet_action - Defines the action to be taken for red color packets +- yellow_packet_action - Defines the action to be taken for yellow color packets +- green_packet_action - Defines the action to be taken for green color packets. + +The packet action could be: + +- 'drop' +- 'forward' +- 'copy' +- 'copy_cancel' +- 'trap' +- 'log' +- 'deny' +- 'transit' +### Port + +In this table the physical port configurations are defined. Each object +will have port name as its key, and port name alias and port speed as +optional attributes. + +``` +{ +"PORT": { + "Ethernet0": { + "index": "0", + "lanes": "101,102", + "description": "fortyGigE1/1/1", + "mtu": "9100", + "alias": "fortyGigE1/1/1", + "speed": "40000" + }, + "Ethernet1": { + "index": "1", + "lanes": "103,104", + "description": "fortyGigE1/1/2", + "mtu": "9100", + "alias": "fortyGigE1/1/2", + "admin_status": "up", + "speed": "40000" + }, + "Ethernet63": { + "index": "63", + "lanes": "87,88", + "description": "fortyGigE1/4/16", + "mtu": "9100", + "alias": "fortyGigE1/4/16", + "speed": "40000" + } + } +} + +``` + +### Port Channel + +Port channels are defined in **PORTCHANNEL** table with port channel +name as object key and member list as attribute. + +``` +{ +"PORTCHANNEL": { + "PortChannel0003": { + "admin_status": "up", + "min_links": "1", + "members": [ + "Ethernet54" + ], + "mtu": "9100" + }, + "PortChannel0004": { + "admin_status": "up", + "min_links": "1", + "members": [ + "Ethernet56" + ], + "mtu": "9100" + } + } +} +``` + + +### Portchannel member + +``` +{ +"PORTCHANNEL_MEMBER": { + "PortChannel0001|Ethernet50": {}, + "PortChannel0002|Ethernet52": {}, + "PortChannel0003|Ethernet54": {}, + "PortChannel0004|Ethernet56": {} + } +} + +``` +### Scheduler + +``` +{ +"SCHEDULER": { + "scheduler.0": { + "type": "STRICT" + }, + "scheduler.1": { + "type": "WRR" + "weight": "1", + "meter_type": "bytes", + "pir": "1250000000", + "pbs": "8192" + }, + "scheduler.port": { + "meter_type": "bytes", + "pir": "1000000000", + "pbs": "8192" + } + } +} +``` + +### Port QoS Map + +``` +{ +"PORT_QOS_MAP": { + "Ethernet50,Ethernet52,Ethernet54,Ethernet56": { + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE", + "pfc_enable": "3,4", + "pfc_to_queue_map": "AZURE", + "dscp_to_tc_map": "AZURE", + "dscp_to_fc_map": "AZURE", + "exp_to_fc_map": "AZURE", + "scheduler": "scheduler.port" + } + } +} +``` + +### Queue +``` +{ +"QUEUE": { + "Ethernet56|4": { + "wred_profile": "AZURE_LOSSLESS", + "scheduler": "scheduler.1" + }, + "Ethernet56|5": { + "scheduler": "scheduler.0" + }, + "Ethernet56|6": { + "scheduler": "scheduler.0" + } + } +} +``` + + +### Tacplus Server + +``` +{ +"TACPLUS_SERVER": { + "10.0.0.8": { + "priority": "1", + "tcp_port": "49" + }, + "10.0.0.9": { + "priority": "1", + "tcp_port": "49" + } + } +} +``` + + +### TC to Priority group map + +``` +{ +"TC_TO_PRIORITY_GROUP_MAP": { + "AZURE": { + "1": "1", + "0": "0", + "3": "3", + "2": "2", + "5": "5", + "4": "4", + "7": "7", + "6": "6" + } + } +} +``` + +### TC to Queue map + +``` +{ +"TC_TO_QUEUE_MAP": { + "AZURE": { + "1": "1", + "0": "0", + "3": "3", + "2": "2", + "5": "5", + "4": "4", + "7": "7", + "6": "6" + } + } +} +``` + +### Versions + +This table is where the curret version of the software is recorded. +``` +{ + "VERSIONS": { + "DATABASE": { + "VERSION": "version_1_0_1" + } + } +} +``` + +### VLAN + +This table is where VLANs are defined. VLAN name is used as object key, +and member list as well as an integer id are defined as attributes. If a +DHCP relay is required for this VLAN, a dhcp_servers attribute must be +specified for that VLAN, the value of which is a list that must contain +the domain name or IP address of one or more DHCP servers. + +``` +{ +"VLAN": { + "Vlan1000": { + "dhcp_servers": [ + "192.0.0.1", + "192.0.0.2", + "192.0.0.3", + "192.0.0.4" + ], + "members": [ + "Ethernet0", + "Ethernet4", + "Ethernet8", + "Ethernet12" + ], + "vlanid": "1000" + } + } +} +``` + +### VLAN_MEMBER + +VLAN member table has Vlan name together with physical port or port +channel name as object key, and tagging mode as attributes. + +``` +{ +"VLAN_MEMBER": { + "Vlan1000|PortChannel47": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2000|PortChannel47": { + "tagging_mode": "tagged" + } + } +} +``` + +### Virtual router + +The virtual router table allows to insert or update a new virtual router +instance. The key of the instance is its name. The attributes in the +table allow to change properties of a virtual router. Attributes: + +- 'v4' contains boolean value 'true' or 'false'. Enable or + disable IPv4 in the virtual router +- 'v6' contains boolean value 'true' or 'false'. Enable or + disable IPv6 in the virtual router +- 'src_mac' contains MAC address. What source MAC address will be + used for packets egressing from the virtual router +- 'ttl_action' contains packet action. Defines the action for + packets with TTL == 0 or TTL == 1 +- 'ip_opt_action' contains packet action. Defines the action for + packets with IP options +- 'l3_mc_action' contains packet action. Defines the action for + unknown L3 multicast packets + +The packet action could be: + +- 'drop' +- 'forward' +- 'copy' +- 'copy_cancel' +- 'trap' +- 'log' +- 'deny' +- 'transit' + + +***TBD*** +``` +'VRF:rid1': { + 'v4': 'true', + 'v6': 'false', + 'src_mac': '02:04:05:06:07:08', + 'ttl_action': 'copy', + 'ip_opt_action': 'deny', + 'l3_mc_action': 'drop' +} +``` + + +### WRED_PROFILE + +``` +{ +"WRED_PROFILE": { + "AZURE_LOSSLESS": { + "red_max_threshold": "2097152", + "wred_green_enable": "true", + "ecn": "ecn_all", + "green_min_threshold": "1048576", + "red_min_threshold": "1048576", + "wred_yellow_enable": "true", + "yellow_min_threshold": "1048576", + "green_max_threshold": "2097152", + "green_drop_probability": "5", + "yellow_max_threshold": "2097152", + "wred_red_enable": "true", + "yellow_drop_probability": "5", + "red_drop_probability": "5" + } + } +} +``` + +### BREAKOUT_CFG + +This table is introduced as part of Dynamic Port Breakout(DPB) feature. +It shows the current breakout mode of all ports(root ports). +The list of root ports, all possible breakout modes, and default breakout modes + are obtained/derived from platform.json and hwsku.json files. + +``` +"BREAKOUT_CFG": { + "Ethernet0": { + "brkout_mode": "4x25G[10G]" + }, + "Ethernet4": { + "brkout_mode": "4x25G[10G]" + }, + "Ethernet8": { + "brkout_mode": "4x25G[10G]" + }, + + ...... + + "Ethernet116": { + "brkout_mode": "2x50G" + }, + "Ethernet120": { + "brkout_mode": "2x50G" + }, + "Ethernet124": { + "brkout_mode": "2x50G" + } +} +``` + +### AAA + +The AAA table defined the method SONiC used for Authentication, Authorization and Accounting. +The method could be: +- default +- local +- tacacs+ +- radius + +``` +"AAA": { + "authentication": { + "login": "local" + }, + "authorization": { + "login": "local" + }, + "accounting": { + "login": "local" + } +} +``` + +For Developers +============== + +Generating Application Config by Jinja2 Template +------------------------------------------------ + +To be added. + +Incremental Configuration by Subscribing to ConfigDB +---------------------------------------------------- + +Detail instruction to be added. A sample could be found in this +[PR](https://github.com/Azure/sonic-buildimage/pull/861) that +implemented dynamic configuration for BGP. diff --git a/src/sonic-yang-models/setup.py b/src/sonic-yang-models/setup.py index 70c14476e277..4ca8d065c6ec 100644 --- a/src/sonic-yang-models/setup.py +++ b/src/sonic-yang-models/setup.py @@ -81,8 +81,11 @@ def run(self): './yang-models/sonic-auto_techsupport.yang', './yang-models/sonic-bgp-common.yang', './yang-models/sonic-bgp-global.yang', + './yang-models/sonic-bgp-monitor.yang', './yang-models/sonic-bgp-neighbor.yang', './yang-models/sonic-bgp-peergroup.yang', + './yang-models/sonic-bgp-peerrange.yang', + './yang-models/sonic-bgp-allowed-prefix.yang', './yang-models/sonic-breakout_cfg.yang', './yang-models/sonic-buffer-pg.yang', './yang-models/sonic-buffer-pool.yang', @@ -107,8 +110,10 @@ def run(self): './yang-models/sonic-mirror-session.yang', './yang-models/sonic-ntp.yang', './yang-models/sonic-nat.yang', + './yang-models/sonic-nvgre-tunnel.yang', './yang-models/sonic-pbh.yang', './yang-models/sonic-port.yang', + './yang-models/sonic-policer.yang', './yang-models/sonic-portchannel.yang', './yang-models/sonic-pfcwd.yang', './yang-models/sonic-route-common.yang', @@ -122,6 +127,7 @@ def run(self): './yang-models/sonic-versions.yang', './yang-models/sonic-vlan.yang', './yang-models/sonic-vrf.yang', + './yang-models/sonic-mclag.yang', './yang-models/sonic-vlan-sub-interface.yang', './yang-models/sonic-warm-restart.yang', './yang-models/sonic-lldp.yang', @@ -137,12 +143,16 @@ def run(self): './yang-models/sonic-tc-queue-map.yang', './yang-models/sonic-pfc-priority-queue-map.yang', './yang-models/sonic-pfc-priority-priority-group-map.yang', - './yang-models/sonic-port-qos-map.yang']), + './yang-models/sonic-port-qos-map.yang', + './yang-models/sonic-macsec.yang']), ('cvlyang-models', ['./cvlyang-models/sonic-acl.yang', './cvlyang-models/sonic-bgp-common.yang', './cvlyang-models/sonic-bgp-global.yang', + './cvlyang-models/sonic-bgp-monitor.yang', './cvlyang-models/sonic-bgp-neighbor.yang', './cvlyang-models/sonic-bgp-peergroup.yang', + './cvlyang-models/sonic-bgp-peerrange.yang', + './cvlyang-models/sonic-bgp-allowed-prefix.yang', './cvlyang-models/sonic-breakout_cfg.yang', './cvlyang-models/sonic-copp.yang', './cvlyang-models/sonic-crm.yang', @@ -158,7 +168,9 @@ def run(self): './cvlyang-models/sonic-mgmt_vrf.yang', './cvlyang-models/sonic-ntp.yang', './cvlyang-models/sonic-nat.yang', + './cvlyang-models/sonic-nvgre-tunnel.yang', './cvlyang-models/sonic-pbh.yang', + './cvlyang-models/sonic-policer.yang', './cvlyang-models/sonic-port.yang', './cvlyang-models/sonic-portchannel.yang', './cvlyang-models/sonic-pfcwd.yang', @@ -183,7 +195,8 @@ def run(self): './cvlyang-models/sonic-tc-queue-map.yang', './cvlyang-models/sonic-pfc-priority-queue-map.yang', './cvlyang-models/sonic-pfc-priority-priority-group-map.yang', - './cvlyang-models/sonic-port-qos-map.yang']), + './cvlyang-models/sonic-port-qos-map.yang', + './cvlyang-models/sonic-macsec.yang']), ], zip_safe=False, ) 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 fd3476d6dd21..8c5a8c0af909 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -93,6 +93,16 @@ "tpid": "0x9200", "mtu": "9100", "lacp_key": "auto" + }, + "PortChannel2": { + "admin_status": "up", + "min_links": "1", + "members": [ + "Ethernet12" + ], + "tpid": "0x9200", + "mtu": "9100", + "lacp_key": "auto" } }, "PORTCHANNEL_INTERFACE": { @@ -103,7 +113,8 @@ }, "PORTCHANNEL_MEMBER": { "PortChannel0003|Ethernet1": {}, - "PortChannel0004|Ethernet2": {} + "PortChannel0004|Ethernet2": {}, + "PortChannel2|Ethernet12": {} }, "VLAN_INTERFACE": { "Vlan111": { @@ -139,7 +150,8 @@ "V4-ACL-TABLE|DEFAULT_DENY": { "PACKET_ACTION": "DROP", "IP_TYPE": "IPv4ANY", - "PRIORITY": "0" + "PRIORITY": "0", + "ETHER_TYPE": "2048" }, "V4-ACL-TABLE|Rule_20": { "PACKET_ACTION": "FORWARD", @@ -271,6 +283,11 @@ "SRC_IPV6": "::/0", "PRIORITY": "990000", "DST_IPV6": "::/0" + }, + "EVERFLOW_DSCP|RULE_1": { + "MIRROR_INGRESS_ACTION": "erspan", + "DSCP": "10", + "PRIORITY": "9999" } }, "DEVICE_METADATA": { @@ -282,7 +299,13 @@ "hwsku": "Stone", "buffer_model": "dynamic", "cloudtype": "Public", - "region": "usfoo" + "region": "usfoo", + "asic_name": "Asic0", + "switch_id": "2", + "switch_type": "voq", + "max_cores": "8", + "sub_role": "FrontEnd", + "dhcp_server": "disabled" } }, "VLAN": { @@ -309,7 +332,17 @@ "vlanid": "777", "mtu": "9216", "admin_status": "up" + }, + "Vlan12": { + "description": "mclag session ve", + "dhcp_servers": [ + "12.1.1.1" + ], + "vlanid": "12", + "mtu": "9216", + "admin_status": "up" } + }, "DEVICE_NEIGHBOR": { "Ethernet112": { @@ -390,7 +423,11 @@ "description": "", "speed": "11100", "tpid": "0x8100", - "admin_status": "up" + "admin_status": "up", + "index": "0", + "asic_port_name": "Eth0-ASIC1", + "role": "Ext", + "macsec": "test" }, "Ethernet1": { "alias": "Eth1/2", @@ -725,7 +762,17 @@ "Ethernet25", "Ethernet24" ] + }, + "EVERFLOW_DSCP": { + "type": "MIRROR_DSCP", + "policy_desc": "EVERFLOW_DSCP", + "ports": [ + "Ethernet14", + "Ethernet24" + ], + "stage": "ingress" } + }, "PBH_HASH_FIELD": { "inner_ip_proto": { @@ -855,11 +902,21 @@ } }, "VLAN_SUB_INTERFACE": { - "Ethernet120.10": { + "Ethernet12.10": { + "admin_status": "up" + }, + "Ethernet12.10|10.0.1.56/31": {}, + "Ethernet12.10|fc00::1:71/126": {}, + "Po0003.10": { + "admin_status": "up" + }, + "Po0003.10|10.0.1.58/31": {}, + "Po0003.10|fc00::1:75/126": {}, + "Eth120.10": { "admin_status": "up" }, - "Ethernet120.10|10.0.1.56/31": {}, - "Ethernet120.10|fc00::1:71/126": {} + "Eth120.10|10.0.1.60/31": {}, + "Eth120.10|fc00::1:79/126": {} }, "VLAN_MEMBER": { "Vlan111|Ethernet0": { @@ -909,6 +966,9 @@ }, "Vlan111|PortChannel0003": { "tagging_mode": "untagged" + }, + "Vlan12|PortChannel2": { + "tagging_mode": "tagged" } }, "LOOPBACK_INTERFACE": { @@ -973,6 +1033,21 @@ }, "DEBUG_COUNTER": { "FLEX_COUNTER_STATUS": "enable" + }, + "FLOW_CNT_ROUTE": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": "10000" + } + }, + "FLOW_COUNTER_ROUTE_PATTERN": { + "1.1.1.0/24": { + "max_match_count": "30" + }, + "2000::/64": { + "max_match_count": "30" + }, + "Vnet1|2.2.2.0/24": { + "max_match_count": "30" } }, "CRM": { @@ -1123,6 +1198,36 @@ "default|ipv4_unicast|21.0.0.0/8": { } }, + "BGP_PEER_RANGE": { + "BGPSLBPassive": { + "ip_range": [ + "10.255.0.0/25" + ], + "name": "BGPSLBPassive", + "src_address": "10.1.0.32" + }, + "BGPVac": { + "ip_range": [ + "192.168.0.0/21", + "192.169.0.0/21", + "192.170.0.0/21" + ], + "name": "BGPVac", + "src_address": "10.1.0.32" + } + }, + "BGP_MONITORS": { + "5.6.7.8": { + "admin_status": "up", + "asn": "65000", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.11", + "name": "BGPMonitor", + "nhopself": "0", + "rrclient": "0" + } + }, "BGP_NEIGHBOR": { "10.0.0.1": { "asn": "65200", @@ -1158,6 +1263,14 @@ "peer_group": "PG1" } }, + "BGP_ALLOWED_PREFIXES" :{ + "DEPLOYMENT_ID|4|123:123": { + "default_action": "permit" + }, + "DEPLOYMENT_ID|5": { + "default_action": "permit" + } + }, "ROUTE_MAP_SET": { "map1": { } @@ -1197,6 +1310,7 @@ "trap_group": "queue1_group1" } }, + "AUTO_TECHSUPPORT": { "GLOBAL": { "state" : "enabled", @@ -1331,7 +1445,6 @@ "type": "DWRR", "weight": "20" }, - "TEST@1": { "cbs": "1024", "cir": "1280000", @@ -1339,6 +1452,24 @@ "pbs": "2048", "pir": "2560000", "type": "STRICT" + }, + "scheduler.0": { + "cbs": "256", + "cir": "1250000", + "meter_type": "bytes", + "pbs": "1024", + "pir": "25000000", + "type": "DWRR", + "weight": "20" + }, + + "scheduler.1": { + "cbs": "1024", + "cir": "1280000", + "meter_type": "bytes", + "pbs": "2048", + "pir": "2560000", + "type": "STRICT" } }, @@ -1368,6 +1499,12 @@ "Ethernet0|1": { "scheduler": "TEST@1", "wred_profile": "Wred1" + }, + "Ethernet0|2": { + "scheduler": "scheduler.0" + }, + "Ethernet0|3": { + "scheduler": "scheduler.1" } }, @@ -1467,7 +1604,8 @@ "tc_to_pg_map": "tc_to_pg_map1", "pfc_to_queue_map": "pfc_prio_to_q_map1", "pfc_to_pg_map" : "pfc_prio_to_pg_map1", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" }, "Ethernet4": { "dot1p_to_tc_map" : "Dot1p_to_tc_map2", @@ -1476,10 +1614,33 @@ "tc_to_pg_map": "tc_to_pg_map2", "pfc_to_queue_map": "pfc_prio_to_q_map2", "pfc_to_pg_map" : "pfc_prio_to_pg_map2", - "pfc_enable" : "3,4" + "pfc_enable" : "3,4", + "pfcwd_sw_enable" : "3,4" } }, + + "MCLAG_DOMAIN": { + "123": { + "source_ip": "12.1.1.1", + "peer_ip": "12.1.1.2", + "peer_link": "PortChannel2", + "keepalive_interval": "1", + "session_timeout": "30" + } + }, + "MCLAG_INTERFACE": { + "123|PortChannel0004": { + "if_type": "PortChannel" + } + }, + "MCLAG_UNIQUE_IP": { + "Vlan12": { + "unique_ip": "enable" + } + }, + + "MIRROR_SESSION": { "erspan": { "dscp": "10", @@ -1488,6 +1649,7 @@ "queue": "0", "src_ip": "10.1.1.1", "ttl": "10", + "policer": "everflow_static_policer", "type": "ERSPAN" }, "span": { @@ -1498,12 +1660,62 @@ "Ethernet3", "Ethernet4" ] + + } + }, + + + "POLICER": { + "everflow_static_policer": { + "meter_type": "bytes", + "mode": "sr_tcm", + "cir": "12500000", + "cbs": "12500000", + "color": "aware", + "red_packet_action": "drop" + } + }, + + + "NVGRE_TUNNEL": { + "tunnel_1": { + "src_ip": "10.0.0.1" + } + }, + "NVGRE_TUNNEL_MAP": { + "tunnel_1|Vlan111": { + "vlan_id": "111", + "vsid": "5000" + } + }, + + + "MACSEC_PROFILE": { + "test": { + "priority": "64", + "cipher_suite": "GCM-AES-128", + "primary_cak": "0123456789ABCDEF0123456789ABCDEF", + "primary_ckn": "6162636465666768696A6B6C6D6E6F70", + "fallback_cak": "00000000000000000000000000000000", + "fallback_ckn": "11111111111111111111111111111111", + "policy": "security", + "enable_replay_protect": "true", + "replay_window": "64", + "send_sci": "true", + "rekey_period": "3600" } } + }, "SAMPLE_CONFIG_DB_UNKNOWN": { "UNKNOWN_TABLE": { "Error": "This Table is for testing, This Table does not have YANG models." } + }, + "SAMPLE_CONFIG_DB_SPECIAL_CASE": { + "TACPLUS": { + "global": { + } + } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/aaa.json b/src/sonic-yang-models/tests/yang_model_tests/tests/aaa.json index dc3a60a24df5..972b404b88d9 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/aaa.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/aaa.json @@ -6,6 +6,10 @@ "desc": "Configure a wrong type in AAA table.", "eStrKey": "InvalidValue" }, + "AAA_TEST_WRONG_LOGIN": { + "desc": "Configure a wrong type in AAA table.", + "eStr": ["Invalid login choice"] + }, "AAA_TEST_WRONG_FAILTHROUGH": { "desc": "Configure a wrong failthrough in AAA table.", "eStrKey": "Pattern", 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 8c307c30f294..b7968e240767 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 @@ -4,6 +4,16 @@ "eStrKey" : "InvalidValue", "eStr": ["PACKET_ACTION"] }, + "ACL_RULE_FOR_CTRLPLANE_ACL_REQUIRES_PACKET_ACTION": { + "desc": "ACL_RULE for CTRLPLANE ACLs require PACKET_ACTION.", + "eStrKey" : "Must", + "eStr": ["CTRLPLANE", "PACKET_ACTION"] + }, + "ACL_RULE_MANDATORY_PRIORITY": { + "desc": "ACL_RULE MANDATORY PRIORITY field.", + "eStrKey" : "Mandatory", + "eStr": ["ACL_RULE", "PRIORITY"] + }, "ACL_TABLE_EMPTY_PORTS": { "desc": "Configure ACL_TABLE with empty ports." }, @@ -100,10 +110,24 @@ "eStrKey" : "Pattern" }, "ACL_RULE_L2_INVALID_ETHER": { - "desc": "Configure invalid MAC address format.", + "desc": "Configure invalid ethertype.", + "eStrKey" : "Pattern" + }, + "ACL_RULE_L2_VALID_ETHER_IN_DECIMAL": { + "desc": "Configure valid ethertype in decimal format." + }, + "ACL_RULE_L2_INVALID_ETHER_IN_DECIMAL": { + "desc": "Configure invalid ethertype in decimal format.", "eStrKey" : "Pattern" }, "ACL_PACKET_ACTION_VALIDATE_VALUE_ACCEPT": { "desc": "Configure CTRLPLANE with proper action ACCEPT." + }, + "ACL_RULE_WITH_INVALID_MIRROR_INGRESS_ACTION": { + "desc": "Configure ACL_RULE with invalid mirror action.", + "eStrKey" : "LeafRef" + }, + "ACL_RULE_WITH_VALID_MIRROR_INGRESS_ACTION": { + "desc": "Configure ACL_RULE with valid mirror action." } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/bgp.json b/src/sonic-yang-models/tests/yang_model_tests/tests/bgp.json index a8b003c3b9ae..966171888b37 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/bgp.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/bgp.json @@ -154,7 +154,49 @@ "BGP_MONITORS_NEG_INVALID_ASN": { "desc": "Invalid local AS number.", "eStrKey" : "InvalidValue" + }, + "BGP_PEERRANGE_ALL_VALID": { + "desc": "Configure BGP peer range table." + }, + "BGP_ALLOWED_PREFIXES_COM_LIST_ALL_VALID": { + "desc": "Configue BGP allowed prefix list." + }, + "BGP_ALLOWED_PREFIXES_COM_LIST_INVALID_DEPLOYMENT": { + "desc": "Invalid default action.", + "eStrKey" : "Pattern" + }, + "BGP_ALLOWED_PREFIXES_COM_LIST_INVALID_DEFAULT_ACTION": { + "desc": "Invalid default action.", + "eStrKey" : "InvalidValue", + "eStr" : ["default_action"] + }, + "BGP_ALLOWED_PREFIXES_COM_LIST_INVALID_PREFIXES_IPV4": { + "desc": "Invalid IPv4 prefix.", + "eStrKey" : "Pattern" + }, + "BGP_ALLOWED_PREFIXES_COM_LIST_INVALID_PREFIXES_IPV6": { + "desc": "Invalid IPv6 prefix.", + "eStrKey" : "Pattern" + }, + "BGP_ALLOWED_PREFIXES_LIST_ALL_VALID": { + "desc": "Configue BGP allowed prefix list." + }, + "BGP_ALLOWED_PREFIXES_LIST_INVALID_DEPLOYMENT": { + "desc": "Invalid default action.", + "eStrKey" : "Pattern" + }, + "BGP_ALLOWED_PREFIXES_LIST_INVALID_DEFAULT_ACTION": { + "desc": "Invalid default action.", + "eStrKey" : "InvalidValue", + "eStr" : ["default_action"] + }, + "BGP_ALLOWED_PREFIXES_LIST_INVALID_PREFIXES_IPV4": { + "desc": "Invalid IPv4 prefix.", + "eStrKey" : "Pattern" + }, + "BGP_ALLOWED_PREFIXES_LIST_INVALID_PREFIXES_IPV6": { + "desc": "Invalid IPv6 prefix.", + "eStrKey" : "Pattern" } - } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pg.json b/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pg.json index f92a75365c78..e6e4e59a8fdf 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pg.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pg.json @@ -10,6 +10,9 @@ "desc": "BUFFER_PG_WRONG_PG_VALUE pattern failure", "eStr": "Invalid Buffer PG number" }, + "BUFFER_PG_NULL_PROFILE_VALUE": { + "desc": "BUFFER_PG_NULL_PROFILE_VALUE no failure" + }, "BUFFER_PG_WRONG_PORT_VALUE": { "desc": "BUFFER_PG_WRONG_PORT_VALUE pattern failure", "eStr": "wrong" diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json b/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json index 41a30e18965f..1c39661d056e 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json @@ -1,49 +1,55 @@ { "DEV_META_DEV_NEIGH_VERSION_TABLE": { - "desc": "DEVICE_METADATA DEVICE_NEIGHBOR VERSION TABLE." + "desc": "DEVICE_METADATA DEVICE_NEIGHBOR VERSION TABLE." }, "DEVICE_METADATA_DEFAULT_BGP_STATUS": { - "desc": "DEVICE_METADATA DEFAULT VALUE FOR BGP_STATUS FIELD.", - "eStrKey" : "Verify", - "verify": { - "xpath": "/sonic-device_metadata:sonic-device_metadata/DEVICE_METADATA/localhost/hostname", - "key": "sonic-device_metadata:default_bgp_status", - "value": "up" - } + "desc": "DEVICE_METADATA DEFAULT VALUE FOR BGP_STATUS FIELD.", + "eStrKey" : "Verify", + "verify": { + "xpath": "/sonic-device_metadata:sonic-device_metadata/DEVICE_METADATA/localhost/hostname", + "key": "sonic-device_metadata:default_bgp_status", + "value": "up" + } }, "DEVICE_METADATA_DEFAULT_DOCKER_ROUTING_CONFIG_MODE": { - "desc": "DEVICE_METADATA DEFAULT VALUE FOR DOCKER_ROUTING_CONFIG_MODE FIELD.", - "eStrKey" : "Verify", - "verify": { - "xpath": "/sonic-device_metadata:sonic-device_metadata/DEVICE_METADATA/localhost/hostname", - "key": "sonic-device_metadata:docker_routing_config_mode", - "value": "unified" - } + "desc": "DEVICE_METADATA DEFAULT VALUE FOR DOCKER_ROUTING_CONFIG_MODE FIELD.", + "eStrKey" : "Verify", + "verify": { + "xpath": "/sonic-device_metadata:sonic-device_metadata/DEVICE_METADATA/localhost/hostname", + "key": "sonic-device_metadata:docker_routing_config_mode", + "value": "unified" + } }, "DEVICE_METADATA_DEFAULT_PFCWD_STATUS": { - "desc": "DEVICE_METADATA DEFAULT VALUE FOR PFCWD FIELD.", - "eStrKey" : "Verify", - "verify": { - "xpath": "/sonic-device_metadata:sonic-device_metadata/DEVICE_METADATA/localhost/hostname", - "key": "sonic-device_metadata:default_pfcwd_status", - "value": "disable" - } + "desc": "DEVICE_METADATA DEFAULT VALUE FOR PFCWD FIELD.", + "eStrKey" : "Verify", + "verify": { + "xpath": "/sonic-device_metadata:sonic-device_metadata/DEVICE_METADATA/localhost/hostname", + "key": "sonic-device_metadata:default_pfcwd_status", + "value": "disable" + } }, "DEVICE_METADATA_TYPE_INCORRECT_PATTERN": { - "desc": "DEVICE_METADATA_TYPE_INCORRECT_PATTERN pattern failure.", - "eStrKey" : "Pattern" + "desc": "DEVICE_METADATA_TYPE_INCORRECT_PATTERN pattern failure.", + "eStrKey" : "Pattern" }, "DEVICE_METADATA_TYPE_CORRECT_PATTERN": { "desc": "DEVICE_METADATA correct value for Type field" }, - "DEVICE_METADATA_DEFAULT_SYNCHRONOUS_MODE": { - "desc": "DEVICE_METADATA DEFAULT VALUE FOR SYNCHRONOUS MODE.", - "eStrKey" : "Verify", - "verify": { - "xpath": "/sonic-device_metadata:sonic-device_metadata/DEVICE_METADATA/localhost/hostname", - "key": "sonic-device_metadata:synchronous_mode", - "value": "enable" - } + "DEVICE_METADATA_TYPE_BMC_MGMT_TOR_PATTERN": { + "desc": "DEVICE_METADATA value as BmcMgmtToRRouter for Type field" + }, + "DEVICE_METADATA_TYPE_NOT_PROVISIONED_PATTERN": { + "desc": "DEVICE_METADATA value as not-provisioned for Type field" + }, + "DEVICE_METADATA_DEFAULT_SYNCHRONOUS_MODE": { + "desc": "DEVICE_METADATA DEFAULT VALUE FOR SYNCHRONOUS MODE.", + "eStrKey" : "Verify", + "verify": { + "xpath": "/sonic-device_metadata:sonic-device_metadata/DEVICE_METADATA/localhost/hostname", + "key": "sonic-device_metadata:synchronous_mode", + "value": "enable" + } }, "DEVICE_METADATA_CORRECT_BUFFER_MODEL_PATTERN": { "desc": "DEVICE_METADATA correct value for BUFFER_MODEL field" @@ -67,26 +73,46 @@ "DEVICE_METADATA_RESOURCE_TYPE_CONFIG": { "desc": "Verifying resource type configuration." }, - "DEVICE_METADATA_VALID_SUBTYPE": { - "desc": "Verifying valid subtype value" - }, - "DEVICE_METADATA_INVALID_SUBTYPE": { - "desc": "Verifying invalid subtype value", - "eStrKey": "Pattern" - }, - "DEVICE_METADATA_VALID_PEER_SWITCH": { - "desc": "Verifying valid peer switch hostname" - }, - "DEVICE_METADATA_INVALID_PEER_SWITCH": { - "desc": "Verifying test fails with hostname that is too long", - "eStrKey": "Range" - }, - "DEVICE_METADATA_VALID_STORAGE_DEVICE": { - "desc": "Verifying valid storage device value" - }, - "DEVICE_METADATA_INVALID_STORAGE_DEVICE": { - "desc": "Verifying invalid storage device value", - "eStrKey": "InvalidValue" - } + "DEVICE_METADATA_VALID_CLUSTER": { + "desc": "Verifying valid cluster configuration." + }, + "DEVICE_METADATA_VALID_SUBTYPE": { + "desc": "Verifying valid subtype value" + }, + "DEVICE_METADATA_INVALID_SUBTYPE": { + "desc": "Verifying invalid subtype value", + "eStrKey": "Pattern" + }, + "DEVICE_METADATA_VALID_PEER_SWITCH": { + "desc": "Verifying valid peer switch hostname" + }, + "DEVICE_METADATA_INVALID_PEER_SWITCH": { + "desc": "Verifying test fails with hostname that is too long", + "eStrKey": "Range" + }, + "DEVICE_METADATA_VALID_STORAGE_DEVICE": { + "desc": "Verifying valid storage device value" + }, + "DEVICE_METADATA_INVALID_STORAGE_DEVICE": { + "desc": "Verifying invalid storage device value", + "eStrKey": "InvalidValue" + }, + "DEVICE_METADATA_INCORRECT_VOQ_CONFIG": { + "desc": "Verifying incorrect switch_type configuration.", + "eStrKey": "Pattern" + }, + "DEVICE_METADATA_CORRECT_VOQ_CONFIG": { + "desc": "Verifying VOQ configuration." + }, + "DEVICE_METADATA_VALID_SUB_ROLE_CONFIG": { + "desc": "Verifying valid sub_role configuration." + }, + "DEVICE_METADATA_VALID_DHCP_SERVER": { + "desc": "Verifying dhcp_server configuration." + }, + "DEVICE_METADATA_INVALID_DHCP_SERVER": { + "desc": "Verifying invalid dhcp_server configuration.", + "eStrKey": "InvalidValue" + } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/flex_counter.json b/src/sonic-yang-models/tests/yang_model_tests/tests/flex_counter.json index 7a328ca693c1..92d96b54f3a1 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/flex_counter.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/flex_counter.json @@ -6,5 +6,16 @@ "desc": "Out of range poll interval.", "eStrKey": "Range", "eStr": "100..4294967295" + }, + "FLOW_COUNTER_ROUTE_PATTERN_TABLE_WITH_VRF": { + "desc": "FLOW_COUNTER_ROUTE_PATTERN_TABLE_WITH_VRF no failure." + }, + "FLOW_COUNTER_ROUTE_PATTERN_TABLE_WITH_DEFAULT_VRF": { + "desc": "FLOW_COUNTER_ROUTE_PATTERN_TABLE_WITH_DEFAULT_VRF no failure." + }, + "FLOW_COUNTER_ROUTE_PATTERN_TABLE_WITH_INVALID_MAX_MATCH_COUNT": { + "desc": "Out of range max_match_count.", + "eStrKey": "Range", + "eStr": "1..50" } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/macsec.json b/src/sonic-yang-models/tests/yang_model_tests/tests/macsec.json new file mode 100644 index 000000000000..9d4329e8d7f2 --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/macsec.json @@ -0,0 +1,29 @@ +{ + "VALID_PROFILE": { + "desc": "Valid MACsec profile test" + }, + "DUPLICATE_CKN": { + "desc": "Primary CKN equals than fallback CKN", + "eStrKey": "Must" + }, + "INVALID_CAK_LENGTH": { + "desc": "Invalid CAK length", + "eStrKey": "Pattern" + }, + "INVALID_CAK_CHARACTER": { + "desc": "Invalid CAK character", + "eStrKey": "Pattern" + }, + "INVALID_CIPHER_LOWERCASE": { + "desc": "Invalid cipher with lowercase", + "eStrKey": "Pattern" + }, + "MISMATCH_LENGTH_PRIMARY_FALLBACK": { + "desc": "Mismatch length of primary and fallback", + "eStrKey": "Must" + }, + "SET_REPLAY_WINDOW_WHEN_DISABLE_REPLAY_PROTECT": { + "desc": "Set replay window when disable replay protect", + "eStrKey": "When" + } +} diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/mclag.json b/src/sonic-yang-models/tests/yang_model_tests/tests/mclag.json new file mode 100644 index 000000000000..b7f3c69e1dab --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/mclag.json @@ -0,0 +1,32 @@ +{ + "MCLAG_VALID_DOMAIN_CFG_TEST": { + "desc": "valid mclag configuration test" + }, + "MCLAG_VALID_DOMAIN_PEERLINK_ETH_TEST": { + "desc": "valid mclag configuration test with peer link ethernet" + }, + "MCLAG_INVALID_DOMAIN_IDS_TEST": { + "desc": "configure mclag domain id in range", + "eStr": "MCLAG Domain ID out of range" + }, + "MCLAG_INVALID_KEEPALIVE_TEST": { + "desc": "configure mclag keepalive values in range", + "eStr" : "MCLAG Domain keepalive interval out of range" + }, + "MCLAG_INVALID_SESSION_TIMEOUT_TEST": { + "desc": "configure mclag session timeout in range", + "eStr" : "MCLAG Domain session timeout out of range" + }, + "MCLAG_INVALID_KEEPALIVE_MUST_COND_TEST": { + "desc": "Invalid session and keepalive multiplier", + "eStr" : "(keepalive interval * 3) <= session_timeout value" + }, + "MCLAG_INTERFACE_DOMAIN_ABSENT_TEST": { + "desc": "mclag interface configured without domain", + "eStrKey" : "LeafRef" + }, + "MCLAG_UNIQUE_IP_DOMAIN_ABSENT_TEST": { + "desc": "mclag unique ip configured without domain", + "eStr" : "mclag not configured" + } +} diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/mirror_session.json b/src/sonic-yang-models/tests/yang_model_tests/tests/mirror_session.json index 9c94deb343cf..c54ca3d9595a 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/mirror_session.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/mirror_session.json @@ -1,81 +1,108 @@ { - "MIRROR_ERSPAN_ENTRY_WITH_VALID_VALUES": { - "desc": "Configuring ERSPAN entry with valid values." + "MIRROR_ERSPAN_ENTRY_WITH_VALID_HEX_VALUES": { + "desc": "Configuring ERSPAN entry with valid heximal values." + }, + "MIRROR_ERSPAN_ENTRY_WITH_VALID_HEX_VALUES_1": { + "desc": "Configuring ERSPAN entry with valid heximal values." + }, + "MIRROR_ERSPAN_ENTRY_WITH_VALID_DEC_VALUES": { + "desc": "Configuring ERSPAN entry with valid decimal values." + }, + "MIRROR_ERSPAN_ENTRY_WITH_VALID_DEC_VALUES_1": { + "desc": "Configuring ERSPAN entry with valid decimal values." + }, + "MIRROR_ERSPAN_ENTRY_WITH_VALID_DEC_VALUES_2": { + "desc": "Configuring ERSPAN entry with valid decimal values." }, "MIRROR_ERSPAN_ENTRY_WRONG_TYPE": { - "desc": "Configurinng ERSPAN entry with invalid type", + "desc": "Configuring ERSPAN entry with invalid type", "eStrKey": "InvalidValue" }, "MIRROR_ERSPAN_ENTRY_WRONG_DST_IP": { - "desc": "Configurinng ERSPAN entry with invalid dst_ip", + "desc": "Configuring ERSPAN entry with invalid dst_ip", "eStrKey" : "Pattern" }, "MIRROR_ERSPAN_ENTRY_WRONG_DST_IP_TYPE": { - "desc": "Configurinng ERSPAN entry with invalid dst_ip", + "desc": "Configuring ERSPAN entry with invalid dst_ip", "eStrKey" : "When" }, "MIRROR_ERSPAN_ENTRY_WRONG_SRC_IP": { - "desc": "Configurinng ERSPAN entry with invalid src_ip", + "desc": "Configuring ERSPAN entry with invalid src_ip", "eStrKey" : "Pattern" }, "MIRROR_ERSPAN_ENTRY_WRONG_SRC_IP_TYPE": { - "desc": "Configurinng ERSPAN entry with invalid src_ip", + "desc": "Configuring ERSPAN entry with invalid src_ip", "eStrKey" : "When" }, "MIRROR_ERSPAN_ENTRY_WRONG_GRE_TYPE": { - "desc": "Configurinng ERSPAN entry with invalid GRE type", + "desc": "Configuring ERSPAN entry with invalid GRE type", + "eStrKey" : "Pattern" + }, + "MIRROR_ERSPAN_ENTRY_WRONG_GRE_TYPE_1": { + "desc": "Configuring ERSPAN entry with invalid GRE type", + "eStrKey" : "Pattern" + }, + "MIRROR_ERSPAN_ENTRY_WRONG_GRE_TYPE_2": { + "desc": "Configuring ERSPAN entry with invalid GRE type", "eStrKey" : "Pattern" }, "MIRROR_ERSPAN_ENTRY_GRE_WRONG_TYPE": { - "desc": "Configurinng ERSPAN entry with invalid GRE type", + "desc": "Configuring ERSPAN entry with invalid GRE type", "eStrKey" : "When" }, "MIRROR_ERSPAN_ENTRY_WRONG_DSCP": { - "desc": "Configurinng ERSPAN entry with invalid dscp", + "desc": "Configuring ERSPAN entry with invalid dscp", "eStr" : "Invalid dscp value" }, "MIRROR_ERSPAN_ENTRY_WRONG_DSCP_TYPE": { - "desc": "Configurinng ERSPAN entry with invalid dscp", + "desc": "Configuring ERSPAN entry with invalid dscp", "eStrKey" : "When" }, "MIRROR_ERSPAN_ENTRY_WRONG_TTL": { - "desc": "Configurinng ERSPAN entry with invalid ttl", + "desc": "Configuring ERSPAN entry with invalid ttl", "eStr": "Invalid TTL value" }, "MIRROR_ERSPAN_ENTRY_WRONG_TTL_TYPE": { - "desc": "Configurinng ERSPAN entry with invalid ttl", + "desc": "Configuring ERSPAN entry with invalid ttl", "eStrKey" : "When" }, "MIRROR_ERSPAN_ENTRY_VALID_SRC_PORT": { - "desc": "Configurinng ERSPAN entry with valid source port" + "desc": "Configuring ERSPAN entry with valid source port" }, "MIRROR_ERSPAN_ENTRY_VALID_SRC_PORTCHANNEL": { - "desc": "Configurinng ERSPAN entry with valid source portchannel" + "desc": "Configuring ERSPAN entry with valid source portchannel" }, "MIRROR_ERSPAN_ENTRY_INVALID_SRC_PORT": { - "desc": "Configurinng ERSPAN entry with invalid source port", + "desc": "Configuring ERSPAN entry with invalid source port", "eStrKey" : "InvalidValue" }, "MIRROR_SPAN_ENTRY_WITH_VALID_VALUES": { - "desc": "Configurinng SPAN entry with valid source and destination ports" + "desc": "Configuring SPAN entry with valid source and destination ports" }, "MIRROR_SPAN_ENTRY_INVALID_DST_PORT": { - "desc": "Configurinng SPAN entry with invalid destination ports", + "desc": "Configuring SPAN entry with invalid destination ports", "eStrKey" : "InvalidValue" }, "MIRROR_SPAN_ENTRY_INVALID_DST_PORT_TYPE": { - "desc": "Configurinng SPAN entry with invalid destination ports", + "desc": "Configuring SPAN entry with invalid destination ports", "eStrKey" : "When" }, "MIRROR_SPAN_ENTRY_VALID_DST_PORT_CPU": { - "desc": "Configurinng SPAN entry with valid destination port CPU" + "desc": "Configuring SPAN entry with valid destination port CPU" }, "MIRROR_SPAN_ENTRY_INVALID_SRC_PORT": { - "desc": "Configurinng SPAN entry with invalid destination ports", + "desc": "Configuring SPAN entry with invalid destination ports", "eStrKey" : "InvalidValue" }, "MIRROR_SPAN_ENTRY_INVALID_DIRECTION": { - "desc": "Configurinng SPAN entry with invalid direction", + "desc": "Configuring SPAN entry with invalid direction", "eStrKey": "InvalidValue" + }, + "MIRROR_ERSPAN_ENTRY_WITH_VALID_POLICER": { + "desc": "Configuring SPAN entry with valid policer" + }, + "MIRROR_ERSPAN_ENTRY_WITH_INVALID_POLICER": { + "desc": "Configuring SPAN entry with invalid policer", + "eStrKey": "LeafRef" } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/nvgre.json b/src/sonic-yang-models/tests/yang_model_tests/tests/nvgre.json new file mode 100644 index 000000000000..e776b0d9064f --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/nvgre.json @@ -0,0 +1,25 @@ +{ + "NVGRE_TUNNEL_AND_TUNNEL_MAP": { + "desc": "NVGRE_TUNNEL with NVGRE_TUNNEL_MAP" + }, + + "NVGRE_TUNNEL_INVALID_SRC_IP": { + "desc": "INVALID src_ip value for NVGRE_TUNNEL", + "eStrKey": "InvalidValue" + }, + + "NVGRE_TUNNEL_MAP_UNEXISTING_NVGRE_TUNNEL_NAME": { + "desc": "Unexisting NVGRE_TUNNEL", + "eStrKey": "LeafRef" + }, + + "NVGRE_TUNNEL_MAP_INVALID_VLAN_ID": { + "desc": "Invalid VLAN ID", + "eStrKey": "Pattern" + }, + + "NVGRE_TUNNEL_MAP_INVALID_VSID": { + "desc": "INVALID VSID value for NVGRE_TUNNEL_MAP", + "eStrKey": "Pattern" + } +} \ No newline at end of file diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/policer.json b/src/sonic-yang-models/tests/yang_model_tests/tests/policer.json new file mode 100644 index 000000000000..80f2534b8cc8 --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/policer.json @@ -0,0 +1,61 @@ +{ + "POLICER_TABLE": { + "desc": "Configure policer with all fields." + }, + "POLICER_MANDATORY_MODE": { + "desc": "Configure policer with no mode.", + "eStrKey" : "Mandatory" + }, + "POLICER_MANDATORY_METER_TYPE": { + "desc": "Configure policer with no meter type.", + "eStrKey" : "Mandatory" + }, + "POLICER_UNKNOWN_METER_TYPE": { + "desc": "Configure policer with unknown meter type.", + "eStrKey" : "InvalidValue", + "eStr" : ["meter_type"] + }, + "POLICER_UNKNOWN_MODE": { + "desc": "Configure policer with unknown mode.", + "eStrKey" : "InvalidValue", + "eStr" : ["mode"] + }, + "POLICER_UNKNOWN_ACTION": { + "desc": "Configure policer with unknown action.", + "eStrKey" : "InvalidValue", + "eStr" : ["red_packet_action"] + }, + "POLICER_UNKNOWN_COLOR": { + "desc": "Configure policer with unknown color awareness.", + "eStrKey" : "InvalidValue", + "eStr" : ["color"] + }, + "POLICER_CBS_WITHOUT_CIR": { + "desc": "Configure policer with cbs but without cir.", + "eStr": ["cbs can't be configured without cir."] + }, + "POLICER_CBS_LESS_THAN_CIR": { + "desc": "Configure policer with cbs less than cir.", + "eStr": ["cbs must be greater than or equal to cir"] + }, + "POLICER_PIR_LESS_THAN_CIR": { + "desc": "Configure policer with pir less than cir.", + "eStr": ["pir must be greater than or equal to cir"] + }, + "POLICER_PBS_WITH_STORM": { + "desc": "Configure policer with pbs configured in storm mode.", + "eStrKey" : "When" + }, + "POLICER_PBS_LESS_THAN_CBS": { + "desc": "Configure policer with pbs less than cbs.", + "eStr": ["pbs must be greater than or equal to cbs"] + }, + "POLICER_PIR_WITHOUT_CIR": { + "desc": "Configure policer with pir but without cir.", + "eStr": ["pir can't be configured without cir."] + }, + "POLICER_WHEN_SRTCM_WITH_PIR": { + "desc": "Configure policer with pir configured in sr_tcm mode.", + "eStrKey" : "When" + } +} 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 f936d7a0b80d..b3aa253c2e72 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 @@ -73,5 +73,13 @@ "PORT_INVALID_MUX_CABLE_TEST": { "desc": "PORT_INVALID_MUX_CABLE_TEST non-boolean values, expect fail", "eStrKey": "InvalidValue" + }, + "PORT_VALID_MULTIASIC_TEST": { + "desc": "PORT_VALID_MULTIASIC_TEST no failure." + }, + "PORT_INVALID_MULTIASIC_TEST": { + "desc": "PORT_INVALID_MULTIASIC_TEST invalid role pattern, expect fail", + "eStrKey": "Pattern" } + } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/qos.json b/src/sonic-yang-models/tests/yang_model_tests/tests/qos.json index 96b7b4b8d94c..189cec177a2d 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/qos.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/qos.json @@ -35,6 +35,10 @@ "eStr": ["pir must be greater than or equal to cir"] }, + "SCHEDULER_VALID_NAME": { + "desc": "Configure SCHEDULER table." + }, + "WRED_PROFILE_EMPTY": { "desc": "Configure Empty WRED profile." }, diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/tacacs.json b/src/sonic-yang-models/tests/yang_model_tests/tests/tacacs.json index 5236aab596fe..6888a4e3f326 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/tacacs.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/tacacs.json @@ -4,7 +4,7 @@ }, "TACPLUS_INVALID_TIMEOUT_TEST": { "desc": "Tacplus global configuration with invalid timeout value in TACPLUS table.", - "eStr": "TACACS timeout must be 1..60" + "eStr": "TACACS timeout must be 1..60" }, "TACPLUS_NOT_PRESENT_SRC_INTF_TEST": { "desc": "Tacplus global configuration with a non existent port in TACPLUS table.", @@ -15,7 +15,7 @@ }, "TACPLUS_SERVER_INVALID_PRIORITY_TEST": { "desc": "Tacplus server configuration with invalid priority value in TACPLUS_SERVER table.", - "eStr": "TACACS server priority must be 1..64" + "eStr": "TACACS server priority must be 1..64" }, "TACPLUS_SERVER_INVALID_TIMEOUT_TEST" : { "desc": "Tacplus server configuration with invalid timeout value in TACPLUS_SERVER table.", 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 789b7ddd364a..e3ffa9dc44b6 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 @@ -2,10 +2,28 @@ "VLAN_SUB_INTERFACE_MUST_CONDITION_TRUE_TEST": { "desc": "Configure valid vlan sub interface must condition true." }, + "VLAN_SUB_INTERFACE_SHORT_NAME_FORMAT_MUST_CONDITION_TRUE_TEST": { + "desc": "Configure valid short name format vlan sub interface must condition true." + }, "VLAN_SUB_INTERFACE_MUST_CONDITION_FALSE_TEST": { "desc": "Configure vlan sub interface must condition false.", "eStrKey": "Must" }, + "VLAN_SUB_INTERFACE_SHORT_NAME_FORMAT_MUST_CONDITION_FALSE_TEST": { + "desc": "Configure short name format vlan sub interface must condition false.", + "eStrKey": "Must" + }, + "VLAN_SUB_INTERFACE_PO_SHORT_NAME_FORMAT_MUST_CONDITION_TRUE_TEST": { + "desc": "Configure valid portchannel short name format vlan sub interface must condition true." + }, + "VLAN_SUB_INTERFACE_PO_MUST_CONDITION_FALSE_TEST": { + "desc": "Configure portchannel long name format vlan sub interface must condition false.", + "eStrKey": "Must" + }, + "VLAN_SUB_INTERFACE_PO_SHORT_NAME_FORMAT_MUST_CONDITION_FALSE_TEST": { + "desc": "Configure portchannel short name format vlan sub interface must condition false.", + "eStrKey": "Must" + }, "VLAN_SUB_INTERFACE_IP_PREFIX_PORT_NON_EXISTING_LEAF_TEST": { "desc": "Configure ip prefix vlan sub interface with non-existing reference.", "eStrKey": "LeafRef" diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/aaa.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/aaa.json index 5b05fc333033..fbf63f994cce 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/aaa.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/aaa.json @@ -24,6 +24,16 @@ } }, + "AAA_TEST_WRONG_LOGIN": { + "sonic-system-aaa:sonic-system-aaa": { + "sonic-system-aaa:AAA": { + "AAA_LIST": [{ + "login": "locallll" + }] + } + } + }, + "AAA_TEST_WRONG_FAILTHROUGH": { "sonic-system-aaa:sonic-system-aaa": { "sonic-system-aaa:AAA": { 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 98acc17a63a4..d98645b8a19c 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 @@ -211,6 +211,63 @@ } } }, + "ACL_RULE_FOR_CTRLPLANE_ACL_REQUIRES_PACKET_ACTION": { + "sonic-acl:sonic-acl": { + "sonic-acl:ACL_RULE": { + "ACL_RULE_LIST": [ + { + "ACL_TABLE_NAME": "MGMT_ONLY", + "DST_IP": "10.186.72.0/26", + "IP_TYPE": "IPv4ANY", + "PRIORITY": 999980, + "RULE_NAME": "Rule_20", + "SRC_IP": "10.176.0.0/15" + } + ] + }, + "sonic-acl:ACL_TABLE": { + "ACL_TABLE_LIST": [ + { + "ACL_TABLE_NAME": "MGMT_ONLY", + "policy_desc": "Filter IPv4", + "services": [ + "SNMP" + ], + "stage": "EGRESS", + "type": "CTRLPLANE" + } + ] + } + } + }, + "ACL_RULE_MANDATORY_PRIORITY": { + "sonic-acl:sonic-acl": { + "sonic-acl:ACL_RULE": { + "ACL_RULE_LIST": [ + { + "ACL_TABLE_NAME": "EVERFLOW", + "DST_IP": "10.186.72.0/26", + "IP_TYPE": "IPv4ANY", + "RULE_NAME": "Rule_20", + "SRC_IP": "10.176.0.0/15" + } + ] + }, + "sonic-acl:ACL_TABLE": { + "ACL_TABLE_LIST": [ + { + "ACL_TABLE_NAME": "EVERFLOW", + "policy_desc": "Filter IPv4", + "services": [ + "SNMP" + ], + "stage": "EGRESS", + "type": "MIRROR" + } + ] + } + } + }, "ACL_RULE_WITH_NON_EXIST_ACL_TABLE": { "sonic-acl:sonic-acl": { "sonic-acl:ACL_RULE": { @@ -768,8 +825,8 @@ "ACL_RULE_LIST": [ { "ACL_TABLE_NAME": "L2ACL_INVALID_ETHER", - "SRC_MAC": "00.00.AB.CD.EF.00/FF.FF.FF.00.00.00", - "DST_MAC": "00.00.AB.CD.EF.FF/FF.FF.FF.FF.FF.FF", + "SRC_MAC": "00:00:AB:CD:EF:00/FF:FF:FF:00:00:00", + "DST_MAC": "00:00:AB:CD:EF:FF/FF:FF:FF:FF:FF:FF", "ETHER_TYPE": "64", "PACKET_ACTION": "FORWARD", "PRIORITY": 999980, @@ -790,6 +847,62 @@ } } }, + "ACL_RULE_L2_VALID_ETHER_IN_DECIMAL": { + "sonic-acl:sonic-acl": { + "sonic-acl:ACL_RULE": { + "ACL_RULE_LIST": [ + { + "ACL_TABLE_NAME": "L2ACL_VALID_ETHER_DECIMAL", + "SRC_MAC": "00:00:AB:CD:EF:00/FF:FF:FF:00:00:00", + "DST_MAC": "00:00:AB:CD:EF:FF/FF:FF:FF:FF:FF:FF", + "ETHER_TYPE": "2048", + "PACKET_ACTION": "FORWARD", + "PRIORITY": 999980, + "RULE_NAME": "Rule_20" + } + ] + }, + "sonic-acl:ACL_TABLE": { + "ACL_TABLE_LIST": [ + { + "ACL_TABLE_NAME": "L2ACL_VALID_ETHER_DECIMAL", + "policy_desc": "L2ACL Test", + "ports": [ "" ], + "stage": "INGRESS", + "type": "L2" + } + ] + } + } + }, + "ACL_RULE_L2_INVALID_ETHER_IN_DECIMAL": { + "sonic-acl:sonic-acl": { + "sonic-acl:ACL_RULE": { + "ACL_RULE_LIST": [ + { + "ACL_TABLE_NAME": "L2ACL_INVALID_ETHER_DECIMAL", + "SRC_MAC": "00:00:AB:CD:EF:00/FF:FF:FF:00:00:00", + "DST_MAC": "00:00:AB:CD:EF:FF/FF:FF:FF:FF:FF:FF", + "ETHER_TYPE": "66789", + "PACKET_ACTION": "FORWARD", + "PRIORITY": 999980, + "RULE_NAME": "Rule_20" + } + ] + }, + "sonic-acl:ACL_TABLE": { + "ACL_TABLE_LIST": [ + { + "ACL_TABLE_NAME": "L2ACL_INVALID_ETHER_DECIMAL", + "policy_desc": "L2ACL Test", + "ports": [ "" ], + "stage": "INGRESS", + "type": "L2" + } + ] + } + } + }, "ACL_PACKET_ACTION_VALIDATE_VALUE_ACCEPT": { "sonic-acl:sonic-acl": { "sonic-acl:ACL_RULE": { @@ -820,5 +933,75 @@ ] } } + }, + "ACL_RULE_WITH_INVALID_MIRROR_INGRESS_ACTION": { + "sonic-acl:sonic-acl": { + "sonic-acl:ACL_RULE": { + "ACL_RULE_LIST": [ + { + "ACL_TABLE_NAME": "EVERFLOW_DSCP", + "MIRROR_INGRESS_ACTION": "mirror_session_dscp", + "PRIORITY": 9999, + "RULE_NAME": "Rule_20", + "DSCP": "10" + } + ] + }, + "sonic-acl:ACL_TABLE": { + "ACL_TABLE_LIST": [ + { + "ACL_TABLE_NAME": "EVERFLOW_DSCP", + "policy_desc": "EVERFLOW_DSCP", + "ports": [ + "" + ], + "stage": "ingress", + "type": "MIRROR_DSCP" + } + ] + } + } + }, + "ACL_RULE_WITH_VALID_MIRROR_INGRESS_ACTION": { + "sonic-acl:sonic-acl": { + "sonic-acl:ACL_RULE": { + "ACL_RULE_LIST": [ + { + "ACL_TABLE_NAME": "EVERFLOW_DSCP", + "MIRROR_INGRESS_ACTION": "mirror_session_dscp", + "PRIORITY": 9999, + "RULE_NAME": "Rule_20", + "DSCP": "10" + } + ] + }, + "sonic-acl:ACL_TABLE": { + "ACL_TABLE_LIST": [ + { + "ACL_TABLE_NAME": "EVERFLOW_DSCP", + "policy_desc": "EVERFLOW_DSCP", + "ports": [ + "" + ], + "stage": "ingress", + "type": "MIRROR_DSCP" + } + ] + } + }, + "sonic-mirror-session:sonic-mirror-session": { + "sonic-mirror-session:MIRROR_SESSION": { + "MIRROR_SESSION_LIST": [ + { + "name":"mirror_session_dscp", + "type": "ERSPAN", + "dst_ip": "11.1.1.1", + "src_ip": "10.1.1.1", + "gre_type": "0x1234", + "dscp": "10" + } + ] + } + } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/bgp.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/bgp.json index 3fec22eb46fc..a6a30bd40559 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/bgp.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/bgp.json @@ -1402,6 +1402,195 @@ ] } } + }, + + "BGP_PEERRANGE_ALL_VALID": { + "sonic-bgp-peerrange:sonic-bgp-peerrange": { + "sonic-bgp-peerrange:BGP_PEER_RANGE": { + "BGP_PEER_RANGE_LIST": [ + { + "peer_range_name": "BGPSLBPassive", + "name": "BGPSLBPassive", + "src_address": "10.1.0.32", + "peer_asn": "65200", + "ip_range": [ + "10.255.0.0/25" + ] + } + ] + } + } + }, + + "BGP_ALLOWED_PREFIXES_COM_LIST_ALL_VALID": { + "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { + "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { + "BGP_ALLOWED_PREFIXES_COM_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "4", + "community": "123:123", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64"] + }, + { + "deployment": "DEPLOYMENT_ID", + "id": "5", + "community": "456:456", + "default_action": "permit", + "prefixes_v4": ["10.10.0.0/24", "10.11.0.0/24"], + "prefixes_v6": ["fc00:f1::/64", "fc00:a1::/64"] + } + ] + } + } + }, + "BGP_ALLOWED_PREFIXES_COM_LIST_INVALID_DEPLOYMENT": { + "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { + "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { + "BGP_ALLOWED_PREFIXES_COM_LIST": [ + { + "deployment": "DEPLOYMENTID", + "id": "4", + "community": "123:123", + "default_action": "permitall", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64"] + } + ] + } + } + }, + "BGP_ALLOWED_PREFIXES_COM_LIST_INVALID_DEFAULT_ACTION": { + "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { + "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { + "BGP_ALLOWED_PREFIXES_COM_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "4", + "community": "123:123", + "default_action": "permitall", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64"] + } + ] + } + } + }, + "BGP_ALLOWED_PREFIXES_COM_LIST_INVALID_PREFIXES_IPV4": { + "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { + "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { + "BGP_ALLOWED_PREFIXES_COM_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "4", + "community": "123:123", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/48", "10.1.0.0/24"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64"] + } + ] + } + } + }, + "BGP_ALLOWED_PREFIXES_COM_LIST_INVALID_PREFIXES_IPV6": { + "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { + "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { + "BGP_ALLOWED_PREFIXES_COM_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "4", + "community": "123:123", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0./24"], + "prefixes_v6": ["fc00:f0::/129", "fc00:a0::/64"] + } + ] + } + } + }, + "BGP_ALLOWED_PREFIXES_LIST_ALL_VALID": { + "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { + "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { + "BGP_ALLOWED_PREFIXES_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "4", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64"] + }, + { + "deployment": "DEPLOYMENT_ID", + "id": "5", + "default_action": "permit", + "prefixes_v4": ["10.10.0.0/24", "10.11.0.0/24"], + "prefixes_v6": ["fc00:f1::/64", "fc00:a1::/64"] + } + ] + } + } + }, + "BGP_ALLOWED_PREFIXES_LIST_INVALID_DEPLOYMENT": { + "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { + "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { + "BGP_ALLOWED_PREFIXES_LIST": [ + { + "deployment": "DEPLOYMENTID", + "id": "4", + "default_action": "permitall", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64"] + } + ] + } + } + }, + "BGP_ALLOWED_PREFIXES_LIST_INVALID_DEFAULT_ACTION": { + "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { + "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { + "BGP_ALLOWED_PREFIXES_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "4", + "default_action": "permitall", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64"] + } + ] + } + } + }, + "BGP_ALLOWED_PREFIXES_LIST_INVALID_PREFIXES_IPV4": { + "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { + "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { + "BGP_ALLOWED_PREFIXES_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "4", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/48", "10.1.0.0/24"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64"] + } + ] + } + } + }, + "BGP_ALLOWED_PREFIXES_LIST_INVALID_PREFIXES_IPV6": { + "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { + "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { + "BGP_ALLOWED_PREFIXES_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "4", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0./24"], + "prefixes_v6": ["fc00:f0::/129", "fc00:a0::/64"] + } + ] + } + } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pg.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pg.json index ec3ea73bf76d..cd0a244a0e0e 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pg.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pg.json @@ -52,6 +52,58 @@ } } }, + "BUFFER_PG_NULL_PROFILE_VALUE": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "admin_status": "up", + "alias": "eth0", + "description": "Ethernet0", + "lanes": "65", + "mtu": "9000", + "name": "Ethernet4", + "tpid": "0x8100", + "speed": "25000" + } + ] + } + }, + "sonic-buffer-pool:sonic-buffer-pool": { + "sonic-buffer-pool:BUFFER_POOL": { + "BUFFER_POOL_LIST": [ + { + "name": "egress_lossless_pool", + "mode": "static", + "size": "300", + "type": "ingress" + } + ] + } + }, + "sonic-buffer-profile:sonic-buffer-profile": { + "sonic-buffer-profile:BUFFER_PROFILE": { + "BUFFER_PROFILE_LIST": [ + { + "name": "lossless_buffer_profile", + "size": "300", + "pool": "egress_lossless_pool" + } + ] + } + }, + "sonic-buffer-pg:sonic-buffer-pg": { + "sonic-buffer-pg:BUFFER_PG": { + "BUFFER_PG_LIST": [ + { + "port": "Ethernet4", + "pg_num": "3", + "profile": "NULL" + } + ] + } + } + }, "BUFFER_PG_WRONG_PROFILE_VALUE": { "sonic-port:sonic-port": { "sonic-port:PORT": { diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json index 50016176b7da..687a745a24c6 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json @@ -54,6 +54,26 @@ } } }, + "DEVICE_METADATA_TYPE_BMC_MGMT_TOR_PATTERN": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "sonic-device_metadata:localhost": { + "bgp_asn": "65002", + "type": "BmcMgmtToRRouter" + } + } + } + }, + "DEVICE_METADATA_TYPE_NOT_PROVISIONED_PATTERN": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "sonic-device_metadata:localhost": { + "bgp_asn": "65002", + "type": "not-provisioned" + } + } + } + }, "DEVICE_METADATA_DEFAULT_SYNCHRONOUS_MODE": { "sonic-device_metadata:sonic-device_metadata": { "sonic-device_metadata:DEVICE_METADATA": { @@ -178,6 +198,15 @@ } } }, + "DEVICE_METADATA_VALID_CLUSTER": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "sonic-device_metadata:localhost": { + "cluster": "AAA00PrdStr00" + } + } + } + }, "DEVICE_METADATA_VALID_SUBTYPE": { "sonic-device_metadata:sonic-device_metadata": { "sonic-device_metadata:DEVICE_METADATA": { @@ -231,5 +260,56 @@ } } } + }, + "DEVICE_METADATA_INCORRECT_VOQ_CONFIG": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "sonic-device_metadata:localhost": { + "asic_name": "Asic0", + "switch_id": "2", + "switch_type": "incorrect_pattern", + "max_cores": "8" + } + } + } + }, + "DEVICE_METADATA_CORRECT_VOQ_CONFIG": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "sonic-device_metadata:localhost": { + "asic_name": "Asic0", + "switch_id": "2", + "switch_type": "voq", + "max_cores": "8" + } + } + } + }, + "DEVICE_METADATA_VALID_SUB_ROLE_CONFIG": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "sonic-device_metadata:localhost": { + "sub_role": "FrontEnd" + } + } + } + }, + "DEVICE_METADATA_VALID_DHCP_SERVER": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "sonic-device_metadata:localhost": { + "dhcp_server": "enabled" + } + } + } + }, + "DEVICE_METADATA_INVALID_DHCP_SERVER": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "sonic-device_metadata:localhost": { + "dhcp_server": "invalid" + } + } + } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/flex_counter.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/flex_counter.json index 9043132791fd..169a38ff6d7c 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/flex_counter.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/flex_counter.json @@ -46,6 +46,10 @@ "FLOW_CNT_TRAP": { "FLEX_COUNTER_STATUS": "enable", "POLL_INTERVAL": 10000 + }, + "FLOW_CNT_ROUTE": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 10000 } } } @@ -97,8 +101,77 @@ "FLOW_CNT_TRAP": { "FLEX_COUNTER_STATUS": "enable", "POLL_INTERVAL": 99 + }, + "FLOW_CNT_ROUTE": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 99 } } } + }, + "FLOW_COUNTER_ROUTE_PATTERN_TABLE_WITH_VRF": { + "sonic-vrf:sonic-vrf":{ + "sonic-vrf:VRF": { + "VRF_LIST": [ + { + "name":"Vrf1" + } + ] + } + }, + "sonic-flex_counter:sonic-flex_counter": { + "sonic-flex_counter:FLOW_COUNTER_ROUTE_PATTERN": { + "FLOW_COUNTER_ROUTE_PATTERN_VRF_LIST": [ + { + "vrf_name": "Vrf1", + "ip_prefix": "1.1.1.0/24", + "max_match_count": 30 + }, + { + "vrf_name": "Vrf1", + "ip_prefix": "2000::/64", + "max_match_count": 30 + } + ] + } + } + }, + "FLOW_COUNTER_ROUTE_PATTERN_TABLE_WITH_DEFAULT_VRF": { + "sonic-flex_counter:sonic-flex_counter": { + "sonic-flex_counter:FLOW_COUNTER_ROUTE_PATTERN": { + "FLOW_COUNTER_ROUTE_PATTERN_LIST": [ + { + "ip_prefix": "1.1.1.0/24", + "max_match_count": 30 + }, + { + "ip_prefix": "2000::/64", + "max_match_count": 30 + } + ] + } + } + }, + "FLOW_COUNTER_ROUTE_PATTERN_TABLE_WITH_INVALID_MAX_MATCH_COUNT": { + "sonic-vrf:sonic-vrf":{ + "sonic-vrf:VRF": { + "VRF_LIST": [ + { + "name":"Vrf1" + } + ] + } + }, + "sonic-flex_counter:sonic-flex_counter": { + "sonic-flex_counter:FLOW_COUNTER_ROUTE_PATTERN": { + "FLOW_COUNTER_ROUTE_PATTERN_VRF_LIST": [ + { + "vrf_name": "Vrf1", + "ip_prefix": "1.1.1.0/24", + "max_match_count": 0 + } + ] + } + } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/macsec.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/macsec.json new file mode 100644 index 000000000000..cfd7c512a67a --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/macsec.json @@ -0,0 +1,141 @@ +{ + "VALID_PROFILE": { + "sonic-macsec:sonic-macsec": { + "sonic-macsec:MACSEC_PROFILE": { + "MACSEC_PROFILE_LIST": [ + { + "name": "test32", + "priority": 64, + "cipher_suite": "GCM-AES-128", + "primary_cak": "0123456789ABCDEF0123456789ABCDEF", + "primary_ckn": "6162636465666768696A6B6C6D6E6F70", + "fallback_cak": "00000000000000000000000000000000", + "fallback_ckn": "11111111111111111111111111111111", + "policy": "security", + "enable_replay_protect": "true", + "replay_window": 64, + "send_sci": "true", + "rekey_period": 3600 + }, + { + "name": "test64", + "priority": 64, + "cipher_suite": "GCM-AES-XPN-256", + "primary_cak": "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF", + "primary_ckn": "6162636465666768696A6B6C6D6E6F706162636465666768696A6B6C6D6E6F70", + "fallback_cak": "0000000000000000000000000000000000000000000000000000000000000000", + "fallback_ckn": "1111111111111111111111111111111111111111111111111111111111111111", + "policy": "security", + "enable_replay_protect": "true", + "replay_window": 64, + "send_sci": "true", + "rekey_period": 3600 + } + ] + } + }, + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "admin_status": "up", + "alias": "eth8", + "description": "Ethernet8", + "fec": "rs", + "lanes": "65", + "mtu": 9000, + "pfc_asym": "on", + "name": "Ethernet8", + "tpid": "0x8100", + "speed": 25000, + "macsec": "test32" + } + ] + } + } + }, + "INVALID_CIPHER_LOWERCASE": { + "sonic-macsec:sonic-macsec": { + "sonic-macsec:MACSEC_PROFILE": { + "MACSEC_PROFILE_LIST": [ + { + "name": "test", + "cipher_suite": "gcm-aes-128", + "primary_cak": "0123456789ABCDEF0123456789ABCDEF", + "primary_ckn": "6162636465666768696A6B6C6D6E6F70" + } + ] + } + } + }, + "DUPLICATE_CKN": { + "sonic-macsec:sonic-macsec": { + "sonic-macsec:MACSEC_PROFILE": { + "MACSEC_PROFILE_LIST": [ + { + "name": "test", + "primary_cak": "0123456789ABCDEF0123456789ABCDEF", + "primary_ckn": "6162636465666768696A6B6C6D6E6F70", + "fallback_cak": "0123456789ABCDEF0123456789ABCDEF", + "fallback_ckn": "6162636465666768696A6B6C6D6E6F70" + } + ] + } + } + }, + "INVALID_CAK_LENGTH": { + "sonic-macsec:sonic-macsec": { + "sonic-macsec:MACSEC_PROFILE": { + "MACSEC_PROFILE_LIST": [ + { + "name": "test", + "primary_cak": "0123456789ABCDEF0123456789ABCDEFA", + "primary_ckn": "6162636465666768696A6B6C6D6E6F70A" + } + ] + } + } + }, + "INVALID_CAK_CHARACTER": { + "sonic-macsec:sonic-macsec": { + "sonic-macsec:MACSEC_PROFILE": { + "MACSEC_PROFILE_LIST": [ + { + "name": "test", + "primary_cak": "X123456789ABCDEF0123456789ABCDEF", + "primary_ckn": "X162636465666768696A6B6C6D6E6F70" + } + ] + } + } + }, + "MISMATCH_LENGTH_PRIMARY_FALLBACK": { + "sonic-macsec:sonic-macsec": { + "sonic-macsec:MACSEC_PROFILE": { + "MACSEC_PROFILE_LIST": [ + { + "name": "test", + "primary_cak": "0123456789ABCDEF0123456789ABCDEF", + "primary_ckn": "6162636465666768696A6B6C6D6E6F70", + "fallback_cak": "0000000000000000000000000000000000000000000000000000000000000000", + "fallback_ckn": "1111111111111111111111111111111111111111111111111111111111111111" + } + ] + } + } + }, + "SET_REPLAY_WINDOW_WHEN_DISABLE_REPLAY_PROTECT": { + "sonic-macsec:sonic-macsec": { + "sonic-macsec:MACSEC_PROFILE": { + "MACSEC_PROFILE_LIST": [ + { + "name": "test", + "primary_cak": "0123456789ABCDEF0123456789ABCDEF", + "primary_ckn": "6162636465666768696A6B6C6D6E6F70", + "replay_window": 64 + } + ] + } + } + } +} diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/mclag.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/mclag.json new file mode 100644 index 000000000000..fdb2661a973a --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/mclag.json @@ -0,0 +1,356 @@ +{ + "MCLAG_VALID_DOMAIN_CFG_TEST": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "admin_status": "up", + "alias": "eth0", + "description": "Ethernet0", + "lanes": "65", + "mtu": 9000, + "name": "Ethernet0", + "speed": 25000 + }, + { + "admin_status": "up", + "alias": "eth0", + "description": "Ethernet10", + "lanes": "65", + "mtu": 9000, + "name": "Ethernet10", + "speed": 25000 + } + ] + } + }, + "sonic-portchannel:sonic-portchannel": { + "sonic-portchannel:PORTCHANNEL": { + "PORTCHANNEL_LIST": [ + { + "admin_status": "up", + "members": [ + "Ethernet0" + ], + "min_links": "1", + "mtu": "9100", + "lacp_key": "auto", + "name": "PortChannel2" + }, + { + "admin_status": "up", + "members": [ + "Ethernet10" + ], + "min_links": "1", + "mtu": "9100", + "lacp_key": "auto", + "name": "PortChannel10" + } + ] + } + }, + + "sonic-vlan:sonic-vlan": { + "sonic-vlan:VLAN": { + "VLAN_LIST": [ + { + "name": "Vlan12" + }, + { + "name": "Vlan100" + } + ] + }, + "sonic-vlan:VLAN_MEMBER": { + "VLAN_MEMBER_LIST": [ + { + "port": "PortChannel10", + "tagging_mode": "tagged", + "name": "Vlan100" + }, + { + "port": "PortChannel2", + "tagging_mode": "tagged", + "name": "Vlan12" + }, + { + "port": "PortChannel2", + "tagging_mode": "tagged", + "name": "Vlan100" + } + ] + }, + "sonic-vlan:VLAN_INTERFACE": { + "VLAN_INTERFACE_LIST": [ + { + "name": "Vlan12" + } + ], + "VLAN_INTERFACE_IPPREFIX_LIST": [ + { + "family": "IPv4", + "ip-prefix": "12.1.1.1/24", + "scope": "global", + "name": "Vlan12" + } + ] + } + }, + "sonic-mclag:sonic-mclag": { + "sonic-mclag:MCLAG_DOMAIN": { + "MCLAG_DOMAIN_LIST": [ + { + "domain_id": "123", + "source_ip": "12.1.1.1", + "peer_ip" : "12.1.1.2", + "peer_link": "PortChannel2", + "keepalive_interval" : "1", + "session_timeout": "30" + } + ] + }, + "sonic-mclag:MCLAG_INTERFACE": { + "MCLAG_INTERFACE_LIST": [ + { + "domain_id": "123", + "if_name" : "PortChannel10", + "if_type" : "Portchannel" + } + ] + } + } + }, + "MCLAG_VALID_DOMAIN_PEERLINK_ETH_TEST": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "admin_status": "up", + "alias": "eth0", + "description": "Ethernet0", + "lanes": "65", + "mtu": 9000, + "name": "Ethernet0", + "speed": 25000 + }, + { + "admin_status": "up", + "alias": "eth4", + "description": "Ethernet4", + "lanes": "65", + "mtu": 9000, + "name": "Ethernet4", + "speed": 25000 + } + ] + } + }, + "sonic-portchannel:sonic-portchannel": { + "sonic-portchannel:PORTCHANNEL": { + "PORTCHANNEL_LIST": [ + { + "admin_status": "up", + "members": [ + "Ethernet0" + ], + "min_links": "1", + "mtu": "9100", + "lacp_key": "auto", + "name": "PortChannel2" + } + ] + } + }, + "sonic-vlan:sonic-vlan": { + "sonic-vlan:VLAN": { + "VLAN_LIST": [ + { + "name": "Vlan12" + } + ] + }, + "sonic-vlan:VLAN_MEMBER": { + "VLAN_MEMBER_LIST": [ + { + "port": "PortChannel2", + "tagging_mode": "tagged", + "name": "Vlan12" + } + ] + }, + "sonic-vlan:VLAN_INTERFACE": { + "VLAN_INTERFACE_LIST": [ + { + "name": "Vlan12" + } + ], + "VLAN_INTERFACE_IPPREFIX_LIST": [ + { + "family": "IPv4", + "ip-prefix": "12.1.1.1/24", + "scope": "global", + "name": "Vlan12" + } + ] + } + }, + "sonic-mclag:sonic-mclag": { + "sonic-mclag:MCLAG_DOMAIN": { + "MCLAG_DOMAIN_LIST": [ + { + "domain_id": "123", + "source_ip": "12.1.1.1", + "peer_ip" : "12.1.1.2", + "peer_link": "Ethernet4", + "keepalive_interval" : "1", + "session_timeout": "30" + } + ] + } + } + }, + "MCLAG_INVALID_DOMAIN_IDS_TEST": { + "sonic-mclag:sonic-mclag": { + "sonic-mclag:MCLAG_DOMAIN": { + "MCLAG_DOMAIN_LIST": [ + { + "domain_id": "0", + "source_ip": "1.1.1.1" + }, + { + "domain_id": "4096", + "source_ip": "1.1.1.1" + } + + ] + } + } + }, + "MCLAG_INVALID_KEEPALIVE_TEST": { + "sonic-mclag:sonic-mclag": { + "sonic-mclag:MCLAG_DOMAIN": { + "MCLAG_DOMAIN_LIST": [ + { + "domain_id": "123", + "source_ip": "1.1.1.1", + "keepalive_interval" : "0", + "session_timeout": "30" + }, + { + "domain_id": "123", + "source_ip": "1.1.1.1", + "keepalive_interval" : "61", + "session_timeout": "30" + } + ] + } + } + }, + "MCLAG_INVALID_SESSION_TIMEOUT_TEST": { + "sonic-mclag:sonic-mclag": { + "sonic-mclag:MCLAG_DOMAIN": { + "MCLAG_DOMAIN_LIST": [ + { + "domain_id": "123", + "source_ip": "1.1.1.1", + "keepalive_interval" : "1", + "session_timeout": "0" + }, + { + "domain_id": "123", + "source_ip": "1.1.1.1", + "keepalive_interval" : "1", + "session_timeout": "3601" + } + ] + } + } + }, + "MCLAG_INVALID_KEEPALIVE_MUST_COND_TEST": { + "sonic-mclag:sonic-mclag": { + "sonic-mclag:MCLAG_DOMAIN": { + "MCLAG_DOMAIN_LIST": [ + { + "domain_id": "123", + "source_ip": "1.1.1.1", + "keepalive_interval" : "40", + "session_timeout": "30" + } + ] + } + } + }, + "MCLAG_INTERFACE_DOMAIN_ABSENT_TEST": { + "sonic-mclag:sonic-mclag": { + "sonic-mclag:MCLAG_INTERFACE": { + "MCLAG_INTERFACE_LIST": [ + { + "domain_id": "1001", + "if_name" : "PortChannel10", + "if_type" : "Portchannel" + }, + { + "domain_id": "2001", + "if_name" : "PortChannel20", + "if_type" : "Portchannel" + } + + ] + } + } + }, + "MCLAG_UNIQUE_IP_DOMAIN_ABSENT_TEST": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "admin_status": "up", + "alias": "eth0", + "description": "Ethernet12", + "lanes": "65", + "mtu": 9000, + "name": "Ethernet12", + "speed": 25000 + } + ] + } + }, + "sonic-vlan:sonic-vlan": { + "sonic-vlan:VLAN": { + "VLAN_LIST": [ + { + "name": "Vlan12" + } + ] + }, + "sonic-vlan:VLAN_MEMBER": { + "VLAN_MEMBER_LIST": [ + { + "port": "Ethernet12", + "tagging_mode": "tagged", + "name": "Vlan12" + } + ] + }, + "sonic-vlan:VLAN_INTERFACE": { + "VLAN_INTERFACE_LIST": [ + { + "name": "Vlan12" + } + ] + } + }, + + "sonic-mclag:sonic-mclag": { + "sonic-mclag:MCLAG_UNIQUE_IP": { + "MCLAG_UNIQUE_IP_LIST": [ + { + "if_name" : "Vlan12", + "unique_ip": "enable" + } + ] + } + } + } +} diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/mirror_session.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/mirror_session.json index 8f0580bbafdd..5e820b5f5fdf 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/mirror_session.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/mirror_session.json @@ -1,5 +1,5 @@ { - "MIRROR_ERSPAN_ENTRY_WITH_VALID_VALUES": { + "MIRROR_ERSPAN_ENTRY_WITH_VALID_HEX_VALUES": { "sonic-mirror-session:sonic-mirror-session": { "MIRROR_SESSION": { "MIRROR_SESSION_LIST": [ @@ -15,6 +15,70 @@ } } }, + "MIRROR_ERSPAN_ENTRY_WITH_VALID_HEX_VALUES_1": { + "sonic-mirror-session:sonic-mirror-session": { + "MIRROR_SESSION": { + "MIRROR_SESSION_LIST": [ + { + "name": "erspan", + "type": "ERSPAN", + "dst_ip": "11.1.1.1", + "src_ip": "10.1.1.1", + "gre_type": "0x0", + "dscp": "10" + } + ] + } + } + }, + "MIRROR_ERSPAN_ENTRY_WITH_VALID_DEC_VALUES": { + "sonic-mirror-session:sonic-mirror-session": { + "MIRROR_SESSION": { + "MIRROR_SESSION_LIST": [ + { + "name": "erspan", + "type": "ERSPAN", + "dst_ip": "11.1.1.1", + "src_ip": "10.1.1.1", + "gre_type": "1234", + "dscp": "10" + } + ] + } + } + }, + "MIRROR_ERSPAN_ENTRY_WITH_VALID_DEC_VALUES_1": { + "sonic-mirror-session:sonic-mirror-session": { + "MIRROR_SESSION": { + "MIRROR_SESSION_LIST": [ + { + "name": "erspan", + "type": "ERSPAN", + "dst_ip": "11.1.1.1", + "src_ip": "10.1.1.1", + "gre_type": "65535", + "dscp": "10" + } + ] + } + } + }, + "MIRROR_ERSPAN_ENTRY_WITH_VALID_DEC_VALUES_2": { + "sonic-mirror-session:sonic-mirror-session": { + "MIRROR_SESSION": { + "MIRROR_SESSION_LIST": [ + { + "name": "erspan", + "type": "ERSPAN", + "dst_ip": "11.1.1.1", + "src_ip": "10.1.1.1", + "gre_type": "0", + "dscp": "10" + } + ] + } + } + }, "MIRROR_ERSPAN_ENTRY_WRONG_TYPE": { "sonic-mirror-session:sonic-mirror-session": { "MIRROR_SESSION": { @@ -104,7 +168,39 @@ "type": "ERSPAN", "dst_ip": "11.1.1.1", "src_ip": "10.1.1.1", - "gre_type": "0", + "gre_type": "100000", + "dscp": "10" + } + ] + } + } + }, + "MIRROR_ERSPAN_ENTRY_WRONG_GRE_TYPE_1": { + "sonic-mirror-session:sonic-mirror-session": { + "MIRROR_SESSION": { + "MIRROR_SESSION_LIST": [ + { + "name": "erspan", + "type": "ERSPAN", + "dst_ip": "11.1.1.1", + "src_ip": "10.1.1.1", + "gre_type": "-1", + "dscp": "10" + } + ] + } + } + }, + "MIRROR_ERSPAN_ENTRY_WRONG_GRE_TYPE_2": { + "sonic-mirror-session:sonic-mirror-session": { + "MIRROR_SESSION": { + "MIRROR_SESSION_LIST": [ + { + "name": "erspan", + "type": "ERSPAN", + "dst_ip": "11.1.1.1", + "src_ip": "10.1.1.1", + "gre_type": "65536", "dscp": "10" } ] @@ -442,5 +538,56 @@ ] } } + }, + "MIRROR_ERSPAN_ENTRY_WITH_VALID_POLICER": { + "sonic-policer:sonic-policer": { + "sonic-policer:POLICER": { + "POLICER_LIST": [ + { + "name": "erspan_policer", + "meter_type":"packets", + "mode":"tr_tcm", + "color": "aware", + "cir":"5000", + "cbs":"5000", + "pir":"15000", + "pbs":"15000", + "red_packet_action":"drop" + } + ] + } + }, + "sonic-mirror-session:sonic-mirror-session": { + "MIRROR_SESSION": { + "MIRROR_SESSION_LIST": [ + { + "name": "erspan", + "type": "ERSPAN", + "dst_ip": "11.1.1.1", + "src_ip": "10.1.1.1", + "gre_type": "0x1234", + "dscp": "10", + "policer": "erspan_policer" + } + ] + } + } + }, + "MIRROR_ERSPAN_ENTRY_WITH_INVALID_POLICER": { + "sonic-mirror-session:sonic-mirror-session": { + "MIRROR_SESSION": { + "MIRROR_SESSION_LIST": [ + { + "name": "erspan", + "type": "ERSPAN", + "dst_ip": "11.1.1.1", + "src_ip": "10.1.1.1", + "gre_type": "0x1234", + "dscp": "10", + "policer": "erspan_policer2" + } + ] + } + } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/nvgre.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/nvgre.json new file mode 100644 index 000000000000..8c2588fa7d35 --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/nvgre.json @@ -0,0 +1,125 @@ +{ + "NVGRE_TUNNEL_AND_TUNNEL_MAP": { + "sonic-vlan:sonic-vlan": { + "sonic-vlan:VLAN": { + "VLAN_LIST": [ + { + "name": "Vlan200" + } + ] + } + }, + "sonic-nvgre-tunnel:sonic-nvgre-tunnel": { + "sonic-nvgre-tunnel:NVGRE_TUNNEL": { + "NVGRE_TUNNEL_LIST": [ + { + "tunnel_name": "tunnel_1", + "src_ip": "10.0.0.1" + } + ] + }, + "sonic-nvgre-tunnel:NVGRE_TUNNEL_MAP": { + "NVGRE_TUNNEL_MAP_LIST": [ + { + "tunnel_name": "tunnel_1", + "tunnel_map_name": "Vlan200", + "vlan_id": 200, + "vsid": 5000 + } + ] + } + } + }, + + "NVGRE_TUNNEL_INVALID_SRC_IP": { + "sonic-nvgre-tunnel:sonic-nvgre-tunnel": { + "sonic-nvgre-tunnel:NVGRE_TUNNEL": { + "NVGRE_TUNNEL_LIST": [ + { + "tunnel_name": "tunnel_1", + "src_ip": "INVALID" + } + ] + } + } + }, + + "NVGRE_TUNNEL_MAP_UNEXISTING_NVGRE_TUNNEL_NAME": { + "sonic-vlan:sonic-vlan": { + "sonic-vlan:VLAN": { + "VLAN_LIST": [ + { + "name": "Vlan200" + } + ] + } + }, + "sonic-nvgre-tunnel:sonic-nvgre-tunnel": { + "sonic-nvgre-tunnel:NVGRE_TUNNEL_MAP": { + "NVGRE_TUNNEL_MAP_LIST": [ + { + "tunnel_name": "INVALID", + "tunnel_map_name": "Vlan200", + "vlan_id": 200, + "vsid": 5000 + } + ] + } + } + }, + + "NVGRE_TUNNEL_MAP_INVALID_VLAN_ID": { + "sonic-nvgre-tunnel:sonic-nvgre-tunnel": { + "sonic-nvgre-tunnel:NVGRE_TUNNEL": { + "NVGRE_TUNNEL_LIST": [ + { + "tunnel_name": "tunnel_1", + "src_ip": "10.0.0.1" + } + ] + }, + "sonic-nvgre-tunnel:NVGRE_TUNNEL_MAP": { + "NVGRE_TUNNEL_MAP_LIST": [ + { + "tunnel_name": "tunnel_1", + "tunnel_map_name": "Vlan200", + "vlan_id": 5000, + "vsid": 5000 + } + ] + } + } + }, + + "NVGRE_TUNNEL_MAP_INVALID_VSID": { + "sonic-vlan:sonic-vlan": { + "sonic-vlan:VLAN": { + "VLAN_LIST": [ + { + "name": "Vlan200" + } + ] + } + }, + "sonic-nvgre-tunnel:sonic-nvgre-tunnel": { + "sonic-nvgre-tunnel:NVGRE_TUNNEL": { + "NVGRE_TUNNEL_LIST": [ + { + "tunnel_name": "tunnel_1", + "src_ip": "10.0.0.1" + } + ] + }, + "sonic-nvgre-tunnel:NVGRE_TUNNEL_MAP": { + "NVGRE_TUNNEL_MAP_LIST": [ + { + "tunnel_name": "tunnel_1", + "tunnel_map_name": "Vlan200", + "vlan_id": 200, + "vsid": 999999999 + } + ] + } + } + } +} \ No newline at end of file diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/policer.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/policer.json new file mode 100644 index 000000000000..b952e970592f --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/policer.json @@ -0,0 +1,220 @@ +{ + "POLICER_TABLE": { + "sonic-policer:sonic-policer": { + "sonic-policer:POLICER": { + "POLICER_LIST": [{ + "name": "everflow_session1_policer", + "meter_type":"packets", + "mode":"tr_tcm", + "color": "aware", + "cir":"5000", + "cbs":"5000", + "pir":"15000", + "pbs":"15000", + "yellow_packet_action":"forward", + "green_packet_action":"forward" + }] + } + } + }, + + "POLICER_MANDATORY_MODE": { + "sonic-policer:sonic-policer": { + "sonic-policer:POLICER": { + "POLICER_LIST": [{ + "name": "everflow_session1_policer", + "meter_type":"packets", + "cir":"5000", + "cbs":"5000", + "red_packet_action":"drop" + }] + } + } + }, + + "POLICER_MANDATORY_METER_TYPE": { + "sonic-policer:sonic-policer": { + "sonic-policer:POLICER": { + "POLICER_LIST": [{ + "name": "everflow_session2_policer", + "mode":"sr_tcm", + "cir":"5000", + "cbs":"5000", + "red_packet_action":"drop" + }] + } + } + }, + + "POLICER_UNKNOWN_METER_TYPE": { + "sonic-policer:sonic-policer": { + "sonic-policer:POLICER": { + "POLICER_LIST": [{ + "name": "everflow_session4_policer", + "mode":"sr_tcm", + "meter_type":"bits", + "cir":"5000", + "cbs":"5000", + "red_packet_action":"drop" + }] + } + } + }, + + "POLICER_UNKNOWN_MODE": { + "sonic-policer:sonic-policer": { + "sonic-policer:POLICER": { + "POLICER_LIST": [{ + "name": "everflow_session5_policer", + "mode":"srtcm", + "meter_type":"bytes", + "cir":"5000", + "cbs":"5000", + "red_packet_action":"drop" + }] + } + } + }, + + "POLICER_UNKNOWN_ACTION": { + "sonic-policer:sonic-policer": { + "sonic-policer:POLICER": { + "POLICER_LIST": [{ + "name": "everflow_session6_policer", + "mode":"storm", + "meter_type":"bytes", + "cir":"5000", + "cbs":"5000", + "color":"aware", + "red_packet_action":"act" + }] + } + } + }, + + "POLICER_UNKNOWN_COLOR": { + "sonic-policer:sonic-policer": { + "sonic-policer:POLICER": { + "POLICER_LIST": [{ + "name": "everflow_session7_policer", + "mode":"sr_tcm", + "meter_type":"bytes", + "cir":"5000", + "cbs":"5000", + "red_packet_action":"drop", + "color":"yes" + }] + } + } + }, + + "POLICER_CBS_WITHOUT_CIR": { + "sonic-policer:sonic-policer": { + "sonic-policer:POLICER": { + "POLICER_LIST": [{ + "name": "p5", + "meter_type":"bytes", + "mode":"tr_tcm", + "cbs":"5000", + "pir":"4000", + "pbs":"4000", + "red_packet_action":"drop" + }] + } + } + }, + + "POLICER_CBS_LESS_THAN_CIR": { + "sonic-policer:sonic-policer": { + "sonic-policer:POLICER": { + "POLICER_LIST": [{ + "name": "policer5", + "meter_type":"bytes", + "mode":"sr_tcm", + "cbs":"5000", + "cir":"6000", + "red_packet_action":"drop" + }] + } + } + }, + + "POLICER_PIR_LESS_THAN_CIR": { + "sonic-policer:sonic-policer": { + "sonic-policer:POLICER": { + "POLICER_LIST": [{ + "name": "e3_policer", + "meter_type":"bytes", + "mode":"tr_tcm", + "cir":"5000", + "cbs":"5000", + "pir":"4000", + "pbs":"4000", + "red_packet_action":"drop" + }] + } + } + }, + + "POLICER_PBS_WITH_STORM": { + "sonic-policer:sonic-policer": { + "sonic-policer:POLICER": { + "POLICER_LIST": [{ + "name": "e1policer", + "meter_type":"bytes", + "mode":"storm", + "cir":"5000", + "cbs":"5000", + "pbs":"6000", + "red_packet_action":"drop" + }] + } + } + }, + + "POLICER_PBS_LESS_THAN_CBS": { + "sonic-policer:sonic-policer": { + "sonic-policer:POLICER": { + "POLICER_LIST": [{ + "name": "e2policer", + "meter_type":"bytes", + "mode":"tr_tcm", + "cir":"5000", + "cbs":"5000", + "pbs":"2000", + "red_packet_action":"drop" + }] + } + } + }, + + "POLICER_PIR_WITHOUT_CIR": { + "sonic-policer:sonic-policer": { + "sonic-policer:POLICER": { + "POLICER_LIST": [{ + "name": "e3policer", + "meter_type":"bytes", + "mode":"tr_tcm", + "pir":"2000", + "red_packet_action":"drop" + }] + } + } + }, + + "POLICER_WHEN_SRTCM_WITH_PIR": { + "sonic-policer:sonic-policer": { + "sonic-policer:POLICER": { + "POLICER_LIST": [{ + "name": "policer1", + "meter_type":"packets", + "mode":"sr_tcm", + "cir":"6000", + "cbs":"6000", + "pir":"6000", + "red_packet_action":"drop" + }] + } + } + } +} 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 5d7fff2cd878..e1549261cb92 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 @@ -314,5 +314,76 @@ ] } } + }, + + "PORT_VALID_MULTIASIC_TEST": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "name": "Ethernet8", + "alias": "eth8", + "lanes": "65", + "speed": 50000, + "index": "0", + "asic_port_name": "Eth8-ASIC1", + "role": "Ext" + }, + { + "name": "Ethernet9", + "alias": "eth9", + "lanes": "66", + "speed": 50000, + "index": "1", + "asic_port_name": "Eth9-ASIC1" + }, + { + "name": "Ethernet10", + "alias": "eth10", + "lanes": "67", + "speed": 50000, + "index": "2", + "asic_port_name": "Eth10-ASIC1", + "role": "Int" + }, + { + "name": "Ethernet11", + "alias": "eth11", + "lanes": "68", + "speed": 50000, + "index": "3", + "asic_port_name": "Eth11-ASIC1", + "role": "Inb" + }, + { + "name": "Ethernet12", + "alias": "eth12", + "lanes": "69", + "speed": 50000, + "index": "4", + "asic_port_name": "Eth12-ASIC1", + "role": "Rec" + } + ] + } + } + }, + + "PORT_INVALID_MULTIASIC_TEST": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "name": "Ethernet8", + "alias": "eth8", + "lanes": "65", + "speed": 50000, + "index": "0", + "asic_port_name": "Eth8-ASIC1", + "role": "Invalid" + } + ] + } + } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/qos.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/qos.json index 481990b4d657..67775b11db81 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/qos.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/qos.json @@ -116,7 +116,45 @@ } } }, - + + "SCHEDULER_VALID_NAME": { + "sonic-scheduler:sonic-scheduler":{ + "sonic-scheduler:SCHEDULER": { + "SCHEDULER_LIST": [ + { + "name":"scheduler.0", + "cbs": 256, + "cir": 1250000, + "meter_type": "bytes", + "pbs": 1024, + "pir": 25000000, + "type": "DWRR", + "weight": 10 + }, + { + "name":"scheduler.1", + "cbs": 1024, + "cir": 1280000, + "meter_type": "bytes", + "pbs": 2048, + "pir": 2560000, + "type": "STRICT", + "priority": 0 + }, + { + "name":"scheduler.2", + "cbs": 256, + "cir": 1250000, + "meter_type": "bytes", + "pbs": 1024, + "pir": 25000000, + "type": "WRR", + "weight": 20 + } + ] + } + } + }, "WRED_PROFILE_EMPTY": { "sonic-wred-profile:sonic-wred-profile":{ 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 fe085ee3c7f9..991675bc3979 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 @@ -621,7 +621,8 @@ "pfc_to_pg_map": "map1", "dscp_to_tc_map": "map1", "dot1p_to_tc_map": "map1", - "pfc_enable": "3,4" + "pfc_enable": "3,4", + "pfcwd_sw_enable" : "3,4" } ] } @@ -657,7 +658,8 @@ "pfc_to_pg_map": "map2", "dscp_to_tc_map": "map2", "dot1p_to_tc_map": "map2", - "pfc_enable": "3,4" + "pfc_enable": "3,4", + "pfcwd_sw_enable" : "3,4" } ] } @@ -714,7 +716,8 @@ "PORT_QOS_MAP_LIST": [ { "ifname": "Ethernet4", - "pfc_enable": "8" + "pfc_enable": "8", + "pfcwd_sw_enable" : "8" } ] } 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 f95b1af8f049..8adff73e497c 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 @@ -31,6 +31,38 @@ } } }, + "VLAN_SUB_INTERFACE_SHORT_NAME_FORMAT_MUST_CONDITION_TRUE_TEST": { + "sonic-vlan-sub-interface:sonic-vlan-sub-interface": { + "sonic-vlan-sub-interface:VLAN_SUB_INTERFACE": { + "VLAN_SUB_INTERFACE_LIST": [ + { + "name": "Eth8.10" + } + ], + "VLAN_SUB_INTERFACE_IPPREFIX_LIST": [ + { + "name": "Eth8.10", + "ip-prefix": "10.0.0.1/30" + } + ] + } + }, + "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 + } + ] + } + } + }, "VLAN_SUB_INTERFACE_MUST_CONDITION_FALSE_TEST": { "sonic-vlan-sub-interface:sonic-vlan-sub-interface": { "sonic-vlan-sub-interface:VLAN_SUB_INTERFACE": { @@ -63,6 +95,188 @@ } } }, + "VLAN_SUB_INTERFACE_SHORT_NAME_FORMAT_MUST_CONDITION_FALSE_TEST": { + "sonic-vlan-sub-interface:sonic-vlan-sub-interface": { + "sonic-vlan-sub-interface:VLAN_SUB_INTERFACE": { + "VLAN_SUB_INTERFACE_LIST": [ + { + "name": "Eth8.10" + } + ], + "VLAN_SUB_INTERFACE_IPPREFIX_LIST": [ + { + "name": "Eth8.10", + "ip-prefix": "10.0.0.1/30" + } + ] + } + }, + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "name": "Ethernet12", + "admin_status": "up", + "alias": "Ethernet12/1", + "description": "Ethernet12", + "lanes": "49,50,51,52", + "mtu": 9000, + "speed": 100000 + } + ] + } + } + }, + "VLAN_SUB_INTERFACE_PO_SHORT_NAME_FORMAT_MUST_CONDITION_TRUE_TEST": { + "sonic-vlan-sub-interface:sonic-vlan-sub-interface": { + "sonic-vlan-sub-interface:VLAN_SUB_INTERFACE": { + "VLAN_SUB_INTERFACE_LIST": [ + { + "name": "Po0001.10" + } + ], + "VLAN_SUB_INTERFACE_IPPREFIX_LIST": [ + { + "name": "Po0001.10", + "ip-prefix": "10.0.0.1/30" + } + ] + } + }, + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "admin_status": "up", + "alias": "eth0", + "description": "Ethernet0", + "lanes": "65", + "mtu": 9000, + "name": "Ethernet0", + "tpid": "0x8100", + "speed": 25000 + } + ] + } + }, + "sonic-portchannel:sonic-portchannel": { + "sonic-portchannel:PORTCHANNEL": { + "PORTCHANNEL_LIST": [ + { + "admin_status": "up", + "members": [ + "Ethernet0" + ], + "min_links": "1", + "mtu": "9100", + "tpid": "0x8100", + "lacp_key": "auto", + "name": "PortChannel0001" + } + ] + } + } + }, + "VLAN_SUB_INTERFACE_PO_MUST_CONDITION_FALSE_TEST": { + "sonic-vlan-sub-interface:sonic-vlan-sub-interface": { + "sonic-vlan-sub-interface:VLAN_SUB_INTERFACE": { + "VLAN_SUB_INTERFACE_LIST": [ + { + "name": "PortChannel0001.10" + } + ], + "VLAN_SUB_INTERFACE_IPPREFIX_LIST": [ + { + "name": "PortChannel0001.10", + "ip-prefix": "10.0.0.1/30" + } + ] + } + }, + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "admin_status": "up", + "alias": "eth0", + "description": "Ethernet0", + "lanes": "65", + "mtu": 9000, + "name": "Ethernet0", + "tpid": "0x8100", + "speed": 25000 + } + ] + } + }, + "sonic-portchannel:sonic-portchannel": { + "sonic-portchannel:PORTCHANNEL": { + "PORTCHANNEL_LIST": [ + { + "admin_status": "up", + "members": [ + "Ethernet0" + ], + "min_links": "1", + "mtu": "9100", + "tpid": "0x8100", + "lacp_key": "auto", + "name": "PortChannel0001" + } + ] + } + } + }, + "VLAN_SUB_INTERFACE_PO_SHORT_NAME_FORMAT_MUST_CONDITION_FALSE_TEST": { + "sonic-vlan-sub-interface:sonic-vlan-sub-interface": { + "sonic-vlan-sub-interface:VLAN_SUB_INTERFACE": { + "VLAN_SUB_INTERFACE_LIST": [ + { + "name": "Po0002.10" + } + ], + "VLAN_SUB_INTERFACE_IPPREFIX_LIST": [ + { + "name": "Po0002.10", + "ip-prefix": "10.0.0.1/30" + } + ] + } + }, + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "admin_status": "up", + "alias": "eth0", + "description": "Ethernet0", + "lanes": "65", + "mtu": 9000, + "name": "Ethernet0", + "tpid": "0x8100", + "speed": 25000 + } + ] + } + }, + "sonic-portchannel:sonic-portchannel": { + "sonic-portchannel:PORTCHANNEL": { + "PORTCHANNEL_LIST": [ + { + "admin_status": "up", + "members": [ + "Ethernet0" + ], + "min_links": "1", + "mtu": "9100", + "tpid": "0x8100", + "lacp_key": "auto", + "name": "PortChannel0001" + } + ] + } + } + }, "VLAN_SUB_INTERFACE_IP_PREFIX_PORT_NON_EXISTING_LEAF_TEST": { "sonic-vlan-sub-interface:sonic-vlan-sub-interface": { "sonic-vlan-sub-interface:VLAN_SUB_INTERFACE": { diff --git a/src/sonic-yang-models/yang-models/sonic-bgp-allowed-prefix.yang b/src/sonic-yang-models/yang-models/sonic-bgp-allowed-prefix.yang new file mode 100644 index 000000000000..942387983775 --- /dev/null +++ b/src/sonic-yang-models/yang-models/sonic-bgp-allowed-prefix.yang @@ -0,0 +1,102 @@ +module sonic-bgp-allowed-prefix { + namespace "http://github.com/Azure/sonic-bgp-allowed-prefix"; + prefix bgppre; + yang-version 1.1; + + import sonic-bgp-common { + prefix bgpcmn; + } + + import ietf-inet-types { + prefix inet; + } + + import sonic-routing-policy-sets { + prefix rpolsets; + } + + organization + "SONiC"; + + contact + "SONiC"; + + description + "SONIC BGP Allowed Prefix"; + + revision 2022-02-26 { + description + "Initial revision."; + } + + container sonic-bgp-allowed-prefix { + container BGP_ALLOWED_PREFIXES { + list BGP_ALLOWED_PREFIXES_COM_LIST { + key "deployment id community"; + + leaf deployment { + type string { + pattern "DEPLOYMENT_ID"; + } + description "BGP allowed prefix list key type"; + } + + leaf id { + type uint32; + description "BGP allowed prefix list deployment id"; + } + + leaf community { + type string; + description "BGP allowed prefix list deployment community"; + } + + leaf default_action { + type rpolsets:routing-policy-action-type; + description "Permit/Deny action for BGP allow prefix list"; + } + + leaf-list prefixes_v4 { + type inet:ipv4-prefix; + description "BGP V4 allowed prefix list"; + } + + leaf-list prefixes_v6 { + type inet:ipv6-prefix; + description "BGP V6 allowed prefix list"; + } + } + + list BGP_ALLOWED_PREFIXES_LIST { + key "deployment id"; + + leaf deployment { + type string { + pattern "DEPLOYMENT_ID"; + } + description "BGP allowed prefix list key type"; + } + + leaf id { + type uint32; + description "BGP allowed prefix list deployment id"; + } + + leaf default_action { + type rpolsets:routing-policy-action-type; + description "Permit/Deny action for BGP allow prefix list"; + } + + leaf-list prefixes_v4 { + type inet:ipv4-prefix; + description "BGP V4 allowed prefix list"; + } + + leaf-list prefixes_v6 { + type inet:ipv6-prefix; + description "BGP V6 allowed prefix list"; + } + } + } + } +} diff --git a/src/sonic-yang-models/yang-models/sonic-bgp-peerrange.yang b/src/sonic-yang-models/yang-models/sonic-bgp-peerrange.yang new file mode 100644 index 000000000000..88d39d82d68c --- /dev/null +++ b/src/sonic-yang-models/yang-models/sonic-bgp-peerrange.yang @@ -0,0 +1,64 @@ +module sonic-bgp-peerrange { + namespace "http://github.com/Azure/sonic-bgp-peerrange"; + prefix pr; + yang-version 1.1; + + import ietf-inet-types { + prefix inet; + } + + import sonic-types { + prefix stypes; + } + + organization + "SONiC"; + + contact + "SONiC"; + + description + "SONIC BGP Peer Range YANG"; + + revision 2022-02-24 { + description + "Initial revision."; + } + + container sonic-bgp-peerrange { + container BGP_PEER_RANGE { + list BGP_PEER_RANGE_LIST { + key "peer_range_name"; + + leaf peer_range_name { + type string; + description "Peer range name"; + } + + leaf name { + type string; + must "(current() = current()/../peer_range_name)" { + error-message "Invalid name"; + } + } + + leaf src_address { + type inet:ip-address; + description "Source address to use for connection"; + } + + leaf peer_asn { + type uint32 { + range "1..4294967295"; + } + description "Peer AS number"; + } + + leaf-list ip_range { + type stypes:sonic-ip-prefix; + description "A range of addresses"; + } + } + } + } +} diff --git a/src/sonic-yang-models/yang-models/sonic-buffer-pg.yang b/src/sonic-yang-models/yang-models/sonic-buffer-pg.yang index efe6e34ad0d6..60d06bf6ef6c 100644 --- a/src/sonic-yang-models/yang-models/sonic-buffer-pg.yang +++ b/src/sonic-yang-models/yang-models/sonic-buffer-pg.yang @@ -2,9 +2,7 @@ module sonic-buffer-pg { namespace "http://github.com/Azure/sonic-buffer-pg"; prefix bpg; - import sonic-extension { - prefix sonic-ext; - } + yang-version 1.1; import sonic-port { prefix prt; @@ -54,8 +52,13 @@ module sonic-buffer-pg { leaf profile { default 0; - type leafref { - path "/bpf:sonic-buffer-profile/bpf:BUFFER_PROFILE/bpf:BUFFER_PROFILE_LIST/bpf:name"; + type union { + type leafref { + path "/bpf:sonic-buffer-profile/bpf:BUFFER_PROFILE/bpf:BUFFER_PROFILE_LIST/bpf:name"; + } + type string { + pattern "NULL"; + } } description "Buffer Profile associated with Priority Group number for a port"; } diff --git a/src/sonic-yang-models/yang-models/sonic-copp.yang b/src/sonic-yang-models/yang-models/sonic-copp.yang index c869b439faa9..d735150a5c40 100644 --- a/src/sonic-yang-models/yang-models/sonic-copp.yang +++ b/src/sonic-yang-models/yang-models/sonic-copp.yang @@ -40,7 +40,7 @@ module sonic-copp { leaf trap_action { mandatory true; - type stypes:copp_packet_action; + type stypes:policer_packet_action; description "Trap action"; } @@ -61,12 +61,8 @@ module sonic-copp { } leaf color { - type enumeration { - enum blind; - enum color; - } - default "color"; - description "Policer color source"; + type stypes:policer_color_source; + description "Policer color Source"; } leaf cir { @@ -120,20 +116,20 @@ module sonic-copp { } leaf green_action { - type stypes:copp_packet_action; + type stypes:policer_packet_action; default "forward"; description "Green action"; } leaf yellow_action { when "((current()/../mode = 'sr_tcm') or (current()/../mode = 'tr_tcm'))"; - type stypes:copp_packet_action; + type stypes:policer_packet_action; default "forward"; description "Yellow action"; } leaf red_action { - type stypes:copp_packet_action; + type stypes:policer_packet_action; default "forward"; description "Red action"; } diff --git a/src/sonic-yang-models/yang-models/sonic-device_metadata.yang b/src/sonic-yang-models/yang-models/sonic-device_metadata.yang index 32e6b063e5b1..17241005861e 100644 --- a/src/sonic-yang-models/yang-models/sonic-device_metadata.yang +++ b/src/sonic-yang-models/yang-models/sonic-device_metadata.yang @@ -88,7 +88,7 @@ module sonic-device_metadata { leaf type { type string { length 1..255; - pattern "ToRRouter|LeafRouter|SpineChassisFrontendRouter|ChassisBackendRouter|ASIC|MgmtToRRouter|SpineRouter|BackEndToRRouter|BackEndLeafRouter|EPMS|MgmtTsToR"; + pattern "ToRRouter|LeafRouter|SpineChassisFrontendRouter|ChassisBackendRouter|ASIC|MgmtToRRouter|SpineRouter|BackEndToRRouter|BackEndLeafRouter|EPMS|MgmtTsToR|BmcMgmtToRRouter|not-provisioned"; } } @@ -127,6 +127,11 @@ module sonic-device_metadata { type string; } + leaf sub_role { + type string; + description "sub_role indicates if ASIC is FrontEnd or BackEnd."; + } + leaf downstream_subrole { type string; } @@ -135,6 +140,11 @@ module sonic-device_metadata { type string; } + leaf cluster { + type string; + description "The switch is a member of this cluster."; + } + leaf subtype { type string { pattern "DualToR"; @@ -148,6 +158,36 @@ module sonic-device_metadata { leaf storage_device { type boolean; } + + leaf asic_name { + type string; + description "On a VoQ switch, the ASIC Name is used as a qualifier in global + database keys to create a system wide unique key."; + } + + leaf switch_id { + type uint16; + description "Vendor specific switch ID. Identifies switch chip."; + } + + leaf switch_type { + type string { + pattern "chassis-packet|fabric|npu|voq"; + } + description "Type of switch. Default is NPU, on a VOQ switch voq is used for a regular + switching device while fabric is used for a fabric device. + chassis-packet is used for chassis in packet mode."; + } + + leaf max_cores { + type uint8; + description "Maximum number of cores in a VoQ Switch (chassis)."; + } + + leaf dhcp_server { + type stypes:admin_mode; + description "Indicate whether enable the embedded DHCP server."; + } } /* end of container localhost */ } diff --git a/src/sonic-yang-models/yang-models/sonic-flex_counter.yang b/src/sonic-yang-models/yang-models/sonic-flex_counter.yang index 8e958af2f427..9ced223e94bc 100644 --- a/src/sonic-yang-models/yang-models/sonic-flex_counter.yang +++ b/src/sonic-yang-models/yang-models/sonic-flex_counter.yang @@ -5,6 +5,10 @@ module sonic-flex_counter { namespace "http://github.com/Azure/sonic-flex_counter"; prefix flex_counter; + import ietf-inet-types { + prefix inet; + } + import sonic-types { prefix stypes; } @@ -211,8 +215,69 @@ module sonic-flex_counter { } } + container FLOW_CNT_ROUTE { + /* ROUTE_FLEX_COUNTER_GROUP */ + leaf FLEX_COUNTER_STATUS { + type flex_status; + } + leaf FLEX_COUNTER_DELAY_STATUS { + type flex_delay_status; + } + leaf POLL_INTERVAL { + type poll_interval; + } + } + } /* end of container FLEX_COUNTER_TABLE */ + + container FLOW_COUNTER_ROUTE_PATTERN { + description "Flow counter route pattern of config_db.json"; + + list FLOW_COUNTER_ROUTE_PATTERN_LIST { + + key "ip_prefix"; + + leaf ip_prefix { + type inet:ip-prefix; + } + + leaf max_match_count { + type uint32 { + range 1..50; + } + } + + } + + list FLOW_COUNTER_ROUTE_PATTERN_VRF_LIST { + + key "vrf_name ip_prefix"; + + leaf vrf_name { + /* + We don't use vrf_name reference here because: + 1. User is allowed to configure a VRF that does not exist yet here, orchagent is designed to resolve the VRF name once the VRF is created. + 2. The field vrf_name accept both VRF name and VNET name. + */ + type string { + length 0..16; + } + } + + leaf ip_prefix { + type inet:ip-prefix; + } + + leaf max_match_count { + type uint32 { + range 1..50; + } + } + + } + } + /* end of container FLOW_COUNTER_ROUTE_PATTERN */ } /* end of top level container */ } diff --git a/src/sonic-yang-models/yang-models/sonic-lldp.yang b/src/sonic-yang-models/yang-models/sonic-lldp.yang index d1b04f28e93b..a3620f30fe67 100644 --- a/src/sonic-yang-models/yang-models/sonic-lldp.yang +++ b/src/sonic-yang-models/yang-models/sonic-lldp.yang @@ -28,6 +28,7 @@ module sonic-lldp { grouping lldp_mode_config { leaf enabled { type boolean; + default true; description "Enable/Disable LLDP"; } @@ -99,24 +100,7 @@ module sonic-lldp { "Suppress sending of System Capabilities TLV in LLDP frames"; } - leaf enabled { - type boolean; - default true; - description - "Enable/Disable LLDP"; - } - - leaf mode { - type enumeration { - enum RECEIVE; - enum TRANSMIT; - } - - description - "RX/TX mode for LLDP frames"; - } - - //uses lldp_mode_config; + uses lldp_mode_config; } } @@ -132,23 +116,7 @@ module sonic-lldp { "Reference of port on which LLDP to be configured."; } - leaf enabled { - type boolean; - default true; - description - "Enable/Disable LLDP"; - } - - leaf mode { - type enumeration { - enum RECEIVE; - enum TRANSMIT; - } - - description - "RX/TX mode for LLDP frames"; - } - //uses lldp_mode_config; + uses lldp_mode_config; } } } diff --git a/src/sonic-yang-models/yang-models/sonic-macsec.yang b/src/sonic-yang-models/yang-models/sonic-macsec.yang new file mode 100644 index 000000000000..4e3412f86a3d --- /dev/null +++ b/src/sonic-yang-models/yang-models/sonic-macsec.yang @@ -0,0 +1,116 @@ +module sonic-macsec { + + yang-version 1.1; + + namespace "http://github.com/Azure/sonic-macsec"; + + prefix macsec; + + import sonic-types { + prefix stypes; + } + + description "MACsec yang Module for SONiC OS"; + + revision 2022-04-12 { + description "First Revision"; + } + + container sonic-macsec { + + container MACSEC_PROFILE { + + description "MACsec profile of config_db.json"; + + list MACSEC_PROFILE_LIST { + + key "name"; + + leaf name { + type string { + length 1..128; + } + } + + leaf priority { + type uint8; + default 255; + } + + leaf cipher_suite { + type string { + pattern "GCM-AES-128|GCM-AES-256|GCM-AES-XPN-128|GCM-AES-XPN-256"; + } + default "GCM-AES-128"; + } + + leaf primary_cak { + type string { + pattern "[0-9a-fA-F]{32}|[0-9a-fA-F]{64}"; + } + mandatory true; + } + + leaf primary_ckn { + type string { + pattern "[0-9a-fA-F]{32}|[0-9a-fA-F]{64}"; + } + mandatory true; + } + + leaf fallback_cak { + type string { + pattern "[0-9a-fA-F]{32}|[0-9a-fA-F]{64}"; + } + } + + leaf fallback_ckn { + type string { + pattern "[0-9a-fA-F]{32}|[0-9a-fA-F]{64}"; + } + } + + must "string-length(primary_cak) = string-length(primary_ckn)"; + + must "string-length(fallback_cak) = string-length(fallback_ckn)"; + + must "string-length(fallback_cak) = string-length(primary_cak)"; + + must "primary_ckn != fallback_ckn"; + + leaf policy { + type string { + pattern "integrity_only|security"; + } + default "security"; + } + + leaf enable_replay_protect { + type stypes:boolean_type; + default "false"; + } + + leaf replay_window { + when "current()/../enable_replay_protect = 'true'"; + type uint32; + } + + leaf send_sci { + type stypes:boolean_type; + default "true"; + } + + leaf rekey_period { + description "The period of proactively refresh (Unit second). + If the value is 0, which means never proactive refresh SAK."; + type uint32; + default 0; + } + + } /* end of list MACSEC_PROFILE_LIST */ + + } /* end of container MACSEC_PROFILE */ + + } /* end of container sonic-macsec */ + +} /* end of module sonic-macsec */ diff --git a/src/sonic-yang-models/yang-models/sonic-mclag.yang b/src/sonic-yang-models/yang-models/sonic-mclag.yang new file mode 100644 index 000000000000..39e4c0b2b46f --- /dev/null +++ b/src/sonic-yang-models/yang-models/sonic-mclag.yang @@ -0,0 +1,172 @@ +module sonic-mclag { + namespace "http://github.com/Azure/sonic-mclag"; + prefix smclag; + yang-version 1.1; + + + import ietf-yang-types { + prefix yang; + } + + import ietf-inet-types { + prefix inet; + } + + import sonic-types { + prefix stypes; + } + + import sonic-port { + prefix prt; + } + + import sonic-portchannel { + prefix lag; + } + + // Comment sonic-vlan import here until libyang back-links issue is resolved for VLAN leaf reference. + //import sonic-vlan { + // prefix vlan; + //} + + organization + "SONiC"; + + contact + "SONiC"; + + description + "SONIC MCLAG"; + + revision 2019-10-01 { + description + "Initial revision."; + } + + container sonic-mclag { + + container MCLAG_DOMAIN { + + list MCLAG_DOMAIN_LIST { + key "domain_id"; + max-elements 1; + + leaf domain_id { + description "MCLAG Domain ID"; + type uint16 { + range "1..4095" { + error-message "MCLAG Domain ID out of range"; + } + } + } + + leaf source_ip { + type inet:ipv4-address; + description "MCLAG Domain source ip address for session between MCLAG Peers"; + } + leaf peer_ip { + type inet:ipv4-address; + description "MCLAG Domain peer ip address for session between MCLAG Peers"; + } + leaf peer_link { + description "MCLAG Domain peer link, data backup path link between MCLAG peers"; + type union { + type leafref { + path "/prt:sonic-port/prt:PORT/prt:PORT_LIST/prt:name"; + } + type leafref { + path "/lag:sonic-portchannel/lag:PORTCHANNEL/lag:PORTCHANNEL_LIST/lag:name"; + } + } + } + leaf keepalive_interval { + description "keepalive interval in seconds for MCLAG session between peers"; + type uint16 { + range "1..60" { + error-message "MCLAG Domain keepalive interval out of range"; + error-app-tag keepalive_interval-invalid; + } + } + default 1; + } + leaf session_timeout { + description "Session timeout in seconds for MCLAG session between peers"; + type uint16 { + range "1..3600" { + error-message "MCLAG Domain session timeout out of range"; + error-app-tag session_timeout-invalid; + } + } + default 30; + } + must "(keepalive_interval * 3) <= session_timeout" { + error-message "(keepalive interval * 3) <= session_timeout value"; + error-app-tag keepalive_session_multiplier-invalid; + } + } + } + + container MCLAG_INTERFACE { + + list MCLAG_INTERFACE_LIST { + description "List of MCLAG interfaces"; + key "domain_id if_name"; + + leaf domain_id { + description "List of MCLAG interfaces"; + type leafref { + path "../../../MCLAG_DOMAIN/MCLAG_DOMAIN_LIST/domain_id"; + } + } + + leaf if_name { + description "MCLAG interface name"; + type leafref { + path "/lag:sonic-portchannel/lag:PORTCHANNEL/lag:PORTCHANNEL_LIST/lag:name"; + } + } + leaf if_type { + description "MCLAG interface type, placeholder field to create instance"; + type string; + } + } + } + + container MCLAG_UNIQUE_IP { + + list MCLAG_UNIQUE_IP_LIST { + description "List of VLANs allowed to have unique ip addresses on MCLAG Peer nodes"; + key "if_name"; + + must "count(../../MCLAG_DOMAIN/MCLAG_DOMAIN_LIST/domain_id) != 0" { + error-message "mclag not configured"; + error-app-tag mclag-invalid; + } + + // Comment VLAN leaf reference here until libyang back-links issue is resolved and use VLAN string pattern + //must + // "count(/vlan:sonic-vlan/vlan:VLAN_INTERFACE/vlan:VLAN_INTERFACE_IPPREFIX_LIST[vlan:name=current()/if_name]) = 0" { + // error-message "remove configured ip/v6 address and reconfigure after separate ip configuration"; + // error-app-tag vlan-intf-ip-invalid; + // } + + leaf if_name { + description "Vlan interface name on which MCLAG unique ip config is done"; + // Comment VLAN leaf reference here until libyang back-links issue is resolved and use VLAN string pattern + //type leafref { + // path "/vlan:sonic-vlan/vlan:VLAN/vlan:VLAN_LIST/vlan:name"; + //} + type string { + pattern 'Vlan([0-9]{1,3}|[1-3][0-9]{3}|[4][0][0-8][0-9]|[4][0][9][0-4])'; + } + } + leaf unique_ip { + description "unique ip enable, by default disable"; + type enumeration { + enum enable; + } + } + } + } + } +} diff --git a/src/sonic-yang-models/yang-models/sonic-mirror-session.yang b/src/sonic-yang-models/yang-models/sonic-mirror-session.yang index 7a9afcd1ae48..9ea1954d7a37 100644 --- a/src/sonic-yang-models/yang-models/sonic-mirror-session.yang +++ b/src/sonic-yang-models/yang-models/sonic-mirror-session.yang @@ -17,6 +17,10 @@ module sonic-mirror-session { prefix lag; } + import sonic-policer { + prefix policer; + } + description "SONiC Mirror session yang model"; @@ -95,7 +99,7 @@ module sonic-mirror-session { leaf gre_type { when "current()/../type = 'ERSPAN'"; type string { - pattern "0[xX][0-9a-fA-F]*"; + pattern "0[xX][0-9a-fA-F]*|([0-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]{2}|655[1-2][0-9]|6553[0-5])"; length 1..6 { error-message "Invalid GRE type"; error-app-tag gre-type-invalid; @@ -174,6 +178,14 @@ module sonic-mirror-session { TX: Captures frames egressing on source port. BOTH: Captures frames ingressing or egressing on source port."; } + + leaf policer { + type leafref { + path "/policer:sonic-policer/policer:POLICER/policer:POLICER_LIST/policer:name"; + } + description + "Policer to be applied for the mirrored traffic."; + } } } } diff --git a/src/sonic-yang-models/yang-models/sonic-nvgre-tunnel.yang b/src/sonic-yang-models/yang-models/sonic-nvgre-tunnel.yang new file mode 100644 index 000000000000..b10c35d94043 --- /dev/null +++ b/src/sonic-yang-models/yang-models/sonic-nvgre-tunnel.yang @@ -0,0 +1,109 @@ +module sonic-nvgre-tunnel { + + yang-version 1.1; + + namespace "http://github.com/Azure/sonic-nvgre-tunnel"; + prefix nvgre; + + import ietf-inet-types { + prefix inet; + } + + organization + "SONiC"; + + contact + "SONiC"; + + description + "NVGRE Tunnel YANG Module for SONiC OS"; + + revision 2021-10-31 { + description + "First Revision"; + } + + container sonic-nvgre-tunnel { + + container NVGRE_TUNNEL { + + description "NVGRE_TUNNEL part of config_db.json"; + + list NVGRE_TUNNEL_LIST { + + key "tunnel_name"; + + leaf tunnel_name { + description "NVGRE Tunnel name"; + + type string { + length 1..255; + } + } + + leaf src_ip { + description "Source IP address"; + + mandatory true; + type inet:ip-address; + } + + } + /* end of NVGRE_TUNNEL_LIST */ + + } + /* end of container NVGRE_TUNNEL */ + + container NVGRE_TUNNEL_MAP { + + description "NVGRE_TUNNEL_MAP part of config_db.json"; + + list NVGRE_TUNNEL_MAP_LIST { + + key "tunnel_name tunnel_map_name"; + + leaf tunnel_name { + description "NVGRE Tunnel name"; + + type leafref { + path /nvgre:sonic-nvgre-tunnel/nvgre:NVGRE_TUNNEL/nvgre:NVGRE_TUNNEL_LIST/nvgre:tunnel_name; + } + } + + leaf tunnel_map_name { + description "NVGRE Tunnel map name"; + + type string { + length 1..255; + } + } + + leaf vlan_id { + description "VLAN identifier"; + + mandatory true; + type uint16 { + range 1..4094; + } + } + + leaf vsid { + description "Virtual Subnet Identifier"; + + mandatory true; + type uint32 { + range 0..16777214; + } + } + + } + /* end of NVGRE_TUNNEL_MAP_LIST */ + + } + /* end of container NVGRE_TUNNEL_MAP */ + + } + /* end of container sonic-nvgre-tunnel */ + +} +/* end of module sonic-nvgre-tunnel */ 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 b29e2f547087..8f4c2d88f4ed 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 @@ -81,6 +81,14 @@ module sonic-port-qos-map { } } + leaf pfcwd_sw_enable { + type string { + pattern "[0-7](,[0-7])?"; + } + description + "Specify the queue(s) on which software pfc watchdog are enabled."; + } + leaf pfc_to_queue_map { type leafref { path "/ppqm:sonic-pfc-priority-queue-map/ppqm:MAP_PFC_PRIORITY_TO_QUEUE/ppqm:MAP_PFC_PRIORITY_TO_QUEUE_LIST/ppqm:name"; diff --git a/src/sonic-yang-models/yang-models/sonic-port.yang b/src/sonic-yang-models/yang-models/sonic-port.yang index b2031688af75..add4de25ce0a 100644 --- a/src/sonic-yang-models/yang-models/sonic-port.yang +++ b/src/sonic-yang-models/yang-models/sonic-port.yang @@ -13,6 +13,10 @@ module sonic-port{ prefix ext; } + import sonic-macsec { + prefix macsec; + } + description "PORT yang Module for SONiC OS"; revision 2019-07-01 { @@ -110,9 +114,20 @@ module sonic-port{ } leaf index { - type uint16 { - range 0..256; + type uint16; + } + + leaf asic_port_name { + type string; + description "port name in asic and asic name, e.g Eth0-ASIC1"; + } + + leaf role { + type string { + pattern "Ext|Int|Inb|Rec"; } + description "Internal port or External port for multi-asic platform"; + default "Ext"; } leaf admin_status { @@ -142,6 +157,12 @@ module sonic-port{ type boolean; } + leaf macsec { + type leafref { + path "/macsec:sonic-macsec/macsec:MACSEC_PROFILE/macsec:MACSEC_PROFILE_LIST/macsec:name"; + } + } + } /* end of list PORT_LIST */ } /* end of container PORT */ diff --git a/src/sonic-yang-models/yang-models/sonic-scheduler.yang b/src/sonic-yang-models/yang-models/sonic-scheduler.yang index e6d1b7468f90..8dcd4bef79b2 100644 --- a/src/sonic-yang-models/yang-models/sonic-scheduler.yang +++ b/src/sonic-yang-models/yang-models/sonic-scheduler.yang @@ -31,14 +31,7 @@ module sonic-scheduler { key "name"; leaf name { - - type string { - pattern "[a-zA-Z0-9]{1}([-a-zA-Z0-9_]{0,31})|[a-zA-Z0-9]{1}([-a-zA-Z0-9_]{0,31})([@]{1})([0-9]{1,3})"; - length 1..36 { - error-message "Invalid length for scheduler name."; - error-app-tag scheduler-name-invalid-length; - } - } + type string; description "Scheduler name"; } diff --git a/src/sonic-yang-models/yang-models/sonic-system-aaa.yang b/src/sonic-yang-models/yang-models/sonic-system-aaa.yang index 5df05d475de3..c3a442126959 100644 --- a/src/sonic-yang-models/yang-models/sonic-system-aaa.yang +++ b/src/sonic-yang-models/yang-models/sonic-system-aaa.yang @@ -30,8 +30,12 @@ module sonic-system-aaa { } leaf login { - type string; - description "AAA authentication/authorization/accounting methods - local/tacacs+/disable"; + type string { + pattern '((tacacs\+|local|radius|default),)*(tacacs\+|local|radius|default)' { + error-message "Invalid login choice"; + } + } + description "AAA authentication/authorization/accounting methods - radius/tacacs+/local/default"; default "local"; } 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 6ce391033ab0..953aa7e14c80 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 @@ -14,6 +14,10 @@ module sonic-vlan-sub-interface { prefix port; } + import sonic-portchannel { + prefix lag; + } + import sonic-vrf { prefix vrf; } @@ -36,9 +40,13 @@ module sonic-vlan-sub-interface { key "name"; leaf name { - must "substring-before(current(), '.') = /port:sonic-port/port:PORT/port:PORT_LIST/port:name" + must "(substring-before(current(), '.') = /port:sonic-port/port:PORT/port:PORT_LIST/port:name) or " + + "(starts-with(substring-before(current(), '.'), 'Eth') and " + + "concat('Ethernet', substring-after(substring-before(current(), '.'), 'Eth')) = /port:sonic-port/port:PORT/port:PORT_LIST/port:name) or " + + "(starts-with(substring-before(current(), '.'), 'Po') and " + + "concat('PortChannel', substring-after(substring-before(current(), '.'), 'Po')) = /lag:sonic-portchannel/lag:PORTCHANNEL/lag:PORTCHANNEL_LIST/lag:name)" { - error-message "Must condition not satisfied, Try adding PORT: {}, Example: 'Ethernet0': {}"; + error-message "Must condition not satisfied, please follow vlan sub interface naming convention"; } // check if the vlan sub interface have the form as . 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 f38844d09fe8..2a527aa2bcf9 100644 --- a/src/sonic-yang-models/yang-templates/sonic-acl.yang.j2 +++ b/src/sonic-yang-models/yang-templates/sonic-acl.yang.j2 @@ -33,6 +33,10 @@ module sonic-acl { prefix lag; } + import sonic-mirror-session { + prefix sms; + } + description "ACL YANG Module for SONiC OS"; revision 2019-07-01 { @@ -65,11 +69,27 @@ module sonic-acl { type stypes:packet_action; } + /* Validating 'PACKET_ACTION' exist if ACL type is 'CTRLPLANE' */ + must "(not(../../ACL_TABLE/ACL_TABLE_LIST[ACL_TABLE_NAME=current()/ACL_TABLE_NAME]/type = 'CTRLPLANE')) or (boolean(PACKET_ACTION))"; + + leaf MIRROR_INGRESS_ACTION { + type leafref { + path "/sms:sonic-mirror-session/sms:MIRROR_SESSION/sms:MIRROR_SESSION_LIST/sms:name"; + } + } + + leaf MIRROR_EGRESS_ACTION { + type leafref { + path "/sms:sonic-mirror-session/sms:MIRROR_SESSION/sms:MIRROR_SESSION_LIST/sms:name"; + } + } + leaf IP_TYPE { type stypes:ip_type; } leaf PRIORITY { + mandatory true; type uint32 { range 0..999999; } @@ -152,7 +172,7 @@ module sonic-acl { leaf ETHER_TYPE { type string { - pattern "0x0[6-9a-fA-F][0-9a-fA-F]{2}|0x[1-9a-fA-F][0-9a-fA-F]{3}"; + pattern "0x0[6-9a-fA-F][0-9a-fA-F]{2}|0x[1-9a-fA-F][0-9a-fA-F]{3}|153[6-9]|15[4-9][0-9]|1[6-9][0-9][0-9]|[2-9][0-9]{3}|[1-5][0-9]{4}|6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}"; } } diff --git a/src/sonic-yang-models/yang-templates/sonic-policer.yang.j2 b/src/sonic-yang-models/yang-templates/sonic-policer.yang.j2 new file mode 100644 index 000000000000..a8c6f1445a46 --- /dev/null +++ b/src/sonic-yang-models/yang-templates/sonic-policer.yang.j2 @@ -0,0 +1,129 @@ +{% if yang_model_type == "cvl" %} +/* this is sonic cvl yang model */ +{% else %} +/* this is sonic py yang model */ +{% endif %} +module sonic-policer { + + yang-version 1.1; + + namespace "http://github.com/Azure/sonic-policer"; + prefix policer; + + import sonic-types { + prefix stypes; + } + + description "Policer YANG Module for SONiC OS"; + + revision 2022-02-03 { + description + "First Revision"; + } + + container sonic-policer { + container POLICER { + list POLICER_LIST { + key name; + + leaf name { + type string; + description "Policer name"; + } + + leaf meter_type { + mandatory true; + type stypes:meter_type; + description "Policer meter type"; + } + + leaf mode { + mandatory true; + type stypes:policer_mode; + description "Policer mode"; + } + + leaf color { + type stypes:policer_color_source; + description "Policer color Source"; + } + + leaf cir { + type uint64; + default 0; + description + "Committed information rate for the dual-rate token + bucket policer. This value represents the rate at which + tokens are added to the primary bucket. Unit is bytes/sec + or packets/sec based on meter_type"; + } + + leaf cbs { + must "((current()/../cir) and (current()/../cir > 0))" { + error-message "cbs can't be configured without cir."; + } + must "(current() >= current()/../cir)" { + error-message "cbs must be greater than or equal to cir"; + } + type uint64; + default 0; + description + "Committed burst size for the dual-rate token bucket + policer. This value represents the depth of the token + bucket. Unit is bytes or packets based on meter_type"; + } + + leaf pir { + when "current()/../mode = 'tr_tcm'"; + must "((current()/../cir) and (current()/../cir > 0))" { + error-message "pir can't be configured without cir."; + } + must "(current() >= current()/../cir)" { + error-message "pir must be greater than or equal to cir"; + } + type uint64; + description + "Peak information rate for the dual-rate token bucket + policer. This value represents the rate at which tokens + are added to the secondary bucket. Unit is bytes/sec or + packets/sec based on meter_type"; + } + + leaf pbs { + when "((current()/../mode = 'sr_tcm') or (current()/../mode = 'tr_tcm'))"; + must "((not(current()/../cbs)) or (current() >= current()/../cbs))" { + error-message "pbs must be greater than or equal to cbs"; + } + type uint64; + description + "Excess burst size for the dual-rate token bucket policer. + This value represents the depth of the secondary bucket. Unit + is bytes or packets based on meter_type"; + } + + leaf green_packet_action { + type stypes:policer_packet_action; + default "forward"; + description "Green action"; + } + + leaf yellow_packet_action { + when "((current()/../mode = 'sr_tcm') or (current()/../mode = 'tr_tcm'))"; + type stypes:policer_packet_action; + default "forward"; + description "Yellow action"; + } + + leaf red_packet_action { + type stypes:policer_packet_action; + default "forward"; + description "Red action"; + } + } + /* end of list POLICER_LIST */ + } + /* end of container POLICER */ + } + /* end of top level container */ +} +/* end of module sonic-policer */ 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 2388b487e0eb..da043fa8761d 100644 --- a/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 +++ b/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 @@ -205,7 +205,23 @@ module sonic-types { } } - typedef copp_packet_action { + typedef policer_mode { + type enumeration { + enum sr_tcm; + enum tr_tcm; + enum storm; + } + } + + typedef policer_color_source { + type enumeration { + enum aware; + enum blind; + } + } + + + typedef policer_packet_action { type enumeration { enum drop; enum forward; diff --git a/src/system-health/health_checker/manager.py b/src/system-health/health_checker/manager.py index f6bc31f874e5..b1c6dd15bec3 100644 --- a/src/system-health/health_checker/manager.py +++ b/src/system-health/health_checker/manager.py @@ -1,4 +1,3 @@ -from . import utils from .config import Config from .health_checker import HealthChecker from .service_checker import ServiceChecker @@ -10,14 +9,10 @@ class HealthCheckerManager(object): """ Manage all system health checkers and system health configuration. """ - STATE_BOOTING = 'booting' - STATE_RUNNING = 'running' boot_timeout = None def __init__(self): self._checkers = [] - self._state = self.STATE_BOOTING - self.config = Config() self.initialize() @@ -33,17 +28,11 @@ def check(self, chassis): """ Load new configuration if any and perform the system health check for all existing checkers. :param chassis: A chassis object. - :return: A tuple. The first element indicate the status of the checker; the second element is a dictionary that - contains the status for all objects that was checked. + :return: A dictionary that contains the status for all objects that was checked. """ HealthChecker.summary = HealthChecker.STATUS_OK stats = {} self.config.load_config() - # check state first to avoid user change boot timeout in configuration file - # after finishing system boot - if self._state == self.STATE_BOOTING and self._is_system_booting(): - self._set_system_led(chassis, self.config, 'booting') - return self._state, stats for checker in self._checkers: self._do_check(checker, stats) @@ -56,7 +45,7 @@ def check(self, chassis): led_status = 'normal' if HealthChecker.summary == HealthChecker.STATUS_OK else 'fault' self._set_system_led(chassis, self.config, led_status) - return self._state, stats + return stats def _do_check(self, checker, stats): """ @@ -86,15 +75,6 @@ def _do_check(self, checker, stats): else: stats['Internal'].update(entry) - def _is_system_booting(self): - uptime = utils.get_uptime() - if not self.boot_timeout: - self.boot_timeout = self.config.get_bootup_timeout() - booting = uptime < self.boot_timeout - if not booting: - self._state = self.STATE_RUNNING - return booting - def _set_system_led(self, chassis, config, status): try: chassis.set_status_led(config.get_led_color(status)) diff --git a/src/system-health/health_checker/service_checker.py b/src/system-health/health_checker/service_checker.py index 171f7e2e8b4d..6918da0b9f0e 100644 --- a/src/system-health/health_checker/service_checker.py +++ b/src/system-health/health_checker/service_checker.py @@ -51,6 +51,8 @@ def __init__(self): self.need_save_cache = False + self.config_db = None + self.load_critical_process_cache() def get_expected_running_containers(self, feature_table): @@ -218,7 +220,7 @@ def check_by_monit(self, config): output = utils.run_command(ServiceChecker.CHECK_CMD) lines = output.splitlines() if not lines or len(lines) < ServiceChecker.MIN_CHECK_CMD_LINES: - self.set_object_not_ok('Service', 'monit', 'output of \"monit summary -B\" is invalid or incompatible') + self.set_object_not_ok('Service', 'monit', 'monit service is not ready') return status_begin = lines[1].find('Status') @@ -248,9 +250,10 @@ def check_services(self, config): Args: config (config.Config): Health checker configuration. """ - config_db = swsscommon.ConfigDBConnector() - config_db.connect() - feature_table = config_db.get_table("FEATURE") + if not self.config_db: + self.config_db = swsscommon.ConfigDBConnector() + self.config_db.connect() + feature_table = self.config_db.get_table("FEATURE") expected_running_containers, self.container_feature_dict = self.get_expected_running_containers(feature_table) current_running_containers = self.get_current_running_containers() diff --git a/src/system-health/health_checker/utils.py b/src/system-health/health_checker/utils.py index f310002e1e5f..00e7754e1ec2 100644 --- a/src/system-health/health_checker/utils.py +++ b/src/system-health/health_checker/utils.py @@ -8,7 +8,7 @@ def run_command(command): :return: Output of the shell command. """ try: - process = subprocess.Popen(command, shell=True, universal_newlines=True, stdout=subprocess.PIPE) + process = subprocess.Popen(command, shell=True, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) return process.communicate()[0] except Exception: return None diff --git a/src/system-health/scripts/healthd b/src/system-health/scripts/healthd index da0258bb59e5..dd276df2fafd 100644 --- a/src/system-health/scripts/healthd +++ b/src/system-health/scripts/healthd @@ -18,7 +18,7 @@ SYSLOG_IDENTIFIER = 'healthd' class HealthDaemon(DaemonBase): """ - A daemon that run as a service to perform system health checker with a configurable interval. Also set system LED + A daemon that run as a service to perform system health checker with a configurable interval. Also set system LED according to the check result and store the check result to redis. """ SYSTEM_HEALTH_TABLE_NAME = 'SYSTEM_HEALTH_INFO' @@ -35,7 +35,7 @@ class HealthDaemon(DaemonBase): def deinit(self): """ Destructor. Remove all entries in $SYSTEM_HEALTH_TABLE_NAME table. - :return: + :return: """ self._clear_system_health_table() @@ -64,7 +64,7 @@ class HealthDaemon(DaemonBase): def run(self): """ Check system health in an infinite loop. - :return: + :return: """ self.log_notice("Starting up...") @@ -76,9 +76,8 @@ class HealthDaemon(DaemonBase): self.log_warning("System health configuration file not found, exit...") return while 1: - state, stat = manager.check(chassis) - if state == HealthCheckerManager.STATE_RUNNING: - self._process_stat(chassis, manager.config, stat) + stat = manager.check(chassis) + self._process_stat(chassis, manager.config, stat) if self.stop_event.wait(manager.config.interval): break diff --git a/src/system-health/tests/test_system_health.py b/src/system-health/tests/test_system_health.py index c7ff86c28b97..14d58c0f44b5 100644 --- a/src/system-health/tests/test_system_health.py +++ b/src/system-health/tests/test_system_health.py @@ -439,26 +439,14 @@ def test_config(): @patch('health_checker.user_defined_checker.UserDefinedChecker.get_info') @patch('health_checker.service_checker.ServiceChecker.get_info') @patch('health_checker.hardware_checker.HardwareChecker.get_info') -@patch('health_checker.utils.get_uptime') -def test_manager(mock_uptime, mock_hw_info, mock_service_info, mock_udc_info): +def test_manager(mock_hw_info, mock_service_info, mock_udc_info): chassis = MagicMock() chassis.set_status_led = MagicMock() manager = HealthCheckerManager() manager.config.user_defined_checkers = ['some check'] - assert manager._state == HealthCheckerManager.STATE_BOOTING assert len(manager._checkers) == 2 - mock_uptime.return_value = 200 - assert manager._is_system_booting() - state, stat = manager.check(chassis) - assert state == HealthCheckerManager.STATE_BOOTING - assert len(stat) == 0 - chassis.set_status_led.assert_called_with('orange_blink') - - mock_uptime.return_value = 500 - assert not manager._is_system_booting() - assert manager._state == HealthCheckerManager.STATE_RUNNING mock_hw_info.return_value = { 'ASIC': { 'type': 'ASIC', @@ -485,8 +473,7 @@ def test_manager(mock_uptime, mock_hw_info, mock_service_info, mock_udc_info): 'status': 'OK' } } - state, stat = manager.check(chassis) - assert state == HealthCheckerManager.STATE_RUNNING + stat = manager.check(chassis) assert 'Services' in stat assert stat['Services']['snmp:snmpd']['status'] == 'OK' @@ -500,7 +487,7 @@ def test_manager(mock_uptime, mock_hw_info, mock_service_info, mock_udc_info): mock_hw_info.side_effect = RuntimeError() mock_service_info.side_effect = RuntimeError() mock_udc_info.side_effect = RuntimeError() - state, stat = manager.check(chassis) + stat = manager.check(chassis) assert 'Internal' in stat assert stat['Internal']['ServiceChecker']['status'] == 'Not OK' assert stat['Internal']['HardwareChecker']['status'] == 'Not OK' @@ -518,6 +505,3 @@ def test_utils(): output = utils.run_command('ls') assert output - - uptime = utils.get_uptime() - assert uptime > 0 diff --git a/src/tacacs/pam/0010-handle-bad-password-set-by-sshd.patch b/src/tacacs/pam/0010-handle-bad-password-set-by-sshd.patch index 07134fd6fd5d..c4355d9a85da 100644 --- a/src/tacacs/pam/0010-handle-bad-password-set-by-sshd.patch +++ b/src/tacacs/pam/0010-handle-bad-password-set-by-sshd.patch @@ -1,6 +1,6 @@ -From 36f67d58c39a5aceeec3182e381735c8a4a0a657 Mon Sep 17 00:00:00 2001 +From ed8b0366d3dbe137752fbb37a4b9fd1d46402d5b Mon Sep 17 00:00:00 2001 From: Renuka Manavalan -Date: Fri, 5 Nov 2021 17:43:10 +0000 +Date: Fri, 18 Feb 2022 22:27:39 +0000 Subject: [PATCH] handle bad password set by sshd --- @@ -11,7 +11,7 @@ Subject: [PATCH] handle bad password set by sshd 4 files changed, 50 insertions(+), 5 deletions(-) diff --git a/pam_tacplus.c b/pam_tacplus.c -index d57657a..eb53c94 100644 +index d57657a..38b6ee3 100644 --- a/pam_tacplus.c +++ b/pam_tacplus.c @@ -248,6 +248,13 @@ int pam_sm_authenticate (pam_handle_t * pamh, int flags, @@ -19,7 +19,7 @@ index d57657a..eb53c94 100644 } + if (validate_not_sshd_bad_pass(pass) != PAM_SUCCESS) { -+ syslog(LOG_ERR, "auth fail: Password incorrect"); ++ syslog(LOG_LOCAL0|LOG_ERR, "auth fail: Password incorrect. user: %s", user); + memset(pass, 0, strlen (pass)); + free(pass); + return PAM_AUTH_ERR; @@ -47,10 +47,10 @@ index d57657a..eb53c94 100644 pass = NULL; } diff --git a/support.c b/support.c -index 1ea2e30..8a7dfbb 100644 +index f056ec4..81f3466 100644 --- a/support.c +++ b/support.c -@@ -114,6 +114,43 @@ int converse(pam_handle_t * pamh, int nargs, const struct pam_message *message, +@@ -117,6 +117,43 @@ int converse(pam_handle_t * pamh, int nargs, const struct pam_message *message, return retval; } @@ -94,7 +94,7 @@ index 1ea2e30..8a7dfbb 100644 /* stolen from pam_stress */ int tacacs_get_password (pam_handle_t * pamh, int flags ,int ctrl, char **password) { -@@ -436,4 +473,4 @@ int _pam_parse (int argc, const char **argv) { +@@ -459,4 +496,4 @@ int _pam_parse (int argc, const char **argv) { } return ctrl; diff --git a/src/thrift_0_13_0/.gitignore b/src/thrift_0_13_0/.gitignore deleted file mode 100644 index dc29c1367931..000000000000 --- a/src/thrift_0_13_0/.gitignore +++ /dev/null @@ -1 +0,0 @@ -thrift* \ No newline at end of file diff --git a/src/thrift_0_13_0/Makefile b/src/thrift_0_13_0/Makefile deleted file mode 100644 index 55cb4d9212ef..000000000000 --- a/src/thrift_0_13_0/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -SHELL = /bin/bash -.ONESHELL: -.SHELLFLAGS += -e -x - -THRIFT_VERSION = 0.13.0 -THRIFT_VERSION_FULL = $(THRIFT_VERSION)-6 - -MAIN_TARGET = libthrift-$(THRIFT_VERSION)_$(THRIFT_VERSION_FULL)_$(CONFIGURED_ARCH).deb -DERIVED_TARGETS = libthrift-dev_$(THRIFT_VERSION_FULL)_$(CONFIGURED_ARCH).deb \ - python3-thrift_$(THRIFT_VERSION_FULL)_$(CONFIGURED_ARCH).deb \ - thrift-compiler_$(THRIFT_VERSION_FULL)_$(CONFIGURED_ARCH).deb - -THRIFT_LINK_PRE = http://deb.debian.org/debian/pool/main/t/thrift/ - -$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : - rm -rf thrift-$(THRIFT_VERSION) - - wget -O "thrift_$(THRIFT_VERSION_FULL).debian.tar.xz" "$(THRIFT_LINK_PRE)/thrift_$(THRIFT_VERSION_FULL).debian.tar.xz" - wget -O "thrift_$(THRIFT_VERSION).orig.tar.gz" "$(THRIFT_LINK_PRE)/thrift_$(THRIFT_VERSION).orig.tar.gz" - wget -O "thrift_$(THRIFT_VERSION_FULL).dsc" "$(THRIFT_LINK_PRE)/thrift_$(THRIFT_VERSION_FULL).dsc" - - dpkg-source -x thrift_$(THRIFT_VERSION_FULL).dsc - pushd thrift-$(THRIFT_VERSION) - - # Disable php perl and few other packages as they need additional packages to be installed - patch -p1 < ../patch/0001-Remove-unneeded-packages.patch - DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -d -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) - popd - - mv $(DERIVED_TARGETS) $* $(DEST)/ - -$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) diff --git a/src/thrift_0_13_0/patch/0001-Remove-unneeded-packages.patch b/src/thrift_0_13_0/patch/0001-Remove-unneeded-packages.patch deleted file mode 100644 index f1565408a722..000000000000 --- a/src/thrift_0_13_0/patch/0001-Remove-unneeded-packages.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 7a8d588fa0425550cfd42c3300c8c0a643137190 Mon Sep 17 00:00:00 2001 -From: Myron Sosyak -Date: Fri, 13 Aug 2021 11:26:13 +0000 -Subject: [PATCH] Remove-unneeded-packages - ---- - debian/control | 28 ---------------------------- - debian/rules | 7 +++---- - 2 files changed, 3 insertions(+), 32 deletions(-) - -diff --git a/debian/control b/debian/control -index 5126e47..3f3028c 100644 ---- a/debian/control -+++ b/debian/control -@@ -13,8 +13,6 @@ Build-Depends: debhelper-compat (= 11), dh-python, - python3-all-dev, - python3-six, - golang-go, golang-github-golang-mock-dev, -- pkg-php-tools (>= 1.14~), php-dev, phpunit, php-codesniffer, -- perl (>= 5.22), libbit-vector-perl, libclass-accessor-perl, - # openjdk-11-jdk, javahelper, maven-debian-helper (>= 1.5), ant (>= 1.7), ant-optional, - # libhttpclient-java, libslf4j-java, libservlet3.1-java (>= 8), - # nodejs, npm, -@@ -175,32 +173,6 @@ Description: Python library for Thrift (debug symbols) - # . - # This package contains Javadoc HTML documentation for libthrift-java . - # --Package: php-thrift --Architecture: any --Section: php --Depends: ${phpcomposer:Debian-require}, ${shlibs:Depends}, ${misc:Depends} --Provides: ${php:Provides} --Conflicts: php7.0-thrift, php7.2-thrift --Replaces: php7.0-thrift, php7.2-thrift --Description: PHP language support for Thrift -- Thrift is a software framework for the development of reliable and -- performant communication and data serialization. It combines a software -- stack with code generation to build services that operate seamlessly -- across a number of different development languages. -- . -- This package provides the PHP5 language support for Thrift. -- --Package: libthrift-perl --Section: perl --Architecture: all --Depends: ${perl:Depends}, ${misc:Depends} --Description: Perl language support for Thrift -- Thrift is a software framework for the development of reliable and -- performant communication and data serialization. It combines a software -- stack with code generation to build services that operate seamlessly -- across a number of different development languages. -- . -- This package provides the Perl language support for Thrift. - - Package: golang-thrift-dev - Architecture: amd64 arm64 armel armhf i386 ppc64el -diff --git a/debian/rules b/debian/rules -index ba63e6f..8217796 100755 ---- a/debian/rules -+++ b/debian/rules -@@ -47,7 +47,6 @@ override_dh_auto_clean: - $(CURDIR)/lib/go/test/gopath/src/golang.org/x/net \ - $(CURDIR)/lib/go/test/gopath/src/github.com/golang/mock - [ ! -f Makefile ] || $(MAKE) clean -- cd $(CURDIR)/lib/php/src/ext/thrift_protocol/ && phpize --clean - find $(CURDIR) \( -name Makefile -o -name Makefile.in \) -exec rm {} \; - find $(CURDIR) -name .dirstamp -exec rm {} \; - $(RM) aclocal.m4 config.h config.log config.status configure \ -@@ -65,10 +64,10 @@ override_dh_auto_clean: - - override_dh_auto_configure: - dh_auto_configure -- \ -- --with-cpp --with-c_glib --with-php --with-php_extension \ -- --with-perl --without-python --with-py3 --without-java \ -+ --with-cpp --with-c_glib --without-php --without-php_extension \ -+ --without-perl --without-python --with-py3 --without-java \ - --without-nodejs --without-erlang --without-lua \ -- --with-go --with-ruby \ -+ --without-go --without-ruby \ - --with-qt4=no --with-qt5=yes \ - --without-rust \ - --disable-tutorial --- -2.17.1 - diff --git a/src/thrift_0_14_1/Makefile b/src/thrift_0_14_1/Makefile new file mode 100644 index 000000000000..081aff3f34bd --- /dev/null +++ b/src/thrift_0_14_1/Makefile @@ -0,0 +1,28 @@ +SHELL = /bin/bash +.ONESHELL: +.SHELLFLAGS += -e -x + +THRIFT_VERSION = 0.14.1 + +MAIN_TARGET = libthrift0_$(THRIFT_VERSION)_$(CONFIGURED_ARCH).deb +DERIVED_TARGETS = libthrift-dev_$(THRIFT_VERSION)_$(CONFIGURED_ARCH).deb \ + python3-thrift_$(THRIFT_VERSION)_$(CONFIGURED_ARCH).deb \ + thrift-compiler_$(THRIFT_VERSION)_$(CONFIGURED_ARCH).deb + +THRIFT_LINK_PRE = https://archive.apache.org/dist/thrift + +$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : + rm -rf thrift-$(THRIFT_VERSION) + + wget -O "thrift_$(THRIFT_VERSION).tar.gz" "$(THRIFT_LINK_PRE)/$(THRIFT_VERSION)/thrift-$(THRIFT_VERSION).tar.gz" + + tar -xvzf ./thrift_$(THRIFT_VERSION).tar.gz + if [ -f thrift.patch/series ]; then pushd thrift-$(THRIFT_VERSION) && QUILT_PATCHES=../thrift.patch quilt push -a; [ -d .pc ] && rm -rf .pc; popd; fi + + pushd thrift-$(THRIFT_VERSION) + DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -d -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + popd + + mv $(DERIVED_TARGETS) $* $(DEST)/ + +$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) diff --git a/src/thrift_0_14_1/thrift.patch/0001-Remove-unneeded-packages.patch b/src/thrift_0_14_1/thrift.patch/0001-Remove-unneeded-packages.patch new file mode 100644 index 000000000000..bafc81664c86 --- /dev/null +++ b/src/thrift_0_14_1/thrift.patch/0001-Remove-unneeded-packages.patch @@ -0,0 +1,118 @@ +From e9e789bdeb4eb3ae5bf905f83171c66558f29551 Mon Sep 17 00:00:00 2001 +From: Myron sosyak +Date: Fri, 28 Jan 2022 15:01:35 +0000 +Subject: [PATCH 1/2] Remove unneeded packages + +--- + debian/control | 83 +++----------------------------------------------- + 1 file changed, 5 insertions(+), 78 deletions(-) + +diff --git a/debian/control b/debian/control +index a9e934f17..752076582 100644 +--- a/debian/control ++++ b/debian/control +@@ -1,14 +1,12 @@ + Source: thrift + Section: devel + Priority: extra +-Build-Depends: dotnet-runtime-3.1, dotnet-sdk-3.1, debhelper (>= 9), build-essential, python-dev, ant, +- erlang-base, ruby-dev | ruby1.9.1-dev, ruby-bundler ,autoconf, automake, +- pkg-config, libtool, bison, flex, libboost-dev | libboost1.56-dev | libboost1.63-all-dev, +- python-all, python-setuptools, python-all-dev, python-all-dbg, ++Build-Depends: debhelper (>= 9), build-essential, python-dev, ++ autoconf, automake, ++ pkg-config, libtool, ++ python-all, python-setuptools, python-all-dev, + python3-all, python3-setuptools, python3-all-dev, python3-all-dbg, +- openjdk-8-jdk | openjdk-8-jdk-headless | openjdk-11-jdk | openjdk-11-jdk-headless | default-jdk, +- libboost-test-dev | libboost-test1.56-dev | libboost-test1.63-dev, libevent-dev, libssl-dev, perl (>= 5.8.0-7), +- php (>= 5), php-dev (>= 5), libglib2.0-dev, qtchooser, qtbase5-dev-tools ++ libevent-dev, libssl-dev, libglib2.0-dev + Maintainer: Thrift Developer's + Homepage: http://thrift.apache.org/ + Vcs-Git: https://github.com/apache/thrift.git +@@ -95,65 +93,6 @@ Description: Python bindings for Thrift (debug version) + definition to Python classes, and then the modules in this package will allow + you to use those classes in your programs. + +-Package: ruby-thrift +-Architecture: all +-Section: libs +-Depends: ruby | ruby-interpreter, ${shlibs:Depends}, ${misc:Depends} +-Provides: libthrift-ruby +-Replaces: libthrift-ruby +-Breaks: libthrift-ruby +-Description: Ruby bindings for Thrift +- Thrift is a software framework for scalable cross-language services +- development. It combines a software stack with a code generation engine to +- build services that work efficiently and seamlessly. +- . +- This package contains the Ruby bindings for Thrift. You will need the thrift +- tool (in the thrift-compiler package) to compile your definition to Ruby +- classes, and then the modules in this package will allow you to use those +- classes in your programs. +- +-Package: libthrift-java +-Architecture: all +-Section: java +-Depends: ${misc:Depends} +-Description: Java bindings for Thrift +- Thrift is a software framework for scalable cross-language services +- development. It combines a software stack with a code generation engine to +- build services that work efficiently and seamlessly. +- . +- This package contains the Java bindings for Thrift. You will need the thrift +- tool (in the thrift-compiler package) to compile your definition to Java +- classes, and then the modules in this package will allow you to use those +- classes in your programs. +- +-Package: libthrift-netstd +-Architecture: all +-Section: netstd +-Depends: dotnet-runtime-3.1, ${misc:Depends} +-Description: NET Standard bindings for Thrift +- Thrift is a software framework for scalable cross-language services +- development. It combines a software stack with a code generation engine to +- build services that work efficiently and seamlessly. +- . +- This package contains the NET Standard bindings for Thrift. You will need the thrift +- tool (in the thrift-compiler package) to compile your definition to C# +- classes, and then the modules in this package will allow you to use those +- classes in your programs. +- +-Package: libthrift-perl +-Architecture: all +-Section: perl +-Depends: perl (>= 5.8.0-7), ${misc:Depends} +-Description: Perl bindings for Thrift +- Thrift is a software framework for scalable cross-language services +- development. It combines a software stack with a code generation engine to +- build services that work efficiently and seamlessly. +- . +- This package contains the Perl bindings for Thrift. You will need the thrift +- tool (in the thrift-compiler package) to compile your definition to Perl +- classes, and then the modules in this package will allow you to use those +- classes in your programs. +- + Package: libthrift0 + Architecture: any + Depends: ${shlibs:Depends}, ${misc:Depends} +@@ -187,15 +126,3 @@ Description: Thrift C++ library (development headers) + . + This package contains the development libraries required for writing C++ + applications using Thrift. +- +-Package: php5-thrift +-Architecture: any +-Section: php +-Depends: ${php:Depends}, ${shlibs:Depends}, ${misc:Depends} +-Provides: ${php:Provides} +-Description: PHP bindings for Thrift +- Thrift is a software framework for scalable cross-language services +- development. It combines a software stack with a code generation engine to +- build services that work efficiently and seamlessly. +- . +- This package contains the PHP bindings for Thrift. +-- +2.17.1 + diff --git a/src/thrift_0_14_1/thrift.patch/0002-Fix-build-rules.patch b/src/thrift_0_14_1/thrift.patch/0002-Fix-build-rules.patch new file mode 100644 index 000000000000..77ab9c2b404f --- /dev/null +++ b/src/thrift_0_14_1/thrift.patch/0002-Fix-build-rules.patch @@ -0,0 +1,167 @@ +From 99e50d2dbc9e855e457c03e19c4c3b894ffcaa7a Mon Sep 17 00:00:00 2001 +From: Myron sosyak +Date: Fri, 28 Jan 2022 15:02:16 +0000 +Subject: [PATCH 2/2] Fix build rules + +--- + debian/libthrift0.install | 1 - + debian/rules | 83 +++++++++++---------------------------- + 2 files changed, 24 insertions(+), 60 deletions(-) + +diff --git a/debian/libthrift0.install b/debian/libthrift0.install +index ec74efc5c..d4ca21e5e 100644 +--- a/debian/libthrift0.install ++++ b/debian/libthrift0.install +@@ -1,5 +1,4 @@ + usr/lib/libthrift.so* + usr/lib/libthrift-*.so* + usr/lib/libthriftnb*.so* +-usr/lib/libthriftqt*.so* + usr/lib/libthriftz*.so* +diff --git a/debian/rules b/debian/rules +index d0de50872..3a50319ee 100755 +--- a/debian/rules ++++ b/debian/rules +@@ -16,7 +16,7 @@ + # This has to be exported to make some magic below work. + export DH_OPTIONS + +-PYVERS := $(shell pyversions -r) ++PYVERS := python2 python3 + + export CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS) + export CFLAGS:=$(shell dpkg-buildflags --get CFLAGS) +@@ -29,7 +29,13 @@ configure-stamp: + + # Add here commands to configure the package. + if [ -f bootstrap.sh ]; then $(CURDIR)/bootstrap.sh; fi +- $(CURDIR)/configure --prefix=/usr --enable-plugin=no ++ $(CURDIR)/configure --prefix=/usr --enable-plugin=no \ ++ --with-cpp --with-c_glib --with-py3 --with-python \ ++ --without-php_extension --without-perl \ ++ --without-php --without-java \ ++ --without-nodejs --without-erlang --without-lua \ ++ --without-go --without-ruby --with-qt4=no \ ++ --with-qt5=no --without-rust --disable-tutorial + + touch configure-stamp + +@@ -40,16 +46,7 @@ build: build-arch build-indep + # $(MAKE) -C test check + + build-arch: build-arch-stamp +-$(CURDIR)/compiler/cpp/thrift build-arch-stamp: configure-stamp +- +- # Compile compiler +- $(MAKE) -C $(CURDIR)/compiler/cpp +- +- # Compile C++ library +- $(MAKE) -C $(CURDIR)/lib/cpp +- +- # Compile C (glib) library +- $(MAKE) -C $(CURDIR)/lib/c_glib ++$(CURDIR)/compiler/cpp/thrift build-arch-stamp: configure-stamp build-libcpp-stamp build-libc-stamp build-compiler-stamp + + # Python library + cd $(CURDIR)/lib/py && \ +@@ -58,11 +55,22 @@ $(CURDIR)/compiler/cpp/thrift build-arch-stamp: configure-stamp + $$py-dbg setup.py build; \ + done + +- # PHP +- cd $(CURDIR)/lib/php/src/ext/thrift_protocol && \ +- phpize && \ +- ./configure && $(MAKE) ++ touch $@ + ++build-compiler-stamp: configure-stamp ++ # Compile compiler ++ $(MAKE) -C $(CURDIR)/compiler/cpp ++ touch $@ ++ ++ ++build-libcpp-stamp: configure-stamp build-compiler-stamp ++ # Compile C++ library ++ $(MAKE) -C $(CURDIR)/lib/cpp ++ touch $@ ++ ++build-libc-stamp: configure-stamp build-compiler-stamp ++ # Compile C (glib) library ++ $(MAKE) -C $(CURDIR)/lib/c_glib + touch $@ + + build-indep: build-indep-stamp +@@ -71,19 +79,6 @@ build-indep-stamp: configure-stamp $(CURDIR)/compiler/cpp/thrift + # Add here commands to compile the indep part of the package. + #$(MAKE) doc + +- # Java +- cd $(CURDIR)/lib/java && \ +- ./gradlew --no-daemon -Prelease=true jar +- +- # C# +- $(MAKE) -C $(CURDIR)/lib/netstd +- +- # Ruby +- $(MAKE) -C $(CURDIR)/lib/rb +- +- # Perl +- $(MAKE) -C $(CURDIR)/lib/perl INSTALLDIRS=vendor +- + touch $@ + + clean: +@@ -109,30 +104,6 @@ install-indep: + # debian/-doc. + #INSTALLDOC# + +- # Java +- mkdir -p $(CURDIR)/debian/libthrift-java/usr/share/java/ && \ +- cp $(CURDIR)/lib/java/build/libs/libthrift*.jar \ +- $(CURDIR)/debian/libthrift-java/usr/share/java/ +- +- # Ruby +- mkdir -p $(CURDIR)/debian/ruby-thrift/usr/lib/ruby/1.9.1 && \ +- cp $(CURDIR)/lib/rb/lib/thrift.rb \ +- $(CURDIR)/debian/ruby-thrift/usr/lib/ruby/1.9.1 +- cp -r $(CURDIR)/lib/rb/lib/thrift \ +- $(CURDIR)/debian/ruby-thrift/usr/lib/ruby/1.9.1 +- +- # C# +- mkdir -p $(CURDIR)/debian/libthrift-netstd/usr/lib/cli/thrift/ && \ +- cp $(CURDIR)/lib/netstd/Thrift/bin/Release/netstandard2.0/Thrift.dll \ +- $(CURDIR)/debian/libthrift-netstd/usr/lib/cli/thrift/Thrift.dll +- +- # Perl +- $(MAKE) -C $(CURDIR)/lib/perl install DESTDIR=$(CURDIR)/debian/libthrift-perl +- mkdir -p $(CURDIR)/debian/libthrift-perl/usr/share +- mv $(CURDIR)/debian/libthrift-perl/usr/local/lib/perl5 $(CURDIR)/debian/libthrift-perl/usr/share +- rmdir $(CURDIR)/debian/libthrift-perl/usr/local/lib +- rmdir $(CURDIR)/debian/libthrift-perl/usr/local +- + dh_install -i + + install-arch: +@@ -154,7 +125,6 @@ install-arch: + # Python + cd $(CURDIR)/lib/py && \ + python2 setup.py install --install-layout=deb --no-compile --root=$(CURDIR)/debian/python-thrift && \ +- python2-dbg setup.py install --install-layout=deb --no-compile --root=$(CURDIR)/debian/python-thrift-dbg && \ + python3 setup.py install --install-layout=deb --no-compile --root=$(CURDIR)/debian/python3-thrift && \ + python3-dbg setup.py install --install-layout=deb --no-compile --root=$(CURDIR)/debian/python3-thrift-dbg + +@@ -174,11 +144,6 @@ install-arch: + find $(CURDIR)/debian/python3-thrift-dbg -name "*.egg-info" -print0 | xargs -0 rm -rf + find $(CURDIR)/debian/python3-thrift-dbg -depth -type d -empty -exec rmdir {} \; + +- # PHP +- mkdir -p $(CURDIR)/debian/php5-thrift +- cd $(CURDIR)/lib/php && \ +- $(MAKE) DESTDIR=$(CURDIR)/debian/php5-thrift install +- + # C++ and C (glib) + mkdir -p $(CURDIR)/debian/tmp; \ + cd $(CURDIR)/lib/cpp && \ +-- +2.17.1 + diff --git a/src/thrift_0_14_1/thrift.patch/0003-Remove-minimist-packages.patch b/src/thrift_0_14_1/thrift.patch/0003-Remove-minimist-packages.patch new file mode 100644 index 000000000000..e94b1dfdd38a --- /dev/null +++ b/src/thrift_0_14_1/thrift.patch/0003-Remove-minimist-packages.patch @@ -0,0 +1,268 @@ +From f6fa1794539e68ac294038ac388d6bde40a6c237 Mar 2, 2021 00:00:00 +From: richardyu-ms +Date: Tue, 12 Apr 2022 15:46:16 +0000 +Subject: [PATCH] Fix security issue for package minimist + +--- +3 files changed, 9 insertions(+), 120 deletions(-) + +Index: thrift-0.14.1/lib/js/package-lock.json +=================================================================== +--- thrift-0.14.1.orig/lib/js/package-lock.json ++++ thrift-0.14.1/lib/js/package-lock.json +@@ -1037,16 +1037,7 @@ + "dev": true, + "requires": { + "acorn-node": "^1.6.1", +- "defined": "^1.0.0", +- "minimist": "^1.1.1" +- }, +- "dependencies": { +- "minimist": { +- "version": "1.2.0", +- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", +- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", +- "dev": true +- } ++ "defined": "^1.0.0" + } + }, + "diffie-hellman": { +@@ -2616,20 +2607,11 @@ + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", +- "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" +- }, +- "dependencies": { +- "minimist": { +- "version": "1.2.0", +- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", +- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", +- "dev": true +- } + } + }, + "micromatch": { +@@ -2690,12 +2672,6 @@ + "brace-expansion": "^1.1.7" + } + }, +- "minimist": { +- "version": "0.0.8", +- "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", +- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", +- "dev": true +- }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", +@@ -2721,10 +2697,7 @@ + "version": "0.5.1", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", +- "dev": true, +- "requires": { +- "minimist": "0.0.8" +- } ++ "dev": true + }, + "module-deps": { + "version": "6.2.2", +@@ -3971,18 +3944,7 @@ + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", +- "dev": true, +- "requires": { +- "minimist": "^1.1.0" +- }, +- "dependencies": { +- "minimist": { +- "version": "1.2.0", +- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", +- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", +- "dev": true +- } +- } ++ "dev": true + }, + "supports-color": { + "version": "5.5.0", +Index: thrift-0.14.1/lib/ts/package-lock.json +=================================================================== +--- thrift-0.14.1.orig/lib/ts/package-lock.json ++++ thrift-0.14.1/lib/ts/package-lock.json +@@ -1139,16 +1139,7 @@ + "dev": true, + "requires": { + "acorn-node": "^1.3.0", +- "defined": "^1.0.0", +- "minimist": "^1.1.1" +- }, +- "dependencies": { +- "minimist": { +- "version": "1.2.0", +- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", +- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", +- "dev": true +- } ++ "defined": "^1.0.0" + } + }, + "diagnostics": { +@@ -3032,20 +3023,11 @@ + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", +- "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" +- }, +- "dependencies": { +- "minimist": { +- "version": "1.2.0", +- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", +- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", +- "dev": true +- } + } + }, + "micromatch": { +@@ -3121,11 +3103,6 @@ + "brace-expansion": "^1.1.7" + } + }, +- "minimist": { +- "version": "0.0.8", +- "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", +- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" +- }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", +@@ -3150,10 +3127,7 @@ + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", +- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", +- "requires": { +- "minimist": "0.0.8" +- } ++ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=" + }, + "module-deps": { + "version": "6.2.0", +@@ -4396,18 +4370,7 @@ + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", +- "dev": true, +- "requires": { +- "minimist": "^1.1.0" +- }, +- "dependencies": { +- "minimist": { +- "version": "1.2.0", +- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", +- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", +- "dev": true +- } +- } ++ "dev": true + }, + "supports-color": { + "version": "5.5.0", +Index: thrift-0.14.1/package-lock.json +=================================================================== +--- thrift-0.14.1.orig/package-lock.json ++++ thrift-0.14.1/package-lock.json +@@ -1427,16 +1427,7 @@ + "integrity": "sha512-4vGP107UDhhNHeWA5N8j/nUPlQbtB/W/K2x/P7aElbWMWrOkJA0MRSVFsMFrTPSAAjZWCG9uki2+1cQDzFtVcQ==", + "dev": true, + "requires": { +- "html-validator": "3.1.3", +- "minimist": "1.2.0" +- }, +- "dependencies": { +- "minimist": { +- "version": "1.2.0", +- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", +- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", +- "dev": true +- } ++ "html-validator": "3.1.3" + } + }, + "http-signature": { +@@ -1920,18 +1911,7 @@ + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", +- "dev": true, +- "requires": { +- "minimist": "^1.2.0" +- }, +- "dependencies": { +- "minimist": { +- "version": "1.2.0", +- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", +- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", +- "dev": true +- } +- } ++ "dev": true + }, + "jsprim": { + "version": "1.4.1", +@@ -2072,20 +2052,11 @@ + "brace-expansion": "^1.1.7" + } + }, +- "minimist": { +- "version": "0.0.8", +- "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", +- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", +- "dev": true +- }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", +- "dev": true, +- "requires": { +- "minimist": "0.0.8" +- } ++ "dev": true + }, + "ms": { + "version": "2.0.0", +@@ -2790,7 +2761,6 @@ + "glob": "~7.1.2", + "has": "~1.0.3", + "inherits": "~2.0.3", +- "minimist": "~1.2.0", + "object-inspect": "~1.6.0", + "resolve": "~1.7.1", + "resumer": "~0.0.0", +@@ -2798,12 +2768,6 @@ + "through": "~2.3.8" + }, + "dependencies": { +- "minimist": { +- "version": "1.2.0", +- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", +- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", +- "dev": true +- }, + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", diff --git a/src/thrift_0_14_1/thrift.patch/series b/src/thrift_0_14_1/thrift.patch/series new file mode 100644 index 000000000000..9fe00d007f63 --- /dev/null +++ b/src/thrift_0_14_1/thrift.patch/series @@ -0,0 +1,3 @@ +0001-Remove-unneeded-packages.patch +0002-Fix-build-rules.patch +0003-Remove-minimist-packages.patch diff --git a/src/wpasupplicant/sonic-wpa-supplicant b/src/wpasupplicant/sonic-wpa-supplicant index 43611ef88ea5..f36c8c87702f 160000 --- a/src/wpasupplicant/sonic-wpa-supplicant +++ b/src/wpasupplicant/sonic-wpa-supplicant @@ -1 +1 @@ -Subproject commit 43611ef88ea5c87f675cab55e3208c9f16bdd583 +Subproject commit f36c8c87702fa1bc6d1f9b7193872285a41bd630